@realsee/five 6.8.0-alpha.21 → 6.8.0-alpha.23
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/ai_guides/features/gesture.md +1 -1
- package/ai_guides/release_notes/6.8.md +15 -4
- package/docs/assets/hierarchy.js +1 -1
- package/docs/assets/navigation.js +1 -1
- package/docs/assets/search.js +1 -1
- package/docs/classes/five.AdaptiveLuminancePass.html +1 -1
- package/docs/classes/five.BoundingMesh.html +1 -1
- package/docs/classes/five.EyeDomeLightingPass.html +1 -1
- package/docs/classes/five.Five.html +15 -15
- package/docs/classes/five.FivePass.html +1 -1
- package/docs/classes/five.Model.html +1 -1
- package/docs/classes/five.ModelScene.html +1 -1
- package/docs/classes/five.NetworkSubscribe.html +4 -4
- package/docs/classes/five.PBMContainer.html +1 -1
- package/docs/classes/five.PBMCustomShader.html +5 -5
- package/docs/classes/five.PBMGSObject.html +1 -1
- package/docs/classes/five.PBMGroup.html +1 -1
- package/docs/classes/five.PBMMesh.html +1 -1
- package/docs/classes/five.PBMMeshMaterial.html +1 -1
- package/docs/classes/five.PBMPanoFilter.html +5 -5
- package/docs/classes/five.PBMPointCloud.html +1 -1
- package/docs/classes/five.PBMPointCloudMaterial.html +1 -1
- package/docs/classes/five.PBMSkinnedMesh.html +1 -1
- package/docs/classes/five.PBMUpdateable.html +5 -5
- package/docs/classes/five.PanoCircleMesh.html +1 -1
- package/docs/classes/five.PanoCircleMeshCustom.html +1 -1
- package/docs/classes/five.PanoCircleMeshSolid.html +1 -1
- package/docs/classes/five.Parameter.html +1 -1
- package/docs/classes/five.Subscribe.html +5 -5
- package/docs/classes/five.Tile3D.html +1 -1
- package/docs/classes/five.TileNode.html +1 -1
- package/docs/classes/five.TrajectoryNode.html +1 -1
- package/docs/classes/five.Work.html +16 -16
- package/docs/classes/five.WorkResolvedObserver.html +26 -26
- package/docs/classes/gltf-loader.DDSLoader.html +1 -1
- package/docs/classes/gltf-loader.DRACOLoader.html +1 -1
- package/docs/classes/gltf-loader.GLTFObject.html +1 -1
- package/docs/classes/gltf-loader.THREEGLTFLoader.html +1 -1
- package/docs/classes/line.LineGeometry.html +1 -1
- package/docs/classes/line.LineMaterial.html +1 -1
- package/docs/classes/line.LineSegmentsGeometry.html +1 -1
- package/docs/classes/line.THREE_Line2.html +1 -1
- package/docs/classes/line.THREE_LineSegments2.html +1 -1
- package/docs/classes/plugins.RoundedBoxGeometry.html +1 -1
- package/docs/classes/vfx.Airflow.html +1 -1
- package/docs/classes/vfx.Flame.html +1 -1
- package/docs/classes/vfx.Particle.html +1 -1
- package/docs/classes/vfx.ParticleGPU.html +1 -1
- package/docs/classes/vfx.SpotLight.html +1 -1
- package/docs/documents/features_gesture.html +1 -1
- package/docs/documents/release_notes_6.8.html +16 -5
- package/docs/functions/five.parseWork.html +1 -1
- package/docs/functions/vue.useFiveWorks.html +2 -2
- package/docs/hierarchy.html +1 -1
- package/docs/interfaces/five.AddableObject.html +1 -1
- package/docs/interfaces/five.AjaxOptions.html +1 -1
- package/docs/interfaces/five.BaseEvent.html +7 -2
- package/docs/interfaces/five.EventCallback.html +6 -6
- package/docs/interfaces/five.GestureEvent.html +21 -2
- package/docs/interfaces/five.GesturePointer.html +20 -0
- package/docs/interfaces/five.ImageOptions.html +1 -1
- package/docs/interfaces/five.IntersectEvent.html +10 -2
- package/docs/interfaces/five.IntersectMesh.html +1 -1
- package/docs/interfaces/five.IntersectMeshInterface.html +1 -1
- package/docs/interfaces/five.Intersection.html +1 -1
- package/docs/interfaces/five.LooseWorkObserver.html +2 -2
- package/docs/interfaces/five.LooseWorkPanorama.html +2 -2
- package/docs/interfaces/five.LooseWorkWithExtrinsics.html +6 -6
- package/docs/interfaces/five.ModeChangeEvent.html +9 -2
- package/docs/interfaces/five.ModelControllerCustomInitArgs.html +1 -1
- package/docs/interfaces/five.ModelEvent.html +7 -2
- package/docs/interfaces/five.ModelSceneEvent.html +7 -2
- package/docs/interfaces/five.ModelTileEvent.html +7 -2
- package/docs/interfaces/five.MovePanoOptions.html +1 -1
- package/docs/interfaces/five.NetworkAbortError.html +1 -1
- package/docs/interfaces/five.NetworkFirbiddenError.html +1 -1
- package/docs/interfaces/five.NetworkOptions.html +1 -1
- package/docs/interfaces/five.NetworkProxyError.html +1 -1
- package/docs/interfaces/five.NetworkResourceEvent.html +7 -2
- package/docs/interfaces/five.NetworkResponseError.html +1 -1
- package/docs/interfaces/five.NetworkTimeoutError.html +1 -1
- package/docs/interfaces/five.ObjectEvent.html +7 -2
- package/docs/interfaces/five.PBMMaterial.html +1 -1
- package/docs/interfaces/five.PBMMeshMaterialParameters.html +1 -1
- package/docs/interfaces/five.PBMPointCloudMaterialParameters.html +1 -1
- package/docs/interfaces/five.PanoCircleMeshInterface.html +1 -1
- package/docs/interfaces/five.PanoEvent.html +13 -2
- package/docs/interfaces/five.PanoTextureEvent.html +11 -2
- package/docs/interfaces/five.PanoramaControllerCustomInitArgs.html +1 -1
- package/docs/interfaces/five.PanoramaLikeControllerCustomInitArgs.html +1 -1
- package/docs/interfaces/five.ParameterMaterialValue.html +1 -1
- package/docs/interfaces/five.ParameterTilesetValue.html +1 -1
- package/docs/interfaces/five.ParameterValue.html +1 -1
- package/docs/interfaces/five.Pose.html +1 -1
- package/docs/interfaces/five.RenderEvent.html +7 -2
- package/docs/interfaces/five.ResolvedParameterValue.html +1 -1
- package/docs/interfaces/five.State.html +1 -1
- package/docs/interfaces/five.StateEvent.html +9 -2
- package/docs/interfaces/five.TextureOptions.html +1 -1
- package/docs/interfaces/five.TopviewControllerCustomInitArgs.html +1 -1
- package/docs/interfaces/five.VRPanoramaControllerCustomInitArgs.html +1 -1
- package/docs/interfaces/five.ViewLayer.html +1 -1
- package/docs/interfaces/five.WorkCubeImage.html +3 -2
- package/docs/interfaces/five.WorkImage.html +6 -5
- package/docs/interfaces/five.WorkInitial.html +8 -8
- package/docs/interfaces/five.WorkModel.html +8 -8
- package/docs/interfaces/five.WorkModelLayer.html +6 -6
- package/docs/interfaces/five.WorkObserver.html +33 -33
- package/docs/interfaces/five.WorkObserverJson.html +2 -2
- package/docs/interfaces/five.WorkPanoramaJson.html +2 -2
- package/docs/interfaces/five.WorkTile.html +6 -5
- package/docs/interfaces/five.WorkVideo.html +4 -4
- package/docs/interfaces/five.WorksEvent.html +7 -2
- package/docs/interfaces/five.XRControllerEvent.html +10 -2
- package/docs/interfaces/five.XRControllerState.html +8 -0
- package/docs/interfaces/five.XRGestureEvent.html +13 -2
- package/docs/interfaces/five.XRPanoramaControllerCustomInitArgs.html +1 -1
- package/docs/interfaces/five.XRSessionEvent.html +9 -2
- package/docs/interfaces/plugins.BackgroundPluginController.html +1 -1
- package/docs/interfaces/plugins.BackgroundPluginType.EventMap.html +1 -1
- package/docs/interfaces/plugins.DynamicPathLinePluginController.html +1 -1
- package/docs/interfaces/plugins.DynamicPathLinePluginType.EventMap.html +1 -1
- package/docs/interfaces/plugins.DynamicPathLinePluginType.State.html +1 -1
- package/docs/interfaces/plugins.ItemMaskController.html +1 -1
- package/docs/interfaces/plugins.ItemMaskPluginType.EventMap.html +1 -1
- package/docs/interfaces/plugins.ItemMaskPluginType.State.html +1 -1
- package/docs/interfaces/plugins.OrientationPluginController.html +1 -1
- package/docs/interfaces/plugins.OrientationPluginType.EventMap.html +1 -1
- package/docs/interfaces/plugins.OrientationPluginType.State.html +1 -1
- package/docs/interfaces/plugins.PanoAnimeController.html +1 -1
- package/docs/interfaces/plugins.PanoAnimePluginType.EventMap.html +1 -1
- package/docs/interfaces/plugins.PanoAnimePluginType.State.html +1 -1
- package/docs/interfaces/plugins.PluginTemplateType.EventMap.html +1 -1
- package/docs/interfaces/plugins.PluginTemplateType.State.html +1 -1
- package/docs/interfaces/plugins.TrajectoryController.html +1 -1
- package/docs/interfaces/react.FiveInjectionTypes.html +15 -15
- package/docs/modules/five.html +1 -1
- package/docs/types/five.ControllerEventTypes.html +6 -6
- package/docs/types/five.ParseOptions.html +6 -6
- package/docs/types/five.WorkObserverProto.html +1 -0
- package/docs/variables/five.PROXY_CONTROLLER_EVENT_NAMES.html +1 -1
- package/five/application/events.d.ts +1 -1
- package/five/controllers/events.d.ts +2 -2
- package/five/index.d.ts +1 -1
- package/five/index.js +44 -44
- package/five/index.mjs +864 -863
- package/five/utils/event.d.ts +84 -47
- package/five/utils/subscribe.d.ts +2 -2
- package/five/work/index.d.ts +1 -0
- package/five/work/looseWorkType.d.ts +2 -2
- package/five/work/work.d.ts +5 -35
- package/five/work/workJsonType.d.ts +2 -2
- package/five/work/workObserverProto.d.ts +39 -0
- package/gltf-loader/index.js +3 -3
- package/gltf-loader/index.mjs +3 -3
- package/line/index.js +3 -3
- package/line/index.mjs +3 -3
- package/package.json +1 -1
- package/plugins/index.js +2 -2
- package/plugins/index.mjs +2 -2
- package/react/index.js +2 -2
- package/react/index.mjs +2 -2
- package/shader-lib/index.js +2 -2
- package/shader-lib/index.mjs +2 -2
- package/sticker/index.js +3 -3
- package/sticker/index.mjs +3 -3
- package/umd/five-gltf-loader.js +3 -3
- package/umd/five-line.js +3 -3
- package/umd/five-plugins.js +2 -2
- package/umd/five-react.js +2 -2
- package/umd/five-shader-lib.js +2 -2
- package/umd/five-sticker.js +3 -3
- package/umd/five-vfx.js +2 -2
- package/umd/five-vue.js +2 -2
- package/umd/five.js +10 -10
- package/vfx/index.js +2 -2
- package/vfx/index.mjs +2 -2
- package/vue/index.js +2 -2
- package/vue/index.mjs +2 -2
- package/work-downloader/index.js +2 -2
- package/work-downloader/index.mjs +2 -2
- package/five/work/workObserverUtils.d.ts +0 -36
package/umd/five.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @license
|
|
3
3
|
* @realsee/five
|
|
4
|
-
* Generated: 3/
|
|
5
|
-
* Version: 6.8.0-alpha.
|
|
4
|
+
* Generated: 3/20/2026
|
|
5
|
+
* Version: 6.8.0-alpha.23
|
|
6
6
|
* Terms:
|
|
7
7
|
* Realsee SDK License Agreement
|
|
8
8
|
* Update: July 28, 2021
|
|
@@ -299,7 +299,7 @@
|
|
|
299
299
|
`}else if(d===`subjectAltName`){var g=e(this.getExtSubjectAltName());o+=` `+g+`
|
|
300
300
|
`}else if(d===`cRLDistributionPoints`){var _=this.getExtCRLDistributionPoints();o+=n(_)}else if(d===`authorityInfoAccess`){var v=this.getExtAuthorityInfoAccess();o+=r(v)}else d===`certificatePolicies`&&(o+=t(this.getExtCertificatePolicies()))}}return o+=`signature algorithm: `+this.getSignatureAlgorithmName()+`
|
|
301
301
|
`,o+=`signature: `+this.getSignatureValueHex().substr(0,16)+`...
|
|
302
|
-
`,o},typeof e==`string`&&(e.indexOf(`-----BEGIN`)==-1?KJUR.lang.String.isHex(e)&&this.readCertHex(e):this.readCertPEM(e))}X509.hex2dn=function(e,t){t===void 0&&(t=0);var n=new X509;return ASN1HEX.getTLV(e,t),n.getX500Name(e).str},X509.hex2rdn=function(e,t){if(t===void 0&&(t=0),e.substr(t,2)!==`31`)throw Error(`malformed RDN`);for(var n=[],r=ASN1HEX.getChildIdx(e,t),o=0;o<r.length;o++)n.push(X509.hex2attrTypeValue(e,r[o]));return n=n.map(function(e){return e.replace(`+`,`\\+`)}),n.join(`+`)},X509.hex2attrTypeValue=function(e,t){var n=ASN1HEX,r=n.getV;if(t===void 0&&(t=0),e.substr(t,2)!==`30`)throw Error(`malformed attribute type and value`);var o=n.getChildIdx(e,t);o.length!==2||e.substr(o[0],2);var s=r(e,o[0]),c=KJUR.asn1.ASN1Util.oidHexToInt(s),l=KJUR.asn1.x509.OID.oid2atype(c),u=hextorstr(r(e,o[1]));return l+`=`+u},X509.getPublicKeyFromCertHex=function(e){var t=new X509;return t.readCertHex(e),t.getPublicKey()},X509.getPublicKeyFromCertPEM=function(e){var t=new X509;return t.readCertPEM(e),t.getPublicKey()},X509.getPublicKeyInfoPropOfCertPEM=function(e){var t=ASN1HEX.getVbyList,n={},r,o;return n.algparam=null,r=new X509,r.readCertPEM(e),o=r.getPublicKeyHex(),n.keyhex=t(o,0,[1],`03`).substr(2),n.algoid=t(o,0,[0,0],`06`),n.algoid===`2a8648ce3d0201`&&(n.algparam=t(o,0,[0,1],`06`)),n},X509.KEYUSAGE_NAME=[`digitalSignature`,`nonRepudiation`,`keyEncipherment`,`dataEncipherment`,`keyAgreement`,`keyCertSign`,`cRLSign`,`encipherOnly`,`decipherOnly`];function sha256(e){return CryptoJS.SHA256(e).toString()}var certificates=[(()=>{let e=new X509;return e.readCertPEM(function(...e){let t=113,n=126,r=0,o=``;return arguments[0].split(``).map(e=>e.charCodeAt(0)>126?e:String.fromCharCode((e.charCodeAt(0)+113)%126)).join(``)}(":::::ORTV[-PR_aVSVPNaR:::::ZVVS@ PPNErtNVONtVWNZR}@]nU\0ZaZN=TP`\0T`Vo@Q^ROPbNZVTSZ^P^fQc^^TRWQawR^ZNATN>bRPNU^zc}nzyg R^ZNATN>bROU^zc}nzyg R]ZN=TN>bRPtTn?bf?FZ_NQtfQc^^YQNq`gdSp?cyZ^P^fQc^^QQNWQ^aRvZPNTP`\0T`Vo@Q^RWN_fapzFqSFwfbOndSnzyuYz[oaNrS=\x07\\QN>Z N\\Q^B[QqnS=\b\\QN>Zwp\\Q^B[QqnZVTSZ^P^fQc^^TRWQawR^ZNATN>bRPNU^zc}nzyg R^ZNATN>bROU^zc}nzyg R]ZN=TN>bRPtTn?bf?FZ_NQtfQc^^YQNq`gdSp?cyZ^P^fQc^^QQNWQ^aRvZPNTP`\0T`Vo@Q^RWN_fapzFqSFwfbOndSnzyuYz[oaPPNvVQ^fWX|gVup[N^ROO^NQttV]NQPPNt|PttVONZU|C\b\\@@e^Xv{[vTtd8`nyO@\x07ebN[bqx=ng? S^w@|XAz|qUTwfzn]Bu<qs_ae\\y<}u`eRAoE`_\\s\0r|b{rp_o<oC@o=x\bw_cUUZPApQevD\\FxFo\x07FgE=<sq[p<coqyn>TEpP@aSC_YDU8\0|8TB?c>r\\=rp`pcwP}c\0PP_\\RS\\EPVSy8x`\0?R|NP P>}A^VP}Ex\bU\x07Za=syDw}>Ya\x078wPp[pRnn\brU^dE8U?a\bcW|<FEbbupn^`ZNr sof[wA}e{\\z}w[YDQ|dt=wC Nv\x07bR\x07Z@@U|ZAYpFsabCBB\\`wrqxsYW8uFyWdaWezeUeA_8VoVupvY[TD[OYdpO\bC[wX\\O]=[QRpV\0d`\x07N\0RXt^Z}vEpdC=\bY?\x07=V}?^W\bad|qN@Ww>@PycaqANE]asPcE^OB_VA?>wzeftac Z guf\bF]\x07DCP?znNYf uaYu[`\x07=b|v]Bp=RAS``\\PRDW]_`UXdUg=SuqwVFDeB D8{B>\\sPY\x07bEU FQXz\0@\x07`zsqgfD\0[WY\bPeZc} \0bx?Rfed\x07}BUe\x07|Uo\0y?\bsSXZOSBCgbFqf\0Bs?b?d<VE\\Zzns\\d@?dPvf\\{}_\0Sd[<q_YB\x07Y`Ffg=sY>{t<fu]x\x07rFNtZONNTwbQO\\ZO=TN>bqQt^dOOaAFXw= PCVxsv?{`a\bvS8YQ[aNsOt[cU`ZRTQNdtOaAFXw= PCVxsv?{`a\bvS8YQ[aNZOt[cU_ZROaNQN^U<ZN=TP`\0T`Vo@Q^ROPbNNAVPN^P\0{y\0Bs\\8\0R[z]w??qZP?NpgdenSuvv?>|f_?UpYPcQ\\gCb8zxtSvsOQNg>[\\\0\bx\b_o@8\0g`Z<PyUE`8yu}\\g{@`s`zUgErRtve{YdCvoO@>WFDtABNp\0feUWszpQaEYNAc]^xB[@]BDAN8\b}XA=E\x07nO}Pud8TA ?yPrVv{\\>E]o`BO^RE^X[W[rEU?x\bf>V OUwY=>X[\\E`tW[8}VwpF\x07BQcnrPF}yUtd8<Doe_\b[oOVU\x07ep@pYY\0cegY{r ?\bAbq?ff8}UaXoN_D]_X_8yozYFT`N{`\\{zvu?\bDWT}=_<\x07StX Nx\x07\0\b \0aT=c@ucnWfR[vf>RFxAFV}{N`dN^\\<eawBPxx}quT=|{T_R@Fp^Y<ZevRsWaZ]V CVrRVtAAc[ Qp|d|tqoQ=T|XX =u\\N8XNCx\\aU>wz X<e@Vc?dy\\|^FEq|=p`pBdF@bs^d<]vp\\^TZ P\bZ\b\\YNNSZ_\\w^|TsD8db _ Y\\o^Cw>Z\0x\\^aN]wWf\bA} C^d_{\x07ZC@\by]gY@E BFY?OsaqbDcVgQbZeFc ovtucxnq|<TnuyXRveYFOegCpAs{YTe|>bE<OXsSqCBWD_SVepfvCCUg]z ZvQ[\0s|U>pFz\b=OwT``fNJJ:::::R[Q-PR_aVSVPNaR:::::")),e})()];function getCertificateBySubjectHex(e,t){for(let n of t)if(n.getSubjectHex()===e)return n}function verifyCertificate_(e,t){let n=e.getIssuerHex();if(n===e.getSubjectHex())return e.verifySignature(e.getPublicKey());let r=getCertificateBySubjectHex(n,t);return!r||e.verifySignature(r.getPublicKey())===!1?!1:verifyCertificate_(r,t)}function verifyCertificate(e){return e.getIssuerHex()===e.getSubjectHex()?!1:verifyCertificate_(e,certificates)}function addCertificate(e){let t=new X509;typeof e==`string`?t.readCertPEM(e):t.readCertHex(e.hex);let n=verifyCertificate(t);return certificates.push(t),n}function verifyMessage(e,t,n){let r=new X509;if(typeof n==`string`?r.readCertPEM(n):r.readCertHex(n.hex),verifyCertificate(r)===!1)return!1;let o=new RSAKey;return o.readCertPubKeyHex(r.hex,6),!!o.verify(e,b64tohex(t))}addCertificate(function(...e){let t=113,n=126,r=0,o=``;return arguments[0].split(``).map(e=>e.charCodeAt(0)>126?e:String.fromCharCode((e.charCodeAt(0)+113)%126)).join(``)}(":::::ORTV[-PR_aVSVPNaR:::::ZVVTU PPONrtNVONtVWNW=_SVw VE=ZN=TP`\0T`Vo@Q^ROPbNZVTSZ^P^fQc^^TRWQawR^ZNATN>bRPNU^zc}nzyg R^ZNATN>bROU^zc}nzyg R]ZN=TN>bRPtTn?bf?FZ_NQtfQc^^YQNq`gdSp?cyZ^P^fQc^^QQNWQ^aRvZPNTP`\0T`Vo@Q^RWN_fapzFqSFwfbOndSnzyuYz[oaNrS=\bZQNAZaN\\aZ [QSnS=\b[aNBZQZ\\aZ [QSnZVTaZ^P^fQc^^TRWQawR^ZNATN>bRPNU^zc}nzyg R^ZNATN>bROU^zc}nzyg RbZOVTN>bRPtYoTyuoz}}f`Bwo?=\x07RQN\\Ot[cONZO>Wyfd\x07 gdb\x07RaN]Ot[cONZZPRuupz_@feWyZ`bVfWX|gVup[N^xOSugnec|fdy\x07ndB{^T\x07}fdB\0ndRf?FZVVPVwN[Otx\0uxvTF=ON^RSNN\\PNtENZVVPPtXPNtRN?=?]q[VD|{\\oyo`oOu}F SA\x07e`tn[t u\b8^a]qx\bE_^\x07ZN?[QC\0yuOpybY8r\\RPAS=8rUq\0E8>xean^e\bf]Y`XO}{C[Ur^?\0x[SRXvVQ\\CFr}QnAPRQ\x07FO=Yw\0_TePCOFV@|\x07N>ROXcDrT<>bW<ssO?NOT{^s]uU\0gS\bBffsfE\0AfDyQEZR`]XBo|Qw}yYdwwTvOFcBndUz^\\{] b=^yQYSTQ`]\0?tR{WRUun\\\0bVe_E|VWWV|r Ao\0 F`fdzCnRtq\br \b8eBp=Z\\TRaadc}@Eub`\x07quuNqAdF\0aUay{}x>tgVz` _YBFwu_q?egt8v[o\x008 wTQcrA <z{DZoEE^rZTrpaZQzqpBY]^zt8[bQv}yEWw XDYQB\0QB\bx_^X]|uEDtPf[n[r_bpB[bE}?ung|bnU|NYOoedY_tvXySZfYP\x07\x07dWV]OE^\bOFwA}<uXoO}_NDz8aon\x07zWOfcv@?>snfqu@FeEx^\\\bVfuO`\\\0tSg]zDU}QrAT| OZV|OvpVD<sN@z`<_cSrNCW>?=Au?g_8v{|}}WF>Sr>QBxO d_D}eBb?Uq^b [y}x]}{?P|BQtecTB[pQBW>|p|nfv\0zU\x07xOO}WqwE=<PURZy@X8r\\]u=<pPNRNNn\\OtaO<ZOETPdPT`NTT8RVOQ^^`SuO`gdSp?cyVRg\bo?B=VR[OZO=TN>bqQt^dOO`Fy\x07WadZcAD peXybcW@}Qf\\QNsOt[cU`ZRTQNdtOaAFXw= PCVxsv?{`a\bvS8YQ[aN]Ot[cU_ZONsEROaNQN^U<ZNTN>bqQ^RNVOOwN[Otx\0uxvTF=ON^SNN\\PNtRNrx a[}tP_g8FbD\0^\0qt<f88ufuN]^}]gp\bqYudF88Fas_Ef` ?^x>X}esa{>\\r?eE]CC_cZ[vQs >gX[szONg=^pn=<e]nbSz\bZvac\b[w^nA_`vP|@8w[}nQobe=??oRYf{vpRxcC}yCd>8[NDx{Ne\\t8oou=guC\x07>>g\x07vb}ACd ``Ntq\0yC[Q{|ynpNQqSqzxF<_PFDw<]Bnnu>F<XgU_Zf\\\\A=gu\\codOwQ]oQ<f>gv_pwozwC}xX>C`c]suEdfW?cbeo\b`BbyR@eFTUwSud=t]sS\\onc XSq {\0\x07DvAVBbnTqEE[QzDyqF`bF}R=Q?VeDo<Vzb\0w}D}NZ\0t}^?OyFP\bVaVNrTNYqe?[NRYTSQby@yzWvT`wQo}y]c_WgxBYCy RNRg@\x07NZCaaq8?` ^`?ryD =obzw?E]Ou\x07]n@>bVzqAQT?@_zo@}CxWVTUsAYdNd?{APQr8{P]]AZ>aR\0[D<z?Tr@`u@X|YDwd_<p<>zWE>]\0=X`\b@uucp|^_Qb@uZouTX^o\0\\{PCq{ug\x078^f[YQAWad8FNqxFQE?ZOo }RnO\bsQc xyccn=nxvs>bDBf\b\bW\\TuTnvAO^U\0QXC>xx8FxRFf<tJ:::::R[Q-PR_aVSVPNaR:::::"));var PBMGroup=class extends three.Group{},vertex_default$5=function(...e){let t=113,n=126,r=0,o=``;return e[0].split(``).map(e=>e.charCodeAt(0)>126?e:String.fromCharCode((e.charCodeAt(0)+113)%126)).join(``)}("n\bv{t-rpA-Sv{ny]|vv|{Hn\bv{t-rp@-PnzrnQvrpv|{H0v{pyqr-Ip|zz|{K0v{pyqr-Iz|}untrl}nlrr\x07K0v{pyqr-Ixv{{v{tl}nlrr\x07K0v{pyqr-Iy|tqr}uosl}nlrr\x07K0v{pyqr-Ipyv}}v{tl}yn{rl}nlrr\x07KZNV[lORS\\_R|vq-znv{56-\n--ZNV[l`aN_a--0v{pyqr-Ixv{onrlrr\x07K--0v{pyqr-Iortv{lrr\x07K--0v{pyqr-Iz|}untrlrr\x07K--0v{pyqr-Ixv{{v{tlrr\x07K--0v{pyqr-I}|wrplrr\x07K--0v{pyqr-Iy|tqr}uoslrr\x07K--0v{pyqr-Ipyv}}v{tl}yn{rlrr\x07K--Sv{ny]|vv|{-J-rpA5n{s|zrq9->;=6H--0vsqrs-b`RlV[`aN[PV[T----Sv{ny]|vv|{-J-v{n{prZnv\x07-7-Sv{ny]|vv|{H--0r{qvs--Sv{ny]|vv|{-J-z|qryZnv\x07-7-Sv{ny]|vv|{H--zn@-pnzrn_|nv|{Znv\x07-J-zn@5vrZnv\x07h=jh=j9-vrZnv\x07h>jh=j9-vrZnv\x07h?jh=j9-vrZnv\x07h=jh>j9-vrZnv\x07h>jh>j9-vrZnv\x07h?jh>j9-vrZnv\x07h=jh?j9-vrZnv\x07h>jh?j9-vrZnv\x07h?jh?j6H--PnzrnQvrpv|{-J-{|znyv r5pnzrn_|nv|{Znv\x07-7-rp@5=;=9-=;=9-:>;=66H--0v{pyqr-I|yq}|lrr\x07K--0v{pyqr-Is|tlrr\x07K--ZNV[lR[Q\f"),fragment_default$5=function(...e){let t=113,n=126,r=0,o=``;return e[0].split(``).map(e=>e.charCodeAt(0)>126?e:String.fromCharCode((e.charCodeAt(0)+113)%126)).join(``)}("0qrsv{r-OYNPXlP\\Y\\_-rpA5=;=EC9-=;>=C9-=;>AF9->;=60qrsv{r-a_N[`]N_R[alP\\Y\\_-rpA5=;=9-=;=9-=;=9-=;=60qrsv{r-SYV]lPbORlZN]-:>;=p-]n{|-\n--nz}yrPor-zn}H--sy|n-zn}`v rH--rpA-zn}Uv|tnzH-<<-}rnx-zrn{-zv{-zn\x07--znA-znv\x07H--sy|n- ||zH\fH{vs|z-]n{|-}n{|=H{vs|z-]n{|-}n{|>H0vs-qrsv{rq5b`Rl]N[\\lSVYaR_6--p-Svyr]nnz-\n----sy|n-nnv|{`nnv|{OvnH----sy|n-p|{nP|{nOvnH----nz}yr?Q-uvtuyvtu`unq|YZn}H----sy|n-p|y|arz}rnrOvnH----sy|n-p|y|av{OvnH--\fH--{vs|z-Svyr]nnz-}n{|SvyrH0r{qvsp-_rsv{rq`prr{-\n--nz}yr?Q-zn}H--znA-}|wrpv|{Znv\x07H--znA-znv\x07V{rrH--sy|n-|}npv\bH--sy|n-}n{|H\fH{vs|z-_rsv{rq`prr{-rsv{rq`prr{H{vs|z-sy|n-z|qryNy}unH{vs|z-sy|n-}|trHn\bv{t-rpA-Sv{ny]|vv|{Hn\bv{t-rp@-PnzrnQvrpv|{H{vs|z-sy|n-u|{Sy||V{qr\x07H{vs|z-rp?-r|yv|{H{vs|z-sy|n-}v\x07ry_nv|H0vs{qrs-SYNal`UNQRQ--n\bv{t-rp@-[|znyH0r{qvs0v{pyqr-Ip|zz|{K0v{pyqr-Iqvurv{tl}nlsntzr{K0v{pyqr-Is|tl}nlsntzr{K0v{pyqr-I}rpynzn}l}nlsntzr{K0v{pyqr-Iy|tqr}uosl}nlsntzr{K0v{pyqr-Ipyv}}v{tl}yn{rl}nlsntzr{Krp@- ||zcrp|5rp@-qvrpv|{9-rp@-rp|9-sy|n- ||z6-\n--sy|n-urn-J-q|5qvrpv|{9-rp|6H--rp@-q-J-qvrpv|{-7-urnH--rp@-}-J-rp|-:-qH--rp@-\0-J-}-<- ||zH--r{-{|znyv r5q-8-\x006H\frp@-to?u5rp@-p6-\n--rpA-X-J-rpA5=;=9-:>;=-<-@;=9-?;=-<-@;=9-:>;=6H--rpA-}-J-zv\x075rpA5p;ot9-X; 69-rpA5p;to9-X;\x07\b69-r}5p;o9-p;t66H--rpA-\0-J-zv\x075rpA5};\x07\b9-p;69-rpA5p;9-};\b \x0769-r}5};\x079-p;66H--sy|n-q-J-\0;\x07-:-zv{5\0;9-\0;\b6H--sy|n-r-J->;=r:>=H--r{-rp@5no5\0; -8-5\0;-:-\0;\b6-<-5C;=-7-q-8-r669-q-<-5\0;\x07-8-r69-\0;\x076H\frp@-u?to5rp@-p6-\n--rpA-X-J-rpA5>;=9-?;=-<-@;=9->;=-<-@;=9-@;=6H--rp@-}-J-no5snp5p;\x07\x07\x07-8-X;\x07\b 6-7-C;=-:-X;6H--r{-p; -7-zv\x075X;\x07\x07\x079-pynz}5}-:-X;\x07\x07\x079-=;=9->;=69-p;\b6H\f0vs-qrsv{rq5b`Rl]N[\\lSVYaR_6--rp@-svyrUvtuyvtu`unq|5rp@-p|y|9-rpA-uv|tnz6-\n----rp@-u-J-to?u5p|y|6H----u; -J-r\x07r?Q5}n{|Svyr;uvtuyvtu`unq|YZn}9-rp?5u; 9-=;=66;H----p|y|-J-u?to5u6H----r{-pynz}5p|y|9-=;=9->;=6H--\f--rp@-svyrP|y|arz}rnr5rp@-p|y|9-rpA-uv|tnz6-\n----sy|n-rz}rnrOvn-J-pynz}5}n{|Svyr;p|y|arz}rnrOvn9-:>==;=9->==;=6H----sy|n-`pnyr-J->;=-8-rz}rnrOvn-<-@==;=H----sy|n-o`pnyr-J->;=-:-rz}rnrOvn-<-@==;=H----p|y|;-J-p|y|;-7-`pnyrH----p|y|;o-J-p|y|;o-7-o`pnyrH----r{-pynz}5p|y|9-=;=9->;=6H--\f--rp@-svyrP|y|av{5rp@-p|y|9-rpA-uv|tnz6-\n----sy|n-v{Ovn-J-pynz}5}n{|Svyr;p|y|av{Ovn9-:>==;=9->==;=6H----rp@-pnyr-J-rp@5>;=6H----vs-5v{Ovn-K-=;=6-\n------pnyr;t-J->;=-:-v{Ovn-<-?==;=H----\f-ryr-\n------pnyr;-J->;=-8-v{Ovn-7-=;B-<-?==;=H------pnyr;t-J->;=-:-v{Ovn-7-=;B-<-?==;=H------pnyr;o-J->;=-8-v{Ovn-7-=;B-<-?==;=H----\f----p|y|-7J-pnyrH----r{-pynz}5p|y|9-=;=9->;=6H--\f--rp@-svyrP|y|5rp@-p|y|9-rpA-uv|tnz6-\n----rp@-to-J-p|y|H----to-J-svyrP|y|arz}rnr5to9-uv|tnz6H----to-J-svyrP|y|av{5to9-uv|tnz6H----r{-toH--\f--rp@-svyrP|{n5rp@-p|y|9-rpA-uv|tnz6-\n----sy|n-zrn{cny-J-uv|tnzh>jH----sy|n-zv{cny-J-uv|tnzh?jH----sy|n-zn\x07cny-J-uv|tnzh@jH----sy|n-p|{nOvn-J-pynz}5}n{|Svyr;p|{nP|{nOvn9-:>;=9->;=6H----sy|n-rqOvn-J->;=-7-p|{nOvn-8->;=H----sy|n-ovn`\0nrunys-J-p|{nOvn-7-p|{nOvn-<-?;=H----sy|n-y|}ry|-J-5rqOvn-:->;=6-<-zrn{cnyH----sy|n-y|}ruvtu-J-5>;=-:-rqOvn6-<-5>;=-:-zrn{cny6H----sy|n-ovn-J-5rqOvn-:-zrn{cny6-<-5>;=-:-zrn{cny6H----sy|n-pnyrlsnp|-J->;=-<-5zn\x07cny-:-zv{cny6H----rp@-ny-J-p|y|H----sy|n-zn\x07lny-J-zn\x075zn\x075p|y|;9-p|y|;t69-p|y|;o6H----vs-5p|{nOvn-I-=;=6-\n------ny-J-ny-7-5>;=-:-ovn`\0nrunys6-8-zn\x07lny-7-ovn`\0nrunysH----\f----rp@-rzn}-J-rp@5------5ny;-I-zrn{cny6-L-y|}ry|-7-ny;-8->;=-G-y|}ruvtu-7-ny;-8-ovn9------5ny;t-I-zrn{cny6-L-y|}ry|-7-ny;t-8->;=-G-y|}ruvtu-7-ny;t-8-ovn9------5ny;o-I-zrn{cny6-L-y|}ry|-7-ny;o-8->;=-G-y|}ruvtu-7-ny;o-8-ovn----6H----rp@-|`pnyr-J-rzn}-7-pnyrlsnp|H----p|y|-J-5ny-:-zrn{cny6-7-|`pnyr-8-zrn{cnyH----r{-pynz}5p|y|9-=;=9->;=6H--\f--rp@-svyr`nnv|{5rp@-p|y|9-rpA-uv|tnz6-\n----sy|n-nnv|{Ovn-J-pynz}5}n{|Svyr;nnv|{`nnv|{Ovn9-:>;=9->;=6H----sy|n-n`pnyr-J->;=-8-nnv|{OvnH----sy|n-yzv{n{pr-J-=;?FF-7-p|y|;-8-=;BED-7-p|y|;t-8-=;>>A-7-p|y|;oH----p|y|-J-5p|y|-:-yzv{n{pr6-7-n`pnyr-8-yzv{n{prH----r{-pynz}5p|y|9-=;=9->;=6H--\f--rp@-r\x07rpSvyr5rp@-p|y|9-rpA-uv|tnz6-\n----rp@-to-J-p|y|H----to-J-svyrUvtuyvtu`unq|5to9-uv|tnz6H----to-J-svyrP|y|5to9-uv|tnz6H----to-J-svyrP|{n5to9-uv|tnz6H----to-J-svyr`nnv|{5to9-uv|tnz6H----r{-toH--\f0r{qvsZNV[lORS\\_R|vq-znv{56-\n--ZNV[l`aN_a--0v{pyqr-Ipyv}}v{tl}yn{rlsntzr{K--0v{pyqr-Is|tlsntzr{K--0v{pyqr-I}rzyv}yvrqlny}unlsntzr{K--0v{pyqr-Iqvurv{tlsntzr{K--<<-JJJ-全景图-JJJ--rp@-}n{|=a|crr\x07-J-{|znyv r5Sv{ny]|vv|{;\x07\b -:-}n{|=;znv\x07h@j;\x07\b 6H--}n{|=a|crr\x07-J- ||zcrp|5PnzrnQvrpv|{9-}n{|=a|crr\x079-}n{|=; ||z6H--}n{|=a|crr\x07-J-}n{|=a|crr\x07-7-zn@5}n{|=;znv\x076H--rp@-}n{|>a|crr\x07-J-{|znyv r5Sv{ny]|vv|{;\x07\b -:-}n{|>;znv\x07h@j;\x07\b 6H--}n{|>a|crr\x07-J- ||zcrp|5PnzrnQvrpv|{9-}n{|>a|crr\x079-}n{|>; ||z6H--}n{|>a|crr\x07-J-}n{|>a|crr\x07-7-zn@5}n{|>;znv\x076H--rpA-}n{|=P|y|-J-r\x07rPor5}n{|=;zn}9-rp@5SYV]lPbORlZN]-7-}n{|=a|crr\x07;\x079-}n{|=a|crr\x07;\b 66H--rpA-}n{|>P|y|-J-r\x07rPor5}n{|>;zn}9-rp@5SYV]lPbORlZN]-7-}n{|>a|crr\x07;\x079-}n{|>a|crr\x07;\b 66H--<<-JJJ-全景图瓦片细化-JJJ--0vs-qrsv{rq5b`Rl_RSV[RQl`P_RR[6----rpA-rsv{rqPnzrn]|v|{-J-rsv{rq`prr{;znv\x07V{rr-7-Sv{ny]|vv|{H----sy|n-rsv{rqg||z-J-zv\x075}n{|=; ||z9-}n{|>; ||z9-rsv{rq`prr{;}n{|6H----rp@-rsv{rqPnzrncrr\x07-J-{|znyv r5rsv{rqPnzrn]|v|{;\x07\b 6H----rsv{rqPnzrncrr\x07-J- ||zcrp|5rp@5=;=9-=;=9->;=69-rsv{rqPnzrncrr\x079-rsv{rqg||z6H----rpA-rsv{rq]|v|{-J-rsv{rq`prr{;}|wrpv|{Znv\x07-7-rpA5rsv{rqPnzrncrr\x079->;=6H----rsv{rq]|v|{-J-rsv{rq]|v|{-<-rsv{rq]|v|{;H----rpA-rsv{rqP|y|-J-r\x07r?Q5rsv{rq`prr{;zn}9-5rsv{rq]|v|{;\x07\b-8->;=6-<-?;=6H----rsv{rqP|y|;n-J-rsv{rqP|y|;n-7-rsv{rq`prr{;|}npv\bH----sy|n-rsv{rq\\rsy|]|tr-J-r}5no5rsv{rq]|v|{;\x0769->;=6-7-r}5no5rsv{rq]|v|{;\b69->;=6-7-r}5rsv{rqPnzrn]|v|{; 9-=;=6H----rsv{rqP|y|-J-zv\x075a_N[`]N_R[alP\\Y\\_9-rsv{rqP|y|9-rsv{rq\\rsy|]|tr6H----rpA-rsv{rq]n{|=P|y|-J-zv\x075rsv{rqP|y|9-a_N[`]N_R[alP\\Y\\_9-rsv{rq`prr{;}n{|6H----rpA-rsv{rq]n{|>P|y|-J-zv\x075rsv{rqP|y|9-a_N[`]N_R[alP\\Y\\_9->;=-:-rsv{rq`prr{;}n{|6H----}n{|=P|y|-J-zv\x075}n{|=P|y|9-rpA5rsv{rq]n{|=P|y|;to9-}n{|=P|y|;n69-rsv{rq]n{|=P|y|;n6H----}n{|>P|y|-J-zv\x075}n{|>P|y|9-rpA5rsv{rq]n{|>P|y|;to9-}n{|>P|y|;n69-rsv{rq]n{|>P|y|;n6H--0r{qvs--<<-JJJ-全景图滤镜-JJJ--0vs-qrsv{rq5b`Rl]N[\\lSVYaR_6----}n{|=P|y|;to-J-r\x07rpSvyr5}n{|=P|y|;to9-}n{|=;zn}Uv|tnz6H----}n{|>P|y|;to-J-r\x07rpSvyr5}n{|>P|y|;to9-}n{|>;zn}Uv|tnz6H--0r{qvs--ZNV[l]N[\\lP\\Y\\_--<<-JJJ-全景图颜色混合-JJJ--rpA-}n{|P|y|H--0vs-qrsv{rq5b`RlOYNPXla_N[`VaV\\[6----sy|n-oynpx]|tr-J-np|5:?;=-7-}|tr-8->;=6H----}n{|P|y|-J-zv\x075}n{|=P|y|9-OYNPXlP\\Y\\_9-zv{5>;=9-oynpx]|tr66H----}n{|P|y|-J-zv\x075}n{|P|y|9-}n{|>P|y|9-zn\x075=;=9-oynpx]|tr-:-]V-8->;=66H--0ryvs-qrsv{rq5b`Rl`]_RNQla_N[`VaV\\[6----rp?-prr{Pr{rP||q-J-r|yv|{-7-}v\x07ry_nv|-<-?;=H----sy|n-n{vv|{_nqv-J-qvn{pr5rp?5=;=9-=;=69-prr{Pr{rP||q6-7->;?H----sy|n-n{vv|{]|tr-J--qvn{pr5tylSntP||q;\x07\b9-prr{Pr{rP||q6-<-n{vv|{_nqvH----}n{|P|y|-J-zv\x075}n{|=P|y|9-}n{|>P|y|9-z||ur}5=;=9-=;?9-}|tr-:-n{vv|{]|tr66H--0ryr----}n{|P|y|-J-zv\x075}n{|=P|y|9-}n{|>P|y|9-}|tr6H--0r{qvs--tylSntP|y|-J-zv\x075}n{|P|y|9-rpA5}n{|P|y|;to9-=;=69-pynz}5z|qryNy}un-7-@=;=9-=;=9->;=66H--<<-JJJJJJJJJJJJJJJJ--ZNV[lR[Q\f"),vertex_default$4=function(...e){let t=113,n=126,r=0,o=``;return e[0].split(``).map(e=>e.charCodeAt(0)>126?e:String.fromCharCode((e.charCodeAt(0)+113)%126)).join(``)}("0qrsv{r-ZN_Xl`aR]->;=0qrsv{r-_\\\\SlZN_X->;=nvor-sy|n-lsrnrlvqlznxHn\bv{t-sy|n-_||sZnxHn\bv{t-rpA-Sv{ny]|vv|{Hn\bv{t-rp@-PnzrnQvrpv|{Hn\bv{t-rp@-cvr]|vv|{H{vs|z-rp@-z|qryO|{qv{tZn\x07H{vs|z-rp@-z|qryO|{qv{tZv{H<<u调整{vs|z-sy|n-p|y|`nnv|{H{vs|z-sy|n-p|y|Ovtu{rH0vs{qrs-SYNal`UNQRQ--n\bv{t-rp@-[|znyH--0vsqrs-b`RlaN[TR[a----n\bv{t-rp@-an{tr{H----n\bv{t-rp@-Ovn{tr{H--0r{qvs0r{qvs0v{pyqr-Ip|zz|{K0v{pyqr-Il}nlrr\x07K0v{pyqr-I?l}nlrr\x07K0v{pyqr-Ir{zn}l}nlrr\x07K0v{pyqr-Ip|y|l}nlrr\x07K0v{pyqr-Is|tl}nlrr\x07K0v{pyqr-Iz|}untrl}nlrr\x07K0v{pyqr-Ixv{{v{tl}nlrr\x07K0v{pyqr-Iy|tqr}uosl}nlrr\x07K0v{pyqr-Ipyv}}v{tl}yn{rl}nlrr\x07KZNV[lORS\\_R|vq-znv{56-\n--ZNV[l`aN_a--0v{pyqr-Ilrr\x07K--0v{pyqr-I?lrr\x07K--0v{pyqr-Ip|y|lrr\x07K--0v{pyqr-Ixv{onrlrr\x07K--0v{pyqr-Iortv{{|znylrr\x07K--0v{pyqr-Iz|}u{|znylrr\x07K--0v{pyqr-Ixv{{|znylrr\x07K--0v{pyqr-Iqrsny{|znylrr\x07K--0vs{qrs-SYNal`UNQRQ-<<-[|zny-p|z}rq-vu-qrvnvr-ur{-SYNal`UNQRQ--[|zny-J-{|znyv r5-n{s|zrq[|zny-6H--0r{qvs--0v{pyqr-Iortv{lrr\x07K--0v{pyqr-Iz|}untrlrr\x07K--0v{pyqr-Ixv{{v{tlrr\x07K--0v{pyqr-I}|wrplrr\x07K--0v{pyqr-Iy|tqr}uoslrr\x07K--0v{pyqr-Ipyv}}v{tl}yn{rlrr\x07K--cvr]|vv|{-J-:z]|vv|{;\x07\b H--Sv{ny]|vv|{-J-rpA5n{s|zrq9->;=6H--0vsqrs-b`RlV[`aN[PV[T----Sv{ny]|vv|{-J-v{n{prZnv\x07-7-Sv{ny]|vv|{H--0r{qvs--Sv{ny]|vv|{-J-z|qryZnv\x07-7-Sv{ny]|vv|{H--zn@-pnzrn_|nv|{Znv\x07-J-zn@5vrZnv\x07h=jh=j9-vrZnv\x07h>jh=j9-vrZnv\x07h?jh=j9-vrZnv\x07h=jh>j9-vrZnv\x07h>jh>j9-vrZnv\x07h?jh>j9-vrZnv\x07h=jh?j9-vrZnv\x07h>jh?j9-vrZnv\x07h?jh?j6H--PnzrnQvrpv|{-J-{|znyv r5pnzrn_|nv|{Znv\x07-7-rp@5=;=9-=;=9-:>;=66H--_||sZnx-J-=;=H--0vs-qrsv{rq5b`RlcR_aRelZN_X6----_||sZnx-J-z||ur}5_\\\\SlZN_X-:-ZN_Xl`aR]9-_\\\\SlZN_X9-lsrnrlvqlznx6H--0r{qvs--0v{pyqr-I|yq}|lrr\x07K--0v{pyqr-Ir{zn}lrr\x07K--0v{pyqr-Is|tlrr\x07K--ZNV[lR[Q\f"),fragment_default$4=function(...e){let t=113,n=126,r=0,o=``;return e[0].split(``).map(e=>e.charCodeAt(0)>126?e:String.fromCharCode((e.charCodeAt(0)+113)%126)).join(``)}("0qrsv{r-OYNPXlP\\Y\\_-rpA5=;=EC9-=;>=C9-=;>AF9->;=60qrsv{r-a_N[`]N_R[alP\\Y\\_-rpA5=;=9-=;=9-=;=9-=;=60qrsv{r-SYV]lPbORlZN]-:>;=p-]n{|-\n--nz}yrPor-zn}H--sy|n-zn}`v rH--rpA-zn}Uv|tnzH-<<-}rnx-zrn{-zv{-zn\x07--znA-znv\x07H--sy|n- ||zH\fH{vs|z-]n{|-}n{|=H{vs|z-]n{|-}n{|>H0vs-qrsv{rq5b`Rl]N[\\lQR]aU6--p-]n{|Qr}u-\n----nz}yrPor-zn}H----sy|n-zn\x07Qr}uH--\fH--{vs|z-]n{|Qr}u-}n{|=Qr}uH--{vs|z-]n{|Qr}u-}n{|>Qr}uH0r{qvs0vs-qrsv{rq5b`Rl]N[\\lSVYaR_6--p-Svyr]nnz-\n----sy|n-nnv|{`nnv|{OvnH----sy|n-p|{nP|{nOvnH----nz}yr?Q-uvtuyvtu`unq|YZn}H----sy|n-p|y|arz}rnrOvnH----sy|n-p|y|av{OvnH--\fH--{vs|z-Svyr]nnz-}n{|SvyrH0r{qvs0vs-qrsv{rq5b`Rl_RSV[RQl`P_RR[6--p-_rsv{rq`prr{-\n----nz}yr?Q-zn}H----znA-}|wrpv|{Znv\x07H----znA-znv\x07V{rrH----sy|n-|}npv\bH----sy|n-}n{|H--\fH--{vs|z-_rsv{rq`prr{-rsv{rq`prr{H0r{qvs{vs|z-sy|n-sy||V{qr\x07H{vs|z-sy|n-z|qryNy}unH{vs|z-sy|n-}|trH0vs-qrsv{rq5b`RlP\\Y\\_lP\\[`aN[a6--{vs|z-rp@-p|{n{P|y|H0r{qvs0vs-qrsv{rq5b`RlP\\Y\\_lNYaVabQR6--{vs|z-nz}yr?Q-tnqvr{ar\x07rH0r{qvsp-Pyv}}r-\n--znA-znv\x07V{rrH--sy|n-sy||V{qr\x07H\fH0vs-[bZlPYV]]R_`-K-=--{vs|z-Pyv}}r-pyv}}rh[bZlPYV]]R_`jH0r{qvsn\bv{t-rpA-Sv{ny]|vv|{Hn\bv{t-rp@-PnzrnQvrpv|{Hn\bv{t-rp@-cvr]|vv|{Hn\bv{t-sy|n-_||sZnxH{vs|z-sy|n-u|{Sy||V{qr\x07H{vs|z-rp?-r|yv|{H{vs|z-sy|n-}v\x07ry_nv|H{vs|z-rp@-qvssrH{vs|z-sy|n-p|y|Ny}unH{vs|z-sy|n-|}npv\bH{vs|z-sy|n-ovtu{rH{vs|z-rp@-z|qryO|{qv{tZn\x07H{vs|z-rp@-z|qryO|{qv{tZv{H<<u调整{vs|z-sy|n-p|y|`nnv|{H{vs|z-sy|n-p|y|Ovtu{rH0vs{qrs-SYNal`UNQRQ--n\bv{t-rp@-[|znyH--0vsqrs-b`RlaN[TR[a----n\bv{t-rp@-an{tr{H----n\bv{t-rp@-Ovn{tr{H--0r{qvs0r{qvs0v{pyqr-Ip|zz|{K0v{pyqr-I}npxv{tK0v{pyqr-Iqvurv{tl}nlsntzr{K0v{pyqr-Ip|y|l}nlsntzr{K0v{pyqr-Il}nlsntzr{K0v{pyqr-I?l}nlsntzr{K0v{pyqr-Izn}l}nlsntzr{K0v{pyqr-Iny}unzn}l}nlsntzr{K0v{pyqr-In|zn}l}nlsntzr{K0v{pyqr-Iyvtuzn}l}nlsntzr{K0v{pyqr-Ir{zn}lp|zz|{l}nlsntzr{K0v{pyqr-Ir{zn}l}nlsntzr{K0v{pyqr-Iporllrsyrpv|{lsntzr{K0v{pyqr-Is|tl}nlsntzr{K0v{pyqr-I}rpynzn}l}nlsntzr{K0v{pyqr-Iy|tqr}uosl}nlsntzr{K0v{pyqr-Ipyv}}v{tl}yn{rl}nlsntzr{Krp@- ||zcrp|5rp@-qvrpv|{9-rp@-rp|9-sy|n- ||z6-\n--sy|n-urn-J-q|5qvrpv|{9-rp|6H--rp@-q-J-qvrpv|{-7-urnH--rp@-}-J-rp|-:-qH--rp@-\0-J-}-<- ||zH--r{-{|znyv r5q-8-\x006H\frp@-to?u5rp@-p6-\n--rpA-X-J-rpA5=;=9-:>;=-<-@;=9-?;=-<-@;=9-:>;=6H--rpA-}-J-zv\x075rpA5p;ot9-X; 69-rpA5p;to9-X;\x07\b69-r}5p;o9-p;t66H--rpA-\0-J-zv\x075rpA5};\x07\b9-p;69-rpA5p;9-};\b \x0769-r}5};\x079-p;66H--sy|n-q-J-\0;\x07-:-zv{5\0;9-\0;\b6H--sy|n-r-J->;=r:>=H--r{-rp@5no5\0; -8-5\0;-:-\0;\b6-<-5C;=-7-q-8-r669-q-<-5\0;\x07-8-r69-\0;\x076H\frp@-u?to5rp@-p6-\n--rpA-X-J-rpA5>;=9-?;=-<-@;=9->;=-<-@;=9-@;=6H--rp@-}-J-no5snp5p;\x07\x07\x07-8-X;\x07\b 6-7-C;=-:-X;6H--r{-p; -7-zv\x075X;\x07\x07\x079-pynz}5}-:-X;\x07\x07\x079-=;=9->;=69-p;\b6H\frp@-trP|y|O\bUrvtu5nz}yr?Q-tnqvr{ar\x07r9-rpA-Sv{ny]|vv|{6-\n--sy|n--J-5Sv{ny]|vv|{;\b-:-z|qryO|{qv{tZv{;\b6-<-5z|qryO|{qv{tZn\x07;\b-:-z|qryO|{qv{tZv{;\b6H--r{-r\x07r?Q5tnqvr{ar\x07r9-rp?59-=;B66;toH\f0vs-qrsv{rq5b`Rl]N[\\lSVYaR_6--rp@-svyrUvtuyvtu`unq|5rp@-p|y|9-rpA-uv|tnz6-\n----rp@-u-J-to?u5p|y|6H----u; -J-r\x07r?Q5}n{|Svyr;uvtuyvtu`unq|YZn}9-rp?5u; 9-=;=66;H----p|y|-J-u?to5u6H----r{-pynz}5p|y|9-=;=9->;=6H--\f--rp@-svyrP|y|arz}rnr5rp@-p|y|9-rpA-uv|tnz6-\n----sy|n-rz}rnrOvn-J-pynz}5}n{|Svyr;p|y|arz}rnrOvn9-:>==;=9->==;=6H----sy|n-`pnyr-J->;=-8-rz}rnrOvn-<-@==;=H----sy|n-o`pnyr-J->;=-:-rz}rnrOvn-<-@==;=H----p|y|;-J-p|y|;-7-`pnyrH----p|y|;o-J-p|y|;o-7-o`pnyrH----r{-pynz}5p|y|9-=;=9->;=6H--\f--rp@-svyrP|y|av{5rp@-p|y|9-rpA-uv|tnz6-\n----sy|n-v{Ovn-J-pynz}5}n{|Svyr;p|y|av{Ovn9-:>==;=9->==;=6H----rp@-pnyr-J-rp@5>;=6H----vs-5v{Ovn-K-=;=6-\n------pnyr;t-J->;=-:-v{Ovn-<-?==;=H----\f-ryr-\n------pnyr;-J->;=-8-v{Ovn-7-=;B-<-?==;=H------pnyr;t-J->;=-:-v{Ovn-7-=;B-<-?==;=H------pnyr;o-J->;=-8-v{Ovn-7-=;B-<-?==;=H----\f----p|y|-7J-pnyrH----r{-pynz}5p|y|9-=;=9->;=6H--\f--rp@-svyrP|y|5rp@-p|y|9-rpA-uv|tnz6-\n----rp@-to-J-p|y|H----to-J-svyrP|y|arz}rnr5to9-uv|tnz6H----to-J-svyrP|y|av{5to9-uv|tnz6H----r{-toH--\f--rp@-svyrP|{n5rp@-p|y|9-rpA-uv|tnz6-\n----sy|n-zrn{cny-J-uv|tnzh>jH----sy|n-zv{cny-J-uv|tnzh?jH----sy|n-zn\x07cny-J-uv|tnzh@jH----sy|n-p|{nOvn-J-pynz}5}n{|Svyr;p|{nP|{nOvn9-:>;=9->;=6H----sy|n-rqOvn-J->;=-7-p|{nOvn-8->;=H----sy|n-ovn`\0nrunys-J-p|{nOvn-7-p|{nOvn-<-?;=H----sy|n-y|}ry|-J-5rqOvn-:->;=6-<-zrn{cnyH----sy|n-y|}ruvtu-J-5>;=-:-rqOvn6-<-5>;=-:-zrn{cny6H----sy|n-ovn-J-5rqOvn-:-zrn{cny6-<-5>;=-:-zrn{cny6H----sy|n-pnyrlsnp|-J->;=-<-5zn\x07cny-:-zv{cny6H----rp@-ny-J-p|y|H----sy|n-zn\x07lny-J-zn\x075zn\x075p|y|;9-p|y|;t69-p|y|;o6H----vs-5p|{nOvn-I-=;=6-\n------ny-J-ny-7-5>;=-:-ovn`\0nrunys6-8-zn\x07lny-7-ovn`\0nrunysH----\f----rp@-rzn}-J-rp@5------5ny;-I-zrn{cny6-L-y|}ry|-7-ny;-8->;=-G-y|}ruvtu-7-ny;-8-ovn9------5ny;t-I-zrn{cny6-L-y|}ry|-7-ny;t-8->;=-G-y|}ruvtu-7-ny;t-8-ovn9------5ny;o-I-zrn{cny6-L-y|}ry|-7-ny;o-8->;=-G-y|}ruvtu-7-ny;o-8-ovn----6H----rp@-|`pnyr-J-rzn}-7-pnyrlsnp|H----p|y|-J-5ny-:-zrn{cny6-7-|`pnyr-8-zrn{cnyH----r{-pynz}5p|y|9-=;=9->;=6H--\f--rp@-svyr`nnv|{5rp@-p|y|9-rpA-uv|tnz6-\n----sy|n-nnv|{Ovn-J-pynz}5}n{|Svyr;nnv|{`nnv|{Ovn9-:>;=9->;=6H----sy|n-n`pnyr-J->;=-8-nnv|{OvnH----sy|n-yzv{n{pr-J-=;?FF-7-p|y|;-8-=;BED-7-p|y|;t-8-=;>>A-7-p|y|;oH----p|y|-J-5p|y|-:-yzv{n{pr6-7-n`pnyr-8-yzv{n{prH----r{-pynz}5p|y|9-=;=9->;=6H--\f--rp@-r\x07rpSvyr5rp@-p|y|9-rpA-uv|tnz6-\n----rp@-to-J-p|y|H----to-J-svyrUvtuyvtu`unq|5to9-uv|tnz6H----to-J-svyrP|y|5to9-uv|tnz6H----to-J-svyrP|{n5to9-uv|tnz6H----to-J-svyr`nnv|{5to9-uv|tnz6H----r{-toH--\f0r{qvsZNV[lORS\\_R|vq-znv{56-\n--ZNV[l`aN_a--<<-JJJ-楼层-JJJ--o||y-vPr{Sy||-J-u|{Sy||V{qr\x07-I-:=;=>-\v\v-no5sy||V{qr\x07-:-u|{Sy||V{qr\x076-I-=;FFH--sy|n-sy||\\}npv\b-J->;=H--vs-5.vPr{Sy||6-\n----0vs-qrsv{rq5b`RlSY\\\\_l`afYRlcV`VOVYVaf6------qvpnqH----0r{qvs----sy||\\}npv\b-J-pynz}5=;?-7-zv{55>;=-8-PnzrnQvrpv|{;\b69->;=69-=;=9->;=6H--\f--<<-JJJJJJJJJJJ--<<-JJJ-顶部裁切-JJJ--sy|n-||sP]|tr-J-}|5pynz}5:PnzrnQvrpv|{;\b9-=;=9->;=69-@;=6H--vs-5----_||sZnx-K-=;==>-33----Sv{ny]|vv|{;\b-K-z|qryO|{qv{tZn\x07;\b-:-||sP]|tr-7-5z|qryO|{qv{tZn\x07;\b-:-z|qryO|{qv{tZv{;\b6--6-\n----qvpnqH--\f--<<-JJJJJJJJJJJJJJ--<<-JJJ-前置裁切计算-JJJ--0vs-[bZlPYV]]R_`-K-=----o||y-pyv}}rqH----rpA-pyv}}r]|vv|{H----0}ntzn-{|yyly||}ln----s|-5-v{-v-J-=H-v-I-[bZlPYV]]R_`H-v-88-6-\n------pyv}}r]|vv|{-J-pyv}}rh-v-j;znv\x07V{rr-7-Sv{ny]|vv|{H------pyv}}rq-J-5pyv}}rh-v-j;sy||V{qr\x07-I-=;=-\v\v-no5sy||V{qr\x07-:-pyv}}rh-v-j;sy||V{qr\x076-I->;=6H------pyv}}rq-J-pyv}}rq-33-pyv}}r]|vv|{;\x07-K-:=;B-33-pyv}}r]|vv|{;\x07-I-=;BH------pyv}}rq-J-pyv}}rq-33-pyv}}r]|vv|{;\b-K-:=;B-33-pyv}}r]|vv|{;\b-I-=;BH------pyv}}rq-J-pyv}}rq-33-pyv}}r]|vv|{; -K-:=;B-33-pyv}}r]|vv|{; -I-=;BH------vs-5pyv}}rq6-\n--------qvpnqH------\f----\f----0}ntzn-{|yyly||}lr{q--0r{qvs--<<-JJJJJJJJJJJJJJJJJJ--0v{pyqr-Ipyv}}v{tl}yn{rlsntzr{K--rpA-qvssrP|y|-J-rpA5-qvssr9-p|y|Ny}un-7-|}npv\b-6H--<<-JJJ-高度色-JJJ--0vs-qrsv{rq5b`RlP\\Y\\_lNYaVabQR6----qvssrP|y|;to-J-trP|y|O\bUrvtu5tnqvr{ar\x07r9-Sv{ny]|vv|{6H--0r{qvs--<<-JJJJJJJJJJJ--<<-JJJ-纯色-JJJ--0vs-qrsv{rq5b`RlP\\Y\\_lP\\[`aN[a6----qvssrP|y|;to-J-p|{n{P|y|H--0r{qvs--<<-JJJJJJJJJJJ--0v{pyqr-Iy|tqr}uoslsntzr{K--0v{pyqr-Izn}lsntzr{K--0v{pyqr-Ip|y|lsntzr{K--0v{pyqr-Iny}unzn}lsntzr{K--0v{pyqr-Iny}unrlsntzr{K--0v{pyqr-I}rpynzn}lsntzr{K--0v{pyqr-I{|znylsntzr{lortv{K--_rsyrprqYvtu-rsyrprqYvtu-J-_rsyrprqYvtu5-rp@5-=;=-69-rp@5-=;=-69-rp@5-=;=-69-rp@5-=;=-6-6H--<<-nppzynv|{-5onxrq-v{qvrp-yvtuv{t-|{y\b6--0vsqrs-b`RlYVTUaZN]----rpA-yvtuZn}ar\x07ryJ-r\x07r?Q5-yvtuZn}9-b?-6H----rsyrprqYvtu;v{qvrpQvssr-8J-yvtuZn}ar\x07rya|Yv{rn5-yvtuZn}ar\x07ry-6;to-7-yvtuZn}V{r{v\bH--0ryr----rsyrprqYvtu;v{qvrpQvssr-8J-rp@5->;=-6H--0r{qvs--<<-z|qynv|{--0v{pyqr-In|zn}lsntzr{K--rsyrprqYvtu;v{qvrpQvssr-7J-qvssrP|y|;toH--rp@-|t|v{tYvtu-J-rsyrprqYvtu;v{qvrpQvssrH--0v{pyqr-Ir{zn}lsntzr{K--qvssrP|y|;n-J-qvssrP|y|;n-7-sy||\\}npv\b-7-ovtu{rH--0vs-qrsv{rq5b`Rl\\]N^bR6----qvssrP|y|;n-J->;=H--0r{qvs--tylSntP|y|-J-rpA5-|t|v{tYvtu9-qvssrP|y|;n-6H--<<-JJJ-颜色增益调整-JJJ--0vs-qrsv{rq5b`RlP\\Y\\_lNQWb`aZR[a6----rp@-uP|y|-J-to?u5tylSntP|y|;to6H----uP|y|;\b-8J-p|y|`nnv|{H----uP|y|; -8J-p|y|Ovtu{rH----tylSntP|y|;to-J-zn\x075u?to5uP|y|69-=;=6H--0r{qvs--<<-JJJJJJJJJJJJJJJJJJ--ZNV[lZ\\QRYlP\\Y\\_--<<色调映射-色彩空间转换--0v{pyqr-I|{rzn}}v{tlsntzr{K--0v{pyqr-Ir{p|qv{tlsntzr{K--0v{pyqr-Is|tlsntzr{K--0v{pyqr-I}rzyv}yvrqlny}unlsntzr{K--0v{pyqr-Iqvurv{tlsntzr{K--<<-JJJ-全景图-JJJ--rp@-}n{|=a|crr\x07-J-{|znyv r5Sv{ny]|vv|{;\x07\b -:-}n{|=;znv\x07h@j;\x07\b 6H--}n{|=a|crr\x07-J- ||zcrp|5PnzrnQvrpv|{9-}n{|=a|crr\x079-}n{|=; ||z6H--}n{|=a|crr\x07-J-}n{|=a|crr\x07-7-zn@5}n{|=;znv\x076H--rp@-}n{|>a|crr\x07-J-{|znyv r5Sv{ny]|vv|{;\x07\b -:-}n{|>;znv\x07h@j;\x07\b 6H--}n{|>a|crr\x07-J- ||zcrp|5PnzrnQvrpv|{9-}n{|>a|crr\x079-}n{|>; ||z6H--}n{|>a|crr\x07-J-}n{|>a|crr\x07-7-zn@5}n{|>;znv\x076H--rpA-}n{|=P|y|-J-r\x07rPor5}n{|=;zn}9-rp@5SYV]lPbORlZN]-7-}n{|=a|crr\x07;\x079-}n{|=a|crr\x07;\b 66H--rpA-}n{|>P|y|-J-r\x07rPor5}n{|>;zn}9-rp@5SYV]lPbORlZN]-7-}n{|>a|crr\x07;\x079-}n{|>a|crr\x07;\b 66H--<<-JJJ-全景图瓦片细化-JJJ--0vs-qrsv{rq5b`Rl_RSV[RQl`P_RR[6----rpA-rsv{rqPnzrn]|v|{-J-rsv{rq`prr{;znv\x07V{rr-7-Sv{ny]|vv|{H----sy|n-rsv{rqg||z-J-zv\x075}n{|=; ||z9-}n{|>; ||z9-rsv{rq`prr{;}n{|6H----rp@-rsv{rqPnzrncrr\x07-J-{|znyv r5rsv{rqPnzrn]|v|{;\x07\b 6H----rsv{rqPnzrncrr\x07-J- ||zcrp|5rp@5=;=9-=;=9->;=69-rsv{rqPnzrncrr\x079-rsv{rqg||z6H----rpA-rsv{rq]|v|{-J-rsv{rq`prr{;}|wrpv|{Znv\x07-7-rpA5rsv{rqPnzrncrr\x079->;=6H----rsv{rq]|v|{-J-rsv{rq]|v|{-<-rsv{rq]|v|{;H----rpA-rsv{rqP|y|-J-r\x07r?Q5rsv{rq`prr{;zn}9-5rsv{rq]|v|{;\x07\b-8->;=6-<-?;=6H----rsv{rqP|y|;n-J-rsv{rqP|y|;n-7-rsv{rq`prr{;|}npv\bH----sy|n-rsv{rq\\rsy|]|tr-J-r}5no5rsv{rq]|v|{;\x0769->;=6-7-r}5no5rsv{rq]|v|{;\b69->;=6-7-r}5rsv{rqPnzrn]|v|{; 9-=;=6H----rsv{rqP|y|-J-zv\x075a_N[`]N_R[alP\\Y\\_9-rsv{rqP|y|9-rsv{rq\\rsy|]|tr6H----rpA-rsv{rq]n{|=P|y|-J-zv\x075rsv{rqP|y|9-a_N[`]N_R[alP\\Y\\_9-rsv{rq`prr{;}n{|6H----rpA-rsv{rq]n{|>P|y|-J-zv\x075rsv{rqP|y|9-a_N[`]N_R[alP\\Y\\_9->;=-:-rsv{rq`prr{;}n{|6H----}n{|=P|y|-J-zv\x075}n{|=P|y|9-rpA5rsv{rq]n{|=P|y|;to9-}n{|=P|y|;n69-rsv{rq]n{|=P|y|;n6H----}n{|>P|y|-J-zv\x075}n{|>P|y|9-rpA5rsv{rq]n{|>P|y|;to9-}n{|>P|y|;n69-rsv{rq]n{|>P|y|;n6H--0r{qvs--<<-JJJ-全景图滤镜-JJJ--0vs-qrsv{rq5b`Rl]N[\\lSVYaR_6----}n{|=P|y|;to-J-r\x07rpSvyr5}n{|=P|y|;to9-}n{|=;zn}Uv|tnz6H----}n{|>P|y|;to-J-r\x07rpSvyr5}n{|>P|y|;to9-}n{|>;zn}Uv|tnz6H--0r{qvs--ZNV[l]N[\\lP\\Y\\_--<<-JJJ-运动过程全景图通过深度剔除-JJJ--0vs-qrsv{rq5b`Rl]N[\\lQR]aU6----sy|n-}n{|=crr\x07Qr}u-J-pynz}5yr{tu5Sv{ny]|vv|{;\x07\b -:-}n{|=;znv\x07h@j;\x07\b 69-=;=9-}n{|=Qr}u;zn\x07Qr}u6H----sy|n-}n{|>crr\x07Qr}u-J-pynz}5yr{tu5Sv{ny]|vv|{;\x07\b -:-}n{|>;znv\x07h@j;\x07\b 69-=;=9-}n{|>Qr}u;zn\x07Qr}u6H----sy|n-}n{|=Qr}uZn}Qr}u-J-{}npx_TONa|Qr}u5r\x07rPor5}n{|=Qr}u;zn}9-}n{|=a|crr\x0766-7-}n{|=Qr}u;zn\x07Qr}uH----sy|n-}n{|>Qr}uZn}Qr}u-J-{}npx_TONa|Qr}u5r\x07rPor5}n{|>Qr}u;zn}9-}n{|>a|crr\x0766-7-}n{|>Qr}u;zn\x07Qr}uH----sy|n-}n{|=Qr}uQryn-J-no5}n{|=Qr}uZn}Qr}u-:-}n{|=crr\x07Qr}u6H----sy|n-}n{|>Qr}uQryn-J-no5}n{|>Qr}uZn}Qr}u-:-}n{|>crr\x07Qr}u6H----sy|n-zn\x07]n{|=Qr}uQryn-J-=;=@-7-}n{|=crr\x07Qr}uH----sy|n-zn\x07]n{|>Qr}uQryn-J-=;=@-7-}n{|>crr\x07Qr}uH----}n{|=P|y|-J-zv\x075}n{|=P|y|9-zv\x075}n{|=P|y|9-tylSntP|y|9-pynz}5}|tr-7->=;=9-=;=9->;=669-r}5zn\x07]n{|=Qr}uQryn9-}n{|=Qr}uQryn66H----}n{|>P|y|-J-zv\x075}n{|>P|y|9-zv\x075}n{|>P|y|9-tylSntP|y|9-pynz}55>;=-:-}|tr6-7->=;=9-=;=9->;=669-r}5zn\x07]n{|>Qr}uQryn9-}n{|>Qr}uQryn66H--0r{qvs--<<-JJJ-全景图颜色混合-JJJ--rpA-}n{|P|y|H--0vs-qrsv{rq5b`RlOYNPXla_N[`VaV\\[6----sy|n-oynpx]|tr-J-np|5:?;=-7-}|tr-8->;=6H----}n{|P|y|-J-zv\x075}n{|=P|y|9-OYNPXlP\\Y\\_9-zv{5>;=9-oynpx]|tr66H----}n{|P|y|-J-zv\x075}n{|P|y|9-}n{|>P|y|9-zn\x075=;=9-oynpx]|tr-:-]V-8->;=66H--0ryvs-qrsv{rq5b`Rl`]_RNQla_N[`VaV\\[6----rp?-prr{Pr{rP||q-J-r|yv|{-7-}v\x07ry_nv|-<-?;=H----sy|n-n{vv|{_nqv-J-qvn{pr5rp?5=;=9-=;=69-prr{Pr{rP||q6-7->;?H----sy|n-n{vv|{]|tr-J-qvn{pr5tylSntP||q;\x07\b9-prr{Pr{rP||q6-<-n{vv|{_nqvH----}n{|P|y|-J-zv\x075}n{|=P|y|9-}n{|>P|y|9-z||ur}5=;=9-=;?9-}|tr-:-n{vv|{]|tr66H--0ryr----}n{|P|y|-J-zv\x075}n{|=P|y|9-}n{|>P|y|9-}|tr6H--0r{qvs--tylSntP|y|-J-zv\x075}n{|P|y|9-tylSntP|y|9-z|qryNy}un6H--ZNV[lR[Q\f"),vertex_default$3=function(...e){let t=113,n=126,r=0,o=``;return e[0].split(``).map(e=>e.charCodeAt(0)>126?e:String.fromCharCode((e.charCodeAt(0)+113)%126)).join(``)}("0qrsv{r-]U\\[T0qrsv{r-ZN_Xl`aR]->;=0qrsv{r-_\\\\SlZN_X->;=nvor-sy|n-lsrnrlvqlznxHn\bv{t-sy|n-_||sZnxHn\bv{t-rpA-Sv{ny]|vv|{Hn\bv{t-rp@-PnzrnQvrpv|{Hn\bv{t-rp@-cvr]|vv|{H{vs|z-rp@-z|qryO|{qv{tZn\x07H{vs|z-rp@-z|qryO|{qv{tZv{H<<u调整{vs|z-sy|n-p|y|`nnv|{H{vs|z-sy|n-p|y|Ovtu{rH0vs{qrs-SYNal`UNQRQ--n\bv{t-rp@-[|znyH--0vsqrs-b`RlaN[TR[a----n\bv{t-rp@-an{tr{H----n\bv{t-rp@-Ovn{tr{H--0r{qvs0r{qvs0v{pyqr-Ip|zz|{K0v{pyqr-Il}nlrr\x07K0v{pyqr-I?l}nlrr\x07K0v{pyqr-Iqv}ynprzr{zn}l}nlrr\x07K0v{pyqr-Ir{zn}l}nlrr\x07K0v{pyqr-Ip|y|l}nlrr\x07K0v{pyqr-Is|tl}nlrr\x07K0v{pyqr-Iz|}untrl}nlrr\x07K0v{pyqr-Ixv{{v{tl}nlrr\x07K0v{pyqr-Iunq|zn}l}nlrr\x07K0v{pyqr-Iy|tqr}uosl}nlrr\x07K0v{pyqr-Ipyv}}v{tl}yn{rl}nlrr\x07KZNV[lORS\\_R|vq-znv{56-\n--ZNV[l`aN_a--0v{pyqr-Ilrr\x07K--0v{pyqr-I?lrr\x07K--0v{pyqr-Ip|y|lrr\x07K--0v{pyqr-Iortv{{|znylrr\x07K--0v{pyqr-Iz|}u{|znylrr\x07K--0v{pyqr-Ixv{onrlrr\x07K--0v{pyqr-Ixv{{|znylrr\x07K--0v{pyqr-Iqrsny{|znylrr\x07K--0vs{qrs-SYNal`UNQRQ-<<-[|zny-p|z}rq-vu-qrvnvr-ur{-SYNal`UNQRQ----[|zny-J-{|znyv r5-n{s|zrq[|zny-6H----0vsqrs-b`RlaN[TR[a------an{tr{-J-{|znyv r5-n{s|zrqan{tr{-6H------Ovn{tr{-J-{|znyv r5-p|5-[|zny9-an{tr{-6-7-n{tr{;-6H----0r{qvs--0r{qvs--0v{pyqr-Iortv{lrr\x07K--0v{pyqr-Iz|}untrlrr\x07K--0v{pyqr-Ixv{{v{tlrr\x07K--0v{pyqr-Iqv}ynprzr{zn}lrr\x07K--0v{pyqr-I}|wrplrr\x07K--0v{pyqr-Iy|tqr}uoslrr\x07K--0v{pyqr-Ipyv}}v{tl}yn{rlrr\x07K--cvr]|vv|{-J-:-z]|vv|{;\x07\b H--Sv{ny]|vv|{-J-rpA5n{s|zrq9->;=6H--0vsqrs-b`RlV[`aN[PV[T----Sv{ny]|vv|{-J-v{n{prZnv\x07-7-Sv{ny]|vv|{H--0r{qvs--Sv{ny]|vv|{-J-z|qryZnv\x07-7-Sv{ny]|vv|{H--zn@-pnzrn_|nv|{Znv\x07-J-zn@5vrZnv\x07h=jh=j9-vrZnv\x07h>jh=j9-vrZnv\x07h?jh=j9-vrZnv\x07h=jh>j9-vrZnv\x07h>jh>j9-vrZnv\x07h?jh>j9-vrZnv\x07h=jh?j9-vrZnv\x07h>jh?j9-vrZnv\x07h?jh?j6H--PnzrnQvrpv|{-J-{|znyv r5pnzrn_|nv|{Znv\x07-7-rp@5=;=9-=;=9-:>;=66H--_||sZnx-J-=;=H--0vs-qrsv{rq5b`RlcR_aRelZN_X6----_||sZnx-J-z||ur}5_\\\\SlZN_X-:-ZN_Xl`aR]9-_\\\\SlZN_X9-lsrnrlvqlznx6H--0r{qvs--0v{pyqr-I|yq}|lrr\x07K--0v{pyqr-Ir{zn}lrr\x07K--0v{pyqr-Iunq|zn}lrr\x07K--0v{pyqr-Is|tlrr\x07K--ZNV[lR[Q\f"),fragment_default$3=function(...e){let t=113,n=126,r=0,o=``;return e[0].split(``).map(e=>e.charCodeAt(0)>126?e:String.fromCharCode((e.charCodeAt(0)+113)%126)).join(``)}("0qrsv{r-]U\\[T0qrsv{r-OYNPXlP\\Y\\_-rpA5=;=EC9-=;>=C9-=;>AF9->;=60qrsv{r-a_N[`]N_R[alP\\Y\\_-rpA5=;=9-=;=9-=;=9-=;=60qrsv{r-SYV]lPbORlZN]-:>;=p-]n{|-\n--nz}yrPor-zn}H--sy|n-zn}`v rH--rpA-zn}Uv|tnzH-<<-}rnx-zrn{-zv{-zn\x07--znA-znv\x07H--sy|n- ||zH\fH{vs|z-]n{|-}n{|=H{vs|z-]n{|-}n{|>H0vs-qrsv{rq5b`Rl]N[\\lQR]aU6--p-]n{|Qr}u-\n----nz}yrPor-zn}H----sy|n-zn\x07Qr}uH--\fH--{vs|z-]n{|Qr}u-}n{|=Qr}uH--{vs|z-]n{|Qr}u-}n{|>Qr}uH0r{qvs0vs-qrsv{rq5b`Rl]N[\\lSVYaR_6--p-Svyr]nnz-\n----sy|n-nnv|{`nnv|{OvnH----sy|n-p|{nP|{nOvnH----nz}yr?Q-uvtuyvtu`unq|YZn}H----sy|n-p|y|arz}rnrOvnH----sy|n-p|y|av{OvnH--\fH--{vs|z-Svyr]nnz-}n{|SvyrH0r{qvs0vs-qrsv{rq5b`Rl_RSV[RQl`P_RR[6--p-_rsv{rq`prr{-\n----nz}yr?Q-zn}H----znA-}|wrpv|{Znv\x07H----znA-znv\x07V{rrH----sy|n-|}npv\bH----sy|n-}n{|H--\fH--{vs|z-_rsv{rq`prr{-rsv{rq`prr{H0r{qvs{vs|z-sy|n-sy||V{qr\x07H{vs|z-sy|n-z|qryNy}unH{vs|z-sy|n-}|trH0vs-qrsv{rq5b`RlP\\Y\\_lP\\[`aN[a6--{vs|z-rp@-p|{n{P|y|H0r{qvs0vs-qrsv{rq5b`RlP\\Y\\_lNYaVabQR6--{vs|z-nz}yr?Q-tnqvr{ar\x07rH0r{qvsp-Pyv}}r-\n--znA-znv\x07V{rrH--sy|n-sy||V{qr\x07H\fH0vs-[bZlPYV]]R_`-K-=--{vs|z-Pyv}}r-pyv}}rh[bZlPYV]]R_`jH0r{qvsn\bv{t-rpA-Sv{ny]|vv|{Hn\bv{t-rp@-PnzrnQvrpv|{Hn\bv{t-sy|n-_||sZnxH{vs|z-sy|n-u|{Sy||V{qr\x07H{vs|z-rp?-r|yv|{H{vs|z-sy|n-}v\x07ry_nv|H{vs|z-rp@-qvssrH{vs|z-sy|n-p|y|Ny}unH{vs|z-rp@-rzvvrH{vs|z-rp@-}rpynH{vs|z-sy|n-uv{v{rH{vs|z-sy|n-|}npv\bH{vs|z-sy|n-ovtu{rH{vs|z-rp@-z|qryO|{qv{tZn\x07H{vs|z-rp@-z|qryO|{qv{tZv{H<<u调整{vs|z-sy|n-p|y|`nnv|{H{vs|z-sy|n-p|y|Ovtu{rH0vs{qrs-SYNal`UNQRQ--0vsqrs-b`RlaN[TR[a----n\bv{t-rp@-an{tr{H----n\bv{t-rp@-Ovn{tr{H--0r{qvs0r{qvs0v{pyqr-Ip|zz|{K0v{pyqr-I}npxv{tK0v{pyqr-Iqvurv{tl}nlsntzr{K0v{pyqr-Ip|y|l}nlsntzr{K0v{pyqr-Il}nlsntzr{K0v{pyqr-I?l}nlsntzr{K0v{pyqr-Izn}l}nlsntzr{K0v{pyqr-Iny}unzn}l}nlsntzr{K0v{pyqr-In|zn}l}nlsntzr{K0v{pyqr-Iyvtuzn}l}nlsntzr{K0v{pyqr-Irzvvrzn}l}nlsntzr{K0v{pyqr-IoqsK0v{pyqr-Iporllrsyrpv|{lsntzr{K0v{pyqr-Ir{zn}lp|zz|{l}nlsntzr{K0v{pyqr-Ir{zn}l}nlsntzr{K0v{pyqr-Is|tl}nlsntzr{K0v{pyqr-Iyvtul}nlortv{K0v{pyqr-Iyvtul}u|{tl}nlsntzr{K0v{pyqr-Iunq|zn}l}nlsntzr{K0v{pyqr-Ioz}zn}l}nlsntzr{K0v{pyqr-I{|znyzn}l}nlsntzr{K0v{pyqr-I}rpynzn}l}nlsntzr{K0v{pyqr-Iy|tqr}uosl}nlsntzr{K0v{pyqr-Ipyv}}v{tl}yn{rl}nlsntzr{Krp@- ||zcrp|5rp@-qvrpv|{9-rp@-rp|9-sy|n- ||z6-\n--sy|n-urn-J-q|5qvrpv|{9-rp|6H--rp@-q-J-qvrpv|{-7-urnH--rp@-}-J-rp|-:-qH--rp@-\0-J-}-<- ||zH--r{-{|znyv r5q-8-\x006H\frp@-to?u5rp@-p6-\n--rpA-X-J-rpA5=;=9-:>;=-<-@;=9-?;=-<-@;=9-:>;=6H--rpA-}-J-zv\x075rpA5p;ot9-X; 69-rpA5p;to9-X;\x07\b69-r}5p;o9-p;t66H--rpA-\0-J-zv\x075rpA5};\x07\b9-p;69-rpA5p;9-};\b \x0769-r}5};\x079-p;66H--sy|n-q-J-\0;\x07-:-zv{5\0;9-\0;\b6H--sy|n-r-J->;=r:>=H--r{-rp@5no5\0; -8-5\0;-:-\0;\b6-<-5C;=-7-q-8-r669-q-<-5\0;\x07-8-r69-\0;\x076H\frp@-u?to5rp@-p6-\n--rpA-X-J-rpA5>;=9-?;=-<-@;=9->;=-<-@;=9-@;=6H--rp@-}-J-no5snp5p;\x07\x07\x07-8-X;\x07\b 6-7-C;=-:-X;6H--r{-p; -7-zv\x075X;\x07\x07\x079-pynz}5}-:-X;\x07\x07\x079-=;=9->;=69-p;\b6H\frp@-trP|y|O\bUrvtu5nz}yr?Q-tnqvr{ar\x07r9-rpA-Sv{ny]|vv|{6-\n--sy|n--J-5Sv{ny]|vv|{;\b-:-z|qryO|{qv{tZv{;\b6-<-5z|qryO|{qv{tZn\x07;\b-:-z|qryO|{qv{tZv{;\b6H--r{-r\x07r?Q5tnqvr{ar\x07r9-rp?59-=;B66;toH\f0vs-qrsv{rq5b`Rl]N[\\lSVYaR_6--rp@-svyrUvtuyvtu`unq|5rp@-p|y|9-rpA-uv|tnz6-\n----rp@-u-J-to?u5p|y|6H----u; -J-r\x07r?Q5}n{|Svyr;uvtuyvtu`unq|YZn}9-rp?5u; 9-=;=66;H----p|y|-J-u?to5u6H----r{-pynz}5p|y|9-=;=9->;=6H--\f--rp@-svyrP|y|arz}rnr5rp@-p|y|9-rpA-uv|tnz6-\n----sy|n-rz}rnrOvn-J-pynz}5}n{|Svyr;p|y|arz}rnrOvn9-:>==;=9->==;=6H----sy|n-`pnyr-J->;=-8-rz}rnrOvn-<-@==;=H----sy|n-o`pnyr-J->;=-:-rz}rnrOvn-<-@==;=H----p|y|;-J-p|y|;-7-`pnyrH----p|y|;o-J-p|y|;o-7-o`pnyrH----r{-pynz}5p|y|9-=;=9->;=6H--\f--rp@-svyrP|y|av{5rp@-p|y|9-rpA-uv|tnz6-\n----sy|n-v{Ovn-J-pynz}5}n{|Svyr;p|y|av{Ovn9-:>==;=9->==;=6H----rp@-pnyr-J-rp@5>;=6H----vs-5v{Ovn-K-=;=6-\n------pnyr;t-J->;=-:-v{Ovn-<-?==;=H----\f-ryr-\n------pnyr;-J->;=-8-v{Ovn-7-=;B-<-?==;=H------pnyr;t-J->;=-:-v{Ovn-7-=;B-<-?==;=H------pnyr;o-J->;=-8-v{Ovn-7-=;B-<-?==;=H----\f----p|y|-7J-pnyrH----r{-pynz}5p|y|9-=;=9->;=6H--\f--rp@-svyrP|y|5rp@-p|y|9-rpA-uv|tnz6-\n----rp@-to-J-p|y|H----to-J-svyrP|y|arz}rnr5to9-uv|tnz6H----to-J-svyrP|y|av{5to9-uv|tnz6H----r{-toH--\f--rp@-svyrP|{n5rp@-p|y|9-rpA-uv|tnz6-\n----sy|n-zrn{cny-J-uv|tnzh>jH----sy|n-zv{cny-J-uv|tnzh?jH----sy|n-zn\x07cny-J-uv|tnzh@jH----sy|n-p|{nOvn-J-pynz}5}n{|Svyr;p|{nP|{nOvn9-:>;=9->;=6H----sy|n-rqOvn-J->;=-7-p|{nOvn-8->;=H----sy|n-ovn`\0nrunys-J-p|{nOvn-7-p|{nOvn-<-?;=H----sy|n-y|}ry|-J-5rqOvn-:->;=6-<-zrn{cnyH----sy|n-y|}ruvtu-J-5>;=-:-rqOvn6-<-5>;=-:-zrn{cny6H----sy|n-ovn-J-5rqOvn-:-zrn{cny6-<-5>;=-:-zrn{cny6H----sy|n-pnyrlsnp|-J->;=-<-5zn\x07cny-:-zv{cny6H----rp@-ny-J-p|y|H----sy|n-zn\x07lny-J-zn\x075zn\x075p|y|;9-p|y|;t69-p|y|;o6H----vs-5p|{nOvn-I-=;=6-\n------ny-J-ny-7-5>;=-:-ovn`\0nrunys6-8-zn\x07lny-7-ovn`\0nrunysH----\f----rp@-rzn}-J-rp@5------5ny;-I-zrn{cny6-L-y|}ry|-7-ny;-8->;=-G-y|}ruvtu-7-ny;-8-ovn9------5ny;t-I-zrn{cny6-L-y|}ry|-7-ny;t-8->;=-G-y|}ruvtu-7-ny;t-8-ovn9------5ny;o-I-zrn{cny6-L-y|}ry|-7-ny;o-8->;=-G-y|}ruvtu-7-ny;o-8-ovn----6H----rp@-|`pnyr-J-rzn}-7-pnyrlsnp|H----p|y|-J-5ny-:-zrn{cny6-7-|`pnyr-8-zrn{cnyH----r{-pynz}5p|y|9-=;=9->;=6H--\f--rp@-svyr`nnv|{5rp@-p|y|9-rpA-uv|tnz6-\n----sy|n-nnv|{Ovn-J-pynz}5}n{|Svyr;nnv|{`nnv|{Ovn9-:>;=9->;=6H----sy|n-n`pnyr-J->;=-8-nnv|{OvnH----sy|n-yzv{n{pr-J-=;?FF-7-p|y|;-8-=;BED-7-p|y|;t-8-=;>>A-7-p|y|;oH----p|y|-J-5p|y|-:-yzv{n{pr6-7-n`pnyr-8-yzv{n{prH----r{-pynz}5p|y|9-=;=9->;=6H--\f--rp@-r\x07rpSvyr5rp@-p|y|9-rpA-uv|tnz6-\n----rp@-to-J-p|y|H----to-J-svyrUvtuyvtu`unq|5to9-uv|tnz6H----to-J-svyrP|y|5to9-uv|tnz6H----to-J-svyrP|{n5to9-uv|tnz6H----to-J-svyr`nnv|{5to9-uv|tnz6H----r{-toH--\f0r{qvsZNV[lORS\\_R|vq-znv{56-\n--ZNV[l`aN_a--<<-JJJ-楼层-JJJ--o||y-vPr{Sy||-J-u|{Sy||V{qr\x07-I-:=;=>-\v\v-no5sy||V{qr\x07-:-u|{Sy||V{qr\x076-I-=;FFH--sy|n-sy||\\}npv\b-J->;=H--vs-5.vPr{Sy||6-\n----0vs-qrsv{rq5b`RlSY\\\\_l`afYRlcV`VOVYVaf6------qvpnqH----0r{qvs----sy||\\}npv\b-J-pynz}5=;?-7-zv{55>;=-8-PnzrnQvrpv|{;\b69->;=69-=;=9->;=6H--\f--<<-JJJJJJJJJJJ--<<-JJJ-顶部裁切-JJJ--sy|n-||sP]|tr-J-}|5pynz}5:PnzrnQvrpv|{;\b9-=;=9->;=69-@;=6H--vs-5----_||sZnx-K-=;==>-33----Sv{ny]|vv|{;\b-K-z|qryO|{qv{tZn\x07;\b-:-||sP]|tr-7-5z|qryO|{qv{tZn\x07;\b-:-z|qryO|{qv{tZv{;\b6--6-\n----qvpnqH--\f--<<-JJJJJJJJJJJJJJ--<<-JJJ-前置裁切计算-JJJ--0vs-[bZlPYV]]R_`-K-=----o||y-pyv}}rqH----rpA-pyv}}r]|vv|{H----0}ntzn-{|yyly||}ln----s|-5-v{-v-J-=H-v-I-[bZlPYV]]R_`H-v-88-6-\n------pyv}}r]|vv|{-J-pyv}}rh-v-j;znv\x07V{rr-7-Sv{ny]|vv|{H------pyv}}rq-J-5pyv}}rh-v-j;sy||V{qr\x07-I-=;=-\v\v-no5sy||V{qr\x07-:-pyv}}rh-v-j;sy||V{qr\x076-I->;=6H------pyv}}rq-J-pyv}}rq-33-pyv}}r]|vv|{;\x07-K-:=;B-33-pyv}}r]|vv|{;\x07-I-=;BH------pyv}}rq-J-pyv}}rq-33-pyv}}r]|vv|{;\b-K-:=;B-33-pyv}}r]|vv|{;\b-I-=;BH------pyv}}rq-J-pyv}}rq-33-pyv}}r]|vv|{; -K-:=;B-33-pyv}}r]|vv|{; -I-=;BH------vs-5pyv}}rq6-\n--------qvpnqH------\f----\f----0}ntzn-{|yyly||}lr{q--0r{qvs--<<-JJJJJJJJJJJJJJJJ--0v{pyqr-Ipyv}}v{tl}yn{rlsntzr{K--rpA-qvssrP|y|-J-rpA5-qvssr9-p|y|Ny}un-7-|}npv\b-6H--<<-JJJ-高度色-JJJ--0vs-qrsv{rq5b`RlP\\Y\\_lNYaVabQR6----qvssrP|y|;to-J-trP|y|O\bUrvtu5tnqvr{ar\x07r9-Sv{ny]|vv|{6H--0r{qvs--<<-JJJJJJJJJJJ--<<-JJJ-纯色-JJJ--0vs-qrsv{rq5b`RlP\\Y\\_lP\\[`aN[a6----qvssrP|y|;to-J-p|{n{P|y|H--0r{qvs--<<-JJJJJJJJJJJ--_rsyrprqYvtu-rsyrprqYvtu-J-_rsyrprqYvtu5-rp@5-=;=-69-rp@5-=;=-69-rp@5-=;=-69-rp@5-=;=-6-6H--rp@-|nyRzvvr_nqvn{pr-J-rzvvrH--0v{pyqr-Iy|tqr}uoslsntzr{K--0v{pyqr-Izn}lsntzr{K--0v{pyqr-Ip|y|lsntzr{K--0v{pyqr-Iny}unzn}lsntzr{K--0v{pyqr-Iny}unrlsntzr{K--0v{pyqr-I}rpynzn}lsntzr{K--0v{pyqr-I{|znylsntzr{lortv{K--0v{pyqr-I{|znylsntzr{lzn}K--0v{pyqr-Irzvvrzn}lsntzr{K--<<-nppzynv|{--0v{pyqr-Iyvtul}u|{tlsntzr{K--0v{pyqr-Iyvtulsntzr{lortv{K--0v{pyqr-Iyvtulsntzr{lzn}K--0v{pyqr-Iyvtulsntzr{lr{qK--<<-z|qynv|{--0v{pyqr-In|zn}lsntzr{K--rp@-|t|v{tYvtu-J-rsyrprqYvtu;qvrpQvssr-8-rsyrprqYvtu;v{qvrpQvssr-8-rsyrprqYvtu;qvrp`}rpyn-8-rsyrprqYvtu;v{qvrp`}rpyn-8-|nyRzvvr_nqvn{prH--0v{pyqr-Ir{zn}lsntzr{K--qvssrP|y|;n-J-qvssrP|y|;n-7-sy||\\}npv\b-7-ovtu{rH--0vs-qrsv{rq5b`Rl\\]N^bR6----qvssrP|y|;n-J->;=H--0r{qvs--tylSntP|y|-J-rpA5|t|v{tYvtu9-qvssrP|y|;n6H--<<-JJJ-颜色增益调整-JJJ--0vs-qrsv{rq5b`RlP\\Y\\_lNQWb`aZR[a6----rp@-uP|y|-J-to?u5tylSntP|y|;to6H----uP|y|;\b-8J-p|y|`nnv|{H----uP|y|; -8J-p|y|Ovtu{rH----tylSntP|y|;to-J-zn\x075u?to5uP|y|69-=;=6H--0r{qvs--<<-JJJJJJJJJJJJJJJJJJ--ZNV[lZ\\QRYlP\\Y\\_--<<色调映射-色彩空间转换--0v{pyqr-I|{rzn}}v{tlsntzr{K--0v{pyqr-Ir{p|qv{tlsntzr{K--0v{pyqr-Is|tlsntzr{K--0v{pyqr-I}rzyv}yvrqlny}unlsntzr{K--0v{pyqr-Iqvurv{tlsntzr{K--<<-JJJ-全景图-JJJ--rp@-}n{|=a|crr\x07-J-{|znyv r5Sv{ny]|vv|{;\x07\b -:-}n{|=;znv\x07h@j;\x07\b 6H--}n{|=a|crr\x07-J- ||zcrp|5PnzrnQvrpv|{9-}n{|=a|crr\x079-}n{|=; ||z6H--}n{|=a|crr\x07-J-}n{|=a|crr\x07-7-zn@5}n{|=;znv\x076H--rp@-}n{|>a|crr\x07-J-{|znyv r5Sv{ny]|vv|{;\x07\b -:-}n{|>;znv\x07h@j;\x07\b 6H--}n{|>a|crr\x07-J- ||zcrp|5PnzrnQvrpv|{9-}n{|>a|crr\x079-}n{|>; ||z6H--}n{|>a|crr\x07-J-}n{|>a|crr\x07-7-zn@5}n{|>;znv\x076H--rpA-}n{|=P|y|-J-r\x07rPor5}n{|=;zn}9-rp@5SYV]lPbORlZN]-7-}n{|=a|crr\x07;\x079-}n{|=a|crr\x07;\b 66H--rpA-}n{|>P|y|-J-r\x07rPor5}n{|>;zn}9-rp@5SYV]lPbORlZN]-7-}n{|>a|crr\x07;\x079-}n{|>a|crr\x07;\b 66H--<<-JJJ-全景图瓦片细化-JJJ--0vs-qrsv{rq5b`Rl_RSV[RQl`P_RR[6----rpA-rsv{rqPnzrn]|v|{-J-rsv{rq`prr{;znv\x07V{rr-7-Sv{ny]|vv|{H----sy|n-rsv{rqg||z-J-zv\x075}n{|=; ||z9-}n{|>; ||z9-rsv{rq`prr{;}n{|6H----rp@-rsv{rqPnzrncrr\x07-J-{|znyv r5rsv{rqPnzrn]|v|{;\x07\b 6H----rsv{rqPnzrncrr\x07-J- ||zcrp|5rp@5=;=9-=;=9->;=69-rsv{rqPnzrncrr\x079-rsv{rqg||z6H----rpA-rsv{rq]|v|{-J-rsv{rq`prr{;}|wrpv|{Znv\x07-7-rpA5rsv{rqPnzrncrr\x079->;=6H----rsv{rq]|v|{-J-rsv{rq]|v|{-<-rsv{rq]|v|{;H----rpA-rsv{rqP|y|-J-r\x07r?Q5rsv{rq`prr{;zn}9-5rsv{rq]|v|{;\x07\b-8->;=6-<-?;=6H----rsv{rqP|y|;n-J-rsv{rqP|y|;n-7-rsv{rq`prr{;|}npv\bH----sy|n-rsv{rq\\rsy|]|tr-J-r}5no5rsv{rq]|v|{;\x0769->;=6-7-r}5no5rsv{rq]|v|{;\b69->;=6-7-r}5rsv{rqPnzrn]|v|{; 9-=;=6H----rsv{rqP|y|-J-zv\x075a_N[`]N_R[alP\\Y\\_9-rsv{rqP|y|9-rsv{rq\\rsy|]|tr6H----rpA-rsv{rq]n{|=P|y|-J-zv\x075rsv{rqP|y|9-a_N[`]N_R[alP\\Y\\_9-rsv{rq`prr{;}n{|6H----rpA-rsv{rq]n{|>P|y|-J-zv\x075rsv{rqP|y|9-a_N[`]N_R[alP\\Y\\_9->;=-:-rsv{rq`prr{;}n{|6H----}n{|=P|y|-J-zv\x075}n{|=P|y|9-rpA5rsv{rq]n{|=P|y|;to9-}n{|=P|y|;n69-rsv{rq]n{|=P|y|;n6H----}n{|>P|y|-J-zv\x075}n{|>P|y|9-rpA5rsv{rq]n{|>P|y|;to9-}n{|>P|y|;n69-rsv{rq]n{|>P|y|;n6H--0r{qvs--<<-JJJ-运动过程全景图通过深度剔除-JJJ--0vs-qrsv{rq5b`Rl]N[\\lQR]aU6----sy|n-}n{|=crr\x07Qr}u-J-pynz}5yr{tu5Sv{ny]|vv|{;\x07\b -:-}n{|=;znv\x07h@j;\x07\b 69-=;=9-}n{|=Qr}u;zn\x07Qr}u6H----sy|n-}n{|>crr\x07Qr}u-J-pynz}5yr{tu5Sv{ny]|vv|{;\x07\b -:-}n{|>;znv\x07h@j;\x07\b 69-=;=9-}n{|>Qr}u;zn\x07Qr}u6H----sy|n-}n{|=Qr}uZn}Qr}u-J-{}npx_TONa|Qr}u5r\x07rPor5}n{|=Qr}u;zn}9-}n{|=a|crr\x0766-7-}n{|=Qr}u;zn\x07Qr}uH----sy|n-}n{|>Qr}uZn}Qr}u-J-{}npx_TONa|Qr}u5r\x07rPor5}n{|>Qr}u;zn}9-}n{|>a|crr\x0766-7-}n{|>Qr}u;zn\x07Qr}uH----sy|n-}n{|=Qr}uQryn-J-no5}n{|=Qr}uZn}Qr}u-:-}n{|=crr\x07Qr}u6H----sy|n-}n{|>Qr}uQryn-J-no5}n{|>Qr}uZn}Qr}u-:-}n{|>crr\x07Qr}u6H----sy|n-zn\x07]n{|=Qr}uQryn-J-=;=@-7-}n{|=crr\x07Qr}uH----sy|n-zn\x07]n{|>Qr}uQryn-J-=;=@-7-}n{|>crr\x07Qr}uH----}n{|=P|y|-J-zv\x075}n{|=P|y|9-zv\x075}n{|=P|y|9-tylSntP|y|9-pynz}5}|tr-7->=;=9-=;=9->;=669-r}5zn\x07]n{|=Qr}uQryn9-}n{|=Qr}uQryn66H----}n{|>P|y|-J-zv\x075}n{|>P|y|9-zv\x075}n{|>P|y|9-tylSntP|y|9-pynz}55>;=-:-}|tr6-7->=;=9-=;=9->;=669-r}5zn\x07]n{|>Qr}uQryn9-}n{|>Qr}uQryn66H--0r{qvs--<<-JJJ-全景图滤镜-JJJ--0vs-qrsv{rq5b`Rl]N[\\lSVYaR_6----}n{|=P|y|;to-J-r\x07rpSvyr5}n{|=P|y|;to9-}n{|=;zn}Uv|tnz6H----}n{|>P|y|;to-J-r\x07rpSvyr5}n{|>P|y|;to9-}n{|>;zn}Uv|tnz6H--0r{qvs--ZNV[l]N[\\lP\\Y\\_--<<-JJJ-全景图颜色混合-JJJ--rpA-}n{|P|y|H--0vs-qrsv{rq5b`RlOYNPXla_N[`VaV\\[6----sy|n-oynpx]|tr-J-np|5:?;=-7-}|tr-8->;=6H----}n{|P|y|-J-zv\x075}n{|=P|y|9-OYNPXlP\\Y\\_9-zv{5>;=9-oynpx]|tr66H----}n{|P|y|-J-zv\x075}n{|P|y|9-}n{|>P|y|9-zn\x075=;=9-oynpx]|tr-:-]V-8->;=66H--0ryvs-qrsv{rq5b`Rl`]_RNQla_N[`VaV\\[6----rp?-prr{Pr{rP||q-J-r|yv|{-7-}v\x07ry_nv|-<-?;=H----sy|n-n{vv|{_nqv-J-qvn{pr5rp?5=;=9-=;=69-prr{Pr{rP||q6-7->;?H----sy|n-n{vv|{]|tr-J-qvn{pr5tylSntP||q;\x07\b9-prr{Pr{rP||q6-<-n{vv|{_nqvH----}n{|P|y|-J-zv\x075}n{|=P|y|9-}n{|>P|y|9-z||ur}5=;=9-=;?9-}|tr-:-n{vv|{]|tr66H--0ryr----}n{|P|y|-J-zv\x075}n{|=P|y|9-}n{|>P|y|9-}|tr6H--0r{qvs--tylSntP|y|-J-zv\x075}n{|P|y|9-tylSntP|y|9-z|qryNy}un6H--ZNV[lR[Q\f"),vertex_default$2=function(...e){let t=113,n=126,r=0,o=``;return e[0].split(``).map(e=>e.charCodeAt(0)>126?e:String.fromCharCode((e.charCodeAt(0)+113)%126)).join(``)}("0qrsv{r-`aN[QN_Q0qrsv{r-ZN_Xl`aR]->;=0qrsv{r-_\\\\SlZN_X->;=nvor-sy|n-lsrnrlvqlznxHn\bv{t-sy|n-_||sZnxHn\bv{t-rpA-Sv{ny]|vv|{Hn\bv{t-rp@-PnzrnQvrpv|{Hn\bv{t-rp@-cvr]|vv|{H{vs|z-rp@-z|qryO|{qv{tZn\x07H{vs|z-rp@-z|qryO|{qv{tZv{H<<u调整{vs|z-sy|n-p|y|`nnv|{H{vs|z-sy|n-p|y|Ovtu{rH0vs{qrs-SYNal`UNQRQ--n\bv{t-rp@-[|znyH--0vsqrs-b`RlaN[TR[a----n\bv{t-rp@-an{tr{H----n\bv{t-rp@-Ovn{tr{H--0r{qvs0r{qvs0v{pyqr-Ip|zz|{K0v{pyqr-Il}nlrr\x07K0v{pyqr-I?l}nlrr\x07K0v{pyqr-Iqv}ynprzr{zn}l}nlrr\x07K0v{pyqr-Ir{zn}l}nlrr\x07K0v{pyqr-Ip|y|l}nlrr\x07K0v{pyqr-Is|tl}nlrr\x07K0v{pyqr-Iz|}untrl}nlrr\x07K0v{pyqr-Ixv{{v{tl}nlrr\x07K0v{pyqr-Iunq|zn}l}nlrr\x07K0v{pyqr-Iy|tqr}uosl}nlrr\x07K0v{pyqr-Ipyv}}v{tl}yn{rl}nlrr\x07KZNV[lORS\\_R|vq-znv{56-\n--ZNV[l`aN_a--0v{pyqr-Ilrr\x07K--0v{pyqr-I?lrr\x07K--0v{pyqr-Ip|y|lrr\x07K--0v{pyqr-Iortv{{|znylrr\x07K--0v{pyqr-Iz|}u{|znylrr\x07K--0v{pyqr-Ixv{onrlrr\x07K--0v{pyqr-Ixv{{|znylrr\x07K--0v{pyqr-Iqrsny{|znylrr\x07K0vs{qrs-SYNal`UNQRQ-<<-[|zny-p|z}rq-vu-qrvnvr-ur{-SYNal`UNQRQ--[|zny-J-{|znyv r5-n{s|zrq[|zny-6H--0vsqrs-b`RlaN[TR[a----an{tr{-J-{|znyv r5-n{s|zrqan{tr{-6H----Ovn{tr{-J-{|znyv r5-p|5-[|zny9-an{tr{-6-7-n{tr{;-6H--0r{qvs0r{qvs--0v{pyqr-Iortv{lrr\x07K--0v{pyqr-Iz|}untrlrr\x07K--0v{pyqr-Ixv{{v{tlrr\x07K--0v{pyqr-Iqv}ynprzr{zn}lrr\x07K--0v{pyqr-I}|wrplrr\x07K--0v{pyqr-Iy|tqr}uoslrr\x07K--0v{pyqr-Ipyv}}v{tl}yn{rlrr\x07K--cvr]|vv|{-J-:-z]|vv|{;\x07\b H--Sv{ny]|vv|{-J-rpA5n{s|zrq9->;=6H--0vsqrs-b`RlV[`aN[PV[T----Sv{ny]|vv|{-J-v{n{prZnv\x07-7-Sv{ny]|vv|{H--0r{qvs--Sv{ny]|vv|{-J-z|qryZnv\x07-7-Sv{ny]|vv|{H--zn@-pnzrn_|nv|{Znv\x07-J-zn@5vrZnv\x07h=jh=j9-vrZnv\x07h>jh=j9-vrZnv\x07h?jh=j9-vrZnv\x07h=jh>j9-vrZnv\x07h>jh>j9-vrZnv\x07h?jh>j9-vrZnv\x07h=jh?j9-vrZnv\x07h>jh?j9-vrZnv\x07h?jh?j6H--PnzrnQvrpv|{-J-{|znyv r5pnzrn_|nv|{Znv\x07-7-rp@5=;=9-=;=9-:>;=66H--_||sZnx-J-=;=H--0vs-qrsv{rq5b`RlcR_aRelZN_X6----_||sZnx-J-z||ur}5_\\\\SlZN_X-:-ZN_Xl`aR]9-_\\\\SlZN_X9-lsrnrlvqlznx6H--0r{qvs--0v{pyqr-I|yq}|lrr\x07K--0v{pyqr-Ir{zn}lrr\x07K--0v{pyqr-Iunq|zn}lrr\x07K--0v{pyqr-Is|tlrr\x07K--ZNV[lR[Q\f"),fragment_default$2=function(...e){let t=113,n=126,r=0,o=``;return e[0].split(``).map(e=>e.charCodeAt(0)>126?e:String.fromCharCode((e.charCodeAt(0)+113)%126)).join(``)}("0qrsv{r-`aN[QN_Q0qrsv{r-_RSYRPaVcVaf0qrsv{r-PYRN_P\\Na0qrsv{r-a_N[`]N_R[Pf0qrsv{r-OYNPXlP\\Y\\_-rpA5=;=EC9-=;>=C9-=;>AF9->;=60qrsv{r-a_N[`]N_R[alP\\Y\\_-rpA5=;=9-=;=9-=;=9-=;=60qrsv{r-SYV]lPbORlZN]-:>;=p-]n{|-\n--nz}yrPor-zn}H--sy|n-zn}`v rH--rpA-zn}Uv|tnzH-<<-}rnx-zrn{-zv{-zn\x07--znA-znv\x07H--sy|n- ||zH\fH{vs|z-]n{|-}n{|=H{vs|z-]n{|-}n{|>H0vs-qrsv{rq5b`Rl]N[\\lQR]aU6--p-]n{|Qr}u-\n----nz}yrPor-zn}H----sy|n-zn\x07Qr}uH--\fH--{vs|z-]n{|Qr}u-}n{|=Qr}uH--{vs|z-]n{|Qr}u-}n{|>Qr}uH0r{qvs0vs-qrsv{rq5b`Rl]N[\\lSVYaR_6--p-Svyr]nnz-\n----sy|n-nnv|{`nnv|{OvnH----sy|n-p|{nP|{nOvnH----nz}yr?Q-uvtuyvtu`unq|YZn}H----sy|n-p|y|arz}rnrOvnH----sy|n-p|y|av{OvnH--\fH--{vs|z-Svyr]nnz-}n{|SvyrH0r{qvs0vs-qrsv{rq5b`Rl_RSV[RQl`P_RR[6--p-_rsv{rq`prr{-\n----nz}yr?Q-zn}H----znA-}|wrpv|{Znv\x07H----znA-znv\x07V{rrH----sy|n-|}npv\bH----sy|n-}n{|H--\fH--{vs|z-_rsv{rq`prr{-rsv{rq`prr{H0r{qvs{vs|z-sy|n-sy||V{qr\x07H{vs|z-sy|n-z|qryNy}unH{vs|z-sy|n-}|trH0vs-qrsv{rq5b`RlP\\Y\\_lP\\[`aN[a6--{vs|z-rp@-p|{n{P|y|H0r{qvs0vs-qrsv{rq5b`RlP\\Y\\_lNYaVabQR6--{vs|z-nz}yr?Q-tnqvr{ar\x07rH0r{qvsp-Pyv}}r-\n--znA-znv\x07V{rrH--sy|n-sy||V{qr\x07H\fH0vs-[bZlPYV]]R_`-K-=--{vs|z-Pyv}}r-pyv}}rh[bZlPYV]]R_`jH0r{qvsn\bv{t-rpA-Sv{ny]|vv|{Hn\bv{t-rp@-PnzrnQvrpv|{Hn\bv{t-sy|n-_||sZnxH{vs|z-sy|n-u|{Sy||V{qr\x07H{vs|z-rp?-r|yv|{H{vs|z-sy|n-}v\x07ry_nv|H{vs|z-rp@-qvssrH{vs|z-sy|n-p|y|Ny}unH{vs|z-rp@-rzvvrH{vs|z-sy|n-|tu{rH{vs|z-sy|n-zrny{rH{vs|z-sy|n-|}npv\bH{vs|z-sy|n-ovtu{rH0vsqrs-a_N[`]N_R[Pf--{vs|z-sy|n-n{}nr{p\bH0r{qvs0vsqrs-_RSYRPaVcVaf--{vs|z-sy|n-rsyrpvv\bH0r{qvs0vsqrs-PYRN_P\\Na--{vs|z-sy|n-pyrnp|nH--{vs|z-sy|n-pyrnp|n_|tu{rH0r{qvs0vsqrs-b`Rl`URR[--{vs|z-rp@-urr{H0r{qvs{vs|z-rp@-z|qryO|{qv{tZn\x07H{vs|z-rp@-z|qryO|{qv{tZv{H<<u调整{vs|z-sy|n-p|y|`nnv|{H{vs|z-sy|n-p|y|Ovtu{rHn\bv{t-rp@-cvr]|vv|{H0vs{qrs-SYNal`UNQRQ--n\bv{t-rp@-[|znyH--0vsqrs-b`RlaN[TR[a----n\bv{t-rp@-an{tr{H----n\bv{t-rp@-Ovn{tr{H--0r{qvs0r{qvs0v{pyqr-Ip|zz|{K0v{pyqr-I}npxv{tK0v{pyqr-Iqvurv{tl}nlsntzr{K0v{pyqr-Ip|y|l}nlsntzr{K0v{pyqr-Il}nlsntzr{K0v{pyqr-I?l}nlsntzr{K0v{pyqr-Izn}l}nlsntzr{K0v{pyqr-Iny}unzn}l}nlsntzr{K0v{pyqr-In|zn}l}nlsntzr{K0v{pyqr-Iyvtuzn}l}nlsntzr{K0v{pyqr-Irzvvrzn}l}nlsntzr{K0v{pyqr-IoqsK0v{pyqr-Iporllrsyrpv|{lsntzr{K0v{pyqr-Ir{zn}lp|zz|{l}nlsntzr{K0v{pyqr-Ir{zn}l}u\bvpnyl}nlsntzr{K0v{pyqr-Is|tl}nlsntzr{K0v{pyqr-Iyvtul}nlortv{K0v{pyqr-Iyvtul}u\bvpnyl}nlsntzr{K0v{pyqr-Iunq|zn}l}nlsntzr{K0v{pyqr-Ioz}zn}l}nlsntzr{K0v{pyqr-I{|znyzn}l}nlsntzr{K0v{pyqr-Ipyrnp|nl}nlsntzr{K0v{pyqr-I|tu{rzn}l}nlsntzr{K0v{pyqr-Izrny{rzn}l}nlsntzr{K0v{pyqr-Iy|tqr}uosl}nlsntzr{K0v{pyqr-Ipyv}}v{tl}yn{rl}nlsntzr{Krp@- ||zcrp|5rp@-qvrpv|{9-rp@-rp|9-sy|n- ||z6-\n--sy|n-urn-J-q|5qvrpv|{9-rp|6H--rp@-q-J-qvrpv|{-7-urnH--rp@-}-J-rp|-:-qH--rp@-\0-J-}-<- ||zH--r{-{|znyv r5q-8-\x006H\frp@-to?u5rp@-p6-\n--rpA-X-J-rpA5=;=9-:>;=-<-@;=9-?;=-<-@;=9-:>;=6H--rpA-}-J-zv\x075rpA5p;ot9-X; 69-rpA5p;to9-X;\x07\b69-r}5p;o9-p;t66H--rpA-\0-J-zv\x075rpA5};\x07\b9-p;69-rpA5p;9-};\b \x0769-r}5};\x079-p;66H--sy|n-q-J-\0;\x07-:-zv{5\0;9-\0;\b6H--sy|n-r-J->;=r:>=H--r{-rp@5no5\0; -8-5\0;-:-\0;\b6-<-5C;=-7-q-8-r669-q-<-5\0;\x07-8-r69-\0;\x076H\frp@-u?to5rp@-p6-\n--rpA-X-J-rpA5>;=9-?;=-<-@;=9->;=-<-@;=9-@;=6H--rp@-}-J-no5snp5p;\x07\x07\x07-8-X;\x07\b 6-7-C;=-:-X;6H--r{-p; -7-zv\x075X;\x07\x07\x079-pynz}5}-:-X;\x07\x07\x079-=;=9->;=69-p;\b6H\frp@-trP|y|O\bUrvtu5nz}yr?Q-tnqvr{ar\x07r9-rpA-Sv{ny]|vv|{6-\n--sy|n--J-5Sv{ny]|vv|{;\b-:-z|qryO|{qv{tZv{;\b6-<-5z|qryO|{qv{tZn\x07;\b-:-z|qryO|{qv{tZv{;\b6H--r{-r\x07r?Q5tnqvr{ar\x07r9-rp?59-=;B66;toH\f0vs-qrsv{rq5b`Rl]N[\\lSVYaR_6--rp@-svyrUvtuyvtu`unq|5rp@-p|y|9-rpA-uv|tnz6-\n----rp@-u-J-to?u5p|y|6H----u; -J-r\x07r?Q5}n{|Svyr;uvtuyvtu`unq|YZn}9-rp?5u; 9-=;=66;H----p|y|-J-u?to5u6H----r{-pynz}5p|y|9-=;=9->;=6H--\f--rp@-svyrP|y|arz}rnr5rp@-p|y|9-rpA-uv|tnz6-\n----sy|n-rz}rnrOvn-J-pynz}5}n{|Svyr;p|y|arz}rnrOvn9-:>==;=9->==;=6H----sy|n-`pnyr-J->;=-8-rz}rnrOvn-<-@==;=H----sy|n-o`pnyr-J->;=-:-rz}rnrOvn-<-@==;=H----p|y|;-J-p|y|;-7-`pnyrH----p|y|;o-J-p|y|;o-7-o`pnyrH----r{-pynz}5p|y|9-=;=9->;=6H--\f--rp@-svyrP|y|av{5rp@-p|y|9-rpA-uv|tnz6-\n----sy|n-v{Ovn-J-pynz}5}n{|Svyr;p|y|av{Ovn9-:>==;=9->==;=6H----rp@-pnyr-J-rp@5>;=6H----vs-5v{Ovn-K-=;=6-\n------pnyr;t-J->;=-:-v{Ovn-<-?==;=H----\f-ryr-\n------pnyr;-J->;=-8-v{Ovn-7-=;B-<-?==;=H------pnyr;t-J->;=-:-v{Ovn-7-=;B-<-?==;=H------pnyr;o-J->;=-8-v{Ovn-7-=;B-<-?==;=H----\f----p|y|-7J-pnyrH----r{-pynz}5p|y|9-=;=9->;=6H--\f--rp@-svyrP|y|5rp@-p|y|9-rpA-uv|tnz6-\n----rp@-to-J-p|y|H----to-J-svyrP|y|arz}rnr5to9-uv|tnz6H----to-J-svyrP|y|av{5to9-uv|tnz6H----r{-toH--\f--rp@-svyrP|{n5rp@-p|y|9-rpA-uv|tnz6-\n----sy|n-zrn{cny-J-uv|tnzh>jH----sy|n-zv{cny-J-uv|tnzh?jH----sy|n-zn\x07cny-J-uv|tnzh@jH----sy|n-p|{nOvn-J-pynz}5}n{|Svyr;p|{nP|{nOvn9-:>;=9->;=6H----sy|n-rqOvn-J->;=-7-p|{nOvn-8->;=H----sy|n-ovn`\0nrunys-J-p|{nOvn-7-p|{nOvn-<-?;=H----sy|n-y|}ry|-J-5rqOvn-:->;=6-<-zrn{cnyH----sy|n-y|}ruvtu-J-5>;=-:-rqOvn6-<-5>;=-:-zrn{cny6H----sy|n-ovn-J-5rqOvn-:-zrn{cny6-<-5>;=-:-zrn{cny6H----sy|n-pnyrlsnp|-J->;=-<-5zn\x07cny-:-zv{cny6H----rp@-ny-J-p|y|H----sy|n-zn\x07lny-J-zn\x075zn\x075p|y|;9-p|y|;t69-p|y|;o6H----vs-5p|{nOvn-I-=;=6-\n------ny-J-ny-7-5>;=-:-ovn`\0nrunys6-8-zn\x07lny-7-ovn`\0nrunysH----\f----rp@-rzn}-J-rp@5------5ny;-I-zrn{cny6-L-y|}ry|-7-ny;-8->;=-G-y|}ruvtu-7-ny;-8-ovn9------5ny;t-I-zrn{cny6-L-y|}ry|-7-ny;t-8->;=-G-y|}ruvtu-7-ny;t-8-ovn9------5ny;o-I-zrn{cny6-L-y|}ry|-7-ny;o-8->;=-G-y|}ruvtu-7-ny;o-8-ovn----6H----rp@-|`pnyr-J-rzn}-7-pnyrlsnp|H----p|y|-J-5ny-:-zrn{cny6-7-|`pnyr-8-zrn{cnyH----r{-pynz}5p|y|9-=;=9->;=6H--\f--rp@-svyr`nnv|{5rp@-p|y|9-rpA-uv|tnz6-\n----sy|n-nnv|{Ovn-J-pynz}5}n{|Svyr;nnv|{`nnv|{Ovn9-:>;=9->;=6H----sy|n-n`pnyr-J->;=-8-nnv|{OvnH----sy|n-yzv{n{pr-J-=;?FF-7-p|y|;-8-=;BED-7-p|y|;t-8-=;>>A-7-p|y|;oH----p|y|-J-5p|y|-:-yzv{n{pr6-7-n`pnyr-8-yzv{n{prH----r{-pynz}5p|y|9-=;=9->;=6H--\f--rp@-r\x07rpSvyr5rp@-p|y|9-rpA-uv|tnz6-\n----rp@-to-J-p|y|H----to-J-svyrUvtuyvtu`unq|5to9-uv|tnz6H----to-J-svyrP|y|5to9-uv|tnz6H----to-J-svyrP|{n5to9-uv|tnz6H----to-J-svyr`nnv|{5to9-uv|tnz6H----r{-toH--\f0r{qvsZNV[lORS\\_R|vq-znv{56-\n--ZNV[l`aN_a--<<-JJJ-楼层-JJJ--o||y-vPr{Sy||-J-u|{Sy||V{qr\x07-I-:=;=>-\v\v-no5sy||V{qr\x07-:-u|{Sy||V{qr\x076-I-=;FFH--sy|n-sy||\\}npv\b-J->;=H--vs-5.vPr{Sy||6-\n----0vs-qrsv{rq5b`RlSY\\\\_l`afYRlcV`VOVYVaf6------qvpnqH----0r{qvs----sy||\\}npv\b-J-pynz}5=;?-7-zv{55>;=-8-PnzrnQvrpv|{;\b69->;=69-=;=9->;=6H--\f--<<-JJJJJJJJJJJ--<<-JJJ-顶部裁切-JJJ--sy|n-||sP]|tr-J-}|5pynz}5:PnzrnQvrpv|{;\b9-=;=9->;=69-@;=6H--vs-5----_||sZnx-K-=;==>-33----Sv{ny]|vv|{;\b-K-z|qryO|{qv{tZn\x07;\b-:-||sP]|tr-7-5z|qryO|{qv{tZn\x07;\b-:-z|qryO|{qv{tZv{;\b6--6-\n----qvpnqH--\f--<<-JJJJJJJJJJJJJJ--<<-JJJ-前置裁切计算-JJJ--0vs-[bZlPYV]]R_`-K-=----o||y-pyv}}rqH----rpA-pyv}}r]|vv|{H----0}ntzn-{|yyly||}ln----s|-5-v{-v-J-=H-v-I-[bZlPYV]]R_`H-v-88-6-\n------pyv}}r]|vv|{-J-pyv}}rh-v-j;znv\x07V{rr-7-Sv{ny]|vv|{H------pyv}}rq-J-5pyv}}rh-v-j;sy||V{qr\x07-I-=;=-\v\v-no5sy||V{qr\x07-:-pyv}}rh-v-j;sy||V{qr\x076-I->;=6H------pyv}}rq-J-pyv}}rq-33-pyv}}r]|vv|{;\x07-K-:=;B-33-pyv}}r]|vv|{;\x07-I-=;BH------pyv}}rq-J-pyv}}rq-33-pyv}}r]|vv|{;\b-K-:=;B-33-pyv}}r]|vv|{;\b-I-=;BH------pyv}}rq-J-pyv}}rq-33-pyv}}r]|vv|{; -K-:=;B-33-pyv}}r]|vv|{; -I-=;BH------vs-5pyv}}rq6-\n--------qvpnqH------\f----\f----0}ntzn-{|yyly||}lr{q--0r{qvs--<<-JJJJJJJJJJJJJJJJ--0v{pyqr-Ipyv}}v{tl}yn{rlsntzr{K--rpA-qvssrP|y|-J-rpA5-qvssr9-p|y|Ny}un-7-|}npv\b-6H--<<-JJJ-高度色-JJJ--0vs-qrsv{rq5b`RlP\\Y\\_lNYaVabQR6----qvssrP|y|;to-J-trP|y|O\bUrvtu5tnqvr{ar\x07r9-Sv{ny]|vv|{6H--0r{qvs--<<-JJJJJJJJJJJ--<<-JJJ-纯色-JJJ--0vs-qrsv{rq5b`RlP\\Y\\_lP\\[`aN[a6----qvssrP|y|;to-J-p|{n{P|y|H--0r{qvs--<<-JJJJJJJJJJJ--_rsyrprqYvtu-rsyrprqYvtu-J-_rsyrprqYvtu5-rp@5-=;=-69-rp@5-=;=-69-rp@5-=;=-69-rp@5-=;=-6-6H--rp@-|nyRzvvr_nqvn{pr-J-rzvvrH--0v{pyqr-Iy|tqr}uoslsntzr{K--0v{pyqr-Izn}lsntzr{K--0v{pyqr-Ip|y|lsntzr{K--0v{pyqr-Iny}unzn}lsntzr{K--0v{pyqr-Iny}unrlsntzr{K--0v{pyqr-I|tu{rzn}lsntzr{K0v{pyqr-Izrny{rzn}lsntzr{K--0v{pyqr-I{|znylsntzr{lortv{K--0v{pyqr-I{|znylsntzr{lzn}K--0v{pyqr-Ipyrnp|nl{|znylsntzr{lortv{K--0v{pyqr-Ipyrnp|nl{|znylsntzr{lzn}K--0v{pyqr-Irzvvrzn}lsntzr{K--<<-nppzynv|{--0v{pyqr-Iyvtul}u\bvpnylsntzr{K--0v{pyqr-Iyvtulsntzr{lortv{K--0v{pyqr-Iyvtulsntzr{lzn}K--0v{pyqr-Iyvtulsntzr{lr{qK--<<-z|qynv|{--0v{pyqr-In|zn}lsntzr{K--rp@-|t|v{tYvtu-J-rsyrprqYvtu;qvrpQvssr-8-rsyrprqYvtu;v{qvrpQvssr-8-rsyrprqYvtu;qvrp`}rpyn-8-rsyrprqYvtu;v{qvrp`}rpyn-8-|nyRzvvr_nqvn{prH<<-s|-n{zvv|{--0vsqrs-a_N[`]N_R[Pf----qvssrP|y|;n-7J-nnr5->;=-:-n{}nr{p\b-7-5>;=-:-znrvny;}rpyn_|tu{r6-8-yv{rna|_rynvrYzv{n{pr5-rsyrprqYvtu;qvrp`}rpyn-8-rsyrprqYvtu;v{qvrp`}rpyn-6-6H--0r{qvs--qvssrP|y|;n-J-qvssrP|y|;n-7-sy||\\}npv\b-7-ovtu{rH--0vs-qrsv{rq5b`Rl\\]N^bR6----qvssrP|y|;n-J->;=H--0r{qvs--tylSntP|y|-J-rpA5|t|v{tYvtu9-qvssrP|y|;n6H--<<-JJJ-颜色增益调整-JJJ--0vs-qrsv{rq5b`RlP\\Y\\_lNQWb`aZR[a6----rp@-uP|y|-J-to?u5tylSntP|y|;to6H----uP|y|;\b-8J-p|y|`nnv|{H----uP|y|; -8J-p|y|Ovtu{rH----tylSntP|y|;to-J-zn\x075u?to5uP|y|69-=;=6H--0r{qvs--<<-JJJJJJJJJJJJJJJJJJ--ZNV[lZ\\QRYlP\\Y\\_--<<色调映射-色彩空间转换--0v{pyqr-I|{rzn}}v{tlsntzr{K--0v{pyqr-Ir{p|qv{tlsntzr{K--0v{pyqr-Is|tlsntzr{K--0v{pyqr-I}rzyv}yvrqlny}unlsntzr{K--0v{pyqr-Iqvurv{tlsntzr{K--<<-JJJ-全景图-JJJ--rp@-}n{|=a|crr\x07-J-{|znyv r5Sv{ny]|vv|{;\x07\b -:-}n{|=;znv\x07h@j;\x07\b 6H--}n{|=a|crr\x07-J- ||zcrp|5PnzrnQvrpv|{9-}n{|=a|crr\x079-}n{|=; ||z6H--}n{|=a|crr\x07-J-}n{|=a|crr\x07-7-zn@5}n{|=;znv\x076H--rp@-}n{|>a|crr\x07-J-{|znyv r5Sv{ny]|vv|{;\x07\b -:-}n{|>;znv\x07h@j;\x07\b 6H--}n{|>a|crr\x07-J- ||zcrp|5PnzrnQvrpv|{9-}n{|>a|crr\x079-}n{|>; ||z6H--}n{|>a|crr\x07-J-}n{|>a|crr\x07-7-zn@5}n{|>;znv\x076H--rpA-}n{|=P|y|-J-r\x07rPor5}n{|=;zn}9-rp@5SYV]lPbORlZN]-7-}n{|=a|crr\x07;\x079-}n{|=a|crr\x07;\b 66H--rpA-}n{|>P|y|-J-r\x07rPor5}n{|>;zn}9-rp@5SYV]lPbORlZN]-7-}n{|>a|crr\x07;\x079-}n{|>a|crr\x07;\b 66H--<<-JJJ-全景图瓦片细化-JJJ--0vs-qrsv{rq5b`Rl_RSV[RQl`P_RR[6----rpA-rsv{rqPnzrn]|v|{-J-rsv{rq`prr{;znv\x07V{rr-7-Sv{ny]|vv|{H----sy|n-rsv{rqg||z-J-zv\x075}n{|=; ||z9-}n{|>; ||z9-rsv{rq`prr{;}n{|6H----rp@-rsv{rqPnzrncrr\x07-J-{|znyv r5rsv{rqPnzrn]|v|{;\x07\b 6H----rsv{rqPnzrncrr\x07-J- ||zcrp|5rp@5=;=9-=;=9->;=69-rsv{rqPnzrncrr\x079-rsv{rqg||z6H----rpA-rsv{rq]|v|{-J-rsv{rq`prr{;}|wrpv|{Znv\x07-7-rpA5rsv{rqPnzrncrr\x079->;=6H----rsv{rq]|v|{-J-rsv{rq]|v|{-<-rsv{rq]|v|{;H----rpA-rsv{rqP|y|-J-r\x07r?Q5rsv{rq`prr{;zn}9-5rsv{rq]|v|{;\x07\b-8->;=6-<-?;=6H----rsv{rqP|y|;n-J-rsv{rqP|y|;n-7-rsv{rq`prr{;|}npv\bH----sy|n-rsv{rq\\rsy|]|tr-J-r}5no5rsv{rq]|v|{;\x0769->;=6-7-r}5no5rsv{rq]|v|{;\b69->;=6-7-r}5rsv{rqPnzrn]|v|{; 9-=;=6H----rsv{rqP|y|-J-zv\x075a_N[`]N_R[alP\\Y\\_9-rsv{rqP|y|9-rsv{rq\\rsy|]|tr6H----rpA-rsv{rq]n{|=P|y|-J-zv\x075rsv{rqP|y|9-a_N[`]N_R[alP\\Y\\_9-rsv{rq`prr{;}n{|6H----rpA-rsv{rq]n{|>P|y|-J-zv\x075rsv{rqP|y|9-a_N[`]N_R[alP\\Y\\_9->;=-:-rsv{rq`prr{;}n{|6H----}n{|=P|y|-J-zv\x075}n{|=P|y|9-rpA5rsv{rq]n{|=P|y|;to9-}n{|=P|y|;n69-rsv{rq]n{|=P|y|;n6H----}n{|>P|y|-J-zv\x075}n{|>P|y|9-rpA5rsv{rq]n{|>P|y|;to9-}n{|>P|y|;n69-rsv{rq]n{|>P|y|;n6H--0r{qvs--<<-JJJ-运动过程全景图通过深度剔除-JJJ--0vs-qrsv{rq5b`Rl]N[\\lQR]aU6----sy|n-}n{|=crr\x07Qr}u-J-pynz}5yr{tu5Sv{ny]|vv|{;\x07\b -:-}n{|=;znv\x07h@j;\x07\b 69-=;=9-}n{|=Qr}u;zn\x07Qr}u6H----sy|n-}n{|>crr\x07Qr}u-J-pynz}5yr{tu5Sv{ny]|vv|{;\x07\b -:-}n{|>;znv\x07h@j;\x07\b 69-=;=9-}n{|>Qr}u;zn\x07Qr}u6H----sy|n-}n{|=Qr}uZn}Qr}u-J-{}npx_TONa|Qr}u5r\x07rPor5}n{|=Qr}u;zn}9-}n{|=a|crr\x0766-7-}n{|=Qr}u;zn\x07Qr}uH----sy|n-}n{|>Qr}uZn}Qr}u-J-{}npx_TONa|Qr}u5r\x07rPor5}n{|>Qr}u;zn}9-}n{|>a|crr\x0766-7-}n{|>Qr}u;zn\x07Qr}uH----sy|n-}n{|=Qr}uQryn-J-no5}n{|=Qr}uZn}Qr}u-:-}n{|=crr\x07Qr}u6H----sy|n-}n{|>Qr}uQryn-J-no5}n{|>Qr}uZn}Qr}u-:-}n{|>crr\x07Qr}u6H----sy|n-zn\x07]n{|=Qr}uQryn-J-=;=@-7-}n{|=crr\x07Qr}uH----sy|n-zn\x07]n{|>Qr}uQryn-J-=;=@-7-}n{|>crr\x07Qr}uH----}n{|=P|y|-J-zv\x075}n{|=P|y|9-zv\x075}n{|=P|y|9-tylSntP|y|9-pynz}5}|tr-7->=;=9-=;=9->;=669-r}5zn\x07]n{|=Qr}uQryn9-}n{|=Qr}uQryn66H----}n{|>P|y|-J-zv\x075}n{|>P|y|9-zv\x075}n{|>P|y|9-tylSntP|y|9-pynz}55>;=-:-}|tr6-7->=;=9-=;=9->;=669-r}5zn\x07]n{|>Qr}uQryn9-}n{|>Qr}uQryn66H--0r{qvs--<<-JJJ-全景图滤镜-JJJ--0vs-qrsv{rq5b`Rl]N[\\lSVYaR_6----}n{|=P|y|;to-J-r\x07rpSvyr5}n{|=P|y|;to9-}n{|=;zn}Uv|tnz6H----}n{|>P|y|;to-J-r\x07rpSvyr5}n{|>P|y|;to9-}n{|>;zn}Uv|tnz6H--0r{qvs--ZNV[l]N[\\lP\\Y\\_--<<-JJJ-全景图颜色混合-JJJ--rpA-}n{|P|y|H--0vs-qrsv{rq5b`RlOYNPXla_N[`VaV\\[6----sy|n-oynpx]|tr-J-np|5:?;=-7-}|tr-8->;=6H----}n{|P|y|-J-zv\x075}n{|=P|y|9-OYNPXlP\\Y\\_9-zv{5>;=9-oynpx]|tr66H----}n{|P|y|-J-zv\x075}n{|P|y|9-}n{|>P|y|9-zn\x075=;=9-oynpx]|tr-:-]V-8->;=66H--0ryvs-qrsv{rq5b`Rl`]_RNQla_N[`VaV\\[6----rp?-prr{Pr{rP||q-J-r|yv|{-7-}v\x07ry_nv|-<-?;=H----sy|n-n{vv|{_nqv-J-qvn{pr5rp?5=;=9-=;=69-prr{Pr{rP||q6-7->;?H----sy|n-n{vv|{]|tr-J-qvn{pr5tylSntP||q;\x07\b9-prr{Pr{rP||q6-<-n{vv|{_nqvH----}n{|P|y|-J-zv\x075}n{|=P|y|9-}n{|>P|y|9-z||ur}5=;=9-=;?9-}|tr-:-n{vv|{]|tr66H--0ryr----}n{|P|y|-J-zv\x075}n{|=P|y|9-}n{|>P|y|9-}|tr6H--0r{qvs--tylSntP|y|-J-zv\x075}n{|P|y|9-tylSntP|y|9-z|qryNy}un6H--ZNV[lR[Q\f"),Uniform=class extends three.Uniform{constructor(e){super(e)}};function setUniform(e,t){t&&e.value&&(t instanceof three.Color||t instanceof three.Matrix4||t instanceof three.Matrix3||t instanceof three.Vector2||t instanceof three.Vector3||t instanceof three.Vector4)?e.value.copy(t):Array.isArray(t)?e.value=t.slice():e.value=t}function cloneUniforms(e){return three.UniformsUtils.clone(e)}function mergeUniforms(...e){return three.UniformsUtils.merge(e)}function defineProperty(e,t,n){return Object.defineProperty(e,t,n)}var fastProto=null;function FastObject(e){if(fastProto!==null&&typeof fastProto.property){let e=fastProto;return fastProto=FastObject.prototype=null,e}return fastProto=FastObject.prototype=e==null?Object.create(null):e,new FastObject}var inlineCacheCutoff=10;for(let e=0;e<=inlineCacheCutoff;e++)FastObject();function toFastProperties(e){return FastObject(e)}var TAU$2=Math.PI*2;function formatRad$1(e){return e>=0&&e<TAU$2?e:(e%TAU$2+TAU$2)%TAU$2}function coordinatesToVector(e,t){let n=Math.abs(Math.cos(e.latitude)),r=-Math.sin(e.longitude)*n,o=-Math.sin(e.latitude),s=-Math.cos(e.longitude)*n;return t?t.set(r,o,s):new three.Vector3(r,o,s)}function vectorToCoordinates(e){return{longitude:formatRad$1(-Math.atan2(e.x,-e.z)),latitude:-Math.asin(e.y/1)}}function longitudeToHeading(e){return(-e/Math.PI*180-90)/360+.25}function headingToLongitude(e){return-((e-.25)*360+90)/180*Math.PI}var start=Date.now();typeof performance<`u`&&(typeof performance.timeOrigin==`number`?start=performance.timeOrigin:performance.timing!==void 0&&(start=performance.timing.navigationStart));var now=typeof performance<`u`?(()=>start+performance.now()):(()=>Date.now());function dateNowToDomHighResTimeStamp(e){return e-start}function clamp$1(e,t,n){return e<t?t:typeof n==`number`&&e>n?n:e}var DEFAULT_ASPECT=1,DEFAULT_NEAR=.1,DEFAULT_FAR=2e3,TAU$1=Math.PI*2,PI_2=Math.PI/2;function formatRad(e){return e>0&&e<=TAU$1?e:(e%TAU$1+TAU$1)%TAU$1}function matrixLerp(e,t,n,r){n=Math.pow(n,4);for(var o=0;o<16;o++)r.elements[o]=e.elements[o]+(t.elements[o]-e.elements[o])*n;return r}var Camera=class extends three.Camera{constructor(e,t=DEFAULT_ASPECT,n=DEFAULT_NEAR,r=DEFAULT_FAR,o=new three.Vector2,s=new three.Vector2(512,512),c=1){super(),this.fov=e,this.aspect=t,this.near=n,this.far=r,this.perspToOrtho=o,this.resolution=s,this.pixelRatio=c,this.time=0,this.controllerMode=null,this.needsRender=!0,this.refineModel=!0,this.pose={longitude:0,latitude:0,fov:e,distance:0,offset:new three.Vector3},this.computePose(),this.perspectiveCamera=new three.PerspectiveCamera(this.fov,this.aspect,.001,this.far);let l=Math.max(this.orthoDistance,.01)*Math.tan(.5*this.fov/180*Math.PI),u=-.5*this.aspect*2*l;this.orthographicCamera=new three.OrthographicCamera(u,-u,l,-l,.001,this.far),this.computeProjectionMatrix(),this.lastValues={position:this.position.clone(),quaternion:this.quaternion.clone(),scale:this.scale.clone(),fov:this.fov,aspect:this.aspect,near:this.near,far:this.far,orthoDistance:this.orthoDistance,perspToOrtho:this.perspToOrtho.clone()},this.type=this.perspToOrtho.x<1?`PerspectiveCamera`:`OrthographicCamera`,this.autoNearFar=!0}get orthoDistance(){return this.pose.distance>1?this.pose.distance:1+(this.pose.distance-1)*this.perspToOrtho.x}get zoom(){return this.type===`OrthographicCamera`?this.orthographicCamera.zoom:this.type===`PerspectiveCamera`?this.perspectiveCamera.zoom:1}get top(){return this.type===`OrthographicCamera`?this.orthographicCamera.top:0}get bottom(){return this.type===`OrthographicCamera`?this.orthographicCamera.bottom:0}get left(){return this.type===`OrthographicCamera`?this.orthographicCamera.left:0}get right(){return this.type===`OrthographicCamera`?this.orthographicCamera.right:0}getDirection(e){return coordinatesToVector(this.pose,e)}computePose(e=0){this.updateMatrix();let t=this.matrix.elements;return this.pose.latitude=Math.asin(clamp$1(t[9],-1,1)),Math.abs(t[9])<.9999999?this.pose.longitude=formatRad(Math.atan2(t[8],t[10])):this.pose.longitude=formatRad(Math.atan2(-t[2],t[0])),this.pose.fov=this.fov,this.pose.distance=e,this.pose.offset=new three.Vector3(-t[8],-t[9],-t[10]).setLength(this.pose.distance).add(this.position),this}setFromPose(e){var t,n,r,o,s;let c=formatRad((t=e.longitude)==null?this.pose.longitude:t),l=Math.max(-PI_2+1e-4,Math.min(PI_2-1e-4,(n=e.latitude)==null?this.pose.latitude:n)),u=(r=e.fov)==null?this.pose.fov:r,d=(o=e.distance)==null?this.pose.distance:o,f=(s=e.offset)==null?this.pose.offset:s,p=coordinatesToVector({longitude:c,latitude:l}).normalize();return this.position.set(0,0,0),this.lookAt(p),this.position.add(f).sub(p.clone().setLength(d)),this.fov!==u&&(this.fov=u,this.perspectiveCamera.fov=u,this.updateProjectionMatrix()),this.updateMatrixWorld(!0),this.pose.longitude=c,this.pose.latitude=l,this.pose.fov=u,this.pose.distance=d,this.pose.offset.copy(f),this.needsRender=!0,this}copyPose(){return{longitude:this.pose.longitude,latitude:this.pose.latitude,fov:this.pose.fov,distance:this.pose.distance,offset:this.pose.offset.clone()}}computeProjectionMatrix(){matrixLerp(this.orthographicCamera.projectionMatrix,this.perspectiveCamera.projectionMatrix,1-this.perspToOrtho.x,this.projectionMatrix),this.projectionMatrixInverse.getInverse(this.projectionMatrix),this.needsRender=!0}setViewOffset(e,t,n,r,o,s){this.perspectiveCamera.setViewOffset(e,t,n,r,o,s),this.orthographicCamera.setViewOffset(e,t,n,r,o,s),this.computeProjectionMatrix()}get view(){return this.perspectiveCamera.view?Object.assign({},this.perspectiveCamera.view):null}clearViewOffset(){this.perspectiveCamera.clearViewOffset(),this.orthographicCamera.clearViewOffset(),this.computeProjectionMatrix()}updateProjectionMatrix(){this.perspectiveCamera.updateProjectionMatrix(),this.orthographicCamera.updateProjectionMatrix(),this.computeProjectionMatrix()}get perspectiveProjectionMatrix(){return this.perspectiveCamera.projectionMatrix}get perspectiveProjectionMatrixInverse(){return this.perspectiveCamera.projectionMatrixInverse}get orthographicProjectionMatrix(){return this.orthographicCamera.projectionMatrix}get orthographicProjectionMatrixInverse(){return this.orthographicCamera.projectionMatrixInverse}updateTime(e){this.time=e;let t=!1;if((this.lastValues.fov!==this.fov||this.lastValues.near!==this.near||this.lastValues.far!==this.far||this.lastValues.aspect!==this.aspect)&&(this.perspectiveCamera.fov=this.fov,this.perspectiveCamera.near=this.near,this.perspectiveCamera.far=this.far,this.perspectiveCamera.aspect=this.aspect,this.perspectiveCamera.updateProjectionMatrix(),t=!0),!this.lastValues.position.equals(this.position)||!this.lastValues.quaternion.equals(this.quaternion)||!this.lastValues.scale.equals(this.scale)||!this.lastValues.perspToOrtho.equals(this.perspToOrtho)||this.lastValues.fov!==this.fov||this.lastValues.near!==this.near||this.lastValues.far!==this.far||this.lastValues.orthoDistance!==this.orthoDistance||this.lastValues.aspect!==this.aspect){let e=Math.max(this.orthoDistance,.01)*Math.tan(.5*this.fov/180*Math.PI),n=-.5*this.aspect*2*e;this.orthographicCamera.left=n,this.orthographicCamera.right=-n,this.orthographicCamera.top=e,this.orthographicCamera.bottom=-e,this.orthographicCamera.near=this.near,this.orthographicCamera.far=this.far,this.orthographicCamera.updateProjectionMatrix(),t=!0}t&&this.computeProjectionMatrix(),this.lastValues.position.copy(this.position),this.lastValues.quaternion.copy(this.quaternion),this.lastValues.scale.copy(this.scale),this.lastValues.fov=this.fov,this.lastValues.aspect=this.aspect,this.lastValues.near=this.near,this.lastValues.far=this.far,this.lastValues.orthoDistance=this.orthoDistance,this.lastValues.perspToOrtho.copy(this.perspToOrtho),this.type=this.perspToOrtho.x<1?`PerspectiveCamera`:`OrthographicCamera`}get isPerspectiveCamera(){return this.perspToOrtho.x<1}get isOrthographicCamera(){return this.perspToOrtho.x>=1}copy(e,t){return super.copy(e,t),this.fov=e.fov,this.aspect=e.aspect,this.near=e.near,this.far=e.far,this.perspToOrtho.copy(e.perspToOrtho),this.updateTime(now()),this}};function S4(){return((1+Math.random())*65536|0).toString(16).substring(1)}function createUuid(){return(S4()+S4()+`-`+S4()+`-4`+S4().substr(0,3)+`-`+S4()+`-`+S4()+S4()+S4()).toLowerCase()}function createSymbol(e){return typeof Symbol>`u`?`$Symbol<${e}>$`:Symbol(e)}var EVENT_SYMBOL=createSymbol(`$$FIVE_EVENT$$`);function __generateEventIfNotExisted(e){return e[EVENT_SYMBOL]||(e[EVENT_SYMBOL]={}),e[EVENT_SYMBOL]}function __removeEvents(e){e[EVENT_SYMBOL]&&delete e[EVENT_SYMBOL]}var Subscribe=class{hasListener(e){let t=__generateEventIfNotExisted(this);return t&&t[e]&&t[e].callbacks.length>0}on(e,t,n){let r=__generateEventIfNotExisted(this);return r[e]||(r[e]={callbacks:[]}),r[e].callbacks.push([t,n||!1]),()=>this.off(e,t)}once(e,t){return this.on(e,t,!0)}off(e,t){if(e===void 0){__removeEvents(this);return}let n=__generateEventIfNotExisted(this);if(n[e]||(n[e]={callbacks:[]}),t===void 0){n[e].callbacks.length=0;return}let r=0;for(;r<n[e].callbacks.length&&n[e].callbacks[r][0]!==t;r++);r<n[e].callbacks.length&&n[e].callbacks.splice(r,1)}emit(e,...t){let n=!1,r=__generateEventIfNotExisted(this);r[e]||(r[e]={callbacks:[]});let o=r[e].callbacks.slice();for(let[r,s=!1]of o){let o=r(...t);s&&this.off(e,r),o===!1&&(n=!0)}return n}waitUntil(e,t){return new Promise(n=>{let r=this.on(e,(...e)=>{(!t||t(...e)!==!1)&&(n(e),r())})})}},PBMUpdateable=class extends Subscribe{},PBMCustomShader=class extends PBMUpdateable{constructor(e){var t,n,r,o,s,c,l,u,d,f,p,m,h,g,_,v,y,b;super(),this.id=createUuid(),this.version=0,this.uniforms=(t=e.uniforms)==null?{}:t,this.defines=(n=e.defines)==null?{}:n,this.type=e.type,this.vertex={mainBefore:(o=(r=e.vertex)==null?void 0:r.mainBefore)==null?``:o,mainStart:(c=(s=e.vertex)==null?void 0:s.mainStart)==null?``:c,mainEnd:(u=(l=e.vertex)==null?void 0:l.mainEnd)==null?``:u},this.fragment={mainBefore:(f=(d=e.fragment)==null?void 0:d.mainBefore)==null?``:f,mainStart:(m=(p=e.fragment)==null?void 0:p.mainStart)==null?``:m,mainModelColor:(g=(h=e.fragment)==null?void 0:h.mainModelColor)==null?``:g,mainPanoColor:(v=(_=e.fragment)==null?void 0:_.mainPanoColor)==null?``:v,mainEnd:(b=(y=e.fragment)==null?void 0:y.mainEnd)==null?``:b}}get needsUpdate(){return!1}set needsUpdate(e){e===!0&&this.version++}onBeforeCompile(e,t){}},PBMPanoFilter=class e extends PBMUpdateable{static computeLut(e,t,n,r=1024,o=1,s,c){let l=clamp$1(e,-255,255)/255,u=clamp$1(t,-255,255)/255,d=clamp$1(n,-255,255)/255,f=new Float32Array(5),p=new Float32Array(5),m=new Float32Array(5);f[0]=0,f[1]=.125,f[2]=.5,f[3]=.875,f[4]=1;for(let e=0;e<5;e++)m[e]=f[e]*(1+d);m[4]=Math.max(1,m[4]);let h=1/2.2;for(let e=0;e<5;e++){let t=Math.pow(m[e]/m[4],2.2),n=Math.pow(m[e]/m[4],.45454545454545453);e<2?p[e]=m[e]+n*u:e>2?p[e]=m[e]+t*l:p[e]=m[e]}p[0]=0,p[4]=Math.max(1,p[4]),p[1]=Math.max(p[0]+.05,p[1]),p[3]=Math.min(p[4]-.0875,p[3]),p[2]=Math.max(Math.min(p[3]-.275,p[2]),p[1]+.275),s=s==null?new Float32Array(r*o):s,c=c==null?0:c;let g=r*2;for(let e=0;e<g;e++){let t=e/g,n=t*t,l=n*t,u=l*t,d=1-t,m=d*d,h=m*d,_=h*d,v=_*f[0]+4*h*t*f[1]+6*m*n*f[2]+4*d*l*f[3]+u*f[4],y=_*p[0]+4*h*t*p[1]+6*m*n*p[2]+4*d*l*p[3]+u*p[4],b=clamp$1(Math.round(v*(r-1)),0,r-1);for(let e=0;e<o;e++)s[c+b*o+e]=y}return s}constructor(){super(),this.id=createUuid();let t=()=>this.emit(`update`),n=0;this.contrast={get contrastBias(){return n},set contrastBias(e){n=e,t()}};let r=0;this.saturation={get saturationBias(){return r},set saturationBias(e){r=e,t()}};let o=0,s=0;this.color={get temperatureBias(){return o},set temperatureBias(e){o=e,t()},get tintBias(){return s},set tintBias(e){s=e,t()}};let c=0,l=0,u=0,d=[0,0,0].join(`:`),f=1024,p=3,m=new Float32Array(f*3);e.computeLut(0,0,0,f,3,m);let h=new three.DataTexture(m,f,1);h.flipY=!1,h.format=three.RGBFormat,h.type=three.FloatType,h.minFilter=three.NearestFilter,h.magFilter=three.NearestFilter,h.generateMipmaps=!1,h.needsUpdate=!0;let g=()=>{let t=[c,l,u].join(`:`);return t!==d&&(e.computeLut(c,l,u,f,3,m),h.needsUpdate=!0,d=t),h};this.highlightShadow={lutMap:h,get highlightBias(){return c},set highlightBias(e){c=e,g(),t()},get shadowBias(){return l},set shadowBias(e){l=e,g(),t()},get globalBias(){return u},set globalBias(e){u=e,g(),t()}}}toValue(){return{saturationSaturationBias:this.saturation.saturationBias,contrastContrastBias:this.contrast.contrastBias,highlightShadowLutMap:this.highlightShadow.lutMap,colorTemperatureBias:this.color.temperatureBias,colorTintBias:this.color.tintBias}}},PBMMaterial=class extends three.Material{},scratchViewport$5=new three.Vector4,pbmUniforms$1={colorAlpha:new Uniform(1),pano0:new Uniform({map:null,mapSize:1,mapHistogram:new three.Vector4,matrix:new three.Matrix4,zoom:1}),pano1:new Uniform({map:null,mapSize:1,mapHistogram:new three.Vector4,matrix:new three.Matrix4,zoom:1}),pano0Depth:new Uniform({map:null,maxDepth:1}),pano1Depth:new Uniform({map:null,maxDepth:1}),refinedScreen:new Uniform({projectionMatrix:new three.Matrix4,matrixInverse:new three.Matrix4,map:null,pano:0,opacity:1}),panoFilter:new Uniform(null),modelAlpha:new Uniform(1),progress:new Uniform(0),gradientTexture:new Uniform(null),clippers:new Uniform([]),shownFloorIndex:new Uniform(-1),constantColor:new Uniform(new three.Vector3),floorIndex:new Uniform(0),brightness:new Uniform(1),colorSaturation:new Uniform(0),colorBrightness:new Uniform(0),pixelRatio:new Uniform(1),resolution:new Uniform(new three.Vector2(512,512)),modelBoundingMin:new Uniform(new three.Vector3),modelBoundingMax:new Uniform(new three.Vector3)},shaderLib$1={none:{vertexShader:vertex_default$5,fragmentShader:fragment_default$5},basic:{vertexShader:vertex_default$4,fragmentShader:fragment_default$4},phong:{vertexShader:vertex_default$3,fragmentShader:fragment_default$3},standard:{vertexShader:vertex_default$2,fragmentShader:fragment_default$2}},uniformsLib$1=mergeUniforms(three.ShaderLib.basic.uniforms,three.ShaderLib.phong.uniforms,three.ShaderLib.physical.uniforms,pbmUniforms$1),definesLib$1={USE_OPAQUE:!1,USE_VERTEX_MARK:!1,USE_COLOR_CONSTANT:!1,USE_COLOR_ALTITUDE:!1,USE_COLOR_ADJUSTMENT:!1,USE_FLOOR_STYLE_VISIBILITY:!1,USE_BLACK_TRANSITION:!1,USE_SPREAD_TRANSITION:!1,USE_FADE_TRANSITION:!1,USE_REFINED_SCREEN:!1,USE_PANO_DEPTH:!1,USE_PANO_FILTER:!1,USE_HQ_WEIGHT:!1,USE_HQ_DEPTH:!1},PBMMeshMaterial=class extends PBMMaterial{constructor(e){var t,n;typeof e==`string`&&(e={shaderType:e}),super(),this.vertexTangents=!1,this.color=new three.Color(16777215),this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.specularMap=null,this.specular=new three.Color(1118481),this.shininess=30,this.roughnessMap=null,this.roughness=1,this.metalnessMap=null,this.metalness=0,this.alphaMap=null,this.combine=null,this.envMap=null,this.envMapIntensity=1,this.reflectivity=.4,this.refractionRatio=.98,this.emissiveMap=null,this.emissive=new three.Color(0),this.emissiveIntensity=1,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=three.TangentSpaceNormalMap,this.normalScale=new three.Vector2(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.clearcoat=0,this.clearcoatMap=null,this.clearcoatRoughness=0,this.clearcoatRoughnessMap=null,this.clearcoatNormalScale=new three.Vector2(1,1),this.clearcoatNormalMap=null,this.sheen=null,this.transparency=0,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap=`round`,this.wireframeLinejoin=`round`,this.skinning=!1,this.morphTargets=!1,this.morphNormals=!1,this.metal=!1,this.alphaMode=`OPAQUE`,this.clipping=!0,this.customShaders=[],this.type=`PBMMeshMaterial`;let r=Object.assign({},definesLib$1),o=cloneUniforms(uniformsLib$1);toFastProperties(o),toFastProperties(r),this.defines=r,this.onBeforeCompile=(e,t)=>{let n=this.shaderType;e.vertexShader=shaderLib$1[n].vertexShader,e.fragmentShader=shaderLib$1[n].fragmentShader,e.uniforms=o;for(let e of Object.keys(r))e in definesLib$1||delete r[e];for(let e of Object.keys(o))e in uniformsLib$1||delete o[e];let s=this.customShaders.filter(e=>e.type.includes(n));for(let e of s){for(let t in e.defines)t in r||Object.assign(r,{[t]:e.defines[t]});for(let t in e.uniforms)t in o||Object.assign(o,{[t]:e.uniforms[t]})}e.vertexShader=e.vertexShader.replace(/MAIN_BEFORE/g,s.map(e=>e.vertex.mainBefore).filter(e=>!!e).join(`
|
|
302
|
+
`,o},typeof e==`string`&&(e.indexOf(`-----BEGIN`)==-1?KJUR.lang.String.isHex(e)&&this.readCertHex(e):this.readCertPEM(e))}X509.hex2dn=function(e,t){t===void 0&&(t=0);var n=new X509;return ASN1HEX.getTLV(e,t),n.getX500Name(e).str},X509.hex2rdn=function(e,t){if(t===void 0&&(t=0),e.substr(t,2)!==`31`)throw Error(`malformed RDN`);for(var n=[],r=ASN1HEX.getChildIdx(e,t),o=0;o<r.length;o++)n.push(X509.hex2attrTypeValue(e,r[o]));return n=n.map(function(e){return e.replace(`+`,`\\+`)}),n.join(`+`)},X509.hex2attrTypeValue=function(e,t){var n=ASN1HEX,r=n.getV;if(t===void 0&&(t=0),e.substr(t,2)!==`30`)throw Error(`malformed attribute type and value`);var o=n.getChildIdx(e,t);o.length!==2||e.substr(o[0],2);var s=r(e,o[0]),c=KJUR.asn1.ASN1Util.oidHexToInt(s),l=KJUR.asn1.x509.OID.oid2atype(c),u=hextorstr(r(e,o[1]));return l+`=`+u},X509.getPublicKeyFromCertHex=function(e){var t=new X509;return t.readCertHex(e),t.getPublicKey()},X509.getPublicKeyFromCertPEM=function(e){var t=new X509;return t.readCertPEM(e),t.getPublicKey()},X509.getPublicKeyInfoPropOfCertPEM=function(e){var t=ASN1HEX.getVbyList,n={},r,o;return n.algparam=null,r=new X509,r.readCertPEM(e),o=r.getPublicKeyHex(),n.keyhex=t(o,0,[1],`03`).substr(2),n.algoid=t(o,0,[0,0],`06`),n.algoid===`2a8648ce3d0201`&&(n.algparam=t(o,0,[0,1],`06`)),n},X509.KEYUSAGE_NAME=[`digitalSignature`,`nonRepudiation`,`keyEncipherment`,`dataEncipherment`,`keyAgreement`,`keyCertSign`,`cRLSign`,`encipherOnly`,`decipherOnly`];function sha256(e){return CryptoJS.SHA256(e).toString()}var certificates=[(()=>{let e=new X509;return e.readCertPEM(function(...e){let t=113,n=126,r=0,o=``;return arguments[0].split(``).map(e=>e.charCodeAt(0)>126?e:String.fromCharCode((e.charCodeAt(0)+113)%126)).join(``)}(":::::ORTV[-PR_aVSVPNaR:::::ZVVS@ PPNErtNVONtVWNZR}@]nU\0ZaZN=TP`\0T`Vo@Q^ROPbNZVTSZ^P^fQc^^TRWQawR^ZNATN>bRPNU^zc}nzyg R^ZNATN>bROU^zc}nzyg R]ZN=TN>bRPtTn?bf?FZ_NQtfQc^^YQNq`gdSp?cyZ^P^fQc^^QQNWQ^aRvZPNTP`\0T`Vo@Q^RWN_fapzFqSFwfbOndSnzyuYz[oaNrS=\x07\\QN>Z N\\Q^B[QqnS=\b\\QN>Zwp\\Q^B[QqnZVTSZ^P^fQc^^TRWQawR^ZNATN>bRPNU^zc}nzyg R^ZNATN>bROU^zc}nzyg R]ZN=TN>bRPtTn?bf?FZ_NQtfQc^^YQNq`gdSp?cyZ^P^fQc^^QQNWQ^aRvZPNTP`\0T`Vo@Q^RWN_fapzFqSFwfbOndSnzyuYz[oaPPNvVQ^fWX|gVup[N^ROO^NQttV]NQPPNt|PttVONZU|C\b\\@@e^Xv{[vTtd8`nyO@\x07ebN[bqx=ng? S^w@|XAz|qUTwfzn]Bu<qs_ae\\y<}u`eRAoE`_\\s\0r|b{rp_o<oC@o=x\bw_cUUZPApQevD\\FxFo\x07FgE=<sq[p<coqyn>TEpP@aSC_YDU8\0|8TB?c>r\\=rp`pcwP}c\0PP_\\RS\\EPVSy8x`\0?R|NP P>}A^VP}Ex\bU\x07Za=syDw}>Ya\x078wPp[pRnn\brU^dE8U?a\bcW|<FEbbupn^`ZNr sof[wA}e{\\z}w[YDQ|dt=wC Nv\x07bR\x07Z@@U|ZAYpFsabCBB\\`wrqxsYW8uFyWdaWezeUeA_8VoVupvY[TD[OYdpO\bC[wX\\O]=[QRpV\0d`\x07N\0RXt^Z}vEpdC=\bY?\x07=V}?^W\bad|qN@Ww>@PycaqANE]asPcE^OB_VA?>wzeftac Z guf\bF]\x07DCP?znNYf uaYu[`\x07=b|v]Bp=RAS``\\PRDW]_`UXdUg=SuqwVFDeB D8{B>\\sPY\x07bEU FQXz\0@\x07`zsqgfD\0[WY\bPeZc} \0bx?Rfed\x07}BUe\x07|Uo\0y?\bsSXZOSBCgbFqf\0Bs?b?d<VE\\Zzns\\d@?dPvf\\{}_\0Sd[<q_YB\x07Y`Ffg=sY>{t<fu]x\x07rFNtZONNTwbQO\\ZO=TN>bqQt^dOOaAFXw= PCVxsv?{`a\bvS8YQ[aNsOt[cU`ZRTQNdtOaAFXw= PCVxsv?{`a\bvS8YQ[aNZOt[cU_ZROaNQN^U<ZN=TP`\0T`Vo@Q^ROPbNNAVPN^P\0{y\0Bs\\8\0R[z]w??qZP?NpgdenSuvv?>|f_?UpYPcQ\\gCb8zxtSvsOQNg>[\\\0\bx\b_o@8\0g`Z<PyUE`8yu}\\g{@`s`zUgErRtve{YdCvoO@>WFDtABNp\0feUWszpQaEYNAc]^xB[@]BDAN8\b}XA=E\x07nO}Pud8TA ?yPrVv{\\>E]o`BO^RE^X[W[rEU?x\bf>V OUwY=>X[\\E`tW[8}VwpF\x07BQcnrPF}yUtd8<Doe_\b[oOVU\x07ep@pYY\0cegY{r ?\bAbq?ff8}UaXoN_D]_X_8yozYFT`N{`\\{zvu?\bDWT}=_<\x07StX Nx\x07\0\b \0aT=c@ucnWfR[vf>RFxAFV}{N`dN^\\<eawBPxx}quT=|{T_R@Fp^Y<ZevRsWaZ]V CVrRVtAAc[ Qp|d|tqoQ=T|XX =u\\N8XNCx\\aU>wz X<e@Vc?dy\\|^FEq|=p`pBdF@bs^d<]vp\\^TZ P\bZ\b\\YNNSZ_\\w^|TsD8db _ Y\\o^Cw>Z\0x\\^aN]wWf\bA} C^d_{\x07ZC@\by]gY@E BFY?OsaqbDcVgQbZeFc ovtucxnq|<TnuyXRveYFOegCpAs{YTe|>bE<OXsSqCBWD_SVepfvCCUg]z ZvQ[\0s|U>pFz\b=OwT``fNJJ:::::R[Q-PR_aVSVPNaR:::::")),e})()];function getCertificateBySubjectHex(e,t){for(let n of t)if(n.getSubjectHex()===e)return n}function verifyCertificate_(e,t){let n=e.getIssuerHex();if(n===e.getSubjectHex())return e.verifySignature(e.getPublicKey());let r=getCertificateBySubjectHex(n,t);return!r||e.verifySignature(r.getPublicKey())===!1?!1:verifyCertificate_(r,t)}function verifyCertificate(e){return e.getIssuerHex()===e.getSubjectHex()?!1:verifyCertificate_(e,certificates)}function addCertificate(e){let t=new X509;typeof e==`string`?t.readCertPEM(e):t.readCertHex(e.hex);let n=verifyCertificate(t);return certificates.push(t),n}function verifyMessage(e,t,n){let r=new X509;if(typeof n==`string`?r.readCertPEM(n):r.readCertHex(n.hex),verifyCertificate(r)===!1)return!1;let o=new RSAKey;return o.readCertPubKeyHex(r.hex,6),!!o.verify(e,b64tohex(t))}addCertificate(function(...e){let t=113,n=126,r=0,o=``;return arguments[0].split(``).map(e=>e.charCodeAt(0)>126?e:String.fromCharCode((e.charCodeAt(0)+113)%126)).join(``)}(":::::ORTV[-PR_aVSVPNaR:::::ZVVTU PPONrtNVONtVWNW=_SVw VE=ZN=TP`\0T`Vo@Q^ROPbNZVTSZ^P^fQc^^TRWQawR^ZNATN>bRPNU^zc}nzyg R^ZNATN>bROU^zc}nzyg R]ZN=TN>bRPtTn?bf?FZ_NQtfQc^^YQNq`gdSp?cyZ^P^fQc^^QQNWQ^aRvZPNTP`\0T`Vo@Q^RWN_fapzFqSFwfbOndSnzyuYz[oaNrS=\bZQNAZaN\\aZ [QSnS=\b[aNBZQZ\\aZ [QSnZVTaZ^P^fQc^^TRWQawR^ZNATN>bRPNU^zc}nzyg R^ZNATN>bROU^zc}nzyg RbZOVTN>bRPtYoTyuoz}}f`Bwo?=\x07RQN\\Ot[cONZO>Wyfd\x07 gdb\x07RaN]Ot[cONZZPRuupz_@feWyZ`bVfWX|gVup[N^xOSugnec|fdy\x07ndB{^T\x07}fdB\0ndRf?FZVVPVwN[Otx\0uxvTF=ON^RSNN\\PNtENZVVPPtXPNtRN?=?]q[VD|{\\oyo`oOu}F SA\x07e`tn[t u\b8^a]qx\bE_^\x07ZN?[QC\0yuOpybY8r\\RPAS=8rUq\0E8>xean^e\bf]Y`XO}{C[Ur^?\0x[SRXvVQ\\CFr}QnAPRQ\x07FO=Yw\0_TePCOFV@|\x07N>ROXcDrT<>bW<ssO?NOT{^s]uU\0gS\bBffsfE\0AfDyQEZR`]XBo|Qw}yYdwwTvOFcBndUz^\\{] b=^yQYSTQ`]\0?tR{WRUun\\\0bVe_E|VWWV|r Ao\0 F`fdzCnRtq\br \b8eBp=Z\\TRaadc}@Eub`\x07quuNqAdF\0aUay{}x>tgVz` _YBFwu_q?egt8v[o\x008 wTQcrA <z{DZoEE^rZTrpaZQzqpBY]^zt8[bQv}yEWw XDYQB\0QB\bx_^X]|uEDtPf[n[r_bpB[bE}?ung|bnU|NYOoedY_tvXySZfYP\x07\x07dWV]OE^\bOFwA}<uXoO}_NDz8aon\x07zWOfcv@?>snfqu@FeEx^\\\bVfuO`\\\0tSg]zDU}QrAT| OZV|OvpVD<sN@z`<_cSrNCW>?=Au?g_8v{|}}WF>Sr>QBxO d_D}eBb?Uq^b [y}x]}{?P|BQtecTB[pQBW>|p|nfv\0zU\x07xOO}WqwE=<PURZy@X8r\\]u=<pPNRNNn\\OtaO<ZOETPdPT`NTT8RVOQ^^`SuO`gdSp?cyVRg\bo?B=VR[OZO=TN>bqQt^dOO`Fy\x07WadZcAD peXybcW@}Qf\\QNsOt[cU`ZRTQNdtOaAFXw= PCVxsv?{`a\bvS8YQ[aN]Ot[cU_ZONsEROaNQN^U<ZNTN>bqQ^RNVOOwN[Otx\0uxvTF=ON^SNN\\PNtRNrx a[}tP_g8FbD\0^\0qt<f88ufuN]^}]gp\bqYudF88Fas_Ef` ?^x>X}esa{>\\r?eE]CC_cZ[vQs >gX[szONg=^pn=<e]nbSz\bZvac\b[w^nA_`vP|@8w[}nQobe=??oRYf{vpRxcC}yCd>8[NDx{Ne\\t8oou=guC\x07>>g\x07vb}ACd ``Ntq\0yC[Q{|ynpNQqSqzxF<_PFDw<]Bnnu>F<XgU_Zf\\\\A=gu\\codOwQ]oQ<f>gv_pwozwC}xX>C`c]suEdfW?cbeo\b`BbyR@eFTUwSud=t]sS\\onc XSq {\0\x07DvAVBbnTqEE[QzDyqF`bF}R=Q?VeDo<Vzb\0w}D}NZ\0t}^?OyFP\bVaVNrTNYqe?[NRYTSQby@yzWvT`wQo}y]c_WgxBYCy RNRg@\x07NZCaaq8?` ^`?ryD =obzw?E]Ou\x07]n@>bVzqAQT?@_zo@}CxWVTUsAYdNd?{APQr8{P]]AZ>aR\0[D<z?Tr@`u@X|YDwd_<p<>zWE>]\0=X`\b@uucp|^_Qb@uZouTX^o\0\\{PCq{ug\x078^f[YQAWad8FNqxFQE?ZOo }RnO\bsQc xyccn=nxvs>bDBf\b\bW\\TuTnvAO^U\0QXC>xx8FxRFf<tJ:::::R[Q-PR_aVSVPNaR:::::"));var PBMGroup=class extends three.Group{},vertex_default$5=function(...e){let t=113,n=126,r=0,o=``;return e[0].split(``).map(e=>e.charCodeAt(0)>126?e:String.fromCharCode((e.charCodeAt(0)+113)%126)).join(``)}("n\bv{t-rpA-Sv{ny]|vv|{Hn\bv{t-rp@-PnzrnQvrpv|{H0v{pyqr-Ip|zz|{K0v{pyqr-Iz|}untrl}nlrr\x07K0v{pyqr-Ixv{{v{tl}nlrr\x07K0v{pyqr-Iy|tqr}uosl}nlrr\x07K0v{pyqr-Ipyv}}v{tl}yn{rl}nlrr\x07KZNV[lORS\\_R|vq-znv{56-\n--ZNV[l`aN_a--0v{pyqr-Ixv{onrlrr\x07K--0v{pyqr-Iortv{lrr\x07K--0v{pyqr-Iz|}untrlrr\x07K--0v{pyqr-Ixv{{v{tlrr\x07K--0v{pyqr-I}|wrplrr\x07K--0v{pyqr-Iy|tqr}uoslrr\x07K--0v{pyqr-Ipyv}}v{tl}yn{rlrr\x07K--Sv{ny]|vv|{-J-rpA5n{s|zrq9->;=6H--0vsqrs-b`RlV[`aN[PV[T----Sv{ny]|vv|{-J-v{n{prZnv\x07-7-Sv{ny]|vv|{H--0r{qvs--Sv{ny]|vv|{-J-z|qryZnv\x07-7-Sv{ny]|vv|{H--zn@-pnzrn_|nv|{Znv\x07-J-zn@5vrZnv\x07h=jh=j9-vrZnv\x07h>jh=j9-vrZnv\x07h?jh=j9-vrZnv\x07h=jh>j9-vrZnv\x07h>jh>j9-vrZnv\x07h?jh>j9-vrZnv\x07h=jh?j9-vrZnv\x07h>jh?j9-vrZnv\x07h?jh?j6H--PnzrnQvrpv|{-J-{|znyv r5pnzrn_|nv|{Znv\x07-7-rp@5=;=9-=;=9-:>;=66H--0v{pyqr-I|yq}|lrr\x07K--0v{pyqr-Is|tlrr\x07K--ZNV[lR[Q\f"),fragment_default$5=function(...e){let t=113,n=126,r=0,o=``;return e[0].split(``).map(e=>e.charCodeAt(0)>126?e:String.fromCharCode((e.charCodeAt(0)+113)%126)).join(``)}("0qrsv{r-OYNPXlP\\Y\\_-rpA5=;=EC9-=;>=C9-=;>AF9->;=60qrsv{r-a_N[`]N_R[alP\\Y\\_-rpA5=;=9-=;=9-=;=9-=;=60qrsv{r-SYV]lPbORlZN]-:>;=p-]n{|-\n--nz}yrPor-zn}H--sy|n-zn}`v rH--rpA-zn}Uv|tnzH-<<-}rnx-zrn{-zv{-zn\x07--znA-znv\x07H--sy|n- ||zH\fH{vs|z-]n{|-}n{|=H{vs|z-]n{|-}n{|>H0vs-qrsv{rq5b`Rl]N[\\lSVYaR_6--p-Svyr]nnz-\n----sy|n-nnv|{`nnv|{OvnH----sy|n-p|{nP|{nOvnH----nz}yr?Q-uvtuyvtu`unq|YZn}H----sy|n-p|y|arz}rnrOvnH----sy|n-p|y|av{OvnH--\fH--{vs|z-Svyr]nnz-}n{|SvyrH0r{qvsp-_rsv{rq`prr{-\n--nz}yr?Q-zn}H--znA-}|wrpv|{Znv\x07H--znA-znv\x07V{rrH--sy|n-|}npv\bH--sy|n-}n{|H\fH{vs|z-_rsv{rq`prr{-rsv{rq`prr{H{vs|z-sy|n-z|qryNy}unH{vs|z-sy|n-}|trHn\bv{t-rpA-Sv{ny]|vv|{Hn\bv{t-rp@-PnzrnQvrpv|{H{vs|z-sy|n-u|{Sy||V{qr\x07H{vs|z-rp?-r|yv|{H{vs|z-sy|n-}v\x07ry_nv|H0vs{qrs-SYNal`UNQRQ--n\bv{t-rp@-[|znyH0r{qvs0v{pyqr-Ip|zz|{K0v{pyqr-Iqvurv{tl}nlsntzr{K0v{pyqr-Is|tl}nlsntzr{K0v{pyqr-I}rpynzn}l}nlsntzr{K0v{pyqr-Iy|tqr}uosl}nlsntzr{K0v{pyqr-Ipyv}}v{tl}yn{rl}nlsntzr{Krp@- ||zcrp|5rp@-qvrpv|{9-rp@-rp|9-sy|n- ||z6-\n--sy|n-urn-J-q|5qvrpv|{9-rp|6H--rp@-q-J-qvrpv|{-7-urnH--rp@-}-J-rp|-:-qH--rp@-\0-J-}-<- ||zH--r{-{|znyv r5q-8-\x006H\frp@-to?u5rp@-p6-\n--rpA-X-J-rpA5=;=9-:>;=-<-@;=9-?;=-<-@;=9-:>;=6H--rpA-}-J-zv\x075rpA5p;ot9-X; 69-rpA5p;to9-X;\x07\b69-r}5p;o9-p;t66H--rpA-\0-J-zv\x075rpA5};\x07\b9-p;69-rpA5p;9-};\b \x0769-r}5};\x079-p;66H--sy|n-q-J-\0;\x07-:-zv{5\0;9-\0;\b6H--sy|n-r-J->;=r:>=H--r{-rp@5no5\0; -8-5\0;-:-\0;\b6-<-5C;=-7-q-8-r669-q-<-5\0;\x07-8-r69-\0;\x076H\frp@-u?to5rp@-p6-\n--rpA-X-J-rpA5>;=9-?;=-<-@;=9->;=-<-@;=9-@;=6H--rp@-}-J-no5snp5p;\x07\x07\x07-8-X;\x07\b 6-7-C;=-:-X;6H--r{-p; -7-zv\x075X;\x07\x07\x079-pynz}5}-:-X;\x07\x07\x079-=;=9->;=69-p;\b6H\f0vs-qrsv{rq5b`Rl]N[\\lSVYaR_6--rp@-svyrUvtuyvtu`unq|5rp@-p|y|9-rpA-uv|tnz6-\n----rp@-u-J-to?u5p|y|6H----u; -J-r\x07r?Q5}n{|Svyr;uvtuyvtu`unq|YZn}9-rp?5u; 9-=;=66;H----p|y|-J-u?to5u6H----r{-pynz}5p|y|9-=;=9->;=6H--\f--rp@-svyrP|y|arz}rnr5rp@-p|y|9-rpA-uv|tnz6-\n----sy|n-rz}rnrOvn-J-pynz}5}n{|Svyr;p|y|arz}rnrOvn9-:>==;=9->==;=6H----sy|n-`pnyr-J->;=-8-rz}rnrOvn-<-@==;=H----sy|n-o`pnyr-J->;=-:-rz}rnrOvn-<-@==;=H----p|y|;-J-p|y|;-7-`pnyrH----p|y|;o-J-p|y|;o-7-o`pnyrH----r{-pynz}5p|y|9-=;=9->;=6H--\f--rp@-svyrP|y|av{5rp@-p|y|9-rpA-uv|tnz6-\n----sy|n-v{Ovn-J-pynz}5}n{|Svyr;p|y|av{Ovn9-:>==;=9->==;=6H----rp@-pnyr-J-rp@5>;=6H----vs-5v{Ovn-K-=;=6-\n------pnyr;t-J->;=-:-v{Ovn-<-?==;=H----\f-ryr-\n------pnyr;-J->;=-8-v{Ovn-7-=;B-<-?==;=H------pnyr;t-J->;=-:-v{Ovn-7-=;B-<-?==;=H------pnyr;o-J->;=-8-v{Ovn-7-=;B-<-?==;=H----\f----p|y|-7J-pnyrH----r{-pynz}5p|y|9-=;=9->;=6H--\f--rp@-svyrP|y|5rp@-p|y|9-rpA-uv|tnz6-\n----rp@-to-J-p|y|H----to-J-svyrP|y|arz}rnr5to9-uv|tnz6H----to-J-svyrP|y|av{5to9-uv|tnz6H----r{-toH--\f--rp@-svyrP|{n5rp@-p|y|9-rpA-uv|tnz6-\n----sy|n-zrn{cny-J-uv|tnzh>jH----sy|n-zv{cny-J-uv|tnzh?jH----sy|n-zn\x07cny-J-uv|tnzh@jH----sy|n-p|{nOvn-J-pynz}5}n{|Svyr;p|{nP|{nOvn9-:>;=9->;=6H----sy|n-rqOvn-J->;=-7-p|{nOvn-8->;=H----sy|n-ovn`\0nrunys-J-p|{nOvn-7-p|{nOvn-<-?;=H----sy|n-y|}ry|-J-5rqOvn-:->;=6-<-zrn{cnyH----sy|n-y|}ruvtu-J-5>;=-:-rqOvn6-<-5>;=-:-zrn{cny6H----sy|n-ovn-J-5rqOvn-:-zrn{cny6-<-5>;=-:-zrn{cny6H----sy|n-pnyrlsnp|-J->;=-<-5zn\x07cny-:-zv{cny6H----rp@-ny-J-p|y|H----sy|n-zn\x07lny-J-zn\x075zn\x075p|y|;9-p|y|;t69-p|y|;o6H----vs-5p|{nOvn-I-=;=6-\n------ny-J-ny-7-5>;=-:-ovn`\0nrunys6-8-zn\x07lny-7-ovn`\0nrunysH----\f----rp@-rzn}-J-rp@5------5ny;-I-zrn{cny6-L-y|}ry|-7-ny;-8->;=-G-y|}ruvtu-7-ny;-8-ovn9------5ny;t-I-zrn{cny6-L-y|}ry|-7-ny;t-8->;=-G-y|}ruvtu-7-ny;t-8-ovn9------5ny;o-I-zrn{cny6-L-y|}ry|-7-ny;o-8->;=-G-y|}ruvtu-7-ny;o-8-ovn----6H----rp@-|`pnyr-J-rzn}-7-pnyrlsnp|H----p|y|-J-5ny-:-zrn{cny6-7-|`pnyr-8-zrn{cnyH----r{-pynz}5p|y|9-=;=9->;=6H--\f--rp@-svyr`nnv|{5rp@-p|y|9-rpA-uv|tnz6-\n----sy|n-nnv|{Ovn-J-pynz}5}n{|Svyr;nnv|{`nnv|{Ovn9-:>;=9->;=6H----sy|n-n`pnyr-J->;=-8-nnv|{OvnH----sy|n-yzv{n{pr-J-=;?FF-7-p|y|;-8-=;BED-7-p|y|;t-8-=;>>A-7-p|y|;oH----p|y|-J-5p|y|-:-yzv{n{pr6-7-n`pnyr-8-yzv{n{prH----r{-pynz}5p|y|9-=;=9->;=6H--\f--rp@-r\x07rpSvyr5rp@-p|y|9-rpA-uv|tnz6-\n----rp@-to-J-p|y|H----to-J-svyrUvtuyvtu`unq|5to9-uv|tnz6H----to-J-svyrP|y|5to9-uv|tnz6H----to-J-svyrP|{n5to9-uv|tnz6H----to-J-svyr`nnv|{5to9-uv|tnz6H----r{-toH--\f0r{qvsZNV[lORS\\_R|vq-znv{56-\n--ZNV[l`aN_a--0v{pyqr-Ipyv}}v{tl}yn{rlsntzr{K--0v{pyqr-Is|tlsntzr{K--0v{pyqr-I}rzyv}yvrqlny}unlsntzr{K--0v{pyqr-Iqvurv{tlsntzr{K--<<-JJJ-全景图-JJJ--rp@-}n{|=a|crr\x07-J-{|znyv r5Sv{ny]|vv|{;\x07\b -:-}n{|=;znv\x07h@j;\x07\b 6H--}n{|=a|crr\x07-J- ||zcrp|5PnzrnQvrpv|{9-}n{|=a|crr\x079-}n{|=; ||z6H--}n{|=a|crr\x07-J-}n{|=a|crr\x07-7-zn@5}n{|=;znv\x076H--rp@-}n{|>a|crr\x07-J-{|znyv r5Sv{ny]|vv|{;\x07\b -:-}n{|>;znv\x07h@j;\x07\b 6H--}n{|>a|crr\x07-J- ||zcrp|5PnzrnQvrpv|{9-}n{|>a|crr\x079-}n{|>; ||z6H--}n{|>a|crr\x07-J-}n{|>a|crr\x07-7-zn@5}n{|>;znv\x076H--rpA-}n{|=P|y|-J-r\x07rPor5}n{|=;zn}9-rp@5SYV]lPbORlZN]-7-}n{|=a|crr\x07;\x079-}n{|=a|crr\x07;\b 66H--rpA-}n{|>P|y|-J-r\x07rPor5}n{|>;zn}9-rp@5SYV]lPbORlZN]-7-}n{|>a|crr\x07;\x079-}n{|>a|crr\x07;\b 66H--<<-JJJ-全景图瓦片细化-JJJ--0vs-qrsv{rq5b`Rl_RSV[RQl`P_RR[6----rpA-rsv{rqPnzrn]|v|{-J-rsv{rq`prr{;znv\x07V{rr-7-Sv{ny]|vv|{H----sy|n-rsv{rqg||z-J-zv\x075}n{|=; ||z9-}n{|>; ||z9-rsv{rq`prr{;}n{|6H----rp@-rsv{rqPnzrncrr\x07-J-{|znyv r5rsv{rqPnzrn]|v|{;\x07\b 6H----rsv{rqPnzrncrr\x07-J- ||zcrp|5rp@5=;=9-=;=9->;=69-rsv{rqPnzrncrr\x079-rsv{rqg||z6H----rpA-rsv{rq]|v|{-J-rsv{rq`prr{;}|wrpv|{Znv\x07-7-rpA5rsv{rqPnzrncrr\x079->;=6H----rsv{rq]|v|{-J-rsv{rq]|v|{-<-rsv{rq]|v|{;H----rpA-rsv{rqP|y|-J-r\x07r?Q5rsv{rq`prr{;zn}9-5rsv{rq]|v|{;\x07\b-8->;=6-<-?;=6H----rsv{rqP|y|;n-J-rsv{rqP|y|;n-7-rsv{rq`prr{;|}npv\bH----sy|n-rsv{rq\\rsy|]|tr-J-r}5no5rsv{rq]|v|{;\x0769->;=6-7-r}5no5rsv{rq]|v|{;\b69->;=6-7-r}5rsv{rqPnzrn]|v|{; 9-=;=6H----rsv{rqP|y|-J-zv\x075a_N[`]N_R[alP\\Y\\_9-rsv{rqP|y|9-rsv{rq\\rsy|]|tr6H----rpA-rsv{rq]n{|=P|y|-J-zv\x075rsv{rqP|y|9-a_N[`]N_R[alP\\Y\\_9-rsv{rq`prr{;}n{|6H----rpA-rsv{rq]n{|>P|y|-J-zv\x075rsv{rqP|y|9-a_N[`]N_R[alP\\Y\\_9->;=-:-rsv{rq`prr{;}n{|6H----}n{|=P|y|-J-zv\x075}n{|=P|y|9-rpA5rsv{rq]n{|=P|y|;to9-}n{|=P|y|;n69-rsv{rq]n{|=P|y|;n6H----}n{|>P|y|-J-zv\x075}n{|>P|y|9-rpA5rsv{rq]n{|>P|y|;to9-}n{|>P|y|;n69-rsv{rq]n{|>P|y|;n6H--0r{qvs--<<-JJJ-全景图滤镜-JJJ--0vs-qrsv{rq5b`Rl]N[\\lSVYaR_6----}n{|=P|y|;to-J-r\x07rpSvyr5}n{|=P|y|;to9-}n{|=;zn}Uv|tnz6H----}n{|>P|y|;to-J-r\x07rpSvyr5}n{|>P|y|;to9-}n{|>;zn}Uv|tnz6H--0r{qvs--ZNV[l]N[\\lP\\Y\\_--<<-JJJ-全景图颜色混合-JJJ--rpA-}n{|P|y|H--0vs-qrsv{rq5b`RlOYNPXla_N[`VaV\\[6----sy|n-oynpx]|tr-J-np|5:?;=-7-}|tr-8->;=6H----}n{|P|y|-J-zv\x075}n{|=P|y|9-OYNPXlP\\Y\\_9-zv{5>;=9-oynpx]|tr66H----}n{|P|y|-J-zv\x075}n{|P|y|9-}n{|>P|y|9-zn\x075=;=9-oynpx]|tr-:-]V-8->;=66H--0ryvs-qrsv{rq5b`Rl`]_RNQla_N[`VaV\\[6----rp?-prr{Pr{rP||q-J-r|yv|{-7-}v\x07ry_nv|-<-?;=H----sy|n-n{vv|{_nqv-J-qvn{pr5rp?5=;=9-=;=69-prr{Pr{rP||q6-7->;?H----sy|n-n{vv|{]|tr-J--qvn{pr5tylSntP||q;\x07\b9-prr{Pr{rP||q6-<-n{vv|{_nqvH----}n{|P|y|-J-zv\x075}n{|=P|y|9-}n{|>P|y|9-z||ur}5=;=9-=;?9-}|tr-:-n{vv|{]|tr66H--0ryr----}n{|P|y|-J-zv\x075}n{|=P|y|9-}n{|>P|y|9-}|tr6H--0r{qvs--tylSntP|y|-J-zv\x075}n{|P|y|9-rpA5}n{|P|y|;to9-=;=69-pynz}5z|qryNy}un-7-@=;=9-=;=9->;=66H--<<-JJJJJJJJJJJJJJJJ--ZNV[lR[Q\f"),vertex_default$4=function(...e){let t=113,n=126,r=0,o=``;return e[0].split(``).map(e=>e.charCodeAt(0)>126?e:String.fromCharCode((e.charCodeAt(0)+113)%126)).join(``)}("0qrsv{r-ZN_Xl`aR]->;=0qrsv{r-_\\\\SlZN_X->;=nvor-sy|n-lsrnrlvqlznxHn\bv{t-sy|n-_||sZnxHn\bv{t-rpA-Sv{ny]|vv|{Hn\bv{t-rp@-PnzrnQvrpv|{Hn\bv{t-rp@-cvr]|vv|{H{vs|z-rp@-z|qryO|{qv{tZn\x07H{vs|z-rp@-z|qryO|{qv{tZv{H<<u调整{vs|z-sy|n-p|y|`nnv|{H{vs|z-sy|n-p|y|Ovtu{rH0vs{qrs-SYNal`UNQRQ--n\bv{t-rp@-[|znyH--0vsqrs-b`RlaN[TR[a----n\bv{t-rp@-an{tr{H----n\bv{t-rp@-Ovn{tr{H--0r{qvs0r{qvs0v{pyqr-Ip|zz|{K0v{pyqr-Il}nlrr\x07K0v{pyqr-I?l}nlrr\x07K0v{pyqr-Ir{zn}l}nlrr\x07K0v{pyqr-Ip|y|l}nlrr\x07K0v{pyqr-Is|tl}nlrr\x07K0v{pyqr-Iz|}untrl}nlrr\x07K0v{pyqr-Ixv{{v{tl}nlrr\x07K0v{pyqr-Iy|tqr}uosl}nlrr\x07K0v{pyqr-Ipyv}}v{tl}yn{rl}nlrr\x07KZNV[lORS\\_R|vq-znv{56-\n--ZNV[l`aN_a--0v{pyqr-Ilrr\x07K--0v{pyqr-I?lrr\x07K--0v{pyqr-Ip|y|lrr\x07K--0v{pyqr-Ixv{onrlrr\x07K--0v{pyqr-Iortv{{|znylrr\x07K--0v{pyqr-Iz|}u{|znylrr\x07K--0v{pyqr-Ixv{{|znylrr\x07K--0v{pyqr-Iqrsny{|znylrr\x07K--0vs{qrs-SYNal`UNQRQ-<<-[|zny-p|z}rq-vu-qrvnvr-ur{-SYNal`UNQRQ--[|zny-J-{|znyv r5-n{s|zrq[|zny-6H--0r{qvs--0v{pyqr-Iortv{lrr\x07K--0v{pyqr-Iz|}untrlrr\x07K--0v{pyqr-Ixv{{v{tlrr\x07K--0v{pyqr-I}|wrplrr\x07K--0v{pyqr-Iy|tqr}uoslrr\x07K--0v{pyqr-Ipyv}}v{tl}yn{rlrr\x07K--cvr]|vv|{-J-:z]|vv|{;\x07\b H--Sv{ny]|vv|{-J-rpA5n{s|zrq9->;=6H--0vsqrs-b`RlV[`aN[PV[T----Sv{ny]|vv|{-J-v{n{prZnv\x07-7-Sv{ny]|vv|{H--0r{qvs--Sv{ny]|vv|{-J-z|qryZnv\x07-7-Sv{ny]|vv|{H--zn@-pnzrn_|nv|{Znv\x07-J-zn@5vrZnv\x07h=jh=j9-vrZnv\x07h>jh=j9-vrZnv\x07h?jh=j9-vrZnv\x07h=jh>j9-vrZnv\x07h>jh>j9-vrZnv\x07h?jh>j9-vrZnv\x07h=jh?j9-vrZnv\x07h>jh?j9-vrZnv\x07h?jh?j6H--PnzrnQvrpv|{-J-{|znyv r5pnzrn_|nv|{Znv\x07-7-rp@5=;=9-=;=9-:>;=66H--_||sZnx-J-=;=H--0vs-qrsv{rq5b`RlcR_aRelZN_X6----_||sZnx-J-z||ur}5_\\\\SlZN_X-:-ZN_Xl`aR]9-_\\\\SlZN_X9-lsrnrlvqlznx6H--0r{qvs--0v{pyqr-I|yq}|lrr\x07K--0v{pyqr-Ir{zn}lrr\x07K--0v{pyqr-Is|tlrr\x07K--ZNV[lR[Q\f"),fragment_default$4=function(...e){let t=113,n=126,r=0,o=``;return e[0].split(``).map(e=>e.charCodeAt(0)>126?e:String.fromCharCode((e.charCodeAt(0)+113)%126)).join(``)}("0qrsv{r-OYNPXlP\\Y\\_-rpA5=;=EC9-=;>=C9-=;>AF9->;=60qrsv{r-a_N[`]N_R[alP\\Y\\_-rpA5=;=9-=;=9-=;=9-=;=60qrsv{r-SYV]lPbORlZN]-:>;=p-]n{|-\n--nz}yrPor-zn}H--sy|n-zn}`v rH--rpA-zn}Uv|tnzH-<<-}rnx-zrn{-zv{-zn\x07--znA-znv\x07H--sy|n- ||zH\fH{vs|z-]n{|-}n{|=H{vs|z-]n{|-}n{|>H0vs-qrsv{rq5b`Rl]N[\\lQR]aU6--p-]n{|Qr}u-\n----nz}yrPor-zn}H----sy|n-zn\x07Qr}uH--\fH--{vs|z-]n{|Qr}u-}n{|=Qr}uH--{vs|z-]n{|Qr}u-}n{|>Qr}uH0r{qvs0vs-qrsv{rq5b`Rl]N[\\lSVYaR_6--p-Svyr]nnz-\n----sy|n-nnv|{`nnv|{OvnH----sy|n-p|{nP|{nOvnH----nz}yr?Q-uvtuyvtu`unq|YZn}H----sy|n-p|y|arz}rnrOvnH----sy|n-p|y|av{OvnH--\fH--{vs|z-Svyr]nnz-}n{|SvyrH0r{qvs0vs-qrsv{rq5b`Rl_RSV[RQl`P_RR[6--p-_rsv{rq`prr{-\n----nz}yr?Q-zn}H----znA-}|wrpv|{Znv\x07H----znA-znv\x07V{rrH----sy|n-|}npv\bH----sy|n-}n{|H--\fH--{vs|z-_rsv{rq`prr{-rsv{rq`prr{H0r{qvs{vs|z-sy|n-sy||V{qr\x07H{vs|z-sy|n-z|qryNy}unH{vs|z-sy|n-}|trH0vs-qrsv{rq5b`RlP\\Y\\_lP\\[`aN[a6--{vs|z-rp@-p|{n{P|y|H0r{qvs0vs-qrsv{rq5b`RlP\\Y\\_lNYaVabQR6--{vs|z-nz}yr?Q-tnqvr{ar\x07rH0r{qvsp-Pyv}}r-\n--znA-znv\x07V{rrH--sy|n-sy||V{qr\x07H\fH0vs-[bZlPYV]]R_`-K-=--{vs|z-Pyv}}r-pyv}}rh[bZlPYV]]R_`jH0r{qvsn\bv{t-rpA-Sv{ny]|vv|{Hn\bv{t-rp@-PnzrnQvrpv|{Hn\bv{t-rp@-cvr]|vv|{Hn\bv{t-sy|n-_||sZnxH{vs|z-sy|n-u|{Sy||V{qr\x07H{vs|z-rp?-r|yv|{H{vs|z-sy|n-}v\x07ry_nv|H{vs|z-rp@-qvssrH{vs|z-sy|n-p|y|Ny}unH{vs|z-sy|n-|}npv\bH{vs|z-sy|n-ovtu{rH{vs|z-rp@-z|qryO|{qv{tZn\x07H{vs|z-rp@-z|qryO|{qv{tZv{H<<u调整{vs|z-sy|n-p|y|`nnv|{H{vs|z-sy|n-p|y|Ovtu{rH0vs{qrs-SYNal`UNQRQ--n\bv{t-rp@-[|znyH--0vsqrs-b`RlaN[TR[a----n\bv{t-rp@-an{tr{H----n\bv{t-rp@-Ovn{tr{H--0r{qvs0r{qvs0v{pyqr-Ip|zz|{K0v{pyqr-I}npxv{tK0v{pyqr-Iqvurv{tl}nlsntzr{K0v{pyqr-Ip|y|l}nlsntzr{K0v{pyqr-Il}nlsntzr{K0v{pyqr-I?l}nlsntzr{K0v{pyqr-Izn}l}nlsntzr{K0v{pyqr-Iny}unzn}l}nlsntzr{K0v{pyqr-In|zn}l}nlsntzr{K0v{pyqr-Iyvtuzn}l}nlsntzr{K0v{pyqr-Ir{zn}lp|zz|{l}nlsntzr{K0v{pyqr-Ir{zn}l}nlsntzr{K0v{pyqr-Iporllrsyrpv|{lsntzr{K0v{pyqr-Is|tl}nlsntzr{K0v{pyqr-I}rpynzn}l}nlsntzr{K0v{pyqr-Iy|tqr}uosl}nlsntzr{K0v{pyqr-Ipyv}}v{tl}yn{rl}nlsntzr{Krp@- ||zcrp|5rp@-qvrpv|{9-rp@-rp|9-sy|n- ||z6-\n--sy|n-urn-J-q|5qvrpv|{9-rp|6H--rp@-q-J-qvrpv|{-7-urnH--rp@-}-J-rp|-:-qH--rp@-\0-J-}-<- ||zH--r{-{|znyv r5q-8-\x006H\frp@-to?u5rp@-p6-\n--rpA-X-J-rpA5=;=9-:>;=-<-@;=9-?;=-<-@;=9-:>;=6H--rpA-}-J-zv\x075rpA5p;ot9-X; 69-rpA5p;to9-X;\x07\b69-r}5p;o9-p;t66H--rpA-\0-J-zv\x075rpA5};\x07\b9-p;69-rpA5p;9-};\b \x0769-r}5};\x079-p;66H--sy|n-q-J-\0;\x07-:-zv{5\0;9-\0;\b6H--sy|n-r-J->;=r:>=H--r{-rp@5no5\0; -8-5\0;-:-\0;\b6-<-5C;=-7-q-8-r669-q-<-5\0;\x07-8-r69-\0;\x076H\frp@-u?to5rp@-p6-\n--rpA-X-J-rpA5>;=9-?;=-<-@;=9->;=-<-@;=9-@;=6H--rp@-}-J-no5snp5p;\x07\x07\x07-8-X;\x07\b 6-7-C;=-:-X;6H--r{-p; -7-zv\x075X;\x07\x07\x079-pynz}5}-:-X;\x07\x07\x079-=;=9->;=69-p;\b6H\frp@-trP|y|O\bUrvtu5nz}yr?Q-tnqvr{ar\x07r9-rpA-Sv{ny]|vv|{6-\n--sy|n--J-5Sv{ny]|vv|{;\b-:-z|qryO|{qv{tZv{;\b6-<-5z|qryO|{qv{tZn\x07;\b-:-z|qryO|{qv{tZv{;\b6H--r{-r\x07r?Q5tnqvr{ar\x07r9-rp?59-=;B66;toH\f0vs-qrsv{rq5b`Rl]N[\\lSVYaR_6--rp@-svyrUvtuyvtu`unq|5rp@-p|y|9-rpA-uv|tnz6-\n----rp@-u-J-to?u5p|y|6H----u; -J-r\x07r?Q5}n{|Svyr;uvtuyvtu`unq|YZn}9-rp?5u; 9-=;=66;H----p|y|-J-u?to5u6H----r{-pynz}5p|y|9-=;=9->;=6H--\f--rp@-svyrP|y|arz}rnr5rp@-p|y|9-rpA-uv|tnz6-\n----sy|n-rz}rnrOvn-J-pynz}5}n{|Svyr;p|y|arz}rnrOvn9-:>==;=9->==;=6H----sy|n-`pnyr-J->;=-8-rz}rnrOvn-<-@==;=H----sy|n-o`pnyr-J->;=-:-rz}rnrOvn-<-@==;=H----p|y|;-J-p|y|;-7-`pnyrH----p|y|;o-J-p|y|;o-7-o`pnyrH----r{-pynz}5p|y|9-=;=9->;=6H--\f--rp@-svyrP|y|av{5rp@-p|y|9-rpA-uv|tnz6-\n----sy|n-v{Ovn-J-pynz}5}n{|Svyr;p|y|av{Ovn9-:>==;=9->==;=6H----rp@-pnyr-J-rp@5>;=6H----vs-5v{Ovn-K-=;=6-\n------pnyr;t-J->;=-:-v{Ovn-<-?==;=H----\f-ryr-\n------pnyr;-J->;=-8-v{Ovn-7-=;B-<-?==;=H------pnyr;t-J->;=-:-v{Ovn-7-=;B-<-?==;=H------pnyr;o-J->;=-8-v{Ovn-7-=;B-<-?==;=H----\f----p|y|-7J-pnyrH----r{-pynz}5p|y|9-=;=9->;=6H--\f--rp@-svyrP|y|5rp@-p|y|9-rpA-uv|tnz6-\n----rp@-to-J-p|y|H----to-J-svyrP|y|arz}rnr5to9-uv|tnz6H----to-J-svyrP|y|av{5to9-uv|tnz6H----r{-toH--\f--rp@-svyrP|{n5rp@-p|y|9-rpA-uv|tnz6-\n----sy|n-zrn{cny-J-uv|tnzh>jH----sy|n-zv{cny-J-uv|tnzh?jH----sy|n-zn\x07cny-J-uv|tnzh@jH----sy|n-p|{nOvn-J-pynz}5}n{|Svyr;p|{nP|{nOvn9-:>;=9->;=6H----sy|n-rqOvn-J->;=-7-p|{nOvn-8->;=H----sy|n-ovn`\0nrunys-J-p|{nOvn-7-p|{nOvn-<-?;=H----sy|n-y|}ry|-J-5rqOvn-:->;=6-<-zrn{cnyH----sy|n-y|}ruvtu-J-5>;=-:-rqOvn6-<-5>;=-:-zrn{cny6H----sy|n-ovn-J-5rqOvn-:-zrn{cny6-<-5>;=-:-zrn{cny6H----sy|n-pnyrlsnp|-J->;=-<-5zn\x07cny-:-zv{cny6H----rp@-ny-J-p|y|H----sy|n-zn\x07lny-J-zn\x075zn\x075p|y|;9-p|y|;t69-p|y|;o6H----vs-5p|{nOvn-I-=;=6-\n------ny-J-ny-7-5>;=-:-ovn`\0nrunys6-8-zn\x07lny-7-ovn`\0nrunysH----\f----rp@-rzn}-J-rp@5------5ny;-I-zrn{cny6-L-y|}ry|-7-ny;-8->;=-G-y|}ruvtu-7-ny;-8-ovn9------5ny;t-I-zrn{cny6-L-y|}ry|-7-ny;t-8->;=-G-y|}ruvtu-7-ny;t-8-ovn9------5ny;o-I-zrn{cny6-L-y|}ry|-7-ny;o-8->;=-G-y|}ruvtu-7-ny;o-8-ovn----6H----rp@-|`pnyr-J-rzn}-7-pnyrlsnp|H----p|y|-J-5ny-:-zrn{cny6-7-|`pnyr-8-zrn{cnyH----r{-pynz}5p|y|9-=;=9->;=6H--\f--rp@-svyr`nnv|{5rp@-p|y|9-rpA-uv|tnz6-\n----sy|n-nnv|{Ovn-J-pynz}5}n{|Svyr;nnv|{`nnv|{Ovn9-:>;=9->;=6H----sy|n-n`pnyr-J->;=-8-nnv|{OvnH----sy|n-yzv{n{pr-J-=;?FF-7-p|y|;-8-=;BED-7-p|y|;t-8-=;>>A-7-p|y|;oH----p|y|-J-5p|y|-:-yzv{n{pr6-7-n`pnyr-8-yzv{n{prH----r{-pynz}5p|y|9-=;=9->;=6H--\f--rp@-r\x07rpSvyr5rp@-p|y|9-rpA-uv|tnz6-\n----rp@-to-J-p|y|H----to-J-svyrUvtuyvtu`unq|5to9-uv|tnz6H----to-J-svyrP|y|5to9-uv|tnz6H----to-J-svyrP|{n5to9-uv|tnz6H----to-J-svyr`nnv|{5to9-uv|tnz6H----r{-toH--\f0r{qvsZNV[lORS\\_R|vq-znv{56-\n--ZNV[l`aN_a--<<-JJJ-楼层-JJJ--o||y-vPr{Sy||-J-u|{Sy||V{qr\x07-I-:=;=>-\v\v-no5sy||V{qr\x07-:-u|{Sy||V{qr\x076-I-=;FFH--sy|n-sy||\\}npv\b-J->;=H--vs-5.vPr{Sy||6-\n----0vs-qrsv{rq5b`RlSY\\\\_l`afYRlcV`VOVYVaf6------qvpnqH----0r{qvs----sy||\\}npv\b-J-pynz}5=;?-7-zv{55>;=-8-PnzrnQvrpv|{;\b69->;=69-=;=9->;=6H--\f--<<-JJJJJJJJJJJ--<<-JJJ-顶部裁切-JJJ--sy|n-||sP]|tr-J-}|5pynz}5:PnzrnQvrpv|{;\b9-=;=9->;=69-@;=6H--vs-5----_||sZnx-K-=;==>-33----Sv{ny]|vv|{;\b-K-z|qryO|{qv{tZn\x07;\b-:-||sP]|tr-7-5z|qryO|{qv{tZn\x07;\b-:-z|qryO|{qv{tZv{;\b6--6-\n----qvpnqH--\f--<<-JJJJJJJJJJJJJJ--<<-JJJ-前置裁切计算-JJJ--0vs-[bZlPYV]]R_`-K-=----o||y-pyv}}rqH----rpA-pyv}}r]|vv|{H----0}ntzn-{|yyly||}ln----s|-5-v{-v-J-=H-v-I-[bZlPYV]]R_`H-v-88-6-\n------pyv}}r]|vv|{-J-pyv}}rh-v-j;znv\x07V{rr-7-Sv{ny]|vv|{H------pyv}}rq-J-5pyv}}rh-v-j;sy||V{qr\x07-I-=;=-\v\v-no5sy||V{qr\x07-:-pyv}}rh-v-j;sy||V{qr\x076-I->;=6H------pyv}}rq-J-pyv}}rq-33-pyv}}r]|vv|{;\x07-K-:=;B-33-pyv}}r]|vv|{;\x07-I-=;BH------pyv}}rq-J-pyv}}rq-33-pyv}}r]|vv|{;\b-K-:=;B-33-pyv}}r]|vv|{;\b-I-=;BH------pyv}}rq-J-pyv}}rq-33-pyv}}r]|vv|{; -K-:=;B-33-pyv}}r]|vv|{; -I-=;BH------vs-5pyv}}rq6-\n--------qvpnqH------\f----\f----0}ntzn-{|yyly||}lr{q--0r{qvs--<<-JJJJJJJJJJJJJJJJJJ--0v{pyqr-Ipyv}}v{tl}yn{rlsntzr{K--rpA-qvssrP|y|-J-rpA5-qvssr9-p|y|Ny}un-7-|}npv\b-6H--<<-JJJ-高度色-JJJ--0vs-qrsv{rq5b`RlP\\Y\\_lNYaVabQR6----qvssrP|y|;to-J-trP|y|O\bUrvtu5tnqvr{ar\x07r9-Sv{ny]|vv|{6H--0r{qvs--<<-JJJJJJJJJJJ--<<-JJJ-纯色-JJJ--0vs-qrsv{rq5b`RlP\\Y\\_lP\\[`aN[a6----qvssrP|y|;to-J-p|{n{P|y|H--0r{qvs--<<-JJJJJJJJJJJ--0v{pyqr-Iy|tqr}uoslsntzr{K--0v{pyqr-Izn}lsntzr{K--0v{pyqr-Ip|y|lsntzr{K--0v{pyqr-Iny}unzn}lsntzr{K--0v{pyqr-Iny}unrlsntzr{K--0v{pyqr-I}rpynzn}lsntzr{K--0v{pyqr-I{|znylsntzr{lortv{K--_rsyrprqYvtu-rsyrprqYvtu-J-_rsyrprqYvtu5-rp@5-=;=-69-rp@5-=;=-69-rp@5-=;=-69-rp@5-=;=-6-6H--<<-nppzynv|{-5onxrq-v{qvrp-yvtuv{t-|{y\b6--0vsqrs-b`RlYVTUaZN]----rpA-yvtuZn}ar\x07ryJ-r\x07r?Q5-yvtuZn}9-b?-6H----rsyrprqYvtu;v{qvrpQvssr-8J-yvtuZn}ar\x07rya|Yv{rn5-yvtuZn}ar\x07ry-6;to-7-yvtuZn}V{r{v\bH--0ryr----rsyrprqYvtu;v{qvrpQvssr-8J-rp@5->;=-6H--0r{qvs--<<-z|qynv|{--0v{pyqr-In|zn}lsntzr{K--rsyrprqYvtu;v{qvrpQvssr-7J-qvssrP|y|;toH--rp@-|t|v{tYvtu-J-rsyrprqYvtu;v{qvrpQvssrH--0v{pyqr-Ir{zn}lsntzr{K--qvssrP|y|;n-J-qvssrP|y|;n-7-sy||\\}npv\b-7-ovtu{rH--0vs-qrsv{rq5b`Rl\\]N^bR6----qvssrP|y|;n-J->;=H--0r{qvs--tylSntP|y|-J-rpA5-|t|v{tYvtu9-qvssrP|y|;n-6H--<<-JJJ-颜色增益调整-JJJ--0vs-qrsv{rq5b`RlP\\Y\\_lNQWb`aZR[a6----rp@-uP|y|-J-to?u5tylSntP|y|;to6H----uP|y|;\b-8J-p|y|`nnv|{H----uP|y|; -8J-p|y|Ovtu{rH----tylSntP|y|;to-J-zn\x075u?to5uP|y|69-=;=6H--0r{qvs--<<-JJJJJJJJJJJJJJJJJJ--ZNV[lZ\\QRYlP\\Y\\_--<<色调映射-色彩空间转换--0v{pyqr-I|{rzn}}v{tlsntzr{K--0v{pyqr-Ir{p|qv{tlsntzr{K--0v{pyqr-Is|tlsntzr{K--0v{pyqr-I}rzyv}yvrqlny}unlsntzr{K--0v{pyqr-Iqvurv{tlsntzr{K--<<-JJJ-全景图-JJJ--rp@-}n{|=a|crr\x07-J-{|znyv r5Sv{ny]|vv|{;\x07\b -:-}n{|=;znv\x07h@j;\x07\b 6H--}n{|=a|crr\x07-J- ||zcrp|5PnzrnQvrpv|{9-}n{|=a|crr\x079-}n{|=; ||z6H--}n{|=a|crr\x07-J-}n{|=a|crr\x07-7-zn@5}n{|=;znv\x076H--rp@-}n{|>a|crr\x07-J-{|znyv r5Sv{ny]|vv|{;\x07\b -:-}n{|>;znv\x07h@j;\x07\b 6H--}n{|>a|crr\x07-J- ||zcrp|5PnzrnQvrpv|{9-}n{|>a|crr\x079-}n{|>; ||z6H--}n{|>a|crr\x07-J-}n{|>a|crr\x07-7-zn@5}n{|>;znv\x076H--rpA-}n{|=P|y|-J-r\x07rPor5}n{|=;zn}9-rp@5SYV]lPbORlZN]-7-}n{|=a|crr\x07;\x079-}n{|=a|crr\x07;\b 66H--rpA-}n{|>P|y|-J-r\x07rPor5}n{|>;zn}9-rp@5SYV]lPbORlZN]-7-}n{|>a|crr\x07;\x079-}n{|>a|crr\x07;\b 66H--<<-JJJ-全景图瓦片细化-JJJ--0vs-qrsv{rq5b`Rl_RSV[RQl`P_RR[6----rpA-rsv{rqPnzrn]|v|{-J-rsv{rq`prr{;znv\x07V{rr-7-Sv{ny]|vv|{H----sy|n-rsv{rqg||z-J-zv\x075}n{|=; ||z9-}n{|>; ||z9-rsv{rq`prr{;}n{|6H----rp@-rsv{rqPnzrncrr\x07-J-{|znyv r5rsv{rqPnzrn]|v|{;\x07\b 6H----rsv{rqPnzrncrr\x07-J- ||zcrp|5rp@5=;=9-=;=9->;=69-rsv{rqPnzrncrr\x079-rsv{rqg||z6H----rpA-rsv{rq]|v|{-J-rsv{rq`prr{;}|wrpv|{Znv\x07-7-rpA5rsv{rqPnzrncrr\x079->;=6H----rsv{rq]|v|{-J-rsv{rq]|v|{-<-rsv{rq]|v|{;H----rpA-rsv{rqP|y|-J-r\x07r?Q5rsv{rq`prr{;zn}9-5rsv{rq]|v|{;\x07\b-8->;=6-<-?;=6H----rsv{rqP|y|;n-J-rsv{rqP|y|;n-7-rsv{rq`prr{;|}npv\bH----sy|n-rsv{rq\\rsy|]|tr-J-r}5no5rsv{rq]|v|{;\x0769->;=6-7-r}5no5rsv{rq]|v|{;\b69->;=6-7-r}5rsv{rqPnzrn]|v|{; 9-=;=6H----rsv{rqP|y|-J-zv\x075a_N[`]N_R[alP\\Y\\_9-rsv{rqP|y|9-rsv{rq\\rsy|]|tr6H----rpA-rsv{rq]n{|=P|y|-J-zv\x075rsv{rqP|y|9-a_N[`]N_R[alP\\Y\\_9-rsv{rq`prr{;}n{|6H----rpA-rsv{rq]n{|>P|y|-J-zv\x075rsv{rqP|y|9-a_N[`]N_R[alP\\Y\\_9->;=-:-rsv{rq`prr{;}n{|6H----}n{|=P|y|-J-zv\x075}n{|=P|y|9-rpA5rsv{rq]n{|=P|y|;to9-}n{|=P|y|;n69-rsv{rq]n{|=P|y|;n6H----}n{|>P|y|-J-zv\x075}n{|>P|y|9-rpA5rsv{rq]n{|>P|y|;to9-}n{|>P|y|;n69-rsv{rq]n{|>P|y|;n6H--0r{qvs--<<-JJJ-全景图滤镜-JJJ--0vs-qrsv{rq5b`Rl]N[\\lSVYaR_6----}n{|=P|y|;to-J-r\x07rpSvyr5}n{|=P|y|;to9-}n{|=;zn}Uv|tnz6H----}n{|>P|y|;to-J-r\x07rpSvyr5}n{|>P|y|;to9-}n{|>;zn}Uv|tnz6H--0r{qvs--ZNV[l]N[\\lP\\Y\\_--<<-JJJ-运动过程全景图通过深度剔除-JJJ--0vs-qrsv{rq5b`Rl]N[\\lQR]aU6----sy|n-}n{|=crr\x07Qr}u-J-pynz}5yr{tu5Sv{ny]|vv|{;\x07\b -:-}n{|=;znv\x07h@j;\x07\b 69-=;=9-}n{|=Qr}u;zn\x07Qr}u6H----sy|n-}n{|>crr\x07Qr}u-J-pynz}5yr{tu5Sv{ny]|vv|{;\x07\b -:-}n{|>;znv\x07h@j;\x07\b 69-=;=9-}n{|>Qr}u;zn\x07Qr}u6H----sy|n-}n{|=Qr}uZn}Qr}u-J-{}npx_TONa|Qr}u5r\x07rPor5}n{|=Qr}u;zn}9-}n{|=a|crr\x0766-7-}n{|=Qr}u;zn\x07Qr}uH----sy|n-}n{|>Qr}uZn}Qr}u-J-{}npx_TONa|Qr}u5r\x07rPor5}n{|>Qr}u;zn}9-}n{|>a|crr\x0766-7-}n{|>Qr}u;zn\x07Qr}uH----sy|n-}n{|=Qr}uQryn-J-no5}n{|=Qr}uZn}Qr}u-:-}n{|=crr\x07Qr}u6H----sy|n-}n{|>Qr}uQryn-J-no5}n{|>Qr}uZn}Qr}u-:-}n{|>crr\x07Qr}u6H----sy|n-zn\x07]n{|=Qr}uQryn-J-=;=@-7-}n{|=crr\x07Qr}uH----sy|n-zn\x07]n{|>Qr}uQryn-J-=;=@-7-}n{|>crr\x07Qr}uH----}n{|=P|y|-J-zv\x075}n{|=P|y|9-zv\x075}n{|=P|y|9-tylSntP|y|9-pynz}5}|tr-7->=;=9-=;=9->;=669-r}5zn\x07]n{|=Qr}uQryn9-}n{|=Qr}uQryn66H----}n{|>P|y|-J-zv\x075}n{|>P|y|9-zv\x075}n{|>P|y|9-tylSntP|y|9-pynz}55>;=-:-}|tr6-7->=;=9-=;=9->;=669-r}5zn\x07]n{|>Qr}uQryn9-}n{|>Qr}uQryn66H--0r{qvs--<<-JJJ-全景图颜色混合-JJJ--rpA-}n{|P|y|H--0vs-qrsv{rq5b`RlOYNPXla_N[`VaV\\[6----sy|n-oynpx]|tr-J-np|5:?;=-7-}|tr-8->;=6H----}n{|P|y|-J-zv\x075}n{|=P|y|9-OYNPXlP\\Y\\_9-zv{5>;=9-oynpx]|tr66H----}n{|P|y|-J-zv\x075}n{|P|y|9-}n{|>P|y|9-zn\x075=;=9-oynpx]|tr-:-]V-8->;=66H--0ryvs-qrsv{rq5b`Rl`]_RNQla_N[`VaV\\[6----rp?-prr{Pr{rP||q-J-r|yv|{-7-}v\x07ry_nv|-<-?;=H----sy|n-n{vv|{_nqv-J-qvn{pr5rp?5=;=9-=;=69-prr{Pr{rP||q6-7->;?H----sy|n-n{vv|{]|tr-J-qvn{pr5tylSntP||q;\x07\b9-prr{Pr{rP||q6-<-n{vv|{_nqvH----}n{|P|y|-J-zv\x075}n{|=P|y|9-}n{|>P|y|9-z||ur}5=;=9-=;?9-}|tr-:-n{vv|{]|tr66H--0ryr----}n{|P|y|-J-zv\x075}n{|=P|y|9-}n{|>P|y|9-}|tr6H--0r{qvs--tylSntP|y|-J-zv\x075}n{|P|y|9-tylSntP|y|9-z|qryNy}un6H--ZNV[lR[Q\f"),vertex_default$3=function(...e){let t=113,n=126,r=0,o=``;return e[0].split(``).map(e=>e.charCodeAt(0)>126?e:String.fromCharCode((e.charCodeAt(0)+113)%126)).join(``)}("0qrsv{r-]U\\[T0qrsv{r-ZN_Xl`aR]->;=0qrsv{r-_\\\\SlZN_X->;=nvor-sy|n-lsrnrlvqlznxHn\bv{t-sy|n-_||sZnxHn\bv{t-rpA-Sv{ny]|vv|{Hn\bv{t-rp@-PnzrnQvrpv|{Hn\bv{t-rp@-cvr]|vv|{H{vs|z-rp@-z|qryO|{qv{tZn\x07H{vs|z-rp@-z|qryO|{qv{tZv{H<<u调整{vs|z-sy|n-p|y|`nnv|{H{vs|z-sy|n-p|y|Ovtu{rH0vs{qrs-SYNal`UNQRQ--n\bv{t-rp@-[|znyH--0vsqrs-b`RlaN[TR[a----n\bv{t-rp@-an{tr{H----n\bv{t-rp@-Ovn{tr{H--0r{qvs0r{qvs0v{pyqr-Ip|zz|{K0v{pyqr-Il}nlrr\x07K0v{pyqr-I?l}nlrr\x07K0v{pyqr-Iqv}ynprzr{zn}l}nlrr\x07K0v{pyqr-Ir{zn}l}nlrr\x07K0v{pyqr-Ip|y|l}nlrr\x07K0v{pyqr-Is|tl}nlrr\x07K0v{pyqr-Iz|}untrl}nlrr\x07K0v{pyqr-Ixv{{v{tl}nlrr\x07K0v{pyqr-Iunq|zn}l}nlrr\x07K0v{pyqr-Iy|tqr}uosl}nlrr\x07K0v{pyqr-Ipyv}}v{tl}yn{rl}nlrr\x07KZNV[lORS\\_R|vq-znv{56-\n--ZNV[l`aN_a--0v{pyqr-Ilrr\x07K--0v{pyqr-I?lrr\x07K--0v{pyqr-Ip|y|lrr\x07K--0v{pyqr-Iortv{{|znylrr\x07K--0v{pyqr-Iz|}u{|znylrr\x07K--0v{pyqr-Ixv{onrlrr\x07K--0v{pyqr-Ixv{{|znylrr\x07K--0v{pyqr-Iqrsny{|znylrr\x07K--0vs{qrs-SYNal`UNQRQ-<<-[|zny-p|z}rq-vu-qrvnvr-ur{-SYNal`UNQRQ----[|zny-J-{|znyv r5-n{s|zrq[|zny-6H----0vsqrs-b`RlaN[TR[a------an{tr{-J-{|znyv r5-n{s|zrqan{tr{-6H------Ovn{tr{-J-{|znyv r5-p|5-[|zny9-an{tr{-6-7-n{tr{;-6H----0r{qvs--0r{qvs--0v{pyqr-Iortv{lrr\x07K--0v{pyqr-Iz|}untrlrr\x07K--0v{pyqr-Ixv{{v{tlrr\x07K--0v{pyqr-Iqv}ynprzr{zn}lrr\x07K--0v{pyqr-I}|wrplrr\x07K--0v{pyqr-Iy|tqr}uoslrr\x07K--0v{pyqr-Ipyv}}v{tl}yn{rlrr\x07K--cvr]|vv|{-J-:-z]|vv|{;\x07\b H--Sv{ny]|vv|{-J-rpA5n{s|zrq9->;=6H--0vsqrs-b`RlV[`aN[PV[T----Sv{ny]|vv|{-J-v{n{prZnv\x07-7-Sv{ny]|vv|{H--0r{qvs--Sv{ny]|vv|{-J-z|qryZnv\x07-7-Sv{ny]|vv|{H--zn@-pnzrn_|nv|{Znv\x07-J-zn@5vrZnv\x07h=jh=j9-vrZnv\x07h>jh=j9-vrZnv\x07h?jh=j9-vrZnv\x07h=jh>j9-vrZnv\x07h>jh>j9-vrZnv\x07h?jh>j9-vrZnv\x07h=jh?j9-vrZnv\x07h>jh?j9-vrZnv\x07h?jh?j6H--PnzrnQvrpv|{-J-{|znyv r5pnzrn_|nv|{Znv\x07-7-rp@5=;=9-=;=9-:>;=66H--_||sZnx-J-=;=H--0vs-qrsv{rq5b`RlcR_aRelZN_X6----_||sZnx-J-z||ur}5_\\\\SlZN_X-:-ZN_Xl`aR]9-_\\\\SlZN_X9-lsrnrlvqlznx6H--0r{qvs--0v{pyqr-I|yq}|lrr\x07K--0v{pyqr-Ir{zn}lrr\x07K--0v{pyqr-Iunq|zn}lrr\x07K--0v{pyqr-Is|tlrr\x07K--ZNV[lR[Q\f"),fragment_default$3=function(...e){let t=113,n=126,r=0,o=``;return e[0].split(``).map(e=>e.charCodeAt(0)>126?e:String.fromCharCode((e.charCodeAt(0)+113)%126)).join(``)}("0qrsv{r-]U\\[T0qrsv{r-OYNPXlP\\Y\\_-rpA5=;=EC9-=;>=C9-=;>AF9->;=60qrsv{r-a_N[`]N_R[alP\\Y\\_-rpA5=;=9-=;=9-=;=9-=;=60qrsv{r-SYV]lPbORlZN]-:>;=p-]n{|-\n--nz}yrPor-zn}H--sy|n-zn}`v rH--rpA-zn}Uv|tnzH-<<-}rnx-zrn{-zv{-zn\x07--znA-znv\x07H--sy|n- ||zH\fH{vs|z-]n{|-}n{|=H{vs|z-]n{|-}n{|>H0vs-qrsv{rq5b`Rl]N[\\lQR]aU6--p-]n{|Qr}u-\n----nz}yrPor-zn}H----sy|n-zn\x07Qr}uH--\fH--{vs|z-]n{|Qr}u-}n{|=Qr}uH--{vs|z-]n{|Qr}u-}n{|>Qr}uH0r{qvs0vs-qrsv{rq5b`Rl]N[\\lSVYaR_6--p-Svyr]nnz-\n----sy|n-nnv|{`nnv|{OvnH----sy|n-p|{nP|{nOvnH----nz}yr?Q-uvtuyvtu`unq|YZn}H----sy|n-p|y|arz}rnrOvnH----sy|n-p|y|av{OvnH--\fH--{vs|z-Svyr]nnz-}n{|SvyrH0r{qvs0vs-qrsv{rq5b`Rl_RSV[RQl`P_RR[6--p-_rsv{rq`prr{-\n----nz}yr?Q-zn}H----znA-}|wrpv|{Znv\x07H----znA-znv\x07V{rrH----sy|n-|}npv\bH----sy|n-}n{|H--\fH--{vs|z-_rsv{rq`prr{-rsv{rq`prr{H0r{qvs{vs|z-sy|n-sy||V{qr\x07H{vs|z-sy|n-z|qryNy}unH{vs|z-sy|n-}|trH0vs-qrsv{rq5b`RlP\\Y\\_lP\\[`aN[a6--{vs|z-rp@-p|{n{P|y|H0r{qvs0vs-qrsv{rq5b`RlP\\Y\\_lNYaVabQR6--{vs|z-nz}yr?Q-tnqvr{ar\x07rH0r{qvsp-Pyv}}r-\n--znA-znv\x07V{rrH--sy|n-sy||V{qr\x07H\fH0vs-[bZlPYV]]R_`-K-=--{vs|z-Pyv}}r-pyv}}rh[bZlPYV]]R_`jH0r{qvsn\bv{t-rpA-Sv{ny]|vv|{Hn\bv{t-rp@-PnzrnQvrpv|{Hn\bv{t-sy|n-_||sZnxH{vs|z-sy|n-u|{Sy||V{qr\x07H{vs|z-rp?-r|yv|{H{vs|z-sy|n-}v\x07ry_nv|H{vs|z-rp@-qvssrH{vs|z-sy|n-p|y|Ny}unH{vs|z-rp@-rzvvrH{vs|z-rp@-}rpynH{vs|z-sy|n-uv{v{rH{vs|z-sy|n-|}npv\bH{vs|z-sy|n-ovtu{rH{vs|z-rp@-z|qryO|{qv{tZn\x07H{vs|z-rp@-z|qryO|{qv{tZv{H<<u调整{vs|z-sy|n-p|y|`nnv|{H{vs|z-sy|n-p|y|Ovtu{rH0vs{qrs-SYNal`UNQRQ--0vsqrs-b`RlaN[TR[a----n\bv{t-rp@-an{tr{H----n\bv{t-rp@-Ovn{tr{H--0r{qvs0r{qvs0v{pyqr-Ip|zz|{K0v{pyqr-I}npxv{tK0v{pyqr-Iqvurv{tl}nlsntzr{K0v{pyqr-Ip|y|l}nlsntzr{K0v{pyqr-Il}nlsntzr{K0v{pyqr-I?l}nlsntzr{K0v{pyqr-Izn}l}nlsntzr{K0v{pyqr-Iny}unzn}l}nlsntzr{K0v{pyqr-In|zn}l}nlsntzr{K0v{pyqr-Iyvtuzn}l}nlsntzr{K0v{pyqr-Irzvvrzn}l}nlsntzr{K0v{pyqr-IoqsK0v{pyqr-Iporllrsyrpv|{lsntzr{K0v{pyqr-Ir{zn}lp|zz|{l}nlsntzr{K0v{pyqr-Ir{zn}l}nlsntzr{K0v{pyqr-Is|tl}nlsntzr{K0v{pyqr-Iyvtul}nlortv{K0v{pyqr-Iyvtul}u|{tl}nlsntzr{K0v{pyqr-Iunq|zn}l}nlsntzr{K0v{pyqr-Ioz}zn}l}nlsntzr{K0v{pyqr-I{|znyzn}l}nlsntzr{K0v{pyqr-I}rpynzn}l}nlsntzr{K0v{pyqr-Iy|tqr}uosl}nlsntzr{K0v{pyqr-Ipyv}}v{tl}yn{rl}nlsntzr{Krp@- ||zcrp|5rp@-qvrpv|{9-rp@-rp|9-sy|n- ||z6-\n--sy|n-urn-J-q|5qvrpv|{9-rp|6H--rp@-q-J-qvrpv|{-7-urnH--rp@-}-J-rp|-:-qH--rp@-\0-J-}-<- ||zH--r{-{|znyv r5q-8-\x006H\frp@-to?u5rp@-p6-\n--rpA-X-J-rpA5=;=9-:>;=-<-@;=9-?;=-<-@;=9-:>;=6H--rpA-}-J-zv\x075rpA5p;ot9-X; 69-rpA5p;to9-X;\x07\b69-r}5p;o9-p;t66H--rpA-\0-J-zv\x075rpA5};\x07\b9-p;69-rpA5p;9-};\b \x0769-r}5};\x079-p;66H--sy|n-q-J-\0;\x07-:-zv{5\0;9-\0;\b6H--sy|n-r-J->;=r:>=H--r{-rp@5no5\0; -8-5\0;-:-\0;\b6-<-5C;=-7-q-8-r669-q-<-5\0;\x07-8-r69-\0;\x076H\frp@-u?to5rp@-p6-\n--rpA-X-J-rpA5>;=9-?;=-<-@;=9->;=-<-@;=9-@;=6H--rp@-}-J-no5snp5p;\x07\x07\x07-8-X;\x07\b 6-7-C;=-:-X;6H--r{-p; -7-zv\x075X;\x07\x07\x079-pynz}5}-:-X;\x07\x07\x079-=;=9->;=69-p;\b6H\frp@-trP|y|O\bUrvtu5nz}yr?Q-tnqvr{ar\x07r9-rpA-Sv{ny]|vv|{6-\n--sy|n--J-5Sv{ny]|vv|{;\b-:-z|qryO|{qv{tZv{;\b6-<-5z|qryO|{qv{tZn\x07;\b-:-z|qryO|{qv{tZv{;\b6H--r{-r\x07r?Q5tnqvr{ar\x07r9-rp?59-=;B66;toH\f0vs-qrsv{rq5b`Rl]N[\\lSVYaR_6--rp@-svyrUvtuyvtu`unq|5rp@-p|y|9-rpA-uv|tnz6-\n----rp@-u-J-to?u5p|y|6H----u; -J-r\x07r?Q5}n{|Svyr;uvtuyvtu`unq|YZn}9-rp?5u; 9-=;=66;H----p|y|-J-u?to5u6H----r{-pynz}5p|y|9-=;=9->;=6H--\f--rp@-svyrP|y|arz}rnr5rp@-p|y|9-rpA-uv|tnz6-\n----sy|n-rz}rnrOvn-J-pynz}5}n{|Svyr;p|y|arz}rnrOvn9-:>==;=9->==;=6H----sy|n-`pnyr-J->;=-8-rz}rnrOvn-<-@==;=H----sy|n-o`pnyr-J->;=-:-rz}rnrOvn-<-@==;=H----p|y|;-J-p|y|;-7-`pnyrH----p|y|;o-J-p|y|;o-7-o`pnyrH----r{-pynz}5p|y|9-=;=9->;=6H--\f--rp@-svyrP|y|av{5rp@-p|y|9-rpA-uv|tnz6-\n----sy|n-v{Ovn-J-pynz}5}n{|Svyr;p|y|av{Ovn9-:>==;=9->==;=6H----rp@-pnyr-J-rp@5>;=6H----vs-5v{Ovn-K-=;=6-\n------pnyr;t-J->;=-:-v{Ovn-<-?==;=H----\f-ryr-\n------pnyr;-J->;=-8-v{Ovn-7-=;B-<-?==;=H------pnyr;t-J->;=-:-v{Ovn-7-=;B-<-?==;=H------pnyr;o-J->;=-8-v{Ovn-7-=;B-<-?==;=H----\f----p|y|-7J-pnyrH----r{-pynz}5p|y|9-=;=9->;=6H--\f--rp@-svyrP|y|5rp@-p|y|9-rpA-uv|tnz6-\n----rp@-to-J-p|y|H----to-J-svyrP|y|arz}rnr5to9-uv|tnz6H----to-J-svyrP|y|av{5to9-uv|tnz6H----r{-toH--\f--rp@-svyrP|{n5rp@-p|y|9-rpA-uv|tnz6-\n----sy|n-zrn{cny-J-uv|tnzh>jH----sy|n-zv{cny-J-uv|tnzh?jH----sy|n-zn\x07cny-J-uv|tnzh@jH----sy|n-p|{nOvn-J-pynz}5}n{|Svyr;p|{nP|{nOvn9-:>;=9->;=6H----sy|n-rqOvn-J->;=-7-p|{nOvn-8->;=H----sy|n-ovn`\0nrunys-J-p|{nOvn-7-p|{nOvn-<-?;=H----sy|n-y|}ry|-J-5rqOvn-:->;=6-<-zrn{cnyH----sy|n-y|}ruvtu-J-5>;=-:-rqOvn6-<-5>;=-:-zrn{cny6H----sy|n-ovn-J-5rqOvn-:-zrn{cny6-<-5>;=-:-zrn{cny6H----sy|n-pnyrlsnp|-J->;=-<-5zn\x07cny-:-zv{cny6H----rp@-ny-J-p|y|H----sy|n-zn\x07lny-J-zn\x075zn\x075p|y|;9-p|y|;t69-p|y|;o6H----vs-5p|{nOvn-I-=;=6-\n------ny-J-ny-7-5>;=-:-ovn`\0nrunys6-8-zn\x07lny-7-ovn`\0nrunysH----\f----rp@-rzn}-J-rp@5------5ny;-I-zrn{cny6-L-y|}ry|-7-ny;-8->;=-G-y|}ruvtu-7-ny;-8-ovn9------5ny;t-I-zrn{cny6-L-y|}ry|-7-ny;t-8->;=-G-y|}ruvtu-7-ny;t-8-ovn9------5ny;o-I-zrn{cny6-L-y|}ry|-7-ny;o-8->;=-G-y|}ruvtu-7-ny;o-8-ovn----6H----rp@-|`pnyr-J-rzn}-7-pnyrlsnp|H----p|y|-J-5ny-:-zrn{cny6-7-|`pnyr-8-zrn{cnyH----r{-pynz}5p|y|9-=;=9->;=6H--\f--rp@-svyr`nnv|{5rp@-p|y|9-rpA-uv|tnz6-\n----sy|n-nnv|{Ovn-J-pynz}5}n{|Svyr;nnv|{`nnv|{Ovn9-:>;=9->;=6H----sy|n-n`pnyr-J->;=-8-nnv|{OvnH----sy|n-yzv{n{pr-J-=;?FF-7-p|y|;-8-=;BED-7-p|y|;t-8-=;>>A-7-p|y|;oH----p|y|-J-5p|y|-:-yzv{n{pr6-7-n`pnyr-8-yzv{n{prH----r{-pynz}5p|y|9-=;=9->;=6H--\f--rp@-r\x07rpSvyr5rp@-p|y|9-rpA-uv|tnz6-\n----rp@-to-J-p|y|H----to-J-svyrUvtuyvtu`unq|5to9-uv|tnz6H----to-J-svyrP|y|5to9-uv|tnz6H----to-J-svyrP|{n5to9-uv|tnz6H----to-J-svyr`nnv|{5to9-uv|tnz6H----r{-toH--\f0r{qvsZNV[lORS\\_R|vq-znv{56-\n--ZNV[l`aN_a--<<-JJJ-楼层-JJJ--o||y-vPr{Sy||-J-u|{Sy||V{qr\x07-I-:=;=>-\v\v-no5sy||V{qr\x07-:-u|{Sy||V{qr\x076-I-=;FFH--sy|n-sy||\\}npv\b-J->;=H--vs-5.vPr{Sy||6-\n----0vs-qrsv{rq5b`RlSY\\\\_l`afYRlcV`VOVYVaf6------qvpnqH----0r{qvs----sy||\\}npv\b-J-pynz}5=;?-7-zv{55>;=-8-PnzrnQvrpv|{;\b69->;=69-=;=9->;=6H--\f--<<-JJJJJJJJJJJ--<<-JJJ-顶部裁切-JJJ--sy|n-||sP]|tr-J-}|5pynz}5:PnzrnQvrpv|{;\b9-=;=9->;=69-@;=6H--vs-5----_||sZnx-K-=;==>-33----Sv{ny]|vv|{;\b-K-z|qryO|{qv{tZn\x07;\b-:-||sP]|tr-7-5z|qryO|{qv{tZn\x07;\b-:-z|qryO|{qv{tZv{;\b6--6-\n----qvpnqH--\f--<<-JJJJJJJJJJJJJJ--<<-JJJ-前置裁切计算-JJJ--0vs-[bZlPYV]]R_`-K-=----o||y-pyv}}rqH----rpA-pyv}}r]|vv|{H----0}ntzn-{|yyly||}ln----s|-5-v{-v-J-=H-v-I-[bZlPYV]]R_`H-v-88-6-\n------pyv}}r]|vv|{-J-pyv}}rh-v-j;znv\x07V{rr-7-Sv{ny]|vv|{H------pyv}}rq-J-5pyv}}rh-v-j;sy||V{qr\x07-I-=;=-\v\v-no5sy||V{qr\x07-:-pyv}}rh-v-j;sy||V{qr\x076-I->;=6H------pyv}}rq-J-pyv}}rq-33-pyv}}r]|vv|{;\x07-K-:=;B-33-pyv}}r]|vv|{;\x07-I-=;BH------pyv}}rq-J-pyv}}rq-33-pyv}}r]|vv|{;\b-K-:=;B-33-pyv}}r]|vv|{;\b-I-=;BH------pyv}}rq-J-pyv}}rq-33-pyv}}r]|vv|{; -K-:=;B-33-pyv}}r]|vv|{; -I-=;BH------vs-5pyv}}rq6-\n--------qvpnqH------\f----\f----0}ntzn-{|yyly||}lr{q--0r{qvs--<<-JJJJJJJJJJJJJJJJ--0v{pyqr-Ipyv}}v{tl}yn{rlsntzr{K--rpA-qvssrP|y|-J-rpA5-qvssr9-p|y|Ny}un-7-|}npv\b-6H--<<-JJJ-高度色-JJJ--0vs-qrsv{rq5b`RlP\\Y\\_lNYaVabQR6----qvssrP|y|;to-J-trP|y|O\bUrvtu5tnqvr{ar\x07r9-Sv{ny]|vv|{6H--0r{qvs--<<-JJJJJJJJJJJ--<<-JJJ-纯色-JJJ--0vs-qrsv{rq5b`RlP\\Y\\_lP\\[`aN[a6----qvssrP|y|;to-J-p|{n{P|y|H--0r{qvs--<<-JJJJJJJJJJJ--_rsyrprqYvtu-rsyrprqYvtu-J-_rsyrprqYvtu5-rp@5-=;=-69-rp@5-=;=-69-rp@5-=;=-69-rp@5-=;=-6-6H--rp@-|nyRzvvr_nqvn{pr-J-rzvvrH--0v{pyqr-Iy|tqr}uoslsntzr{K--0v{pyqr-Izn}lsntzr{K--0v{pyqr-Ip|y|lsntzr{K--0v{pyqr-Iny}unzn}lsntzr{K--0v{pyqr-Iny}unrlsntzr{K--0v{pyqr-I}rpynzn}lsntzr{K--0v{pyqr-I{|znylsntzr{lortv{K--0v{pyqr-I{|znylsntzr{lzn}K--0v{pyqr-Irzvvrzn}lsntzr{K--<<-nppzynv|{--0v{pyqr-Iyvtul}u|{tlsntzr{K--0v{pyqr-Iyvtulsntzr{lortv{K--0v{pyqr-Iyvtulsntzr{lzn}K--0v{pyqr-Iyvtulsntzr{lr{qK--<<-z|qynv|{--0v{pyqr-In|zn}lsntzr{K--rp@-|t|v{tYvtu-J-rsyrprqYvtu;qvrpQvssr-8-rsyrprqYvtu;v{qvrpQvssr-8-rsyrprqYvtu;qvrp`}rpyn-8-rsyrprqYvtu;v{qvrp`}rpyn-8-|nyRzvvr_nqvn{prH--0v{pyqr-Ir{zn}lsntzr{K--qvssrP|y|;n-J-qvssrP|y|;n-7-sy||\\}npv\b-7-ovtu{rH--0vs-qrsv{rq5b`Rl\\]N^bR6----qvssrP|y|;n-J->;=H--0r{qvs--tylSntP|y|-J-rpA5|t|v{tYvtu9-qvssrP|y|;n6H--<<-JJJ-颜色增益调整-JJJ--0vs-qrsv{rq5b`RlP\\Y\\_lNQWb`aZR[a6----rp@-uP|y|-J-to?u5tylSntP|y|;to6H----uP|y|;\b-8J-p|y|`nnv|{H----uP|y|; -8J-p|y|Ovtu{rH----tylSntP|y|;to-J-zn\x075u?to5uP|y|69-=;=6H--0r{qvs--<<-JJJJJJJJJJJJJJJJJJ--ZNV[lZ\\QRYlP\\Y\\_--<<色调映射-色彩空间转换--0v{pyqr-I|{rzn}}v{tlsntzr{K--0v{pyqr-Ir{p|qv{tlsntzr{K--0v{pyqr-Is|tlsntzr{K--0v{pyqr-I}rzyv}yvrqlny}unlsntzr{K--0v{pyqr-Iqvurv{tlsntzr{K--<<-JJJ-全景图-JJJ--rp@-}n{|=a|crr\x07-J-{|znyv r5Sv{ny]|vv|{;\x07\b -:-}n{|=;znv\x07h@j;\x07\b 6H--}n{|=a|crr\x07-J- ||zcrp|5PnzrnQvrpv|{9-}n{|=a|crr\x079-}n{|=; ||z6H--}n{|=a|crr\x07-J-}n{|=a|crr\x07-7-zn@5}n{|=;znv\x076H--rp@-}n{|>a|crr\x07-J-{|znyv r5Sv{ny]|vv|{;\x07\b -:-}n{|>;znv\x07h@j;\x07\b 6H--}n{|>a|crr\x07-J- ||zcrp|5PnzrnQvrpv|{9-}n{|>a|crr\x079-}n{|>; ||z6H--}n{|>a|crr\x07-J-}n{|>a|crr\x07-7-zn@5}n{|>;znv\x076H--rpA-}n{|=P|y|-J-r\x07rPor5}n{|=;zn}9-rp@5SYV]lPbORlZN]-7-}n{|=a|crr\x07;\x079-}n{|=a|crr\x07;\b 66H--rpA-}n{|>P|y|-J-r\x07rPor5}n{|>;zn}9-rp@5SYV]lPbORlZN]-7-}n{|>a|crr\x07;\x079-}n{|>a|crr\x07;\b 66H--<<-JJJ-全景图瓦片细化-JJJ--0vs-qrsv{rq5b`Rl_RSV[RQl`P_RR[6----rpA-rsv{rqPnzrn]|v|{-J-rsv{rq`prr{;znv\x07V{rr-7-Sv{ny]|vv|{H----sy|n-rsv{rqg||z-J-zv\x075}n{|=; ||z9-}n{|>; ||z9-rsv{rq`prr{;}n{|6H----rp@-rsv{rqPnzrncrr\x07-J-{|znyv r5rsv{rqPnzrn]|v|{;\x07\b 6H----rsv{rqPnzrncrr\x07-J- ||zcrp|5rp@5=;=9-=;=9->;=69-rsv{rqPnzrncrr\x079-rsv{rqg||z6H----rpA-rsv{rq]|v|{-J-rsv{rq`prr{;}|wrpv|{Znv\x07-7-rpA5rsv{rqPnzrncrr\x079->;=6H----rsv{rq]|v|{-J-rsv{rq]|v|{-<-rsv{rq]|v|{;H----rpA-rsv{rqP|y|-J-r\x07r?Q5rsv{rq`prr{;zn}9-5rsv{rq]|v|{;\x07\b-8->;=6-<-?;=6H----rsv{rqP|y|;n-J-rsv{rqP|y|;n-7-rsv{rq`prr{;|}npv\bH----sy|n-rsv{rq\\rsy|]|tr-J-r}5no5rsv{rq]|v|{;\x0769->;=6-7-r}5no5rsv{rq]|v|{;\b69->;=6-7-r}5rsv{rqPnzrn]|v|{; 9-=;=6H----rsv{rqP|y|-J-zv\x075a_N[`]N_R[alP\\Y\\_9-rsv{rqP|y|9-rsv{rq\\rsy|]|tr6H----rpA-rsv{rq]n{|=P|y|-J-zv\x075rsv{rqP|y|9-a_N[`]N_R[alP\\Y\\_9-rsv{rq`prr{;}n{|6H----rpA-rsv{rq]n{|>P|y|-J-zv\x075rsv{rqP|y|9-a_N[`]N_R[alP\\Y\\_9->;=-:-rsv{rq`prr{;}n{|6H----}n{|=P|y|-J-zv\x075}n{|=P|y|9-rpA5rsv{rq]n{|=P|y|;to9-}n{|=P|y|;n69-rsv{rq]n{|=P|y|;n6H----}n{|>P|y|-J-zv\x075}n{|>P|y|9-rpA5rsv{rq]n{|>P|y|;to9-}n{|>P|y|;n69-rsv{rq]n{|>P|y|;n6H--0r{qvs--<<-JJJ-运动过程全景图通过深度剔除-JJJ--0vs-qrsv{rq5b`Rl]N[\\lQR]aU6----sy|n-}n{|=crr\x07Qr}u-J-pynz}5yr{tu5Sv{ny]|vv|{;\x07\b -:-}n{|=;znv\x07h@j;\x07\b 69-=;=9-}n{|=Qr}u;zn\x07Qr}u6H----sy|n-}n{|>crr\x07Qr}u-J-pynz}5yr{tu5Sv{ny]|vv|{;\x07\b -:-}n{|>;znv\x07h@j;\x07\b 69-=;=9-}n{|>Qr}u;zn\x07Qr}u6H----sy|n-}n{|=Qr}uZn}Qr}u-J-{}npx_TONa|Qr}u5r\x07rPor5}n{|=Qr}u;zn}9-}n{|=a|crr\x0766-7-}n{|=Qr}u;zn\x07Qr}uH----sy|n-}n{|>Qr}uZn}Qr}u-J-{}npx_TONa|Qr}u5r\x07rPor5}n{|>Qr}u;zn}9-}n{|>a|crr\x0766-7-}n{|>Qr}u;zn\x07Qr}uH----sy|n-}n{|=Qr}uQryn-J-no5}n{|=Qr}uZn}Qr}u-:-}n{|=crr\x07Qr}u6H----sy|n-}n{|>Qr}uQryn-J-no5}n{|>Qr}uZn}Qr}u-:-}n{|>crr\x07Qr}u6H----sy|n-zn\x07]n{|=Qr}uQryn-J-=;=@-7-}n{|=crr\x07Qr}uH----sy|n-zn\x07]n{|>Qr}uQryn-J-=;=@-7-}n{|>crr\x07Qr}uH----}n{|=P|y|-J-zv\x075}n{|=P|y|9-zv\x075}n{|=P|y|9-tylSntP|y|9-pynz}5}|tr-7->=;=9-=;=9->;=669-r}5zn\x07]n{|=Qr}uQryn9-}n{|=Qr}uQryn66H----}n{|>P|y|-J-zv\x075}n{|>P|y|9-zv\x075}n{|>P|y|9-tylSntP|y|9-pynz}55>;=-:-}|tr6-7->=;=9-=;=9->;=669-r}5zn\x07]n{|>Qr}uQryn9-}n{|>Qr}uQryn66H--0r{qvs--<<-JJJ-全景图滤镜-JJJ--0vs-qrsv{rq5b`Rl]N[\\lSVYaR_6----}n{|=P|y|;to-J-r\x07rpSvyr5}n{|=P|y|;to9-}n{|=;zn}Uv|tnz6H----}n{|>P|y|;to-J-r\x07rpSvyr5}n{|>P|y|;to9-}n{|>;zn}Uv|tnz6H--0r{qvs--ZNV[l]N[\\lP\\Y\\_--<<-JJJ-全景图颜色混合-JJJ--rpA-}n{|P|y|H--0vs-qrsv{rq5b`RlOYNPXla_N[`VaV\\[6----sy|n-oynpx]|tr-J-np|5:?;=-7-}|tr-8->;=6H----}n{|P|y|-J-zv\x075}n{|=P|y|9-OYNPXlP\\Y\\_9-zv{5>;=9-oynpx]|tr66H----}n{|P|y|-J-zv\x075}n{|P|y|9-}n{|>P|y|9-zn\x075=;=9-oynpx]|tr-:-]V-8->;=66H--0ryvs-qrsv{rq5b`Rl`]_RNQla_N[`VaV\\[6----rp?-prr{Pr{rP||q-J-r|yv|{-7-}v\x07ry_nv|-<-?;=H----sy|n-n{vv|{_nqv-J-qvn{pr5rp?5=;=9-=;=69-prr{Pr{rP||q6-7->;?H----sy|n-n{vv|{]|tr-J-qvn{pr5tylSntP||q;\x07\b9-prr{Pr{rP||q6-<-n{vv|{_nqvH----}n{|P|y|-J-zv\x075}n{|=P|y|9-}n{|>P|y|9-z||ur}5=;=9-=;?9-}|tr-:-n{vv|{]|tr66H--0ryr----}n{|P|y|-J-zv\x075}n{|=P|y|9-}n{|>P|y|9-}|tr6H--0r{qvs--tylSntP|y|-J-zv\x075}n{|P|y|9-tylSntP|y|9-z|qryNy}un6H--ZNV[lR[Q\f"),vertex_default$2=function(...e){let t=113,n=126,r=0,o=``;return e[0].split(``).map(e=>e.charCodeAt(0)>126?e:String.fromCharCode((e.charCodeAt(0)+113)%126)).join(``)}("0qrsv{r-`aN[QN_Q0qrsv{r-ZN_Xl`aR]->;=0qrsv{r-_\\\\SlZN_X->;=nvor-sy|n-lsrnrlvqlznxHn\bv{t-sy|n-_||sZnxHn\bv{t-rpA-Sv{ny]|vv|{Hn\bv{t-rp@-PnzrnQvrpv|{Hn\bv{t-rp@-cvr]|vv|{H{vs|z-rp@-z|qryO|{qv{tZn\x07H{vs|z-rp@-z|qryO|{qv{tZv{H<<u调整{vs|z-sy|n-p|y|`nnv|{H{vs|z-sy|n-p|y|Ovtu{rH0vs{qrs-SYNal`UNQRQ--n\bv{t-rp@-[|znyH--0vsqrs-b`RlaN[TR[a----n\bv{t-rp@-an{tr{H----n\bv{t-rp@-Ovn{tr{H--0r{qvs0r{qvs0v{pyqr-Ip|zz|{K0v{pyqr-Il}nlrr\x07K0v{pyqr-I?l}nlrr\x07K0v{pyqr-Iqv}ynprzr{zn}l}nlrr\x07K0v{pyqr-Ir{zn}l}nlrr\x07K0v{pyqr-Ip|y|l}nlrr\x07K0v{pyqr-Is|tl}nlrr\x07K0v{pyqr-Iz|}untrl}nlrr\x07K0v{pyqr-Ixv{{v{tl}nlrr\x07K0v{pyqr-Iunq|zn}l}nlrr\x07K0v{pyqr-Iy|tqr}uosl}nlrr\x07K0v{pyqr-Ipyv}}v{tl}yn{rl}nlrr\x07KZNV[lORS\\_R|vq-znv{56-\n--ZNV[l`aN_a--0v{pyqr-Ilrr\x07K--0v{pyqr-I?lrr\x07K--0v{pyqr-Ip|y|lrr\x07K--0v{pyqr-Iortv{{|znylrr\x07K--0v{pyqr-Iz|}u{|znylrr\x07K--0v{pyqr-Ixv{onrlrr\x07K--0v{pyqr-Ixv{{|znylrr\x07K--0v{pyqr-Iqrsny{|znylrr\x07K0vs{qrs-SYNal`UNQRQ-<<-[|zny-p|z}rq-vu-qrvnvr-ur{-SYNal`UNQRQ--[|zny-J-{|znyv r5-n{s|zrq[|zny-6H--0vsqrs-b`RlaN[TR[a----an{tr{-J-{|znyv r5-n{s|zrqan{tr{-6H----Ovn{tr{-J-{|znyv r5-p|5-[|zny9-an{tr{-6-7-n{tr{;-6H--0r{qvs0r{qvs--0v{pyqr-Iortv{lrr\x07K--0v{pyqr-Iz|}untrlrr\x07K--0v{pyqr-Ixv{{v{tlrr\x07K--0v{pyqr-Iqv}ynprzr{zn}lrr\x07K--0v{pyqr-I}|wrplrr\x07K--0v{pyqr-Iy|tqr}uoslrr\x07K--0v{pyqr-Ipyv}}v{tl}yn{rlrr\x07K--cvr]|vv|{-J-:-z]|vv|{;\x07\b H--Sv{ny]|vv|{-J-rpA5n{s|zrq9->;=6H--0vsqrs-b`RlV[`aN[PV[T----Sv{ny]|vv|{-J-v{n{prZnv\x07-7-Sv{ny]|vv|{H--0r{qvs--Sv{ny]|vv|{-J-z|qryZnv\x07-7-Sv{ny]|vv|{H--zn@-pnzrn_|nv|{Znv\x07-J-zn@5vrZnv\x07h=jh=j9-vrZnv\x07h>jh=j9-vrZnv\x07h?jh=j9-vrZnv\x07h=jh>j9-vrZnv\x07h>jh>j9-vrZnv\x07h?jh>j9-vrZnv\x07h=jh?j9-vrZnv\x07h>jh?j9-vrZnv\x07h?jh?j6H--PnzrnQvrpv|{-J-{|znyv r5pnzrn_|nv|{Znv\x07-7-rp@5=;=9-=;=9-:>;=66H--_||sZnx-J-=;=H--0vs-qrsv{rq5b`RlcR_aRelZN_X6----_||sZnx-J-z||ur}5_\\\\SlZN_X-:-ZN_Xl`aR]9-_\\\\SlZN_X9-lsrnrlvqlznx6H--0r{qvs--0v{pyqr-I|yq}|lrr\x07K--0v{pyqr-Ir{zn}lrr\x07K--0v{pyqr-Iunq|zn}lrr\x07K--0v{pyqr-Is|tlrr\x07K--ZNV[lR[Q\f"),fragment_default$2=function(...e){let t=113,n=126,r=0,o=``;return e[0].split(``).map(e=>e.charCodeAt(0)>126?e:String.fromCharCode((e.charCodeAt(0)+113)%126)).join(``)}("0qrsv{r-`aN[QN_Q0qrsv{r-_RSYRPaVcVaf0qrsv{r-PYRN_P\\Na0qrsv{r-a_N[`]N_R[Pf0qrsv{r-OYNPXlP\\Y\\_-rpA5=;=EC9-=;>=C9-=;>AF9->;=60qrsv{r-a_N[`]N_R[alP\\Y\\_-rpA5=;=9-=;=9-=;=9-=;=60qrsv{r-SYV]lPbORlZN]-:>;=p-]n{|-\n--nz}yrPor-zn}H--sy|n-zn}`v rH--rpA-zn}Uv|tnzH-<<-}rnx-zrn{-zv{-zn\x07--znA-znv\x07H--sy|n- ||zH\fH{vs|z-]n{|-}n{|=H{vs|z-]n{|-}n{|>H0vs-qrsv{rq5b`Rl]N[\\lQR]aU6--p-]n{|Qr}u-\n----nz}yrPor-zn}H----sy|n-zn\x07Qr}uH--\fH--{vs|z-]n{|Qr}u-}n{|=Qr}uH--{vs|z-]n{|Qr}u-}n{|>Qr}uH0r{qvs0vs-qrsv{rq5b`Rl]N[\\lSVYaR_6--p-Svyr]nnz-\n----sy|n-nnv|{`nnv|{OvnH----sy|n-p|{nP|{nOvnH----nz}yr?Q-uvtuyvtu`unq|YZn}H----sy|n-p|y|arz}rnrOvnH----sy|n-p|y|av{OvnH--\fH--{vs|z-Svyr]nnz-}n{|SvyrH0r{qvs0vs-qrsv{rq5b`Rl_RSV[RQl`P_RR[6--p-_rsv{rq`prr{-\n----nz}yr?Q-zn}H----znA-}|wrpv|{Znv\x07H----znA-znv\x07V{rrH----sy|n-|}npv\bH----sy|n-}n{|H--\fH--{vs|z-_rsv{rq`prr{-rsv{rq`prr{H0r{qvs{vs|z-sy|n-sy||V{qr\x07H{vs|z-sy|n-z|qryNy}unH{vs|z-sy|n-}|trH0vs-qrsv{rq5b`RlP\\Y\\_lP\\[`aN[a6--{vs|z-rp@-p|{n{P|y|H0r{qvs0vs-qrsv{rq5b`RlP\\Y\\_lNYaVabQR6--{vs|z-nz}yr?Q-tnqvr{ar\x07rH0r{qvsp-Pyv}}r-\n--znA-znv\x07V{rrH--sy|n-sy||V{qr\x07H\fH0vs-[bZlPYV]]R_`-K-=--{vs|z-Pyv}}r-pyv}}rh[bZlPYV]]R_`jH0r{qvsn\bv{t-rpA-Sv{ny]|vv|{Hn\bv{t-rp@-PnzrnQvrpv|{Hn\bv{t-sy|n-_||sZnxH{vs|z-sy|n-u|{Sy||V{qr\x07H{vs|z-rp?-r|yv|{H{vs|z-sy|n-}v\x07ry_nv|H{vs|z-rp@-qvssrH{vs|z-sy|n-p|y|Ny}unH{vs|z-rp@-rzvvrH{vs|z-sy|n-|tu{rH{vs|z-sy|n-zrny{rH{vs|z-sy|n-|}npv\bH{vs|z-sy|n-ovtu{rH0vsqrs-a_N[`]N_R[Pf--{vs|z-sy|n-n{}nr{p\bH0r{qvs0vsqrs-_RSYRPaVcVaf--{vs|z-sy|n-rsyrpvv\bH0r{qvs0vsqrs-PYRN_P\\Na--{vs|z-sy|n-pyrnp|nH--{vs|z-sy|n-pyrnp|n_|tu{rH0r{qvs0vsqrs-b`Rl`URR[--{vs|z-rp@-urr{H0r{qvs{vs|z-rp@-z|qryO|{qv{tZn\x07H{vs|z-rp@-z|qryO|{qv{tZv{H<<u调整{vs|z-sy|n-p|y|`nnv|{H{vs|z-sy|n-p|y|Ovtu{rHn\bv{t-rp@-cvr]|vv|{H0vs{qrs-SYNal`UNQRQ--n\bv{t-rp@-[|znyH--0vsqrs-b`RlaN[TR[a----n\bv{t-rp@-an{tr{H----n\bv{t-rp@-Ovn{tr{H--0r{qvs0r{qvs0v{pyqr-Ip|zz|{K0v{pyqr-I}npxv{tK0v{pyqr-Iqvurv{tl}nlsntzr{K0v{pyqr-Ip|y|l}nlsntzr{K0v{pyqr-Il}nlsntzr{K0v{pyqr-I?l}nlsntzr{K0v{pyqr-Izn}l}nlsntzr{K0v{pyqr-Iny}unzn}l}nlsntzr{K0v{pyqr-In|zn}l}nlsntzr{K0v{pyqr-Iyvtuzn}l}nlsntzr{K0v{pyqr-Irzvvrzn}l}nlsntzr{K0v{pyqr-IoqsK0v{pyqr-Iporllrsyrpv|{lsntzr{K0v{pyqr-Ir{zn}lp|zz|{l}nlsntzr{K0v{pyqr-Ir{zn}l}u\bvpnyl}nlsntzr{K0v{pyqr-Is|tl}nlsntzr{K0v{pyqr-Iyvtul}nlortv{K0v{pyqr-Iyvtul}u\bvpnyl}nlsntzr{K0v{pyqr-Iunq|zn}l}nlsntzr{K0v{pyqr-Ioz}zn}l}nlsntzr{K0v{pyqr-I{|znyzn}l}nlsntzr{K0v{pyqr-Ipyrnp|nl}nlsntzr{K0v{pyqr-I|tu{rzn}l}nlsntzr{K0v{pyqr-Izrny{rzn}l}nlsntzr{K0v{pyqr-Iy|tqr}uosl}nlsntzr{K0v{pyqr-Ipyv}}v{tl}yn{rl}nlsntzr{Krp@- ||zcrp|5rp@-qvrpv|{9-rp@-rp|9-sy|n- ||z6-\n--sy|n-urn-J-q|5qvrpv|{9-rp|6H--rp@-q-J-qvrpv|{-7-urnH--rp@-}-J-rp|-:-qH--rp@-\0-J-}-<- ||zH--r{-{|znyv r5q-8-\x006H\frp@-to?u5rp@-p6-\n--rpA-X-J-rpA5=;=9-:>;=-<-@;=9-?;=-<-@;=9-:>;=6H--rpA-}-J-zv\x075rpA5p;ot9-X; 69-rpA5p;to9-X;\x07\b69-r}5p;o9-p;t66H--rpA-\0-J-zv\x075rpA5};\x07\b9-p;69-rpA5p;9-};\b \x0769-r}5};\x079-p;66H--sy|n-q-J-\0;\x07-:-zv{5\0;9-\0;\b6H--sy|n-r-J->;=r:>=H--r{-rp@5no5\0; -8-5\0;-:-\0;\b6-<-5C;=-7-q-8-r669-q-<-5\0;\x07-8-r69-\0;\x076H\frp@-u?to5rp@-p6-\n--rpA-X-J-rpA5>;=9-?;=-<-@;=9->;=-<-@;=9-@;=6H--rp@-}-J-no5snp5p;\x07\x07\x07-8-X;\x07\b 6-7-C;=-:-X;6H--r{-p; -7-zv\x075X;\x07\x07\x079-pynz}5}-:-X;\x07\x07\x079-=;=9->;=69-p;\b6H\frp@-trP|y|O\bUrvtu5nz}yr?Q-tnqvr{ar\x07r9-rpA-Sv{ny]|vv|{6-\n--sy|n--J-5Sv{ny]|vv|{;\b-:-z|qryO|{qv{tZv{;\b6-<-5z|qryO|{qv{tZn\x07;\b-:-z|qryO|{qv{tZv{;\b6H--r{-r\x07r?Q5tnqvr{ar\x07r9-rp?59-=;B66;toH\f0vs-qrsv{rq5b`Rl]N[\\lSVYaR_6--rp@-svyrUvtuyvtu`unq|5rp@-p|y|9-rpA-uv|tnz6-\n----rp@-u-J-to?u5p|y|6H----u; -J-r\x07r?Q5}n{|Svyr;uvtuyvtu`unq|YZn}9-rp?5u; 9-=;=66;H----p|y|-J-u?to5u6H----r{-pynz}5p|y|9-=;=9->;=6H--\f--rp@-svyrP|y|arz}rnr5rp@-p|y|9-rpA-uv|tnz6-\n----sy|n-rz}rnrOvn-J-pynz}5}n{|Svyr;p|y|arz}rnrOvn9-:>==;=9->==;=6H----sy|n-`pnyr-J->;=-8-rz}rnrOvn-<-@==;=H----sy|n-o`pnyr-J->;=-:-rz}rnrOvn-<-@==;=H----p|y|;-J-p|y|;-7-`pnyrH----p|y|;o-J-p|y|;o-7-o`pnyrH----r{-pynz}5p|y|9-=;=9->;=6H--\f--rp@-svyrP|y|av{5rp@-p|y|9-rpA-uv|tnz6-\n----sy|n-v{Ovn-J-pynz}5}n{|Svyr;p|y|av{Ovn9-:>==;=9->==;=6H----rp@-pnyr-J-rp@5>;=6H----vs-5v{Ovn-K-=;=6-\n------pnyr;t-J->;=-:-v{Ovn-<-?==;=H----\f-ryr-\n------pnyr;-J->;=-8-v{Ovn-7-=;B-<-?==;=H------pnyr;t-J->;=-:-v{Ovn-7-=;B-<-?==;=H------pnyr;o-J->;=-8-v{Ovn-7-=;B-<-?==;=H----\f----p|y|-7J-pnyrH----r{-pynz}5p|y|9-=;=9->;=6H--\f--rp@-svyrP|y|5rp@-p|y|9-rpA-uv|tnz6-\n----rp@-to-J-p|y|H----to-J-svyrP|y|arz}rnr5to9-uv|tnz6H----to-J-svyrP|y|av{5to9-uv|tnz6H----r{-toH--\f--rp@-svyrP|{n5rp@-p|y|9-rpA-uv|tnz6-\n----sy|n-zrn{cny-J-uv|tnzh>jH----sy|n-zv{cny-J-uv|tnzh?jH----sy|n-zn\x07cny-J-uv|tnzh@jH----sy|n-p|{nOvn-J-pynz}5}n{|Svyr;p|{nP|{nOvn9-:>;=9->;=6H----sy|n-rqOvn-J->;=-7-p|{nOvn-8->;=H----sy|n-ovn`\0nrunys-J-p|{nOvn-7-p|{nOvn-<-?;=H----sy|n-y|}ry|-J-5rqOvn-:->;=6-<-zrn{cnyH----sy|n-y|}ruvtu-J-5>;=-:-rqOvn6-<-5>;=-:-zrn{cny6H----sy|n-ovn-J-5rqOvn-:-zrn{cny6-<-5>;=-:-zrn{cny6H----sy|n-pnyrlsnp|-J->;=-<-5zn\x07cny-:-zv{cny6H----rp@-ny-J-p|y|H----sy|n-zn\x07lny-J-zn\x075zn\x075p|y|;9-p|y|;t69-p|y|;o6H----vs-5p|{nOvn-I-=;=6-\n------ny-J-ny-7-5>;=-:-ovn`\0nrunys6-8-zn\x07lny-7-ovn`\0nrunysH----\f----rp@-rzn}-J-rp@5------5ny;-I-zrn{cny6-L-y|}ry|-7-ny;-8->;=-G-y|}ruvtu-7-ny;-8-ovn9------5ny;t-I-zrn{cny6-L-y|}ry|-7-ny;t-8->;=-G-y|}ruvtu-7-ny;t-8-ovn9------5ny;o-I-zrn{cny6-L-y|}ry|-7-ny;o-8->;=-G-y|}ruvtu-7-ny;o-8-ovn----6H----rp@-|`pnyr-J-rzn}-7-pnyrlsnp|H----p|y|-J-5ny-:-zrn{cny6-7-|`pnyr-8-zrn{cnyH----r{-pynz}5p|y|9-=;=9->;=6H--\f--rp@-svyr`nnv|{5rp@-p|y|9-rpA-uv|tnz6-\n----sy|n-nnv|{Ovn-J-pynz}5}n{|Svyr;nnv|{`nnv|{Ovn9-:>;=9->;=6H----sy|n-n`pnyr-J->;=-8-nnv|{OvnH----sy|n-yzv{n{pr-J-=;?FF-7-p|y|;-8-=;BED-7-p|y|;t-8-=;>>A-7-p|y|;oH----p|y|-J-5p|y|-:-yzv{n{pr6-7-n`pnyr-8-yzv{n{prH----r{-pynz}5p|y|9-=;=9->;=6H--\f--rp@-r\x07rpSvyr5rp@-p|y|9-rpA-uv|tnz6-\n----rp@-to-J-p|y|H----to-J-svyrUvtuyvtu`unq|5to9-uv|tnz6H----to-J-svyrP|y|5to9-uv|tnz6H----to-J-svyrP|{n5to9-uv|tnz6H----to-J-svyr`nnv|{5to9-uv|tnz6H----r{-toH--\f0r{qvsZNV[lORS\\_R|vq-znv{56-\n--ZNV[l`aN_a--<<-JJJ-楼层-JJJ--o||y-vPr{Sy||-J-u|{Sy||V{qr\x07-I-:=;=>-\v\v-no5sy||V{qr\x07-:-u|{Sy||V{qr\x076-I-=;FFH--sy|n-sy||\\}npv\b-J->;=H--vs-5.vPr{Sy||6-\n----0vs-qrsv{rq5b`RlSY\\\\_l`afYRlcV`VOVYVaf6------qvpnqH----0r{qvs----sy||\\}npv\b-J-pynz}5=;?-7-zv{55>;=-8-PnzrnQvrpv|{;\b69->;=69-=;=9->;=6H--\f--<<-JJJJJJJJJJJ--<<-JJJ-顶部裁切-JJJ--sy|n-||sP]|tr-J-}|5pynz}5:PnzrnQvrpv|{;\b9-=;=9->;=69-@;=6H--vs-5----_||sZnx-K-=;==>-33----Sv{ny]|vv|{;\b-K-z|qryO|{qv{tZn\x07;\b-:-||sP]|tr-7-5z|qryO|{qv{tZn\x07;\b-:-z|qryO|{qv{tZv{;\b6--6-\n----qvpnqH--\f--<<-JJJJJJJJJJJJJJ--<<-JJJ-前置裁切计算-JJJ--0vs-[bZlPYV]]R_`-K-=----o||y-pyv}}rqH----rpA-pyv}}r]|vv|{H----0}ntzn-{|yyly||}ln----s|-5-v{-v-J-=H-v-I-[bZlPYV]]R_`H-v-88-6-\n------pyv}}r]|vv|{-J-pyv}}rh-v-j;znv\x07V{rr-7-Sv{ny]|vv|{H------pyv}}rq-J-5pyv}}rh-v-j;sy||V{qr\x07-I-=;=-\v\v-no5sy||V{qr\x07-:-pyv}}rh-v-j;sy||V{qr\x076-I->;=6H------pyv}}rq-J-pyv}}rq-33-pyv}}r]|vv|{;\x07-K-:=;B-33-pyv}}r]|vv|{;\x07-I-=;BH------pyv}}rq-J-pyv}}rq-33-pyv}}r]|vv|{;\b-K-:=;B-33-pyv}}r]|vv|{;\b-I-=;BH------pyv}}rq-J-pyv}}rq-33-pyv}}r]|vv|{; -K-:=;B-33-pyv}}r]|vv|{; -I-=;BH------vs-5pyv}}rq6-\n--------qvpnqH------\f----\f----0}ntzn-{|yyly||}lr{q--0r{qvs--<<-JJJJJJJJJJJJJJJJ--0v{pyqr-Ipyv}}v{tl}yn{rlsntzr{K--rpA-qvssrP|y|-J-rpA5-qvssr9-p|y|Ny}un-7-|}npv\b-6H--<<-JJJ-高度色-JJJ--0vs-qrsv{rq5b`RlP\\Y\\_lNYaVabQR6----qvssrP|y|;to-J-trP|y|O\bUrvtu5tnqvr{ar\x07r9-Sv{ny]|vv|{6H--0r{qvs--<<-JJJJJJJJJJJ--<<-JJJ-纯色-JJJ--0vs-qrsv{rq5b`RlP\\Y\\_lP\\[`aN[a6----qvssrP|y|;to-J-p|{n{P|y|H--0r{qvs--<<-JJJJJJJJJJJ--_rsyrprqYvtu-rsyrprqYvtu-J-_rsyrprqYvtu5-rp@5-=;=-69-rp@5-=;=-69-rp@5-=;=-69-rp@5-=;=-6-6H--rp@-|nyRzvvr_nqvn{pr-J-rzvvrH--0v{pyqr-Iy|tqr}uoslsntzr{K--0v{pyqr-Izn}lsntzr{K--0v{pyqr-Ip|y|lsntzr{K--0v{pyqr-Iny}unzn}lsntzr{K--0v{pyqr-Iny}unrlsntzr{K--0v{pyqr-I|tu{rzn}lsntzr{K0v{pyqr-Izrny{rzn}lsntzr{K--0v{pyqr-I{|znylsntzr{lortv{K--0v{pyqr-I{|znylsntzr{lzn}K--0v{pyqr-Ipyrnp|nl{|znylsntzr{lortv{K--0v{pyqr-Ipyrnp|nl{|znylsntzr{lzn}K--0v{pyqr-Irzvvrzn}lsntzr{K--<<-nppzynv|{--0v{pyqr-Iyvtul}u\bvpnylsntzr{K--0v{pyqr-Iyvtulsntzr{lortv{K--0v{pyqr-Iyvtulsntzr{lzn}K--0v{pyqr-Iyvtulsntzr{lr{qK--<<-z|qynv|{--0v{pyqr-In|zn}lsntzr{K--rp@-|t|v{tYvtu-J-rsyrprqYvtu;qvrpQvssr-8-rsyrprqYvtu;v{qvrpQvssr-8-rsyrprqYvtu;qvrp`}rpyn-8-rsyrprqYvtu;v{qvrp`}rpyn-8-|nyRzvvr_nqvn{prH<<-s|-n{zvv|{--0vsqrs-a_N[`]N_R[Pf----qvssrP|y|;n-7J-nnr5->;=-:-n{}nr{p\b-7-5>;=-:-znrvny;}rpyn_|tu{r6-8-yv{rna|_rynvrYzv{n{pr5-rsyrprqYvtu;qvrp`}rpyn-8-rsyrprqYvtu;v{qvrp`}rpyn-6-6H--0r{qvs--qvssrP|y|;n-J-qvssrP|y|;n-7-sy||\\}npv\b-7-ovtu{rH--0vs-qrsv{rq5b`Rl\\]N^bR6----qvssrP|y|;n-J->;=H--0r{qvs--tylSntP|y|-J-rpA5|t|v{tYvtu9-qvssrP|y|;n6H--<<-JJJ-颜色增益调整-JJJ--0vs-qrsv{rq5b`RlP\\Y\\_lNQWb`aZR[a6----rp@-uP|y|-J-to?u5tylSntP|y|;to6H----uP|y|;\b-8J-p|y|`nnv|{H----uP|y|; -8J-p|y|Ovtu{rH----tylSntP|y|;to-J-zn\x075u?to5uP|y|69-=;=6H--0r{qvs--<<-JJJJJJJJJJJJJJJJJJ--ZNV[lZ\\QRYlP\\Y\\_--<<色调映射-色彩空间转换--0v{pyqr-I|{rzn}}v{tlsntzr{K--0v{pyqr-Ir{p|qv{tlsntzr{K--0v{pyqr-Is|tlsntzr{K--0v{pyqr-I}rzyv}yvrqlny}unlsntzr{K--0v{pyqr-Iqvurv{tlsntzr{K--<<-JJJ-全景图-JJJ--rp@-}n{|=a|crr\x07-J-{|znyv r5Sv{ny]|vv|{;\x07\b -:-}n{|=;znv\x07h@j;\x07\b 6H--}n{|=a|crr\x07-J- ||zcrp|5PnzrnQvrpv|{9-}n{|=a|crr\x079-}n{|=; ||z6H--}n{|=a|crr\x07-J-}n{|=a|crr\x07-7-zn@5}n{|=;znv\x076H--rp@-}n{|>a|crr\x07-J-{|znyv r5Sv{ny]|vv|{;\x07\b -:-}n{|>;znv\x07h@j;\x07\b 6H--}n{|>a|crr\x07-J- ||zcrp|5PnzrnQvrpv|{9-}n{|>a|crr\x079-}n{|>; ||z6H--}n{|>a|crr\x07-J-}n{|>a|crr\x07-7-zn@5}n{|>;znv\x076H--rpA-}n{|=P|y|-J-r\x07rPor5}n{|=;zn}9-rp@5SYV]lPbORlZN]-7-}n{|=a|crr\x07;\x079-}n{|=a|crr\x07;\b 66H--rpA-}n{|>P|y|-J-r\x07rPor5}n{|>;zn}9-rp@5SYV]lPbORlZN]-7-}n{|>a|crr\x07;\x079-}n{|>a|crr\x07;\b 66H--<<-JJJ-全景图瓦片细化-JJJ--0vs-qrsv{rq5b`Rl_RSV[RQl`P_RR[6----rpA-rsv{rqPnzrn]|v|{-J-rsv{rq`prr{;znv\x07V{rr-7-Sv{ny]|vv|{H----sy|n-rsv{rqg||z-J-zv\x075}n{|=; ||z9-}n{|>; ||z9-rsv{rq`prr{;}n{|6H----rp@-rsv{rqPnzrncrr\x07-J-{|znyv r5rsv{rqPnzrn]|v|{;\x07\b 6H----rsv{rqPnzrncrr\x07-J- ||zcrp|5rp@5=;=9-=;=9->;=69-rsv{rqPnzrncrr\x079-rsv{rqg||z6H----rpA-rsv{rq]|v|{-J-rsv{rq`prr{;}|wrpv|{Znv\x07-7-rpA5rsv{rqPnzrncrr\x079->;=6H----rsv{rq]|v|{-J-rsv{rq]|v|{-<-rsv{rq]|v|{;H----rpA-rsv{rqP|y|-J-r\x07r?Q5rsv{rq`prr{;zn}9-5rsv{rq]|v|{;\x07\b-8->;=6-<-?;=6H----rsv{rqP|y|;n-J-rsv{rqP|y|;n-7-rsv{rq`prr{;|}npv\bH----sy|n-rsv{rq\\rsy|]|tr-J-r}5no5rsv{rq]|v|{;\x0769->;=6-7-r}5no5rsv{rq]|v|{;\b69->;=6-7-r}5rsv{rqPnzrn]|v|{; 9-=;=6H----rsv{rqP|y|-J-zv\x075a_N[`]N_R[alP\\Y\\_9-rsv{rqP|y|9-rsv{rq\\rsy|]|tr6H----rpA-rsv{rq]n{|=P|y|-J-zv\x075rsv{rqP|y|9-a_N[`]N_R[alP\\Y\\_9-rsv{rq`prr{;}n{|6H----rpA-rsv{rq]n{|>P|y|-J-zv\x075rsv{rqP|y|9-a_N[`]N_R[alP\\Y\\_9->;=-:-rsv{rq`prr{;}n{|6H----}n{|=P|y|-J-zv\x075}n{|=P|y|9-rpA5rsv{rq]n{|=P|y|;to9-}n{|=P|y|;n69-rsv{rq]n{|=P|y|;n6H----}n{|>P|y|-J-zv\x075}n{|>P|y|9-rpA5rsv{rq]n{|>P|y|;to9-}n{|>P|y|;n69-rsv{rq]n{|>P|y|;n6H--0r{qvs--<<-JJJ-运动过程全景图通过深度剔除-JJJ--0vs-qrsv{rq5b`Rl]N[\\lQR]aU6----sy|n-}n{|=crr\x07Qr}u-J-pynz}5yr{tu5Sv{ny]|vv|{;\x07\b -:-}n{|=;znv\x07h@j;\x07\b 69-=;=9-}n{|=Qr}u;zn\x07Qr}u6H----sy|n-}n{|>crr\x07Qr}u-J-pynz}5yr{tu5Sv{ny]|vv|{;\x07\b -:-}n{|>;znv\x07h@j;\x07\b 69-=;=9-}n{|>Qr}u;zn\x07Qr}u6H----sy|n-}n{|=Qr}uZn}Qr}u-J-{}npx_TONa|Qr}u5r\x07rPor5}n{|=Qr}u;zn}9-}n{|=a|crr\x0766-7-}n{|=Qr}u;zn\x07Qr}uH----sy|n-}n{|>Qr}uZn}Qr}u-J-{}npx_TONa|Qr}u5r\x07rPor5}n{|>Qr}u;zn}9-}n{|>a|crr\x0766-7-}n{|>Qr}u;zn\x07Qr}uH----sy|n-}n{|=Qr}uQryn-J-no5}n{|=Qr}uZn}Qr}u-:-}n{|=crr\x07Qr}u6H----sy|n-}n{|>Qr}uQryn-J-no5}n{|>Qr}uZn}Qr}u-:-}n{|>crr\x07Qr}u6H----sy|n-zn\x07]n{|=Qr}uQryn-J-=;=@-7-}n{|=crr\x07Qr}uH----sy|n-zn\x07]n{|>Qr}uQryn-J-=;=@-7-}n{|>crr\x07Qr}uH----}n{|=P|y|-J-zv\x075}n{|=P|y|9-zv\x075}n{|=P|y|9-tylSntP|y|9-pynz}5}|tr-7->=;=9-=;=9->;=669-r}5zn\x07]n{|=Qr}uQryn9-}n{|=Qr}uQryn66H----}n{|>P|y|-J-zv\x075}n{|>P|y|9-zv\x075}n{|>P|y|9-tylSntP|y|9-pynz}55>;=-:-}|tr6-7->=;=9-=;=9->;=669-r}5zn\x07]n{|>Qr}uQryn9-}n{|>Qr}uQryn66H--0r{qvs--<<-JJJ-全景图滤镜-JJJ--0vs-qrsv{rq5b`Rl]N[\\lSVYaR_6----}n{|=P|y|;to-J-r\x07rpSvyr5}n{|=P|y|;to9-}n{|=;zn}Uv|tnz6H----}n{|>P|y|;to-J-r\x07rpSvyr5}n{|>P|y|;to9-}n{|>;zn}Uv|tnz6H--0r{qvs--ZNV[l]N[\\lP\\Y\\_--<<-JJJ-全景图颜色混合-JJJ--rpA-}n{|P|y|H--0vs-qrsv{rq5b`RlOYNPXla_N[`VaV\\[6----sy|n-oynpx]|tr-J-np|5:?;=-7-}|tr-8->;=6H----}n{|P|y|-J-zv\x075}n{|=P|y|9-OYNPXlP\\Y\\_9-zv{5>;=9-oynpx]|tr66H----}n{|P|y|-J-zv\x075}n{|P|y|9-}n{|>P|y|9-zn\x075=;=9-oynpx]|tr-:-]V-8->;=66H--0ryvs-qrsv{rq5b`Rl`]_RNQla_N[`VaV\\[6----rp?-prr{Pr{rP||q-J-r|yv|{-7-}v\x07ry_nv|-<-?;=H----sy|n-n{vv|{_nqv-J-qvn{pr5rp?5=;=9-=;=69-prr{Pr{rP||q6-7->;?H----sy|n-n{vv|{]|tr-J-qvn{pr5tylSntP||q;\x07\b9-prr{Pr{rP||q6-<-n{vv|{_nqvH----}n{|P|y|-J-zv\x075}n{|=P|y|9-}n{|>P|y|9-z||ur}5=;=9-=;?9-}|tr-:-n{vv|{]|tr66H--0ryr----}n{|P|y|-J-zv\x075}n{|=P|y|9-}n{|>P|y|9-}|tr6H--0r{qvs--tylSntP|y|-J-zv\x075}n{|P|y|9-tylSntP|y|9-z|qryNy}un6H--ZNV[lR[Q\f"),Uniform=class extends three.Uniform{constructor(e){super(e)}};function setUniform(e,t){t&&e.value&&(t instanceof three.Color||t instanceof three.Matrix4||t instanceof three.Matrix3||t instanceof three.Vector2||t instanceof three.Vector3||t instanceof three.Vector4)?e.value.copy(t):Array.isArray(t)?e.value=t.slice():e.value=t}function cloneUniforms(e){return three.UniformsUtils.clone(e)}function mergeUniforms(...e){return three.UniformsUtils.merge(e)}function defineProperty(e,t,n){return Object.defineProperty(e,t,n)}var fastProto=null;function FastObject(e){if(fastProto!==null&&typeof fastProto.property){let e=fastProto;return fastProto=FastObject.prototype=null,e}return fastProto=FastObject.prototype=e==null?Object.create(null):e,new FastObject}var inlineCacheCutoff=10;for(let e=0;e<=inlineCacheCutoff;e++)FastObject();function toFastProperties(e){return FastObject(e)}var TAU$2=Math.PI*2;function formatRad$1(e){return e>=0&&e<TAU$2?e:(e%TAU$2+TAU$2)%TAU$2}function coordinatesToVector(e,t){let n=Math.abs(Math.cos(e.latitude)),r=-Math.sin(e.longitude)*n,o=-Math.sin(e.latitude),s=-Math.cos(e.longitude)*n;return t?t.set(r,o,s):new three.Vector3(r,o,s)}function vectorToCoordinates(e){return{longitude:formatRad$1(-Math.atan2(e.x,-e.z)),latitude:-Math.asin(e.y/1)}}function longitudeToHeading(e){return(-e/Math.PI*180-90)/360+.25}function headingToLongitude(e){return-((e-.25)*360+90)/180*Math.PI}var start=Date.now();typeof performance<`u`&&(typeof performance.timeOrigin==`number`?start=performance.timeOrigin:performance.timing!==void 0&&(start=performance.timing.navigationStart));var now=typeof performance<`u`?(()=>start+performance.now()):(()=>Date.now());function dateNowToDomHighResTimeStamp(e){return e-start}function clamp$1(e,t,n){return e<t?t:typeof n==`number`&&e>n?n:e}var DEFAULT_ASPECT=1,DEFAULT_NEAR=.1,DEFAULT_FAR=2e3,TAU$1=Math.PI*2,PI_2=Math.PI/2;function formatRad(e){return e>0&&e<=TAU$1?e:(e%TAU$1+TAU$1)%TAU$1}function matrixLerp(e,t,n,r){n=Math.pow(n,4);for(var o=0;o<16;o++)r.elements[o]=e.elements[o]+(t.elements[o]-e.elements[o])*n;return r}var Camera=class extends three.Camera{constructor(e,t=DEFAULT_ASPECT,n=DEFAULT_NEAR,r=DEFAULT_FAR,o=new three.Vector2,s=new three.Vector2(512,512),c=1){super(),this.fov=e,this.aspect=t,this.near=n,this.far=r,this.perspToOrtho=o,this.resolution=s,this.pixelRatio=c,this.time=0,this.controllerMode=null,this.needsRender=!0,this.refineModel=!0,this.pose={longitude:0,latitude:0,fov:e,distance:0,offset:new three.Vector3},this.computePose(),this.perspectiveCamera=new three.PerspectiveCamera(this.fov,this.aspect,.001,this.far);let l=Math.max(this.orthoDistance,.01)*Math.tan(.5*this.fov/180*Math.PI),u=-.5*this.aspect*2*l;this.orthographicCamera=new three.OrthographicCamera(u,-u,l,-l,.001,this.far),this.computeProjectionMatrix(),this.lastValues={position:this.position.clone(),quaternion:this.quaternion.clone(),scale:this.scale.clone(),fov:this.fov,aspect:this.aspect,near:this.near,far:this.far,orthoDistance:this.orthoDistance,perspToOrtho:this.perspToOrtho.clone()},this.type=this.perspToOrtho.x<1?`PerspectiveCamera`:`OrthographicCamera`,this.autoNearFar=!0}get orthoDistance(){return this.pose.distance>1?this.pose.distance:1+(this.pose.distance-1)*this.perspToOrtho.x}get zoom(){return this.type===`OrthographicCamera`?this.orthographicCamera.zoom:this.type===`PerspectiveCamera`?this.perspectiveCamera.zoom:1}get top(){return this.type===`OrthographicCamera`?this.orthographicCamera.top:0}get bottom(){return this.type===`OrthographicCamera`?this.orthographicCamera.bottom:0}get left(){return this.type===`OrthographicCamera`?this.orthographicCamera.left:0}get right(){return this.type===`OrthographicCamera`?this.orthographicCamera.right:0}getDirection(e){return coordinatesToVector(this.pose,e)}computePose(e=0){this.updateMatrix();let t=this.matrix.elements;return this.pose.latitude=Math.asin(clamp$1(t[9],-1,1)),Math.abs(t[9])<.9999999?this.pose.longitude=formatRad(Math.atan2(t[8],t[10])):this.pose.longitude=formatRad(Math.atan2(-t[2],t[0])),this.pose.fov=this.fov,this.pose.distance=e,this.pose.offset=new three.Vector3(-t[8],-t[9],-t[10]).setLength(this.pose.distance).add(this.position),this}setFromPose(e){var t,n,r,o,s;let c=formatRad((t=e.longitude)==null?this.pose.longitude:t),l=Math.max(-PI_2+1e-4,Math.min(PI_2-1e-4,(n=e.latitude)==null?this.pose.latitude:n)),u=(r=e.fov)==null?this.pose.fov:r,d=(o=e.distance)==null?this.pose.distance:o,f=(s=e.offset)==null?this.pose.offset:s,p=coordinatesToVector({longitude:c,latitude:l}).normalize();return this.position.set(0,0,0),this.lookAt(p),this.position.add(f).sub(p.clone().setLength(d)),this.fov!==u&&(this.fov=u,this.perspectiveCamera.fov=u,this.updateProjectionMatrix()),this.updateMatrixWorld(!0),this.pose.longitude=c,this.pose.latitude=l,this.pose.fov=u,this.pose.distance=d,this.pose.offset.copy(f),this.needsRender=!0,this}copyPose(){return{longitude:this.pose.longitude,latitude:this.pose.latitude,fov:this.pose.fov,distance:this.pose.distance,offset:this.pose.offset.clone()}}computeProjectionMatrix(){matrixLerp(this.orthographicCamera.projectionMatrix,this.perspectiveCamera.projectionMatrix,1-this.perspToOrtho.x,this.projectionMatrix),this.projectionMatrixInverse.getInverse(this.projectionMatrix),this.needsRender=!0}setViewOffset(e,t,n,r,o,s){this.perspectiveCamera.setViewOffset(e,t,n,r,o,s),this.orthographicCamera.setViewOffset(e,t,n,r,o,s),this.computeProjectionMatrix()}get view(){return this.perspectiveCamera.view?Object.assign({},this.perspectiveCamera.view):null}clearViewOffset(){this.perspectiveCamera.clearViewOffset(),this.orthographicCamera.clearViewOffset(),this.computeProjectionMatrix()}updateProjectionMatrix(){this.perspectiveCamera.updateProjectionMatrix(),this.orthographicCamera.updateProjectionMatrix(),this.computeProjectionMatrix()}get perspectiveProjectionMatrix(){return this.perspectiveCamera.projectionMatrix}get perspectiveProjectionMatrixInverse(){return this.perspectiveCamera.projectionMatrixInverse}get orthographicProjectionMatrix(){return this.orthographicCamera.projectionMatrix}get orthographicProjectionMatrixInverse(){return this.orthographicCamera.projectionMatrixInverse}updateTime(e){this.time=e;let t=!1;if((this.lastValues.fov!==this.fov||this.lastValues.near!==this.near||this.lastValues.far!==this.far||this.lastValues.aspect!==this.aspect)&&(this.perspectiveCamera.fov=this.fov,this.perspectiveCamera.near=this.near,this.perspectiveCamera.far=this.far,this.perspectiveCamera.aspect=this.aspect,this.perspectiveCamera.updateProjectionMatrix(),t=!0),!this.lastValues.position.equals(this.position)||!this.lastValues.quaternion.equals(this.quaternion)||!this.lastValues.scale.equals(this.scale)||!this.lastValues.perspToOrtho.equals(this.perspToOrtho)||this.lastValues.fov!==this.fov||this.lastValues.near!==this.near||this.lastValues.far!==this.far||this.lastValues.orthoDistance!==this.orthoDistance||this.lastValues.aspect!==this.aspect){let e=Math.max(this.orthoDistance,.01)*Math.tan(.5*this.fov/180*Math.PI),n=-.5*this.aspect*2*e;this.orthographicCamera.left=n,this.orthographicCamera.right=-n,this.orthographicCamera.top=e,this.orthographicCamera.bottom=-e,this.orthographicCamera.near=this.near,this.orthographicCamera.far=this.far,this.orthographicCamera.updateProjectionMatrix(),t=!0}t&&this.computeProjectionMatrix(),this.lastValues.position.copy(this.position),this.lastValues.quaternion.copy(this.quaternion),this.lastValues.scale.copy(this.scale),this.lastValues.fov=this.fov,this.lastValues.aspect=this.aspect,this.lastValues.near=this.near,this.lastValues.far=this.far,this.lastValues.orthoDistance=this.orthoDistance,this.lastValues.perspToOrtho.copy(this.perspToOrtho),this.type=this.perspToOrtho.x<1?`PerspectiveCamera`:`OrthographicCamera`}get isPerspectiveCamera(){return this.perspToOrtho.x<1}get isOrthographicCamera(){return this.perspToOrtho.x>=1}copy(e,t){return super.copy(e,t),this.fov=e.fov,this.aspect=e.aspect,this.near=e.near,this.far=e.far,this.perspToOrtho.copy(e.perspToOrtho),this.updateTime(now()),this}};function S4(){return((1+Math.random())*65536|0).toString(16).substring(1)}function createUuid(){return(S4()+S4()+`-`+S4()+`-4`+S4().substr(0,3)+`-`+S4()+`-`+S4()+S4()+S4()).toLowerCase()}function createSymbol(e){return typeof Symbol>`u`?`$Symbol<${e}>$`:Symbol(e)}var EVENT_SYMBOL=createSymbol(`$$FIVE_EVENT$$`);function __generateEventIfNotExisted(e){return e[EVENT_SYMBOL]||(e[EVENT_SYMBOL]={}),e[EVENT_SYMBOL]}function __removeEvents(e){e[EVENT_SYMBOL]&&delete e[EVENT_SYMBOL]}var Subscribe=class{hasListener(e){let t=__generateEventIfNotExisted(this);return t&&t[e]&&t[e].callbacks.length>0}on(e,t,n){let r=__generateEventIfNotExisted(this);return r[e]||(r[e]={callbacks:[]}),r[e].callbacks.push([t,n||!1]),()=>this.off(e,t)}once(e,t){return this.on(e,t,!0)}off(e,t){if(e===void 0){__removeEvents(this);return}let n=__generateEventIfNotExisted(this);if(n[e]||(n[e]={callbacks:[]}),t===void 0){n[e].callbacks.length=0;return}let r=0;for(;r<n[e].callbacks.length&&n[e].callbacks[r][0]!==t;r++);r<n[e].callbacks.length&&n[e].callbacks.splice(r,1)}emit(e,...t){let n=!1,r=__generateEventIfNotExisted(this);r[e]||(r[e]={callbacks:[]});let o=r[e].callbacks.slice();for(let[r,s=!1]of o){let o=r.apply(this,t);s&&this.off(e,r),o===!1&&(n=!0)}return n}waitUntil(e,t){return new Promise(n=>{let r=this.on(e,(...e)=>{(!t||t(...e)!==!1)&&(n(e),r())})})}},PBMUpdateable=class extends Subscribe{},PBMCustomShader=class extends PBMUpdateable{constructor(e){var t,n,r,o,s,c,l,u,d,f,p,m,h,g,_,v,y,b;super(),this.id=createUuid(),this.version=0,this.uniforms=(t=e.uniforms)==null?{}:t,this.defines=(n=e.defines)==null?{}:n,this.type=e.type,this.vertex={mainBefore:(o=(r=e.vertex)==null?void 0:r.mainBefore)==null?``:o,mainStart:(c=(s=e.vertex)==null?void 0:s.mainStart)==null?``:c,mainEnd:(u=(l=e.vertex)==null?void 0:l.mainEnd)==null?``:u},this.fragment={mainBefore:(f=(d=e.fragment)==null?void 0:d.mainBefore)==null?``:f,mainStart:(m=(p=e.fragment)==null?void 0:p.mainStart)==null?``:m,mainModelColor:(g=(h=e.fragment)==null?void 0:h.mainModelColor)==null?``:g,mainPanoColor:(v=(_=e.fragment)==null?void 0:_.mainPanoColor)==null?``:v,mainEnd:(b=(y=e.fragment)==null?void 0:y.mainEnd)==null?``:b}}get needsUpdate(){return!1}set needsUpdate(e){e===!0&&this.version++}onBeforeCompile(e,t){}},PBMPanoFilter=class e extends PBMUpdateable{static computeLut(e,t,n,r=1024,o=1,s,c){let l=clamp$1(e,-255,255)/255,u=clamp$1(t,-255,255)/255,d=clamp$1(n,-255,255)/255,f=new Float32Array(5),p=new Float32Array(5),m=new Float32Array(5);f[0]=0,f[1]=.125,f[2]=.5,f[3]=.875,f[4]=1;for(let e=0;e<5;e++)m[e]=f[e]*(1+d);m[4]=Math.max(1,m[4]);let h=1/2.2;for(let e=0;e<5;e++){let t=Math.pow(m[e]/m[4],2.2),n=Math.pow(m[e]/m[4],.45454545454545453);e<2?p[e]=m[e]+n*u:e>2?p[e]=m[e]+t*l:p[e]=m[e]}p[0]=0,p[4]=Math.max(1,p[4]),p[1]=Math.max(p[0]+.05,p[1]),p[3]=Math.min(p[4]-.0875,p[3]),p[2]=Math.max(Math.min(p[3]-.275,p[2]),p[1]+.275),s=s==null?new Float32Array(r*o):s,c=c==null?0:c;let g=r*2;for(let e=0;e<g;e++){let t=e/g,n=t*t,l=n*t,u=l*t,d=1-t,m=d*d,h=m*d,_=h*d,v=_*f[0]+4*h*t*f[1]+6*m*n*f[2]+4*d*l*f[3]+u*f[4],y=_*p[0]+4*h*t*p[1]+6*m*n*p[2]+4*d*l*p[3]+u*p[4],b=clamp$1(Math.round(v*(r-1)),0,r-1);for(let e=0;e<o;e++)s[c+b*o+e]=y}return s}constructor(){super(),this.id=createUuid();let t=()=>this.emit(`update`),n=0;this.contrast={get contrastBias(){return n},set contrastBias(e){n=e,t()}};let r=0;this.saturation={get saturationBias(){return r},set saturationBias(e){r=e,t()}};let o=0,s=0;this.color={get temperatureBias(){return o},set temperatureBias(e){o=e,t()},get tintBias(){return s},set tintBias(e){s=e,t()}};let c=0,l=0,u=0,d=[0,0,0].join(`:`),f=1024,p=3,m=new Float32Array(f*3);e.computeLut(0,0,0,f,3,m);let h=new three.DataTexture(m,f,1);h.flipY=!1,h.format=three.RGBFormat,h.type=three.FloatType,h.minFilter=three.NearestFilter,h.magFilter=three.NearestFilter,h.generateMipmaps=!1,h.needsUpdate=!0;let g=()=>{let t=[c,l,u].join(`:`);return t!==d&&(e.computeLut(c,l,u,f,3,m),h.needsUpdate=!0,d=t),h};this.highlightShadow={lutMap:h,get highlightBias(){return c},set highlightBias(e){c=e,g(),t()},get shadowBias(){return l},set shadowBias(e){l=e,g(),t()},get globalBias(){return u},set globalBias(e){u=e,g(),t()}}}toValue(){return{saturationSaturationBias:this.saturation.saturationBias,contrastContrastBias:this.contrast.contrastBias,highlightShadowLutMap:this.highlightShadow.lutMap,colorTemperatureBias:this.color.temperatureBias,colorTintBias:this.color.tintBias}}},PBMMaterial=class extends three.Material{},scratchViewport$5=new three.Vector4,pbmUniforms$1={colorAlpha:new Uniform(1),pano0:new Uniform({map:null,mapSize:1,mapHistogram:new three.Vector4,matrix:new three.Matrix4,zoom:1}),pano1:new Uniform({map:null,mapSize:1,mapHistogram:new three.Vector4,matrix:new three.Matrix4,zoom:1}),pano0Depth:new Uniform({map:null,maxDepth:1}),pano1Depth:new Uniform({map:null,maxDepth:1}),refinedScreen:new Uniform({projectionMatrix:new three.Matrix4,matrixInverse:new three.Matrix4,map:null,pano:0,opacity:1}),panoFilter:new Uniform(null),modelAlpha:new Uniform(1),progress:new Uniform(0),gradientTexture:new Uniform(null),clippers:new Uniform([]),shownFloorIndex:new Uniform(-1),constantColor:new Uniform(new three.Vector3),floorIndex:new Uniform(0),brightness:new Uniform(1),colorSaturation:new Uniform(0),colorBrightness:new Uniform(0),pixelRatio:new Uniform(1),resolution:new Uniform(new three.Vector2(512,512)),modelBoundingMin:new Uniform(new three.Vector3),modelBoundingMax:new Uniform(new three.Vector3)},shaderLib$1={none:{vertexShader:vertex_default$5,fragmentShader:fragment_default$5},basic:{vertexShader:vertex_default$4,fragmentShader:fragment_default$4},phong:{vertexShader:vertex_default$3,fragmentShader:fragment_default$3},standard:{vertexShader:vertex_default$2,fragmentShader:fragment_default$2}},uniformsLib$1=mergeUniforms(three.ShaderLib.basic.uniforms,three.ShaderLib.phong.uniforms,three.ShaderLib.physical.uniforms,pbmUniforms$1),definesLib$1={USE_OPAQUE:!1,USE_VERTEX_MARK:!1,USE_COLOR_CONSTANT:!1,USE_COLOR_ALTITUDE:!1,USE_COLOR_ADJUSTMENT:!1,USE_FLOOR_STYLE_VISIBILITY:!1,USE_BLACK_TRANSITION:!1,USE_SPREAD_TRANSITION:!1,USE_FADE_TRANSITION:!1,USE_REFINED_SCREEN:!1,USE_PANO_DEPTH:!1,USE_PANO_FILTER:!1,USE_HQ_WEIGHT:!1,USE_HQ_DEPTH:!1},PBMMeshMaterial=class extends PBMMaterial{constructor(e){var t,n;typeof e==`string`&&(e={shaderType:e}),super(),this.vertexTangents=!1,this.color=new three.Color(16777215),this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.specularMap=null,this.specular=new three.Color(1118481),this.shininess=30,this.roughnessMap=null,this.roughness=1,this.metalnessMap=null,this.metalness=0,this.alphaMap=null,this.combine=null,this.envMap=null,this.envMapIntensity=1,this.reflectivity=.4,this.refractionRatio=.98,this.emissiveMap=null,this.emissive=new three.Color(0),this.emissiveIntensity=1,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=three.TangentSpaceNormalMap,this.normalScale=new three.Vector2(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.clearcoat=0,this.clearcoatMap=null,this.clearcoatRoughness=0,this.clearcoatRoughnessMap=null,this.clearcoatNormalScale=new three.Vector2(1,1),this.clearcoatNormalMap=null,this.sheen=null,this.transparency=0,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap=`round`,this.wireframeLinejoin=`round`,this.skinning=!1,this.morphTargets=!1,this.morphNormals=!1,this.metal=!1,this.alphaMode=`OPAQUE`,this.clipping=!0,this.customShaders=[],this.type=`PBMMeshMaterial`;let r=Object.assign({},definesLib$1),o=cloneUniforms(uniformsLib$1);toFastProperties(o),toFastProperties(r),this.defines=r,this.onBeforeCompile=(e,t)=>{let n=this.shaderType;e.vertexShader=shaderLib$1[n].vertexShader,e.fragmentShader=shaderLib$1[n].fragmentShader,e.uniforms=o;for(let e of Object.keys(r))e in definesLib$1||delete r[e];for(let e of Object.keys(o))e in uniformsLib$1||delete o[e];let s=this.customShaders.filter(e=>e.type.includes(n));for(let e of s){for(let t in e.defines)t in r||Object.assign(r,{[t]:e.defines[t]});for(let t in e.uniforms)t in o||Object.assign(o,{[t]:e.uniforms[t]})}e.vertexShader=e.vertexShader.replace(/MAIN_BEFORE/g,s.map(e=>e.vertex.mainBefore).filter(e=>!!e).join(`
|
|
303
303
|
`)),e.vertexShader=e.vertexShader.replace(/MAIN_START/g,s.map(e=>e.vertex.mainStart).filter(e=>!!e).join(`
|
|
304
304
|
`)),e.vertexShader=e.vertexShader.replace(/MAIN_END/g,s.map(e=>e.vertex.mainEnd).filter(e=>!!e).join(`
|
|
305
305
|
`)),e.fragmentShader=e.fragmentShader.replace(/MAIN_BEFORE/g,s.map(e=>e.fragment.mainBefore).filter(e=>!!e).join(`
|
|
@@ -935,7 +935,7 @@ void main() {
|
|
|
935
935
|
#include <fog_fragment>
|
|
936
936
|
#include <premultiplied_alpha_fragment>
|
|
937
937
|
}
|
|
938
|
-
`,uniforms:{diffuse:{value:new three.Color},opacity:{value:1},displacementScalar:{value:0}}};function createPipeBufferGeometry(e,t,n,r){let o=new Float32Array((n+1)*(r+1)*3),s=new Float32Array((n+1)*(r+1)*3),c=new Float32Array((n+1)*(r+1)*2),l=new Uint32Array(n*r*6),u=e.computeFrenetFrames(n),d=new three.Vector3,f=new three.Vector3,p=new three.Vector2,m=new three.Vector3;for(let l=0;l<=n;l++){m=e.getPointAt(l/n,m);let h=u.normals[l],g=u.binormals[l];for(let e=0;e<=r;e++){let u=l*(r+1)+e,_=e/r*Math.PI*2,v=Math.sin(_),y=-Math.cos(_);f.x=y*h.x+v*g.x,f.y=y*h.y+v*g.y,f.z=y*h.z+v*g.z,f.normalize(),f.toArray(s,u*3),d.x=m.x+t*f.x,d.y=m.y+t*f.y,d.z=m.z+t*f.z,d.toArray(o,u*3),p.x=l/n,p.y=e/r,p.toArray(c,u*2)}}for(let e=0;e<n;e++)for(let t=0;t<r;t++){let n=(e*r+t)*6,o=(r+1)*e+t,s=(r+1)*(e+1)+t,c=(r+1)*(e+1)+(t+1),u=(r+1)*e+(t+1);l[n]=o,l[n+1]=s,l[n+2]=u,l[n+3]=s,l[n+4]=c,l[n+5]=u}let h=new three.BufferGeometry;return h.setIndex(new three.BufferAttribute(l,1)),h.setAttribute(`position`,new three.BufferAttribute(o,3)),h.setAttribute(`normal`,new three.BufferAttribute(s,3)),h.setAttribute(`uv`,new three.BufferAttribute(c,2)),h}function parseTrajectoryObject(e,t){let n=new three.Color(0).convertSRGBToLinear(),r=new three.Color(52949).convertSRGBToLinear(),o=new three.Color(3370495).convertSRGBToLinear(),s=new three.Color(16777215).convertSRGBToLinear(),c=0,l=new three.CurvePath,u=e.length;for(let t=3;t<u;t+=3){let n=new three.Vector3().fromArray(e,t-3),r=new three.Vector3().fromArray(e,t);c+=n.distanceTo(r);let o=new three.LineCurve3(n,r);l.add(o)}let d=createPipeBufferGeometry(l,.03,Math.ceil(c*100),6);d.clearGroups(),d.addGroup(0,d.index?d.index.count:d.attributes.position.count,0),d.addGroup(0,d.index?d.index.count:d.attributes.position.count,1),d.addGroup(0,d.index?d.index.count:d.attributes.position.count,2);let f=new three.ShaderMaterial({vertexShader:TRAJECTOR_PIPE_SHADER.vertexShader,fragmentShader:TRAJECTOR_PIPE_SHADER.fragmentShader,uniforms:three.UniformsUtils.clone(TRAJECTOR_PIPE_SHADER.uniforms),side:three.BackSide});f.uniforms.totalLength.value=c,f.uniforms.diffuse.value=n,f.uniforms.diffuse2.value=n,f.uniforms.opacity.value=.5,f.transparent=!0;let p=new three.ShaderMaterial({vertexShader:TRAJECTOR_PIPE_SHADER.vertexShader,fragmentShader:TRAJECTOR_PIPE_SHADER.fragmentShader,uniforms:three.UniformsUtils.clone(TRAJECTOR_PIPE_SHADER.uniforms),side:three.BackSide});p.uniforms.totalLength.value=c,p.uniforms.displacementScalar.value=-.01,p.uniforms.diffuse.value=r,p.uniforms.diffuse2.value=o;let m=new three.ShaderMaterial({vertexShader:TRAJECTOR_PIPE_SHADER.vertexShader,fragmentShader:TRAJECTOR_PIPE_SHADER.fragmentShader,uniforms:three.UniformsUtils.clone(TRAJECTOR_PIPE_SHADER.uniforms),side:three.DoubleSide});m.uniforms.totalLength.value=c,m.uniforms.displacementScalar.value=-.026,m.uniforms.dashSize.value=new three.Vector2(.06,.09),m.uniforms.diffuse.value=s,m.uniforms.diffuse2.value=s;let h=new three.Mesh(d,[f,p,m]),g=.08,_=24,v=new three.SphereBufferGeometry(.08,24,24);v.clearGroups(),v.addGroup(0,d.index?d.index.count:d.attributes.position.count,0),v.addGroup(0,d.index?d.index.count:d.attributes.position.count,1);let y=new three.ShaderMaterial({vertexShader:TRAJECTOR_SPHERE_SHADER.vertexShader,fragmentShader:TRAJECTOR_SPHERE_SHADER.fragmentShader,uniforms:three.UniformsUtils.clone(TRAJECTOR_SPHERE_SHADER.uniforms),side:three.BackSide});y.uniforms.diffuse.value=n,y.uniforms.opacity.value=.5,y.transparent=!0;let b=new three.ShaderMaterial({vertexShader:TRAJECTOR_SPHERE_SHADER.vertexShader,fragmentShader:TRAJECTOR_SPHERE_SHADER.fragmentShader,uniforms:three.UniformsUtils.clone(TRAJECTOR_SPHERE_SHADER.uniforms),side:three.FrontSide});b.uniforms.displacementScalar.value=-.01,b.uniforms.diffuse.value=r;let S=new three.Mesh(v,[y,b]);S.position.fromArray(e,0),h.add(S);let C=new three.ShaderMaterial({vertexShader:TRAJECTOR_SPHERE_SHADER.vertexShader,fragmentShader:TRAJECTOR_SPHERE_SHADER.fragmentShader,uniforms:three.UniformsUtils.clone(TRAJECTOR_SPHERE_SHADER.uniforms),side:three.FrontSide});C.uniforms.displacementScalar.value=-.01,C.uniforms.diffuse.value=o;let w=new three.Mesh(v,[y,C]);return w.position.fromArray(e,e.length-3),h.add(w),{scene:h,dispose:()=>{d.dispose(),f.dispose(),p.dispose(),m.dispose(),v.dispose(),y.dispose(),b.dispose(),C.dispose()}}}function loadTrajectory(e,t){let n=e.name,r=imageURL(appendSearch(e.content.uri,t.search),{key:`model.0`});return e.content.loadState=`LOADING`,e.content.loadStateUpdateTime=now(),loadPly(r,{type:`geometry`,customPropertyMapping:{time:{itemType:`uint32`,itemNames:[`time_milisec`]}},fetcher:t.fetcher}).then(t=>{var o,s,c,l;let u=(s=(o=t.scene.attributes)==null?void 0:o.time.array)==null?[]:s,d=(l=(c=t.scene.attributes)==null?void 0:c.position.array)==null?[]:l,f=t.byteLength,p=t.memoryUsage,m=parseTrajectoryObject(d,u);m.scene.applyMatrix4(e.transform),m.scene.updateWorldMatrix(!1,!0),m.scene.matrixAutoUpdate=!1;let h=new TrajectoryNode(n,m.scene);return e.content.data={uri:r,byteLength:f,memoryUsage:p,positionArray:d,timeArray:u,object:h},e.content.byteLength=f,e.content.memoryUsage=p,e.content.loadState=`READY`,e.content.loadStateUpdateTime=now(),e}).catch(t=>(e.content.data=void 0,e.content.loadState=`FAILED`,e.content.loadStateUpdateTime=now(),t instanceof NetworkResponseError&&t.httpStatus===0||t instanceof NetworkTimeoutError||t instanceof NetworkProxyError?e.content.loadfailRetryDelay=clamp$1(e.content.loadfailRetryDelay+RETRY_DELAY_STEP,RETRY_DELAY_STEP,MAX_RETRY_DELAY):e.content.loadfailRetryDelay=1/0,Promise.reject(t)))}function unloadTrajectory(e){e.content&&(e.content.data&&e.content.data.object.dispose(),e.content.data=void 0,e.content.loadState=`UNLOADED`,e.content.loadProgress=0,e.content.loadStateUpdateTime=now(),e.content.byteLength=0,e.content.memoryUsage=0)}var scratchVector3$7=new three.Vector3,scratchMatrix3=new three.Matrix3,scratchMatrix4$3=new three.Matrix4,a=6378137,invF=298.257223563;function ecefToLla(e){let t=a-a/invF,n=(a*a-t*t)/(a*a),r=Math.sqrt(e.x*e.x+e.y*e.y),o=1e-12,s=1e3,c=0,l=Math.atan2(e.z,r),u=0;for(;c++<1e3;){let t=Math.sin(l),o=a/Math.sqrt(1-n*t*t);u=r/Math.cos(l)-o;let s=Math.atan2(e.z/(o*(1-n)+u),r/(o+u));if(isNaN(s)||Math.abs(s-l)<1e-12)break;l=s}return e.set(l,Math.atan2(e.y,e.x),u)}function llaToEcef(e){let{x:t,y:n,z:r}=e,o=a-a/invF,s=(a*a-o*o)/(a*a),c=Math.sin(t),l=Math.cos(t),u=Math.sin(n),d=Math.cos(n),f=a/Math.sqrt(1-s*c*c),p=(f+r)*l*d,m=(f+r)*l*u,h=(o*o/(a*a)*f+r)*c;return e.set(p,m,h)}function getEcefToEnuMatrix(e,t){let{x:n,y:r,z:o}=ecefToLla(scratchVector3$7.copy(e)),s=Math.sin(n),c=Math.sin(r),l=Math.cos(n),u=Math.cos(r);t.fromArray([-c,-s*u,l*u,0,+u,-s*c,l*c,0,0,l,s,0,0,0,0,1]);let d=scratchMatrix3.setFromMatrix4(t),f=scratchVector3$7.copy(e).applyMatrix3(d).multiplyScalar(-1);t.setPosition(f);let p=scratchMatrix4$3.fromArray([1,0,0,0,0,1,0,0,0,0,1,0,0,0,o,1]);return t.premultiply(p),t}var ROTATE_X_90_MATRIX=new three.Matrix4().fromArray([1,0,0,0,0,0,-1,0,0,1,0,0,0,0,0,1]),ROTATE_X_90_MATRIX_INVERSE=new three.Matrix4().fromArray([1,0,0,0,0,0,1,0,0,-1,0,0,0,0,0,1]),enuToLocalMatrix=new three.Matrix4().copy(ROTATE_X_90_MATRIX),localToEnuMatrix=new three.Matrix4().copy(ROTATE_X_90_MATRIX_INVERSE);function getRecommendTile3dProps(e,t={}){var n,r,o;let s,c,l;if(typeof e.tileset.rootMeta.creationTime==`string`)if(typeof e.tileset.rootMeta.numTotalPoints==`number`&&e.tileset.rootMeta.numTotalPoints>0){l=4,t.powerPreference===`high`&&(l=2),s=l/1.6;let u=0;if(((n=e.tileset.rootMeta.taskParameters)==null?void 0:n.point_homogenization)===`1`&&(r=e.tileset.rootMeta.taskParameters)!=null&&r.homo_point_density){let t=Number((o=e.tileset.rootMeta.taskParameters)==null?void 0:o.homo_point_density);isFinite(t)&&!isNaN(t)&&(u=t)}u<=0&&(u=.02),c=u*1.4}else l=5,t.powerPreference===`high`&&(l=4),s=0,c=.03;else l=6,s=0,c=.03,e.name===`aerophoto`?(l=12,t.powerPreference===`high`&&(l=10)):e.tileset.asset.extras&&typeof e.tileset.asset.extras.name==`string`&&/^matterport\b/i.test(e.tileset.asset.extras.name)&&(l=5,t.powerPreference===`high`&&(l=4));return{pointScale:c,pointMinPixel:s,maxScreenSpaceError:l}}var scratchVector3$6=new three.Vector3,scratchSphereBoundingVolume=new SphereBoundingVolume,scratchBoxBoundingVolume=new BoxBoundingVolume,parameterVersionMap=new WeakMap,tileVersionMap=new WeakMap,trajectoryVersionMap=new WeakMap,STENCIL_CONSTANT={TILE_MASK:128,SKIP_LOD_MASK:112,SKIP_LOD_BIT_SHIFT:4,CLASSIFICATION_MASK:15},SKIP_BACKFACE_MATERIAL=(()=>{let e=new three.MeshBasicMaterial;return e.side=three.BackSide,e.color.setHex(16711935),e.colorWrite=!1,e.stencilWrite=!0,e.polygonOffset=!0,e.polygonOffsetFactor=2,e.polygonOffsetUnits=2,e.stencilRef=STENCIL_CONSTANT.TILE_MASK,e.stencilFunc=three.AlwaysStencilFunc,e.stencilFuncMask=STENCIL_CONSTANT.TILE_MASK,e.stencilZPass=three.ReplaceStencilOp,e.stencilWriteMask=STENCIL_CONSTANT.TILE_MASK,e})(),SKIP_BACKFACE_TRANSPARENT_MATERIAL=(()=>{let e=new three.MeshBasicMaterial;return e.visible=!1,e})(),CLEAR_STENCIL_GEOMETRY=new three.BufferGeometry,CLEAR_STENCIL_MATERIAL=new three.MeshBasicMaterial;function cloneSkipBackfaceObject(e){let t;t=e instanceof three.Mesh?new three.Mesh(e.geometry,Array.isArray(e.material)?e.material.map(e=>e.transparent?SKIP_BACKFACE_TRANSPARENT_MATERIAL:SKIP_BACKFACE_MATERIAL):e.material&&e.material.transparent?SKIP_BACKFACE_TRANSPARENT_MATERIAL:SKIP_BACKFACE_MATERIAL):e instanceof three.Group?new three.Group:new three.Object3D,t.position.copy(e.position),t.quaternion.copy(e.quaternion),t.scale.copy(e.scale),t.matrix.compose(e.position,e.quaternion,e.scale),t.matrixAutoUpdate=!1,t.frustumCulled=e.frustumCulled,t.visible=e.visible;for(let n of e.children)t.add(cloneSkipBackfaceObject(n));return t}var Tile3D=class extends three.Object3D{constructor(e,t){var n,r;super(),this.parameter=new Parameter,this.renderObjects=[],this.backfaceObjects=[],this.tileObjects=[],this.frameNumber=0,this.error=(n=t.error)==null?null:n,this.name=t.name,this.type=t.type,this.upAxis=t.upAxis,this.light=t.light,this.fetcher=t.fetcher,this.search=(r=t.search)==null?``:r,this.groundHeight=t.groundHeight,this.coordinateSystem=t.coordinateSystem,this.boundingBox=new three.Box3,this.autoRefine=!0,this.refined=!1,this.refineProgress=[0,0],this.loaded=!1,this.disposed=!1,this.clearStencilObject=new three.Mesh(CLEAR_STENCIL_GEOMETRY,CLEAR_STENCIL_MATERIAL),this.clearStencilObject.frustumCulled=!1,this.clearStencilObject.onAfterRender=e=>e.clearStencil(),this.tileset=new Tileset(e,{tileLoader:e=>this.loadContent(e),tileUnloader:e=>this.unloadContent(e),onTileLoad:e=>{this.onTileLoad&&this.onTileLoad(e)},onTileUnload:e=>{this.onTileUnload&&this.onTileUnload(e)},onTileError:(e,t)=>{this.onError&&this.onError(Object.assign(t,{tile:e})),console.error(`Tile error`,e.id,t)},trajectoryLoader:e=>this.loadTrajectory(e),trajectoryUnloader:e=>this.unloadTrajectory(e),onTrajectoryLoad:()=>{},onTrajectoryUnload:e=>{},onTrajectoryError:(e,t)=>{this.onError&&this.onError(Object.assign(t,{error:t})),console.error(`Trajectory error`,e,t)}}),this.tileset.root.boundingVolume&&this.tileset.root.boundingVolume.getBoundingBox(this.boundingBox)}get viewerRequestVolume(){return this.tileset.root.viewerRequestVolume}set viewerRequestVolume(e){this.tileset.root.viewerRequestVolume=e}get tiles(){return this.tileset.selectedTiles}get trajectories(){return this.tileset.trajectories}getRecommendProps(e={}){return getRecommendTile3dProps(this,e)}loadContent(e){return loadTileContent(e,{light:this.light,fetcher:this.fetcher,search:this.search,renderer:this.renderer}).then(t=>{if(e.type===`SCENEGRAPH`){if(this.disposed||!e.content)unloadTileContent(e);else if(e.content.data)if(e.content.data.type===`spz`){let t=e.content.data.object.children[0].boundingBox;this.boundingBox.union(t)}else this.boundingBox.expandByObject(e.content.data.object)}})}unloadContent(e){return unloadTileContent(e),Promise.resolve()}loadAllTilesets(){let e=t=>{let n=[];return this.tileset.root.traverse(e=>{var t;e.type===`TILESET`&&((t=e.content)==null?void 0:t.loadState)!==`READY`&&n.push(e)}),Promise.all(n.map(t=>this.loadContent(t).then(()=>e(t)))).then(()=>{})};return e(this.tileset.root)}loadTrajectory(e){return loadTrajectory(e,{fetcher:this.fetcher,search:this.search,renderer:this.renderer}).then(e=>{this.disposed&&unloadTrajectory(e)})}unloadTrajectory(e){return unloadTrajectory(e),Promise.resolve()}intersectRaycaster(e,t){var n,r;let o=t==null?[]:t,s=[this.tileset.root],c=this.tileset.transform,l=(r=(n=e.params.Points)==null?void 0:n.threshold)==null?0:r,u=e.sortByDistance;e.sortByDistance=!1;let d,f=1/0;for(;d=s.pop();){let t;if(d.boundingVolume){let n;n=d.boundingVolume instanceof BoxBoundingVolume?scratchBoxBoundingVolume.copy(d.boundingVolume):d.boundingVolume instanceof SphereBoundingVolume?scratchSphereBoundingVolume.copy(d.boundingVolume):d.boundingVolume.clone(),n.applyMatrix4(c),t=n.intersectRay(e.ray,l,f)}else t=!0;if(t){for(let e=0,t=d.children.length;e<t;e++)s.push(d.children[e]);if(d.selected&&d.content&&d.content.data&&d.content.data.object.visible){let t=e.hitFilter;if(e.hitFilter=n=>{var r;return Object.assign(n,{model:(r=this.parent)==null?void 0:r,viewLayer:this,tile:d}),t?t.call(e,n):!0},d.content.data.object.intersectRaycaster(e,o),e.hitFilter=t,e.firstHitOnly){let e=o[0];e&&f>e.distance&&(f=e.distance)}}}}return e.sortByDistance=u,sortIntersects(o,e.sortByDistance,e.firstHitOnly),o}update(e,t,n,r){var o,s,c,l,u,d,f;this.renderer=e,this.frameNumber++;let p=!1,m=this.parameter.resolveValue(n.parameter,r.parameter);parameterVersionMap.get(this)!==m.version&&(parameterVersionMap.set(this,m.version),p=!0);let h=(l=this.visible&&((o=this.parent)==null?void 0:o.visible)&&((c=(s=this.parent)==null?void 0:s.parent)==null?void 0:c.visible))==null?!1:l,g=m.maxLevelOfDetail;g=Math.max(g,0);let _=Math.min(m.minLevelOfDetail,g);(!h||!this.loaded||!n.loaded)&&(g=Math.max(_,0));let v=m.maxMemoryUsage;h||(v=Math.min(0,v));let y=m.minGeometricError,b=m.maxRequests,S=m.memoryAdjustedScreenSpaceError;h||(S=!1);let C=t.controllerMode;(C===`Panorama`||C===`VRPanorama`||C===`XRPanorama`)&&(m.modelAlpha<.1&&(y=m.panoramaMinGeometricError,S=!1),m.progress>=.01&&m.progress<=.99&&(b=0));let w=m.maxGeometricError;w=Math.max(y,w);let T={time:t.time,camera:{type:t.type,position:new three.Vector3().copy(t.position),direction:t.getDirection(new three.Vector3),up:new three.Vector3().copy(t.up).applyQuaternion(t.quaternion),projectionMatrix:t.projectionMatrix.clone(),visible:h&&t.visible,refine:t.refineModel},height:t.resolution.height,pixelRatio:t.pixelRatio,frameNumber:this.frameNumber,sseDenominator:2*Math.tan(.5*t.fov/180*Math.PI),cullingVolume:new CullingVolume().setFromCamera(t),minLevelOfDetail:_,maxLevelOfDetail:g,minGeometricError:y,maxGeometricError:w,skipLevelOfDetail:m.skipLevelOfDetail,mostDetail:m.mostDetail,loadSiblings:m.loadSiblings,cameraCulling:m.cameraCulling,maxMemoryUsage:v,maxRequests:b,requestOrder:m.requestOrder,maxScreenSpaceError:m.maxScreenSpaceError,memoryAdjustedScreenSpaceError:S},E=m.cacheCameras.map(e=>(e.updateProjectionMatrix(),Object.assign(Object.assign({},T),{camera:{type:t.type,position:new three.Vector3().copy(e.position),direction:e.getWorldDirection(new three.Vector3),up:new three.Vector3().copy(e.up),projectionMatrix:e.projectionMatrix.clone(),visible:e.visible,refine:!0},cullingVolume:new CullingVolume().setFromCamera(e)})));this.updateWorldMatrix(!0,!1),this.tileset.transform.equals(this.matrixWorld)||(this.tileset.transform.copy(this.matrixWorld),p=!0);let D=!this.autoRefine;if(D===!1&&m.progress>=.01&&m.progress<=.99){let e=new three.Vector3;m.pano0&&e.setFromMatrixPosition(m.pano0.matrix);let t=e.clone();m.pano1&&t.setFromMatrixPosition(m.pano1.matrix),e.distanceTo(t)<10&&(D=!0)}if(D||this.tileset.update(T,E),this.refined=!0,this.refineProgress[0]=0,this.refineProgress[1]=0,this.tileset.needsRefinedTiles.forEach(e=>{if(this.refineProgress[1]++,e.content){let t=e.content.loadState;if(t===`UNLOADED`||t===`LOADING`){this.refined=!1;return}}this.refineProgress[0]++}),this.loaded===!1&&this.autoRefine){this.loaded=!0;let e=!1;this.tileset.needsRefinedTiles.forEach(t=>{if(this.loaded!==!1&&t.content&&(t.state.visible&&(e=!0),m.minLevelOfDetail>=0)){if(T.skipLevelOfDetail){if(t.state.finalResolution){let e=t.state.ancestorWithContentAvailable,n=(e&&e.content?e.content:t.content).loadState;(n===`UNLOADED`||n===`LOADING`)&&(this.loaded=!1)}}else if(t.state.visible&&t.levelOfContent<=0){let e=t.content.loadState;(e===`UNLOADED`||e===`LOADING`)&&(this.loaded=!1)}}}),e&&this.tileset.selectedTiles.length===0&&this.tileset.frameNumber<500&&(this.loaded=!1),this.loaded===!0&&(this.refined=!1,this.refineProgress[1]++)}this.renderObjects.length=0,this.backfaceObjects.length=0,this.tileObjects.length=0;for(let e=this.children.length-1;e>=0;e--)this.remove(this.children[e]);T.skipLevelOfDetail||this.tileset.selectedTiles.sort((e,t)=>e.floor===t.floor?e.levelOfContent===t.levelOfContent?e.state.distanceToCamera===t.state.distanceToCamera?e.state.centerZDepth-t.state.centerZDepth:e.state.distanceToCamera-t.state.distanceToCamera:t.levelOfContent-e.levelOfContent:e.floor-t.floor);let O=[];for(let r of this.tileset.selectedTiles){let o=(d=(u=r.content)==null?void 0:u.data)==null?void 0:d.object;if(!o)continue;let s=o.update(e,t,n,this,r,m);if(O.push(r.id),s&&(p=!0),this.tileset.hasMixedContent&&T.skipLevelOfDetail){if(!r.state.finalResolution){let e=cloneSkipBackfaceObject(o);e.name=`skipBackface:`+o.name,this.backfaceObjects.push(e)}let e=r.state.selectionDepth,t=STENCIL_CONSTANT.TILE_MASK|e<<STENCIL_CONSTANT.SKIP_LOD_BIT_SHIFT,n=three.GreaterEqualStencilFunc,s=STENCIL_CONSTANT.SKIP_LOD_MASK,c=three.ReplaceStencilOp,l=STENCIL_CONSTANT.TILE_MASK|STENCIL_CONSTANT.SKIP_LOD_MASK;for(let e of o.materials)e.stencilWrite=!0,e.stencilRef=t,e.stencilFunc=n,e.stencilFuncMask=s,e.stencilZPass=c,e.stencilWriteMask=l}else for(let e of o.materials)e.stencilWrite=!1,e.stencilRef=STENCIL_CONSTANT.TILE_MASK,e.stencilFunc=three.AlwaysStencilFunc,e.stencilFuncMask=STENCIL_CONSTANT.TILE_MASK,e.stencilZPass=three.ReplaceStencilOp,e.stencilWriteMask=STENCIL_CONSTANT.TILE_MASK;this.tileObjects.push(o)}let k=O.toString();if(tileVersionMap.get(this)!==k&&(tileVersionMap.set(this,k),p=!0),T.skipLevelOfDetail&&this.backfaceObjects.length)for(let e=0;e<this.backfaceObjects.length;e++)this.renderObjects.push(this.backfaceObjects[e]);if(this.tileObjects.length)for(let e=0;e<this.tileObjects.length;e++)this.renderObjects.push(this.tileObjects[e]);T.skipLevelOfDetail&&this.renderObjects.push(this.clearStencilObject);let A=[];for(let r of this.tileset.selectedTrajectories){let o=(f=r.content.data)==null?void 0:f.object;if(!o)continue;let s=o.update(e,t,n,this,r,m);A.push(r.id),s&&(p=!0),this.renderObjects.push(o)}let j=A.toString();if(trajectoryVersionMap.get(this)!==j&&(trajectoryVersionMap.set(this,j),p=!0),this.parent){let e=this.parent.children.length+1,t=(Math.min(0,this.parent.children.indexOf(this))-e)*1e4+1;for(let e=0;e<this.renderObjects.length;e++){let n=this.renderObjects[e],r=e+t;n.traverse(e=>{(e instanceof three.Mesh||e instanceof three.Line||e instanceof three.Points)&&(e.renderOrder=r)})}}if(this.loaded)for(let e=0;e<this.renderObjects.length;e++)this.add(this.renderObjects[e]);return p}dispose(){this.disposed=!0,this.tileset.reset(),this.tileset.root.children.length=0,/^blob\:/.test(this.tileset.id)&&URL.revokeObjectURL(this.tileset.id);for(let e=this.children.length-1;e>=0;e--)this.remove(this.children[e]);this.refined=!1,this.loaded=!1,this.refineProgress[0]=this.refineProgress[1]=0,this.error=null,this.onError=void 0,this.renderer=void 0}get model(){return this.parent}get scene(){return this}get viewLayer(){return this}localToEnu(e){return e.applyMatrix4(localToEnuMatrix)}enuToLocal(e){return e.applyMatrix4(enuToLocalMatrix)}enuToEcef(e){return e.applyMatrix4(this.coordinateSystem.enuToEcefMatrix)}ecefToEnu(e){return e.applyMatrix4(this.coordinateSystem.ecefToEnuMatrix)}localToEcef(e){return this.enuToEcef(this.localToEnu(e))}ecefToLocal(e){return this.enuToLocal(this.ecefToEnu(e))}localToLla(e){return ecefToLla(this.enuToEcef(this.localToEnu(e)))}llaToLocal(e){return this.enuToLocal(this.ecefToEnu(llaToEcef(e)))}worldToEnu(e){return this.localToEnu(this.worldToLocal(e))}enuToWorld(e){return this.localToWorld(this.enuToLocal(e))}worldToEcef(e){return this.localToEcef(this.worldToLocal(e))}ecefToWorld(e){return this.localToWorld(this.ecefToLocal(e))}worldToLla(e){return this.localToLla(this.worldToLocal(e))}llaToWorld(e){return this.localToWorld(this.llaToLocal(e))}get coordinates(){scratchVector3$6.setScalar(0);let{x:e,y:t}=this.localToLla(scratchVector3$6);return[e,t].map(e=>(e/Math.PI*180).toFixed(6)).join(`,`)}getTransformMatrix4(e=new three.Matrix4){return e.copy(this.coordinateSystem.ecefToEnuMatrix),e.premultiply(enuToLocalMatrix),e.premultiply(this.matrixWorld),e}coordinatesToWorldPoint(e){let t=new three.Vector3(e.latitude,e.longitude,e.altitude);return this.llaToWorld(t)}worldPointToCoordinates(e){return scratchVector3$6.copy(e),this.worldToLla(scratchVector3$6),{latitude:scratchVector3$6.x,longitude:scratchVector3$6.y,altitude:scratchVector3$6.z}}resetBrightness(){this.parameter.reset(`brightness`)}get minLevelOfDetail(){let e=[];return this.parent&&this.parent.parameter instanceof Parameter&&(e.unshift(this.parent.parameter),this.parent.parent&&this.parent.parent.parameter instanceof Parameter&&e.unshift(this.parent.parent.parameter)),this.parameter.resolveValue(...e).minLevelOfDetail}set minLevelOfDetail(e){this.parameter.set(`minLevelOfDetail`,e)}get maxLevelOfDetail(){let e=[];return this.parent&&this.parent.parameter instanceof Parameter&&(e.unshift(this.parent.parameter),this.parent.parent&&this.parent.parent.parameter instanceof Parameter&&e.unshift(this.parent.parent.parameter)),this.parameter.resolveValue(...e).maxLevelOfDetail}set maxLevelOfDetail(e){this.parameter.set(`maxLevelOfDetail`,e)}get minGeometricError(){let e=[];return this.parent&&this.parent.parameter instanceof Parameter&&(e.unshift(this.parent.parameter),this.parent.parent&&this.parent.parent.parameter instanceof Parameter&&e.unshift(this.parent.parent.parameter)),this.parameter.resolveValue(...e).minGeometricError}set minGeometricError(e){this.parameter.set(`minGeometricError`,e)}get maxGeometricError(){let e=[];return this.parent&&this.parent.parameter instanceof Parameter&&(e.unshift(this.parent.parameter),this.parent.parent&&this.parent.parent.parameter instanceof Parameter&&e.unshift(this.parent.parent.parameter)),this.parameter.resolveValue(...e).maxGeometricError}set maxGeometricError(e){this.parameter.set(`maxGeometricError`,e)}get panoramaMinGeometricError(){let e=[];return this.parent&&this.parent.parameter instanceof Parameter&&(e.unshift(this.parent.parameter),this.parent.parent&&this.parent.parent.parameter instanceof Parameter&&e.unshift(this.parent.parent.parameter)),this.parameter.resolveValue(...e).panoramaMinGeometricError}set panoramaMinGeometricError(e){this.parameter.set(`panoramaMinGeometricError`,e)}get skipLevelOfDetail(){let e=[];return this.parent&&this.parent.parameter instanceof Parameter&&(e.unshift(this.parent.parameter),this.parent.parent&&this.parent.parent.parameter instanceof Parameter&&e.unshift(this.parent.parent.parameter)),this.parameter.resolveValue(...e).skipLevelOfDetail}set skipLevelOfDetail(e){this.parameter.set(`skipLevelOfDetail`,e)}get mostDetail(){let e=[];return this.parent&&this.parent.parameter instanceof Parameter&&(e.unshift(this.parent.parameter),this.parent.parent&&this.parent.parent.parameter instanceof Parameter&&e.unshift(this.parent.parent.parameter)),this.parameter.resolveValue(...e).mostDetail}set mostDetail(e){this.parameter.set(`mostDetail`,e)}get loadSiblings(){let e=[];return this.parent&&this.parent.parameter instanceof Parameter&&(e.unshift(this.parent.parameter),this.parent.parent&&this.parent.parent.parameter instanceof Parameter&&e.unshift(this.parent.parent.parameter)),this.parameter.resolveValue(...e).loadSiblings}set loadSiblings(e){this.parameter.set(`loadSiblings`,e)}get maxMemoryUsage(){let e=[];return this.parent&&this.parent.parameter instanceof Parameter&&(e.unshift(this.parent.parameter),this.parent.parent&&this.parent.parent.parameter instanceof Parameter&&e.unshift(this.parent.parent.parameter)),this.parameter.resolveValue(...e).maxMemoryUsage}set maxMemoryUsage(e){this.parameter.set(`maxMemoryUsage`,e)}get maxRequests(){let e=[];return this.parent&&this.parent.parameter instanceof Parameter&&(e.unshift(this.parent.parameter),this.parent.parent&&this.parent.parent.parameter instanceof Parameter&&e.unshift(this.parent.parent.parameter)),this.parameter.resolveValue(...e).maxRequests}set maxRequests(e){this.parameter.set(`maxRequests`,e)}get requestOrder(){let e=[];return this.parent&&this.parent.parameter instanceof Parameter&&(e.unshift(this.parent.parameter),this.parent.parent&&this.parent.parent.parameter instanceof Parameter&&e.unshift(this.parent.parent.parameter)),this.parameter.resolveValue(...e).requestOrder}set requestOrder(e){this.parameter.set(`requestOrder`,e)}get maxScreenSpaceError(){let e=[];return this.parent&&this.parent.parameter instanceof Parameter&&(e.unshift(this.parent.parameter),this.parent.parent&&this.parent.parent.parameter instanceof Parameter&&e.unshift(this.parent.parent.parameter)),this.parameter.resolveValue(...e).maxScreenSpaceError}set maxScreenSpaceError(e){this.parameter.set(`maxScreenSpaceError`,e)}},fetchers={};function getFetcher(e,t){let n=fetchers[e];if(n){let e=n.get(t);if(e)return e}throw Error(`fetcher workCode:${t.workCode} never registered.`)}function registerFetcher(e,t,n){let r=fetchers[e];r||(r=fetchers[e]=new WeakMap),r.has(t)||r.set(t,n)}var identityMatrix4=new three.Matrix4,scratchVector3$5=new three.Vector3,scratchMatrix4$2=new three.Matrix4;function getEcefToEnuMatrixFromUpAxis(e,t,n){switch(e){case`Z`:n.identity();break;case`WGS84`:case`GCJ02`:case`BD09`:getEcefToEnuMatrix(t,n);break;default:n.identity();break}return n}function loadViewLayer(e){var t;let[n,r]=e.tilesetUrl.split(`#`),o=(t=(r||n).split(`?`)[1])==null?``:t;return e.fetcher.ajax(e.tilesetUrl,{responseType:`text`}).catch(e=>({error:e,body:JSON.stringify({asset:{version:`0.0`},geometricError:0,root:{geometricError:0}})})).then(t=>{var n;let r=`error`in t?t.error:null,s=normalizeTilesetHeader(JSON.parse(t.body),e.tilesetUrl),{root:c,rootMeta:l={}}=s,u=e.upAxis;l.upAxis&&l.upAxis!==u&&(u=l.upAxis),`lodVersion`in s&&(u=`-Y`,`floorInfo`in s&&(s.properties=s.properties||{},s.properties.floorInfo=s.floorInfo.map(e=>({ground:-e.ground,height:e.height})),s.floorInfo=void 0),s.asset.tilesetVersion=String(s.lodVersion),s.lodVersion=void 0);let d=u,f=new three.Matrix4;d===`Y`?(d=`Z`,f.fromArray([1,0,0,0,0,0,1,0,0,-1,0,0,0,0,0,1])):d===`-Y`&&(d=`Z`,f.fromArray([1,0,0,0,0,0,-1,0,0,1,0,0,0,0,0,1]));let p=c.boundingVolume?makeBoundingVolume(c.boundingVolume):void 0;p&&c.transform&&p.applyMatrix4(scratchMatrix4$2.fromArray(c.transform));let m=null,h=new three.Matrix4,g=new three.Matrix4;return l.coordinate?(m=l.coordinate.ground_height,h.fromArray(l.coordinate.pose_ecef_to_enu),g.fromArray(l.coordinate.pose_enu_to_ecef)):(p?p.getCenter(scratchVector3$5):scratchVector3$5.setScalar(0),scratchVector3$5.applyMatrix4(f),getEcefToEnuMatrixFromUpAxis(d,scratchVector3$5,h),g.getInverse(h)),s.root={refine:(n=c.refine)==null?`REPLACE`:n,geometricError:c.geometricError,transform:scratchMatrix4$2.copy(f).premultiply(d===`Z`?identityMatrix4:h).premultiply(enuToLocalMatrix).toArray(),boundingVolume:p?p.toJson():void 0,children:[c]},new Tile3D(s,{name:e.name,type:e.type,upAxis:u,light:e.light,fetcher:e.fetcher,search:o,groundHeight:m,coordinateSystem:{enuToEcefMatrix:g,ecefToEnuMatrix:h},error:r})})}function loadViewLayers(e,t){var n;let r=e.layers.map(e=>({tilesetUrl:e.work.getURL(e.tileset),name:e.name,type:e.type,upAxis:e.upAxis,light:t.light,fetcher:t.fetcher}));if(e.file){let o=!1;for(let e of r)if(e.type===`mesh`){o=!0;break}if(o===!1){let o=getExtname(e.file)||`.at3d`,s=JSON.stringify({tilesetUrl:``,asset:{version:`0.0`},geometricError:0,root:{refine:`REPLACE`,geometricError:0,transform:[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],content:{uri:e.work.getURL(e.file)},extras:{[o.slice(1)]:{upAxis:e.upAxis,textureBaseUri:typeof e.textureBase==`string`?e.work.getURL(e.textureBase):void 0,textureArray:e.textures,textureOptions:(n=t.textureOptions)==null?{}:n}}},rootMeta:{coordinate:e.coordinate}});r.push({name:`fallback`,type:`mesh`,upAxis:`Z`,tilesetUrl:URL.createObjectURL(new Blob([s],{type:`application/json`})),fetcher:t.fetcher,light:t.light})}}let o=r.map(e=>loadViewLayer(e).then(e=>e));return Promise.all(o)}function createSimpleBoxBufferGeometry(e=1,t=1,n=1){let r=e/2,o=t/2,s=n/2,c=new Float32Array([-r,+o,+s,+r,+o,+s,+r,+o,-s,-r,+o,-s,-r,-o,+s,+r,-o,+s,+r,-o,-s,-r,-o,-s]),l=new Uint32Array([0,4,1,1,4,5,1,5,2,2,5,6,2,6,3,3,6,7,3,7,0,0,7,4,3,0,2,2,0,1,4,7,5,5,7,6]),u=new three.BufferGeometry;return u.setAttribute(`position`,new three.BufferAttribute(c,3)),u.setIndex(new three.BufferAttribute(l,1)),u.addGroup(0,u.index.count,0),u.computeBoundingBox(),u.computeBoundingSphere(),u}function mergeBufferGeometries(e,t){for(var n=e[0].index!==null,r=new Set(Object.keys(e[0].attributes)),o=new Set(Object.keys(e[0].morphAttributes)),s={},c={},l=new three.BufferGeometry,u=0,d=0;d<e.length;++d){var f=e[d];if(n!==(f.index!==null))return null;for(var p in f.attributes){if(!r.has(p))return null;s[p]===void 0&&(s[p]=[]),s[p].push(f.attributes[p])}for(var p in f.morphAttributes){if(!o.has(p))return null;c[p]===void 0&&(c[p]=[]),c[p].push(f.morphAttributes[p])}if(l.userData.mergedUserData=l.userData.mergedUserData||[],l.userData.mergedUserData.push(f.userData),t){var m;if(n)m=f.index.count;else if(f.attributes.position!==void 0)m=f.attributes.position.count;else return null;l.addGroup(u,m,d),u+=m}}if(n){for(var h=0,g=[],d=0;d<e.length;++d){for(var _=e[d].index,v=0;v<_.count;++v)g.push(_.getX(v)+h);h+=e[d].attributes.position.count}l.setIndex(g)}for(var p in s){var y=mergeBufferAttributes(s[p]);if(!y)return null;l.setAttribute(p,y)}for(var p in c){var b=c[p][0].length;if(b===0)break;l.morphAttributes=l.morphAttributes||{},l.morphAttributes[p]=[];for(var d=0;d<b;++d){for(var S=[],v=0;v<c[p].length;++v)S.push(c[p][v][d]);var C=mergeBufferAttributes(S);if(!C)return null;l.morphAttributes[p].push(C)}}return l}function mergeBufferAttributes(e){for(var t,n,r,o=0,s=0;s<e.length;++s){var c=e[s];if(c.isInterleavedBufferAttribute||(t===void 0&&(t=c.array.constructor),t!==c.array.constructor)||(n===void 0&&(n=c.itemSize),n!==c.itemSize)||(r===void 0&&(r=c.normalized),r!==c.normalized))return null;o+=c.array.length}for(var l=new t(o),u=0,s=0;s<e.length;++s)l.set(e[s].array,u),u+=e[s].array.length;return new three.BufferAttribute(l,n,r)}function mergeVertices(e,t=1e-4){t=Math.max(t,Number.EPSILON);for(var n={},r=e.getIndex(),o=e.getAttribute(`position`),s=r?r.count:o.count,c=0,l=Object.keys(e.attributes),u={},d={},f=[],p=[`getX`,`getY`,`getZ`,`getW`],m=0,h=l.length;m<h;m++){var g=l[m];u[g]=[];var _=e.morphAttributes[g];_&&(d[g]=Array(_.length).fill().map(()=>[]))}for(var v=Math.log10(1/t),y=Math.pow(10,v),m=0;m<s;m++){for(var b=r?r.getX(m):m,S=``,C=0,h=l.length;C<h;C++)for(var g=l[C],w=e.getAttribute(g),T=w.itemSize,E=0;E<T;E++)S+=`${~~(w[p[E]](b)*y)},`;if(S in n)f.push(n[S]);else{for(var C=0,h=l.length;C<h;C++)for(var g=l[C],w=e.getAttribute(g),_=e.morphAttributes[g],T=w.itemSize,D=u[g],O=d[g],E=0;E<T;E++){var k=p[E];if(D.push(w[k](b)),_)for(var A=0,j=_.length;A<j;A++)O[A].push(_[A][k](b))}n[S]=c,f.push(c),c++}}let M=e.clone();for(var m=0,h=l.length;m<h;m++){var g=l[m],N=e.getAttribute(g),P=new N.array.constructor(u[g]),w=new three.BufferAttribute(P,N.itemSize,N.normalized);if(M.setAttribute(g,w),g in d)for(var C=0;C<d[g].length;C++){var F=e.morphAttributes[g][C],P=new F.array.constructor(d[g][C]),I=new three.BufferAttribute(P,F.itemSize,F.normalized);M.morphAttributes[g][C]=I}}return M.setIndex(f),M}var scratchSphere$1=new three.Sphere,scratchMatrix4$1=new three.Matrix4,scratchMatrix4Inverse=new three.Matrix4;function getEdgesBySphere(e,t,n=30/180*Math.PI){let r=Math.cos(n),o=[];for(let n of e.children)n instanceof Tile3D&&n.tileset.selectedTiles.forEach(e=>{var n,s,c;let l=(s=(n=e.content)==null?void 0:n.data)==null?void 0:s.object;if(l&&l.visible){let e=[];if(l.traverseVisible(n=>{if(n instanceof three.Mesh){let r=getBvhTreeForMesh(n);if(r){scratchMatrix4$1.copy(n.matrixWorld),scratchMatrix4Inverse.getInverse(scratchMatrix4$1),scratchSphere$1.copy(t).applyMatrix4(scratchMatrix4Inverse);let o=r.trianglesInSphere(scratchSphere$1.center,scratchSphere$1.radius),s=new three.BufferGeometry;s.setAttribute(`position`,new three.BufferAttribute(o,3)),s.applyMatrix4(n.matrixWorld),s=mergeVertices(s,.01),e.push(s)}}}),e.length===0)return;let n=[`a`,`b`,`c`],s=mergeBufferGeometries(e,!1),u=s.getAttribute(`position`).array,d=((c=s.getIndex())==null?void 0:c.array)||[],f=[],p=[];for(let e=0,t=u.length;e<t;e+=3){let t=new three.Vector3(u[e],u[e+1],u[e+2]);f.push(t)}for(let e=0,t=d.length;e<t;e+=3){let t=d[e],n=d[e+1],r=d[e+2],o=new three.Vector3().crossVectors(f[n].clone().sub(f[t]),f[r].clone().sub(f[t])).normalize();p.push({a:t,b:n,c:r,normal:o})}let m={};for(let e=0,t=p.length;e<t;e++){let t=p[e];for(let r=0;r<3;r++){let o=t[n[r]],s=t[n[(r+1)%3]],c=[Math.min(o,s),Math.max(o,s)],l=c[0]+`-`+c[1];m[l]===void 0?m[l]={index1:c[0],index2:c[1],face1:e}:m[l].face2=e}}for(let e in m){let t=m[e];if(t.face2===void 0||p[t.face1].normal.dot(p[t.face2].normal)<=r){let e=f[t.index1],n=f[t.index2];o.push(new three.Line3(e,n))}}f.length=0,p.length=0}});return o}var scratchBoundingBox$1=new three.Box3,scratchViewLayerBox=new three.Box3,scratchObserverBox$3=new three.Box3,Model=class extends three.Object3D{constructor(e,t,n={}){var r;super(),this.disposed=!1,this.parameter=new Parameter,this.outdated=!1,this.autoRefine=!0,this.metaPending=!1,this.loaded=!1,this.refined=!1,this.refineProgress=[0,0],this.boundingBox=new three.Box3,this.fiveId=e,this.needsRender=!1,this.work=t,this.name=t.workCode;let o=0;for(let e of t.observers)o=Math.max(o,e.floorIndex);if(this.floorLength=o+1,t.model){this.metaPending=!0;let e=loadViewLayers(t.model,{fetcher:getFetcher(this.fiveId,t),light:(r=n.light)==null?!1:r,textureOptions:n.textureOptions}),o=e=>this.dispatchEvent({type:`error`,error:e}),s=e=>this.dispatchEvent({type:`tileLoad`,tile:e}),c=e=>this.dispatchEvent({type:`tileUnload`,tile:e});this.initReady=e.then(e=>{var t;this.metaPending=!1;let n=null,r=null,l=null;for(let t of e){if(t.visible=!1,t.onError=o,t.onTileLoad=s,t.onTileUnload=c,t.error){o(t.error);continue}t.type===`mesh`?n===null&&(n=t):t.type===`point_cloud`?r===null&&(r=t):l===null&&(l=t)}let u=(t=n==null?r:n)==null?l:t;if(u&&(u.visible=!0),e.length)if(this.disposed)for(let t of e)t.dispose();else this.add(...e);return this}),this.loadedReady=new Promise(e=>{let t=()=>{e(this),this.removeEventListener(`load`,t),this.removeEventListener(`dispose`,t)};this.addEventListener(`load`,t),this.addEventListener(`dispose`,t)})}else this.refined=!0,this.loaded=!0,this.initReady=Promise.resolve(this),this.loadedReady=Promise.resolve(this);this.parameter.set(`boundingBox`,this.boundingBox.clone())}dispose(){this.disposed=!0;let e;for(;e=this.children[0];)typeof e.dispose==`function`&&e.dispose(),e.onError=void 0,e.onTileLoad=void 0,e.onTileUnload=void 0,this.remove(e);this.dispatchEvent({type:`dispose`})}get empty(){return this.children.length===0}get viewLayers(){return this.children}getEdgesBySphere(e,t=30/180*Math.PI){return getEdgesBySphere(this,e,t)}intersectRaycaster(e,t){let n=t==null?[]:t,r=e.sortByDistance;e.sortByDistance=!1;for(let t=0,r=this.children.length;t<r;t++){let r=this.children[t];r.visible&&typeof r.intersectRaycaster==`function`&&r.intersectRaycaster(e,n)}return e.sortByDistance=r,sortIntersects(n,e.sortByDistance,e.firstHitOnly),n}update(e,t,n){let r=!1;this.needsRender===!0&&(this.needsRender=!1,r=!0);let o=this.loaded;this.refined=!this.metaPending,this.loaded=!this.metaPending,this.refineProgress[0]=this.refineProgress[1]=0,this.work.transform.equals(this.matrix)||(this.matrix.copy(this.work.transform),this.matrix.decompose(this.position,this.quaternion,this.scale),this.matrixAutoUpdate=!1,r=!0);for(let o of this.children)o.autoRefine=this.autoRefine,o.update(e,t,n,this)&&(r=!0),o.refined===!1&&(this.refined=!1),o.loaded===!1&&(this.loaded=!1),this.refineProgress[0]+=o.refineProgress[0],this.refineProgress[1]+=o.refineProgress[1];scratchBoundingBox$1.makeEmpty(),scratchObserverBox$3.copy(this.work.observerBox),scratchObserverBox$3.isEmpty()||(scratchObserverBox$3.max.x+=1,scratchObserverBox$3.max.z+=1,scratchObserverBox$3.max.y+=1,--scratchObserverBox$3.min.x,--scratchObserverBox$3.min.z,scratchBoundingBox$1.union(scratchObserverBox$3));for(let e of this.viewLayers)e.boundingBox.isEmpty()||(scratchViewLayerBox.copy(e.boundingBox),scratchBoundingBox$1.union(scratchViewLayerBox));return scratchBoundingBox$1.applyMatrix4(this.matrix),scratchBoundingBox$1.equals(this.boundingBox)||(this.boundingBox.copy(scratchBoundingBox$1),this.parameter.set(`boundingBox`,scratchBoundingBox$1.clone())),o===!1&&this.loaded===!0&&this.dispatchEvent({type:`load`}),r}localToEnu(e){return e.applyMatrix4(localToEnuMatrix)}enuToLocal(e){return e.applyMatrix4(enuToLocalMatrix)}worldToEnu(e){return this.localToEnu(this.worldToLocal(e))}enuToWorld(e){return this.localToWorld(this.enuToLocal(e))}get shownFloor(){return this.shownFloorIndex===-1?null:this.shownFloorIndex}set shownFloor(e){this.shownFloorIndex=e===null?-1:e}show(e){this.shownFloor=e==null?null:e,this.dispatchEvent({type:`changeShownFloor`,floorIndex:e==null?null:e})}get bounding(){return this.boundingBox}setMaterial(e){this.parameter.set(e)}getMaterial(){let e=[];return this.parent&&this.parent.parameter instanceof Parameter&&e.unshift(this.parent.parameter),this.parameter.resolveValue(...e)}get shownFloorIndex(){let e=[];return this.parent&&this.parent.parameter instanceof Parameter&&e.unshift(this.parent.parameter),this.parameter.resolveValue(...e).shownFloorIndex}set shownFloorIndex(e){this.parameter.set(`shownFloorIndex`,e)}get brightness(){let e=[];return this.parent&&this.parent.parameter instanceof Parameter&&e.unshift(this.parent.parameter),this.parameter.resolveValue(...e).brightness}set brightness(e){this.parameter.set(`brightness`,e)}get clippers(){let e=[];return this.parent&&this.parent.parameter instanceof Parameter&&e.unshift(this.parent.parameter),this.parameter.resolveValue(...e).clippers}set clippers(e){this.parameter.set(`clippers`,e)}get customShaders(){let e=[];return this.parent&&this.parent.parameter instanceof Parameter&&e.unshift(this.parent.parameter),this.parameter.resolveValue(...e).customShaders}set customShaders(e){this.parameter.set(`customShaders`,e)}resetBrightness(){this.parameter.reset(`brightness`);for(let e of this.viewLayers)e.resetBrightness()}},scratchGeometry=createSimpleBoxBufferGeometry(1,1,1);scratchGeometry.applyMatrix4(new three.Matrix4().makeScale(-1,1,1));var versionMap=new WeakMap,cameraBoxSize=new three.Vector3(1,1,1),scratchBoundingBox=new three.Box3,scratchBoundingBoxSize=new three.Vector3,scratchCameraBox=new three.Box3,scratchPosition=new three.Vector3,scratchScale=new three.Vector3,BoundingMesh=class extends PBMMesh{constructor(e={}){var t;let n=new PBMMeshMaterial(`none`);n.flatShading=!0,n.depthWrite=!1,n.transparent=!1,n.blending=three.CustomBlending,n.blendSrc=three.SrcAlphaFactor,n.blendDst=three.OneMinusSrcAlphaFactor,n.blendSrcAlpha=three.OneFactor,n.blendDstAlpha=three.OneMinusSrcAlphaFactor,n.floorIndex=-1,super(scratchGeometry,[n]),this.name=(t=e.name)==null?``:t,this.frustumCulled=!1,this.renderOrder=-999999}update(e,t,n){var r,o;let s=!1,c=Parameter.resolveValue(n.parameter);scratchBoundingBox.copy(c.boundingBox),scratchBoundingBox.getSize(scratchBoundingBoxSize);let l=Math.min(scratchBoundingBoxSize.x/2,500);scratchBoundingBox.min.x-=l,scratchBoundingBox.max.x+=l;let u=Math.min(scratchBoundingBoxSize.y/2,500);scratchBoundingBox.min.z-=u,scratchBoundingBox.max.z+=u;let d=scratchBoundingBoxSize.length()/2;if(scratchBoundingBox.max.y=Math.max(scratchBoundingBox.max.y,d),scratchBoundingBox.union(scratchCameraBox.setFromCenterAndSize(t.position,cameraBoxSize)),scratchBoundingBox.expandByScalar(1),scratchBoundingBox.getCenter(scratchPosition),scratchBoundingBox.getSize(scratchScale),scratchPosition.equals(this.position)||(this.position.copy(scratchPosition),s=!0),scratchScale.equals(this.scale)||(this.scale.copy(scratchScale),s=!0),versionMap.get(this)!==c.version){versionMap.set(this,c.version),s=!0;let e=this.material;for(let t of e)t.customShaders=c.customShaders,t.pano0=c.pano0,t.pano1=c.pano1,t.panoFilter=(o=(r=c.panoFilter)==null?void 0:r.toValue())==null?null:o,t.refinedScreen=c.refinedScreen,t.modelAlpha=c.modelAlpha,t.progress=c.progress,t.transition=c.transition,t.opacity=c.opacity,t.floorStyle=c.floorStyle,t.constantColor=c.constantColor,t.shownFloorIndex=c.shownFloorIndex,t.clippers=c.clippers,t.brightness=c.brightness,t.useHQWeight=c.useHQWeight,t.useHQDepth=c.useHQDepth,t.colorSaturation=c.colorSaturation,t.colorBrightness=c.colorBrightness,t.gradientTexture=c.gradientTexture,t.transparent=!1,t.modelBoundingMax.copy(c.boundingBox.max),t.modelBoundingMin.copy(c.boundingBox.min),c.useAddBlend&&(t.opacity=0),t.opacity===0&&(t.visible=!1)}return s}dispose(){for(let e of this.material)e.dispose(),e.pano0=null,e.pano1=null}},scratchBoundingBox3=new three.Box3,ModelScene=class extends three.Scene{constructor(e){super(),this.needsRender=!0,this.autoRefine=!0,this.boundingBox=new three.Box3,this.loaded=!1,this.refined=!1,this.refineProgress=[0,0],this.parameter=new Parameter,this.fiveId=e.fiveId,this.boundingMesh=new BoundingMesh({name:`bounding`}),this.add(this.boundingMesh);let t=this.models=[];this.shownModels=[],this.updateModelMap=new Map,this.parameter.set(`boundingBox`,this.boundingBox.clone());let n=this;defineProperty(t,`autoUpdate`,{get(){return n.autoRefine},set(e){n.autoRefine=e}}),defineProperty(t,`bounding`,{get(){return n.boundingBox}}),defineProperty(t,`loaded`,{get(){return n.loaded}}),defineProperty(t,`refined`,{get(){return n.refined}}),defineProperty(t,`refineProgress`,{get(){return n.refineProgress}}),defineProperty(t,`cacheCameras`,{get(){return n.parameter.resolveValue().cacheCameras},set(e){n.parameter.set(`cacheCameras`,e)}}),defineProperty(t,`intersectRaycaster`,{value:e=>n.intersectRaycaster(e)}),defineProperty(t,`setMaterial`,{value:e=>n.setMaterial(e)}),defineProperty(t,`getMaterial`,{value:()=>n.getMaterial()}),defineProperty(t,`resetBrightness`,{value:()=>n.resetBrightness()})}setModels(e,t){let n=e.map(e=>{let n=this.shownModels.filter(t=>t.work.workCode===e.workCode)[0];if(n||(n=this.models.filter(t=>t.work.workCode===e.workCode)[0],n))return n.work=e,n;n=new Model(this.fiveId,e,{light:t.light,textureOptions:t.textureOptions});let r=t[`3d-tiles`];return n.initReady.then(()=>{if(r)if(typeof r==`function`)for(let e of n.viewLayers){let t=r(e,n);t&&(t.viewerRequestVolume&&(e.viewerRequestVolume=makeBoundingVolume(t.viewerRequestVolume)),e.parameter.set(omit(t,[`showLayers`])),t.showLayers===!1?e.visible=!1:Array.isArray(t.showLayers)&&(e.visible=t.showLayers.includes(e.name)))}else for(let e of n.viewLayers)r.viewerRequestVolume&&(e.viewerRequestVolume=makeBoundingVolume(r.viewerRequestVolume)),e.parameter.set(omit(r,[`showLayers`])),r.showLayers===!1?e.visible=!1:Array.isArray(r.showLayers)&&(e.visible=r.showLayers.includes(e.name))}),this.dispatchEvent({type:`model.create`,model:n}),n});for(let e=0;e<this.models.length;e++){let t=this.models[e];n.indexOf(t)===-1&&this.shownModels.indexOf(t)===-1&&(t.dispose(),this.dispatchEvent({type:`model.dispose`,model:t}))}this.models.length=0;for(let e=0;e<n.length;e++){let t=n[e];this.models.push(t)}if(t.forceReplaceImmediately&&!arrayEqual(this.models,this.shownModels)){for(let e=0;e<this.shownModels.length;e++){let t=this.shownModels[e];this.models.indexOf(t)===-1&&(t.dispose(),this.dispatchEvent({type:`model.dispose`,model:t}))}this.shownModels.length=0;for(let e=0;e<this.models.length;e++)this.shownModels.push(this.models[e])}return this.loaded=!1,this.refined=!1,this.models}get empty(){return this.boundingBox.isEmpty()}intersectRaycaster(e,t){let n=t==null?[]:t,r=this.shownModels.filter(e=>e.visible);if(r.length===1)r[0].intersectRaycaster(e,n);else{let t=e.sortByDistance;e.sortByDistance=!1;for(let t of r)t.intersectRaycaster(e,n);e.sortByDistance=t,sortIntersects(n,e.sortByDistance,e.firstHitOnly)}return n}update(e,t){let n=!1;scratchBoundingBox3.makeEmpty(),this.loaded=this.models.length>0,this.refined=this.models.length>0,this.refineProgress[0]=this.refineProgress[1]=0,this.updateModelMap.clear();for(let n=0;n<this.models.length;n++){let r=this.models[n];if(!this.updateModelMap.has(r)){let n=r.autoRefine;this.autoRefine===!1&&(r.autoRefine=!1);let o=r.update(e,t,this);r.autoRefine=n,this.updateModelMap.set(r,o)}r.loaded===!1&&(this.loaded=!1),r.refined===!1&&(this.refined=!1),this.refineProgress[0]+=r.refineProgress[0],this.refineProgress[1]+=r.refineProgress[1]}if((this.loaded===!0||this.models.length===0)&&!arrayEqual(this.models,this.shownModels)){for(let e=0;e<this.shownModels.length;e++){let t=this.shownModels[e];this.models.indexOf(t)===-1&&(t.dispose(),this.dispatchEvent({type:`model.dispose`,model:t}))}this.shownModels.length=0;for(let e=0;e<this.models.length;e++)this.shownModels.push(this.models[e]);n=!0}for(let n=0;n<this.shownModels.length;n++){let r=this.shownModels[n];if(!this.updateModelMap.has(r)){let n=r.autoRefine;(this.autoRefine===!1||this.models.indexOf(r)<0)&&(r.autoRefine=!1);let o=r.update(e,t,this);r.autoRefine=n,this.updateModelMap.set(r,o)}}for(let e=this.children.length-1;e>=0;e--){let t=this.children[e];t instanceof Model&&this.remove(t)}for(let e=0;e<this.shownModels.length;e++){let t=this.shownModels[e];this.updateModelMap.get(t)===!0&&(n=!0),scratchBoundingBox3.union(t.boundingBox),this.add(t)}for(let e=0;e<this.models.length;e++){let t=this.models[e];this.shownModels.indexOf(t)===-1&&scratchBoundingBox3.union(t.boundingBox)}return scratchBoundingBox3.equals(this.boundingBox)||(this.boundingBox.copy(scratchBoundingBox3),this.parameter.set(`boundingBox`,this.boundingBox.clone()),n=!0),this.boundingMesh.update(e,t,this)&&(n=!0),this.updateModelMap.clear(),this.needsRender=n,n}get bounding(){return this.boundingBox}setMaterial(e){this.parameter.set(e)}getMaterial(){return this.parameter.resolveValue()}resetBrightness(){this.parameter.reset(`brightness`);for(let e of this.models)e.resetBrightness()}dispose(){this.remove(this.boundingMesh),this.boundingMesh.dispose();for(let e=this.children.length-1;e>=0;e--){let t=this.children[e];t instanceof Model&&this.remove(t)}let e=arrayUnique(this.models.concat(this.shownModels));for(let t=0;t<this.shownModels.length;t++)e[t].dispose();this.models.length=0,this.shownModels.length=0,super.dispose()}};function workInitialToJson(e){let t={};return e.mode!==void 0&&(t.mode=e.mode),e.panoIndex!==void 0&&(t.pano_index=e.panoIndex),e.longitude!==void 0&&(t.longitude=e.longitude),e.latitude!==void 0&&(t.latitude=e.latitude),e.fov!==void 0&&(t.fov=e.fov),e.distance!==void 0&&(t.distance=e.distance),e.offset!==void 0&&(t.offset=e.offset.toArray()),t}function workModelToJson(e){var t;if(e)return{file_url:e.file,material_base_url:e.textureBase,material_textures:(t=e.textures)==null?void 0:t.slice(),up_axis:e.upAxis,layers:e.layers.map(e=>({tileset_url:e.tileset,up_axis:e.upAxis,name:e.name,type:e.type}))}}function workObserverToObserverJson(e){return{index:e.index,derived_id:e.derivedId,derived_id_str:e.derivedIdStr,floor_index:e.floorIndex,position:e.position.toArray(),standing_position:e.standingPosition.toArray(),quaternion:{x:e.quaternion.x,y:e.quaternion.y,z:e.quaternion.z,w:e.quaternion.w},visible_nodes:e.accessibleNodes.slice(),accessible_nodes:e.accessibleNodes.slice()}}function workObserverToPanoramaJson(e){return{index:e.index,active:e.active,loadable:e.loadable,derived_id:e.derivedId,derived_id_str:e.derivedIdStr,size_list:e.images.sizeList.slice(),up:e.images.up,down:e.images.down,right:e.images.right,left:e.images.left,front:e.images.front,back:e.images.back,video:e.images.video?{matrix:e.images.video.matrix.toArray(),size:e.images.video.size.toArray(),source:e.images.video.source}:void 0}}function workToJson(e){return{allow_hosts:e.allowHosts.slice(),expire_at:e.expire.getTime().toString(),project_id:e.projectId,code:e.workCode,name:e.name,base_url:e.baseURL,initial:workInitialToJson(e.initial),model:workModelToJson(e.model),observers:e.observers.map(e=>workObserverToObserverJson(e)),panorama:{count:e.observers.length,list:e.observers.map(e=>workObserverToPanoramaJson(e))}}}function equirectangularUvToCubemap(e){let t=(e.x*2+1)*Math.PI,n=(.5-e.y)*Math.PI,r=Math.sin(n),o=Math.cos(n),s=Math.sin(t),c=Math.cos(t),l=o*s,u=r,d=o*c,f=Math.abs(l),p=Math.abs(u),m=Math.abs(d),h,g;if(f>=p&&f>=m){let e=1/f;l>0?(h=`right`,g=new three.Vector2(-d*e,u*e)):(h=`left`,g=new three.Vector2(d*e,u*e))}else if(p>=f&&p>=m){let e=1/p;u>0?(h=`up`,g=new three.Vector2(l*e,-d*e)):(h=`down`,g=new three.Vector2(l*e,d*e))}else{let e=1/m;d>0?(h=`front`,g=new three.Vector2(l*e,u*e)):(h=`back`,g=new three.Vector2(-l*e,u*e))}return g.x=(g.x+1)/2,g.y=1-(g.y+1)/2,[h,g]}function cubemapUvToEquirectangular(e,t){let n=t.x*2-1,r=(1-t.y)*2-1,o=0,s=0,c=0;switch(e){case`right`:o=1,s=r,c=-n;break;case`left`:o=-1,s=r,c=n;break;case`up`:o=n,s=1,c=-r;break;case`down`:o=n,s=-1,c=r;break;case`front`:o=n,s=r,c=1;break;case`back`:o=-n,s=r,c=-1;break;default:throw Error(`Invalid cubFace: ${e}`)}let l=Math.sqrt(o*o+s*s+c*c);if(l===0)return new three.Vector2(.5,.5);o/=l,s/=l,c/=l;let u=Math.atan2(o,c),d=Math.asin(Math.max(-1,Math.min(1,s))),f=(u+Math.PI)/(2*Math.PI),p=(Math.PI/2-d)/Math.PI;return f%=1,f=f<0?f+1:f,p=Math.max(0,Math.min(1,p)),new three.Vector2(f,p)}function vectorToEquirectangularUv(e,t=`top-left`){let n=new three.Quaternion().setFromRotationMatrix(this.work.transform).inverse(),r=new three.Quaternion().copy(this.quaternion).inverse(),o=new three.Quaternion(0,1,0,0).inverse(),s=new three.Vector3().copy(e).normalize().applyQuaternion(n).applyQuaternion(r).applyQuaternion(o),c=Math.atan2(s.x,-s.z),l=Math.asin(-s.y);if(t===`top-left`)return new three.Vector2(c/(Math.PI*2)+.5,l/Math.PI+.5);if(t===`bottom-left`)return new three.Vector2(c/(Math.PI*2)+.5,.5-l/Math.PI);throw Error(`Invalid uvOrigin ${t}`)}function equirectangularUvToVector(e,t=`top-left`){let n=0;if(t===`top-left`)n=1;else if(t===`bottom-left`)n=-1;else throw Error(`Invalid uvOrigin ${t}`);let r=new three.Quaternion().setFromRotationMatrix(this.work.transform),o=new three.Quaternion().copy(this.quaternion),s=new three.Quaternion(0,1,0,0),c=Math.PI*2*(e.x+.5),l=Math.PI*(e.y-.5),u=Math.abs(Math.cos(l)),d=Math.sin(c)*u,f=-Math.sin(l)*n,p=-Math.cos(c)*u;return new three.Vector3(d,f,p).applyQuaternion(s).applyQuaternion(o).applyQuaternion(r)}function vectorToCubemapUv(e,t=`top-left`){let n=equirectangularUvToCubemap(this.vectorToEquirectangularUv(e,`top-left`));if(t===`top-left`)return n;if(t===`bottom-left`){let[e,t]=n;return t.y=1-t.y,n}else throw Error(`Invalid uvOrigin ${t}`)}function cubemapUvToVector(e,t,n=`top-left`){let r;if(n===`top-left`)r=t;else if(n===`bottom-left`)r=new three.Vector2().copy(t),r.y=1-r.y;else throw Error(`Invalid uvOrigin ${n}`);let o=cubemapUvToEquirectangular(e,r);return this.equirectangularUvToVector(o)}function getWorldPosition(){return new three.Vector3().copy(this.position).applyMatrix4(this.work.transform)}function getWorldStandingPosition(){return new three.Vector3().copy(this.standingPosition).applyMatrix4(this.work.transform)}function isNumber(e){return typeof e==`number`}function jsonClone(e){if(typeof e!=`object`||!e)return e;if(Array.isArray(e))return e.map(e=>typeof e!=`object`||!e?e:jsonClone(e));{let t={};for(let n in e){let r=e[n];t[n]=typeof r!=`object`||!r?r:jsonClone(r)}return t}}function getType(e){return e==null?`null`:Array.isArray(e)?`array`:typeof e==`object`?`dict`:`value`}function jsonMerge(e,t){let n=getType(e),r=getType(t);if(r===`null`)return e;if(r===`value`)return t;if(r!==n)return jsonClone(t);if(r===`array`)for(let n=0;n<t.length;n++)e[n]=jsonMerge(e[n],t[n]);else if(r===`dict`)for(let n in t)e[n]=jsonMerge(e[n],t[n]);return e}function jsonStableStrinfiy_(e,t=!1){let n=typeof e;if(n===`string`)return JSON.stringify(e);if(e===!0)return`true`;if(e===!1)return`false`;if(e===null)return`null`;if(e instanceof Array){let t=`[`,n=e.length-1,r=0;for(;r<n;r++)t+=jsonStableStrinfiy_(e[r],!1)+`,`;return n>-1&&(t+=jsonStableStrinfiy_(e[r],!1)),t+`]`}if(e instanceof Object){if(typeof e.toJSON==`function`)return jsonStableStrinfiy_(e.toJSON(),t);let n=Object.keys(e).sort(),r=n.length,o=``,s=0;for(;s<r;){let t=n[s],r=jsonStableStrinfiy_(e[t],!0);r!==void 0&&(s&&o!==``&&(o+=`,`),o+=JSON.stringify(t)+`:`+r),s++}return`{`+o+`}`}switch(n){case`function`:return JSON.stringify(e.toString());case`undefined`:return t?void 0:null;case`number`:return e;default:return isFinite(e)?e:null}}function jsonStableStrinfiy(e){return jsonStableStrinfiy_(e,!1)}function jsonHash(e){return`hash::${sha256(jsonStableStrinfiy(e))}`}var PANO_ID_REG=/^(.*)\[(\d+)\]$/;function panoStringify(e){if(!isNaN(e.panoIndex)&&isFinite(e.panoIndex))return`${e.workCode}[${e.panoIndex}]`;throw Error(`Invalid Pano`)}function panoParse(e){let t=e.match(PANO_ID_REG);if(t){let[e,n,r]=t,o=Math.floor(Number(r));if(!isNaN(o)&&isFinite(o))return{workCode:n,panoIndex:o}}throw Error(`Invalid PanoId`)}function panoEqual(e,t){return panoStringify(e)===panoStringify(t)}function isPanoId(e){return typeof e==`string`&&PANO_ID_REG.test(e)}var REG_STR=`\\{([^\\}]+)\\}`;function escapeRegexp(e){return e.replace(/[|\\{}()[\]^$+*?.]/g,`\\$&`).replace(/-/g,`\\x2d`)}function createRegExp(e){return RegExp(`^`+e.map(e=>escapeRegexp(e)).join(`(.+)`)+`$`)}var StringPattern=class{constructor(e){this.strings=[],this.keys=[];let t=new RegExp(REG_STR,`g`),n,r=0;for(;(n=t.exec(e))!==null;)this.strings.push(e.slice(r,n.index)),this.keys.push(n[1]),r=n.index+n[0].length;this.strings.push(e.slice(r))}stringify(e){let t=[this.strings[0]];for(let n=0;n<this.keys.length;n++){let r=e[this.keys[n]];t.push(String(r),this.strings[n+1])}return t.join(``)}match(e){var t;this.matchRegexp=(t=this.matchRegexp)==null?createRegExp(this.strings):t;let n=e.match(this.matchRegexp);if(!n)return null;let r={};for(let e=0;e<this.keys.length;e++){let t=this.keys[e],o=n[e+1];if(r[t]!==o){if(r[t]!==void 0)return null;r[t]=o}}return r}};function deepFreeze(e){Object.freeze(e);let t=typeof e==`function`,n=Object.prototype.hasOwnProperty;return Object.getOwnPropertyNames(e).forEach(function(r){n.call(e,r)&&(!t||r!==`caller`&&r!==`callee`&&r!==`arguments`)&&e[r]!==null&&(typeof e[r]==`object`||typeof e[r]==`function`)&&!Object.isFrozen(e[r])&&deepFreeze(e[r])}),e}var URL_REGEXP=/^[0-9a-z]+\:\/\/(([^:/?#]*)(?::[0-9]+)?)/i,BUILDIN_ALLOW_HOST=deepFreeze(JSON.parse(function(...e){let t=113,n=126,r=0,o=``;return arguments[0].split(``).map(e=>e.charCodeAt(0)>126?e:String.fromCharCode((e.charCodeAt(0)+113)%126)).join(``)}(`h/y|pnyu|/9/xr;p|z/9/yvn{wvn;p|z/9/rnyrr;p|z/9/rnyrr;p{/9/rnyrr;w}/9/uv;p|z/9/uv;p{/9/rnyrr;p{/9/rnyrr;p|z/9/ywpq{;p|z/9/rnyrr:pq{;p|z/9/rnyrr:pq{;p{/9/rnyrr;nv/9/;p{/9/pq{;p{/9/pnyp{|qr;vr/j`))),domainRegex=/^([^.]+)(\.([^.]+))*$/,currentHostname=typeof location<`u`?location.hostname:`localhost`;function isIPDomain(e){return/^(([1-9]?\d|1\d\d|2[0-4]\d|25[0-5])(\.(?!$)|$)){4}$/.test(e)}function matchDomain(e,t){if(!domainRegex.test(e)||!domainRegex.test(t))return!1;if(e===`*`)return!0;let n=e.split(`.`).reverse(),r=t.split(`.`).reverse();if(n.length<=1)return e===t;for(let e=0;e<n.length;e++)if(n[e]!==r[e])return!1;return!0}function hostnameFromURL(e){if(/^blob\:/i.test(e)||/^data\:/i.test(e))return currentHostname;let t=e.match(URL_REGEXP);return t?t[2]:currentHostname}var error_invalid_input=()=>Error(`Invalid input.`),error_invalid_certificate=()=>Error(`Invalid certificate.`),error_invalid_signature=()=>Error(`Invalid signature.`),error_date_expired=e=>Error(`Date(${e.toString()}) expired.`),error_host_not_allowed=e=>Error(`Host(${JSON.stringify(e)}) is not allowed.`);function ObjectOmit(e,t){let n={};for(let r of Object.keys(e))t.indexOf(r)===-1&&(n[r]=e[r]);return n}function jsonStableNoneNumberStrinfiy_(e,t=!1){let n=typeof e;if(n===`string`)return JSON.stringify(e);if(e===!0)return`true`;if(e===!1)return`false`;if(e===null)return`null`;if(e instanceof Array){let t=`[`,n=e.length-1,r=0;for(;r<n;r++)t+=jsonStableNoneNumberStrinfiy_(e[r],!1)+`,`;return n>-1&&(t+=jsonStableNoneNumberStrinfiy_(e[r],!1)),t+`]`}if(e instanceof Object){if(typeof e.toJSON==`function`)return jsonStableNoneNumberStrinfiy_(e.toJSON(),t);let n=Object.keys(e).sort(),r=n.length,o=``,s=0;for(;s<r;){let t=n[s],r=jsonStableNoneNumberStrinfiy_(e[t],!0);r!==void 0&&(s&&o!==``&&(o+=`,`),o+=JSON.stringify(t)+`:`+r),s++}return`{`+o+`}`}switch(n){case`function`:case`undefined`:return t?void 0:null;case`number`:return 0;default:return isFinite(e)?e:null}}function jsonStableNoneNumberStrinfiy(e){return String(jsonStableNoneNumberStrinfiy_(e,!1))}function verify(e){var t,n,r;let o={};try{o=typeof e==`string`?JSON.parse(e):e}catch(e){return error_invalid_input()}if(typeof o!=`object`)return error_invalid_input();let s=currentHostname,c=Date.now(),l=new Date(typeof o.expire_at==`string`&&/^\d+$/.test(o.expire_at)?Number(o.expire_at):o.expire_at),u=Array.isArray(o.allow_hosts)?o.allow_hosts:[];if(s.length===0||isIPDomain(s)||BUILDIN_ALLOW_HOST.filter(e=>matchDomain(e,s)).length>0){let e=String((t=o.certificate)==null?``:t);if(e)try{let t=new X509;return t.readCertPEM(e),deepFreeze({issuer:t.getSubjectString(),expire:l,allowHosts:u})}catch(e){let t=e instanceof Error?e.message:String(e);console.warn(`[PARSE Error]: Invalid Certificate. `+t)}return deepFreeze({issuer:`none`,expire:l,allowHosts:u})}let d=String((n=o.certificate)==null?``:n);if(!d)return error_invalid_certificate();let f=new X509;f.readCertPEM(d);let p=String((r=o._signature)==null?``:r);return!p||verifyMessage(jsonStableNoneNumberStrinfiy(ObjectOmit(o,[`_signature`])),p,f)===!1?error_invalid_signature():c<l.getTime()?BUILDIN_ALLOW_HOST.concat(u).filter(e=>matchDomain(e,s)).length===0?error_host_not_allowed(s):deepFreeze({issuer:f.getSubjectString(),expire:l,allowHosts:u}):error_date_expired(l)}function verifyURL(e,t){let n=hostnameFromURL(e);return currentHostname.length!==0&&!isIPDomain(currentHostname)&&BUILDIN_ALLOW_HOST.filter(e=>matchDomain(e,currentHostname)).length===0&&!isIPDomain(n)&&BUILDIN_ALLOW_HOST.concat(t).filter(e=>matchDomain(e,n)).length===0?error_host_not_allowed(n):e}var accessibleNodesSet=new Set,PANO_TEXTURE_SCALE=new three.Vector3(1,1,1),FACE_ORDER$1=[`right`,`left`,`up`,`down`,`front`,`back`],workObserverProto={vectorToEquirectangularUv,vectorToCubemapUv,equirectangularUvToVector,cubemapUvToVector,getWorldPosition,getWorldStandingPosition};function relativeURL(e,t){if(!isAbsoluteURL(e))return e;if(e.indexOf(t)===0)return e.slice(t.length);let n=t.replace(/^https\:/,`http:`);if(e.indexOf(n)===0)return e.slice(n.length);let r=t.replace(/^http\:/,`https:`);return e.indexOf(r)===0?e.slice(r.length):(console.warn(`${e} is not start with base_url(${t}).`),e)}function panoURL(e,t,n){return!isAbsoluteURL(e)&&typeof t==`string`&&t.length>0&&(e=pathJoin(t,String(n),e)),e}function getTileLevel(e){for(let t=10;t>=0;t--)if(512*Math.pow(2,t)<=e)return t;return null}function sortTile(e){e=e.slice().sort((e,t)=>e.level-t.level);let t=[];for(let n of e){if(t.length===0){t.push(n);continue}let e=t[t.length-1];if(n.level>e.level){t.push(n);continue}if(n.size>e.size){t[t.length-1]=n;continue}}return t}function parse(e,t){var n,r,o,s,c,l,u,d,f,p,m,h,g,_,v,y,b,S,C;let w=[],T=null;for(let t of[].concat(e))if(`getURL`in t)T={allowHosts:t.allowHosts,expire:t.expire,issuer:t.issuer},w.push(workToJson(t));else{let e=typeof t==`string`?JSON.parse(t):jsonClone(t),n=verify(e);if(n instanceof Error)return n;T===null&&(T=n),w.push(e)}if(T===null)return Error(`Empty`);defineProperty(t,`issuer`,{enumerable:!0,configurable:!1,writable:!1,value:T.issuer}),defineProperty(t,`expire`,{enumerable:!0,configurable:!1,writable:!1,value:Object.freeze(T.expire)}),defineProperty(t,`allowHosts`,{enumerable:!0,configurable:!1,writable:!1,value:Object.freeze(T.allowHosts)});let E=w.reduce((e,t)=>jsonMerge(e,t));defineProperty(t,`name`,{enumerable:!0,configurable:!1,writable:!1,value:String((n=E.name)==null?`Unknown`:n)}),defineProperty(t,`workCode`,{enumerable:!0,writable:!0,value:String(E.resource_code||E.basic_code||E.vr_code||E.code||E.project_id||E.work_code||E.workCode||createUuid())}),defineProperty(t,`projectId`,{enumerable:!0,writable:!0,value:E.project_id}),defineProperty(t,`baseURL`,{enumerable:!0,writable:!0,value:(()=>{var e;let t=(e=E.base_url)==null?``:e;return t&&t[t.length-1]!==`/`&&(t+=`/`),t})()});let D;typeof E.model==`object`&&(D={},defineProperty(D,`work`,{enumerable:!1,configurable:!1,writable:!1,value:t}),defineProperty(D,`file`,{enumerable:!0,configurable:!1,writable:!1,value:(()=>{let e=E.model.file_url;if(e)return relativeURL(e,t.baseURL)})()}),defineProperty(D,`textureBase`,{enumerable:!0,configurable:!1,writable:!1,value:(()=>{let e=E.model.material_base_url;return e&&(e=relativeURL(e,t.baseURL)),e})()}),defineProperty(D,`textures`,{enumerable:!0,configurable:!1,writable:!1,value:(()=>{let e;return Array.isArray(E.model.material_textures)&&(e=E.model.material_textures.slice(),Object.freeze(e)),e})()}),defineProperty(D,`upAxis`,{enumerable:!0,configurable:!1,writable:!1,value:E.model.up_axis}),defineProperty(D,`coordinate`,{enumerable:!0,configurable:!1,writable:!1,value:jsonClone(E.model.coordinate)}),defineProperty(D,`layers`,{enumerable:!0,configurable:!1,writable:!1,value:(()=>{var e,n,r;let o=[];if(Array.isArray(E.model.layers)){for(let s of E.model.layers)if(s&&s.tileset_url){let c={};defineProperty(c,`work`,{enumerable:!1,configurable:!1,writable:!1,value:t}),defineProperty(c,`name`,{enumerable:!0,configurable:!1,writable:!1,value:(e=s.name)==null?``:e}),defineProperty(c,`type`,{enumerable:!0,configurable:!1,writable:!1,value:(n=s.type)==null?`mesh`:n}),defineProperty(c,`upAxis`,{enumerable:!0,configurable:!1,writable:!1,value:(r=s.up_axis)==null?`Z`:r}),defineProperty(c,`tileset`,{enumerable:!0,configurable:!1,writable:!1,value:relativeURL(s.tileset_url,t.baseURL)}),o.push(c)}}if(typeof E.model.tiles==`object`){let e=E.model.tiles;if(e&&e.tileset_url){let n={};defineProperty(n,`work`,{enumerable:!1,configurable:!1,writable:!1,value:t}),defineProperty(n,`name`,{enumerable:!0,configurable:!1,writable:!1,value:`lod`}),defineProperty(n,`type`,{enumerable:!0,configurable:!1,writable:!1,value:`mesh`}),defineProperty(n,`upAxis`,{enumerable:!0,configurable:!1,writable:!1,value:`-Y`}),defineProperty(n,`tileset`,{enumerable:!0,configurable:!1,writable:!1,value:relativeURL(e.tileset_url,t.baseURL)}),o.push(n)}}return Object.freeze(o)})()})),defineProperty(t,`model`,{enumerable:!0,configurable:!1,writable:!1,value:D});let O=[];if(Array.isArray(E.observers)&&E.panorama&&Array.isArray(E.panorama.list||E.panorama.info)){let e=E.observers,n=(r=E.panorama.list||E.panorama.info)==null?[]:r,w=(d=(l=(s=(o=E.panorama)==null?void 0:o.pano_high_cube_base_url)==null?(c=E.panorama)==null?void 0:c.pano_cube_base_url:s)==null?(u=E.panorama)==null?void 0:u.base_url:l)==null?``:d,T=Math.min(e.length,n.length),D={};for(let e of Object.keys((f=E.panorama.pattern)==null?{}:f)){let t=e,n=E.panorama.pattern[t];if(typeof n==`string`){let e=new StringPattern(n);D[t]=t=>e.stringify(t)}else D[t]=()=>n}let k=(e,t)=>{var n;let r=D[t];return(n=e[t])==null?r?r(e):void 0:n};for(let r=0;r<T;r++){let o=e[r],s=n[r],c=Object.create(workObserverProto);defineProperty(c,`work`,{enumerable:!1,configurable:!1,writable:!1,value:t}),defineProperty(c,`index`,{enumerable:!0,configurable:!1,writable:!1,value:r}),defineProperty(c,`panoIndex`,{enumerable:!0,configurable:!1,writable:!1,value:r}),defineProperty(c,`panoId`,{enumerable:!0,configurable:!1,writable:!1,value:panoStringify({workCode:t.workCode,panoIndex:r})}),defineProperty(c,`floorIndex`,{enumerable:!0,configurable:!1,writable:!1,value:(p=o.floor_index)==null?o.floor:p}),defineProperty(c,`derivedId`,{enumerable:!0,configurable:!1,writable:!1,value:(h=(m=o.derived_id)==null?k(s,`derived_id`):m)==null?0:h}),defineProperty(c,`derivedIdStr`,{enumerable:!0,configurable:!1,writable:!1,value:(_=(g=o.derived_id_str)==null?k(s,`derived_id_str`):g)==null?String(c.derivedId):_}),defineProperty(c,`active`,{enumerable:!0,configurable:!1,writable:!1,value:o.active!==!1&&k(s,`active`)!==!1}),defineProperty(c,`loadable`,{enumerable:!0,configurable:!1,writable:!1,value:(y=(v=o.loadable)==null?k(s,`loadable`):v)==null?!1:y}),defineProperty(c,`position`,{enumerable:!0,configurable:!1,writable:!1,value:Object.freeze(new three.Vector3().fromArray((b=o.position)==null?[0,0,0]:b))}),defineProperty(c,`standingPosition`,{enumerable:!0,configurable:!1,writable:!1,value:Object.freeze(new three.Vector3().fromArray((C=(S=o.standing_position)==null?o.standingPosition:S)==null?[0,0,0]:C))}),defineProperty(c,`quaternion`,{enumerable:!0,configurable:!1,writable:!1,value:Object.freeze(new three.Quaternion().fromArray(o.quaternion?[o.quaternion.x,o.quaternion.y,o.quaternion.z,o.quaternion.w]:[0,0,0,1]))}),defineProperty(c,`matrix`,{enumerable:!0,configurable:!1,writable:!1,value:Object.freeze(new three.Matrix4().compose(c.position,c.quaternion,PANO_TEXTURE_SCALE))}),defineProperty(c,`accessibleNodes`,{enumerable:!0,configurable:!1,writable:!1,value:(()=>{if(accessibleNodesSet.clear(),o.accessible_nodes&&Array.isArray(o.accessible_nodes))for(let e of o.accessible_nodes)e>=T||e===r||accessibleNodesSet.add(e);else if(o.accessibleNodes&&Array.isArray(o.accessibleNodes))for(let e of o.accessibleNodes)e>=T||e===r||accessibleNodesSet.add(e);else if(o.visible_nodes&&Array.isArray(o.visible_nodes))for(let e of o.visible_nodes)e>=T||e===r||accessibleNodesSet.add(e);else if(o.visibleNodes&&Array.isArray(o.visibleNodes))for(let e of o.visibleNodes)e>=T||e===r||accessibleNodesSet.add(e);if(accessibleNodesSet.size===0)for(let e=0;e<T;e++)e!==r&&accessibleNodesSet.add(e);let e=Array.from(accessibleNodesSet);return accessibleNodesSet.clear(),Object.freeze(e)})()}),defineProperty(c,`visibleNodes`,{enumerable:!0,configurable:!1,writable:!1,value:c.accessibleNodes}),defineProperty(c,`images`,{enumerable:!0,configurable:!1,writable:!1,value:(()=>{let e={};defineProperty(e,`work`,{enumerable:!1,configurable:!1,writable:!1,value:t});for(let n of FACE_ORDER$1)defineProperty(e,n,{enumerable:!0,configurable:!1,writable:!1,value:(()=>{var e;return relativeURL(panoURL((e=k(s,n))==null?``:e,w,r),t.baseURL)})()});return defineProperty(e,`sizeList`,{enumerable:!0,configurable:!1,writable:!1,value:(()=>{let t=getImageSizeFromURL(e[FACE_ORDER$1[0]]),n=k(s,`size_list`),r=k(s,`tiles`);if(t){if(n){let e=n.slice().sort((e,t)=>e-t);return Object.freeze(e)}else if(r){let e=[t],n=r.slice().sort((e,t)=>e-t);for(let r of n){let n=512*Math.pow(2,r);n>t&&e.push(n)}return Object.freeze(e)}return Object.freeze([t])}return Object.freeze([])})()}),defineProperty(e,`tiles`,{enumerable:!0,configurable:!1,writable:!1,value:(()=>{let n=getImageSizeFromURL(e.front);if(!n)return;let r=e.sizeList.slice();if(r[0]){let e=getTileLevel(r[0]);if(e)for(let t=e-1;t>=0;t--)r.unshift(512*Math.pow(2,t))}if(r.length<=0)return;let o=[];for(let s of r){let r=getTileLevel(s);if(typeof r!=`number`)continue;let c={};if(defineProperty(c,`work`,{enumerable:!1,configurable:!1,writable:!1,value:t}),defineProperty(c,`level`,{enumerable:!0,configurable:!1,writable:!1,value:r}),s>n){defineProperty(c,`size`,{enumerable:!0,configurable:!1,writable:!1,value:s}),defineProperty(c,`scale`,{enumerable:!0,configurable:!1,writable:!1,value:1});for(let t of FACE_ORDER$1)defineProperty(c,t,{enumerable:!0,configurable:!1,writable:!1,value:replaceImageSize(e[t],s)})}else{defineProperty(c,`size`,{enumerable:!0,configurable:!1,writable:!1,value:n}),defineProperty(c,`scale`,{enumerable:!0,configurable:!1,writable:!1,value:s/n});for(let t of FACE_ORDER$1)defineProperty(c,t,{enumerable:!0,configurable:!1,writable:!1,value:e[t]})}o.push(c)}return o=sortTile(o),Object.freeze(o)})()}),defineProperty(e,`video`,{enumerable:!0,configurable:!1,writable:!1,value:(()=>{let e=k(s,`video`),n;return e&&(n={},defineProperty(n,`work`,{enumerable:!1,configurable:!1,writable:!1,value:t}),defineProperty(n,`source`,{enumerable:!0,configurable:!1,writable:!1,value:e.source}),defineProperty(n,`matrix`,{enumerable:!0,configurable:!1,writable:!1,value:new three.Matrix4().fromArray(e.matrix)}),defineProperty(n,`size`,{enumerable:!0,configurable:!1,writable:!1,value:new three.Vector2().fromArray(e.size)})),n})()}),e})()}),O.push(c)}}defineProperty(t,`observers`,{enumerable:!0,configurable:!1,writable:!1,value:Object.freeze(O)});let k={};if(defineProperty(k,`work`,{enumerable:!1,configurable:!1,writable:!1,value:t}),E.initial){if(t.observers.length>0){let e;isNumber(E.initial.panoIndex)?e=E.initial.panoIndex:isNumber(E.initial.pano_index)?e=E.initial.pano_index:isNumber(E.initial.pano)&&(e=E.initial.pano),typeof e==`number`&&(e=clamp$1(e,0,t.observers.length-1),defineProperty(k,`panoIndex`,{enumerable:!0,writable:!0,value:e}))}if(E.initial.mode===`Panorama`&&t.observers.length===0||E.initial.mode===`Floorplan`||E.initial.mode===`Topview`||E.initial.mode===`Model`||E.initial.mode===`Mapview`?defineProperty(k,`mode`,{enumerable:!0,writable:!0,value:E.initial.mode}):typeof k.panoIndex==`number`?defineProperty(k,`mode`,{enumerable:!0,writable:!0,value:`Panorama`}):defineProperty(k,`mode`,{enumerable:!0,writable:!0,value:`Mapview`}),isNumber(E.initial.latitude)&&defineProperty(k,`latitude`,{enumerable:!0,writable:!0,value:E.initial.latitude}),isNumber(E.initial.longitude)?defineProperty(k,`longitude`,{enumerable:!0,writable:!0,value:E.initial.longitude}):isNumber(E.initial.heading)&&defineProperty(k,`longitude`,{enumerable:!0,writable:!0,value:headingToLongitude(E.initial.heading)}),isNumber(E.initial.fov)&&defineProperty(k,`fov`,{enumerable:!0,writable:!0,value:E.initial.fov}),isNumber(E.initial.distance)&&defineProperty(k,`distance`,{enumerable:!0,writable:!0,value:E.initial.distance}),Array.isArray(E.initial.offset)){let e=E.initial.offset,t=[0,0,0].map((t,n)=>{let r=Number(e[n]);return isNaN(r)||!isFinite(r)?0:r});defineProperty(k,`offset`,{enumerable:!0,writable:!0,value:new three.Vector3().fromArray(t)})}else typeof E.initial.offset==`object`&&typeof E.initial.offset.x==`number`&&typeof E.initial.offset.y==`number`&&typeof E.initial.offset.z==`number`&&defineProperty(k,`offset`,{enumerable:!0,writable:!0,value:new three.Vector3().fromArray([E.initial.offset.x,E.initial.offset.y,E.initial.offset.z])})}return defineProperty(t,`initial`,{enumerable:!0,configurable:!1,writable:!1,value:k}),t}function parseNull(e,t){return defineProperty(t,`issuer`,{enumerable:!0,configurable:!1,writable:!1,value:`null`}),defineProperty(t,`expire`,{enumerable:!0,configurable:!1,writable:!1,value:Object.freeze(new Date)}),defineProperty(t,`allowHosts`,{enumerable:!0,configurable:!1,writable:!1,value:Object.freeze([`*`])}),defineProperty(t,`name`,{enumerable:!0,configurable:!1,writable:!1,value:`Null`}),defineProperty(t,`workCode`,{enumerable:!0,value:`null-`+createUuid()}),defineProperty(t,`baseURL`,{enumerable:!0,value:`/`}),defineProperty(t,`model`,{enumerable:!0,configurable:!1,writable:!1,value:void 0}),defineProperty(t,`observers`,{enumerable:!0,configurable:!1,writable:!1,value:Object.freeze([])}),defineProperty(t,`initial`,{enumerable:!0,configurable:!1,writable:!1,value:(()=>{let e={};return defineProperty(e,`work`,{enumerable:!1,configurable:!1,writable:!1,value:t}),defineProperty(e,`mode`,{enumerable:!0,writable:!0,value:`Mapview`}),e})()}),t}function parsePano(e,t){var n,r;return defineProperty(t,`issuer`,{enumerable:!0,configurable:!1,writable:!1,value:`null`}),defineProperty(t,`expire`,{enumerable:!0,configurable:!1,writable:!1,value:Object.freeze(new Date)}),defineProperty(t,`allowHosts`,{enumerable:!0,configurable:!1,writable:!1,value:Object.freeze([`*`])}),defineProperty(t,`name`,{enumerable:!0,configurable:!1,writable:!1,value:String((n=e.name)==null?`Unknown`:n)}),defineProperty(t,`workCode`,{enumerable:!0,writable:!0,value:(r=e.code)==null?createUuid():r}),defineProperty(t,`baseURL`,{enumerable:!0,writable:!0,value:`/`}),defineProperty(t,`model`,{enumerable:!0,configurable:!1,writable:!1,value:void 0}),defineProperty(t,`observers`,{enumerable:!0,configurable:!1,writable:!1,value:(()=>{let n={};return defineProperty(n,`work`,{enumerable:!1,configurable:!1,writable:!1,value:t}),defineProperty(n,`index`,{enumerable:!0,configurable:!1,writable:!1,value:0}),defineProperty(n,`panoIndex`,{enumerable:!0,configurable:!1,writable:!1,value:0}),defineProperty(n,`panoId`,{enumerable:!0,configurable:!1,writable:!1,value:panoStringify({workCode:t.workCode,panoIndex:0})}),defineProperty(n,`floorIndex`,{enumerable:!0,configurable:!1,writable:!1,value:0}),defineProperty(n,`derivedId`,{enumerable:!0,configurable:!1,writable:!1,value:void 0}),defineProperty(n,`derivedIdStr`,{enumerable:!0,configurable:!1,writable:!1,value:void 0}),defineProperty(n,`active`,{enumerable:!0,configurable:!1,writable:!1,value:!0}),defineProperty(n,`loadable`,{enumerable:!0,configurable:!1,writable:!1,value:!1}),defineProperty(n,`position`,{enumerable:!0,configurable:!1,writable:!1,value:new three.Vector3(0,1.5,0)}),defineProperty(n,`standingPosition`,{enumerable:!0,configurable:!1,writable:!1,value:new three.Vector3(0,0,0)}),defineProperty(n,`quaternion`,{enumerable:!0,configurable:!1,writable:!1,value:new three.Quaternion(0,1,0,0)}),defineProperty(n,`matrix`,{enumerable:!0,configurable:!1,writable:!1,value:new three.Matrix4().compose(n.position,n.quaternion,PANO_TEXTURE_SCALE)}),defineProperty(n,`accessibleNodes`,{enumerable:!0,configurable:!1,writable:!1,value:Object.freeze([])}),defineProperty(n,`visibleNodes`,{enumerable:!0,configurable:!1,writable:!1,value:n.accessibleNodes}),defineProperty(n,`images`,{enumerable:!0,configurable:!1,writable:!1,value:(()=>{let n={};defineProperty(n,`work`,{enumerable:!1,configurable:!1,writable:!1,value:t});for(let t of FACE_ORDER$1)defineProperty(n,t,{enumerable:!0,configurable:!1,writable:!1,value:e[t]});return defineProperty(n,`sizeList`,{enumerable:!0,configurable:!1,writable:!1,value:Object.freeze([e.size])}),defineProperty(n,`tiles`,{enumerable:!0,configurable:!1,writable:!1,value:(()=>{let e=getImageSizeFromURL(n.front);if(!e)return;let r=n.sizeList.slice();if(r[0]){let e=getTileLevel(r[0]);if(e)for(let t=e-1;t>=0;t--)r.unshift(512*Math.pow(2,t))}if(r.length<=0)return;let o=[];for(let s of r){let r=getTileLevel(s);if(typeof r!=`number`)continue;let c={};if(defineProperty(c,`work`,{enumerable:!1,configurable:!1,writable:!1,value:t}),defineProperty(c,`level`,{enumerable:!0,configurable:!1,writable:!1,value:r}),s>e){defineProperty(c,`size`,{enumerable:!0,configurable:!1,writable:!1,value:s}),defineProperty(c,`scale`,{enumerable:!0,configurable:!1,writable:!1,value:1});for(let e of FACE_ORDER$1)defineProperty(c,e,{enumerable:!0,configurable:!1,writable:!1,value:replaceImageSize(n[e],s)})}else{defineProperty(c,`size`,{enumerable:!0,configurable:!1,writable:!1,value:e}),defineProperty(c,`scale`,{enumerable:!0,configurable:!1,writable:!1,value:s/e});for(let e of FACE_ORDER$1)defineProperty(c,e,{enumerable:!0,configurable:!1,writable:!1,value:n[e]})}o.push(c)}return o=sortTile(o),Object.freeze(o)})()}),defineProperty(n,`video`,{enumerable:!0,configurable:!1,writable:!1,value:void 0}),n})()}),Object.freeze([n])})()}),defineProperty(t,`initial`,{enumerable:!0,configurable:!1,writable:!1,value:(()=>{let e={};return defineProperty(e,`work`,{enumerable:!1,configurable:!1,writable:!1,value:t}),defineProperty(e,`mode`,{enumerable:!0,writable:!0,value:`Panorama`}),defineProperty(e,`panoIndex`,{enumerable:!0,writable:!0,value:0}),e})()}),t}var workVerifySet=new WeakSet,Work=class{constructor(e,t){this.observerBox=new three.Box3,this.observerBox=new three.Box3,this.transform=new three.Matrix4,this.shortPath=!1,this.jsonp=!1;let n;if(n=e===null?parseNull(e,this):typeof e==`object`&&typeof e.size==`number`&&typeof e.up==`string`&&typeof e.down==`string`&&typeof e.right==`string`&&typeof e.left==`string`&&typeof e.front==`string`&&typeof e.back==`string`?parsePano(e,this):parse(e,this),n instanceof Error)throw Error(`[PARSE FAILED]: `+n.message+`
|
|
938
|
+
`,uniforms:{diffuse:{value:new three.Color},opacity:{value:1},displacementScalar:{value:0}}};function createPipeBufferGeometry(e,t,n,r){let o=new Float32Array((n+1)*(r+1)*3),s=new Float32Array((n+1)*(r+1)*3),c=new Float32Array((n+1)*(r+1)*2),l=new Uint32Array(n*r*6),u=e.computeFrenetFrames(n),d=new three.Vector3,f=new three.Vector3,p=new three.Vector2,m=new three.Vector3;for(let l=0;l<=n;l++){m=e.getPointAt(l/n,m);let h=u.normals[l],g=u.binormals[l];for(let e=0;e<=r;e++){let u=l*(r+1)+e,_=e/r*Math.PI*2,v=Math.sin(_),y=-Math.cos(_);f.x=y*h.x+v*g.x,f.y=y*h.y+v*g.y,f.z=y*h.z+v*g.z,f.normalize(),f.toArray(s,u*3),d.x=m.x+t*f.x,d.y=m.y+t*f.y,d.z=m.z+t*f.z,d.toArray(o,u*3),p.x=l/n,p.y=e/r,p.toArray(c,u*2)}}for(let e=0;e<n;e++)for(let t=0;t<r;t++){let n=(e*r+t)*6,o=(r+1)*e+t,s=(r+1)*(e+1)+t,c=(r+1)*(e+1)+(t+1),u=(r+1)*e+(t+1);l[n]=o,l[n+1]=s,l[n+2]=u,l[n+3]=s,l[n+4]=c,l[n+5]=u}let h=new three.BufferGeometry;return h.setIndex(new three.BufferAttribute(l,1)),h.setAttribute(`position`,new three.BufferAttribute(o,3)),h.setAttribute(`normal`,new three.BufferAttribute(s,3)),h.setAttribute(`uv`,new three.BufferAttribute(c,2)),h}function parseTrajectoryObject(e,t){let n=new three.Color(0).convertSRGBToLinear(),r=new three.Color(52949).convertSRGBToLinear(),o=new three.Color(3370495).convertSRGBToLinear(),s=new three.Color(16777215).convertSRGBToLinear(),c=0,l=new three.CurvePath,u=e.length;for(let t=3;t<u;t+=3){let n=new three.Vector3().fromArray(e,t-3),r=new three.Vector3().fromArray(e,t);c+=n.distanceTo(r);let o=new three.LineCurve3(n,r);l.add(o)}let d=createPipeBufferGeometry(l,.03,Math.ceil(c*100),6);d.clearGroups(),d.addGroup(0,d.index?d.index.count:d.attributes.position.count,0),d.addGroup(0,d.index?d.index.count:d.attributes.position.count,1),d.addGroup(0,d.index?d.index.count:d.attributes.position.count,2);let f=new three.ShaderMaterial({vertexShader:TRAJECTOR_PIPE_SHADER.vertexShader,fragmentShader:TRAJECTOR_PIPE_SHADER.fragmentShader,uniforms:three.UniformsUtils.clone(TRAJECTOR_PIPE_SHADER.uniforms),side:three.BackSide});f.uniforms.totalLength.value=c,f.uniforms.diffuse.value=n,f.uniforms.diffuse2.value=n,f.uniforms.opacity.value=.5,f.transparent=!0;let p=new three.ShaderMaterial({vertexShader:TRAJECTOR_PIPE_SHADER.vertexShader,fragmentShader:TRAJECTOR_PIPE_SHADER.fragmentShader,uniforms:three.UniformsUtils.clone(TRAJECTOR_PIPE_SHADER.uniforms),side:three.BackSide});p.uniforms.totalLength.value=c,p.uniforms.displacementScalar.value=-.01,p.uniforms.diffuse.value=r,p.uniforms.diffuse2.value=o;let m=new three.ShaderMaterial({vertexShader:TRAJECTOR_PIPE_SHADER.vertexShader,fragmentShader:TRAJECTOR_PIPE_SHADER.fragmentShader,uniforms:three.UniformsUtils.clone(TRAJECTOR_PIPE_SHADER.uniforms),side:three.DoubleSide});m.uniforms.totalLength.value=c,m.uniforms.displacementScalar.value=-.026,m.uniforms.dashSize.value=new three.Vector2(.06,.09),m.uniforms.diffuse.value=s,m.uniforms.diffuse2.value=s;let h=new three.Mesh(d,[f,p,m]),g=.08,_=24,v=new three.SphereBufferGeometry(.08,24,24);v.clearGroups(),v.addGroup(0,d.index?d.index.count:d.attributes.position.count,0),v.addGroup(0,d.index?d.index.count:d.attributes.position.count,1);let y=new three.ShaderMaterial({vertexShader:TRAJECTOR_SPHERE_SHADER.vertexShader,fragmentShader:TRAJECTOR_SPHERE_SHADER.fragmentShader,uniforms:three.UniformsUtils.clone(TRAJECTOR_SPHERE_SHADER.uniforms),side:three.BackSide});y.uniforms.diffuse.value=n,y.uniforms.opacity.value=.5,y.transparent=!0;let b=new three.ShaderMaterial({vertexShader:TRAJECTOR_SPHERE_SHADER.vertexShader,fragmentShader:TRAJECTOR_SPHERE_SHADER.fragmentShader,uniforms:three.UniformsUtils.clone(TRAJECTOR_SPHERE_SHADER.uniforms),side:three.FrontSide});b.uniforms.displacementScalar.value=-.01,b.uniforms.diffuse.value=r;let S=new three.Mesh(v,[y,b]);S.position.fromArray(e,0),h.add(S);let C=new three.ShaderMaterial({vertexShader:TRAJECTOR_SPHERE_SHADER.vertexShader,fragmentShader:TRAJECTOR_SPHERE_SHADER.fragmentShader,uniforms:three.UniformsUtils.clone(TRAJECTOR_SPHERE_SHADER.uniforms),side:three.FrontSide});C.uniforms.displacementScalar.value=-.01,C.uniforms.diffuse.value=o;let w=new three.Mesh(v,[y,C]);return w.position.fromArray(e,e.length-3),h.add(w),{scene:h,dispose:()=>{d.dispose(),f.dispose(),p.dispose(),m.dispose(),v.dispose(),y.dispose(),b.dispose(),C.dispose()}}}function loadTrajectory(e,t){let n=e.name,r=imageURL(appendSearch(e.content.uri,t.search),{key:`model.0`});return e.content.loadState=`LOADING`,e.content.loadStateUpdateTime=now(),loadPly(r,{type:`geometry`,customPropertyMapping:{time:{itemType:`uint32`,itemNames:[`time_milisec`]}},fetcher:t.fetcher}).then(t=>{var o,s,c,l;let u=(s=(o=t.scene.attributes)==null?void 0:o.time.array)==null?[]:s,d=(l=(c=t.scene.attributes)==null?void 0:c.position.array)==null?[]:l,f=t.byteLength,p=t.memoryUsage,m=parseTrajectoryObject(d,u);m.scene.applyMatrix4(e.transform),m.scene.updateWorldMatrix(!1,!0),m.scene.matrixAutoUpdate=!1;let h=new TrajectoryNode(n,m.scene);return e.content.data={uri:r,byteLength:f,memoryUsage:p,positionArray:d,timeArray:u,object:h},e.content.byteLength=f,e.content.memoryUsage=p,e.content.loadState=`READY`,e.content.loadStateUpdateTime=now(),e}).catch(t=>(e.content.data=void 0,e.content.loadState=`FAILED`,e.content.loadStateUpdateTime=now(),t instanceof NetworkResponseError&&t.httpStatus===0||t instanceof NetworkTimeoutError||t instanceof NetworkProxyError?e.content.loadfailRetryDelay=clamp$1(e.content.loadfailRetryDelay+RETRY_DELAY_STEP,RETRY_DELAY_STEP,MAX_RETRY_DELAY):e.content.loadfailRetryDelay=1/0,Promise.reject(t)))}function unloadTrajectory(e){e.content&&(e.content.data&&e.content.data.object.dispose(),e.content.data=void 0,e.content.loadState=`UNLOADED`,e.content.loadProgress=0,e.content.loadStateUpdateTime=now(),e.content.byteLength=0,e.content.memoryUsage=0)}var scratchVector3$7=new three.Vector3,scratchMatrix3=new three.Matrix3,scratchMatrix4$3=new three.Matrix4,a=6378137,invF=298.257223563;function ecefToLla(e){let t=a-a/invF,n=(a*a-t*t)/(a*a),r=Math.sqrt(e.x*e.x+e.y*e.y),o=1e-12,s=1e3,c=0,l=Math.atan2(e.z,r),u=0;for(;c++<1e3;){let t=Math.sin(l),o=a/Math.sqrt(1-n*t*t);u=r/Math.cos(l)-o;let s=Math.atan2(e.z/(o*(1-n)+u),r/(o+u));if(isNaN(s)||Math.abs(s-l)<1e-12)break;l=s}return e.set(l,Math.atan2(e.y,e.x),u)}function llaToEcef(e){let{x:t,y:n,z:r}=e,o=a-a/invF,s=(a*a-o*o)/(a*a),c=Math.sin(t),l=Math.cos(t),u=Math.sin(n),d=Math.cos(n),f=a/Math.sqrt(1-s*c*c),p=(f+r)*l*d,m=(f+r)*l*u,h=(o*o/(a*a)*f+r)*c;return e.set(p,m,h)}function getEcefToEnuMatrix(e,t){let{x:n,y:r,z:o}=ecefToLla(scratchVector3$7.copy(e)),s=Math.sin(n),c=Math.sin(r),l=Math.cos(n),u=Math.cos(r);t.fromArray([-c,-s*u,l*u,0,+u,-s*c,l*c,0,0,l,s,0,0,0,0,1]);let d=scratchMatrix3.setFromMatrix4(t),f=scratchVector3$7.copy(e).applyMatrix3(d).multiplyScalar(-1);t.setPosition(f);let p=scratchMatrix4$3.fromArray([1,0,0,0,0,1,0,0,0,0,1,0,0,0,o,1]);return t.premultiply(p),t}var ROTATE_X_90_MATRIX=new three.Matrix4().fromArray([1,0,0,0,0,0,-1,0,0,1,0,0,0,0,0,1]),ROTATE_X_90_MATRIX_INVERSE=new three.Matrix4().fromArray([1,0,0,0,0,0,1,0,0,-1,0,0,0,0,0,1]),enuToLocalMatrix=new three.Matrix4().copy(ROTATE_X_90_MATRIX),localToEnuMatrix=new three.Matrix4().copy(ROTATE_X_90_MATRIX_INVERSE);function getRecommendTile3dProps(e,t={}){var n,r,o;let s,c,l;if(typeof e.tileset.rootMeta.creationTime==`string`)if(typeof e.tileset.rootMeta.numTotalPoints==`number`&&e.tileset.rootMeta.numTotalPoints>0){l=4,t.powerPreference===`high`&&(l=2),s=l/1.6;let u=0;if(((n=e.tileset.rootMeta.taskParameters)==null?void 0:n.point_homogenization)===`1`&&(r=e.tileset.rootMeta.taskParameters)!=null&&r.homo_point_density){let t=Number((o=e.tileset.rootMeta.taskParameters)==null?void 0:o.homo_point_density);isFinite(t)&&!isNaN(t)&&(u=t)}u<=0&&(u=.02),c=u*1.4}else l=5,t.powerPreference===`high`&&(l=4),s=0,c=.03;else l=6,s=0,c=.03,e.name===`aerophoto`?(l=12,t.powerPreference===`high`&&(l=10)):e.tileset.asset.extras&&typeof e.tileset.asset.extras.name==`string`&&/^matterport\b/i.test(e.tileset.asset.extras.name)&&(l=5,t.powerPreference===`high`&&(l=4));return{pointScale:c,pointMinPixel:s,maxScreenSpaceError:l}}var scratchVector3$6=new three.Vector3,scratchSphereBoundingVolume=new SphereBoundingVolume,scratchBoxBoundingVolume=new BoxBoundingVolume,parameterVersionMap=new WeakMap,tileVersionMap=new WeakMap,trajectoryVersionMap=new WeakMap,STENCIL_CONSTANT={TILE_MASK:128,SKIP_LOD_MASK:112,SKIP_LOD_BIT_SHIFT:4,CLASSIFICATION_MASK:15},SKIP_BACKFACE_MATERIAL=(()=>{let e=new three.MeshBasicMaterial;return e.side=three.BackSide,e.color.setHex(16711935),e.colorWrite=!1,e.stencilWrite=!0,e.polygonOffset=!0,e.polygonOffsetFactor=2,e.polygonOffsetUnits=2,e.stencilRef=STENCIL_CONSTANT.TILE_MASK,e.stencilFunc=three.AlwaysStencilFunc,e.stencilFuncMask=STENCIL_CONSTANT.TILE_MASK,e.stencilZPass=three.ReplaceStencilOp,e.stencilWriteMask=STENCIL_CONSTANT.TILE_MASK,e})(),SKIP_BACKFACE_TRANSPARENT_MATERIAL=(()=>{let e=new three.MeshBasicMaterial;return e.visible=!1,e})(),CLEAR_STENCIL_GEOMETRY=new three.BufferGeometry,CLEAR_STENCIL_MATERIAL=new three.MeshBasicMaterial;function cloneSkipBackfaceObject(e){let t;t=e instanceof three.Mesh?new three.Mesh(e.geometry,Array.isArray(e.material)?e.material.map(e=>e.transparent?SKIP_BACKFACE_TRANSPARENT_MATERIAL:SKIP_BACKFACE_MATERIAL):e.material&&e.material.transparent?SKIP_BACKFACE_TRANSPARENT_MATERIAL:SKIP_BACKFACE_MATERIAL):e instanceof three.Group?new three.Group:new three.Object3D,t.position.copy(e.position),t.quaternion.copy(e.quaternion),t.scale.copy(e.scale),t.matrix.compose(e.position,e.quaternion,e.scale),t.matrixAutoUpdate=!1,t.frustumCulled=e.frustumCulled,t.visible=e.visible;for(let n of e.children)t.add(cloneSkipBackfaceObject(n));return t}var Tile3D=class extends three.Object3D{constructor(e,t){var n,r;super(),this.parameter=new Parameter,this.renderObjects=[],this.backfaceObjects=[],this.tileObjects=[],this.frameNumber=0,this.error=(n=t.error)==null?null:n,this.name=t.name,this.type=t.type,this.upAxis=t.upAxis,this.light=t.light,this.fetcher=t.fetcher,this.search=(r=t.search)==null?``:r,this.groundHeight=t.groundHeight,this.coordinateSystem=t.coordinateSystem,this.boundingBox=new three.Box3,this.autoRefine=!0,this.refined=!1,this.refineProgress=[0,0],this.loaded=!1,this.disposed=!1,this.clearStencilObject=new three.Mesh(CLEAR_STENCIL_GEOMETRY,CLEAR_STENCIL_MATERIAL),this.clearStencilObject.frustumCulled=!1,this.clearStencilObject.onAfterRender=e=>e.clearStencil(),this.tileset=new Tileset(e,{tileLoader:e=>this.loadContent(e),tileUnloader:e=>this.unloadContent(e),onTileLoad:e=>{this.onTileLoad&&this.onTileLoad(e)},onTileUnload:e=>{this.onTileUnload&&this.onTileUnload(e)},onTileError:(e,t)=>{this.onError&&this.onError(Object.assign(t,{tile:e})),console.error(`Tile error`,e.id,t)},trajectoryLoader:e=>this.loadTrajectory(e),trajectoryUnloader:e=>this.unloadTrajectory(e),onTrajectoryLoad:()=>{},onTrajectoryUnload:e=>{},onTrajectoryError:(e,t)=>{this.onError&&this.onError(Object.assign(t,{error:t})),console.error(`Trajectory error`,e,t)}}),this.tileset.root.boundingVolume&&this.tileset.root.boundingVolume.getBoundingBox(this.boundingBox)}get viewerRequestVolume(){return this.tileset.root.viewerRequestVolume}set viewerRequestVolume(e){this.tileset.root.viewerRequestVolume=e}get tiles(){return this.tileset.selectedTiles}get trajectories(){return this.tileset.trajectories}getRecommendProps(e={}){return getRecommendTile3dProps(this,e)}loadContent(e){return loadTileContent(e,{light:this.light,fetcher:this.fetcher,search:this.search,renderer:this.renderer}).then(t=>{if(e.type===`SCENEGRAPH`){if(this.disposed||!e.content)unloadTileContent(e);else if(e.content.data)if(e.content.data.type===`spz`){let t=e.content.data.object.children[0].boundingBox;this.boundingBox.union(t)}else this.boundingBox.expandByObject(e.content.data.object)}})}unloadContent(e){return unloadTileContent(e),Promise.resolve()}loadAllTilesets(){let e=t=>{let n=[];return this.tileset.root.traverse(e=>{var t;e.type===`TILESET`&&((t=e.content)==null?void 0:t.loadState)!==`READY`&&n.push(e)}),Promise.all(n.map(t=>this.loadContent(t).then(()=>e(t)))).then(()=>{})};return e(this.tileset.root)}loadTrajectory(e){return loadTrajectory(e,{fetcher:this.fetcher,search:this.search,renderer:this.renderer}).then(e=>{this.disposed&&unloadTrajectory(e)})}unloadTrajectory(e){return unloadTrajectory(e),Promise.resolve()}intersectRaycaster(e,t){var n,r;let o=t==null?[]:t,s=[this.tileset.root],c=this.tileset.transform,l=(r=(n=e.params.Points)==null?void 0:n.threshold)==null?0:r,u=e.sortByDistance;e.sortByDistance=!1;let d,f=1/0;for(;d=s.pop();){let t;if(d.boundingVolume){let n;n=d.boundingVolume instanceof BoxBoundingVolume?scratchBoxBoundingVolume.copy(d.boundingVolume):d.boundingVolume instanceof SphereBoundingVolume?scratchSphereBoundingVolume.copy(d.boundingVolume):d.boundingVolume.clone(),n.applyMatrix4(c),t=n.intersectRay(e.ray,l,f)}else t=!0;if(t){for(let e=0,t=d.children.length;e<t;e++)s.push(d.children[e]);if(d.selected&&d.content&&d.content.data&&d.content.data.object.visible){let t=e.hitFilter;if(e.hitFilter=n=>{var r;return Object.assign(n,{model:(r=this.parent)==null?void 0:r,viewLayer:this,tile:d}),t?t.call(e,n):!0},d.content.data.object.intersectRaycaster(e,o),e.hitFilter=t,e.firstHitOnly){let e=o[0];e&&f>e.distance&&(f=e.distance)}}}}return e.sortByDistance=u,sortIntersects(o,e.sortByDistance,e.firstHitOnly),o}update(e,t,n,r){var o,s,c,l,u,d,f;this.renderer=e,this.frameNumber++;let p=!1,m=this.parameter.resolveValue(n.parameter,r.parameter);parameterVersionMap.get(this)!==m.version&&(parameterVersionMap.set(this,m.version),p=!0);let h=(l=this.visible&&((o=this.parent)==null?void 0:o.visible)&&((c=(s=this.parent)==null?void 0:s.parent)==null?void 0:c.visible))==null?!1:l,g=m.maxLevelOfDetail;g=Math.max(g,0);let _=Math.min(m.minLevelOfDetail,g);(!h||!this.loaded||!n.loaded)&&(g=Math.max(_,0));let v=m.maxMemoryUsage;h||(v=Math.min(0,v));let y=m.minGeometricError,b=m.maxRequests,S=m.memoryAdjustedScreenSpaceError;h||(S=!1);let C=t.controllerMode;(C===`Panorama`||C===`VRPanorama`||C===`XRPanorama`)&&(m.modelAlpha<.1&&(y=m.panoramaMinGeometricError,S=!1),m.progress>=.01&&m.progress<=.99&&(b=0));let w=m.maxGeometricError;w=Math.max(y,w);let T={time:t.time,camera:{type:t.type,position:new three.Vector3().copy(t.position),direction:t.getDirection(new three.Vector3),up:new three.Vector3().copy(t.up).applyQuaternion(t.quaternion),projectionMatrix:t.projectionMatrix.clone(),visible:h&&t.visible,refine:t.refineModel},height:t.resolution.height,pixelRatio:t.pixelRatio,frameNumber:this.frameNumber,sseDenominator:2*Math.tan(.5*t.fov/180*Math.PI),cullingVolume:new CullingVolume().setFromCamera(t),minLevelOfDetail:_,maxLevelOfDetail:g,minGeometricError:y,maxGeometricError:w,skipLevelOfDetail:m.skipLevelOfDetail,mostDetail:m.mostDetail,loadSiblings:m.loadSiblings,cameraCulling:m.cameraCulling,maxMemoryUsage:v,maxRequests:b,requestOrder:m.requestOrder,maxScreenSpaceError:m.maxScreenSpaceError,memoryAdjustedScreenSpaceError:S},E=m.cacheCameras.map(e=>(e.updateProjectionMatrix(),Object.assign(Object.assign({},T),{camera:{type:t.type,position:new three.Vector3().copy(e.position),direction:e.getWorldDirection(new three.Vector3),up:new three.Vector3().copy(e.up),projectionMatrix:e.projectionMatrix.clone(),visible:e.visible,refine:!0},cullingVolume:new CullingVolume().setFromCamera(e)})));this.updateWorldMatrix(!0,!1),this.tileset.transform.equals(this.matrixWorld)||(this.tileset.transform.copy(this.matrixWorld),p=!0);let D=!this.autoRefine;if(D===!1&&m.progress>=.01&&m.progress<=.99){let e=new three.Vector3;m.pano0&&e.setFromMatrixPosition(m.pano0.matrix);let t=e.clone();m.pano1&&t.setFromMatrixPosition(m.pano1.matrix),e.distanceTo(t)<10&&(D=!0)}if(D||this.tileset.update(T,E),this.refined=!0,this.refineProgress[0]=0,this.refineProgress[1]=0,this.tileset.needsRefinedTiles.forEach(e=>{if(this.refineProgress[1]++,e.content){let t=e.content.loadState;if(t===`UNLOADED`||t===`LOADING`){this.refined=!1;return}}this.refineProgress[0]++}),this.loaded===!1&&this.autoRefine){this.loaded=!0;let e=!1;this.tileset.needsRefinedTiles.forEach(t=>{if(this.loaded!==!1&&t.content&&(t.state.visible&&(e=!0),m.minLevelOfDetail>=0)){if(T.skipLevelOfDetail){if(t.state.finalResolution){let e=t.state.ancestorWithContentAvailable,n=(e&&e.content?e.content:t.content).loadState;(n===`UNLOADED`||n===`LOADING`)&&(this.loaded=!1)}}else if(t.state.visible&&t.levelOfContent<=0){let e=t.content.loadState;(e===`UNLOADED`||e===`LOADING`)&&(this.loaded=!1)}}}),e&&this.tileset.selectedTiles.length===0&&this.tileset.frameNumber<500&&(this.loaded=!1),this.loaded===!0&&(this.refined=!1,this.refineProgress[1]++)}this.renderObjects.length=0,this.backfaceObjects.length=0,this.tileObjects.length=0;for(let e=this.children.length-1;e>=0;e--)this.remove(this.children[e]);T.skipLevelOfDetail||this.tileset.selectedTiles.sort((e,t)=>e.floor===t.floor?e.levelOfContent===t.levelOfContent?e.state.distanceToCamera===t.state.distanceToCamera?e.state.centerZDepth-t.state.centerZDepth:e.state.distanceToCamera-t.state.distanceToCamera:t.levelOfContent-e.levelOfContent:e.floor-t.floor);let O=[];for(let r of this.tileset.selectedTiles){let o=(d=(u=r.content)==null?void 0:u.data)==null?void 0:d.object;if(!o)continue;let s=o.update(e,t,n,this,r,m);if(O.push(r.id),s&&(p=!0),this.tileset.hasMixedContent&&T.skipLevelOfDetail){if(!r.state.finalResolution){let e=cloneSkipBackfaceObject(o);e.name=`skipBackface:`+o.name,this.backfaceObjects.push(e)}let e=r.state.selectionDepth,t=STENCIL_CONSTANT.TILE_MASK|e<<STENCIL_CONSTANT.SKIP_LOD_BIT_SHIFT,n=three.GreaterEqualStencilFunc,s=STENCIL_CONSTANT.SKIP_LOD_MASK,c=three.ReplaceStencilOp,l=STENCIL_CONSTANT.TILE_MASK|STENCIL_CONSTANT.SKIP_LOD_MASK;for(let e of o.materials)e.stencilWrite=!0,e.stencilRef=t,e.stencilFunc=n,e.stencilFuncMask=s,e.stencilZPass=c,e.stencilWriteMask=l}else for(let e of o.materials)e.stencilWrite=!1,e.stencilRef=STENCIL_CONSTANT.TILE_MASK,e.stencilFunc=three.AlwaysStencilFunc,e.stencilFuncMask=STENCIL_CONSTANT.TILE_MASK,e.stencilZPass=three.ReplaceStencilOp,e.stencilWriteMask=STENCIL_CONSTANT.TILE_MASK;this.tileObjects.push(o)}let k=O.toString();if(tileVersionMap.get(this)!==k&&(tileVersionMap.set(this,k),p=!0),T.skipLevelOfDetail&&this.backfaceObjects.length)for(let e=0;e<this.backfaceObjects.length;e++)this.renderObjects.push(this.backfaceObjects[e]);if(this.tileObjects.length)for(let e=0;e<this.tileObjects.length;e++)this.renderObjects.push(this.tileObjects[e]);T.skipLevelOfDetail&&this.renderObjects.push(this.clearStencilObject);let A=[];for(let r of this.tileset.selectedTrajectories){let o=(f=r.content.data)==null?void 0:f.object;if(!o)continue;let s=o.update(e,t,n,this,r,m);A.push(r.id),s&&(p=!0),this.renderObjects.push(o)}let j=A.toString();if(trajectoryVersionMap.get(this)!==j&&(trajectoryVersionMap.set(this,j),p=!0),this.parent){let e=this.parent.children.length+1,t=(Math.min(0,this.parent.children.indexOf(this))-e)*1e4+1;for(let e=0;e<this.renderObjects.length;e++){let n=this.renderObjects[e],r=e+t;n.traverse(e=>{(e instanceof three.Mesh||e instanceof three.Line||e instanceof three.Points)&&(e.renderOrder=r)})}}if(this.loaded)for(let e=0;e<this.renderObjects.length;e++)this.add(this.renderObjects[e]);return p}dispose(){this.disposed=!0,this.tileset.reset(),this.tileset.root.children.length=0,/^blob\:/.test(this.tileset.id)&&URL.revokeObjectURL(this.tileset.id);for(let e=this.children.length-1;e>=0;e--)this.remove(this.children[e]);this.refined=!1,this.loaded=!1,this.refineProgress[0]=this.refineProgress[1]=0,this.error=null,this.onError=void 0,this.renderer=void 0}get model(){return this.parent}get scene(){return this}get viewLayer(){return this}localToEnu(e){return e.applyMatrix4(localToEnuMatrix)}enuToLocal(e){return e.applyMatrix4(enuToLocalMatrix)}enuToEcef(e){return e.applyMatrix4(this.coordinateSystem.enuToEcefMatrix)}ecefToEnu(e){return e.applyMatrix4(this.coordinateSystem.ecefToEnuMatrix)}localToEcef(e){return this.enuToEcef(this.localToEnu(e))}ecefToLocal(e){return this.enuToLocal(this.ecefToEnu(e))}localToLla(e){return ecefToLla(this.enuToEcef(this.localToEnu(e)))}llaToLocal(e){return this.enuToLocal(this.ecefToEnu(llaToEcef(e)))}worldToEnu(e){return this.localToEnu(this.worldToLocal(e))}enuToWorld(e){return this.localToWorld(this.enuToLocal(e))}worldToEcef(e){return this.localToEcef(this.worldToLocal(e))}ecefToWorld(e){return this.localToWorld(this.ecefToLocal(e))}worldToLla(e){return this.localToLla(this.worldToLocal(e))}llaToWorld(e){return this.localToWorld(this.llaToLocal(e))}get coordinates(){scratchVector3$6.setScalar(0);let{x:e,y:t}=this.localToLla(scratchVector3$6);return[e,t].map(e=>(e/Math.PI*180).toFixed(6)).join(`,`)}getTransformMatrix4(e=new three.Matrix4){return e.copy(this.coordinateSystem.ecefToEnuMatrix),e.premultiply(enuToLocalMatrix),e.premultiply(this.matrixWorld),e}coordinatesToWorldPoint(e){let t=new three.Vector3(e.latitude,e.longitude,e.altitude);return this.llaToWorld(t)}worldPointToCoordinates(e){return scratchVector3$6.copy(e),this.worldToLla(scratchVector3$6),{latitude:scratchVector3$6.x,longitude:scratchVector3$6.y,altitude:scratchVector3$6.z}}resetBrightness(){this.parameter.reset(`brightness`)}get minLevelOfDetail(){let e=[];return this.parent&&this.parent.parameter instanceof Parameter&&(e.unshift(this.parent.parameter),this.parent.parent&&this.parent.parent.parameter instanceof Parameter&&e.unshift(this.parent.parent.parameter)),this.parameter.resolveValue(...e).minLevelOfDetail}set minLevelOfDetail(e){this.parameter.set(`minLevelOfDetail`,e)}get maxLevelOfDetail(){let e=[];return this.parent&&this.parent.parameter instanceof Parameter&&(e.unshift(this.parent.parameter),this.parent.parent&&this.parent.parent.parameter instanceof Parameter&&e.unshift(this.parent.parent.parameter)),this.parameter.resolveValue(...e).maxLevelOfDetail}set maxLevelOfDetail(e){this.parameter.set(`maxLevelOfDetail`,e)}get minGeometricError(){let e=[];return this.parent&&this.parent.parameter instanceof Parameter&&(e.unshift(this.parent.parameter),this.parent.parent&&this.parent.parent.parameter instanceof Parameter&&e.unshift(this.parent.parent.parameter)),this.parameter.resolveValue(...e).minGeometricError}set minGeometricError(e){this.parameter.set(`minGeometricError`,e)}get maxGeometricError(){let e=[];return this.parent&&this.parent.parameter instanceof Parameter&&(e.unshift(this.parent.parameter),this.parent.parent&&this.parent.parent.parameter instanceof Parameter&&e.unshift(this.parent.parent.parameter)),this.parameter.resolveValue(...e).maxGeometricError}set maxGeometricError(e){this.parameter.set(`maxGeometricError`,e)}get panoramaMinGeometricError(){let e=[];return this.parent&&this.parent.parameter instanceof Parameter&&(e.unshift(this.parent.parameter),this.parent.parent&&this.parent.parent.parameter instanceof Parameter&&e.unshift(this.parent.parent.parameter)),this.parameter.resolveValue(...e).panoramaMinGeometricError}set panoramaMinGeometricError(e){this.parameter.set(`panoramaMinGeometricError`,e)}get skipLevelOfDetail(){let e=[];return this.parent&&this.parent.parameter instanceof Parameter&&(e.unshift(this.parent.parameter),this.parent.parent&&this.parent.parent.parameter instanceof Parameter&&e.unshift(this.parent.parent.parameter)),this.parameter.resolveValue(...e).skipLevelOfDetail}set skipLevelOfDetail(e){this.parameter.set(`skipLevelOfDetail`,e)}get mostDetail(){let e=[];return this.parent&&this.parent.parameter instanceof Parameter&&(e.unshift(this.parent.parameter),this.parent.parent&&this.parent.parent.parameter instanceof Parameter&&e.unshift(this.parent.parent.parameter)),this.parameter.resolveValue(...e).mostDetail}set mostDetail(e){this.parameter.set(`mostDetail`,e)}get loadSiblings(){let e=[];return this.parent&&this.parent.parameter instanceof Parameter&&(e.unshift(this.parent.parameter),this.parent.parent&&this.parent.parent.parameter instanceof Parameter&&e.unshift(this.parent.parent.parameter)),this.parameter.resolveValue(...e).loadSiblings}set loadSiblings(e){this.parameter.set(`loadSiblings`,e)}get maxMemoryUsage(){let e=[];return this.parent&&this.parent.parameter instanceof Parameter&&(e.unshift(this.parent.parameter),this.parent.parent&&this.parent.parent.parameter instanceof Parameter&&e.unshift(this.parent.parent.parameter)),this.parameter.resolveValue(...e).maxMemoryUsage}set maxMemoryUsage(e){this.parameter.set(`maxMemoryUsage`,e)}get maxRequests(){let e=[];return this.parent&&this.parent.parameter instanceof Parameter&&(e.unshift(this.parent.parameter),this.parent.parent&&this.parent.parent.parameter instanceof Parameter&&e.unshift(this.parent.parent.parameter)),this.parameter.resolveValue(...e).maxRequests}set maxRequests(e){this.parameter.set(`maxRequests`,e)}get requestOrder(){let e=[];return this.parent&&this.parent.parameter instanceof Parameter&&(e.unshift(this.parent.parameter),this.parent.parent&&this.parent.parent.parameter instanceof Parameter&&e.unshift(this.parent.parent.parameter)),this.parameter.resolveValue(...e).requestOrder}set requestOrder(e){this.parameter.set(`requestOrder`,e)}get maxScreenSpaceError(){let e=[];return this.parent&&this.parent.parameter instanceof Parameter&&(e.unshift(this.parent.parameter),this.parent.parent&&this.parent.parent.parameter instanceof Parameter&&e.unshift(this.parent.parent.parameter)),this.parameter.resolveValue(...e).maxScreenSpaceError}set maxScreenSpaceError(e){this.parameter.set(`maxScreenSpaceError`,e)}},fetchers={};function getFetcher(e,t){let n=fetchers[e];if(n){let e=n.get(t);if(e)return e}throw Error(`fetcher workCode:${t.workCode} never registered.`)}function registerFetcher(e,t,n){let r=fetchers[e];r||(r=fetchers[e]=new WeakMap),r.has(t)||r.set(t,n)}var identityMatrix4=new three.Matrix4,scratchVector3$5=new three.Vector3,scratchMatrix4$2=new three.Matrix4;function getEcefToEnuMatrixFromUpAxis(e,t,n){switch(e){case`Z`:n.identity();break;case`WGS84`:case`GCJ02`:case`BD09`:getEcefToEnuMatrix(t,n);break;default:n.identity();break}return n}function loadViewLayer(e){var t;let[n,r]=e.tilesetUrl.split(`#`),o=(t=(r||n).split(`?`)[1])==null?``:t;return e.fetcher.ajax(e.tilesetUrl,{responseType:`text`}).catch(e=>({error:e,body:JSON.stringify({asset:{version:`0.0`},geometricError:0,root:{geometricError:0}})})).then(t=>{var n;let r=`error`in t?t.error:null,s=normalizeTilesetHeader(JSON.parse(t.body),e.tilesetUrl),{root:c,rootMeta:l={}}=s,u=e.upAxis;l.upAxis&&l.upAxis!==u&&(u=l.upAxis),`lodVersion`in s&&(u=`-Y`,`floorInfo`in s&&(s.properties=s.properties||{},s.properties.floorInfo=s.floorInfo.map(e=>({ground:-e.ground,height:e.height})),s.floorInfo=void 0),s.asset.tilesetVersion=String(s.lodVersion),s.lodVersion=void 0);let d=u,f=new three.Matrix4;d===`Y`?(d=`Z`,f.fromArray([1,0,0,0,0,0,1,0,0,-1,0,0,0,0,0,1])):d===`-Y`&&(d=`Z`,f.fromArray([1,0,0,0,0,0,-1,0,0,1,0,0,0,0,0,1]));let p=c.boundingVolume?makeBoundingVolume(c.boundingVolume):void 0;p&&c.transform&&p.applyMatrix4(scratchMatrix4$2.fromArray(c.transform));let m=null,h=new three.Matrix4,g=new three.Matrix4;return l.coordinate?(m=l.coordinate.ground_height,h.fromArray(l.coordinate.pose_ecef_to_enu),g.fromArray(l.coordinate.pose_enu_to_ecef)):(p?p.getCenter(scratchVector3$5):scratchVector3$5.setScalar(0),scratchVector3$5.applyMatrix4(f),getEcefToEnuMatrixFromUpAxis(d,scratchVector3$5,h),g.getInverse(h)),s.root={refine:(n=c.refine)==null?`REPLACE`:n,geometricError:c.geometricError,transform:scratchMatrix4$2.copy(f).premultiply(d===`Z`?identityMatrix4:h).premultiply(enuToLocalMatrix).toArray(),boundingVolume:p?p.toJson():void 0,children:[c]},new Tile3D(s,{name:e.name,type:e.type,upAxis:u,light:e.light,fetcher:e.fetcher,search:o,groundHeight:m,coordinateSystem:{enuToEcefMatrix:g,ecefToEnuMatrix:h},error:r})})}function loadViewLayers(e,t){var n;let r=e.layers.map(e=>({tilesetUrl:e.work.getURL(e.tileset),name:e.name,type:e.type,upAxis:e.upAxis,light:t.light,fetcher:t.fetcher}));if(e.file){let o=!1;for(let e of r)if(e.type===`mesh`){o=!0;break}if(o===!1){let o=getExtname(e.file)||`.at3d`,s=JSON.stringify({tilesetUrl:``,asset:{version:`0.0`},geometricError:0,root:{refine:`REPLACE`,geometricError:0,transform:[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],content:{uri:e.work.getURL(e.file)},extras:{[o.slice(1)]:{upAxis:e.upAxis,textureBaseUri:typeof e.textureBase==`string`?e.work.getURL(e.textureBase):void 0,textureArray:e.textures,textureOptions:(n=t.textureOptions)==null?{}:n}}},rootMeta:{coordinate:e.coordinate}});r.push({name:`fallback`,type:`mesh`,upAxis:`Z`,tilesetUrl:URL.createObjectURL(new Blob([s],{type:`application/json`})),fetcher:t.fetcher,light:t.light})}}let o=r.map(e=>loadViewLayer(e).then(e=>e));return Promise.all(o)}function createSimpleBoxBufferGeometry(e=1,t=1,n=1){let r=e/2,o=t/2,s=n/2,c=new Float32Array([-r,+o,+s,+r,+o,+s,+r,+o,-s,-r,+o,-s,-r,-o,+s,+r,-o,+s,+r,-o,-s,-r,-o,-s]),l=new Uint32Array([0,4,1,1,4,5,1,5,2,2,5,6,2,6,3,3,6,7,3,7,0,0,7,4,3,0,2,2,0,1,4,7,5,5,7,6]),u=new three.BufferGeometry;return u.setAttribute(`position`,new three.BufferAttribute(c,3)),u.setIndex(new three.BufferAttribute(l,1)),u.addGroup(0,u.index.count,0),u.computeBoundingBox(),u.computeBoundingSphere(),u}function mergeBufferGeometries(e,t){for(var n=e[0].index!==null,r=new Set(Object.keys(e[0].attributes)),o=new Set(Object.keys(e[0].morphAttributes)),s={},c={},l=new three.BufferGeometry,u=0,d=0;d<e.length;++d){var f=e[d];if(n!==(f.index!==null))return null;for(var p in f.attributes){if(!r.has(p))return null;s[p]===void 0&&(s[p]=[]),s[p].push(f.attributes[p])}for(var p in f.morphAttributes){if(!o.has(p))return null;c[p]===void 0&&(c[p]=[]),c[p].push(f.morphAttributes[p])}if(l.userData.mergedUserData=l.userData.mergedUserData||[],l.userData.mergedUserData.push(f.userData),t){var m;if(n)m=f.index.count;else if(f.attributes.position!==void 0)m=f.attributes.position.count;else return null;l.addGroup(u,m,d),u+=m}}if(n){for(var h=0,g=[],d=0;d<e.length;++d){for(var _=e[d].index,v=0;v<_.count;++v)g.push(_.getX(v)+h);h+=e[d].attributes.position.count}l.setIndex(g)}for(var p in s){var y=mergeBufferAttributes(s[p]);if(!y)return null;l.setAttribute(p,y)}for(var p in c){var b=c[p][0].length;if(b===0)break;l.morphAttributes=l.morphAttributes||{},l.morphAttributes[p]=[];for(var d=0;d<b;++d){for(var S=[],v=0;v<c[p].length;++v)S.push(c[p][v][d]);var C=mergeBufferAttributes(S);if(!C)return null;l.morphAttributes[p].push(C)}}return l}function mergeBufferAttributes(e){for(var t,n,r,o=0,s=0;s<e.length;++s){var c=e[s];if(c.isInterleavedBufferAttribute||(t===void 0&&(t=c.array.constructor),t!==c.array.constructor)||(n===void 0&&(n=c.itemSize),n!==c.itemSize)||(r===void 0&&(r=c.normalized),r!==c.normalized))return null;o+=c.array.length}for(var l=new t(o),u=0,s=0;s<e.length;++s)l.set(e[s].array,u),u+=e[s].array.length;return new three.BufferAttribute(l,n,r)}function mergeVertices(e,t=1e-4){t=Math.max(t,Number.EPSILON);for(var n={},r=e.getIndex(),o=e.getAttribute(`position`),s=r?r.count:o.count,c=0,l=Object.keys(e.attributes),u={},d={},f=[],p=[`getX`,`getY`,`getZ`,`getW`],m=0,h=l.length;m<h;m++){var g=l[m];u[g]=[];var _=e.morphAttributes[g];_&&(d[g]=Array(_.length).fill().map(()=>[]))}for(var v=Math.log10(1/t),y=Math.pow(10,v),m=0;m<s;m++){for(var b=r?r.getX(m):m,S=``,C=0,h=l.length;C<h;C++)for(var g=l[C],w=e.getAttribute(g),T=w.itemSize,E=0;E<T;E++)S+=`${~~(w[p[E]](b)*y)},`;if(S in n)f.push(n[S]);else{for(var C=0,h=l.length;C<h;C++)for(var g=l[C],w=e.getAttribute(g),_=e.morphAttributes[g],T=w.itemSize,D=u[g],O=d[g],E=0;E<T;E++){var k=p[E];if(D.push(w[k](b)),_)for(var A=0,j=_.length;A<j;A++)O[A].push(_[A][k](b))}n[S]=c,f.push(c),c++}}let M=e.clone();for(var m=0,h=l.length;m<h;m++){var g=l[m],N=e.getAttribute(g),P=new N.array.constructor(u[g]),w=new three.BufferAttribute(P,N.itemSize,N.normalized);if(M.setAttribute(g,w),g in d)for(var C=0;C<d[g].length;C++){var F=e.morphAttributes[g][C],P=new F.array.constructor(d[g][C]),I=new three.BufferAttribute(P,F.itemSize,F.normalized);M.morphAttributes[g][C]=I}}return M.setIndex(f),M}var scratchSphere$1=new three.Sphere,scratchMatrix4$1=new three.Matrix4,scratchMatrix4Inverse=new three.Matrix4;function getEdgesBySphere(e,t,n=30/180*Math.PI){let r=Math.cos(n),o=[];for(let n of e.children)n instanceof Tile3D&&n.tileset.selectedTiles.forEach(e=>{var n,s,c;let l=(s=(n=e.content)==null?void 0:n.data)==null?void 0:s.object;if(l&&l.visible){let e=[];if(l.traverseVisible(n=>{if(n instanceof three.Mesh){let r=getBvhTreeForMesh(n);if(r){scratchMatrix4$1.copy(n.matrixWorld),scratchMatrix4Inverse.getInverse(scratchMatrix4$1),scratchSphere$1.copy(t).applyMatrix4(scratchMatrix4Inverse);let o=r.trianglesInSphere(scratchSphere$1.center,scratchSphere$1.radius),s=new three.BufferGeometry;s.setAttribute(`position`,new three.BufferAttribute(o,3)),s.applyMatrix4(n.matrixWorld),s=mergeVertices(s,.01),e.push(s)}}}),e.length===0)return;let n=[`a`,`b`,`c`],s=mergeBufferGeometries(e,!1),u=s.getAttribute(`position`).array,d=((c=s.getIndex())==null?void 0:c.array)||[],f=[],p=[];for(let e=0,t=u.length;e<t;e+=3){let t=new three.Vector3(u[e],u[e+1],u[e+2]);f.push(t)}for(let e=0,t=d.length;e<t;e+=3){let t=d[e],n=d[e+1],r=d[e+2],o=new three.Vector3().crossVectors(f[n].clone().sub(f[t]),f[r].clone().sub(f[t])).normalize();p.push({a:t,b:n,c:r,normal:o})}let m={};for(let e=0,t=p.length;e<t;e++){let t=p[e];for(let r=0;r<3;r++){let o=t[n[r]],s=t[n[(r+1)%3]],c=[Math.min(o,s),Math.max(o,s)],l=c[0]+`-`+c[1];m[l]===void 0?m[l]={index1:c[0],index2:c[1],face1:e}:m[l].face2=e}}for(let e in m){let t=m[e];if(t.face2===void 0||p[t.face1].normal.dot(p[t.face2].normal)<=r){let e=f[t.index1],n=f[t.index2];o.push(new three.Line3(e,n))}}f.length=0,p.length=0}});return o}var scratchBoundingBox$1=new three.Box3,scratchViewLayerBox=new three.Box3,scratchObserverBox$3=new three.Box3,Model=class extends three.Object3D{constructor(e,t,n={}){var r;super(),this.disposed=!1,this.parameter=new Parameter,this.outdated=!1,this.autoRefine=!0,this.metaPending=!1,this.loaded=!1,this.refined=!1,this.refineProgress=[0,0],this.boundingBox=new three.Box3,this.fiveId=e,this.needsRender=!1,this.work=t,this.name=t.workCode;let o=0;for(let e of t.observers)o=Math.max(o,e.floorIndex);if(this.floorLength=o+1,t.model){this.metaPending=!0;let e=loadViewLayers(t.model,{fetcher:getFetcher(this.fiveId,t),light:(r=n.light)==null?!1:r,textureOptions:n.textureOptions}),o=e=>this.dispatchEvent({type:`error`,error:e}),s=e=>this.dispatchEvent({type:`tileLoad`,tile:e}),c=e=>this.dispatchEvent({type:`tileUnload`,tile:e});this.initReady=e.then(e=>{var t;this.metaPending=!1;let n=null,r=null,l=null;for(let t of e){if(t.visible=!1,t.onError=o,t.onTileLoad=s,t.onTileUnload=c,t.error){o(t.error);continue}t.type===`mesh`?n===null&&(n=t):t.type===`point_cloud`?r===null&&(r=t):l===null&&(l=t)}let u=(t=n==null?r:n)==null?l:t;if(u&&(u.visible=!0),e.length)if(this.disposed)for(let t of e)t.dispose();else this.add(...e);return this}),this.loadedReady=new Promise(e=>{let t=()=>{e(this),this.removeEventListener(`load`,t),this.removeEventListener(`dispose`,t)};this.addEventListener(`load`,t),this.addEventListener(`dispose`,t)})}else this.refined=!0,this.loaded=!0,this.initReady=Promise.resolve(this),this.loadedReady=Promise.resolve(this);this.parameter.set(`boundingBox`,this.boundingBox.clone())}dispose(){this.disposed=!0;let e;for(;e=this.children[0];)typeof e.dispose==`function`&&e.dispose(),e.onError=void 0,e.onTileLoad=void 0,e.onTileUnload=void 0,this.remove(e);this.dispatchEvent({type:`dispose`})}get empty(){return this.children.length===0}get viewLayers(){return this.children}getEdgesBySphere(e,t=30/180*Math.PI){return getEdgesBySphere(this,e,t)}intersectRaycaster(e,t){let n=t==null?[]:t,r=e.sortByDistance;e.sortByDistance=!1;for(let t=0,r=this.children.length;t<r;t++){let r=this.children[t];r.visible&&typeof r.intersectRaycaster==`function`&&r.intersectRaycaster(e,n)}return e.sortByDistance=r,sortIntersects(n,e.sortByDistance,e.firstHitOnly),n}update(e,t,n){let r=!1;this.needsRender===!0&&(this.needsRender=!1,r=!0);let o=this.loaded;this.refined=!this.metaPending,this.loaded=!this.metaPending,this.refineProgress[0]=this.refineProgress[1]=0,this.work.transform.equals(this.matrix)||(this.matrix.copy(this.work.transform),this.matrix.decompose(this.position,this.quaternion,this.scale),this.matrixAutoUpdate=!1,r=!0);for(let o of this.children)o.autoRefine=this.autoRefine,o.update(e,t,n,this)&&(r=!0),o.refined===!1&&(this.refined=!1),o.loaded===!1&&(this.loaded=!1),this.refineProgress[0]+=o.refineProgress[0],this.refineProgress[1]+=o.refineProgress[1];scratchBoundingBox$1.makeEmpty(),scratchObserverBox$3.copy(this.work.observerBox),scratchObserverBox$3.isEmpty()||(scratchObserverBox$3.max.x+=1,scratchObserverBox$3.max.z+=1,scratchObserverBox$3.max.y+=1,--scratchObserverBox$3.min.x,--scratchObserverBox$3.min.z,scratchBoundingBox$1.union(scratchObserverBox$3));for(let e of this.viewLayers)e.boundingBox.isEmpty()||(scratchViewLayerBox.copy(e.boundingBox),scratchBoundingBox$1.union(scratchViewLayerBox));return scratchBoundingBox$1.applyMatrix4(this.matrix),scratchBoundingBox$1.equals(this.boundingBox)||(this.boundingBox.copy(scratchBoundingBox$1),this.parameter.set(`boundingBox`,scratchBoundingBox$1.clone())),o===!1&&this.loaded===!0&&this.dispatchEvent({type:`load`}),r}localToEnu(e){return e.applyMatrix4(localToEnuMatrix)}enuToLocal(e){return e.applyMatrix4(enuToLocalMatrix)}worldToEnu(e){return this.localToEnu(this.worldToLocal(e))}enuToWorld(e){return this.localToWorld(this.enuToLocal(e))}get shownFloor(){return this.shownFloorIndex===-1?null:this.shownFloorIndex}set shownFloor(e){this.shownFloorIndex=e===null?-1:e}show(e){this.shownFloor=e==null?null:e,this.dispatchEvent({type:`changeShownFloor`,floorIndex:e==null?null:e})}get bounding(){return this.boundingBox}setMaterial(e){this.parameter.set(e)}getMaterial(){let e=[];return this.parent&&this.parent.parameter instanceof Parameter&&e.unshift(this.parent.parameter),this.parameter.resolveValue(...e)}get shownFloorIndex(){let e=[];return this.parent&&this.parent.parameter instanceof Parameter&&e.unshift(this.parent.parameter),this.parameter.resolveValue(...e).shownFloorIndex}set shownFloorIndex(e){this.parameter.set(`shownFloorIndex`,e)}get brightness(){let e=[];return this.parent&&this.parent.parameter instanceof Parameter&&e.unshift(this.parent.parameter),this.parameter.resolveValue(...e).brightness}set brightness(e){this.parameter.set(`brightness`,e)}get clippers(){let e=[];return this.parent&&this.parent.parameter instanceof Parameter&&e.unshift(this.parent.parameter),this.parameter.resolveValue(...e).clippers}set clippers(e){this.parameter.set(`clippers`,e)}get customShaders(){let e=[];return this.parent&&this.parent.parameter instanceof Parameter&&e.unshift(this.parent.parameter),this.parameter.resolveValue(...e).customShaders}set customShaders(e){this.parameter.set(`customShaders`,e)}resetBrightness(){this.parameter.reset(`brightness`);for(let e of this.viewLayers)e.resetBrightness()}},scratchGeometry=createSimpleBoxBufferGeometry(1,1,1);scratchGeometry.applyMatrix4(new three.Matrix4().makeScale(-1,1,1));var versionMap=new WeakMap,cameraBoxSize=new three.Vector3(1,1,1),scratchBoundingBox=new three.Box3,scratchBoundingBoxSize=new three.Vector3,scratchCameraBox=new three.Box3,scratchPosition=new three.Vector3,scratchScale=new three.Vector3,BoundingMesh=class extends PBMMesh{constructor(e={}){var t;let n=new PBMMeshMaterial(`none`);n.flatShading=!0,n.depthWrite=!1,n.transparent=!1,n.blending=three.CustomBlending,n.blendSrc=three.SrcAlphaFactor,n.blendDst=three.OneMinusSrcAlphaFactor,n.blendSrcAlpha=three.OneFactor,n.blendDstAlpha=three.OneMinusSrcAlphaFactor,n.floorIndex=-1,super(scratchGeometry,[n]),this.name=(t=e.name)==null?``:t,this.frustumCulled=!1,this.renderOrder=-999999}update(e,t,n){var r,o;let s=!1,c=Parameter.resolveValue(n.parameter);scratchBoundingBox.copy(c.boundingBox),scratchBoundingBox.getSize(scratchBoundingBoxSize);let l=Math.min(scratchBoundingBoxSize.x/2,500);scratchBoundingBox.min.x-=l,scratchBoundingBox.max.x+=l;let u=Math.min(scratchBoundingBoxSize.y/2,500);scratchBoundingBox.min.z-=u,scratchBoundingBox.max.z+=u;let d=scratchBoundingBoxSize.length()/2;if(scratchBoundingBox.max.y=Math.max(scratchBoundingBox.max.y,d),scratchBoundingBox.union(scratchCameraBox.setFromCenterAndSize(t.position,cameraBoxSize)),scratchBoundingBox.expandByScalar(1),scratchBoundingBox.getCenter(scratchPosition),scratchBoundingBox.getSize(scratchScale),scratchPosition.equals(this.position)||(this.position.copy(scratchPosition),s=!0),scratchScale.equals(this.scale)||(this.scale.copy(scratchScale),s=!0),versionMap.get(this)!==c.version){versionMap.set(this,c.version),s=!0;let e=this.material;for(let t of e)t.customShaders=c.customShaders,t.pano0=c.pano0,t.pano1=c.pano1,t.panoFilter=(o=(r=c.panoFilter)==null?void 0:r.toValue())==null?null:o,t.refinedScreen=c.refinedScreen,t.modelAlpha=c.modelAlpha,t.progress=c.progress,t.transition=c.transition,t.opacity=c.opacity,t.floorStyle=c.floorStyle,t.constantColor=c.constantColor,t.shownFloorIndex=c.shownFloorIndex,t.clippers=c.clippers,t.brightness=c.brightness,t.useHQWeight=c.useHQWeight,t.useHQDepth=c.useHQDepth,t.colorSaturation=c.colorSaturation,t.colorBrightness=c.colorBrightness,t.gradientTexture=c.gradientTexture,t.transparent=!1,t.modelBoundingMax.copy(c.boundingBox.max),t.modelBoundingMin.copy(c.boundingBox.min),c.useAddBlend&&(t.opacity=0),t.opacity===0&&(t.visible=!1)}return s}dispose(){for(let e of this.material)e.dispose(),e.pano0=null,e.pano1=null}},scratchBoundingBox3=new three.Box3,ModelScene=class extends three.Scene{constructor(e){super(),this.needsRender=!0,this.autoRefine=!0,this.boundingBox=new three.Box3,this.loaded=!1,this.refined=!1,this.refineProgress=[0,0],this.parameter=new Parameter,this.fiveId=e.fiveId,this.boundingMesh=new BoundingMesh({name:`bounding`}),this.add(this.boundingMesh);let t=this.models=[];this.shownModels=[],this.updateModelMap=new Map,this.parameter.set(`boundingBox`,this.boundingBox.clone());let n=this;defineProperty(t,`autoUpdate`,{get(){return n.autoRefine},set(e){n.autoRefine=e}}),defineProperty(t,`bounding`,{get(){return n.boundingBox}}),defineProperty(t,`loaded`,{get(){return n.loaded}}),defineProperty(t,`refined`,{get(){return n.refined}}),defineProperty(t,`refineProgress`,{get(){return n.refineProgress}}),defineProperty(t,`cacheCameras`,{get(){return n.parameter.resolveValue().cacheCameras},set(e){n.parameter.set(`cacheCameras`,e)}}),defineProperty(t,`intersectRaycaster`,{value:e=>n.intersectRaycaster(e)}),defineProperty(t,`setMaterial`,{value:e=>n.setMaterial(e)}),defineProperty(t,`getMaterial`,{value:()=>n.getMaterial()}),defineProperty(t,`resetBrightness`,{value:()=>n.resetBrightness()})}setModels(e,t){let n=e.map(e=>{let n=this.shownModels.filter(t=>t.work.workCode===e.workCode)[0];if(n||(n=this.models.filter(t=>t.work.workCode===e.workCode)[0],n))return n.work=e,n;n=new Model(this.fiveId,e,{light:t.light,textureOptions:t.textureOptions});let r=t[`3d-tiles`];return n.initReady.then(()=>{if(r)if(typeof r==`function`)for(let e of n.viewLayers){let t=r(e,n);t&&(t.viewerRequestVolume&&(e.viewerRequestVolume=makeBoundingVolume(t.viewerRequestVolume)),e.parameter.set(omit(t,[`showLayers`])),t.showLayers===!1?e.visible=!1:Array.isArray(t.showLayers)&&(e.visible=t.showLayers.includes(e.name)))}else for(let e of n.viewLayers)r.viewerRequestVolume&&(e.viewerRequestVolume=makeBoundingVolume(r.viewerRequestVolume)),e.parameter.set(omit(r,[`showLayers`])),r.showLayers===!1?e.visible=!1:Array.isArray(r.showLayers)&&(e.visible=r.showLayers.includes(e.name))}),this.dispatchEvent({type:`model.create`,model:n}),n});for(let e=0;e<this.models.length;e++){let t=this.models[e];n.indexOf(t)===-1&&this.shownModels.indexOf(t)===-1&&(t.dispose(),this.dispatchEvent({type:`model.dispose`,model:t}))}this.models.length=0;for(let e=0;e<n.length;e++){let t=n[e];this.models.push(t)}if(t.forceReplaceImmediately&&!arrayEqual(this.models,this.shownModels)){for(let e=0;e<this.shownModels.length;e++){let t=this.shownModels[e];this.models.indexOf(t)===-1&&(t.dispose(),this.dispatchEvent({type:`model.dispose`,model:t}))}this.shownModels.length=0;for(let e=0;e<this.models.length;e++)this.shownModels.push(this.models[e])}return this.loaded=!1,this.refined=!1,this.models}get empty(){return this.boundingBox.isEmpty()}intersectRaycaster(e,t){let n=t==null?[]:t,r=this.shownModels.filter(e=>e.visible);if(r.length===1)r[0].intersectRaycaster(e,n);else{let t=e.sortByDistance;e.sortByDistance=!1;for(let t of r)t.intersectRaycaster(e,n);e.sortByDistance=t,sortIntersects(n,e.sortByDistance,e.firstHitOnly)}return n}update(e,t){let n=!1;scratchBoundingBox3.makeEmpty(),this.loaded=this.models.length>0,this.refined=this.models.length>0,this.refineProgress[0]=this.refineProgress[1]=0,this.updateModelMap.clear();for(let n=0;n<this.models.length;n++){let r=this.models[n];if(!this.updateModelMap.has(r)){let n=r.autoRefine;this.autoRefine===!1&&(r.autoRefine=!1);let o=r.update(e,t,this);r.autoRefine=n,this.updateModelMap.set(r,o)}r.loaded===!1&&(this.loaded=!1),r.refined===!1&&(this.refined=!1),this.refineProgress[0]+=r.refineProgress[0],this.refineProgress[1]+=r.refineProgress[1]}if((this.loaded===!0||this.models.length===0)&&!arrayEqual(this.models,this.shownModels)){for(let e=0;e<this.shownModels.length;e++){let t=this.shownModels[e];this.models.indexOf(t)===-1&&(t.dispose(),this.dispatchEvent({type:`model.dispose`,model:t}))}this.shownModels.length=0;for(let e=0;e<this.models.length;e++)this.shownModels.push(this.models[e]);n=!0}for(let n=0;n<this.shownModels.length;n++){let r=this.shownModels[n];if(!this.updateModelMap.has(r)){let n=r.autoRefine;(this.autoRefine===!1||this.models.indexOf(r)<0)&&(r.autoRefine=!1);let o=r.update(e,t,this);r.autoRefine=n,this.updateModelMap.set(r,o)}}for(let e=this.children.length-1;e>=0;e--){let t=this.children[e];t instanceof Model&&this.remove(t)}for(let e=0;e<this.shownModels.length;e++){let t=this.shownModels[e];this.updateModelMap.get(t)===!0&&(n=!0),scratchBoundingBox3.union(t.boundingBox),this.add(t)}for(let e=0;e<this.models.length;e++){let t=this.models[e];this.shownModels.indexOf(t)===-1&&scratchBoundingBox3.union(t.boundingBox)}return scratchBoundingBox3.equals(this.boundingBox)||(this.boundingBox.copy(scratchBoundingBox3),this.parameter.set(`boundingBox`,this.boundingBox.clone()),n=!0),this.boundingMesh.update(e,t,this)&&(n=!0),this.updateModelMap.clear(),this.needsRender=n,n}get bounding(){return this.boundingBox}setMaterial(e){this.parameter.set(e)}getMaterial(){return this.parameter.resolveValue()}resetBrightness(){this.parameter.reset(`brightness`);for(let e of this.models)e.resetBrightness()}dispose(){this.remove(this.boundingMesh),this.boundingMesh.dispose();for(let e=this.children.length-1;e>=0;e--){let t=this.children[e];t instanceof Model&&this.remove(t)}let e=arrayUnique(this.models.concat(this.shownModels));for(let t=0;t<this.shownModels.length;t++)e[t].dispose();this.models.length=0,this.shownModels.length=0,super.dispose()}};function workInitialToJson(e){let t={};return e.mode!==void 0&&(t.mode=e.mode),e.panoIndex!==void 0&&(t.pano_index=e.panoIndex),e.longitude!==void 0&&(t.longitude=e.longitude),e.latitude!==void 0&&(t.latitude=e.latitude),e.fov!==void 0&&(t.fov=e.fov),e.distance!==void 0&&(t.distance=e.distance),e.offset!==void 0&&(t.offset=e.offset.toArray()),t}function workModelToJson(e){var t;if(e)return{file_url:e.file,material_base_url:e.textureBase,material_textures:(t=e.textures)==null?void 0:t.slice(),up_axis:e.upAxis,layers:e.layers.map(e=>({tileset_url:e.tileset,up_axis:e.upAxis,name:e.name,type:e.type}))}}function workObserverToObserverJson(e){return{index:e.index,derived_id:e.derivedId,derived_id_str:e.derivedIdStr,floor_index:e.floorIndex,position:e.position.toArray(),standing_position:e.standingPosition.toArray(),quaternion:{x:e.quaternion.x,y:e.quaternion.y,z:e.quaternion.z,w:e.quaternion.w},visible_nodes:e.accessibleNodes.slice(),accessible_nodes:e.accessibleNodes.slice()}}function workObserverToPanoramaJson(e){return{index:e.index,active:e.active,loadable:e.loadable,derived_id:e.derivedId,derived_id_str:e.derivedIdStr,size_list:e.images.sizeList.slice(),up:e.images.up,down:e.images.down,right:e.images.right,left:e.images.left,front:e.images.front,back:e.images.back,video:e.images.video?{matrix:e.images.video.matrix.toArray(),size:e.images.video.size.toArray(),source:e.images.video.source}:void 0}}function workToJson(e){return{allow_hosts:e.allowHosts.slice(),expire_at:e.expire.getTime().toString(),project_id:e.projectId,code:e.workCode,name:e.name,base_url:e.baseURL,initial:workInitialToJson(e.initial),model:workModelToJson(e.model),observers:e.observers.map(e=>workObserverToObserverJson(e)),panorama:{count:e.observers.length,list:e.observers.map(e=>workObserverToPanoramaJson(e))}}}function equirectangularUvToCubemap(e){let t=(e.x*2+1)*Math.PI,n=(.5-e.y)*Math.PI,r=Math.sin(n),o=Math.cos(n),s=Math.sin(t),c=Math.cos(t),l=o*s,u=r,d=o*c,f=Math.abs(l),p=Math.abs(u),m=Math.abs(d),h,g;if(f>=p&&f>=m){let e=1/f;l>0?(h=`right`,g=new three.Vector2(-d*e,u*e)):(h=`left`,g=new three.Vector2(d*e,u*e))}else if(p>=f&&p>=m){let e=1/p;u>0?(h=`up`,g=new three.Vector2(l*e,-d*e)):(h=`down`,g=new three.Vector2(l*e,d*e))}else{let e=1/m;d>0?(h=`front`,g=new three.Vector2(l*e,u*e)):(h=`back`,g=new three.Vector2(-l*e,u*e))}return g.x=(g.x+1)/2,g.y=1-(g.y+1)/2,[h,g]}function cubemapUvToEquirectangular(e,t){let n=t.x*2-1,r=(1-t.y)*2-1,o=0,s=0,c=0;switch(e){case`right`:o=1,s=r,c=-n;break;case`left`:o=-1,s=r,c=n;break;case`up`:o=n,s=1,c=-r;break;case`down`:o=n,s=-1,c=r;break;case`front`:o=n,s=r,c=1;break;case`back`:o=-n,s=r,c=-1;break;default:throw Error(`Invalid cubFace: ${e}`)}let l=Math.sqrt(o*o+s*s+c*c);if(l===0)return new three.Vector2(.5,.5);o/=l,s/=l,c/=l;let u=Math.atan2(o,c),d=Math.asin(Math.max(-1,Math.min(1,s))),f=(u+Math.PI)/(2*Math.PI),p=(Math.PI/2-d)/Math.PI;return f%=1,f=f<0?f+1:f,p=Math.max(0,Math.min(1,p)),new three.Vector2(f,p)}var workObserverProto={vectorToEquirectangularUv(e,t=`top-left`){let n=new three.Quaternion().setFromRotationMatrix(this.work.transform).inverse(),r=new three.Quaternion().copy(this.quaternion).inverse(),o=new three.Quaternion(0,1,0,0).inverse(),s=new three.Vector3().copy(e).normalize().applyQuaternion(n).applyQuaternion(r).applyQuaternion(o),c=Math.atan2(s.x,-s.z),l=Math.asin(-s.y);if(t===`top-left`)return new three.Vector2(c/(Math.PI*2)+.5,l/Math.PI+.5);if(t===`bottom-left`)return new three.Vector2(c/(Math.PI*2)+.5,.5-l/Math.PI);throw Error(`Invalid uvOrigin ${t}`)},vectorToCubemapUv(e,t=`top-left`){let n=equirectangularUvToCubemap(this.vectorToEquirectangularUv(e,`top-left`));if(t===`top-left`)return n;if(t===`bottom-left`){let[e,t]=n;return t.y=1-t.y,n}else throw Error(`Invalid uvOrigin ${t}`)},equirectangularUvToVector(e,t=`top-left`){let n=0;if(t===`top-left`)n=1;else if(t===`bottom-left`)n=-1;else throw Error(`Invalid uvOrigin ${t}`);let r=new three.Quaternion().setFromRotationMatrix(this.work.transform),o=new three.Quaternion().copy(this.quaternion),s=new three.Quaternion(0,1,0,0),c=Math.PI*2*(e.x+.5),l=Math.PI*(e.y-.5),u=Math.abs(Math.cos(l)),d=Math.sin(c)*u,f=-Math.sin(l)*n,p=-Math.cos(c)*u;return new three.Vector3(d,f,p).applyQuaternion(s).applyQuaternion(o).applyQuaternion(r)},cubemapUvToVector(e,t,n=`top-left`){let r;if(n===`top-left`)r=t;else if(n===`bottom-left`)r=new three.Vector2().copy(t),r.y=1-r.y;else throw Error(`Invalid uvOrigin ${n}`);let o=cubemapUvToEquirectangular(e,r);return this.equirectangularUvToVector(o)},getWorldPosition(){return new three.Vector3().copy(this.position).applyMatrix4(this.work.transform)},getWorldStandingPosition(){return new three.Vector3().copy(this.standingPosition).applyMatrix4(this.work.transform)}};function isNumber(e){return typeof e==`number`}function jsonClone(e){if(typeof e!=`object`||!e)return e;if(Array.isArray(e))return e.map(e=>typeof e!=`object`||!e?e:jsonClone(e));{let t={};for(let n in e){let r=e[n];t[n]=typeof r!=`object`||!r?r:jsonClone(r)}return t}}function getType(e){return e==null?`null`:Array.isArray(e)?`array`:typeof e==`object`?`dict`:`value`}function jsonMerge(e,t){let n=getType(e),r=getType(t);if(r===`null`)return e;if(r===`value`)return t;if(r!==n)return jsonClone(t);if(r===`array`)for(let n=0;n<t.length;n++)e[n]=jsonMerge(e[n],t[n]);else if(r===`dict`)for(let n in t)e[n]=jsonMerge(e[n],t[n]);return e}function jsonStableStrinfiy_(e,t=!1){let n=typeof e;if(n===`string`)return JSON.stringify(e);if(e===!0)return`true`;if(e===!1)return`false`;if(e===null)return`null`;if(e instanceof Array){let t=`[`,n=e.length-1,r=0;for(;r<n;r++)t+=jsonStableStrinfiy_(e[r],!1)+`,`;return n>-1&&(t+=jsonStableStrinfiy_(e[r],!1)),t+`]`}if(e instanceof Object){if(typeof e.toJSON==`function`)return jsonStableStrinfiy_(e.toJSON(),t);let n=Object.keys(e).sort(),r=n.length,o=``,s=0;for(;s<r;){let t=n[s],r=jsonStableStrinfiy_(e[t],!0);r!==void 0&&(s&&o!==``&&(o+=`,`),o+=JSON.stringify(t)+`:`+r),s++}return`{`+o+`}`}switch(n){case`function`:return JSON.stringify(e.toString());case`undefined`:return t?void 0:null;case`number`:return e;default:return isFinite(e)?e:null}}function jsonStableStrinfiy(e){return jsonStableStrinfiy_(e,!1)}function jsonHash(e){return`hash::${sha256(jsonStableStrinfiy(e))}`}var PANO_ID_REG=/^(.*)\[(\d+)\]$/;function panoStringify(e){if(!isNaN(e.panoIndex)&&isFinite(e.panoIndex))return`${e.workCode}[${e.panoIndex}]`;throw Error(`Invalid Pano`)}function panoParse(e){let t=e.match(PANO_ID_REG);if(t){let[e,n,r]=t,o=Math.floor(Number(r));if(!isNaN(o)&&isFinite(o))return{workCode:n,panoIndex:o}}throw Error(`Invalid PanoId`)}function panoEqual(e,t){return panoStringify(e)===panoStringify(t)}function isPanoId(e){return typeof e==`string`&&PANO_ID_REG.test(e)}var REG_STR=`\\{([^\\}]+)\\}`;function escapeRegexp(e){return e.replace(/[|\\{}()[\]^$+*?.]/g,`\\$&`).replace(/-/g,`\\x2d`)}function createRegExp(e){return RegExp(`^`+e.map(e=>escapeRegexp(e)).join(`(.+)`)+`$`)}var StringPattern=class{constructor(e){this.strings=[],this.keys=[];let t=new RegExp(REG_STR,`g`),n,r=0;for(;(n=t.exec(e))!==null;)this.strings.push(e.slice(r,n.index)),this.keys.push(n[1]),r=n.index+n[0].length;this.strings.push(e.slice(r))}stringify(e){let t=[this.strings[0]];for(let n=0;n<this.keys.length;n++){let r=e[this.keys[n]];t.push(String(r),this.strings[n+1])}return t.join(``)}match(e){var t;this.matchRegexp=(t=this.matchRegexp)==null?createRegExp(this.strings):t;let n=e.match(this.matchRegexp);if(!n)return null;let r={};for(let e=0;e<this.keys.length;e++){let t=this.keys[e],o=n[e+1];if(r[t]!==o){if(r[t]!==void 0)return null;r[t]=o}}return r}};function deepFreeze(e){Object.freeze(e);let t=typeof e==`function`,n=Object.prototype.hasOwnProperty;return Object.getOwnPropertyNames(e).forEach(function(r){n.call(e,r)&&(!t||r!==`caller`&&r!==`callee`&&r!==`arguments`)&&e[r]!==null&&(typeof e[r]==`object`||typeof e[r]==`function`)&&!Object.isFrozen(e[r])&&deepFreeze(e[r])}),e}var URL_REGEXP=/^[0-9a-z]+\:\/\/(([^:/?#]*)(?::[0-9]+)?)/i,BUILDIN_ALLOW_HOST=deepFreeze(JSON.parse(function(...e){let t=113,n=126,r=0,o=``;return arguments[0].split(``).map(e=>e.charCodeAt(0)>126?e:String.fromCharCode((e.charCodeAt(0)+113)%126)).join(``)}(`h/y|pnyu|/9/xr;p|z/9/yvn{wvn;p|z/9/rnyrr;p|z/9/rnyrr;p{/9/rnyrr;w}/9/uv;p|z/9/uv;p{/9/rnyrr;p{/9/rnyrr;p|z/9/ywpq{;p|z/9/rnyrr:pq{;p|z/9/rnyrr:pq{;p{/9/rnyrr;nv/9/;p{/9/pq{;p{/9/pnyp{|qr;vr/j`))),domainRegex=/^([^.]+)(\.([^.]+))*$/,currentHostname=typeof location<`u`?location.hostname:`localhost`;function isIPDomain(e){return/^(([1-9]?\d|1\d\d|2[0-4]\d|25[0-5])(\.(?!$)|$)){4}$/.test(e)}function matchDomain(e,t){if(!domainRegex.test(e)||!domainRegex.test(t))return!1;if(e===`*`)return!0;let n=e.split(`.`).reverse(),r=t.split(`.`).reverse();if(n.length<=1)return e===t;for(let e=0;e<n.length;e++)if(n[e]!==r[e])return!1;return!0}function hostnameFromURL(e){if(/^blob\:/i.test(e)||/^data\:/i.test(e))return currentHostname;let t=e.match(URL_REGEXP);return t?t[2]:currentHostname}var error_invalid_input=()=>Error(`Invalid input.`),error_invalid_certificate=()=>Error(`Invalid certificate.`),error_invalid_signature=()=>Error(`Invalid signature.`),error_date_expired=e=>Error(`Date(${e.toString()}) expired.`),error_host_not_allowed=e=>Error(`Host(${JSON.stringify(e)}) is not allowed.`);function ObjectOmit(e,t){let n={};for(let r of Object.keys(e))t.indexOf(r)===-1&&(n[r]=e[r]);return n}function jsonStableNoneNumberStrinfiy_(e,t=!1){let n=typeof e;if(n===`string`)return JSON.stringify(e);if(e===!0)return`true`;if(e===!1)return`false`;if(e===null)return`null`;if(e instanceof Array){let t=`[`,n=e.length-1,r=0;for(;r<n;r++)t+=jsonStableNoneNumberStrinfiy_(e[r],!1)+`,`;return n>-1&&(t+=jsonStableNoneNumberStrinfiy_(e[r],!1)),t+`]`}if(e instanceof Object){if(typeof e.toJSON==`function`)return jsonStableNoneNumberStrinfiy_(e.toJSON(),t);let n=Object.keys(e).sort(),r=n.length,o=``,s=0;for(;s<r;){let t=n[s],r=jsonStableNoneNumberStrinfiy_(e[t],!0);r!==void 0&&(s&&o!==``&&(o+=`,`),o+=JSON.stringify(t)+`:`+r),s++}return`{`+o+`}`}switch(n){case`function`:case`undefined`:return t?void 0:null;case`number`:return 0;default:return isFinite(e)?e:null}}function jsonStableNoneNumberStrinfiy(e){return String(jsonStableNoneNumberStrinfiy_(e,!1))}function verify(e){var t,n,r;let o={};try{o=typeof e==`string`?JSON.parse(e):e}catch(e){return error_invalid_input()}if(typeof o!=`object`)return error_invalid_input();let s=currentHostname,c=Date.now(),l=new Date(typeof o.expire_at==`string`&&/^\d+$/.test(o.expire_at)?Number(o.expire_at):o.expire_at),u=Array.isArray(o.allow_hosts)?o.allow_hosts:[];if(s.length===0||isIPDomain(s)||BUILDIN_ALLOW_HOST.filter(e=>matchDomain(e,s)).length>0){let e=String((t=o.certificate)==null?``:t);if(e)try{let t=new X509;return t.readCertPEM(e),deepFreeze({issuer:t.getSubjectString(),expire:l,allowHosts:u})}catch(e){let t=e instanceof Error?e.message:String(e);console.warn(`[PARSE Error]: Invalid Certificate. `+t)}return deepFreeze({issuer:`none`,expire:l,allowHosts:u})}let d=String((n=o.certificate)==null?``:n);if(!d)return error_invalid_certificate();let f=new X509;f.readCertPEM(d);let p=String((r=o._signature)==null?``:r);return!p||verifyMessage(jsonStableNoneNumberStrinfiy(ObjectOmit(o,[`_signature`])),p,f)===!1?error_invalid_signature():c<l.getTime()?BUILDIN_ALLOW_HOST.concat(u).filter(e=>matchDomain(e,s)).length===0?error_host_not_allowed(s):deepFreeze({issuer:f.getSubjectString(),expire:l,allowHosts:u}):error_date_expired(l)}function verifyURL(e,t){let n=hostnameFromURL(e);return currentHostname.length!==0&&!isIPDomain(currentHostname)&&BUILDIN_ALLOW_HOST.filter(e=>matchDomain(e,currentHostname)).length===0&&!isIPDomain(n)&&BUILDIN_ALLOW_HOST.concat(t).filter(e=>matchDomain(e,n)).length===0?error_host_not_allowed(n):e}var accessibleNodesSet=new Set,PANO_TEXTURE_SCALE=new three.Vector3(1,1,1),FACE_ORDER$1=[`right`,`left`,`up`,`down`,`front`,`back`];function relativeURL(e,t){if(!isAbsoluteURL(e))return e;if(e.indexOf(t)===0)return e.slice(t.length);let n=t.replace(/^https\:/,`http:`);if(e.indexOf(n)===0)return e.slice(n.length);let r=t.replace(/^http\:/,`https:`);return e.indexOf(r)===0?e.slice(r.length):(console.warn(`${e} is not start with base_url(${t}).`),e)}function panoURL(e,t,n){return!isAbsoluteURL(e)&&typeof t==`string`&&t.length>0&&(e=pathJoin(t,String(n),e)),e}function getTileLevel(e){for(let t=10;t>=0;t--)if(512*Math.pow(2,t)<=e)return t;return null}function sortTile(e){e=e.slice().sort((e,t)=>e.level-t.level);let t=[];for(let n of e){if(t.length===0){t.push(n);continue}let e=t[t.length-1];if(n.level>e.level){t.push(n);continue}if(n.size>e.size){t[t.length-1]=n;continue}}return t}function parse(e,t){var n,r,o,s,c,l,u,d,f,p,m,h,g,_,v,y,b,S,C;let w=[],T=null;for(let t of[].concat(e))if(`getURL`in t)T={allowHosts:t.allowHosts,expire:t.expire,issuer:t.issuer},w.push(workToJson(t));else{let e=typeof t==`string`?JSON.parse(t):jsonClone(t),n=verify(e);if(n instanceof Error)return n;T===null&&(T=n),w.push(e)}if(T===null)return Error(`Empty`);defineProperty(t,`issuer`,{enumerable:!0,configurable:!1,writable:!1,value:T.issuer}),defineProperty(t,`expire`,{enumerable:!0,configurable:!1,writable:!1,value:Object.freeze(T.expire)}),defineProperty(t,`allowHosts`,{enumerable:!0,configurable:!1,writable:!1,value:Object.freeze(T.allowHosts)});let E=w.reduce((e,t)=>jsonMerge(e,t));defineProperty(t,`name`,{enumerable:!0,configurable:!1,writable:!1,value:String((n=E.name)==null?`Unknown`:n)}),defineProperty(t,`workCode`,{enumerable:!0,writable:!0,value:String(E.resource_code||E.basic_code||E.vr_code||E.code||E.project_id||E.work_code||E.workCode||createUuid())}),defineProperty(t,`projectId`,{enumerable:!0,writable:!0,value:E.project_id}),defineProperty(t,`baseURL`,{enumerable:!0,writable:!0,value:(()=>{var e;let t=(e=E.base_url)==null?``:e;return t&&t[t.length-1]!==`/`&&(t+=`/`),t})()});let D;typeof E.model==`object`&&(D={},defineProperty(D,`work`,{enumerable:!1,configurable:!1,writable:!1,value:t}),defineProperty(D,`file`,{enumerable:!0,configurable:!1,writable:!1,value:(()=>{let e=E.model.file_url;if(e)return relativeURL(e,t.baseURL)})()}),defineProperty(D,`textureBase`,{enumerable:!0,configurable:!1,writable:!1,value:(()=>{let e=E.model.material_base_url;return e&&(e=relativeURL(e,t.baseURL)),e})()}),defineProperty(D,`textures`,{enumerable:!0,configurable:!1,writable:!1,value:(()=>{let e;return Array.isArray(E.model.material_textures)&&(e=E.model.material_textures.slice(),Object.freeze(e)),e})()}),defineProperty(D,`upAxis`,{enumerable:!0,configurable:!1,writable:!1,value:E.model.up_axis}),defineProperty(D,`coordinate`,{enumerable:!0,configurable:!1,writable:!1,value:jsonClone(E.model.coordinate)}),defineProperty(D,`layers`,{enumerable:!0,configurable:!1,writable:!1,value:(()=>{var e,n,r;let o=[];if(Array.isArray(E.model.layers)){for(let s of E.model.layers)if(s&&s.tileset_url){let c={};defineProperty(c,`work`,{enumerable:!1,configurable:!1,writable:!1,value:t}),defineProperty(c,`name`,{enumerable:!0,configurable:!1,writable:!1,value:(e=s.name)==null?``:e}),defineProperty(c,`type`,{enumerable:!0,configurable:!1,writable:!1,value:(n=s.type)==null?`mesh`:n}),defineProperty(c,`upAxis`,{enumerable:!0,configurable:!1,writable:!1,value:(r=s.up_axis)==null?`Z`:r}),defineProperty(c,`tileset`,{enumerable:!0,configurable:!1,writable:!1,value:relativeURL(s.tileset_url,t.baseURL)}),o.push(c)}}if(typeof E.model.tiles==`object`){let e=E.model.tiles;if(e&&e.tileset_url){let n={};defineProperty(n,`work`,{enumerable:!1,configurable:!1,writable:!1,value:t}),defineProperty(n,`name`,{enumerable:!0,configurable:!1,writable:!1,value:`lod`}),defineProperty(n,`type`,{enumerable:!0,configurable:!1,writable:!1,value:`mesh`}),defineProperty(n,`upAxis`,{enumerable:!0,configurable:!1,writable:!1,value:`-Y`}),defineProperty(n,`tileset`,{enumerable:!0,configurable:!1,writable:!1,value:relativeURL(e.tileset_url,t.baseURL)}),o.push(n)}}return Object.freeze(o)})()})),defineProperty(t,`model`,{enumerable:!0,configurable:!1,writable:!1,value:D});let O=[];if(Array.isArray(E.observers)&&E.panorama&&Array.isArray(E.panorama.list||E.panorama.info)){let e=E.observers,n=(r=E.panorama.list||E.panorama.info)==null?[]:r,w=(d=(l=(s=(o=E.panorama)==null?void 0:o.pano_high_cube_base_url)==null?(c=E.panorama)==null?void 0:c.pano_cube_base_url:s)==null?(u=E.panorama)==null?void 0:u.base_url:l)==null?``:d,T=Math.min(e.length,n.length),D={};for(let e of Object.keys((f=E.panorama.pattern)==null?{}:f)){let t=e,n=E.panorama.pattern[t];if(typeof n==`string`){let e=new StringPattern(n);D[t]=t=>e.stringify(t)}else D[t]=()=>n}let k=(e,t)=>{var n;let r=D[t];return(n=e[t])==null?r?r(e):void 0:n};for(let r=0;r<T;r++){let o=e[r],s=n[r],c=Object.create(workObserverProto);defineProperty(c,`work`,{enumerable:!1,configurable:!1,writable:!1,value:t}),defineProperty(c,`index`,{enumerable:!0,configurable:!1,writable:!1,value:r}),defineProperty(c,`panoIndex`,{enumerable:!0,configurable:!1,writable:!1,value:r}),defineProperty(c,`panoId`,{enumerable:!0,configurable:!1,writable:!1,value:panoStringify({workCode:t.workCode,panoIndex:r})}),defineProperty(c,`floorIndex`,{enumerable:!0,configurable:!1,writable:!1,value:(p=o.floor_index)==null?o.floor:p}),defineProperty(c,`derivedId`,{enumerable:!0,configurable:!1,writable:!1,value:(h=(m=o.derived_id)==null?k(s,`derived_id`):m)==null?0:h}),defineProperty(c,`derivedIdStr`,{enumerable:!0,configurable:!1,writable:!1,value:(_=(g=o.derived_id_str)==null?k(s,`derived_id_str`):g)==null?String(c.derivedId):_}),defineProperty(c,`active`,{enumerable:!0,configurable:!1,writable:!1,value:o.active!==!1&&k(s,`active`)!==!1}),defineProperty(c,`loadable`,{enumerable:!0,configurable:!1,writable:!1,value:(y=(v=o.loadable)==null?k(s,`loadable`):v)==null?!1:y}),defineProperty(c,`position`,{enumerable:!0,configurable:!1,writable:!1,value:Object.freeze(new three.Vector3().fromArray((b=o.position)==null?[0,0,0]:b))}),defineProperty(c,`standingPosition`,{enumerable:!0,configurable:!1,writable:!1,value:Object.freeze(new three.Vector3().fromArray((C=(S=o.standing_position)==null?o.standingPosition:S)==null?[0,0,0]:C))}),defineProperty(c,`quaternion`,{enumerable:!0,configurable:!1,writable:!1,value:Object.freeze(new three.Quaternion().fromArray(o.quaternion?[o.quaternion.x,o.quaternion.y,o.quaternion.z,o.quaternion.w]:[0,0,0,1]))}),defineProperty(c,`matrix`,{enumerable:!0,configurable:!1,writable:!1,value:Object.freeze(new three.Matrix4().compose(c.position,c.quaternion,PANO_TEXTURE_SCALE))}),defineProperty(c,`accessibleNodes`,{enumerable:!0,configurable:!1,writable:!1,value:(()=>{if(accessibleNodesSet.clear(),o.accessible_nodes&&Array.isArray(o.accessible_nodes))for(let e of o.accessible_nodes)e>=T||e===r||accessibleNodesSet.add(e);else if(o.accessibleNodes&&Array.isArray(o.accessibleNodes))for(let e of o.accessibleNodes)e>=T||e===r||accessibleNodesSet.add(e);else if(o.visible_nodes&&Array.isArray(o.visible_nodes))for(let e of o.visible_nodes)e>=T||e===r||accessibleNodesSet.add(e);else if(o.visibleNodes&&Array.isArray(o.visibleNodes))for(let e of o.visibleNodes)e>=T||e===r||accessibleNodesSet.add(e);if(accessibleNodesSet.size===0)for(let e=0;e<T;e++)e!==r&&accessibleNodesSet.add(e);let e=Array.from(accessibleNodesSet);return accessibleNodesSet.clear(),Object.freeze(e)})()}),defineProperty(c,`visibleNodes`,{enumerable:!0,configurable:!1,writable:!1,value:c.accessibleNodes}),defineProperty(c,`images`,{enumerable:!0,configurable:!1,writable:!1,value:(()=>{let e={};defineProperty(e,`work`,{enumerable:!1,configurable:!1,writable:!1,value:t});for(let n of FACE_ORDER$1)defineProperty(e,n,{enumerable:!0,configurable:!1,writable:!1,value:(()=>{var e;return relativeURL(panoURL((e=k(s,n))==null?``:e,w,r),t.baseURL)})()});return defineProperty(e,`sizeList`,{enumerable:!0,configurable:!1,writable:!1,value:(()=>{let t=getImageSizeFromURL(e[FACE_ORDER$1[0]]),n=k(s,`size_list`),r=k(s,`tiles`);if(t){if(n){let e=n.slice().sort((e,t)=>e-t);return Object.freeze(e)}else if(r){let e=[t],n=r.slice().sort((e,t)=>e-t);for(let r of n){let n=512*Math.pow(2,r);n>t&&e.push(n)}return Object.freeze(e)}return Object.freeze([t])}return Object.freeze([])})()}),defineProperty(e,`tiles`,{enumerable:!0,configurable:!1,writable:!1,value:(()=>{let n=getImageSizeFromURL(e.front);if(!n)return;let r=e.sizeList.slice();if(r[0]){let e=getTileLevel(r[0]);if(e)for(let t=e-1;t>=0;t--)r.unshift(512*Math.pow(2,t))}if(r.length<=0)return;let o=[];for(let s of r){let r=getTileLevel(s);if(typeof r!=`number`)continue;let c={};if(defineProperty(c,`work`,{enumerable:!1,configurable:!1,writable:!1,value:t}),defineProperty(c,`level`,{enumerable:!0,configurable:!1,writable:!1,value:r}),s>n){defineProperty(c,`size`,{enumerable:!0,configurable:!1,writable:!1,value:s}),defineProperty(c,`scale`,{enumerable:!0,configurable:!1,writable:!1,value:1});for(let t of FACE_ORDER$1)defineProperty(c,t,{enumerable:!0,configurable:!1,writable:!1,value:replaceImageSize(e[t],s)})}else{defineProperty(c,`size`,{enumerable:!0,configurable:!1,writable:!1,value:n}),defineProperty(c,`scale`,{enumerable:!0,configurable:!1,writable:!1,value:s/n});for(let t of FACE_ORDER$1)defineProperty(c,t,{enumerable:!0,configurable:!1,writable:!1,value:e[t]})}o.push(c)}return o=sortTile(o),Object.freeze(o)})()}),defineProperty(e,`video`,{enumerable:!0,configurable:!1,writable:!1,value:(()=>{let e=k(s,`video`),n;return e&&(n={},defineProperty(n,`work`,{enumerable:!1,configurable:!1,writable:!1,value:t}),defineProperty(n,`source`,{enumerable:!0,configurable:!1,writable:!1,value:e.source}),defineProperty(n,`matrix`,{enumerable:!0,configurable:!1,writable:!1,value:new three.Matrix4().fromArray(e.matrix)}),defineProperty(n,`size`,{enumerable:!0,configurable:!1,writable:!1,value:new three.Vector2().fromArray(e.size)})),n})()}),e})()}),O.push(c)}}defineProperty(t,`observers`,{enumerable:!0,configurable:!1,writable:!1,value:Object.freeze(O)});let k={};if(defineProperty(k,`work`,{enumerable:!1,configurable:!1,writable:!1,value:t}),E.initial){if(t.observers.length>0){let e;isNumber(E.initial.panoIndex)?e=E.initial.panoIndex:isNumber(E.initial.pano_index)?e=E.initial.pano_index:isNumber(E.initial.pano)&&(e=E.initial.pano),typeof e==`number`&&(e=clamp$1(e,0,t.observers.length-1),defineProperty(k,`panoIndex`,{enumerable:!0,writable:!0,value:e}))}if(E.initial.mode===`Panorama`&&t.observers.length===0||E.initial.mode===`Floorplan`||E.initial.mode===`Topview`||E.initial.mode===`Model`||E.initial.mode===`Mapview`?defineProperty(k,`mode`,{enumerable:!0,writable:!0,value:E.initial.mode}):typeof k.panoIndex==`number`?defineProperty(k,`mode`,{enumerable:!0,writable:!0,value:`Panorama`}):defineProperty(k,`mode`,{enumerable:!0,writable:!0,value:`Mapview`}),isNumber(E.initial.latitude)&&defineProperty(k,`latitude`,{enumerable:!0,writable:!0,value:E.initial.latitude}),isNumber(E.initial.longitude)?defineProperty(k,`longitude`,{enumerable:!0,writable:!0,value:E.initial.longitude}):isNumber(E.initial.heading)&&defineProperty(k,`longitude`,{enumerable:!0,writable:!0,value:headingToLongitude(E.initial.heading)}),isNumber(E.initial.fov)&&defineProperty(k,`fov`,{enumerable:!0,writable:!0,value:E.initial.fov}),isNumber(E.initial.distance)&&defineProperty(k,`distance`,{enumerable:!0,writable:!0,value:E.initial.distance}),Array.isArray(E.initial.offset)){let e=E.initial.offset,t=[0,0,0].map((t,n)=>{let r=Number(e[n]);return isNaN(r)||!isFinite(r)?0:r});defineProperty(k,`offset`,{enumerable:!0,writable:!0,value:new three.Vector3().fromArray(t)})}else typeof E.initial.offset==`object`&&typeof E.initial.offset.x==`number`&&typeof E.initial.offset.y==`number`&&typeof E.initial.offset.z==`number`&&defineProperty(k,`offset`,{enumerable:!0,writable:!0,value:new three.Vector3().fromArray([E.initial.offset.x,E.initial.offset.y,E.initial.offset.z])})}return defineProperty(t,`initial`,{enumerable:!0,configurable:!1,writable:!1,value:k}),t}function parseNull(e,t){return defineProperty(t,`issuer`,{enumerable:!0,configurable:!1,writable:!1,value:`null`}),defineProperty(t,`expire`,{enumerable:!0,configurable:!1,writable:!1,value:Object.freeze(new Date)}),defineProperty(t,`allowHosts`,{enumerable:!0,configurable:!1,writable:!1,value:Object.freeze([`*`])}),defineProperty(t,`name`,{enumerable:!0,configurable:!1,writable:!1,value:`Null`}),defineProperty(t,`workCode`,{enumerable:!0,value:`null-`+createUuid()}),defineProperty(t,`baseURL`,{enumerable:!0,value:`/`}),defineProperty(t,`model`,{enumerable:!0,configurable:!1,writable:!1,value:void 0}),defineProperty(t,`observers`,{enumerable:!0,configurable:!1,writable:!1,value:Object.freeze([])}),defineProperty(t,`initial`,{enumerable:!0,configurable:!1,writable:!1,value:(()=>{let e={};return defineProperty(e,`work`,{enumerable:!1,configurable:!1,writable:!1,value:t}),defineProperty(e,`mode`,{enumerable:!0,writable:!0,value:`Mapview`}),e})()}),t}function parsePano(e,t){var n,r;return defineProperty(t,`issuer`,{enumerable:!0,configurable:!1,writable:!1,value:`null`}),defineProperty(t,`expire`,{enumerable:!0,configurable:!1,writable:!1,value:Object.freeze(new Date)}),defineProperty(t,`allowHosts`,{enumerable:!0,configurable:!1,writable:!1,value:Object.freeze([`*`])}),defineProperty(t,`name`,{enumerable:!0,configurable:!1,writable:!1,value:String((n=e.name)==null?`Unknown`:n)}),defineProperty(t,`workCode`,{enumerable:!0,writable:!0,value:(r=e.code)==null?createUuid():r}),defineProperty(t,`baseURL`,{enumerable:!0,writable:!0,value:`/`}),defineProperty(t,`model`,{enumerable:!0,configurable:!1,writable:!1,value:void 0}),defineProperty(t,`observers`,{enumerable:!0,configurable:!1,writable:!1,value:(()=>{let n={};return defineProperty(n,`work`,{enumerable:!1,configurable:!1,writable:!1,value:t}),defineProperty(n,`index`,{enumerable:!0,configurable:!1,writable:!1,value:0}),defineProperty(n,`panoIndex`,{enumerable:!0,configurable:!1,writable:!1,value:0}),defineProperty(n,`panoId`,{enumerable:!0,configurable:!1,writable:!1,value:panoStringify({workCode:t.workCode,panoIndex:0})}),defineProperty(n,`floorIndex`,{enumerable:!0,configurable:!1,writable:!1,value:0}),defineProperty(n,`derivedId`,{enumerable:!0,configurable:!1,writable:!1,value:void 0}),defineProperty(n,`derivedIdStr`,{enumerable:!0,configurable:!1,writable:!1,value:void 0}),defineProperty(n,`active`,{enumerable:!0,configurable:!1,writable:!1,value:!0}),defineProperty(n,`loadable`,{enumerable:!0,configurable:!1,writable:!1,value:!1}),defineProperty(n,`position`,{enumerable:!0,configurable:!1,writable:!1,value:new three.Vector3(0,1.5,0)}),defineProperty(n,`standingPosition`,{enumerable:!0,configurable:!1,writable:!1,value:new three.Vector3(0,0,0)}),defineProperty(n,`quaternion`,{enumerable:!0,configurable:!1,writable:!1,value:new three.Quaternion(0,1,0,0)}),defineProperty(n,`matrix`,{enumerable:!0,configurable:!1,writable:!1,value:new three.Matrix4().compose(n.position,n.quaternion,PANO_TEXTURE_SCALE)}),defineProperty(n,`accessibleNodes`,{enumerable:!0,configurable:!1,writable:!1,value:Object.freeze([])}),defineProperty(n,`visibleNodes`,{enumerable:!0,configurable:!1,writable:!1,value:n.accessibleNodes}),defineProperty(n,`images`,{enumerable:!0,configurable:!1,writable:!1,value:(()=>{let n={};defineProperty(n,`work`,{enumerable:!1,configurable:!1,writable:!1,value:t});for(let t of FACE_ORDER$1)defineProperty(n,t,{enumerable:!0,configurable:!1,writable:!1,value:e[t]});return defineProperty(n,`sizeList`,{enumerable:!0,configurable:!1,writable:!1,value:Object.freeze([e.size])}),defineProperty(n,`tiles`,{enumerable:!0,configurable:!1,writable:!1,value:(()=>{let e=getImageSizeFromURL(n.front);if(!e)return;let r=n.sizeList.slice();if(r[0]){let e=getTileLevel(r[0]);if(e)for(let t=e-1;t>=0;t--)r.unshift(512*Math.pow(2,t))}if(r.length<=0)return;let o=[];for(let s of r){let r=getTileLevel(s);if(typeof r!=`number`)continue;let c={};if(defineProperty(c,`work`,{enumerable:!1,configurable:!1,writable:!1,value:t}),defineProperty(c,`level`,{enumerable:!0,configurable:!1,writable:!1,value:r}),s>e){defineProperty(c,`size`,{enumerable:!0,configurable:!1,writable:!1,value:s}),defineProperty(c,`scale`,{enumerable:!0,configurable:!1,writable:!1,value:1});for(let e of FACE_ORDER$1)defineProperty(c,e,{enumerable:!0,configurable:!1,writable:!1,value:replaceImageSize(n[e],s)})}else{defineProperty(c,`size`,{enumerable:!0,configurable:!1,writable:!1,value:e}),defineProperty(c,`scale`,{enumerable:!0,configurable:!1,writable:!1,value:s/e});for(let e of FACE_ORDER$1)defineProperty(c,e,{enumerable:!0,configurable:!1,writable:!1,value:n[e]})}o.push(c)}return o=sortTile(o),Object.freeze(o)})()}),defineProperty(n,`video`,{enumerable:!0,configurable:!1,writable:!1,value:void 0}),n})()}),Object.freeze([n])})()}),defineProperty(t,`initial`,{enumerable:!0,configurable:!1,writable:!1,value:(()=>{let e={};return defineProperty(e,`work`,{enumerable:!1,configurable:!1,writable:!1,value:t}),defineProperty(e,`mode`,{enumerable:!0,writable:!0,value:`Panorama`}),defineProperty(e,`panoIndex`,{enumerable:!0,writable:!0,value:0}),e})()}),t}var workVerifySet=new WeakSet,Work=class{constructor(e,t){this.observerBox=new three.Box3,this.observerBox=new three.Box3,this.transform=new three.Matrix4,this.shortPath=!1,this.jsonp=!1;let n;if(n=e===null?parseNull(e,this):typeof e==`object`&&typeof e.size==`number`&&typeof e.up==`string`&&typeof e.down==`string`&&typeof e.right==`string`&&typeof e.left==`string`&&typeof e.front==`string`&&typeof e.back==`string`?parsePano(e,this):parse(e,this),n instanceof Error)throw Error(`[PARSE FAILED]: `+n.message+`
|
|
939
939
|
Error work input:
|
|
940
940
|
`+JSON.stringify(e));workVerifySet.add(this);for(let e of this.observers)this.observerBox.expandByPoint(e.position),this.observerBox.expandByPoint(e.standingPosition);t.baseURL&&(this.baseURL=t.baseURL),t.transform&&(Array.isArray(t.transform)?this.transform.fromArray(t.transform):this.transform.copy(t.transform)),typeof t.jsonp==`boolean`&&(this.jsonp=t.jsonp),typeof t.shortPath==`boolean`&&(this.shortPath=t.shortPath),t.workCode&&(typeof t.workCode==`string`?this.workCode=t.workCode:typeof t.workCode==`function`&&(this.workCode=t.workCode(e)));{let e=this;this.options={get transform(){return e.transform}},this.raw={get works(){return[JSON.stringify(workToJson(e))]}}}}getURL(e){var t;if(!isAbsoluteURL(e)){if(this.jsonp===!0){e=e.replace(/([\?\#].*)?$/i,``);let t=sha256(`${e}`).slice(0,7);e=`${e}.${t}.jsonp`}if(this.shortPath===!0){let n=e.replace(e,``).split(`.`),r=(t=n.shift())==null?``:t,o=n.join(`.`);e=sha256(r)+(o?`.`+o:``)}e=pathJoin(this.baseURL,e)}return e=getFullURL(e),e}verifyURL(e){return typeof verifyURL(this.getURL(e),this.allowHosts)==`string`}toJSON(){return workToJson(this)}};Work.parse=parseWork;function parseWork(e,t){typeof e==`string`&&e.trim()[0]===`{`&&(e=JSON.parse(e));try{return new Work(e,t==null?{}:t)}catch(t){console.log(t);let n=t instanceof Error?t.message:String(t);throw Error(`[PARSE Error]: `+n+`
|
|
941
941
|
Error work input:
|
|
@@ -1496,7 +1496,7 @@ void main() {
|
|
|
1496
1496
|
}
|
|
1497
1497
|
`,uniforms:{cubemap:{value:null},scaleY:{value:1}},defines:{},transparent:!0,depthTest:!1,depthWrite:!1}));function renderCubeToEquirectangular(e,t,n){equirectangularFsQuad.material.setUniform(`cubemap`,t),equirectangularFsQuad.material.setUniform(`scaleY`,n?-1:1),equirectangularFsQuad.render(e),equirectangularFsQuad.material.setUniform(`cubemap`,null)}var scratchPrevClearColor$2=new three.Color,clippingPlanes$1=[],clearColor$2=0,clearAlpha$1=1;function getRgbaDataFromCubeTexture(e,t,n,r){let o=new three.WebGLRenderTarget(r.width,r.height,{depthBuffer:!1,stencilBuffer:!1,generateMipmaps:!1,magFilter:three.LinearFilter,minFilter:three.LinearFilter}),s=e.getRenderTarget();scratchPrevClearColor$2.copy(e.getClearColor());let c=e.getClearAlpha(),l=e.autoClear,u=e.autoClearColor,d=e.autoClearDepth,f=e.autoClearStencil,p=e.clippingPlanes;return e.autoClear=!0,e.autoClearColor=!0,e.autoClearDepth=!0,e.autoClearStencil=!0,e.clippingPlanes=clippingPlanes$1,e.setRenderTarget(o),e.setClearColor(clearColor$2,clearAlpha$1),renderCubeToEquirectangular(e,t,n),e.setRenderTarget(s),e.setClearColor(scratchPrevClearColor$2,c),e.autoClear=l,e.autoClearColor=u,e.autoClearDepth=d,e.autoClearStencil=f,e.clippingPlanes=p,e.readRenderTargetPixels(o,0,0,r.width,r.height,r.data),o.dispose(),r}var Hammer=(function(e,t,n,r){"use strict";var o=[``,`webkit`,`Moz`,`MS`,`ms`,`o`],s=t.createElement?t.createElement(`div`):r,c=`function`,l=Math.round,u=Math.abs,d=Date.now;function f(e,t,n){return setTimeout(b(e,n),t)}function p(e,t,n){return Array.isArray(e)?(m(e,n[t],n),!0):!1}function m(e,t,n){var o;if(e)if(e.forEach)e.forEach(t,n);else if(e.length!==r)for(o=0;o<e.length;)t.call(n,e[o],o,e),o++;else for(o in e)e.hasOwnProperty(o)&&t.call(n,e[o],o,e)}function h(t,n,r){var o=`DEPRECATED METHOD: `+n+`
|
|
1498
1498
|
`+r+` AT
|
|
1499
|
-
`;return function(){var n=Error(`get-stack-trace`),r=n&&n.stack?n.stack.replace(/^[^\(]+?[\n$]/gm,``).replace(/^\s+at\s+/gm,``).replace(/^Object.<anonymous>\s*\(/gm,`{anonymous}()@`):`Unknown Stack Trace`,s=e.console&&(e.console.warn||e.console.log);return s&&s.call(e.console,o,r),t.apply(this,arguments)}}var g=typeof Object.assign==`function`?Object.assign:function(e){if(e===r||e===null)throw TypeError(`Cannot convert undefined or null to object`);for(var t=Object(e),n=1;n<arguments.length;n++){var o=arguments[n];if(o!==r&&o!==null)for(var s in o)o.hasOwnProperty(s)&&(t[s]=o[s])}return t},_=h(function(e,t,n){for(var o=Object.keys(t),s=0;s<o.length;)(!n||n&&e[o[s]]===r)&&(e[o[s]]=t[o[s]]),s++;return e},`extend`,"Use `assign`."),v=h(function(e,t){return _(e,t,!0)},`merge`,"Use `assign`.");function y(e,t,n){var r=t.prototype,o=e.prototype=Object.create(r);o.constructor=e,o._super=r,n&&g(o,n)}function b(e,t){return function(){return e.apply(t,arguments)}}function S(e,t){return typeof e==c?e.apply(t&&t[0]||r,t):e}function C(e,t){return e===r?t:e}function w(e,t,n){m(O(t),function(t){e.addEventListener(t,n,!1)})}function T(e,t,n){m(O(t),function(t){e.removeEventListener(t,n,!1)})}function E(e,t){for(;e;){if(e==t)return!0;e=e.parentNode}return!1}function D(e,t){return e.indexOf(t)>-1}function O(e){return e.trim().split(/\s+/g)}function k(e,t,n){if(e.indexOf&&!n)return e.indexOf(t);for(var r=0;r<e.length;){if(n&&e[r][n]==t||!n&&e[r]===t)return r;r++}return-1}function A(e){return Array.prototype.slice.call(e,0)}function j(e,t,n){for(var r=[],o=[],s=0;s<e.length;){var c=t?e[s][t]:e[s];k(o,c)<0&&r.push(e[s]),o[s]=c,s++}return n&&(r=t?r.sort(function(e,n){return e[t]>n[t]}):r.sort()),r}function M(e,t){for(var n,s,c=t[0].toUpperCase()+t.slice(1),l=0;l<o.length;){if(n=o[l],s=n?n+c:t,s in e)return s;l++}return r}var N=1;function P(){return N++}function F(t){var n=t.ownerDocument||t;return n.defaultView||n.parentWindow||e}var I=/mobile|tablet|ip(ad|hone|od)|android/i,L=`ontouchstart`in e,R=M(e,`PointerEvent`)!==r,z=L&&I.test(navigator.userAgent),B=`touch`,V=`pen`,H=`mouse`,ee=`kinect`,te=25,U=1,W=2,G=4,K=8,ne=1,re=2,ie=4,ae=8,oe=16,q=re|ie,se=ae|oe,ce=q|se,le=[`x`,`y`],ue=[`clientX`,`clientY`];function J(e,t){var n=this;this.manager=e,this.callback=t,this.element=e.element,this.target=e.options.inputTarget,this.domHandler=function(t){S(e.options.enable,[e])&&n.handler(t)},this.init()}J.prototype={handler:function(){},init:function(){this.evEl&&w(this.element,this.evEl,this.domHandler),this.evTarget&&w(this.target,this.evTarget,this.domHandler),this.evWin&&w(F(this.element),this.evWin,this.domHandler)},destroy:function(){this.evEl&&T(this.element,this.evEl,this.domHandler),this.evTarget&&T(this.target,this.evTarget,this.domHandler),this.evWin&&T(F(this.element),this.evWin,this.domHandler)}};function de(e){var t;return t=e.options.inputClass||(R?Ae:z?Le:L?Ve:Te),new t(e,fe)}function fe(e,t,n){var r=n.pointers.length,o=n.changedPointers.length,s=t&U&&r-o===0,c=t&(G|K)&&r-o===0;n.isFirst=!!s,n.isFinal=!!c,s&&(e.session={}),n.eventType=t,pe(e,n),e.emit(`hammer.input`,n),e.recognize(n),e.session.prevInput=n}function pe(e,t){var n=e.session,r=t.pointers,o=r.length;n.firstInput||(n.firstInput=ge(t)),o>1&&!n.firstMultiple?n.firstMultiple=ge(t):o===1&&(n.firstMultiple=!1);var s=n.firstInput,c=n.firstMultiple,l=c?c.center:s.center,f=t.center=Y(r);t.timeStamp=d(),t.deltaTime=t.timeStamp-s.timeStamp,t.angle=ye(l,f),t.distance=X(l,f),me(n,t),t.offsetDirection=ve(t.deltaX,t.deltaY);var p=_e(t.deltaTime,t.deltaX,t.deltaY);t.overallVelocityX=p.x,t.overallVelocityY=p.y,t.overallVelocity=u(p.x)>u(p.y)?p.x:p.y,t.scale=c?xe(c.pointers,r):1,t.rotation=c?be(c.pointers,r):0,t.maxPointers=n.prevInput?t.pointers.length>n.prevInput.maxPointers?t.pointers.length:n.prevInput.maxPointers:t.pointers.length,he(n,t);var m=e.element;E(t.srcEvent.target,m)&&(m=t.srcEvent.target),t.target=m}function me(e,t){var n=t.center,r=e.offsetDelta||{},o=e.prevDelta||{},s=e.prevInput||{};(t.eventType===U||s.eventType===G)&&(o=e.prevDelta={x:s.deltaX||0,y:s.deltaY||0},r=e.offsetDelta={x:n.x,y:n.y}),t.deltaX=o.x+(n.x-r.x),t.deltaY=o.y+(n.y-r.y)}function he(e,t){var n=e.lastInterval||t,o=t.timeStamp-n.timeStamp,s,c,l,d;if(t.eventType!=K&&(o>te||n.velocity===r)){var f=t.deltaX-n.deltaX,p=t.deltaY-n.deltaY,m=_e(o,f,p);c=m.x,l=m.y,s=u(m.x)>u(m.y)?m.x:m.y,d=ve(f,p),e.lastInterval=t}else s=n.velocity,c=n.velocityX,l=n.velocityY,d=n.direction;t.velocity=s,t.velocityX=c,t.velocityY=l,t.direction=d}function ge(e){for(var t=[],n=0;n<e.pointers.length;)t[n]={clientX:l(e.pointers[n].clientX),clientY:l(e.pointers[n].clientY)},n++;return{timeStamp:d(),pointers:t,center:Y(t),deltaX:e.deltaX,deltaY:e.deltaY}}function Y(e){var t=e.length;if(t===1)return{x:l(e[0].clientX),y:l(e[0].clientY)};for(var n=0,r=0,o=0;o<t;)n+=e[o].clientX,r+=e[o].clientY,o++;return{x:l(n/t),y:l(r/t)}}function _e(e,t,n){return{x:t/e||0,y:n/e||0}}function ve(e,t){return e===t?ne:u(e)>=u(t)?e<0?re:ie:t<0?ae:oe}function X(e,t,n){n||(n=le);var r=t[n[0]]-e[n[0]],o=t[n[1]]-e[n[1]];return Math.sqrt(r*r+o*o)}function ye(e,t,n){n||(n=le);var r=t[n[0]]-e[n[0]],o=t[n[1]]-e[n[1]];return Math.atan2(o,r)*180/Math.PI}function be(e,t){return ye(t[1],t[0],ue)+ye(e[1],e[0],ue)}function xe(e,t){return X(t[0],t[1],ue)/X(e[0],e[1],ue)}var Se={mousedown:U,mousemove:W,mouseup:G},Ce=`mousedown`,we=`mousemove mouseup`;function Te(){this.evEl=Ce,this.evWin=we,this.pressed=!1,J.apply(this,arguments)}y(Te,J,{handler:function(e){var t=Se[e.type];t&U&&(e.button===0||e.button===2)&&(this.pressed=!0),t&W&&e.which!==1&&(t=G),this.pressed&&(t&G&&(this.pressed=!1),this.callback(this.manager,t,{pointers:[e],changedPointers:[e],pointerType:H,srcEvent:e}))}});var Ee={pointerdown:U,pointermove:W,pointerup:G,pointercancel:K,pointerout:K},De={2:B,3:V,4:H,5:ee},Oe=`pointerdown`,ke=`pointermove pointerup pointercancel`;e.MSPointerEvent&&!e.PointerEvent&&(Oe=`MSPointerDown`,ke=`MSPointerMove MSPointerUp MSPointerCancel`);function Ae(){this.evEl=Oe,this.evWin=ke,J.apply(this,arguments),this.store=this.manager.session.pointerEvents=[]}y(Ae,J,{handler:function(e){var t=this.store,n=!1,r=!1,o=Ee[e.type.toLowerCase().replace(`ms`,``)],s=De[e.pointerType]||e.pointerType,c=s==B,l=k(t,e.pointerId,`pointerId`);o&U&&(e.button===0||e.button===2||c)?l<0&&(t.push(e),l=t.length-1):o&(G|K)?n=!0:!c&&e.buttons===0&&(n=!0,r=!0,o=Ee.pointerup),!(l<0)&&(r||(t[l]=e),this.callback(this.manager,o,{pointers:t,changedPointers:[e],pointerType:s,srcEvent:t[l]}),n&&t.splice(l,1))}});var je={touchstart:U,touchmove:W,touchend:G,touchcancel:K},Z=`touchstart`,Me=`touchstart touchmove touchend touchcancel`;function Ne(){this.evTarget=Z,this.evWin=Me,this.started=!1,J.apply(this,arguments)}y(Ne,J,{handler:function(e){var t=je[e.type];if(t===U&&(this.started=!0),this.started){var n=Pe.call(this,e,t);t&(G|K)&&n[0].length-n[1].length===0&&(this.started=!1),this.callback(this.manager,t,{pointers:n[0],changedPointers:n[1],pointerType:B,srcEvent:e})}}});function Pe(e,t){var n=A(e.touches),r=A(e.changedTouches);return t&(G|K)&&(n=j(n.concat(r),`identifier`,!0)),[n,r]}var Fe={touchstart:U,touchmove:W,touchend:G,touchcancel:K},Ie=`touchstart touchmove touchend touchcancel`;function Le(){this.evTarget=Ie,this.targetIds={},J.apply(this,arguments)}y(Le,J,{handler:function(e){var t=Fe[e.type],n=Re.call(this,e,t);n&&this.callback(this.manager,t,{pointers:n[0],changedPointers:n[1],pointerType:B,srcEvent:e})}});function Re(e,t){var n=A(e.touches),r=this.targetIds;if(t&(U|W)&&n.length===1)return r[n[0].identifier]=!0,[n,n];var o,s,c=A(e.changedTouches),l=[],u=this.target;if(s=n.filter(function(e){return E(e.target,u)}),t===U)for(o=0;o<s.length;)r[s[o].identifier]=!0,o++;for(o=0;o<c.length;)r[c[o].identifier]&&l.push(c[o]),t&(G|K)&&delete r[c[o].identifier],o++;if(l.length)return[j(s.concat(l),`identifier`,!0),l]}var ze=2500,Be=25;function Ve(){J.apply(this,arguments);var e=b(this.handler,this);this.touch=new Le(this.manager,e),this.mouse=new Te(this.manager,e),this.primaryTouch=null,this.lastTouches=[]}y(Ve,J,{handler:function(e,t,n){var r=n.pointerType==B,o=n.pointerType==H;if(!(o&&n.sourceCapabilities&&n.sourceCapabilities.firesTouchEvents)){if(r)He.call(this,t,n);else if(o&&We.call(this,n))return;this.callback(e,t,n)}},destroy:function(){this.touch.destroy(),this.mouse.destroy()}});function He(e,t){e&U?(this.primaryTouch=t.changedPointers[0].identifier,Ue.call(this,t)):e&(G|K)&&Ue.call(this,t)}function Ue(e){var t=e.changedPointers[0];if(t.identifier===this.primaryTouch){var n={x:t.clientX,y:t.clientY};this.lastTouches.push(n);var r=this.lastTouches;setTimeout(function(){var e=r.indexOf(n);e>-1&&r.splice(e,1)},ze)}}function We(e){for(var t=e.srcEvent.clientX,n=e.srcEvent.clientY,r=0;r<this.lastTouches.length;r++){var o=this.lastTouches[r],s=Math.abs(t-o.x),c=Math.abs(n-o.y);if(s<=Be&&c<=Be)return!0}return!1}var Ge=s?M(s.style,`touchAction`):r,Ke=Ge!==r,qe=`compute`,Je=`auto`,Ye=`manipulation`,Xe=`none`,Ze=`pan-x`,Qe=`pan-y`,$e=rt();function tt(e,t){this.manager=e,this.set(t)}tt.prototype={set:function(e){e==qe&&(e=this.compute()),Ke&&this.manager.element.style&&$e[e]&&(this.manager.element.style[Ge]=e),this.actions=e.toLowerCase().trim()},update:function(){this.set(this.manager.options.touchAction)},compute:function(){var e=[];return m(this.manager.recognizers,function(t){S(t.options.enable,[t])&&(e=e.concat(t.getTouchAction()))}),nt(e.join(` `))},preventDefaults:function(e){var t=e.srcEvent,n=e.offsetDirection;if(this.manager.session.prevented){t.preventDefault();return}var r=this.actions,o=D(r,Xe)&&!$e[Xe],s=D(r,Qe)&&!$e[Qe],c=D(r,Ze)&&!$e[Ze];if(o){var l=e.pointers.length===1,u=e.distance<2,d=e.deltaTime<250;if(l&&u&&d)return}if(!(c&&s)&&(o||s&&n&q||c&&n&se))return this.preventSrc(t)},preventSrc:function(e){this.manager.session.prevented=!0,e.preventDefault()}};function nt(e){if(D(e,Xe))return Xe;var t=D(e,Ze),n=D(e,Qe);return t&&n?Xe:t||n?t?Ze:Qe:D(e,Ye)?Ye:Je}function rt(){if(!Ke)return!1;var t={},n=e.CSS&&e.CSS.supports;return[`auto`,`manipulation`,`pan-y`,`pan-x`,`pan-x pan-y`,`none`].forEach(function(r){t[r]=n?e.CSS.supports(`touch-action`,r):!0}),t}var it=1,Q=2,at=4,ot=8,st=ot,ct=16,lt=32;function ut(e){this.options=g({},this.defaults,e||{}),this.id=P(),this.manager=null,this.options.enable=C(this.options.enable,!0),this.state=it,this.simultaneous={},this.requireFail=[]}ut.prototype={defaults:{},set:function(e){return g(this.options,e),this.manager&&this.manager.touchAction.update(),this},recognizeWith:function(e){if(p(e,`recognizeWith`,this))return this;var t=this.simultaneous;return e=pt(e,this),t[e.id]||(t[e.id]=e,e.recognizeWith(this)),this},dropRecognizeWith:function(e){return p(e,`dropRecognizeWith`,this)?this:(e=pt(e,this),delete this.simultaneous[e.id],this)},requireFailure:function(e){if(p(e,`requireFailure`,this))return this;var t=this.requireFail;return e=pt(e,this),k(t,e)===-1&&(t.push(e),e.requireFailure(this)),this},dropRequireFailure:function(e){if(p(e,`dropRequireFailure`,this))return this;e=pt(e,this);var t=k(this.requireFail,e);return t>-1&&this.requireFail.splice(t,1),this},hasRequireFailures:function(){return this.requireFail.length>0},canRecognizeWith:function(e){return!!this.simultaneous[e.id]},emit:function(e){var t=this,n=this.state;function r(n){t.manager.emit(n,e)}n<ot&&r(t.options.event+dt(n)),r(t.options.event),e.additionalEvent&&r(e.additionalEvent),n>=ot&&r(t.options.event+dt(n))},tryEmit:function(e){if(this.canEmit())return this.emit(e);this.state=lt},canEmit:function(){for(var e=0;e<this.requireFail.length;){if(!(this.requireFail[e].state&(lt|it)))return!1;e++}return!0},recognize:function(e){var t=g({},e);if(!S(this.options.enable,[this,t])){this.reset(),this.state=lt;return}this.state&(st|ct|lt)&&(this.state=it),this.state=this.process(t),this.state&(Q|at|ot|ct)&&this.tryEmit(t)},process:function(e){},getTouchAction:function(){},reset:function(){}};function dt(e){return e&ct?`cancel`:e&ot?`end`:e&at?`move`:e&Q?`start`:``}function ft(e){return e==oe?`down`:e==ae?`up`:e==re?`left`:e==ie?`right`:``}function pt(e,t){var n=t.manager;return n?n.get(e):e}function $(){ut.apply(this,arguments)}y($,ut,{defaults:{pointers:1},attrTest:function(e){var t=this.options.pointers;return t===0||e.pointers.length===t},process:function(e){var t=this.state,n=e.eventType,r=t&(Q|at),o=this.attrTest(e);return r&&(n&K||!o)?t|ct:r||o?n&G?t|ot:t&Q?t|at:Q:lt}});function mt(){$.apply(this,arguments),this.pX=null,this.pY=null}y(mt,$,{defaults:{event:`pan`,threshold:10,pointers:1,direction:ce},getTouchAction:function(){var e=this.options.direction,t=[];return e&q&&t.push(Qe),e&se&&t.push(Ze),t},directionTest:function(e){var t=this.options,n=!0,r=e.distance,o=e.direction,s=e.deltaX,c=e.deltaY;return o&t.direction||(t.direction&q?(o=s===0?ne:s<0?re:ie,n=s!=this.pX,r=Math.abs(e.deltaX)):(o=c===0?ne:c<0?ae:oe,n=c!=this.pY,r=Math.abs(e.deltaY))),e.direction=o,n&&r>t.threshold&&o&t.direction},attrTest:function(e){return $.prototype.attrTest.call(this,e)&&(this.state&Q||!(this.state&Q)&&this.directionTest(e))},emit:function(e){this.pX=e.deltaX,this.pY=e.deltaY;var t=ft(e.direction);t&&(e.additionalEvent=this.options.event+t),this._super.emit.call(this,e)}});function ht(){$.apply(this,arguments)}y(ht,$,{defaults:{event:`pinch`,threshold:0,pointers:2},getTouchAction:function(){return[Xe]},attrTest:function(e){return this._super.attrTest.call(this,e)&&(Math.abs(e.scale-1)>this.options.threshold||this.state&Q)},emit:function(e){if(e.scale!==1){var t=e.scale<1?`in`:`out`;e.additionalEvent=this.options.event+t}this._super.emit.call(this,e)}});function gt(){ut.apply(this,arguments),this._timer=null,this._input=null}y(gt,ut,{defaults:{event:`press`,pointers:1,time:251,threshold:9},getTouchAction:function(){return[Je]},process:function(e){var t=this.options,n=e.pointers.length===t.pointers,r=e.distance<t.threshold,o=e.deltaTime>t.time;if(this._input=e,!r||!n||e.eventType&(G|K)&&!o)this.reset();else if(e.eventType&U)this.reset(),this._timer=f(function(){this.state=st,this.tryEmit()},t.time,this);else if(e.eventType&G)return st;return lt},reset:function(){clearTimeout(this._timer)},emit:function(e){this.state===st&&(e&&e.eventType&G?this.manager.emit(this.options.event+`up`,e):(this._input.timeStamp=d(),this.manager.emit(this.options.event,this._input)))}});function _t(){$.apply(this,arguments)}y(_t,$,{defaults:{event:`rotate`,threshold:0,pointers:2},getTouchAction:function(){return[Xe]},attrTest:function(e){return this._super.attrTest.call(this,e)&&(Math.abs(e.rotation)>this.options.threshold||this.state&Q)}});function vt(){$.apply(this,arguments)}y(vt,$,{defaults:{event:`swipe`,threshold:10,velocity:.3,direction:q|se,pointers:1},getTouchAction:function(){return mt.prototype.getTouchAction.call(this)},attrTest:function(e){var t=this.options.direction,n;return t&(q|se)?n=e.overallVelocity:t&q?n=e.overallVelocityX:t&se&&(n=e.overallVelocityY),this._super.attrTest.call(this,e)&&t&e.offsetDirection&&e.distance>this.options.threshold&&e.maxPointers==this.options.pointers&&u(n)>this.options.velocity&&e.eventType&G},emit:function(e){var t=ft(e.offsetDirection);t&&this.manager.emit(this.options.event+t,e),this.manager.emit(this.options.event,e)}});function yt(){ut.apply(this,arguments),this.pTime=!1,this.pCenter=!1,this._timer=null,this._input=null,this.count=0}y(yt,ut,{defaults:{event:`tap`,pointers:1,taps:1,interval:300,time:250,threshold:9,posThreshold:10},getTouchAction:function(){return[Ye]},process:function(e){var t=this.options,n=e.pointers.length===t.pointers,r=e.distance<t.threshold,o=e.deltaTime<t.time;if(this.reset(),e.eventType&U&&this.count===0)return this.failTimeout();if(r&&o&&n){if(e.eventType!=G)return this.failTimeout();var s=this.pTime?e.timeStamp-this.pTime<t.interval:!0,c=!this.pCenter||X(this.pCenter,e.center)<t.posThreshold;if(this.pTime=e.timeStamp,this.pCenter=e.center,!c||!s?this.count=1:this.count+=1,this._input=e,this.count%t.taps===0)return this.hasRequireFailures()?(this._timer=f(function(){this.state=st,this.tryEmit()},t.interval,this),Q):st}return lt},failTimeout:function(){return this._timer=f(function(){this.state=lt},this.options.interval,this),lt},reset:function(){clearTimeout(this._timer)},emit:function(){this.state==st&&(this._input.tapCount=this.count,this.manager.emit(this.options.event,this._input))}});function bt(e,t){return t=t||{},t.recognizers=C(t.recognizers,bt.defaults.preset),new Ct(e,t)}bt.VERSION=`2.0.7`,bt.defaults={domEvents:!1,touchAction:qe,enable:!0,inputTarget:null,inputClass:null,preset:[[_t,{enable:!1}],[ht,{enable:!1},[`rotate`]],[vt,{direction:q}],[mt,{direction:q},[`swipe`]],[yt],[yt,{event:`doubletap`,taps:2},[`tap`]],[gt]],cssProps:{userSelect:`none`,touchSelect:`none`,touchCallout:`none`,contentZooming:`none`,userDrag:`none`,tapHighlightColor:`rgba(0,0,0,0)`}};var xt=1,St=2;function Ct(e,t){this.options=g({},bt.defaults,t||{}),this.options.inputTarget=this.options.inputTarget||e,this.handlers={},this.session={},this.recognizers=[],this.oldCssProps={},this.element=e,this.input=de(this),this.touchAction=new tt(this,this.options.touchAction),wt(this,!0),m(this.options.recognizers,function(e){var t=this.add(new e[0](e[1]));e[2]&&t.recognizeWith(e[2]),e[3]&&t.requireFailure(e[3])},this)}Ct.prototype={set:function(e){return g(this.options,e),e.touchAction&&this.touchAction.update(),e.inputTarget&&(this.input.destroy(),this.input.target=e.inputTarget,this.input.init()),this},stop:function(e){this.session.stopped=e?St:xt},recognize:function(e){var t=this.session;if(!t.stopped){this.touchAction.preventDefaults(e);var n,r=this.recognizers,o=t.curRecognizer;(!o||o&&o.state&st)&&(o=t.curRecognizer=null);for(var s=0;s<r.length;)n=r[s],t.stopped!==St&&(!o||n==o||n.canRecognizeWith(o))?n.recognize(e):n.reset(),!o&&n.state&(Q|at|ot)&&(o=t.curRecognizer=n),s++}},get:function(e){if(e instanceof ut)return e;for(var t=this.recognizers,n=0;n<t.length;n++)if(t[n].options.event==e)return t[n];return null},add:function(e){if(p(e,`add`,this))return this;var t=this.get(e.options.event);return t&&this.remove(t),this.recognizers.push(e),e.manager=this,this.touchAction.update(),e},remove:function(e){if(p(e,`remove`,this))return this;if(e=this.get(e),e){var t=this.recognizers,n=k(t,e);n!==-1&&(t.splice(n,1),this.touchAction.update())}return this},on:function(e,t){if(e!==r&&t!==r){var n=this.handlers;return m(O(e),function(e){n[e]=n[e]||[],n[e].push(t)}),this}},off:function(e,t){if(e!==r){var n=this.handlers;return m(O(e),function(e){t?n[e]&&n[e].splice(k(n[e],t),1):delete n[e]}),this}},emit:function(e,t){this.options.domEvents&&Tt(e,t);var n=this.handlers[e]&&this.handlers[e].slice();if(!(!n||!n.length)){t.type=e,t.preventDefault=function(){t.srcEvent.preventDefault()};for(var r=0;r<n.length;)n[r](t),r++}},destroy:function(){this.element&&wt(this,!1),this.handlers={},this.session={},this.input.destroy(),this.element=null}};function wt(e,t){var n=e.element;if(n.style){var r;m(e.options.cssProps,function(o,s){r=M(n.style,s),t?(e.oldCssProps[r]=n.style[r],n.style[r]=o):n.style[r]=e.oldCssProps[r]||``}),t||(e.oldCssProps={})}}function Tt(e,n){var r=t.createEvent(`Event`);r.initEvent(e,!0,!0),r.gesture=n,n.target.dispatchEvent(r)}return g(bt,{INPUT_START:U,INPUT_MOVE:W,INPUT_END:G,INPUT_CANCEL:K,STATE_POSSIBLE:it,STATE_BEGAN:Q,STATE_CHANGED:at,STATE_ENDED:ot,STATE_RECOGNIZED:st,STATE_CANCELLED:ct,STATE_FAILED:lt,DIRECTION_NONE:ne,DIRECTION_LEFT:re,DIRECTION_RIGHT:ie,DIRECTION_UP:ae,DIRECTION_DOWN:oe,DIRECTION_HORIZONTAL:q,DIRECTION_VERTICAL:se,DIRECTION_ALL:ce,Manager:Ct,Input:J,TouchAction:tt,TouchInput:Le,MouseInput:Te,PointerEventInput:Ae,TouchMouseInput:Ve,SingleTouchInput:Ne,Recognizer:ut,AttrRecognizer:$,Tap:yt,Pan:mt,Swipe:vt,Pinch:ht,Rotate:_t,Press:gt,on:w,off:T,each:m,merge:v,extend:_,assign:g,inherit:y,bindFn:b,prefixed:M}),bt})(typeof window<`u`?window:{},typeof document<`u`?document:{},`Hammer`),BaseController=class e extends Subscribe{static parseArgs(t){return t instanceof e?t:Object.assign({},t)}static initAnimationEndState(e){var t,n,r,o,s,c,l,u;let d=this.parseArgs(e),{state:f,currentState:p}=d.initial,m=typeof f.panoIndex==`number`?{workCode:(r=(t=f.workCode)==null?(n=d.works[0])==null?void 0:n.workCode:t)==null?``:r,panoIndex:f.panoIndex}:{workCode:p.workCode,panoIndex:p.panoIndex};return Object.assign(Object.assign({},m),{mode:``,longitude:(o=f.longitude)==null?p.longitude:o,latitude:(s=f.latitude)==null?p.latitude:s,fov:(c=f.fov)==null?p.fov:c,offset:(l=f.offset)==null?p.offset:l,distance:(u=f.distance)==null?p.distance:u})}constructor(t){var n,r,o;super();let s=e.parseArgs(t);this.mode=``,this.pending=new Set,this.userAction=s.initial.userAction,this.destroyed=!1,this.fiveId=s.fiveId,this.scene=s.scene,this.modelScene=s.modelScene,this.xrCustomObjectsScene=s.xrCustomObjectsScene,this.helper=s.helper,this.camera=s.camera,this.renderer=s.renderer,this.viewport=s.viewport,this.element=s.element,this.enableWheel=s.enableWheel,this.works=s.works,this.imageOptions=s.imageOptions,this.videoTexture=s.videoTexture,this.extraElements=s.extraElements,this.initial=s.initial,this.currentPano=typeof this.initial.state.panoIndex==`number`?{workCode:(o=(n=this.initial.state.workCode)==null?(r=s.works[0])==null?void 0:r.workCode:n)==null?``:o,panoIndex:this.initial.state.panoIndex}:{workCode:this.initial.currentState.workCode,panoIndex:this.initial.currentState.panoIndex},this.needsRender=!0,this.cameraMotion=new Motion({longitude:{value:this.camera.pose.longitude,circle:[0,Math.PI*2]},latitude:this.camera.pose.latitude,fov:this.camera.pose.fov}),this.inMomentumMovement=null,this.eventUnbinds=[s.element].concat(s.extraElements||[]).map(e=>this.bindEvents(e)),this.initAnimationIsReady=!1,this.pending.add(`init-animation`),this.initAnimationReady=new Promise(e=>{AnimationFrameLoop.shared.add(()=>{this.initAnimation().then(()=>{this.initAnimationIsReady=!0,this.pending.delete(`init-animation`),e()})},!0,0)})}updateConfiguration(e){return!0}destroy(){var e;this.stopMomentumMovement(),this.destroyed=!0,this.off(),this.cameraMotion.dispose();for(let e of this.eventUnbinds)e();this.panState=void 0,(e=this.pressState)==null||e.stop(),this.pressState=void 0}isReady(){return this.inMomentumMovement===null&&this.pending.size===0&&this.cameraMotion.ended===!0}bindExtraElement(e){for(let t of this.eventUnbinds)if(t.element===e)return;this.eventUnbinds.push(this.bindEvents(e))}unbindExtraElement(e){let t=[];for(let n of this.eventUnbinds)n.element===e?n():t.push(n);this.eventUnbinds=t}updateModel(e){this.needsRender=!0}updateWork(e,t,n,r){return this.works=e,this.userAction=r,!1}updateTime(e,t,...n){if(this.destroyed)return;let r={};this.cameraMotion.ended&&(this.cameraMotion.update(e),r.longitude=this.cameraMotion.value.longitude,r.latitude=this.cameraMotion.value.latitude,r.fov=this.cameraMotion.value.fov),isEmptyObject(r)&&this.setCamera(r)}render(){return!1}updateCamera(e,t,n){return this.initAnimationReady.then(()=>{this.userAction=n,this.stopMomentumMovement();let r={};return e.longitude!==void 0&&(r.longitude=e.longitude),e.latitude!==void 0&&(r.latitude=e.latitude),e.fov!==void 0&&(r.fov=e.fov),this.cameraMotion.set(r,t).catch(noop)})}updateCameraWithKeyframes(e,t,n){return this.initAnimationReady.then(()=>{this.userAction=n,this.stopMomentumMovement();let r=[];for(let t of e)r.push({key:t.key,progress:t.progress,value:{longitude:t.value.longitude,latitude:t.value.latitude,fov:t.value.fov}});return this.cameraMotion.setKeyframes(r,t)})}getTargetState(){let e=this.cameraMotion.getKeyFrameSegment(now())[1];return Object.assign(Object.assign({},this.currentPano),{mode:this.mode,longitude:e.value.longitude,latitude:e.value.latitude,fov:e.value.fov,offset:this.camera.pose.offset.clone(),distance:this.camera.pose.distance})}initAnimation(){let{state:t,currentState:n,duration:r,userAction:o}=this.initial,s=e.initAnimationEndState(this);return this.userAction=o,this.emit(`initAnimation.start`,createEvent(`initAnimation.start`,{state:s,userAction:this.userAction})),this.emit(`initAnimation.end`,createEvent(`initAnimation.end`,{state:s,userAction:this.userAction})),Promise.resolve()}setCamera(e={}){var t,n,r,o,s;let c=(t=e.longitude)==null?this.camera.pose.longitude:t,l=(n=e.latitude)==null?this.camera.pose.latitude:n,u=(r=e.fov)==null?this.camera.pose.fov:r,d=(o=e.distance)==null?this.camera.pose.distance:o,f=(s=e.offset)==null?this.camera.pose.offset:s,p=notSimilarValue(c,this.camera.pose.longitude,Math.PI*2)||notSimilarValue(l,this.camera.pose.latitude),m=notSimilarValue(u,this.camera.pose.fov),h=notSimilarValue(d,this.camera.pose.distance),g=notSimilarVector3(f,this.camera.pose.offset);(m||p||g||h)&&(this.camera.setFromPose({longitude:c,latitude:l,fov:u,distance:d,offset:f}),this.emit(`camera.update`,createEvent(`camera.update`,{userAction:this.userAction,state:Object.assign(Object.assign({},this.currentPano),{mode:this.mode,longitude:c,latitude:l,fov:u,offset:f,distance:d})})),this.needsRender=!0)}stopMomentumMovement(){if(this.inMomentumMovement&&this.inMomentumMovement.event&&!this.inMomentumMovement.event.defaultPrevented&&!this.inMomentumMovement.event.isFinal){let e=createEvent(`gesture.momentum`,Object.assign(Object.assign({},this.inMomentumMovement.event),{isFirst:!1,isFinal:!0}));this.emit(`gesture.create`,e),this.emit(`gesture.momentum`,e)}this.inMomentumMovement=null}onPanGesture(e){this.stopMomentumMovement(),this.emit(`gesture.pan`,e)}onTapGesture(e){this.stopMomentumMovement(),this.emit(`gesture.tap`,e)}onDblTapGesture(e){this.stopMomentumMovement(),this.emit(`gesture.dbltap`,e),!e.defaultPrevented&&(e.type=`gesture.tap`,this.onTapGesture(e))}onPressGesture(e){this.stopMomentumMovement(),this.emit(`gesture.press`,e)}onPinchGesture(e){this.stopMomentumMovement(),this.emit(`gesture.pinch`,e)}onMouseWheel(e){this.stopMomentumMovement(),this.emit(`gesture.mousewheel`,e)}onMouseMove(e){this.stopMomentumMovement(),this.emit(`gesture.mousemove`,e)}relativeClientPosition(e){let{top:t,left:n,width:r,height:o}=this.element.getBoundingClientRect();return n+=r*this.viewport.left,t+=o*(1-this.viewport.bottom-this.viewport.height),r*=this.viewport.width,o*=this.viewport.height,new three.Vector2((e.x-n)/r*2-1,-(e.y-t)/o*2+1)}createRaycasterFromCamera(e,t){let n=new three.Raycaster;return n.params.Points={threshold:.1},n.firstHitOnly=!0,n.near=t.near,n.far=t.far,n.setFromCamera(e,this.camera),n}bindEvents(e){let t=e=>{let t=this.relativeClientPosition(e);return!(Math.abs(t.x)>1||Math.abs(t.y)>1)},n=e=>({button:`button`in e?e.button:0,buttons:`buttons`in e?e.buttons:0,shiftKey:`shiftKey`in e?e.shiftKey:!1,ctrlKey:`ctrlKey`in e?e.ctrlKey:!1,altKey:`altKey`in e?e.altKey:!1,metaKey:`metaKey`in e?e.metaKey:!1}),r=new Hammer.Manager(e),o=e=>e.session.firstInput||null,s=new Hammer.Pan({threshold:10,pointers:0}),c=new Hammer.Tap({interval:410}),l=new Hammer.Pinch({threshold:0,pointers:2});r.add([s,c,l]),r.on(`panstart pan`,e=>{let s=n(e.srcEvent),c=o(r);if(c&&!t(c.center))return;let l=createEvent(`gesture.pan`,{target:e.target,pointerType:e.pointerType,srcEvent:e.srcEvent,pointers:e.pointers.map(e=>{let t=this.relativeClientPosition(e),n=this.createRaycasterFromCamera(t,this.camera);return Object.assign(Object.assign({x:e.x,y:e.y,delta:0},s),{coords:t,raycaster:n})}),isFirst:e.isFirst||e.type==`panstart`,isFinal:e.isFinal,scale:e.scale,center:(e=>{let t=this.relativeClientPosition(e),n=this.createRaycasterFromCamera(t,this.camera);return Object.assign(Object.assign({x:e.x,y:e.y,delta:0},s),{coords:t,raycaster:n})})(e.center),velocityX:e.velocityX,velocityY:e.velocityY,overallVelocityX:e.overallVelocityX,overallVelocityY:e.overallVelocityY,userAction:!0,state:Object.assign(Object.assign({mode:this.mode},this.currentPano),clonePose(this.camera.pose))});this.emit(`gesture.create`,l),this.onPanGesture(l),y()}),r.on(`tap`,e=>{let s=n(e.srcEvent);if(e.pointerType===`mouse`&&s.button!==0)return;let c=o(r);if(c&&!t(c.center))return;let l=createEvent(`gesture.tap`,{target:e.target,pointerType:e.pointerType,srcEvent:e.srcEvent,pointers:e.pointers.map(e=>{let t=this.relativeClientPosition(e),n=this.createRaycasterFromCamera(t,this.camera);return Object.assign(Object.assign({x:e.x,y:e.y,delta:0},s),{coords:t,raycaster:n})}),isFirst:!0,isFinal:!0,scale:e.scale,center:(e=>{let t=this.relativeClientPosition(e),n=this.createRaycasterFromCamera(t,this.camera);return Object.assign(Object.assign({x:e.x,y:e.y,delta:0},s),{coords:t,raycaster:n})})(e.center),velocityX:e.velocityX,velocityY:e.velocityY,overallVelocityX:e.overallVelocityX,overallVelocityY:e.overallVelocityY,userAction:!0,state:Object.assign(Object.assign({mode:this.mode},this.currentPano),clonePose(this.camera.pose))});this.emit(`gesture.create`,l),this.onTapGesture(l),y()}),r.on(`pinchstart pinch pinchend`,e=>{let s=n(e.srcEvent),c=o(r);if(c&&!t(c.center))return;let l=createEvent(`gesture.pinch`,{target:e.target,pointerType:e.pointerType,srcEvent:e.srcEvent,pointers:e.pointers.map(e=>{var t;let n=this.relativeClientPosition(e),r=new three.Raycaster;return r.params.Points={threshold:.1},r.setFromCamera(n,this.camera),Object.assign(Object.assign({x:e.x,y:e.y,delta:(t=e.delta)==null?0:t},s),{coords:n,raycaster:r})}),isFirst:e.type===`pinchstart`,isFinal:e.type===`pinchend`,scale:e.scale,center:(e=>{let t=this.relativeClientPosition(e),n=this.createRaycasterFromCamera(t,this.camera);return Object.assign(Object.assign({x:e.x,y:e.y,delta:0},s),{coords:t,raycaster:n})})(e.center),velocityX:e.velocityX,velocityY:e.velocityY,overallVelocityX:e.overallVelocityX,overallVelocityY:e.overallVelocityY,userAction:!0,state:Object.assign(Object.assign({mode:this.mode},this.currentPano),clonePose(this.camera.pose))});this.emit(`gesture.create`,l),this.onPinchGesture(l),y()}),r.on(`dbltap`,e=>{let s=n(e.srcEvent);if(e.pointerType===`mouse`&&s.button!==0)return;let c=o(r);if(c&&!t(c.center))return;let l=createEvent(`gesture.dbltap`,{target:e.target,pointerType:e.pointerType,srcEvent:e.srcEvent,pointers:e.pointers.map(e=>{let t=this.relativeClientPosition(e),n=this.createRaycasterFromCamera(t,this.camera);return Object.assign(Object.assign({x:e.x,y:e.y,delta:0},s),{coords:t,raycaster:n})}),isFirst:!0,isFinal:!0,scale:e.scale,center:(e=>{let t=this.relativeClientPosition(e),n=this.createRaycasterFromCamera(t,this.camera);return Object.assign(Object.assign({x:e.x,y:e.y,delta:0},s),{coords:t,raycaster:n})})(e.center),velocityX:e.velocityX,velocityY:e.velocityY,overallVelocityX:e.overallVelocityX,overallVelocityY:e.overallVelocityY,userAction:!0,state:Object.assign(Object.assign({mode:this.mode},this.currentPano),clonePose(this.camera.pose))});this.emit(`gesture.create`,l),this.onDblTapGesture(l),y()});let u=null,d=null,f=(e,t,r)=>{let o={x:r.clientX,y:r.clientY},s=this.relativeClientPosition(o),c=this.createRaycasterFromCamera(s,this.camera),l=Object.assign(Object.assign(Object.assign(Object.assign({},o),{coords:s,raycaster:c}),n(r)),{delta:0}),u=e===`pinchend`?t:t-r.deltaY/280;return createEvent(`gesture.pinch`,{target:r.target,pointerType:`mouse`,srcEvent:r,pointers:[Object.assign({},l)],isFirst:e===`pinchstart`,isFinal:e===`pinchend`,scale:clamp$1(u,.1,10),center:Object.assign({},l),velocityX:0,velocityY:0,overallVelocityX:0,overallVelocityY:0,userAction:!0,state:Object.assign(Object.assign({mode:this.mode},this.currentPano),clonePose(this.camera.pose))})},p=e=>{var r;if(t({x:e.clientX,y:e.clientY})){if(e.preventDefault(),e.ctrlKey){let t=(r=u==null?void 0:u.prevEvent.scale)==null?1:r,n=f(u?`pinch`:`pinchstart`,t,e);this.emit(`gesture.create`,n),u===null?u={firstEvent:n,prevEvent:n}:u.prevEvent=n,this.emit(`gesture.create`,n),this.onPinchGesture(n),d!==null&&window.clearTimeout(d),d=window.setTimeout(()=>{var t;d=null;let n=f(`pinchend`,(t=u==null?void 0:u.prevEvent.scale)==null?1:t,e);this.emit(`gesture.create`,n),u=null,this.onPinchGesture(n)},200)}else{let t=(Math.abs(e.deltaY)>Math.abs(e.deltaX)?e.deltaY:e.deltaX)/-60,r=this.mouseWheelState!==void 0,o={x:e.clientX,y:e.clientY},s=this.relativeClientPosition(o),c=this.createRaycasterFromCamera(s,this.camera),l=Object.assign(Object.assign(Object.assign(Object.assign({},o),{coords:s,raycaster:c}),n(e)),{delta:t}),u=createEvent(`gesture.mousewheel`,{target:e.target,pointerType:`mouse`,srcEvent:e,pointers:[Object.assign({},l)],isFirst:r,isFinal:!1,scale:0,center:Object.assign({},l),velocityX:0,velocityY:0,overallVelocityX:0,overallVelocityY:0,userAction:!0,state:Object.assign(Object.assign({mode:this.mode},this.currentPano),clonePose(this.camera.pose))});this.emit(`gesture.create`,u),this.onMouseWheel(u),this.mouseWheelState&&clearTimeout(this.mouseWheelState.timer),this.mouseWheelState={timer:setTimeout(()=>{this.mouseWheelState=void 0;let t=createEvent(`gesture.mousewheel`,{target:e.target,pointerType:`mouse`,srcEvent:e,pointers:[Object.assign(Object.assign({},l),{delta:0})],isFirst:!1,isFinal:!0,scale:0,center:Object.assign(Object.assign({},l),{delta:0}),velocityX:0,velocityY:0,overallVelocityX:0,overallVelocityY:0,userAction:!0,state:Object.assign(Object.assign({mode:this.mode},this.currentPano),clonePose(this.camera.pose))});this.emit(`gesture.create`,t),this.onMouseWheel(t)},100)}}y()}},m=e=>{if(isMobile)return;if(!t({x:e.clientX,y:e.clientY})){h();return}let r=!1;this.mouseMoveState||(r=!0);let o={x:e.clientX,y:e.clientY},s=this.relativeClientPosition(o),c=this.createRaycasterFromCamera(s,this.camera),l=Object.assign(Object.assign(Object.assign(Object.assign({},o),{coords:s,raycaster:c}),n(e)),{delta:0}),u=createEvent(`gesture.mousemove`,{target:e.target,pointerType:`mouse`,srcEvent:e,pointers:[Object.assign({},l)],isFirst:r,isFinal:!1,scale:0,center:Object.assign({},l),velocityX:0,velocityY:0,overallVelocityX:0,overallVelocityY:0,userAction:!0,state:Object.assign(Object.assign({mode:this.mode},this.currentPano),clonePose(this.camera.pose))});this.emit(`gesture.create`,u),this.mouseMoveState={timeStamp:now(),event:u},this.onMouseMove(u),this.pressState&&Math.abs(e.clientX-this.pressState.event.center.y)>10&&Math.abs(e.clientY-this.pressState.event.center.y)>10&&y()},h=()=>{if(this.mouseMoveState){let e=createEvent(this.mouseMoveState.event.type,Object.assign(Object.assign({},this.mouseMoveState.event),{isFinal:!0}));this.emit(`gesture.create`,e),this.mouseMoveState=void 0,this.onMouseMove(e)}y()},g=e=>{if(!t(e.center)){y();return}let n=!1;this.pressState||(n=!0,this.pressState={event:e,timeStamp:now(),stop:noop});let r=now()-this.pressState.timeStamp,o=createEvent(this.pressState.event.type,Object.assign(Object.assign({},this.pressState.event),{isFirst:n,isFinal:!1,center:Object.assign(Object.assign({},this.pressState.event.center),{delta:r}),pointers:this.pressState.event.pointers.map(e=>Object.assign(Object.assign({},e),{delta:r}))}));this.emit(`gesture.create`,o),this.onPressGesture(o),this.pressState&&(this.pressState.stop=AnimationFrameLoop.shared.add(t=>{g(e)},!0,1))},_=e=>{if(y(),e.touches.length>1||e.changedTouches.length<=0)return;let t={x:e.changedTouches[0].clientX,y:e.changedTouches[0].clientY},r=this.relativeClientPosition(t),o=this.createRaycasterFromCamera(r,this.camera),s=Object.assign(Object.assign(Object.assign(Object.assign({},t),{coords:r,raycaster:o}),n(e)),{delta:0}),c=createEvent(`gesture.press`,{target:e.target,pointerType:`touch`,srcEvent:e,pointers:[Object.assign({},s)],isFirst:!1,isFinal:!1,scale:0,center:s,velocityX:0,velocityY:0,overallVelocityX:0,overallVelocityY:0,userAction:!0,state:Object.assign(Object.assign({mode:this.mode},this.currentPano),clonePose(this.camera.pose))});this.emit(`gesture.create`,c),g(c)},v=e=>{y();let t={x:e.clientX,y:e.clientY},r=this.relativeClientPosition(t),o=this.createRaycasterFromCamera(r,this.camera),s=Object.assign(Object.assign(Object.assign(Object.assign({},t),{coords:r,raycaster:o}),n(e)),{delta:0}),c=createEvent(`gesture.press`,{target:e.target,pointerType:`mouse`,srcEvent:e,pointers:[Object.assign({},s)],isFirst:!1,isFinal:!1,scale:0,center:s,velocityX:0,velocityY:0,overallVelocityX:0,overallVelocityY:0,userAction:!0,state:Object.assign(Object.assign({mode:this.mode},this.currentPano),clonePose(this.camera.pose))});this.emit(`gesture.create`,c),g(c)},y=()=>{var e;if(this.pressState){let t=now()-this.pressState.timeStamp,n=createEvent(this.pressState.event.type,Object.assign(Object.assign({},this.pressState.event),{center:Object.assign(Object.assign({},this.pressState.event.center),{delta:t}),isFirst:!1,isFinal:!0,pointers:this.pressState.event.pointers.map(e=>Object.assign(Object.assign({},e),{delta:t}))}));this.emit(`gesture.create`,n),this.onPressGesture(n),(e=this.pressState)==null||e.stop(),this.pressState=void 0}},b=null,S=e=>{var t,r,o;let s=!1,c=!1;switch(e.type){case`gesturestart`:s=!0;break;case`gestureend`:c=!0;break;default:break}let l={x:(t=e.clientX)==null?0:t,y:(r=e.clientY)==null?0:r},u=this.relativeClientPosition(l),d=this.createRaycasterFromCamera(u,this.camera),f=Object.assign(Object.assign(Object.assign(Object.assign({},l),{coords:u,raycaster:d}),n(e)),{delta:0});return createEvent(`gesture.pinch`,{target:e.target,pointerType:`mouse`,srcEvent:e,pointers:[Object.assign({},f)],isFirst:s,isFinal:c,scale:(o=e.scale)==null?1:o,center:Object.assign({},f),velocityX:0,velocityY:0,overallVelocityX:0,overallVelocityY:0,userAction:!0,state:Object.assign(Object.assign({mode:this.mode},this.currentPano),clonePose(this.camera.pose))})},C=e=>{if(e.preventDefault(),isMobile)return;let n=S(e);this.emit(`gesture.create`,n),b={firstEvent:n};let r=b.firstEvent;r&&!t(r.center)||this.onPinchGesture(n)},w=e=>{if(e.preventDefault(),isMobile||!b)return;let n=b.firstEvent;if(n&&!t(n.center))return;let r=S(e);this.emit(`gesture.create`,r),this.onPinchGesture(r)},T=e=>{if(e.preventDefault(),isMobile||!b)return;let n=b.firstEvent;if(b=null,n&&!t(n.center))return;let r=S(e);this.emit(`gesture.create`,r),this.onPinchGesture(r)},E=t=>{if(t&&typeof t.preventDefault==`function`&&t.currentTarget===e&&t.preventDefault(),typeof getSelection==`function`){let e=getSelection();e&&e.focusNode&&(e.removeAllRanges&&e.removeAllRanges(),e.empty&&e.empty())}};return this.enableWheel&&e.addEventListener(`wheel`,p,{passive:!1}),e.addEventListener(`mousemove`,m,!1),e.addEventListener(`mouseout`,h,!1),e.addEventListener(`touchstart`,_,{passive:!0}),e.addEventListener(`touchend`,y,!1),e.addEventListener(`touchcancel`,y,!1),e.addEventListener(`mousedown`,v,!1),e.addEventListener(`mouseup`,y,!1),e.addEventListener(`gesturestart`,C,{passive:!1}),e.addEventListener(`gesturechange`,w,{passive:!1}),e.addEventListener(`gestureend`,T,{passive:!1}),e.addEventListener(`touchstart`,E,{passive:!1}),e.addEventListener(`contextmenu`,E,!1),Object.assign(()=>{r.destroy(),e.removeEventListener(`wheel`,p,!1),e.removeEventListener(`mousemove`,m,!1),e.removeEventListener(`mouseout`,h,!1),e.removeEventListener(`touchstart`,_,!1),e.removeEventListener(`touchend`,y,!1),e.removeEventListener(`touchcancel`,y,!1),e.removeEventListener(`mousedown`,v,!1),e.removeEventListener(`mouseup`,y,!1),e.removeEventListener(`gesturestart`,C,!1),e.removeEventListener(`gesturechange`,w,!1),e.removeEventListener(`gestureend`,T,!1),e.removeEventListener(`touchstart`,E,!1),e.removeEventListener(`contextmenu`,E,!1)},{element:e})}},sharedGeometry$2=new three.CircleBufferGeometry(.1,16),sharedMaterial=new three.ShaderMaterial({vertexShader:`
|
|
1499
|
+
`;return function(){var n=Error(`get-stack-trace`),r=n&&n.stack?n.stack.replace(/^[^\(]+?[\n$]/gm,``).replace(/^\s+at\s+/gm,``).replace(/^Object.<anonymous>\s*\(/gm,`{anonymous}()@`):`Unknown Stack Trace`,s=e.console&&(e.console.warn||e.console.log);return s&&s.call(e.console,o,r),t.apply(this,arguments)}}var g=typeof Object.assign==`function`?Object.assign:function(e){if(e===r||e===null)throw TypeError(`Cannot convert undefined or null to object`);for(var t=Object(e),n=1;n<arguments.length;n++){var o=arguments[n];if(o!==r&&o!==null)for(var s in o)o.hasOwnProperty(s)&&(t[s]=o[s])}return t},_=h(function(e,t,n){for(var o=Object.keys(t),s=0;s<o.length;)(!n||n&&e[o[s]]===r)&&(e[o[s]]=t[o[s]]),s++;return e},`extend`,"Use `assign`."),v=h(function(e,t){return _(e,t,!0)},`merge`,"Use `assign`.");function y(e,t,n){var r=t.prototype,o=e.prototype=Object.create(r);o.constructor=e,o._super=r,n&&g(o,n)}function b(e,t){return function(){return e.apply(t,arguments)}}function S(e,t){return typeof e==c?e.apply(t&&t[0]||r,t):e}function C(e,t){return e===r?t:e}function w(e,t,n){m(O(t),function(t){e.addEventListener(t,n,!1)})}function T(e,t,n){m(O(t),function(t){e.removeEventListener(t,n,!1)})}function E(e,t){for(;e;){if(e==t)return!0;e=e.parentNode}return!1}function D(e,t){return e.indexOf(t)>-1}function O(e){return e.trim().split(/\s+/g)}function k(e,t,n){if(e.indexOf&&!n)return e.indexOf(t);for(var r=0;r<e.length;){if(n&&e[r][n]==t||!n&&e[r]===t)return r;r++}return-1}function A(e){return Array.prototype.slice.call(e,0)}function j(e,t,n){for(var r=[],o=[],s=0;s<e.length;){var c=t?e[s][t]:e[s];k(o,c)<0&&r.push(e[s]),o[s]=c,s++}return n&&(r=t?r.sort(function(e,n){return e[t]>n[t]}):r.sort()),r}function M(e,t){for(var n,s,c=t[0].toUpperCase()+t.slice(1),l=0;l<o.length;){if(n=o[l],s=n?n+c:t,s in e)return s;l++}return r}var N=1;function P(){return N++}function F(t){var n=t.ownerDocument||t;return n.defaultView||n.parentWindow||e}var I=/mobile|tablet|ip(ad|hone|od)|android/i,L=`ontouchstart`in e,R=M(e,`PointerEvent`)!==r,z=L&&I.test(navigator.userAgent),B=`touch`,V=`pen`,H=`mouse`,ee=`kinect`,te=25,U=1,W=2,G=4,K=8,ne=1,re=2,ie=4,ae=8,oe=16,q=re|ie,se=ae|oe,ce=q|se,le=[`x`,`y`],ue=[`clientX`,`clientY`];function J(e,t){var n=this;this.manager=e,this.callback=t,this.element=e.element,this.target=e.options.inputTarget,this.domHandler=function(t){S(e.options.enable,[e])&&n.handler(t)},this.init()}J.prototype={handler:function(){},init:function(){this.evEl&&w(this.element,this.evEl,this.domHandler),this.evTarget&&w(this.target,this.evTarget,this.domHandler),this.evWin&&w(F(this.element),this.evWin,this.domHandler)},destroy:function(){this.evEl&&T(this.element,this.evEl,this.domHandler),this.evTarget&&T(this.target,this.evTarget,this.domHandler),this.evWin&&T(F(this.element),this.evWin,this.domHandler)}};function de(e){var t;return t=e.options.inputClass||(R?Ae:z?Le:L?Ve:Te),new t(e,fe)}function fe(e,t,n){var r=n.pointers.length,o=n.changedPointers.length,s=t&U&&r-o===0,c=t&(G|K)&&r-o===0;n.isFirst=!!s,n.isFinal=!!c,s&&(e.session={}),n.eventType=t,pe(e,n),e.emit(`hammer.input`,n),e.recognize(n),e.session.prevInput=n}function pe(e,t){var n=e.session,r=t.pointers,o=r.length;n.firstInput||(n.firstInput=ge(t)),o>1&&!n.firstMultiple?n.firstMultiple=ge(t):o===1&&(n.firstMultiple=!1);var s=n.firstInput,c=n.firstMultiple,l=c?c.center:s.center,f=t.center=Y(r);t.timeStamp=d(),t.deltaTime=t.timeStamp-s.timeStamp,t.angle=ye(l,f),t.distance=X(l,f),me(n,t),t.offsetDirection=ve(t.deltaX,t.deltaY);var p=_e(t.deltaTime,t.deltaX,t.deltaY);t.overallVelocityX=p.x,t.overallVelocityY=p.y,t.overallVelocity=u(p.x)>u(p.y)?p.x:p.y,t.scale=c?xe(c.pointers,r):1,t.rotation=c?be(c.pointers,r):0,t.maxPointers=n.prevInput?t.pointers.length>n.prevInput.maxPointers?t.pointers.length:n.prevInput.maxPointers:t.pointers.length,he(n,t);var m=e.element;E(t.srcEvent.target,m)&&(m=t.srcEvent.target),t.target=m}function me(e,t){var n=t.center,r=e.offsetDelta||{},o=e.prevDelta||{},s=e.prevInput||{};(t.eventType===U||s.eventType===G)&&(o=e.prevDelta={x:s.deltaX||0,y:s.deltaY||0},r=e.offsetDelta={x:n.x,y:n.y}),t.deltaX=o.x+(n.x-r.x),t.deltaY=o.y+(n.y-r.y)}function he(e,t){var n=e.lastInterval||t,o=t.timeStamp-n.timeStamp,s,c,l,d;if(t.eventType!=K&&(o>te||n.velocity===r)){var f=t.deltaX-n.deltaX,p=t.deltaY-n.deltaY,m=_e(o,f,p);c=m.x,l=m.y,s=u(m.x)>u(m.y)?m.x:m.y,d=ve(f,p),e.lastInterval=t}else s=n.velocity,c=n.velocityX,l=n.velocityY,d=n.direction;t.velocity=s,t.velocityX=c,t.velocityY=l,t.direction=d}function ge(e){for(var t=[],n=0;n<e.pointers.length;)t[n]={clientX:l(e.pointers[n].clientX),clientY:l(e.pointers[n].clientY)},n++;return{timeStamp:d(),pointers:t,center:Y(t),deltaX:e.deltaX,deltaY:e.deltaY}}function Y(e){var t=e.length;if(t===1)return{x:l(e[0].clientX),y:l(e[0].clientY)};for(var n=0,r=0,o=0;o<t;)n+=e[o].clientX,r+=e[o].clientY,o++;return{x:l(n/t),y:l(r/t)}}function _e(e,t,n){return{x:t/e||0,y:n/e||0}}function ve(e,t){return e===t?ne:u(e)>=u(t)?e<0?re:ie:t<0?ae:oe}function X(e,t,n){n||(n=le);var r=t[n[0]]-e[n[0]],o=t[n[1]]-e[n[1]];return Math.sqrt(r*r+o*o)}function ye(e,t,n){n||(n=le);var r=t[n[0]]-e[n[0]],o=t[n[1]]-e[n[1]];return Math.atan2(o,r)*180/Math.PI}function be(e,t){return ye(t[1],t[0],ue)+ye(e[1],e[0],ue)}function xe(e,t){return X(t[0],t[1],ue)/X(e[0],e[1],ue)}var Se={mousedown:U,mousemove:W,mouseup:G},Ce=`mousedown`,we=`mousemove mouseup`;function Te(){this.evEl=Ce,this.evWin=we,this.pressed=!1,J.apply(this,arguments)}y(Te,J,{handler:function(e){var t=Se[e.type];t&U&&(e.button===0||e.button===2)&&(this.pressed=!0),t&W&&e.which!==1&&(t=G),this.pressed&&(t&G&&(this.pressed=!1),this.callback(this.manager,t,{pointers:[e],changedPointers:[e],pointerType:H,srcEvent:e}))}});var Ee={pointerdown:U,pointermove:W,pointerup:G,pointercancel:K,pointerout:K},De={2:B,3:V,4:H,5:ee},Oe=`pointerdown`,ke=`pointermove pointerup pointercancel`;e.MSPointerEvent&&!e.PointerEvent&&(Oe=`MSPointerDown`,ke=`MSPointerMove MSPointerUp MSPointerCancel`);function Ae(){this.evEl=Oe,this.evWin=ke,J.apply(this,arguments),this.store=this.manager.session.pointerEvents=[]}y(Ae,J,{handler:function(e){var t=this.store,n=!1,r=!1,o=Ee[e.type.toLowerCase().replace(`ms`,``)],s=De[e.pointerType]||e.pointerType,c=s==B,l=k(t,e.pointerId,`pointerId`);o&U&&(e.button===0||e.button===2||c)?l<0&&(t.push(e),l=t.length-1):o&(G|K)?n=!0:!c&&e.buttons===0&&(n=!0,r=!0,o=Ee.pointerup),!(l<0)&&(r||(t[l]=e),this.callback(this.manager,o,{pointers:t,changedPointers:[e],pointerType:s,srcEvent:t[l]}),n&&t.splice(l,1))}});var je={touchstart:U,touchmove:W,touchend:G,touchcancel:K},Z=`touchstart`,Me=`touchstart touchmove touchend touchcancel`;function Ne(){this.evTarget=Z,this.evWin=Me,this.started=!1,J.apply(this,arguments)}y(Ne,J,{handler:function(e){var t=je[e.type];if(t===U&&(this.started=!0),this.started){var n=Pe.call(this,e,t);t&(G|K)&&n[0].length-n[1].length===0&&(this.started=!1),this.callback(this.manager,t,{pointers:n[0],changedPointers:n[1],pointerType:B,srcEvent:e})}}});function Pe(e,t){var n=A(e.touches),r=A(e.changedTouches);return t&(G|K)&&(n=j(n.concat(r),`identifier`,!0)),[n,r]}var Fe={touchstart:U,touchmove:W,touchend:G,touchcancel:K},Ie=`touchstart touchmove touchend touchcancel`;function Le(){this.evTarget=Ie,this.targetIds={},J.apply(this,arguments)}y(Le,J,{handler:function(e){var t=Fe[e.type],n=Re.call(this,e,t);n&&this.callback(this.manager,t,{pointers:n[0],changedPointers:n[1],pointerType:B,srcEvent:e})}});function Re(e,t){var n=A(e.touches),r=this.targetIds;if(t&(U|W)&&n.length===1)return r[n[0].identifier]=!0,[n,n];var o,s,c=A(e.changedTouches),l=[],u=this.target;if(s=n.filter(function(e){return E(e.target,u)}),t===U)for(o=0;o<s.length;)r[s[o].identifier]=!0,o++;for(o=0;o<c.length;)r[c[o].identifier]&&l.push(c[o]),t&(G|K)&&delete r[c[o].identifier],o++;if(l.length)return[j(s.concat(l),`identifier`,!0),l]}var ze=2500,Be=25;function Ve(){J.apply(this,arguments);var e=b(this.handler,this);this.touch=new Le(this.manager,e),this.mouse=new Te(this.manager,e),this.primaryTouch=null,this.lastTouches=[]}y(Ve,J,{handler:function(e,t,n){var r=n.pointerType==B,o=n.pointerType==H;if(!(o&&n.sourceCapabilities&&n.sourceCapabilities.firesTouchEvents)){if(r)He.call(this,t,n);else if(o&&We.call(this,n))return;this.callback(e,t,n)}},destroy:function(){this.touch.destroy(),this.mouse.destroy()}});function He(e,t){e&U?(this.primaryTouch=t.changedPointers[0].identifier,Ue.call(this,t)):e&(G|K)&&Ue.call(this,t)}function Ue(e){var t=e.changedPointers[0];if(t.identifier===this.primaryTouch){var n={x:t.clientX,y:t.clientY};this.lastTouches.push(n);var r=this.lastTouches;setTimeout(function(){var e=r.indexOf(n);e>-1&&r.splice(e,1)},ze)}}function We(e){for(var t=e.srcEvent.clientX,n=e.srcEvent.clientY,r=0;r<this.lastTouches.length;r++){var o=this.lastTouches[r],s=Math.abs(t-o.x),c=Math.abs(n-o.y);if(s<=Be&&c<=Be)return!0}return!1}var Ge=s?M(s.style,`touchAction`):r,Ke=Ge!==r,qe=`compute`,Je=`auto`,Ye=`manipulation`,Xe=`none`,Ze=`pan-x`,Qe=`pan-y`,$e=rt();function tt(e,t){this.manager=e,this.set(t)}tt.prototype={set:function(e){e==qe&&(e=this.compute()),Ke&&this.manager.element.style&&$e[e]&&(this.manager.element.style[Ge]=e),this.actions=e.toLowerCase().trim()},update:function(){this.set(this.manager.options.touchAction)},compute:function(){var e=[];return m(this.manager.recognizers,function(t){S(t.options.enable,[t])&&(e=e.concat(t.getTouchAction()))}),nt(e.join(` `))},preventDefaults:function(e){var t=e.srcEvent,n=e.offsetDirection;if(this.manager.session.prevented){t.preventDefault();return}var r=this.actions,o=D(r,Xe)&&!$e[Xe],s=D(r,Qe)&&!$e[Qe],c=D(r,Ze)&&!$e[Ze];if(o){var l=e.pointers.length===1,u=e.distance<2,d=e.deltaTime<250;if(l&&u&&d)return}if(!(c&&s)&&(o||s&&n&q||c&&n&se))return this.preventSrc(t)},preventSrc:function(e){this.manager.session.prevented=!0,e.preventDefault()}};function nt(e){if(D(e,Xe))return Xe;var t=D(e,Ze),n=D(e,Qe);return t&&n?Xe:t||n?t?Ze:Qe:D(e,Ye)?Ye:Je}function rt(){if(!Ke)return!1;var t={},n=e.CSS&&e.CSS.supports;return[`auto`,`manipulation`,`pan-y`,`pan-x`,`pan-x pan-y`,`none`].forEach(function(r){t[r]=n?e.CSS.supports(`touch-action`,r):!0}),t}var it=1,Q=2,at=4,ot=8,st=ot,ct=16,lt=32;function ut(e){this.options=g({},this.defaults,e||{}),this.id=P(),this.manager=null,this.options.enable=C(this.options.enable,!0),this.state=it,this.simultaneous={},this.requireFail=[]}ut.prototype={defaults:{},set:function(e){return g(this.options,e),this.manager&&this.manager.touchAction.update(),this},recognizeWith:function(e){if(p(e,`recognizeWith`,this))return this;var t=this.simultaneous;return e=pt(e,this),t[e.id]||(t[e.id]=e,e.recognizeWith(this)),this},dropRecognizeWith:function(e){return p(e,`dropRecognizeWith`,this)?this:(e=pt(e,this),delete this.simultaneous[e.id],this)},requireFailure:function(e){if(p(e,`requireFailure`,this))return this;var t=this.requireFail;return e=pt(e,this),k(t,e)===-1&&(t.push(e),e.requireFailure(this)),this},dropRequireFailure:function(e){if(p(e,`dropRequireFailure`,this))return this;e=pt(e,this);var t=k(this.requireFail,e);return t>-1&&this.requireFail.splice(t,1),this},hasRequireFailures:function(){return this.requireFail.length>0},canRecognizeWith:function(e){return!!this.simultaneous[e.id]},emit:function(e){var t=this,n=this.state;function r(n){t.manager.emit(n,e)}n<ot&&r(t.options.event+dt(n)),r(t.options.event),e.additionalEvent&&r(e.additionalEvent),n>=ot&&r(t.options.event+dt(n))},tryEmit:function(e){if(this.canEmit())return this.emit(e);this.state=lt},canEmit:function(){for(var e=0;e<this.requireFail.length;){if(!(this.requireFail[e].state&(lt|it)))return!1;e++}return!0},recognize:function(e){var t=g({},e);if(!S(this.options.enable,[this,t])){this.reset(),this.state=lt;return}this.state&(st|ct|lt)&&(this.state=it),this.state=this.process(t),this.state&(Q|at|ot|ct)&&this.tryEmit(t)},process:function(e){},getTouchAction:function(){},reset:function(){}};function dt(e){return e&ct?`cancel`:e&ot?`end`:e&at?`move`:e&Q?`start`:``}function ft(e){return e==oe?`down`:e==ae?`up`:e==re?`left`:e==ie?`right`:``}function pt(e,t){var n=t.manager;return n?n.get(e):e}function $(){ut.apply(this,arguments)}y($,ut,{defaults:{pointers:1},attrTest:function(e){var t=this.options.pointers;return t===0||e.pointers.length===t},process:function(e){var t=this.state,n=e.eventType,r=t&(Q|at),o=this.attrTest(e);return r&&(n&K||!o)?t|ct:r||o?n&G?t|ot:t&Q?t|at:Q:lt}});function mt(){$.apply(this,arguments),this.pX=null,this.pY=null}y(mt,$,{defaults:{event:`pan`,threshold:10,pointers:1,direction:ce},getTouchAction:function(){var e=this.options.direction,t=[];return e&q&&t.push(Qe),e&se&&t.push(Ze),t},directionTest:function(e){var t=this.options,n=!0,r=e.distance,o=e.direction,s=e.deltaX,c=e.deltaY;return o&t.direction||(t.direction&q?(o=s===0?ne:s<0?re:ie,n=s!=this.pX,r=Math.abs(e.deltaX)):(o=c===0?ne:c<0?ae:oe,n=c!=this.pY,r=Math.abs(e.deltaY))),e.direction=o,n&&r>t.threshold&&o&t.direction},attrTest:function(e){return $.prototype.attrTest.call(this,e)&&(this.state&Q||!(this.state&Q)&&this.directionTest(e))},emit:function(e){this.pX=e.deltaX,this.pY=e.deltaY;var t=ft(e.direction);t&&(e.additionalEvent=this.options.event+t),this._super.emit.call(this,e)}});function ht(){$.apply(this,arguments)}y(ht,$,{defaults:{event:`pinch`,threshold:0,pointers:2},getTouchAction:function(){return[Xe]},attrTest:function(e){return this._super.attrTest.call(this,e)&&(Math.abs(e.scale-1)>this.options.threshold||this.state&Q)},emit:function(e){if(e.scale!==1){var t=e.scale<1?`in`:`out`;e.additionalEvent=this.options.event+t}this._super.emit.call(this,e)}});function gt(){ut.apply(this,arguments),this._timer=null,this._input=null}y(gt,ut,{defaults:{event:`press`,pointers:1,time:251,threshold:9},getTouchAction:function(){return[Je]},process:function(e){var t=this.options,n=e.pointers.length===t.pointers,r=e.distance<t.threshold,o=e.deltaTime>t.time;if(this._input=e,!r||!n||e.eventType&(G|K)&&!o)this.reset();else if(e.eventType&U)this.reset(),this._timer=f(function(){this.state=st,this.tryEmit()},t.time,this);else if(e.eventType&G)return st;return lt},reset:function(){clearTimeout(this._timer)},emit:function(e){this.state===st&&(e&&e.eventType&G?this.manager.emit(this.options.event+`up`,e):(this._input.timeStamp=d(),this.manager.emit(this.options.event,this._input)))}});function _t(){$.apply(this,arguments)}y(_t,$,{defaults:{event:`rotate`,threshold:0,pointers:2},getTouchAction:function(){return[Xe]},attrTest:function(e){return this._super.attrTest.call(this,e)&&(Math.abs(e.rotation)>this.options.threshold||this.state&Q)}});function vt(){$.apply(this,arguments)}y(vt,$,{defaults:{event:`swipe`,threshold:10,velocity:.3,direction:q|se,pointers:1},getTouchAction:function(){return mt.prototype.getTouchAction.call(this)},attrTest:function(e){var t=this.options.direction,n;return t&(q|se)?n=e.overallVelocity:t&q?n=e.overallVelocityX:t&se&&(n=e.overallVelocityY),this._super.attrTest.call(this,e)&&t&e.offsetDirection&&e.distance>this.options.threshold&&e.maxPointers==this.options.pointers&&u(n)>this.options.velocity&&e.eventType&G},emit:function(e){var t=ft(e.offsetDirection);t&&this.manager.emit(this.options.event+t,e),this.manager.emit(this.options.event,e)}});function yt(){ut.apply(this,arguments),this.pTime=!1,this.pCenter=!1,this._timer=null,this._input=null,this.count=0}y(yt,ut,{defaults:{event:`tap`,pointers:1,taps:1,interval:300,time:250,threshold:9,posThreshold:10},getTouchAction:function(){return[Ye]},process:function(e){var t=this.options,n=e.pointers.length===t.pointers,r=e.distance<t.threshold,o=e.deltaTime<t.time;if(this.reset(),e.eventType&U&&this.count===0)return this.failTimeout();if(r&&o&&n){if(e.eventType!=G)return this.failTimeout();var s=this.pTime?e.timeStamp-this.pTime<t.interval:!0,c=!this.pCenter||X(this.pCenter,e.center)<t.posThreshold;if(this.pTime=e.timeStamp,this.pCenter=e.center,!c||!s?this.count=1:this.count+=1,this._input=e,this.count%t.taps===0)return this.hasRequireFailures()?(this._timer=f(function(){this.state=st,this.tryEmit()},t.interval,this),Q):st}return lt},failTimeout:function(){return this._timer=f(function(){this.state=lt},this.options.interval,this),lt},reset:function(){clearTimeout(this._timer)},emit:function(){this.state==st&&(this._input.tapCount=this.count,this.manager.emit(this.options.event,this._input))}});function bt(e,t){return t=t||{},t.recognizers=C(t.recognizers,bt.defaults.preset),new Ct(e,t)}bt.VERSION=`2.0.7`,bt.defaults={domEvents:!1,touchAction:qe,enable:!0,inputTarget:null,inputClass:null,preset:[[_t,{enable:!1}],[ht,{enable:!1},[`rotate`]],[vt,{direction:q}],[mt,{direction:q},[`swipe`]],[yt],[yt,{event:`doubletap`,taps:2},[`tap`]],[gt]],cssProps:{userSelect:`none`,touchSelect:`none`,touchCallout:`none`,contentZooming:`none`,userDrag:`none`,tapHighlightColor:`rgba(0,0,0,0)`}};var xt=1,St=2;function Ct(e,t){this.options=g({},bt.defaults,t||{}),this.options.inputTarget=this.options.inputTarget||e,this.handlers={},this.session={},this.recognizers=[],this.oldCssProps={},this.element=e,this.input=de(this),this.touchAction=new tt(this,this.options.touchAction),wt(this,!0),m(this.options.recognizers,function(e){var t=this.add(new e[0](e[1]));e[2]&&t.recognizeWith(e[2]),e[3]&&t.requireFailure(e[3])},this)}Ct.prototype={set:function(e){return g(this.options,e),e.touchAction&&this.touchAction.update(),e.inputTarget&&(this.input.destroy(),this.input.target=e.inputTarget,this.input.init()),this},stop:function(e){this.session.stopped=e?St:xt},recognize:function(e){var t=this.session;if(!t.stopped){this.touchAction.preventDefaults(e);var n,r=this.recognizers,o=t.curRecognizer;(!o||o&&o.state&st)&&(o=t.curRecognizer=null);for(var s=0;s<r.length;)n=r[s],t.stopped!==St&&(!o||n==o||n.canRecognizeWith(o))?n.recognize(e):n.reset(),!o&&n.state&(Q|at|ot)&&(o=t.curRecognizer=n),s++}},get:function(e){if(e instanceof ut)return e;for(var t=this.recognizers,n=0;n<t.length;n++)if(t[n].options.event==e)return t[n];return null},add:function(e){if(p(e,`add`,this))return this;var t=this.get(e.options.event);return t&&this.remove(t),this.recognizers.push(e),e.manager=this,this.touchAction.update(),e},remove:function(e){if(p(e,`remove`,this))return this;if(e=this.get(e),e){var t=this.recognizers,n=k(t,e);n!==-1&&(t.splice(n,1),this.touchAction.update())}return this},on:function(e,t){if(e!==r&&t!==r){var n=this.handlers;return m(O(e),function(e){n[e]=n[e]||[],n[e].push(t)}),this}},off:function(e,t){if(e!==r){var n=this.handlers;return m(O(e),function(e){t?n[e]&&n[e].splice(k(n[e],t),1):delete n[e]}),this}},emit:function(e,t){this.options.domEvents&&Tt(e,t);var n=this.handlers[e]&&this.handlers[e].slice();if(!(!n||!n.length)){t.type=e,t.preventDefault=function(){t.srcEvent.preventDefault()};for(var r=0;r<n.length;)n[r](t),r++}},destroy:function(){this.element&&wt(this,!1),this.handlers={},this.session={},this.input.destroy(),this.element=null}};function wt(e,t){var n=e.element;if(n.style){var r;m(e.options.cssProps,function(o,s){r=M(n.style,s),t?(e.oldCssProps[r]=n.style[r],n.style[r]=o):n.style[r]=e.oldCssProps[r]||``}),t||(e.oldCssProps={})}}function Tt(e,n){var r=t.createEvent(`Event`);r.initEvent(e,!0,!0),r.gesture=n,n.target.dispatchEvent(r)}return g(bt,{INPUT_START:U,INPUT_MOVE:W,INPUT_END:G,INPUT_CANCEL:K,STATE_POSSIBLE:it,STATE_BEGAN:Q,STATE_CHANGED:at,STATE_ENDED:ot,STATE_RECOGNIZED:st,STATE_CANCELLED:ct,STATE_FAILED:lt,DIRECTION_NONE:ne,DIRECTION_LEFT:re,DIRECTION_RIGHT:ie,DIRECTION_UP:ae,DIRECTION_DOWN:oe,DIRECTION_HORIZONTAL:q,DIRECTION_VERTICAL:se,DIRECTION_ALL:ce,Manager:Ct,Input:J,TouchAction:tt,TouchInput:Le,MouseInput:Te,PointerEventInput:Ae,TouchMouseInput:Ve,SingleTouchInput:Ne,Recognizer:ut,AttrRecognizer:$,Tap:yt,Pan:mt,Swipe:vt,Pinch:ht,Rotate:_t,Press:gt,on:w,off:T,each:m,merge:v,extend:_,assign:g,inherit:y,bindFn:b,prefixed:M}),bt})(typeof window<`u`?window:{},typeof document<`u`?document:{},`Hammer`),BaseController=class e extends Subscribe{static parseArgs(t){return t instanceof e?t:Object.assign({},t)}static initAnimationEndState(e){var t,n,r,o,s,c,l,u;let d=this.parseArgs(e),{state:f,currentState:p}=d.initial,m=typeof f.panoIndex==`number`?{workCode:(r=(t=f.workCode)==null?(n=d.works[0])==null?void 0:n.workCode:t)==null?``:r,panoIndex:f.panoIndex}:{workCode:p.workCode,panoIndex:p.panoIndex};return Object.assign(Object.assign({},m),{mode:``,longitude:(o=f.longitude)==null?p.longitude:o,latitude:(s=f.latitude)==null?p.latitude:s,fov:(c=f.fov)==null?p.fov:c,offset:(l=f.offset)==null?p.offset:l,distance:(u=f.distance)==null?p.distance:u})}constructor(t){var n,r,o;super();let s=e.parseArgs(t);this.mode=``,this.pending=new Set,this.userAction=s.initial.userAction,this.destroyed=!1,this.fiveId=s.fiveId,this.scene=s.scene,this.modelScene=s.modelScene,this.xrCustomObjectsScene=s.xrCustomObjectsScene,this.helper=s.helper,this.camera=s.camera,this.renderer=s.renderer,this.viewport=s.viewport,this.element=s.element,this.enableWheel=s.enableWheel,this.works=s.works,this.imageOptions=s.imageOptions,this.videoTexture=s.videoTexture,this.extraElements=s.extraElements,this.initial=s.initial,this.currentPano=typeof this.initial.state.panoIndex==`number`?{workCode:(o=(n=this.initial.state.workCode)==null?(r=s.works[0])==null?void 0:r.workCode:n)==null?``:o,panoIndex:this.initial.state.panoIndex}:{workCode:this.initial.currentState.workCode,panoIndex:this.initial.currentState.panoIndex},this.needsRender=!0,this.cameraMotion=new Motion({longitude:{value:this.camera.pose.longitude,circle:[0,Math.PI*2]},latitude:this.camera.pose.latitude,fov:this.camera.pose.fov}),this.inMomentumMovement=null,this.eventUnbinds=[s.element].concat(s.extraElements||[]).map(e=>this.bindEvents(e)),this.initAnimationIsReady=!1,this.pending.add(`init-animation`),this.initAnimationReady=new Promise(e=>{AnimationFrameLoop.shared.add(()=>{this.initAnimation().then(()=>{this.initAnimationIsReady=!0,this.pending.delete(`init-animation`),e()})},!0,0)})}updateConfiguration(e){return!0}destroy(){var e;this.stopMomentumMovement(),this.destroyed=!0,this.off(),this.cameraMotion.dispose();for(let e of this.eventUnbinds)e();this.panState=void 0,(e=this.pressState)==null||e.stop(),this.pressState=void 0}isReady(){return this.inMomentumMovement===null&&this.pending.size===0&&this.cameraMotion.ended===!0}bindExtraElement(e){for(let t of this.eventUnbinds)if(t.element===e)return;this.eventUnbinds.push(this.bindEvents(e))}unbindExtraElement(e){let t=[];for(let n of this.eventUnbinds)n.element===e?n():t.push(n);this.eventUnbinds=t}updateModel(e){this.needsRender=!0}updateWork(e,t,n,r){return this.works=e,this.userAction=r,!1}updateTime(e,t,...n){if(this.destroyed)return;let r={};this.cameraMotion.ended&&(this.cameraMotion.update(e),r.longitude=this.cameraMotion.value.longitude,r.latitude=this.cameraMotion.value.latitude,r.fov=this.cameraMotion.value.fov),isEmptyObject(r)&&this.setCamera(r)}render(){return!1}updateCamera(e,t,n){return this.initAnimationReady.then(()=>{this.userAction=n,this.stopMomentumMovement();let r={};return e.longitude!==void 0&&(r.longitude=e.longitude),e.latitude!==void 0&&(r.latitude=e.latitude),e.fov!==void 0&&(r.fov=e.fov),this.cameraMotion.set(r,t).catch(noop)})}updateCameraWithKeyframes(e,t,n){return this.initAnimationReady.then(()=>{this.userAction=n,this.stopMomentumMovement();let r=[];for(let t of e)r.push({key:t.key,progress:t.progress,value:{longitude:t.value.longitude,latitude:t.value.latitude,fov:t.value.fov}});return this.cameraMotion.setKeyframes(r,t)})}getTargetState(){let e=this.cameraMotion.getKeyFrameSegment(now())[1];return Object.assign(Object.assign({},this.currentPano),{mode:this.mode,longitude:e.value.longitude,latitude:e.value.latitude,fov:e.value.fov,offset:this.camera.pose.offset.clone(),distance:this.camera.pose.distance})}initAnimation(){let{state:t,currentState:n,duration:r,userAction:o}=this.initial,s=e.initAnimationEndState(this);return this.userAction=o,this.emit(`initAnimation.start`,createEvent(`initAnimation.start`,{state:s,userAction:this.userAction})),this.emit(`initAnimation.end`,createEvent(`initAnimation.end`,{state:s,userAction:this.userAction})),Promise.resolve()}setCamera(e={}){var t,n,r,o,s;let c=(t=e.longitude)==null?this.camera.pose.longitude:t,l=(n=e.latitude)==null?this.camera.pose.latitude:n,u=(r=e.fov)==null?this.camera.pose.fov:r,d=(o=e.distance)==null?this.camera.pose.distance:o,f=(s=e.offset)==null?this.camera.pose.offset:s,p=notSimilarValue(c,this.camera.pose.longitude,Math.PI*2)||notSimilarValue(l,this.camera.pose.latitude),m=notSimilarValue(u,this.camera.pose.fov),h=notSimilarValue(d,this.camera.pose.distance),g=notSimilarVector3(f,this.camera.pose.offset);(m||p||g||h)&&(this.camera.setFromPose({longitude:c,latitude:l,fov:u,distance:d,offset:f}),this.emit(`camera.update`,createEvent(`camera.update`,{userAction:this.userAction,state:Object.assign(Object.assign({},this.currentPano),{mode:this.mode,longitude:c,latitude:l,fov:u,offset:f,distance:d})})),this.needsRender=!0)}stopMomentumMovement(){if(this.inMomentumMovement&&this.inMomentumMovement.event&&!this.inMomentumMovement.event.defaultPrevented&&!this.inMomentumMovement.event.isFinal){let e=createEvent(`gesture.momentum`,Object.assign(Object.assign({},this.inMomentumMovement.event),{isFirst:!1,isFinal:!0}));this.emit(`gesture.fire`,e),this.emit(`gesture.momentum`,e)}this.inMomentumMovement=null}onPanGesture(e){this.stopMomentumMovement(),this.emit(`gesture.pan`,e)}onTapGesture(e){this.stopMomentumMovement(),this.emit(`gesture.tap`,e)}onDblTapGesture(e){this.stopMomentumMovement(),this.emit(`gesture.dbltap`,e),!e.defaultPrevented&&(e.type=`gesture.tap`,this.onTapGesture(e))}onPressGesture(e){this.stopMomentumMovement(),this.emit(`gesture.press`,e)}onPinchGesture(e){this.stopMomentumMovement(),this.emit(`gesture.pinch`,e)}onMouseWheel(e){this.stopMomentumMovement(),this.emit(`gesture.mousewheel`,e)}onMouseMove(e){this.stopMomentumMovement(),this.emit(`gesture.mousemove`,e)}relativeClientPosition(e){let{top:t,left:n,width:r,height:o}=this.element.getBoundingClientRect();return n+=r*this.viewport.left,t+=o*(1-this.viewport.bottom-this.viewport.height),r*=this.viewport.width,o*=this.viewport.height,new three.Vector2((e.x-n)/r*2-1,-(e.y-t)/o*2+1)}createRaycasterFromCamera(e,t){let n=new three.Raycaster;return n.params.Points={threshold:.1},n.firstHitOnly=!0,n.near=t.near,n.far=t.far,n.setFromCamera(e,this.camera),n}bindEvents(e){let t=e=>{let t=this.relativeClientPosition(e);return!(Math.abs(t.x)>1||Math.abs(t.y)>1)},n=e=>({button:`button`in e?e.button:0,buttons:`buttons`in e?e.buttons:0,shiftKey:`shiftKey`in e?e.shiftKey:!1,ctrlKey:`ctrlKey`in e?e.ctrlKey:!1,altKey:`altKey`in e?e.altKey:!1,metaKey:`metaKey`in e?e.metaKey:!1}),r=new Hammer.Manager(e),o=e=>e.session.firstInput||null,s=new Hammer.Pan({threshold:10,pointers:0}),c=new Hammer.Tap({interval:410}),l=new Hammer.Pinch({threshold:0,pointers:2});r.add([s,c,l]),r.on(`panstart pan`,e=>{let s=n(e.srcEvent),c=o(r);if(c&&!t(c.center))return;let l=createEvent(`gesture.pan`,{target:e.target,pointerType:e.pointerType,srcEvent:e.srcEvent,pointers:e.pointers.map(e=>{let t=this.relativeClientPosition(e),n=this.createRaycasterFromCamera(t,this.camera);return Object.assign(Object.assign({x:e.x,y:e.y,delta:0},s),{coords:t,raycaster:n})}),isFirst:e.isFirst||e.type==`panstart`,isFinal:e.isFinal,scale:e.scale,center:(e=>{let t=this.relativeClientPosition(e),n=this.createRaycasterFromCamera(t,this.camera);return Object.assign(Object.assign({x:e.x,y:e.y,delta:0},s),{coords:t,raycaster:n})})(e.center),velocityX:e.velocityX,velocityY:e.velocityY,overallVelocityX:e.overallVelocityX,overallVelocityY:e.overallVelocityY,userAction:!0,state:Object.assign(Object.assign({mode:this.mode},this.currentPano),clonePose(this.camera.pose))});this.emit(`gesture.fire`,l),this.onPanGesture(l),y()}),r.on(`tap`,e=>{let s=n(e.srcEvent);if(e.pointerType===`mouse`&&s.button!==0)return;let c=o(r);if(c&&!t(c.center))return;let l=createEvent(`gesture.tap`,{target:e.target,pointerType:e.pointerType,srcEvent:e.srcEvent,pointers:e.pointers.map(e=>{let t=this.relativeClientPosition(e),n=this.createRaycasterFromCamera(t,this.camera);return Object.assign(Object.assign({x:e.x,y:e.y,delta:0},s),{coords:t,raycaster:n})}),isFirst:!0,isFinal:!0,scale:e.scale,center:(e=>{let t=this.relativeClientPosition(e),n=this.createRaycasterFromCamera(t,this.camera);return Object.assign(Object.assign({x:e.x,y:e.y,delta:0},s),{coords:t,raycaster:n})})(e.center),velocityX:e.velocityX,velocityY:e.velocityY,overallVelocityX:e.overallVelocityX,overallVelocityY:e.overallVelocityY,userAction:!0,state:Object.assign(Object.assign({mode:this.mode},this.currentPano),clonePose(this.camera.pose))});this.emit(`gesture.fire`,l),this.onTapGesture(l),y()}),r.on(`pinchstart pinch pinchend`,e=>{let s=n(e.srcEvent),c=o(r);if(c&&!t(c.center))return;let l=createEvent(`gesture.pinch`,{target:e.target,pointerType:e.pointerType,srcEvent:e.srcEvent,pointers:e.pointers.map(e=>{var t;let n=this.relativeClientPosition(e),r=new three.Raycaster;return r.params.Points={threshold:.1},r.setFromCamera(n,this.camera),Object.assign(Object.assign({x:e.x,y:e.y,delta:(t=e.delta)==null?0:t},s),{coords:n,raycaster:r})}),isFirst:e.type===`pinchstart`,isFinal:e.type===`pinchend`,scale:e.scale,center:(e=>{let t=this.relativeClientPosition(e),n=this.createRaycasterFromCamera(t,this.camera);return Object.assign(Object.assign({x:e.x,y:e.y,delta:0},s),{coords:t,raycaster:n})})(e.center),velocityX:e.velocityX,velocityY:e.velocityY,overallVelocityX:e.overallVelocityX,overallVelocityY:e.overallVelocityY,userAction:!0,state:Object.assign(Object.assign({mode:this.mode},this.currentPano),clonePose(this.camera.pose))});this.emit(`gesture.fire`,l),this.onPinchGesture(l),y()}),r.on(`dbltap`,e=>{let s=n(e.srcEvent);if(e.pointerType===`mouse`&&s.button!==0)return;let c=o(r);if(c&&!t(c.center))return;let l=createEvent(`gesture.dbltap`,{target:e.target,pointerType:e.pointerType,srcEvent:e.srcEvent,pointers:e.pointers.map(e=>{let t=this.relativeClientPosition(e),n=this.createRaycasterFromCamera(t,this.camera);return Object.assign(Object.assign({x:e.x,y:e.y,delta:0},s),{coords:t,raycaster:n})}),isFirst:!0,isFinal:!0,scale:e.scale,center:(e=>{let t=this.relativeClientPosition(e),n=this.createRaycasterFromCamera(t,this.camera);return Object.assign(Object.assign({x:e.x,y:e.y,delta:0},s),{coords:t,raycaster:n})})(e.center),velocityX:e.velocityX,velocityY:e.velocityY,overallVelocityX:e.overallVelocityX,overallVelocityY:e.overallVelocityY,userAction:!0,state:Object.assign(Object.assign({mode:this.mode},this.currentPano),clonePose(this.camera.pose))});this.emit(`gesture.fire`,l),this.onDblTapGesture(l),y()});let u=null,d=null,f=(e,t,r)=>{let o={x:r.clientX,y:r.clientY},s=this.relativeClientPosition(o),c=this.createRaycasterFromCamera(s,this.camera),l=Object.assign(Object.assign(Object.assign(Object.assign({},o),{coords:s,raycaster:c}),n(r)),{delta:0}),u=e===`pinchend`?t:t-r.deltaY/280;return createEvent(`gesture.pinch`,{target:r.target,pointerType:`mouse`,srcEvent:r,pointers:[Object.assign({},l)],isFirst:e===`pinchstart`,isFinal:e===`pinchend`,scale:clamp$1(u,.1,10),center:Object.assign({},l),velocityX:0,velocityY:0,overallVelocityX:0,overallVelocityY:0,userAction:!0,state:Object.assign(Object.assign({mode:this.mode},this.currentPano),clonePose(this.camera.pose))})},p=e=>{var r;if(t({x:e.clientX,y:e.clientY})){if(e.preventDefault(),e.ctrlKey){let t=(r=u==null?void 0:u.prevEvent.scale)==null?1:r,n=f(u?`pinch`:`pinchstart`,t,e);this.emit(`gesture.fire`,n),u===null?u={firstEvent:n,prevEvent:n}:u.prevEvent=n,this.emit(`gesture.fire`,n),this.onPinchGesture(n),d!==null&&window.clearTimeout(d),d=window.setTimeout(()=>{var t;d=null;let n=f(`pinchend`,(t=u==null?void 0:u.prevEvent.scale)==null?1:t,e);this.emit(`gesture.fire`,n),u=null,this.onPinchGesture(n)},200)}else{let t=(Math.abs(e.deltaY)>Math.abs(e.deltaX)?e.deltaY:e.deltaX)/-60,r=this.mouseWheelState!==void 0,o={x:e.clientX,y:e.clientY},s=this.relativeClientPosition(o),c=this.createRaycasterFromCamera(s,this.camera),l=Object.assign(Object.assign(Object.assign(Object.assign({},o),{coords:s,raycaster:c}),n(e)),{delta:t}),u=createEvent(`gesture.mousewheel`,{target:e.target,pointerType:`mouse`,srcEvent:e,pointers:[Object.assign({},l)],isFirst:r,isFinal:!1,scale:0,center:Object.assign({},l),velocityX:0,velocityY:0,overallVelocityX:0,overallVelocityY:0,userAction:!0,state:Object.assign(Object.assign({mode:this.mode},this.currentPano),clonePose(this.camera.pose))});this.emit(`gesture.fire`,u),this.onMouseWheel(u),this.mouseWheelState&&clearTimeout(this.mouseWheelState.timer),this.mouseWheelState={timer:setTimeout(()=>{this.mouseWheelState=void 0;let t=createEvent(`gesture.mousewheel`,{target:e.target,pointerType:`mouse`,srcEvent:e,pointers:[Object.assign(Object.assign({},l),{delta:0})],isFirst:!1,isFinal:!0,scale:0,center:Object.assign(Object.assign({},l),{delta:0}),velocityX:0,velocityY:0,overallVelocityX:0,overallVelocityY:0,userAction:!0,state:Object.assign(Object.assign({mode:this.mode},this.currentPano),clonePose(this.camera.pose))});this.emit(`gesture.fire`,t),this.onMouseWheel(t)},100)}}y()}},m=e=>{if(isMobile)return;if(!t({x:e.clientX,y:e.clientY})){h();return}let r=!1;this.mouseMoveState||(r=!0);let o={x:e.clientX,y:e.clientY},s=this.relativeClientPosition(o),c=this.createRaycasterFromCamera(s,this.camera),l=Object.assign(Object.assign(Object.assign(Object.assign({},o),{coords:s,raycaster:c}),n(e)),{delta:0}),u=createEvent(`gesture.mousemove`,{target:e.target,pointerType:`mouse`,srcEvent:e,pointers:[Object.assign({},l)],isFirst:r,isFinal:!1,scale:0,center:Object.assign({},l),velocityX:0,velocityY:0,overallVelocityX:0,overallVelocityY:0,userAction:!0,state:Object.assign(Object.assign({mode:this.mode},this.currentPano),clonePose(this.camera.pose))});this.emit(`gesture.fire`,u),this.mouseMoveState={timeStamp:now(),event:u},this.onMouseMove(u),this.pressState&&Math.abs(e.clientX-this.pressState.event.center.y)>10&&Math.abs(e.clientY-this.pressState.event.center.y)>10&&y()},h=()=>{if(this.mouseMoveState){let e=createEvent(this.mouseMoveState.event.type,Object.assign(Object.assign({},this.mouseMoveState.event),{isFinal:!0}));this.emit(`gesture.fire`,e),this.mouseMoveState=void 0,this.onMouseMove(e)}y()},g=e=>{if(!t(e.center)){y();return}let n=!1;this.pressState||(n=!0,this.pressState={event:e,timeStamp:now(),stop:noop});let r=now()-this.pressState.timeStamp,o=createEvent(this.pressState.event.type,Object.assign(Object.assign({},this.pressState.event),{isFirst:n,isFinal:!1,center:Object.assign(Object.assign({},this.pressState.event.center),{delta:r}),pointers:this.pressState.event.pointers.map(e=>Object.assign(Object.assign({},e),{delta:r}))}));this.emit(`gesture.fire`,o),this.onPressGesture(o),this.pressState&&(this.pressState.stop=AnimationFrameLoop.shared.add(t=>{g(e)},!0,1))},_=e=>{if(y(),e.touches.length>1||e.changedTouches.length<=0)return;let t={x:e.changedTouches[0].clientX,y:e.changedTouches[0].clientY},r=this.relativeClientPosition(t),o=this.createRaycasterFromCamera(r,this.camera),s=Object.assign(Object.assign(Object.assign(Object.assign({},t),{coords:r,raycaster:o}),n(e)),{delta:0}),c=createEvent(`gesture.press`,{target:e.target,pointerType:`touch`,srcEvent:e,pointers:[Object.assign({},s)],isFirst:!1,isFinal:!1,scale:0,center:s,velocityX:0,velocityY:0,overallVelocityX:0,overallVelocityY:0,userAction:!0,state:Object.assign(Object.assign({mode:this.mode},this.currentPano),clonePose(this.camera.pose))});this.emit(`gesture.fire`,c),g(c)},v=e=>{y();let t={x:e.clientX,y:e.clientY},r=this.relativeClientPosition(t),o=this.createRaycasterFromCamera(r,this.camera),s=Object.assign(Object.assign(Object.assign(Object.assign({},t),{coords:r,raycaster:o}),n(e)),{delta:0}),c=createEvent(`gesture.press`,{target:e.target,pointerType:`mouse`,srcEvent:e,pointers:[Object.assign({},s)],isFirst:!1,isFinal:!1,scale:0,center:s,velocityX:0,velocityY:0,overallVelocityX:0,overallVelocityY:0,userAction:!0,state:Object.assign(Object.assign({mode:this.mode},this.currentPano),clonePose(this.camera.pose))});this.emit(`gesture.fire`,c),g(c)},y=()=>{var e;if(this.pressState){let t=now()-this.pressState.timeStamp,n=createEvent(this.pressState.event.type,Object.assign(Object.assign({},this.pressState.event),{center:Object.assign(Object.assign({},this.pressState.event.center),{delta:t}),isFirst:!1,isFinal:!0,pointers:this.pressState.event.pointers.map(e=>Object.assign(Object.assign({},e),{delta:t}))}));this.emit(`gesture.fire`,n),this.onPressGesture(n),(e=this.pressState)==null||e.stop(),this.pressState=void 0}},b=null,S=e=>{var t,r,o;let s=!1,c=!1;switch(e.type){case`gesturestart`:s=!0;break;case`gestureend`:c=!0;break;default:break}let l={x:(t=e.clientX)==null?0:t,y:(r=e.clientY)==null?0:r},u=this.relativeClientPosition(l),d=this.createRaycasterFromCamera(u,this.camera),f=Object.assign(Object.assign(Object.assign(Object.assign({},l),{coords:u,raycaster:d}),n(e)),{delta:0});return createEvent(`gesture.pinch`,{target:e.target,pointerType:`mouse`,srcEvent:e,pointers:[Object.assign({},f)],isFirst:s,isFinal:c,scale:(o=e.scale)==null?1:o,center:Object.assign({},f),velocityX:0,velocityY:0,overallVelocityX:0,overallVelocityY:0,userAction:!0,state:Object.assign(Object.assign({mode:this.mode},this.currentPano),clonePose(this.camera.pose))})},C=e=>{if(e.preventDefault(),isMobile)return;let n=S(e);this.emit(`gesture.fire`,n),b={firstEvent:n};let r=b.firstEvent;r&&!t(r.center)||this.onPinchGesture(n)},w=e=>{if(e.preventDefault(),isMobile||!b)return;let n=b.firstEvent;if(n&&!t(n.center))return;let r=S(e);this.emit(`gesture.fire`,r),this.onPinchGesture(r)},T=e=>{if(e.preventDefault(),isMobile||!b)return;let n=b.firstEvent;if(b=null,n&&!t(n.center))return;let r=S(e);this.emit(`gesture.fire`,r),this.onPinchGesture(r)},E=t=>{if(t&&typeof t.preventDefault==`function`&&t.currentTarget===e&&t.preventDefault(),typeof getSelection==`function`){let e=getSelection();e&&e.focusNode&&(e.removeAllRanges&&e.removeAllRanges(),e.empty&&e.empty())}};return this.enableWheel&&e.addEventListener(`wheel`,p,{passive:!1}),e.addEventListener(`mousemove`,m,!1),e.addEventListener(`mouseout`,h,!1),e.addEventListener(`touchstart`,_,{passive:!0}),e.addEventListener(`touchend`,y,!1),e.addEventListener(`touchcancel`,y,!1),e.addEventListener(`mousedown`,v,!1),e.addEventListener(`mouseup`,y,!1),e.addEventListener(`gesturestart`,C,{passive:!1}),e.addEventListener(`gesturechange`,w,{passive:!1}),e.addEventListener(`gestureend`,T,{passive:!1}),e.addEventListener(`touchstart`,E,{passive:!1}),e.addEventListener(`contextmenu`,E,!1),Object.assign(()=>{r.destroy(),e.removeEventListener(`wheel`,p,!1),e.removeEventListener(`mousemove`,m,!1),e.removeEventListener(`mouseout`,h,!1),e.removeEventListener(`touchstart`,_,!1),e.removeEventListener(`touchend`,y,!1),e.removeEventListener(`touchcancel`,y,!1),e.removeEventListener(`mousedown`,v,!1),e.removeEventListener(`mouseup`,y,!1),e.removeEventListener(`gesturestart`,C,!1),e.removeEventListener(`gesturechange`,w,!1),e.removeEventListener(`gestureend`,T,!1),e.removeEventListener(`touchstart`,E,!1),e.removeEventListener(`contextmenu`,E,!1)},{element:e})}},sharedGeometry$2=new three.CircleBufferGeometry(.1,16),sharedMaterial=new three.ShaderMaterial({vertexShader:`
|
|
1500
1500
|
varying vec2 vUv;
|
|
1501
1501
|
#include <common>
|
|
1502
1502
|
#include <logdepthbuf_pars_vertex>
|
|
@@ -1529,7 +1529,7 @@ void main() {
|
|
|
1529
1529
|
|
|
1530
1530
|
gl_FragColor = vec4(gl_FragColor.rgb, gl_FragColor.a * outside * inside);
|
|
1531
1531
|
}
|
|
1532
|
-
`,side:three.DoubleSide,blending:three.CustomBlending,blendSrc:three.SrcAlphaFactor,blendDst:three.OneMinusSrcAlphaFactor,blendSrcAlpha:three.OneFactor,blendDstAlpha:three.OneMinusSrcAlphaFactor,depthWrite:!1,transparent:!0}),IntersectMesh=class extends three.Object3D{constructor(){super(),this.ringMesh=new three.Mesh(sharedGeometry$2,sharedMaterial),this.ringMesh.position.z=.01,this.ringMesh.renderOrder=9999999999,this.add(this.ringMesh)}dispose(){this.remove(this.ringMesh)}},scratchObserverBox$2=new three.Box3,scratchVector3$4=new three.Vector3,defaultFloorplanControllerCustomInitArgs={defaultLongitude:Math.PI/4,defaultLatitude:Math.PI/4,defaultFov:80,maxFov:120,minFov:20,maxLatitude:Math.PI/2,minLatitude:-Math.PI/2,intersectMeshCreator:()=>new IntersectMesh},FloorplanController=class e extends BaseController{static distanceFromModel(e,t,n){let r=e.boundingBox,o=r.isEmpty()?10:Math.pow(Math.pow(r.max.x-r.min.x+1,2)+Math.pow(r.max.y-r.min.y+1,2)+Math.pow(r.max.z-r.min.z+1,2),1/2);o=isNaN(o)||!isFinite(o)?1:o;let s=o/2/Math.tan(Math.PI*t/360);return n<1&&(s/=n),isNaN(s)||!isFinite(s)?o:s}static parseArgs(t){var n,r,o,s,c,l,u,d;if(t instanceof e)return t;let f=super.parseArgs(t);return Object.assign(Object.assign({},f),{defaultLongitude:(n=t.defaultLongitude)==null?defaultFloorplanControllerCustomInitArgs.defaultLongitude:n,defaultLatitude:(r=t.defaultLatitude)==null?defaultFloorplanControllerCustomInitArgs.defaultLatitude:r,defaultFov:(o=t.defaultFov)==null?defaultFloorplanControllerCustomInitArgs.defaultFov:o,maxFov:(s=t.maxFov)==null?defaultFloorplanControllerCustomInitArgs.maxFov:s,minFov:(c=t.minFov)==null?defaultFloorplanControllerCustomInitArgs.minFov:c,maxLatitude:(l=t.maxLatitude)==null?defaultFloorplanControllerCustomInitArgs.maxLatitude:l,minLatitude:(u=t.minLatitude)==null?defaultFloorplanControllerCustomInitArgs.minLatitude:u,intersectMeshCreator:(d=t.intersectMeshCreator)==null?defaultFloorplanControllerCustomInitArgs.intersectMeshCreator:d})}static initAnimationEndState(t){var n,r,o,s,c,l,u;let d=this.parseArgs(t),{state:f,currentState:p}=t.initial,m=typeof f.panoIndex==`number`?{workCode:(o=(n=f.workCode)==null?(r=d.works[0])==null?void 0:r.workCode:n)==null?``:o,panoIndex:f.panoIndex}:{workCode:p.workCode,panoIndex:p.panoIndex},h=(s=f.fov)==null?d.defaultFov:s,g=(c=f.longitude)==null?isThirdPersonMode(p.mode)?p.longitude:d.defaultLongitude:c,_=clamp$1(typeof d.minLatitude==`function`?d.minLatitude(h):d.minLatitude,-Math.PI/2,Math.PI/2),v=clamp$1(typeof d.maxLatitude==`function`?d.maxLatitude(h):d.maxLatitude,-Math.PI/2,Math.PI/2),y=clamp$1((l=f.latitude)==null?p.mode===`Floorplan`?p.latitude:d.defaultLatitude:l,_,v),b=f.offset?f.offset.clone():t.modelScene.boundingBox.getCenter(new three.Vector3),S=(u=f.distance)==null?e.distanceFromModel(d.modelScene,d.defaultFov,d.camera.aspect):u;return Object.assign(Object.assign({},m),{mode:`Floorplan`,longitude:g,latitude:y,fov:h,offset:b,distance:S})}constructor(t){let n=e.parseArgs(t);super(n),this.mode=`Floorplan`,this.defaultLongitude=n.defaultLongitude,this.defaultLatitude=n.defaultLatitude,this.defaultFov=n.defaultFov,this.maxFov=n.maxFov,this.minFov=n.minFov,this.maxLatitude=n.maxLatitude,this.minLatitude=n.minLatitude,this.locationMotion=new Motion({x:this.camera.pose.offset.x,y:this.camera.pose.offset.y,z:this.camera.pose.offset.z,distance:this.camera.pose.distance}),this.modelAlphaMotion=new Motion({modelAlpha:this.modelScene.parameter.resolveValue().modelAlpha}),this.perspToOrthoMotion=new Motion({perspToOrtho:this.camera.perspToOrtho.x}),this.pendingTextureId=null,this.textureLoader=new TextureLoader,this.intersectMeshCreator=n.intersectMeshCreator,this.intersectMesh=this.intersectMeshCreator(),this.intersectMesh.name=`intersect`,this.intersectMesh.visible=!1,this.helper.add(this.intersectMesh)}updateConfiguration(e){if(super.updateConfiguration(e)===!1)return!1;if(e.defaultLongitude!==void 0&&this.defaultLongitude!==e.defaultLongitude&&(this.defaultLongitude=e.defaultLongitude),e.defaultLatitude!==void 0&&this.defaultLatitude!==e.defaultLatitude&&(this.defaultLatitude=e.defaultLatitude),e.defaultFov!==void 0&&this.defaultFov!==e.defaultFov&&(this.defaultFov=e.defaultFov),e.maxFov!==void 0&&this.maxFov!==e.maxFov&&(this.maxFov=e.maxFov),e.minFov!==void 0&&this.minFov!==e.minFov&&(this.minFov=e.minFov),e.maxLatitude!==void 0&&this.maxLatitude!==e.maxLatitude&&(this.maxLatitude=e.maxLatitude),e.minLatitude!==void 0&&this.minLatitude!==e.minLatitude&&(this.minLatitude=e.minLatitude),e.intersectMeshCreator!==void 0&&this.intersectMeshCreator!==e.intersectMeshCreator){this.intersectMeshCreator=e.intersectMeshCreator;let t=this.intersectMesh;this.intersectMesh=this.intersectMeshCreator(),this.intersectMesh.name=t.name,this.intersectMesh.visible=t.visible;let n=this.intersectMesh.parent;n&&n.add(this.intersectMesh),t.dispose()}return!0}destroy(){super.destroy(),this.pendingTextureId=null,this.locationMotion.dispose(),this.panState=void 0,this.intersectMesh.dispose(),this.helper.remove(this.intersectMesh)}isReady(){return this.locationMotion.ended===!1?!1:super.isReady()}updateWork(e,t,n,r){var o;return this.works=e,this.updateCamera(t,(o=n.duration)==null?0:o,r),!0}updateModel(t){super.updateModel(t);let n=t.boundingBox.getCenter(new three.Vector3),r=e.distanceFromModel(t,this.defaultFov,this.camera.aspect);this.updateCamera({offset:n,distance:r},0,!0)}updateCamera(e,t,n){return this.initAnimationReady.then(()=>{this.userAction=n,this.stopMomentumMovement();let r={},o={};return e.distance!==void 0&&(r.distance=e.distance),e.offset!==void 0&&(r.x=e.offset.x,r.y=e.offset.y,r.z=e.offset.z),e.longitude!==void 0&&(o.longitude=e.longitude),e.latitude!==void 0&&(o.latitude=e.latitude),e.fov!==void 0&&(o.fov=e.fov),this.locationMotion.set(r,t).catch(noop),this.cameraMotion.set(o,t).catch(noop)})}updateCameraWithKeyframes(e,t,n){return this.initAnimationReady.then(()=>{this.userAction=n,this.stopMomentumMovement();let r=[],o=[];for(let t of e)r.push({key:t.key,progress:t.progress,value:{distance:t.value.distance,x:t.value.offset.x,y:t.value.offset.x,z:t.value.offset.x}}),o.push({key:t.key,progress:t.progress,value:{longitude:t.value.longitude,latitude:t.value.latitude,fov:t.value.fov}});return this.locationMotion.setKeyframes(r,t).catch(noop),this.cameraMotion.setKeyframes(e,t)})}updateTime(e,t,...n){if(this.destroyed)return;let r={},o={};if(this.modelAlphaMotion.ended||(this.modelAlphaMotion.update(e),r.modelAlpha=this.modelAlphaMotion.value.modelAlpha),this.modelScene.parameter.modelAlpha===0&&this.modelScene.parameter.progress!==1){let{pano0:e,pano1:t}=this.modelScene.parameter;e&&e.map!==(t==null?void 0:t.map)&&e.map.dispose(),r.progress=1,r.pano0=r.pano1=t}if(this.perspToOrthoMotion.ended||(this.perspToOrthoMotion.update(e),this.camera.perspToOrtho.setScalar(clamp$1(this.perspToOrthoMotion.value.perspToOrtho,0,1))),this.locationMotion.ended||(this.locationMotion.update(e),o.distance=this.locationMotion.value.distance,o.offset=new three.Vector3(this.locationMotion.value.x,this.locationMotion.value.y,this.locationMotion.value.z)),this.cameraMotion.ended||(this.cameraMotion.update(e),o.longitude=this.cameraMotion.value.longitude,o.latitude=this.cameraMotion.value.latitude,o.fov=this.cameraMotion.value.fov),isEmptyObject(r)||this.modelScene.parameter.set(r),isEmptyObject(o)||this.setCamera(o),this.intersectMesh&&this.intersectMesh.parent){let e=clamp$1(this.camera.position.distanceTo(this.intersectMesh.position)*(2*Math.tan(.5*this.camera.fov/180*Math.PI))/5,.5);this.intersectMesh.scale.setScalar(e)}else this.intersectMesh.scale.setScalar(1)}getTargetState(){let e=this.cameraMotion.getKeyFrameSegment(now())[1],t=this.locationMotion.getKeyFrameSegment(now())[1];return Object.assign(Object.assign({},this.currentPano),{mode:this.mode,longitude:e.value.longitude,latitude:e.value.latitude,fov:e.value.fov,offset:new three.Vector3(t.value.x,t.value.y,t.value.z),distance:t.value.distance})}initAnimation(){return this.destroyed?Promise.resolve():new Promise(t=>{let{state:n,currentState:r,duration:o,userAction:s}=this.initial;this.userAction=s;let c=e.initAnimationEndState(this),l=pick(c,[`longitude`,`latitude`,`fov`]),u={x:c.offset.x,y:c.offset.y,z:c.offset.z,distance:c.distance};this.emit(`initAnimation.start`,createEvent(`initAnimation.start`,{state:c,userAction:this.userAction})),this.modelAlphaMotion.set({modelAlpha:1},o/3).catch(noop),this.perspToOrthoMotion.set({perspToOrtho:0},o).catch(noop),this.cameraMotion.set(l,o).catch(noop),this.locationMotion.set(u,o).then(()=>{this.emit(`initAnimation.end`,createEvent(`initAnimation.end`,{state:c,userAction:this.userAction}))},e=>{let t=Object.assign(Object.assign(Object.assign({},this.currentPano),{mode:this.mode}),clonePose(this.camera.pose));this.emit(`initAnimation.end`,createEvent(`initAnimation.end`,{state:t,userAction:this.userAction}))}).then(()=>{t()})})}updateRenderSize(e){this.needsRender=!0}getForwardObserverOrNot(e){let[t]=this.modelScene.intersectRaycaster(e);if(!t)return null;let n=[];for(let t of this.works){let r=this.modelScene.models.find(e=>e.work===t);if(!(!r||r.visible===!1)&&!(t.observers.length<=0)&&(scratchObserverBox$2.copy(t.observerBox).expandByScalar(10).applyMatrix4(t.transform),scratchObserverBox$2.containsPoint(e.ray.origin)||e.ray.intersectsBox(scratchObserverBox$2)))for(let e of t.observers)n.push(e)}let[r,o]=arrayMin(n,e=>scratchVector3$4.copy(e.standingPosition).applyMatrix4(e.work.transform).distanceTo(t.point),!0);return r&&o<Math.max(r.standingPosition.distanceTo(this.camera.position)/5,10)?r:null}coordinatesForOffset(e){let t=this.renderer.getSize(new three.Vector2);return{longitude:-2*e.x/(t.x*this.viewport.width),latitude:2*e.y/(t.y*this.viewport.height)}}requestMomentumMovement(e,t,n,r){if(this.inMomentumMovement===null)return;r=Math.max(r,1);let o=Object.assign({},n),s={longitude:0,latitude:0};for(let e=0;e<r;e++)o.longitude*=.996,o.latitude*=.996*.998,s.longitude+=o.longitude,s.latitude+=o.latitude;let c=formatRad$1(this.cameraMotion.value.longitude+s.longitude),l=this.cameraMotion.value.fov,u=clamp$1(typeof this.minLatitude==`function`?this.minLatitude(l):this.minLatitude,-Math.PI/2,Math.PI/2),d=clamp$1(typeof this.maxLatitude==`function`?this.maxLatitude(l):this.maxLatitude,-Math.PI/2,Math.PI/2),f=clamp$1(this.cameraMotion.value.latitude+s.latitude,u,d),p=Object.assign(Object.assign({},this.currentPano),{mode:this.mode,longitude:c,latitude:f,fov:this.cameraMotion.value.fov,offset:this.camera.pose.offset.clone(),distance:this.camera.pose.distance}),m=!(o.longitude>1e-4||o.longitude<-1e-4||o.latitude>1e-4||o.latitude<-1e-4),h=createEvent(`gesture.momentum`,Object.assign(Object.assign({},e),{isFirst:t,isFinal:m,state:p}));if(this.emit(`gesture.create`,h),this.inMomentumMovement.event=h,this.emit(`gesture.momentum`,h),e.defaultPrevented){this.inMomentumMovement=null;return}this.inMomentumMovement&&(this.cameraMotion.set({longitude:c,latitude:f},0).catch(noop),m?this.inMomentumMovement=null:AnimationFrameLoop.shared.add((t,n)=>{this.requestMomentumMovement(e,!1,o,n)},!0))}onPanGesture(e){this.userAction=e.userAction,this.stopMomentumMovement(),this.hideIntersectMesh();let t=this.panState,n=e.pointers.length;if(e.isFinal?this.panState=void 0:this.panState={pointerLength:n,defaultPrevented:e.defaultPrevented,x:e.center.x,y:e.center.y},t===void 0||t.pointerLength!==n){this.emit(`gesture.pan`,e);return}let r={x:e.center.x-t.x,y:e.center.y-t.y},o=this.relativeClientPosition(e.center),s=1,c=this.camera.pose.latitude;Math.abs(c)>Math.PI/6&&(s=c<0?o.y<0?-1:1:o.y>0?-1:1),r.x*=s;let l=this.coordinatesForOffset(r),u=formatRad$1(this.cameraMotion.value.longitude+l.longitude),d=this.camera.pose.fov,f=clamp$1(typeof this.minLatitude==`function`?this.minLatitude(d):this.minLatitude,-Math.PI/2,Math.PI/2),p=clamp$1(typeof this.maxLatitude==`function`?this.maxLatitude(d):this.maxLatitude,-Math.PI/2,Math.PI/2),m=clamp$1(this.cameraMotion.value.latitude+l.latitude,f,p);this.camera.aspect<1&&Math.abs(e.overallVelocityX)>.2&&Math.atan2(Math.abs(e.overallVelocityY),Math.abs(e.overallVelocityX))<Math.PI/6.923&&(m=this.cameraMotion.value.latitude);let h=Object.assign(Object.assign({},this.currentPano),{mode:this.mode,longitude:u,latitude:m,fov:d,offset:this.camera.pose.offset,distance:this.camera.pose.distance});if(e.state=h,this.emit(`gesture.pan`,e),e.defaultPrevented){this.panState&&(this.panState.defaultPrevented=e.defaultPrevented);return}if(!(e.isFinal&&t.defaultPrevented)&&(this.cameraMotion.set({longitude:h.longitude,latitude:h.latitude},0).catch(noop),e.isFinal)){let t=e.velocityX*s,n=e.velocityY;this.inMomentumMovement={uuid:createUuid()},this.requestMomentumMovement(e,!0,this.coordinatesForOffset({x:t,y:n}),0)}}onPinchGesture(e){var t;if(!this.initAnimationIsReady)return;this.userAction=e.userAction,this.stopMomentumMovement();let n=(t=this.pinchState)==null?void 0:t.fov;if(e.isFirst){this.pinchState={x:e.center.x,y:e.center.y,fov:this.cameraMotion.value.fov};return}if(e.isFinal&&(this.panState=void 0,this.pinchState=void 0),n===void 0)return;let r=clamp$1(n/e.scale,this.minFov,this.maxFov),o=clamp$1(typeof this.minLatitude==`function`?this.minLatitude(r):this.minLatitude,-Math.PI/2,Math.PI/2),s=clamp$1(typeof this.maxLatitude==`function`?this.maxLatitude(r):this.maxLatitude,-Math.PI/2,Math.PI/2),c=clamp$1(this.cameraMotion.value.latitude,o,s);e.state.fov=r,e.state.latitude=c,this.emit(`gesture.pinch`,e),!e.defaultPrevented&&(this.cameraMotion.set({fov:r,latitude:c},0).catch(noop),this.onPanGesture(e))}onMouseMove(e){var t,n;if(!this.intersectMesh.parent||this.panState)return;if(this.emit(`gesture.mousemove`,e),e.defaultPrevented){this.hideIntersectMesh();return}let r=e.center.raycaster;if(e.isFinal&&this.intersectMesh.parent&&this.intersectMesh.visible===!0){this.hideIntersectMesh();return}let[o]=this.modelScene.intersectRaycaster(r),s=createEvent(`intersect.update`,{raycaster:r,intersection:o==null?null:o,object:this.intersectMesh});if(this.emit(`intersect.update`,s),s.defaultPrevented){this.hideIntersectMesh();return}if(o){let e=(n=(t=o.face)==null?void 0:t.normal)==null?new three.Vector3().copy(r.ray.direction).multiplyScalar(-1):n,s=e.clone(),c=o.point.clone();this.intersectMesh.position.copy(c);let l=c.clone().add(s);if(this.intersectMesh.lookAt(l),Math.abs(e.y)>.99){let e=this.camera.position.clone().sub(c);this.intersectMesh.rotation.z=-Math.atan2(e.z,e.x)}this.intersectMesh.visible=!0,this.needsRender=!0}else this.hideIntersectMesh()}onMouseWheel(e){if(!this.initAnimationIsReady)return;this.userAction=e.userAction,this.stopMomentumMovement();let{minFov:t,maxFov:n}=this,r=clamp$1(this.camera.fov-e.center.delta,t,n),o=clamp$1(typeof this.minLatitude==`function`?this.minLatitude(r):this.minLatitude,-Math.PI/2,Math.PI/2),s=clamp$1(typeof this.maxLatitude==`function`?this.maxLatitude(r):this.maxLatitude,-Math.PI/2,Math.PI/2),c=clamp$1(this.cameraMotion.value.latitude,o,s);e.state.fov=r,e.state.latitude=c,this.emit(`gesture.mousewheel`,e),!e.defaultPrevented&&this.cameraMotion.set({fov:r,latitude:c},0).catch(noop)}onTapGesture(e){var t;this.userAction=e.userAction,this.stopMomentumMovement();let n=e.center.raycaster,r=this.getForwardObserverOrNot(n);if(!r)this.emit(`gesture.tap`,e);else{let n={longitude:this.camera.pose.longitude,latitude:0},o=Object.assign(Object.assign({},e.state),{mode:`Panorama`,workCode:r.work.workCode,panoIndex:r.panoIndex,longitude:n.longitude,latitude:n.latitude,offset:r?r.position.clone():new three.Vector3,distance:0});if(e.state=o,this.emit(`gesture.tap`,e),!e.defaultPrevented&&(this.emit(`pano.select`,createEvent(`pano.select`,{prevPano:this.currentPano,state:o,userAction:e.userAction,options:n,progress:0,error:null})),r&&r.active)){let e=this.pendingTextureId=createUuid(),s=panoStringify({panoIndex:r.panoIndex,workCode:r.work.workCode}),c={right:r.images.work.getURL(r.images.right),left:r.images.work.getURL(r.images.left),up:r.images.work.getURL(r.images.up),down:r.images.work.getURL(r.images.down),front:r.images.work.getURL(r.images.front),back:r.images.work.getURL(r.images.back)},l=this.imageOptions.transform,u=Object.assign({key:`pano.${s}`},pick(this.imageOptions,[`format`,`size`,`quality`,`sharpen`,`forceUseExifOrientation`,`mappings`])),d=`pano:`+jsonHash([c,u,l]),f=this.modelScene.parameter,p;f.pano0&&f.pano0.map.name===d?p=f.pano0:f.pano1&&f.pano1.map.name===d&&(p=f.pano1),p?(f.pano0&&f.pano0.map!==p.map&&f.pano0.map.dispose(),f.pano1&&f.pano1.map!==p.map&&f.pano1.map!==((t=f.pano0)==null?void 0:t.map)&&f.pano1.map.dispose(),f.set({pano0:p,pano1:p}),this.emit(`pano.request`,createEvent(`pano.request`,{userAction:!0,prevPano:this.currentPano,progress:0,state:o,options:n,error:null}))):this.textureLoader.loadCubeTexture(c,{imageURL:{transform:l,options:u},format:three.RGBFormat,viaAjax:!0,fetcher:getFetcher(this.fiveId,r.work)},void 0,void 0,void 0,this.renderer).then(t=>{var c,l;let{body:u}=t;if(this.destroyed||this.pendingTextureId!==e){u.dispose();return}this.pendingTextureId=null,u.name=d;let p=Array.isArray(u.image)?u.image[0]:u.image,m=(c=p==null?void 0:p.width)==null?2048:c,h=new Histogram().formPixels(getRgbaDataFromCubeTexture(this.renderer,u,!0,sharedHistogramRgbaData).data),g={panoId:s,map:u,mapSize:m,mapHistogram:new three.Vector4().fromArray(h.toArray()),matrix:r.matrix.clone().premultiply(r.work.transform),zoom:1};f.pano0&&f.pano0.map.dispose(),f.pano1&&f.pano1.map!==((l=f.pano0)==null?void 0:l.map)&&f.pano1.map.dispose(),f.set({pano0:g,pano1:g}),this.emit(`pano.request`,createEvent(`pano.request`,{userAction:!0,prevPano:this.currentPano,progress:0,state:o,options:n,error:null}))}).catch(t=>{this.destroyed||this.pendingTextureId!==e||(this.pendingTextureId=null)})}}}onDblTapGesture(e){this.userAction=e.userAction,this.stopMomentumMovement();let t=this.cameraMotion.value.fov,n=this.minFov-t<t-this.defaultFov?this.minFov:this.defaultFov;e.state.fov=n,this.emit(`gesture.dbltap`,e),!e.defaultPrevented&&(this.cameraMotion.set({fov:n},360).catch(noop),this.hideIntersectMesh())}hideIntersectMesh(){this.intersectMesh.visible=!1,this.needsRender=!0}},defaultTopviewControllerCustomInitArgs=Object.assign(Object.assign({},omit(defaultFloorplanControllerCustomInitArgs,[`defaultLongitude`,`defaultLatitude`,`maxLatitude`,`minLatitude`])),{defaultLongitude:0,defaultLatitude:Math.PI/2}),TopviewController=class e extends FloorplanController{static parseArgs(t){var n,r;if(t instanceof e)return t;let o=Object.assign(Object.assign({},t),{maxLatitude:Math.PI/2,minLatitude:-Math.PI/2,defaultLongitude:(n=t.defaultLongitude)==null?defaultTopviewControllerCustomInitArgs.defaultLongitude:n,defaultLatitude:(r=t.defaultLatitude)==null?defaultTopviewControllerCustomInitArgs.defaultLatitude:r});return super.parseArgs(o)}static initAnimationEndState(e){var t,n;let r=this.parseArgs(e),o=super.initAnimationEndState(Object.assign(Object.assign({},r),{initial:Object.assign(Object.assign({},r.initial),{state:Object.assign(Object.assign({},r.initial.state),{longitude:(t=r.initial.state.longitude)==null?r.defaultLongitude:t,latitude:(n=r.initial.state.latitude)==null?r.defaultLatitude:n})})}));return Object.assign(Object.assign({},o),{mode:`Topview`})}constructor(t){let n=e.parseArgs(t);super(n),this.mode=`Topview`}updateConfiguration(e){return super.updateConfiguration(Object.assign({},e))}updateModel(e){this.needsRender=!0;let t=this.modelScene.boundingBox.getCenter(new three.Vector3);this.locationMotion.set({x:t.x,y:t.y,z:t.z,distance:FloorplanController.distanceFromModel(this.modelScene,this.defaultFov,this.camera.aspect)},0).catch(noop),this.hideIntersectMesh()}updateCamera(e,t,n){return this.initAnimationReady.then(()=>{this.userAction=n,this.stopMomentumMovement();let r={},o={};return e.distance!==void 0&&(r.distance=e.distance),e.offset!==void 0&&(r.x=e.offset.x,r.y=e.offset.y,r.z=e.offset.z),e.longitude!==void 0&&(o.longitude=e.longitude),e.latitude!==void 0&&(o.latitude=e.latitude),e.fov!==void 0&&(o.fov=e.fov),this.locationMotion.set(r,t).catch(noop),this.cameraMotion.set(o,t).catch(noop)})}updateCameraWithKeyframes(e,t,n){return this.initAnimationReady.then(()=>{this.userAction=n,this.stopMomentumMovement();let r=[],o=[];for(let t of e)r.push({key:t.key,progress:t.progress,value:{distance:t.value.distance,x:t.value.offset.x,y:t.value.offset.y,z:t.value.offset.z}}),o.push({key:t.key,progress:t.progress,value:{longitude:t.value.longitude,latitude:t.value.latitude,fov:t.value.fov}});return this.locationMotion.setKeyframes(r,t).catch(noop),this.cameraMotion.setKeyframes(e,t)})}initAnimation(){return this.destroyed?Promise.resolve():new Promise(t=>{let{state:n,currentState:r,duration:o,userAction:s}=this.initial;this.userAction=s;let c=e.initAnimationEndState(this),l={longitude:c.longitude,latitude:c.latitude,fov:c.fov},u={x:c.offset.x,y:c.offset.y,z:c.offset.z,distance:c.distance};this.emit(`initAnimation.start`,createEvent(`initAnimation.start`,{state:c,userAction:this.userAction})),this.modelAlphaMotion.set({modelAlpha:1},o/3).catch(noop),this.perspToOrthoMotion.set({perspToOrtho:1},o).catch(noop),this.cameraMotion.set(l,o).catch(noop),this.locationMotion.set(u,o).then(()=>{this.emit(`initAnimation.end`,createEvent(`initAnimation.end`,{state:c,userAction:this.userAction}))},e=>{let t=Object.assign(Object.assign(Object.assign({},this.currentPano),{mode:this.mode}),clonePose(this.camera.pose));this.emit(`initAnimation.end`,createEvent(`initAnimation.end`,{state:t,userAction:this.userAction}))}).then(()=>{t()})})}requestMomentumMovement(){this.inMomentumMovement=null}onPanGesture(e){this.userAction=e.userAction,this.stopMomentumMovement();let t=this.panState,n=e.pointers.length;if(e.isFinal?this.panState=void 0:this.panState={pointerLength:n,defaultPrevented:e.defaultPrevented,x:e.center.x,y:e.center.y},t===void 0||t.pointerLength!==n){this.emit(`gesture.pan`,e);return}let r={x:e.center.x-t.x,y:e.center.y-t.y},o=new three.Vector3(this.locationMotion.value.x,this.locationMotion.value.y,this.locationMotion.value.z),s=this.locationMotion.value.distance;s*=Math.tan(this.cameraMotion.value.fov/2*Math.PI/180);let c=this.renderer.getSize(new three.Vector2),l=2*r.x*s/c.y,u=2*r.y*s/c.y,d=new three.Vector3;d.setFromMatrixColumn(this.camera.matrix,0),d.multiplyScalar(-l),o.add(d),d.setFromMatrixColumn(this.camera.matrix,1),d.multiplyScalar(u),o.add(d);let f=this.modelScene.boundingBox.getCenter(new three.Vector3),p=this.modelScene.boundingBox.getSize(new three.Vector3),m=Math.max(p.x,p.y,p.z)/2;if(o.clamp(f.clone().sub(new three.Vector3().setScalar(m)),f.clone().add(new three.Vector3().setScalar(m))),e.state=Object.assign(Object.assign({},this.currentPano),{mode:this.mode,longitude:0,latitude:Math.PI/2,fov:this.cameraMotion.value.fov,offset:o,distance:this.locationMotion.value.distance}),this.emit(`gesture.pan`,e),e.defaultPrevented){this.panState&&(this.panState.defaultPrevented=e.defaultPrevented);return}e.isFinal&&t.defaultPrevented||this.locationMotion.set({x:o.x,y:o.y,z:o.z},0).catch(noop)}onPinchGesture(e){var t;if(!this.initAnimationIsReady)return;this.userAction=e.userAction,this.stopMomentumMovement();let n=(t=this.pinchState)==null?void 0:t.fov;if(e.isFirst){this.pinchState={x:e.center.x,y:e.center.y,fov:this.cameraMotion.value.fov};return}if(e.isFinal&&(this.pinchState=void 0),n===void 0)return;let r=clamp$1(n/e.scale,this.minFov,this.maxFov);e.state.fov=r,this.emit(`gesture.pinch`,e),!e.defaultPrevented&&(this.cameraMotion.set({fov:r},0).catch(noop),e.type=`gesture.pan`,this.onPanGesture(e))}onMouseWheel(e){if(!this.initAnimationIsReady)return;this.userAction=e.userAction,this.stopMomentumMovement();let t=clamp$1(this.cameraMotion.value.fov-e.center.delta,this.minFov,this.maxFov);e.state.fov=t,this.emit(`gesture.mousewheel`,e),!e.defaultPrevented&&this.cameraMotion.set({fov:t},0).catch(noop)}},defaultPanoramaLikeControllerCustomInitArgs={defaultLatitude:0,defaultFov:90,maxFov:120,minFov:20,maxLatitude:e=>Math.PI/2-e/2/180*Math.PI,minLatitude:e=>-Math.PI/2+e/2/180*Math.PI,moveSpeed:3.6,intersectMeshCreator:()=>new IntersectMesh,aerialObserverMinHeight:5},PanoramaLikeController=class e extends BaseController{static parseArgs(t){var n,r,o,s,c,l,u,d,f;if(t instanceof e)return t;let p=super.parseArgs(t);return Object.assign(Object.assign({},p),{defaultLatitude:(n=t.defaultLatitude)==null?defaultPanoramaLikeControllerCustomInitArgs.defaultLatitude:n,defaultFov:(r=t.defaultFov)==null?defaultPanoramaLikeControllerCustomInitArgs.defaultFov:r,maxFov:(o=t.maxFov)==null?defaultPanoramaLikeControllerCustomInitArgs.maxFov:o,minFov:(s=t.minFov)==null?defaultPanoramaLikeControllerCustomInitArgs.minFov:s,maxLatitude:(c=t.maxLatitude)==null?defaultPanoramaLikeControllerCustomInitArgs.maxLatitude:c,minLatitude:(l=t.minLatitude)==null?defaultPanoramaLikeControllerCustomInitArgs.minLatitude:l,moveSpeed:(u=t.moveSpeed)==null?defaultPanoramaLikeControllerCustomInitArgs.moveSpeed:u,intersectMeshCreator:(d=t.intersectMeshCreator)==null?defaultPanoramaLikeControllerCustomInitArgs.intersectMeshCreator:d,aerialObserverMinHeight:(f=t.aerialObserverMinHeight)==null?defaultPanoramaLikeControllerCustomInitArgs.aerialObserverMinHeight:f})}static initAnimationEndState(e){var t,n,r,o,s,c;let l=this.parseArgs(e),u=l.works,{state:d,currentState:f}=e.initial,p=typeof d.panoIndex==`number`?{workCode:(r=(t=d.workCode)==null?(n=l.works[0])==null?void 0:n.workCode:t)==null?``:r,panoIndex:d.panoIndex}:{workCode:f.workCode,panoIndex:f.panoIndex},m=u.getObserver(p),h=clamp$1((o=d.fov)==null?isFristPersonMode(f.mode)?f.fov:l.defaultFov:o,l.minFov,l.maxFov),g=(s=d.longitude)==null?f.longitude:s,_=clamp$1(typeof l.minLatitude==`function`?l.minLatitude(h):l.minLatitude,-Math.PI/2,Math.PI/2),v=clamp$1(typeof l.maxLatitude==`function`?l.maxLatitude(h):l.maxLatitude,-Math.PI/2,Math.PI/2),y=clamp$1((c=d.latitude)==null?isFristPersonMode(f.mode)?f.latitude:l.defaultLatitude:c,_,v),b=new three.Vector3;return m&&b.copy(m.position).applyMatrix4(m.work.transform),{workCode:p.workCode,panoIndex:p.panoIndex,mode:`PanoramaLike`,longitude:g,latitude:y,fov:h,offset:b,distance:0}}constructor(t){let n=e.parseArgs(t);super(n),this.mode=`PanoramaLike`,this.defaultLatitude=n.defaultLatitude,this.defaultFov=n.defaultFov,this.maxFov=n.maxFov,this.minFov=n.minFov,this.maxLatitude=n.maxLatitude,this.minLatitude=n.minLatitude,this.moveSpeed=n.moveSpeed,this.intersectMeshCreator=n.intersectMeshCreator,this.aerialObserverMinHeight=n.aerialObserverMinHeight,this.intersectMesh=this.intersectMeshCreator(),this.intersectMesh.name=`intersect`,this.intersectMesh.visible=!1,this.helper.add(this.intersectMesh)}updateConfiguration(e){if(super.updateConfiguration(e)===!1)return!1;if(e.defaultLatitude!==void 0&&this.defaultLatitude!==e.defaultLatitude&&(this.defaultLatitude=e.defaultLatitude),e.maxLatitude!==void 0&&this.maxLatitude!==e.maxLatitude&&(this.maxLatitude=e.maxLatitude),e.minLatitude!==void 0&&this.minLatitude!==e.minLatitude&&(this.minLatitude=e.minLatitude),e.defaultFov!==void 0&&this.defaultFov!==e.defaultFov&&(this.defaultFov=e.defaultFov),e.maxFov!==void 0&&this.maxFov!==e.maxFov&&(this.maxFov=e.maxFov),e.minFov!==void 0&&this.minFov!==e.minFov&&(this.minFov=e.minFov),e.moveSpeed!==void 0&&this.moveSpeed!==e.moveSpeed&&(this.moveSpeed=e.moveSpeed),e.intersectMeshCreator!==void 0&&this.intersectMeshCreator!==e.intersectMeshCreator){this.intersectMeshCreator=e.intersectMeshCreator;let t=this.intersectMesh;this.intersectMesh=this.intersectMeshCreator(),this.intersectMesh.name=t.name,this.intersectMesh.visible=t.visible;let n=this.intersectMesh.parent;n&&n.add(this.intersectMesh),t.dispose()}return e.aerialObserverMinHeight!==void 0&&this.aerialObserverMinHeight!==e.aerialObserverMinHeight&&(this.aerialObserverMinHeight=e.aerialObserverMinHeight),!0}destroy(){super.destroy(),this.intersectMesh&&(this.helper.remove(this.intersectMesh),this.intersectMesh.dispose()),this.panState=void 0}isReady(){return this.panState||this.pinchState?!1:super.isReady()}calculateMovingDuration(e,t){switch(typeof e){case`function`:return e(t,this.moveSpeed);case`number`:return e;case`string`:return Number(e);default:return clamp$1(t,2,5)/this.moveSpeed*1e3}}hideIntersectMesh(){this.intersectMesh.visible=!1,this.needsRender=!0}coordinatesForOffset(e){let t=this.cameraMotion.value.fov,n=this.camera.aspect,r=this.renderer.getSize(new three.Vector2);return{longitude:2*e.x/(r.x*this.viewport.width)*t/95*n,latitude:-2*e.y/(r.y*this.viewport.height)*t/95}}cameraBounce(){let{longitude:e,latitude:t,fov:n}=this.cameraMotion.value,r=[{progress:0,value:{longitude:e,latitude:t,fov:n}},{progress:.5,value:{longitude:e,latitude:t,fov:n*.98}},{progress:1,value:{longitude:e,latitude:t,fov:n}}];this.cameraMotion.setKeyframes(r,500).catch(noop)}requestMomentumMovement(e,t,n,r){if(this.inMomentumMovement===null)return;r=Math.max(r,1);let o=Object.assign({},n),s={longitude:0,latitude:0};for(let e=0;e<r;e++)o.longitude*=.996,o.latitude*=.996*.99,s.longitude+=o.longitude,s.latitude+=o.latitude;let c=this.cameraMotion.value.fov,l=formatRad$1(this.cameraMotion.value.longitude+s.longitude),u=clamp$1(typeof this.minLatitude==`function`?this.minLatitude(c):this.minLatitude,-Math.PI/2,Math.PI/2),d=clamp$1(typeof this.maxLatitude==`function`?this.maxLatitude(c):this.maxLatitude,-Math.PI/2,Math.PI/2),f=clamp$1(this.cameraMotion.value.latitude+s.latitude,u,d),p=Object.assign(Object.assign({},this.currentPano),{mode:this.mode,longitude:l,latitude:f,fov:c,offset:this.camera.pose.offset.clone(),distance:this.camera.pose.distance}),m=!(o.longitude>1e-4||o.longitude<-1e-4||o.latitude>1e-4||o.latitude<-1e-4),h=createEvent(`gesture.momentum`,Object.assign(Object.assign({},e),{isFirst:t,isFinal:m,state:p}));if(this.emit(`gesture.create`,h),this.inMomentumMovement.event=h,this.emit(`gesture.momentum`,h),e.defaultPrevented){this.inMomentumMovement=null;return}this.inMomentumMovement&&(this.cameraMotion.set({longitude:l,latitude:f},0).catch(noop),m?this.inMomentumMovement=null:AnimationFrameLoop.shared.add((t,n)=>{this.requestMomentumMovement(e,!1,o,n)},!0))}onPanGesture(e){this.userAction=e.userAction,this.stopMomentumMovement(),this.hideIntersectMesh();let t=this.panState,n=e.pointers.length;if(e.isFinal?this.panState=void 0:this.panState={pointerLength:n,defaultPrevented:e.defaultPrevented,x:e.center.x,y:e.center.y},t===void 0||t.pointerLength!==n){this.emit(`gesture.pan`,e);return}let r={x:e.center.x-t.x,y:e.center.y-t.y},o=this.coordinatesForOffset(r),s=formatRad$1(this.cameraMotion.value.longitude+o.longitude),c=this.cameraMotion.value.fov,l=clamp$1(typeof this.minLatitude==`function`?this.minLatitude(c):this.minLatitude,-Math.PI/2,Math.PI/2),u=clamp$1(typeof this.maxLatitude==`function`?this.maxLatitude(c):this.maxLatitude,-Math.PI/2,Math.PI/2),d=clamp$1(this.cameraMotion.value.latitude+o.latitude,l,u);this.camera.aspect<1&&Math.abs(e.overallVelocityX)>.2&&Math.atan2(Math.abs(e.overallVelocityY),Math.abs(e.overallVelocityX))<Math.PI/6.923&&(d=this.cameraMotion.value.latitude);let f=Object.assign(Object.assign({},this.currentPano),{mode:this.mode,longitude:s,latitude:d,fov:c,offset:this.camera.pose.offset.clone(),distance:this.camera.pose.distance});if(e.state=f,this.emit(`gesture.pan`,e),e.defaultPrevented){this.panState&&(this.panState.defaultPrevented=e.defaultPrevented);return}if(e.isFinal&&t.defaultPrevented)return;let p={longitude:f.longitude,latitude:f.latitude,fov:f.fov};if(this.cameraMotion.set(p,0).catch(noop),e.isFinal){let t=e.velocityX,n=e.velocityY*.6;Math.abs(n)>.5&&Math.abs(t)<.5&&(t=0),this.inMomentumMovement={uuid:createUuid()},this.requestMomentumMovement(e,!0,this.coordinatesForOffset({x:t,y:n}),0)}}onPinchGesture(e){var t;this.userAction=e.userAction,this.stopMomentumMovement();let n=(t=this.pinchState)==null?void 0:t.fov,r=e.scale;if(e.isFirst){this.pinchState={x:e.center.x,y:e.center.y,fov:this.cameraMotion.value.fov};return}if(e.isFinal&&(this.pinchState=void 0),n===void 0)return;let o=clamp$1(n/r,this.minFov,this.maxFov),s=clamp$1(typeof this.minLatitude==`function`?this.minLatitude(o):this.minLatitude,-Math.PI/2,Math.PI/2),c=clamp$1(typeof this.maxLatitude==`function`?this.maxLatitude(o):this.maxLatitude,-Math.PI/2,Math.PI/2),l=clamp$1(this.cameraMotion.value.latitude,s,c);e.state.fov=o,e.state.latitude=l,this.emit(`gesture.pinch`,e),!e.defaultPrevented&&(this.cameraMotion.set({fov:o,latitude:l},0).catch(noop),e.type=`gesture.pan`,this.onPanGesture(e))}onMouseWheel(e){this.userAction=e.userAction,this.stopMomentumMovement();let t=clamp$1(this.cameraMotion.value.fov-e.center.delta,this.minFov,this.maxFov),n=clamp$1(typeof this.minLatitude==`function`?this.minLatitude(t):this.minLatitude,-Math.PI/2,Math.PI/2),r=clamp$1(typeof this.maxLatitude==`function`?this.maxLatitude(t):this.maxLatitude,-Math.PI/2,Math.PI/2),o=clamp$1(this.cameraMotion.value.latitude,n,r);e.state.fov=t,e.state.latitude=o,this.emit(`gesture.mousewheel`,e),!e.defaultPrevented&&(this.cameraMotion.set({fov:t,latitude:o},0).catch(noop),this.onMouseMove(e))}onMouseMove(e){var t,n;if(!this.intersectMesh.parent||this.panState||(this.emit(`gesture.mousemove`,e),e.defaultPrevented))return;let r=e.center.raycaster;if(e.isFinal&&this.intersectMesh.parent){this.hideIntersectMesh();return}r.floorIndex=-1;let[o]=this.modelScene.intersectRaycaster(r),s=createEvent(`intersect.update`,{raycaster:r,intersection:o==null?null:o,object:this.intersectMesh});if(this.emit(`intersect.update`,s),s.defaultPrevented){this.hideIntersectMesh();return}if(o){let e=(n=(t=o.face)==null?void 0:t.normal)==null?new three.Vector3().copy(r.ray.direction).multiplyScalar(-1):n,s=e.clone(),c=o.point.clone();this.intersectMesh.position.copy(c);let l=c.clone().add(s);if(this.intersectMesh.lookAt(l),Math.abs(e.y)>.99){let e=this.camera.position.clone().sub(c);this.intersectMesh.rotation.z=-Math.atan2(e.z,e.x)}this.intersectMesh.visible=!0,this.needsRender=!0}else this.hideIntersectMesh()}onDblTapGesture(e){this.userAction=e.userAction,this.stopMomentumMovement();let t=this.cameraMotion.value.fov,n=2,r=this.works.getObserver(this.currentPano);if(r){let e=r.images.tiles;e&&e.length&&(n=Math.max(...e.map(e=>e.level)))}let o=Math.max(40-n*5,this.minFov,5),s=o-t<t-this.defaultFov?o:this.defaultFov;e.state.fov=s,this.emit(`gesture.dbltap`,e),!e.defaultPrevented&&(this.cameraMotion.set({fov:s},360).catch(noop),this.hideIntersectMesh())}},blankVideo=`data:video/mp4;base64,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`,result;function canplayVideo(){return result||(result=new Promise(e=>{let t,n=document.createElement(`video`);n.muted=!0,n.src=blankVideo,n.addEventListener(`timeupdate`,function r(){n.removeEventListener(`timeupdate`,r,!1),clearTimeout(t);let o=document.createElement(`canvas`);o.width=o.height=1;let s=o.getContext(`2d`);if(!s){e(!1);return}s.drawImage(n,0,0,1,1);let{data:c}=s.getImageData(0,0,1,1);c[3]>10?e(!0):e(!1)},!1),n.addEventListener(`canplay`,function e(){n.removeEventListener(`canplay`,e,!1),n.play()},!1),t=window.setTimeout(()=>e(!1),1e3)}))}var FACE_ORDER=[`right`,`left`,`up`,`down`,`front`,`back`];function getBox(e,t,n,r){let o=new three.Box3;switch(e){case`up`:o.min.y=.5,o.max.y=.5,o.min.x=t-.5,o.max.x=t-.5+r,o.min.z=-n+.5-r,o.max.z=-n+.5;break;case`down`:o.min.y=-.5,o.max.y=-.5,o.min.x=t-.5,o.max.x=t-.5+r,o.min.z=n-.5,o.max.z=n-.5+r;break;case`left`:o.min.x=-.5,o.max.x=-.5,o.min.z=-t+.5-r,o.max.z=-t+.5,o.min.y=-n+.5-r,o.max.y=-n+.5;break;case`right`:o.min.x=.5,o.max.x=.5,o.min.z=t-.5,o.max.z=t-.5+r,o.min.y=-n+.5-r,o.max.y=-n+.5;break;case`front`:o.min.z=-.5,o.max.z=-.5,o.min.x=t-.5,o.max.x=t-.5+r,o.min.y=-n+.5-r,o.max.y=-n+.5;break;case`back`:o.min.z=.5,o.max.z=.5,o.min.x=-t+.5-r,o.max.x=-t+.5,o.min.y=-n+.5-r,o.max.y=-n+.5;break;default:break}return o.applyMatrix4(new three.Matrix4().makeRotationY(Math.PI))}var createChildren=(e,t)=>{if(e.level>=t)return;let n=e.level+1,r=e.size/2,o=[new three.Vector2(e.position.x,e.position.y),new three.Vector2(e.position.x+r,e.position.y),new three.Vector2(e.position.x,e.position.y+r),new three.Vector2(e.position.x+r,e.position.y+r)];for(let s of o){let o={face:e.face,level:n,size:r,position:s,box:getBox(e.face,s.x,s.y,r),parent:e,children:[]};e.children.push(o),createChildren(o,t)}};function createTileCubeNode(e,t){let n={level:0,face:e,position:new three.Vector2(0,0),size:1,box:getBox(e,0,0,1),parent:null,children:[]};return createChildren(n,t),n}function createTileCubeTree(e){return{children:FACE_ORDER.map(t=>createTileCubeNode(t,e)),maxLevel:e}}function traverseTileCubeNode(e,t){for(let n of e.children)t(n)!==!1&&traverseTileCubeNode(n,t)}var _a$1,scratchSortVector3=new three.Vector3,scratchCameraQuaternion=new three.Quaternion,scratchCameraMatrix=new three.Matrix4,scratchCameraProjectMatrix=new three.Matrix4,scratchFrustumMatrix=new three.Matrix4,scratchFrustumMatrixInverse=new three.Matrix4,scratchFrustumProjectMatrix=new three.Matrix4,scratchSceneQuaternionInverse=new three.Quaternion,scratchSceneMatrixInverse=new three.Matrix4,clearColor$1=new three.Color(0,0,0),clearAlpha=0,scratchPrevClearColor$1=new three.Color,clippingPlanes=[],SQRT1_2=(_a$1=Math.SQRT1_2)==null?Math.sqrt(2):_a$1,TILE_QUATERNION={up:new three.Quaternion(SQRT1_2,0,0,SQRT1_2),down:new three.Quaternion(-SQRT1_2,0,0,SQRT1_2),left:new three.Quaternion(0,SQRT1_2,0,SQRT1_2),right:new three.Quaternion(0,-SQRT1_2,0,SQRT1_2),front:new three.Quaternion(0,0,0,1),back:new three.Quaternion(0,1,0,0)},tileGeometry=(()=>{let e=new Float32Array([-.5,-.5,0,.5,-.5,0,-.5,.5,0,.5,.5,0]),t=new Float32Array([0,0,1,0,0,1,1,1]),n=new Uint32Array([0,1,2,1,3,2]),r=new three.BufferGeometry;return r.setAttribute(`position`,new three.BufferAttribute(e,3)),r.setAttribute(`uv`,new three.BufferAttribute(t,2)),r.setIndex(new three.BufferAttribute(n,1)),r.computeBoundingBox(),r})(),TILE_MATERIAL_VERTEX_SHADER=`
|
|
1532
|
+
`,side:three.DoubleSide,blending:three.CustomBlending,blendSrc:three.SrcAlphaFactor,blendDst:three.OneMinusSrcAlphaFactor,blendSrcAlpha:three.OneFactor,blendDstAlpha:three.OneMinusSrcAlphaFactor,depthWrite:!1,transparent:!0}),IntersectMesh=class extends three.Object3D{constructor(){super(),this.ringMesh=new three.Mesh(sharedGeometry$2,sharedMaterial),this.ringMesh.position.z=.01,this.ringMesh.renderOrder=9999999999,this.add(this.ringMesh)}dispose(){this.remove(this.ringMesh)}},scratchObserverBox$2=new three.Box3,scratchVector3$4=new three.Vector3,defaultFloorplanControllerCustomInitArgs={defaultLongitude:Math.PI/4,defaultLatitude:Math.PI/4,defaultFov:80,maxFov:120,minFov:20,maxLatitude:Math.PI/2,minLatitude:-Math.PI/2,intersectMeshCreator:()=>new IntersectMesh},FloorplanController=class e extends BaseController{static distanceFromModel(e,t,n){let r=e.boundingBox,o=r.isEmpty()?10:Math.pow(Math.pow(r.max.x-r.min.x+1,2)+Math.pow(r.max.y-r.min.y+1,2)+Math.pow(r.max.z-r.min.z+1,2),1/2);o=isNaN(o)||!isFinite(o)?1:o;let s=o/2/Math.tan(Math.PI*t/360);return n<1&&(s/=n),isNaN(s)||!isFinite(s)?o:s}static parseArgs(t){var n,r,o,s,c,l,u,d;if(t instanceof e)return t;let f=super.parseArgs(t);return Object.assign(Object.assign({},f),{defaultLongitude:(n=t.defaultLongitude)==null?defaultFloorplanControllerCustomInitArgs.defaultLongitude:n,defaultLatitude:(r=t.defaultLatitude)==null?defaultFloorplanControllerCustomInitArgs.defaultLatitude:r,defaultFov:(o=t.defaultFov)==null?defaultFloorplanControllerCustomInitArgs.defaultFov:o,maxFov:(s=t.maxFov)==null?defaultFloorplanControllerCustomInitArgs.maxFov:s,minFov:(c=t.minFov)==null?defaultFloorplanControllerCustomInitArgs.minFov:c,maxLatitude:(l=t.maxLatitude)==null?defaultFloorplanControllerCustomInitArgs.maxLatitude:l,minLatitude:(u=t.minLatitude)==null?defaultFloorplanControllerCustomInitArgs.minLatitude:u,intersectMeshCreator:(d=t.intersectMeshCreator)==null?defaultFloorplanControllerCustomInitArgs.intersectMeshCreator:d})}static initAnimationEndState(t){var n,r,o,s,c,l,u;let d=this.parseArgs(t),{state:f,currentState:p}=t.initial,m=typeof f.panoIndex==`number`?{workCode:(o=(n=f.workCode)==null?(r=d.works[0])==null?void 0:r.workCode:n)==null?``:o,panoIndex:f.panoIndex}:{workCode:p.workCode,panoIndex:p.panoIndex},h=(s=f.fov)==null?d.defaultFov:s,g=(c=f.longitude)==null?isThirdPersonMode(p.mode)?p.longitude:d.defaultLongitude:c,_=clamp$1(typeof d.minLatitude==`function`?d.minLatitude(h):d.minLatitude,-Math.PI/2,Math.PI/2),v=clamp$1(typeof d.maxLatitude==`function`?d.maxLatitude(h):d.maxLatitude,-Math.PI/2,Math.PI/2),y=clamp$1((l=f.latitude)==null?p.mode===`Floorplan`?p.latitude:d.defaultLatitude:l,_,v),b=f.offset?f.offset.clone():t.modelScene.boundingBox.getCenter(new three.Vector3),S=(u=f.distance)==null?e.distanceFromModel(d.modelScene,d.defaultFov,d.camera.aspect):u;return Object.assign(Object.assign({},m),{mode:`Floorplan`,longitude:g,latitude:y,fov:h,offset:b,distance:S})}constructor(t){let n=e.parseArgs(t);super(n),this.mode=`Floorplan`,this.defaultLongitude=n.defaultLongitude,this.defaultLatitude=n.defaultLatitude,this.defaultFov=n.defaultFov,this.maxFov=n.maxFov,this.minFov=n.minFov,this.maxLatitude=n.maxLatitude,this.minLatitude=n.minLatitude,this.locationMotion=new Motion({x:this.camera.pose.offset.x,y:this.camera.pose.offset.y,z:this.camera.pose.offset.z,distance:this.camera.pose.distance}),this.modelAlphaMotion=new Motion({modelAlpha:this.modelScene.parameter.resolveValue().modelAlpha}),this.perspToOrthoMotion=new Motion({perspToOrtho:this.camera.perspToOrtho.x}),this.pendingTextureId=null,this.textureLoader=new TextureLoader,this.intersectMeshCreator=n.intersectMeshCreator,this.intersectMesh=this.intersectMeshCreator(),this.intersectMesh.name=`intersect`,this.intersectMesh.visible=!1,this.helper.add(this.intersectMesh)}updateConfiguration(e){if(super.updateConfiguration(e)===!1)return!1;if(e.defaultLongitude!==void 0&&this.defaultLongitude!==e.defaultLongitude&&(this.defaultLongitude=e.defaultLongitude),e.defaultLatitude!==void 0&&this.defaultLatitude!==e.defaultLatitude&&(this.defaultLatitude=e.defaultLatitude),e.defaultFov!==void 0&&this.defaultFov!==e.defaultFov&&(this.defaultFov=e.defaultFov),e.maxFov!==void 0&&this.maxFov!==e.maxFov&&(this.maxFov=e.maxFov),e.minFov!==void 0&&this.minFov!==e.minFov&&(this.minFov=e.minFov),e.maxLatitude!==void 0&&this.maxLatitude!==e.maxLatitude&&(this.maxLatitude=e.maxLatitude),e.minLatitude!==void 0&&this.minLatitude!==e.minLatitude&&(this.minLatitude=e.minLatitude),e.intersectMeshCreator!==void 0&&this.intersectMeshCreator!==e.intersectMeshCreator){this.intersectMeshCreator=e.intersectMeshCreator;let t=this.intersectMesh;this.intersectMesh=this.intersectMeshCreator(),this.intersectMesh.name=t.name,this.intersectMesh.visible=t.visible;let n=this.intersectMesh.parent;n&&n.add(this.intersectMesh),t.dispose()}return!0}destroy(){super.destroy(),this.pendingTextureId=null,this.locationMotion.dispose(),this.panState=void 0,this.intersectMesh.dispose(),this.helper.remove(this.intersectMesh)}isReady(){return this.locationMotion.ended===!1?!1:super.isReady()}updateWork(e,t,n,r){var o;return this.works=e,this.updateCamera(t,(o=n.duration)==null?0:o,r),!0}updateModel(t){super.updateModel(t);let n=t.boundingBox.getCenter(new three.Vector3),r=e.distanceFromModel(t,this.defaultFov,this.camera.aspect);this.updateCamera({offset:n,distance:r},0,!0)}updateCamera(e,t,n){return this.initAnimationReady.then(()=>{this.userAction=n,this.stopMomentumMovement();let r={},o={};return e.distance!==void 0&&(r.distance=e.distance),e.offset!==void 0&&(r.x=e.offset.x,r.y=e.offset.y,r.z=e.offset.z),e.longitude!==void 0&&(o.longitude=e.longitude),e.latitude!==void 0&&(o.latitude=e.latitude),e.fov!==void 0&&(o.fov=e.fov),this.locationMotion.set(r,t).catch(noop),this.cameraMotion.set(o,t).catch(noop)})}updateCameraWithKeyframes(e,t,n){return this.initAnimationReady.then(()=>{this.userAction=n,this.stopMomentumMovement();let r=[],o=[];for(let t of e)r.push({key:t.key,progress:t.progress,value:{distance:t.value.distance,x:t.value.offset.x,y:t.value.offset.x,z:t.value.offset.x}}),o.push({key:t.key,progress:t.progress,value:{longitude:t.value.longitude,latitude:t.value.latitude,fov:t.value.fov}});return this.locationMotion.setKeyframes(r,t).catch(noop),this.cameraMotion.setKeyframes(e,t)})}updateTime(e,t,...n){if(this.destroyed)return;let r={},o={};if(this.modelAlphaMotion.ended||(this.modelAlphaMotion.update(e),r.modelAlpha=this.modelAlphaMotion.value.modelAlpha),this.modelScene.parameter.modelAlpha===0&&this.modelScene.parameter.progress!==1){let{pano0:e,pano1:t}=this.modelScene.parameter;e&&e.map!==(t==null?void 0:t.map)&&e.map.dispose(),r.progress=1,r.pano0=r.pano1=t}if(this.perspToOrthoMotion.ended||(this.perspToOrthoMotion.update(e),this.camera.perspToOrtho.setScalar(clamp$1(this.perspToOrthoMotion.value.perspToOrtho,0,1))),this.locationMotion.ended||(this.locationMotion.update(e),o.distance=this.locationMotion.value.distance,o.offset=new three.Vector3(this.locationMotion.value.x,this.locationMotion.value.y,this.locationMotion.value.z)),this.cameraMotion.ended||(this.cameraMotion.update(e),o.longitude=this.cameraMotion.value.longitude,o.latitude=this.cameraMotion.value.latitude,o.fov=this.cameraMotion.value.fov),isEmptyObject(r)||this.modelScene.parameter.set(r),isEmptyObject(o)||this.setCamera(o),this.intersectMesh&&this.intersectMesh.parent){let e=clamp$1(this.camera.position.distanceTo(this.intersectMesh.position)*(2*Math.tan(.5*this.camera.fov/180*Math.PI))/5,.5);this.intersectMesh.scale.setScalar(e)}else this.intersectMesh.scale.setScalar(1)}getTargetState(){let e=this.cameraMotion.getKeyFrameSegment(now())[1],t=this.locationMotion.getKeyFrameSegment(now())[1];return Object.assign(Object.assign({},this.currentPano),{mode:this.mode,longitude:e.value.longitude,latitude:e.value.latitude,fov:e.value.fov,offset:new three.Vector3(t.value.x,t.value.y,t.value.z),distance:t.value.distance})}initAnimation(){return this.destroyed?Promise.resolve():new Promise(t=>{let{state:n,currentState:r,duration:o,userAction:s}=this.initial;this.userAction=s;let c=e.initAnimationEndState(this),l=pick(c,[`longitude`,`latitude`,`fov`]),u={x:c.offset.x,y:c.offset.y,z:c.offset.z,distance:c.distance};this.emit(`initAnimation.start`,createEvent(`initAnimation.start`,{state:c,userAction:this.userAction})),this.modelAlphaMotion.set({modelAlpha:1},o/3).catch(noop),this.perspToOrthoMotion.set({perspToOrtho:0},o).catch(noop),this.cameraMotion.set(l,o).catch(noop),this.locationMotion.set(u,o).then(()=>{this.emit(`initAnimation.end`,createEvent(`initAnimation.end`,{state:c,userAction:this.userAction}))},e=>{let t=Object.assign(Object.assign(Object.assign({},this.currentPano),{mode:this.mode}),clonePose(this.camera.pose));this.emit(`initAnimation.end`,createEvent(`initAnimation.end`,{state:t,userAction:this.userAction}))}).then(()=>{t()})})}updateRenderSize(e){this.needsRender=!0}getForwardObserverOrNot(e){let[t]=this.modelScene.intersectRaycaster(e);if(!t)return null;let n=[];for(let t of this.works){let r=this.modelScene.models.find(e=>e.work===t);if(!(!r||r.visible===!1)&&!(t.observers.length<=0)&&(scratchObserverBox$2.copy(t.observerBox).expandByScalar(10).applyMatrix4(t.transform),scratchObserverBox$2.containsPoint(e.ray.origin)||e.ray.intersectsBox(scratchObserverBox$2)))for(let e of t.observers)n.push(e)}let[r,o]=arrayMin(n,e=>scratchVector3$4.copy(e.standingPosition).applyMatrix4(e.work.transform).distanceTo(t.point),!0);return r&&o<Math.max(r.standingPosition.distanceTo(this.camera.position)/5,10)?r:null}coordinatesForOffset(e){let t=this.renderer.getSize(new three.Vector2);return{longitude:-2*e.x/(t.x*this.viewport.width),latitude:2*e.y/(t.y*this.viewport.height)}}requestMomentumMovement(e,t,n,r){if(this.inMomentumMovement===null)return;r=Math.max(r,1);let o=Object.assign({},n),s={longitude:0,latitude:0};for(let e=0;e<r;e++)o.longitude*=.996,o.latitude*=.996*.998,s.longitude+=o.longitude,s.latitude+=o.latitude;let c=formatRad$1(this.cameraMotion.value.longitude+s.longitude),l=this.cameraMotion.value.fov,u=clamp$1(typeof this.minLatitude==`function`?this.minLatitude(l):this.minLatitude,-Math.PI/2,Math.PI/2),d=clamp$1(typeof this.maxLatitude==`function`?this.maxLatitude(l):this.maxLatitude,-Math.PI/2,Math.PI/2),f=clamp$1(this.cameraMotion.value.latitude+s.latitude,u,d),p=Object.assign(Object.assign({},this.currentPano),{mode:this.mode,longitude:c,latitude:f,fov:this.cameraMotion.value.fov,offset:this.camera.pose.offset.clone(),distance:this.camera.pose.distance}),m=!(o.longitude>1e-4||o.longitude<-1e-4||o.latitude>1e-4||o.latitude<-1e-4),h=createEvent(`gesture.momentum`,Object.assign(Object.assign({},e),{isFirst:t,isFinal:m,state:p}));if(this.emit(`gesture.fire`,h),this.inMomentumMovement.event=h,this.emit(`gesture.momentum`,h),e.defaultPrevented){this.inMomentumMovement=null;return}this.inMomentumMovement&&(this.cameraMotion.set({longitude:c,latitude:f},0).catch(noop),m?this.inMomentumMovement=null:AnimationFrameLoop.shared.add((t,n)=>{this.requestMomentumMovement(e,!1,o,n)},!0))}onPanGesture(e){this.userAction=e.userAction,this.stopMomentumMovement(),this.hideIntersectMesh();let t=this.panState,n=e.pointers.length;if(e.isFinal?this.panState=void 0:this.panState={pointerLength:n,defaultPrevented:e.defaultPrevented,x:e.center.x,y:e.center.y},t===void 0||t.pointerLength!==n){this.emit(`gesture.pan`,e);return}let r={x:e.center.x-t.x,y:e.center.y-t.y},o=this.relativeClientPosition(e.center),s=1,c=this.camera.pose.latitude;Math.abs(c)>Math.PI/6&&(s=c<0?o.y<0?-1:1:o.y>0?-1:1),r.x*=s;let l=this.coordinatesForOffset(r),u=formatRad$1(this.cameraMotion.value.longitude+l.longitude),d=this.camera.pose.fov,f=clamp$1(typeof this.minLatitude==`function`?this.minLatitude(d):this.minLatitude,-Math.PI/2,Math.PI/2),p=clamp$1(typeof this.maxLatitude==`function`?this.maxLatitude(d):this.maxLatitude,-Math.PI/2,Math.PI/2),m=clamp$1(this.cameraMotion.value.latitude+l.latitude,f,p);this.camera.aspect<1&&Math.abs(e.overallVelocityX)>.2&&Math.atan2(Math.abs(e.overallVelocityY),Math.abs(e.overallVelocityX))<Math.PI/6.923&&(m=this.cameraMotion.value.latitude);let h=Object.assign(Object.assign({},this.currentPano),{mode:this.mode,longitude:u,latitude:m,fov:d,offset:this.camera.pose.offset,distance:this.camera.pose.distance});if(e.state=h,this.emit(`gesture.pan`,e),e.defaultPrevented){this.panState&&(this.panState.defaultPrevented=e.defaultPrevented);return}if(!(e.isFinal&&t.defaultPrevented)&&(this.cameraMotion.set({longitude:h.longitude,latitude:h.latitude},0).catch(noop),e.isFinal)){let t=e.velocityX*s,n=e.velocityY;this.inMomentumMovement={uuid:createUuid()},this.requestMomentumMovement(e,!0,this.coordinatesForOffset({x:t,y:n}),0)}}onPinchGesture(e){var t;if(!this.initAnimationIsReady)return;this.userAction=e.userAction,this.stopMomentumMovement();let n=(t=this.pinchState)==null?void 0:t.fov;if(e.isFirst){this.pinchState={x:e.center.x,y:e.center.y,fov:this.cameraMotion.value.fov};return}if(e.isFinal&&(this.panState=void 0,this.pinchState=void 0),n===void 0)return;let r=clamp$1(n/e.scale,this.minFov,this.maxFov),o=clamp$1(typeof this.minLatitude==`function`?this.minLatitude(r):this.minLatitude,-Math.PI/2,Math.PI/2),s=clamp$1(typeof this.maxLatitude==`function`?this.maxLatitude(r):this.maxLatitude,-Math.PI/2,Math.PI/2),c=clamp$1(this.cameraMotion.value.latitude,o,s);e.state.fov=r,e.state.latitude=c,this.emit(`gesture.pinch`,e),!e.defaultPrevented&&(this.cameraMotion.set({fov:r,latitude:c},0).catch(noop),this.onPanGesture(e))}onMouseMove(e){var t,n;if(!this.intersectMesh.parent||this.panState)return;if(this.emit(`gesture.mousemove`,e),e.defaultPrevented){this.hideIntersectMesh();return}let r=e.center.raycaster;if(e.isFinal&&this.intersectMesh.parent&&this.intersectMesh.visible===!0){this.hideIntersectMesh();return}let[o]=this.modelScene.intersectRaycaster(r),s=createEvent(`intersect.update`,{raycaster:r,intersection:o==null?null:o,object:this.intersectMesh});if(this.emit(`intersect.update`,s),s.defaultPrevented){this.hideIntersectMesh();return}if(o){let e=(n=(t=o.face)==null?void 0:t.normal)==null?new three.Vector3().copy(r.ray.direction).multiplyScalar(-1):n,s=e.clone(),c=o.point.clone();this.intersectMesh.position.copy(c);let l=c.clone().add(s);if(this.intersectMesh.lookAt(l),Math.abs(e.y)>.99){let e=this.camera.position.clone().sub(c);this.intersectMesh.rotation.z=-Math.atan2(e.z,e.x)}this.intersectMesh.visible=!0,this.needsRender=!0}else this.hideIntersectMesh()}onMouseWheel(e){if(!this.initAnimationIsReady)return;this.userAction=e.userAction,this.stopMomentumMovement();let{minFov:t,maxFov:n}=this,r=clamp$1(this.camera.fov-e.center.delta,t,n),o=clamp$1(typeof this.minLatitude==`function`?this.minLatitude(r):this.minLatitude,-Math.PI/2,Math.PI/2),s=clamp$1(typeof this.maxLatitude==`function`?this.maxLatitude(r):this.maxLatitude,-Math.PI/2,Math.PI/2),c=clamp$1(this.cameraMotion.value.latitude,o,s);e.state.fov=r,e.state.latitude=c,this.emit(`gesture.mousewheel`,e),!e.defaultPrevented&&this.cameraMotion.set({fov:r,latitude:c},0).catch(noop)}onTapGesture(e){var t;this.userAction=e.userAction,this.stopMomentumMovement();let n=e.center.raycaster,r=this.getForwardObserverOrNot(n);if(!r)this.emit(`gesture.tap`,e);else{let n={longitude:this.camera.pose.longitude,latitude:0},o=Object.assign(Object.assign({},e.state),{mode:`Panorama`,workCode:r.work.workCode,panoIndex:r.panoIndex,longitude:n.longitude,latitude:n.latitude,offset:r?r.position.clone():new three.Vector3,distance:0});if(e.state=o,this.emit(`gesture.tap`,e),!e.defaultPrevented&&(this.emit(`pano.select`,createEvent(`pano.select`,{prevPano:this.currentPano,state:o,userAction:e.userAction,options:n,progress:0,error:null})),r&&r.active)){let e=this.pendingTextureId=createUuid(),s=panoStringify({panoIndex:r.panoIndex,workCode:r.work.workCode}),c={right:r.images.work.getURL(r.images.right),left:r.images.work.getURL(r.images.left),up:r.images.work.getURL(r.images.up),down:r.images.work.getURL(r.images.down),front:r.images.work.getURL(r.images.front),back:r.images.work.getURL(r.images.back)},l=this.imageOptions.transform,u=Object.assign({key:`pano.${s}`},pick(this.imageOptions,[`format`,`size`,`quality`,`sharpen`,`forceUseExifOrientation`,`mappings`])),d=`pano:`+jsonHash([c,u,l]),f=this.modelScene.parameter,p;f.pano0&&f.pano0.map.name===d?p=f.pano0:f.pano1&&f.pano1.map.name===d&&(p=f.pano1),p?(f.pano0&&f.pano0.map!==p.map&&f.pano0.map.dispose(),f.pano1&&f.pano1.map!==p.map&&f.pano1.map!==((t=f.pano0)==null?void 0:t.map)&&f.pano1.map.dispose(),f.set({pano0:p,pano1:p}),this.emit(`pano.request`,createEvent(`pano.request`,{userAction:!0,prevPano:this.currentPano,progress:0,state:o,options:n,error:null}))):this.textureLoader.loadCubeTexture(c,{imageURL:{transform:l,options:u},format:three.RGBFormat,viaAjax:!0,fetcher:getFetcher(this.fiveId,r.work)},void 0,void 0,void 0,this.renderer).then(t=>{var c,l;let{body:u}=t;if(this.destroyed||this.pendingTextureId!==e){u.dispose();return}this.pendingTextureId=null,u.name=d;let p=Array.isArray(u.image)?u.image[0]:u.image,m=(c=p==null?void 0:p.width)==null?2048:c,h=r.images.histogram;h||(h=new Histogram().formPixels(getRgbaDataFromCubeTexture(this.renderer,u,!0,sharedHistogramRgbaData).data),r.images.histogram=h);let g={panoId:s,map:u,mapSize:m,mapHistogram:new three.Vector4().fromArray(h.toArray()),matrix:r.matrix.clone().premultiply(r.work.transform),zoom:1};f.pano0&&f.pano0.map.dispose(),f.pano1&&f.pano1.map!==((l=f.pano0)==null?void 0:l.map)&&f.pano1.map.dispose(),f.set({pano0:g,pano1:g}),this.emit(`pano.request`,createEvent(`pano.request`,{userAction:!0,prevPano:this.currentPano,progress:0,state:o,options:n,error:null}))}).catch(t=>{this.destroyed||this.pendingTextureId!==e||(this.pendingTextureId=null)})}}}onDblTapGesture(e){this.userAction=e.userAction,this.stopMomentumMovement();let t=this.cameraMotion.value.fov,n=this.minFov-t<t-this.defaultFov?this.minFov:this.defaultFov;e.state.fov=n,this.emit(`gesture.dbltap`,e),!e.defaultPrevented&&(this.cameraMotion.set({fov:n},360).catch(noop),this.hideIntersectMesh())}hideIntersectMesh(){this.intersectMesh.visible=!1,this.needsRender=!0}},defaultTopviewControllerCustomInitArgs=Object.assign(Object.assign({},omit(defaultFloorplanControllerCustomInitArgs,[`defaultLongitude`,`defaultLatitude`,`maxLatitude`,`minLatitude`])),{defaultLongitude:0,defaultLatitude:Math.PI/2}),TopviewController=class e extends FloorplanController{static parseArgs(t){var n,r;if(t instanceof e)return t;let o=Object.assign(Object.assign({},t),{maxLatitude:Math.PI/2,minLatitude:-Math.PI/2,defaultLongitude:(n=t.defaultLongitude)==null?defaultTopviewControllerCustomInitArgs.defaultLongitude:n,defaultLatitude:(r=t.defaultLatitude)==null?defaultTopviewControllerCustomInitArgs.defaultLatitude:r});return super.parseArgs(o)}static initAnimationEndState(e){var t,n;let r=this.parseArgs(e),o=super.initAnimationEndState(Object.assign(Object.assign({},r),{initial:Object.assign(Object.assign({},r.initial),{state:Object.assign(Object.assign({},r.initial.state),{longitude:(t=r.initial.state.longitude)==null?r.defaultLongitude:t,latitude:(n=r.initial.state.latitude)==null?r.defaultLatitude:n})})}));return Object.assign(Object.assign({},o),{mode:`Topview`})}constructor(t){let n=e.parseArgs(t);super(n),this.mode=`Topview`}updateConfiguration(e){return super.updateConfiguration(Object.assign({},e))}updateModel(e){this.needsRender=!0;let t=this.modelScene.boundingBox.getCenter(new three.Vector3);this.locationMotion.set({x:t.x,y:t.y,z:t.z,distance:FloorplanController.distanceFromModel(this.modelScene,this.defaultFov,this.camera.aspect)},0).catch(noop),this.hideIntersectMesh()}updateCamera(e,t,n){return this.initAnimationReady.then(()=>{this.userAction=n,this.stopMomentumMovement();let r={},o={};return e.distance!==void 0&&(r.distance=e.distance),e.offset!==void 0&&(r.x=e.offset.x,r.y=e.offset.y,r.z=e.offset.z),e.longitude!==void 0&&(o.longitude=e.longitude),e.latitude!==void 0&&(o.latitude=e.latitude),e.fov!==void 0&&(o.fov=e.fov),this.locationMotion.set(r,t).catch(noop),this.cameraMotion.set(o,t).catch(noop)})}updateCameraWithKeyframes(e,t,n){return this.initAnimationReady.then(()=>{this.userAction=n,this.stopMomentumMovement();let r=[],o=[];for(let t of e)r.push({key:t.key,progress:t.progress,value:{distance:t.value.distance,x:t.value.offset.x,y:t.value.offset.y,z:t.value.offset.z}}),o.push({key:t.key,progress:t.progress,value:{longitude:t.value.longitude,latitude:t.value.latitude,fov:t.value.fov}});return this.locationMotion.setKeyframes(r,t).catch(noop),this.cameraMotion.setKeyframes(e,t)})}initAnimation(){return this.destroyed?Promise.resolve():new Promise(t=>{let{state:n,currentState:r,duration:o,userAction:s}=this.initial;this.userAction=s;let c=e.initAnimationEndState(this),l={longitude:c.longitude,latitude:c.latitude,fov:c.fov},u={x:c.offset.x,y:c.offset.y,z:c.offset.z,distance:c.distance};this.emit(`initAnimation.start`,createEvent(`initAnimation.start`,{state:c,userAction:this.userAction})),this.modelAlphaMotion.set({modelAlpha:1},o/3).catch(noop),this.perspToOrthoMotion.set({perspToOrtho:1},o).catch(noop),this.cameraMotion.set(l,o).catch(noop),this.locationMotion.set(u,o).then(()=>{this.emit(`initAnimation.end`,createEvent(`initAnimation.end`,{state:c,userAction:this.userAction}))},e=>{let t=Object.assign(Object.assign(Object.assign({},this.currentPano),{mode:this.mode}),clonePose(this.camera.pose));this.emit(`initAnimation.end`,createEvent(`initAnimation.end`,{state:t,userAction:this.userAction}))}).then(()=>{t()})})}requestMomentumMovement(){this.inMomentumMovement=null}onPanGesture(e){this.userAction=e.userAction,this.stopMomentumMovement();let t=this.panState,n=e.pointers.length;if(e.isFinal?this.panState=void 0:this.panState={pointerLength:n,defaultPrevented:e.defaultPrevented,x:e.center.x,y:e.center.y},t===void 0||t.pointerLength!==n){this.emit(`gesture.pan`,e);return}let r={x:e.center.x-t.x,y:e.center.y-t.y},o=new three.Vector3(this.locationMotion.value.x,this.locationMotion.value.y,this.locationMotion.value.z),s=this.locationMotion.value.distance;s*=Math.tan(this.cameraMotion.value.fov/2*Math.PI/180);let c=this.renderer.getSize(new three.Vector2),l=2*r.x*s/c.y,u=2*r.y*s/c.y,d=new three.Vector3;d.setFromMatrixColumn(this.camera.matrix,0),d.multiplyScalar(-l),o.add(d),d.setFromMatrixColumn(this.camera.matrix,1),d.multiplyScalar(u),o.add(d);let f=this.modelScene.boundingBox.getCenter(new three.Vector3),p=this.modelScene.boundingBox.getSize(new three.Vector3),m=Math.max(p.x,p.y,p.z)/2;if(o.clamp(f.clone().sub(new three.Vector3().setScalar(m)),f.clone().add(new three.Vector3().setScalar(m))),e.state=Object.assign(Object.assign({},this.currentPano),{mode:this.mode,longitude:0,latitude:Math.PI/2,fov:this.cameraMotion.value.fov,offset:o,distance:this.locationMotion.value.distance}),this.emit(`gesture.pan`,e),e.defaultPrevented){this.panState&&(this.panState.defaultPrevented=e.defaultPrevented);return}e.isFinal&&t.defaultPrevented||this.locationMotion.set({x:o.x,y:o.y,z:o.z},0).catch(noop)}onPinchGesture(e){var t;if(!this.initAnimationIsReady)return;this.userAction=e.userAction,this.stopMomentumMovement();let n=(t=this.pinchState)==null?void 0:t.fov;if(e.isFirst){this.pinchState={x:e.center.x,y:e.center.y,fov:this.cameraMotion.value.fov};return}if(e.isFinal&&(this.pinchState=void 0),n===void 0)return;let r=clamp$1(n/e.scale,this.minFov,this.maxFov);e.state.fov=r,this.emit(`gesture.pinch`,e),!e.defaultPrevented&&(this.cameraMotion.set({fov:r},0).catch(noop),e.type=`gesture.pan`,this.onPanGesture(e))}onMouseWheel(e){if(!this.initAnimationIsReady)return;this.userAction=e.userAction,this.stopMomentumMovement();let t=clamp$1(this.cameraMotion.value.fov-e.center.delta,this.minFov,this.maxFov);e.state.fov=t,this.emit(`gesture.mousewheel`,e),!e.defaultPrevented&&this.cameraMotion.set({fov:t},0).catch(noop)}},defaultPanoramaLikeControllerCustomInitArgs={defaultLatitude:0,defaultFov:90,maxFov:120,minFov:20,maxLatitude:e=>Math.PI/2-e/2/180*Math.PI,minLatitude:e=>-Math.PI/2+e/2/180*Math.PI,moveSpeed:3.6,intersectMeshCreator:()=>new IntersectMesh,aerialObserverMinHeight:5},PanoramaLikeController=class e extends BaseController{static parseArgs(t){var n,r,o,s,c,l,u,d,f;if(t instanceof e)return t;let p=super.parseArgs(t);return Object.assign(Object.assign({},p),{defaultLatitude:(n=t.defaultLatitude)==null?defaultPanoramaLikeControllerCustomInitArgs.defaultLatitude:n,defaultFov:(r=t.defaultFov)==null?defaultPanoramaLikeControllerCustomInitArgs.defaultFov:r,maxFov:(o=t.maxFov)==null?defaultPanoramaLikeControllerCustomInitArgs.maxFov:o,minFov:(s=t.minFov)==null?defaultPanoramaLikeControllerCustomInitArgs.minFov:s,maxLatitude:(c=t.maxLatitude)==null?defaultPanoramaLikeControllerCustomInitArgs.maxLatitude:c,minLatitude:(l=t.minLatitude)==null?defaultPanoramaLikeControllerCustomInitArgs.minLatitude:l,moveSpeed:(u=t.moveSpeed)==null?defaultPanoramaLikeControllerCustomInitArgs.moveSpeed:u,intersectMeshCreator:(d=t.intersectMeshCreator)==null?defaultPanoramaLikeControllerCustomInitArgs.intersectMeshCreator:d,aerialObserverMinHeight:(f=t.aerialObserverMinHeight)==null?defaultPanoramaLikeControllerCustomInitArgs.aerialObserverMinHeight:f})}static initAnimationEndState(e){var t,n,r,o,s,c;let l=this.parseArgs(e),u=l.works,{state:d,currentState:f}=e.initial,p=typeof d.panoIndex==`number`?{workCode:(r=(t=d.workCode)==null?(n=l.works[0])==null?void 0:n.workCode:t)==null?``:r,panoIndex:d.panoIndex}:{workCode:f.workCode,panoIndex:f.panoIndex},m=u.getObserver(p),h=clamp$1((o=d.fov)==null?isFristPersonMode(f.mode)?f.fov:l.defaultFov:o,l.minFov,l.maxFov),g=(s=d.longitude)==null?f.longitude:s,_=clamp$1(typeof l.minLatitude==`function`?l.minLatitude(h):l.minLatitude,-Math.PI/2,Math.PI/2),v=clamp$1(typeof l.maxLatitude==`function`?l.maxLatitude(h):l.maxLatitude,-Math.PI/2,Math.PI/2),y=clamp$1((c=d.latitude)==null?isFristPersonMode(f.mode)?f.latitude:l.defaultLatitude:c,_,v),b=new three.Vector3;return m&&b.copy(m.position).applyMatrix4(m.work.transform),{workCode:p.workCode,panoIndex:p.panoIndex,mode:`PanoramaLike`,longitude:g,latitude:y,fov:h,offset:b,distance:0}}constructor(t){let n=e.parseArgs(t);super(n),this.mode=`PanoramaLike`,this.defaultLatitude=n.defaultLatitude,this.defaultFov=n.defaultFov,this.maxFov=n.maxFov,this.minFov=n.minFov,this.maxLatitude=n.maxLatitude,this.minLatitude=n.minLatitude,this.moveSpeed=n.moveSpeed,this.intersectMeshCreator=n.intersectMeshCreator,this.aerialObserverMinHeight=n.aerialObserverMinHeight,this.intersectMesh=this.intersectMeshCreator(),this.intersectMesh.name=`intersect`,this.intersectMesh.visible=!1,this.helper.add(this.intersectMesh)}updateConfiguration(e){if(super.updateConfiguration(e)===!1)return!1;if(e.defaultLatitude!==void 0&&this.defaultLatitude!==e.defaultLatitude&&(this.defaultLatitude=e.defaultLatitude),e.maxLatitude!==void 0&&this.maxLatitude!==e.maxLatitude&&(this.maxLatitude=e.maxLatitude),e.minLatitude!==void 0&&this.minLatitude!==e.minLatitude&&(this.minLatitude=e.minLatitude),e.defaultFov!==void 0&&this.defaultFov!==e.defaultFov&&(this.defaultFov=e.defaultFov),e.maxFov!==void 0&&this.maxFov!==e.maxFov&&(this.maxFov=e.maxFov),e.minFov!==void 0&&this.minFov!==e.minFov&&(this.minFov=e.minFov),e.moveSpeed!==void 0&&this.moveSpeed!==e.moveSpeed&&(this.moveSpeed=e.moveSpeed),e.intersectMeshCreator!==void 0&&this.intersectMeshCreator!==e.intersectMeshCreator){this.intersectMeshCreator=e.intersectMeshCreator;let t=this.intersectMesh;this.intersectMesh=this.intersectMeshCreator(),this.intersectMesh.name=t.name,this.intersectMesh.visible=t.visible;let n=this.intersectMesh.parent;n&&n.add(this.intersectMesh),t.dispose()}return e.aerialObserverMinHeight!==void 0&&this.aerialObserverMinHeight!==e.aerialObserverMinHeight&&(this.aerialObserverMinHeight=e.aerialObserverMinHeight),!0}destroy(){super.destroy(),this.intersectMesh&&(this.helper.remove(this.intersectMesh),this.intersectMesh.dispose()),this.panState=void 0}isReady(){return this.panState||this.pinchState?!1:super.isReady()}calculateMovingDuration(e,t){switch(typeof e){case`function`:return e(t,this.moveSpeed);case`number`:return e;case`string`:return Number(e);default:return clamp$1(t,2,5)/this.moveSpeed*1e3}}hideIntersectMesh(){this.intersectMesh.visible=!1,this.needsRender=!0}coordinatesForOffset(e){let t=this.cameraMotion.value.fov,n=this.camera.aspect,r=this.renderer.getSize(new three.Vector2);return{longitude:2*e.x/(r.x*this.viewport.width)*t/95*n,latitude:-2*e.y/(r.y*this.viewport.height)*t/95}}cameraBounce(){let{longitude:e,latitude:t,fov:n}=this.cameraMotion.value,r=[{progress:0,value:{longitude:e,latitude:t,fov:n}},{progress:.5,value:{longitude:e,latitude:t,fov:n*.98}},{progress:1,value:{longitude:e,latitude:t,fov:n}}];this.cameraMotion.setKeyframes(r,500).catch(noop)}requestMomentumMovement(e,t,n,r){if(this.inMomentumMovement===null)return;r=Math.max(r,1);let o=Object.assign({},n),s={longitude:0,latitude:0};for(let e=0;e<r;e++)o.longitude*=.996,o.latitude*=.996*.99,s.longitude+=o.longitude,s.latitude+=o.latitude;let c=this.cameraMotion.value.fov,l=formatRad$1(this.cameraMotion.value.longitude+s.longitude),u=clamp$1(typeof this.minLatitude==`function`?this.minLatitude(c):this.minLatitude,-Math.PI/2,Math.PI/2),d=clamp$1(typeof this.maxLatitude==`function`?this.maxLatitude(c):this.maxLatitude,-Math.PI/2,Math.PI/2),f=clamp$1(this.cameraMotion.value.latitude+s.latitude,u,d),p=Object.assign(Object.assign({},this.currentPano),{mode:this.mode,longitude:l,latitude:f,fov:c,offset:this.camera.pose.offset.clone(),distance:this.camera.pose.distance}),m=!(o.longitude>1e-4||o.longitude<-1e-4||o.latitude>1e-4||o.latitude<-1e-4),h=createEvent(`gesture.momentum`,Object.assign(Object.assign({},e),{isFirst:t,isFinal:m,state:p}));if(this.emit(`gesture.fire`,h),this.inMomentumMovement.event=h,this.emit(`gesture.momentum`,h),e.defaultPrevented){this.inMomentumMovement=null;return}this.inMomentumMovement&&(this.cameraMotion.set({longitude:l,latitude:f},0).catch(noop),m?this.inMomentumMovement=null:AnimationFrameLoop.shared.add((t,n)=>{this.requestMomentumMovement(e,!1,o,n)},!0))}onPanGesture(e){this.userAction=e.userAction,this.stopMomentumMovement(),this.hideIntersectMesh();let t=this.panState,n=e.pointers.length;if(e.isFinal?this.panState=void 0:this.panState={pointerLength:n,defaultPrevented:e.defaultPrevented,x:e.center.x,y:e.center.y},t===void 0||t.pointerLength!==n){this.emit(`gesture.pan`,e);return}let r={x:e.center.x-t.x,y:e.center.y-t.y},o=this.coordinatesForOffset(r),s=formatRad$1(this.cameraMotion.value.longitude+o.longitude),c=this.cameraMotion.value.fov,l=clamp$1(typeof this.minLatitude==`function`?this.minLatitude(c):this.minLatitude,-Math.PI/2,Math.PI/2),u=clamp$1(typeof this.maxLatitude==`function`?this.maxLatitude(c):this.maxLatitude,-Math.PI/2,Math.PI/2),d=clamp$1(this.cameraMotion.value.latitude+o.latitude,l,u);this.camera.aspect<1&&Math.abs(e.overallVelocityX)>.2&&Math.atan2(Math.abs(e.overallVelocityY),Math.abs(e.overallVelocityX))<Math.PI/6.923&&(d=this.cameraMotion.value.latitude);let f=Object.assign(Object.assign({},this.currentPano),{mode:this.mode,longitude:s,latitude:d,fov:c,offset:this.camera.pose.offset.clone(),distance:this.camera.pose.distance});if(e.state=f,this.emit(`gesture.pan`,e),e.defaultPrevented){this.panState&&(this.panState.defaultPrevented=e.defaultPrevented);return}if(e.isFinal&&t.defaultPrevented)return;let p={longitude:f.longitude,latitude:f.latitude,fov:f.fov};if(this.cameraMotion.set(p,0).catch(noop),e.isFinal){let t=e.velocityX,n=e.velocityY*.6;Math.abs(n)>.5&&Math.abs(t)<.5&&(t=0),this.inMomentumMovement={uuid:createUuid()},this.requestMomentumMovement(e,!0,this.coordinatesForOffset({x:t,y:n}),0)}}onPinchGesture(e){var t;this.userAction=e.userAction,this.stopMomentumMovement();let n=(t=this.pinchState)==null?void 0:t.fov,r=e.scale;if(e.isFirst){this.pinchState={x:e.center.x,y:e.center.y,fov:this.cameraMotion.value.fov};return}if(e.isFinal&&(this.pinchState=void 0),n===void 0)return;let o=clamp$1(n/r,this.minFov,this.maxFov),s=clamp$1(typeof this.minLatitude==`function`?this.minLatitude(o):this.minLatitude,-Math.PI/2,Math.PI/2),c=clamp$1(typeof this.maxLatitude==`function`?this.maxLatitude(o):this.maxLatitude,-Math.PI/2,Math.PI/2),l=clamp$1(this.cameraMotion.value.latitude,s,c);e.state.fov=o,e.state.latitude=l,this.emit(`gesture.pinch`,e),!e.defaultPrevented&&(this.cameraMotion.set({fov:o,latitude:l},0).catch(noop),e.type=`gesture.pan`,this.onPanGesture(e))}onMouseWheel(e){this.userAction=e.userAction,this.stopMomentumMovement();let t=clamp$1(this.cameraMotion.value.fov-e.center.delta,this.minFov,this.maxFov),n=clamp$1(typeof this.minLatitude==`function`?this.minLatitude(t):this.minLatitude,-Math.PI/2,Math.PI/2),r=clamp$1(typeof this.maxLatitude==`function`?this.maxLatitude(t):this.maxLatitude,-Math.PI/2,Math.PI/2),o=clamp$1(this.cameraMotion.value.latitude,n,r);e.state.fov=t,e.state.latitude=o,this.emit(`gesture.mousewheel`,e),!e.defaultPrevented&&(this.cameraMotion.set({fov:t,latitude:o},0).catch(noop),this.onMouseMove(e))}onMouseMove(e){var t,n;if(!this.intersectMesh.parent||this.panState||(this.emit(`gesture.mousemove`,e),e.defaultPrevented))return;let r=e.center.raycaster;if(e.isFinal&&this.intersectMesh.parent){this.hideIntersectMesh();return}r.floorIndex=-1;let[o]=this.modelScene.intersectRaycaster(r),s=createEvent(`intersect.update`,{raycaster:r,intersection:o==null?null:o,object:this.intersectMesh});if(this.emit(`intersect.update`,s),s.defaultPrevented){this.hideIntersectMesh();return}if(o){let e=(n=(t=o.face)==null?void 0:t.normal)==null?new three.Vector3().copy(r.ray.direction).multiplyScalar(-1):n,s=e.clone(),c=o.point.clone();this.intersectMesh.position.copy(c);let l=c.clone().add(s);if(this.intersectMesh.lookAt(l),Math.abs(e.y)>.99){let e=this.camera.position.clone().sub(c);this.intersectMesh.rotation.z=-Math.atan2(e.z,e.x)}this.intersectMesh.visible=!0,this.needsRender=!0}else this.hideIntersectMesh()}onDblTapGesture(e){this.userAction=e.userAction,this.stopMomentumMovement();let t=this.cameraMotion.value.fov,n=2,r=this.works.getObserver(this.currentPano);if(r){let e=r.images.tiles;e&&e.length&&(n=Math.max(...e.map(e=>e.level)))}let o=Math.max(40-n*5,this.minFov,5),s=o-t<t-this.defaultFov?o:this.defaultFov;e.state.fov=s,this.emit(`gesture.dbltap`,e),!e.defaultPrevented&&(this.cameraMotion.set({fov:s},360).catch(noop),this.hideIntersectMesh())}},blankVideo=`data:video/mp4;base64,AAAAHGZ0eXBNNFYgAAACAGlzb21pc28yYXZjMQAAAAhmcmVlAAAGF21kYXTeBAAAbGliZmFhYyAxLjI4AABCAJMgBDIARwAAArEGBf//rdxF6b3m2Ui3lizYINkj7u94MjY0IC0gY29yZSAxNDIgcjIgOTU2YzhkOCAtIEguMjY0L01QRUctNCBBVkMgY29kZWMgLSBDb3B5bGVmdCAyMDAzLTIwMTQgLSBodHRwOi8vd3d3LnZpZGVvbGFuLm9yZy94MjY0Lmh0bWwgLSBvcHRpb25zOiBjYWJhYz0wIHJlZj0zIGRlYmxvY2s9MTowOjAgYW5hbHlzZT0weDE6MHgxMTEgbWU9aGV4IHN1Ym1lPTcgcHN5PTEgcHN5X3JkPTEuMDA6MC4wMCBtaXhlZF9yZWY9MSBtZV9yYW5nZT0xNiBjaHJvbWFfbWU9MSB0cmVsbGlzPTEgOHg4ZGN0PTAgY3FtPTAgZGVhZHpvbmU9MjEsMTEgZmFzdF9wc2tpcD0xIGNocm9tYV9xcF9vZmZzZXQ9LTIgdGhyZWFkcz02IGxvb2thaGVhZF90aHJlYWRzPTEgc2xpY2VkX3RocmVhZHM9MCBucj0wIGRlY2ltYXRlPTEgaW50ZXJsYWNlZD0wIGJsdXJheV9jb21wYXQ9MCBjb25zdHJhaW5lZF9pbnRyYT0wIGJmcmFtZXM9MCB3ZWlnaHRwPTAga2V5aW50PTI1MCBrZXlpbnRfbWluPTI1IHNjZW5lY3V0PTQwIGludHJhX3JlZnJlc2g9MCByY19sb29rYWhlYWQ9NDAgcmM9Y3JmIG1idHJlZT0xIGNyZj0yMy4wIHFjb21wPTAuNjAgcXBtaW49MCBxcG1heD02OSBxcHN0ZXA9NCB2YnZfbWF4cmF0ZT03NjggdmJ2X2J1ZnNpemU9MzAwMCBjcmZfbWF4PTAuMCBuYWxfaHJkPW5vbmUgZmlsbGVyPTAgaXBfcmF0aW89MS40MCBhcT0xOjEuMDAAgAAAAFZliIQL8mKAAKvMnJycnJycnJycnXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXiEASZACGQAjgCEASZACGQAjgAAAAAdBmjgX4GSAIQBJkAIZACOAAAAAB0GaVAX4GSAhAEmQAhkAI4AhAEmQAhkAI4AAAAAGQZpgL8DJIQBJkAIZACOAIQBJkAIZACOAAAAABkGagC/AySEASZACGQAjgAAAAAZBmqAvwMkhAEmQAhkAI4AhAEmQAhkAI4AAAAAGQZrAL8DJIQBJkAIZACOAAAAABkGa4C/AySEASZACGQAjgCEASZACGQAjgAAAAAZBmwAvwMkhAEmQAhkAI4AAAAAGQZsgL8DJIQBJkAIZACOAIQBJkAIZACOAAAAABkGbQC/AySEASZACGQAjgCEASZACGQAjgAAAAAZBm2AvwMkhAEmQAhkAI4AAAAAGQZuAL8DJIQBJkAIZACOAIQBJkAIZACOAAAAABkGboC/AySEASZACGQAjgAAAAAZBm8AvwMkhAEmQAhkAI4AhAEmQAhkAI4AAAAAGQZvgL8DJIQBJkAIZACOAAAAABkGaAC/AySEASZACGQAjgCEASZACGQAjgAAAAAZBmiAvwMkhAEmQAhkAI4AhAEmQAhkAI4AAAAAGQZpAL8DJIQBJkAIZACOAAAAABkGaYC/AySEASZACGQAjgCEASZACGQAjgAAAAAZBmoAvwMkhAEmQAhkAI4AAAAAGQZqgL8DJIQBJkAIZACOAIQBJkAIZACOAAAAABkGawC/AySEASZACGQAjgAAAAAZBmuAvwMkhAEmQAhkAI4AhAEmQAhkAI4AAAAAGQZsAL8DJIQBJkAIZACOAAAAABkGbIC/AySEASZACGQAjgCEASZACGQAjgAAAAAZBm0AvwMkhAEmQAhkAI4AhAEmQAhkAI4AAAAAGQZtgL8DJIQBJkAIZACOAAAAABkGbgCvAySEASZACGQAjgCEASZACGQAjgAAAAAZBm6AnwMkhAEmQAhkAI4AhAEmQAhkAI4AhAEmQAhkAI4AhAEmQAhkAI4AAAAhubW9vdgAAAGxtdmhkAAAAAAAAAAAAAAAAAAAD6AAABDcAAQAAAQAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAzB0cmFrAAAAXHRraGQAAAADAAAAAAAAAAAAAAABAAAAAAAAA+kAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAABAAAAAALAAAACQAAAAAAAkZWR0cwAAABxlbHN0AAAAAAAAAAEAAAPpAAAAAAABAAAAAAKobWRpYQAAACBtZGhkAAAAAAAAAAAAAAAAAAB1MAAAdU5VxAAAAAAALWhkbHIAAAAAAAAAAHZpZGUAAAAAAAAAAAAAAABWaWRlb0hhbmRsZXIAAAACU21pbmYAAAAUdm1oZAAAAAEAAAAAAAAAAAAAACRkaW5mAAAAHGRyZWYAAAAAAAAAAQAAAAx1cmwgAAAAAQAAAhNzdGJsAAAAr3N0c2QAAAAAAAAAAQAAAJ9hdmMxAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAALAAkABIAAAASAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGP//AAAALWF2Y0MBQsAN/+EAFWdCwA3ZAsTsBEAAAPpAADqYA8UKkgEABWjLg8sgAAAAHHV1aWRraEDyXyRPxbo5pRvPAyPzAAAAAAAAABhzdHRzAAAAAAAAAAEAAAAeAAAD6QAAABRzdHNzAAAAAAAAAAEAAAABAAAAHHN0c2MAAAAAAAAAAQAAAAEAAAABAAAAAQAAAIxzdHN6AAAAAAAAAAAAAAAeAAADDwAAAAsAAAALAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAAiHN0Y28AAAAAAAAAHgAAAEYAAANnAAADewAAA5gAAAO0AAADxwAAA+MAAAP2AAAEEgAABCUAAARBAAAEXQAABHAAAASMAAAEnwAABLsAAATOAAAE6gAABQYAAAUZAAAFNQAABUgAAAVkAAAFdwAABZMAAAWmAAAFwgAABd4AAAXxAAAGDQAABGh0cmFrAAAAXHRraGQAAAADAAAAAAAAAAAAAAACAAAAAAAABDcAAAAAAAAAAAAAAAEBAAAAAAEAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAkZWR0cwAAABxlbHN0AAAAAAAAAAEAAAQkAAADcAABAAAAAAPgbWRpYQAAACBtZGhkAAAAAAAAAAAAAAAAAAC7gAAAykBVxAAAAAAALWhkbHIAAAAAAAAAAHNvdW4AAAAAAAAAAAAAAABTb3VuZEhhbmRsZXIAAAADi21pbmYAAAAQc21oZAAAAAAAAAAAAAAAJGRpbmYAAAAcZHJlZgAAAAAAAAABAAAADHVybCAAAAABAAADT3N0YmwAAABnc3RzZAAAAAAAAAABAAAAV21wNGEAAAAAAAAAAQAAAAAAAAAAAAIAEAAAAAC7gAAAAAAAM2VzZHMAAAAAA4CAgCIAAgAEgICAFEAVBbjYAAu4AAAADcoFgICAAhGQBoCAgAECAAAAIHN0dHMAAAAAAAAAAgAAADIAAAQAAAAAAQAAAkAAAAFUc3RzYwAAAAAAAAAbAAAAAQAAAAEAAAABAAAAAgAAAAIAAAABAAAAAwAAAAEAAAABAAAABAAAAAIAAAABAAAABgAAAAEAAAABAAAABwAAAAIAAAABAAAACAAAAAEAAAABAAAACQAAAAIAAAABAAAACgAAAAEAAAABAAAACwAAAAIAAAABAAAADQAAAAEAAAABAAAADgAAAAIAAAABAAAADwAAAAEAAAABAAAAEAAAAAIAAAABAAAAEQAAAAEAAAABAAAAEgAAAAIAAAABAAAAFAAAAAEAAAABAAAAFQAAAAIAAAABAAAAFgAAAAEAAAABAAAAFwAAAAIAAAABAAAAGAAAAAEAAAABAAAAGQAAAAIAAAABAAAAGgAAAAEAAAABAAAAGwAAAAIAAAABAAAAHQAAAAEAAAABAAAAHgAAAAIAAAABAAAAHwAAAAQAAAABAAAA4HN0c3oAAAAAAAAAAAAAADMAAAAaAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAACMc3RjbwAAAAAAAAAfAAAALAAAA1UAAANyAAADhgAAA6IAAAO+AAAD0QAAA+0AAAQAAAAEHAAABC8AAARLAAAEZwAABHoAAASWAAAEqQAABMUAAATYAAAE9AAABRAAAAUjAAAFPwAABVIAAAVuAAAFgQAABZ0AAAWwAAAFzAAABegAAAX7AAAGFwAAAGJ1ZHRhAAAAWm1ldGEAAAAAAAAAIWhkbHIAAAAAAAAAAG1kaXJhcHBsAAAAAAAAAAAAAAAALWlsc3QAAAAlqXRvbwAAAB1kYXRhAAAAAQAAAABMYXZmNTUuMzMuMTAw`,result;function canplayVideo(){return result||(result=new Promise(e=>{let t,n=document.createElement(`video`);n.muted=!0,n.src=blankVideo,n.addEventListener(`timeupdate`,function r(){n.removeEventListener(`timeupdate`,r,!1),clearTimeout(t);let o=document.createElement(`canvas`);o.width=o.height=1;let s=o.getContext(`2d`);if(!s){e(!1);return}s.drawImage(n,0,0,1,1);let{data:c}=s.getImageData(0,0,1,1);c[3]>10?e(!0):e(!1)},!1),n.addEventListener(`canplay`,function e(){n.removeEventListener(`canplay`,e,!1),n.play()},!1),t=window.setTimeout(()=>e(!1),1e3)}))}var FACE_ORDER=[`right`,`left`,`up`,`down`,`front`,`back`];function getBox(e,t,n,r){let o=new three.Box3;switch(e){case`up`:o.min.y=.5,o.max.y=.5,o.min.x=t-.5,o.max.x=t-.5+r,o.min.z=-n+.5-r,o.max.z=-n+.5;break;case`down`:o.min.y=-.5,o.max.y=-.5,o.min.x=t-.5,o.max.x=t-.5+r,o.min.z=n-.5,o.max.z=n-.5+r;break;case`left`:o.min.x=-.5,o.max.x=-.5,o.min.z=-t+.5-r,o.max.z=-t+.5,o.min.y=-n+.5-r,o.max.y=-n+.5;break;case`right`:o.min.x=.5,o.max.x=.5,o.min.z=t-.5,o.max.z=t-.5+r,o.min.y=-n+.5-r,o.max.y=-n+.5;break;case`front`:o.min.z=-.5,o.max.z=-.5,o.min.x=t-.5,o.max.x=t-.5+r,o.min.y=-n+.5-r,o.max.y=-n+.5;break;case`back`:o.min.z=.5,o.max.z=.5,o.min.x=-t+.5-r,o.max.x=-t+.5,o.min.y=-n+.5-r,o.max.y=-n+.5;break;default:break}return o.applyMatrix4(new three.Matrix4().makeRotationY(Math.PI))}var createChildren=(e,t)=>{if(e.level>=t)return;let n=e.level+1,r=e.size/2,o=[new three.Vector2(e.position.x,e.position.y),new three.Vector2(e.position.x+r,e.position.y),new three.Vector2(e.position.x,e.position.y+r),new three.Vector2(e.position.x+r,e.position.y+r)];for(let s of o){let o={face:e.face,level:n,size:r,position:s,box:getBox(e.face,s.x,s.y,r),parent:e,children:[]};e.children.push(o),createChildren(o,t)}};function createTileCubeNode(e,t){let n={level:0,face:e,position:new three.Vector2(0,0),size:1,box:getBox(e,0,0,1),parent:null,children:[]};return createChildren(n,t),n}function createTileCubeTree(e){return{children:FACE_ORDER.map(t=>createTileCubeNode(t,e)),maxLevel:e}}function traverseTileCubeNode(e,t){for(let n of e.children)t(n)!==!1&&traverseTileCubeNode(n,t)}var _a$1,scratchSortVector3=new three.Vector3,scratchCameraQuaternion=new three.Quaternion,scratchCameraMatrix=new three.Matrix4,scratchCameraProjectMatrix=new three.Matrix4,scratchFrustumMatrix=new three.Matrix4,scratchFrustumMatrixInverse=new three.Matrix4,scratchFrustumProjectMatrix=new three.Matrix4,scratchSceneQuaternionInverse=new three.Quaternion,scratchSceneMatrixInverse=new three.Matrix4,clearColor$1=new three.Color(0,0,0),clearAlpha=0,scratchPrevClearColor$1=new three.Color,clippingPlanes=[],SQRT1_2=(_a$1=Math.SQRT1_2)==null?Math.sqrt(2):_a$1,TILE_QUATERNION={up:new three.Quaternion(SQRT1_2,0,0,SQRT1_2),down:new three.Quaternion(-SQRT1_2,0,0,SQRT1_2),left:new three.Quaternion(0,SQRT1_2,0,SQRT1_2),right:new three.Quaternion(0,-SQRT1_2,0,SQRT1_2),front:new three.Quaternion(0,0,0,1),back:new three.Quaternion(0,1,0,0)},tileGeometry=(()=>{let e=new Float32Array([-.5,-.5,0,.5,-.5,0,-.5,.5,0,.5,.5,0]),t=new Float32Array([0,0,1,0,0,1,1,1]),n=new Uint32Array([0,1,2,1,3,2]),r=new three.BufferGeometry;return r.setAttribute(`position`,new three.BufferAttribute(e,3)),r.setAttribute(`uv`,new three.BufferAttribute(t,2)),r.setIndex(new three.BufferAttribute(n,1)),r.computeBoundingBox(),r})(),TILE_MATERIAL_VERTEX_SHADER=`
|
|
1533
1533
|
varying vec2 vUV;
|
|
1534
1534
|
void main() {
|
|
1535
1535
|
vUV = uv;
|
|
@@ -1676,7 +1676,7 @@ void main() {
|
|
|
1676
1676
|
float cameraDepth = length(cameraVertex);
|
|
1677
1677
|
gl_FragColor = packDepthToRGBA(clamp(cameraDepth / maxDepth, 0.0, 1.0));
|
|
1678
1678
|
}
|
|
1679
|
-
`,uniforms:{maxDepth:new three.Uniform(0)}});function renderDepthCube(e,t,n,r=1e3){depthMaterial.uniforms.maxDepth.value=r,scratchPrevClearColor.copy(e.getClearColor());let o=e.getClearAlpha(),s=t.overrideMaterial;t.overrideMaterial=depthMaterial,e.setClearColor(clearColor,0),n.update(e,t),e.setClearColor(scratchPrevClearColor,o),t.overrideMaterial=s}var defaultEffectEase=linear,scratchRaycaster$1=new three.Raycaster,scratchVector3$3=new three.Vector3,adjustPanoCircleMeshVectors=[new three.Vector3(0,0,0).multiplyScalar(.1),new three.Vector3(1,0,0).multiplyScalar(.1),new three.Vector3(-.5,0,-Math.sqrt(3)/2).multiplyScalar(.1),new three.Vector3(-.5,0,Math.sqrt(3)/2).multiplyScalar(.1)],defaultPanoramaControllerCustomInitArgs=Object.assign(Object.assign({},defaultPanoramaLikeControllerCustomInitArgs),{maxAccessibleDistance:5,panoTapTriggerRadius:.5,panoCircleMeshCreator:(e,t)=>e.position.distanceTo(e.standingPosition)>t.aerialObserverMinHeight?new PanoCircleMeshSolid:new PanoCircleMesh,adjustPanoCircleMeshPositionBasedOnModel:!1,tileLevelForFov:((e,t)=>{var n;let r=e=>e/180*Math.PI,o=(n=Math.log2)==null?(e=>Math.log(e)*Math.LOG2E):n,s=t.height/2/Math.tan(r(e/2))*Math.tan(r(45))*2,c=Math.max(o(s/512),0);return c<2.3&&c>.1&&(c=1),c=c%1>.75?Math.ceil(c):Math.floor(c),c}),tileAppearDuration:.5,tileMaxRequest:3,flyEffectUseDepthBuffer:!1}),PanoramaController=class e extends PanoramaLikeController{static parseArgs(t){var n,r,o,s,c,l,u,d;if(t instanceof e)return t;let f=super.parseArgs(t);return Object.assign(Object.assign({},f),{maxAccessibleDistance:(n=t.maxAccessibleDistance)==null?defaultPanoramaControllerCustomInitArgs.maxAccessibleDistance:n,panoTapTriggerRadius:(r=t.panoTapTriggerRadius)==null?defaultPanoramaControllerCustomInitArgs.panoTapTriggerRadius:r,panoCircleMeshCreator:(o=t.panoCircleMeshCreator)==null?defaultPanoramaControllerCustomInitArgs.panoCircleMeshCreator:o,adjustPanoCircleMeshPositionBasedOnModel:(s=t.adjustPanoCircleMeshPositionBasedOnModel)==null?defaultPanoramaControllerCustomInitArgs.adjustPanoCircleMeshPositionBasedOnModel:s,tileLevelForFov:(c=t.tileLevelForFov)==null?defaultPanoramaControllerCustomInitArgs.tileLevelForFov:c,tileAppearDuration:(l=t.tileAppearDuration)==null?defaultPanoramaControllerCustomInitArgs.tileAppearDuration:l,tileMaxRequest:(u=t.tileMaxRequest)==null?defaultPanoramaControllerCustomInitArgs.tileMaxRequest:u,flyEffectUseDepthBuffer:(d=t.flyEffectUseDepthBuffer)==null?defaultPanoramaControllerCustomInitArgs.flyEffectUseDepthBuffer:d})}static initAnimationEndState(e){let t=this.parseArgs(e),n=super.initAnimationEndState(t);return Object.assign(Object.assign({},n),{mode:`Panorama`})}constructor(t){let n=e.parseArgs(t);super(n),this.mode=`Panorama`,this.initAnimationed=!1,this.maxAccessibleDistance=n.maxAccessibleDistance,this.panoTapTriggerRadius=n.panoTapTriggerRadius,this.panoCircleMeshCreator=n.panoCircleMeshCreator,this.adjustPanoCircleMeshPositionBasedOnModel=n.adjustPanoCircleMeshPositionBasedOnModel,this.tileLevelForFov=n.tileLevelForFov,this.tileAppearDuration=n.tileAppearDuration,this.tileMaxRequest=n.tileMaxRequest,this.flyEffectUseDepthBuffer=n.flyEffectUseDepthBuffer,this.adjustPanoCircleMeshPositionFix=new Map;let{pano0:r,pano1:o}=this.modelScene.parameter.resolveValue();r&&(o==null?void 0:o.map)!==r.map&&(this.modelScene.parameter.set({pano0:o}),r.map.dispose());let s=new Set;r&&s.add(r),o&&s.add(o),this.panoMeshes=new Map,this.locationMotion=new Motion({count:0,distance:this.camera.pose.distance}),this.modelAlphaMotion=new Motion({modelAlpha:this.modelScene.parameter.resolveValue().modelAlpha}),this.perspToOrthoMotion=new Motion({perspToOrtho:this.camera.perspToOrtho.x}),this.panoResources={},this.panoResources[this.locationMotion.keyframes[0].key=this.locationMotion.keyframes[1].key=createUuid()]={panoId:panoStringify(this.currentPano),panoPicture:this.modelScene.parameter.resolveValue().pano1,position:this.camera.pose.offset.clone(),effect:`fly`,effectEasing:defaultEffectEase,fixCameraTransform:new three.Matrix4},this.panoPictureObserverMap=new WeakMap,this.textureLoader=new TextureLoader,this.tiling=new Tiling({fiveId:this.fiveId}),this.panoVideo=new PanoVideo,this.scene.add(this.panoVideo.object),this.accessibleObserverFloorCheckCount=0}get tileLevel(){return this.tiling.level}updateConfiguration(e){return super.updateConfiguration(e)===!1?!1:(e.maxAccessibleDistance!==void 0&&this.maxAccessibleDistance!==e.maxAccessibleDistance&&(this.maxAccessibleDistance=e.maxAccessibleDistance),e.panoTapTriggerRadius!==void 0&&this.panoTapTriggerRadius!==e.panoTapTriggerRadius&&(this.panoTapTriggerRadius=e.panoTapTriggerRadius),e.panoCircleMeshCreator!==void 0&&this.panoCircleMeshCreator!==e.panoCircleMeshCreator&&(this.panoCircleMeshCreator=e.panoCircleMeshCreator,this.panoMeshes&&(this.panoMeshes.forEach(e=>{this.helper.remove(e),e.dispose()}),this.panoMeshes.clear())),e.tileLevelForFov!==void 0&&this.tileLevelForFov!==e.tileLevelForFov&&(this.tileLevelForFov=e.tileLevelForFov),e.tileMaxRequest!==void 0&&this.tileMaxRequest!==e.tileMaxRequest&&(this.tileMaxRequest=e.tileMaxRequest),e.flyEffectUseDepthBuffer!==void 0&&this.flyEffectUseDepthBuffer!==e.flyEffectUseDepthBuffer&&(this.flyEffectUseDepthBuffer=e.flyEffectUseDepthBuffer),e.adjustPanoCircleMeshPositionBasedOnModel!==void 0&&this.adjustPanoCircleMeshPositionBasedOnModel!==e.adjustPanoCircleMeshPositionBasedOnModel&&(this.adjustPanoCircleMeshPositionBasedOnModel=e.adjustPanoCircleMeshPositionBasedOnModel,this.adjustPanoCircleMeshPositionBasedOnModel||this.adjustPanoCircleMeshPositionFix.clear()),!0)}destroy(){super.destroy(),this.tiling.dispose(),this.modelScene.parameter.set({refinedScreen:null,pano0Depth:null,pano1Depth:null}),this.pano0DepthCubeRenderTarget&&(this.pano0DepthCubeRenderTarget.dispose(),this.pano0DepthCubeRenderTarget=void 0),this.pano1DepthCubeRenderTarget&&(this.pano1DepthCubeRenderTarget.dispose(),this.pano1DepthCubeRenderTarget=void 0),this.locationMotion.dispose(),this.pendingTextureTask=void 0,this.panoMeshes&&(this.panoMeshes.forEach(e=>{this.helper.remove(e),e.dispose()}),this.panoMeshes.clear());let e=this.videoTexture.image;e.pause(),e.oncanplay=noop,e.ontimeupdate=noop,this.scene.remove(this.panoVideo.object),this.panoVideo.setMaterial(null),this.panoVideo.dispose();let{pano0:t,pano1:n}=this.modelScene.parameter.resolveValue();for(let e of Object.keys(this.panoResources)){let r=this.panoResources[e];if(r.panoPicture){let e=r.panoPicture.map;e&&e!==(t==null?void 0:t.map)&&e!==(n==null?void 0:n.map)&&(e.dispose(),r.panoPicture=null)}delete this.panoResources[e]}}isReady(){return this.locationMotion.ended===!0?super.isReady():!1}isTileReady(){let e=this.tiling.pedding<=0;return this.initAnimationed&&e}updateWork(t,n,r,o){this.userAction=o,this.works=t;let s=e.initAnimationEndState(Object.assign(Object.assign({},this),{initial:{currentState:Object.assign(Object.assign({},this.currentPano),this.camera.pose),duration:r.duration,effect:r.effect,state:n,userAction:o}}));return(s.workCode!==this.currentPano.workCode||s.panoIndex!==this.currentPano.panoIndex||s.longitude!==this.cameraMotion.value.longitude||s.latitude!==this.cameraMotion.value.latitude||s.fov!==this.cameraMotion.value.fov)&&(this.initAnimationed=!1,this.moveToPano({workCode:s.workCode,panoIndex:s.panoIndex},{effect:r.effect,duration:r.duration,longitude:s.longitude,latitude:s.latitude,fov:s.fov,moveEndCallback:()=>{this.initAnimationed=!0},moveCancelCallback:()=>{this.initAnimationed=!0}},o)),!0}updateModel(e){this.modelScene=e,this.hideIntersectMesh()}updateTime(e,t,...n){var r,o,s,c,l,u;if(this.destroyed)return;let d={},f={},p=this.camera.getDirection(new three.Vector3),m=this.locationMotion.keyframes[0],h=this.locationMotion.keyframes[this.locationMotion.keyframes.length-1],[g,_]=this.locationMotion.getKeyFrameSegment(e),v=this.panoResourceFromLocationMotionKeyframe(g),y=this.panoResourceFromLocationMotionKeyframe(_),b=this.panoResourceFromLocationMotionKeyframe(m),S=this.panoResourceFromLocationMotionKeyframe(h),C=!1;if(this.cameraMotion.ended===!1&&(this.cameraMotion.update(e),f.longitude=this.cameraMotion.value.longitude,f.latitude=this.cameraMotion.value.latitude,f.fov=this.cameraMotion.value.fov),this.modelAlphaMotion.ended===!1&&(this.modelAlphaMotion.update(e),d.modelAlpha=this.modelAlphaMotion.value.modelAlpha),this.perspToOrthoMotion.ended===!1&&(this.perspToOrthoMotion.update(e),this.camera.perspToOrtho.setScalar(clamp$1(this.perspToOrthoMotion.value.perspToOrtho,0,1))),this.locationMotion.ended===!1){this.locationMotion.update(e);let t=this.locationMotion.value.count-_.value.count+1,n=new three.Vector3().copy(v.position),s=new three.Vector3().copy(y.position);if(d.progress=y.effectEasing(t),t>=.01&&t<=.99&&(d.progress=clamp$1(y.effectEasing(t),.01,.99)),y.panoPicture&&(t<1?v.panoPicture&&(d.pano0=v.panoPicture):d.pano0=y.panoPicture,d.pano1=y.panoPicture),y.effect===`montage`?d.transition=`BLACK`:y.effect===`spread`?d.transition=`SPREAD`:d.transition=`FADE`,y.effect===`zoomin`||y.effect===`zoomout`?d.progress=Math.pow(t,3):y.effect===`model`&&this.camera.pose.distance<.01&&(d.modelAlpha=1-Math.pow(clamp$1(Math.abs(t-.5)*2,0,1),4)),t<1&&y.effect!==`fly`&&y.effect!==`model`){if(d.pano0&&v.panoPicture){let e={panoId:d.pano0.panoId,map:d.pano0.map,mapHistogram:d.pano0.mapHistogram,mapSize:d.pano0.mapSize,zoom:d.pano0.zoom,matrix:v.panoPicture.matrix.clone().premultiply(v.fixCameraTransform).setPosition(y.position)},t=this.panoPictureObserverMap.get(d.pano0);t&&this.panoPictureObserverMap.set(e,t),d.pano0=e}n.copy(s),C=!0}f.distance=this.locationMotion.value.distance,f.offset=new three.Vector3(n.x+(s.x-n.x)*t,n.y+(s.y-n.y)*t,n.z+(s.z-n.z)*t);let c=[],l=[];for(let e of this.locationMotion.keyframes){let{key:t,progress:n}=e;t!==void 0&&(c.push(t),n>this.locationMotion.progress&&l.push(t))}for(let e of Object.keys(this.panoResources)){if(l.indexOf(e)>=0)continue;let t=this.panoResources[e];if(t.panoPicture){let e=t.panoPicture.map;if(e){if(e===((r=d.pano0)==null?void 0:r.map)||e===((o=d.pano1)==null?void 0:o.map))continue;e.dispose(),t.panoPicture=null}}c.indexOf(e)>=0||delete this.panoResources[e]}let u=panoParse(y.panoId);u!==this.currentPano&&(this.currentPano=u,this.accessibleObserverFloorCheckCount=0),this.emit(`pano.moving`,createEvent(`pano.moving`,{userAction:this.userAction,prevPano:panoParse(b.panoId),state:Object.assign(Object.assign(Object.assign(Object.assign({},panoParse(S.panoId)),{mode:this.mode}),clonePose(this.camera.pose)),f),options:{},progress:this.locationMotion.progress,error:null}))}isEmptyObject(d)===!1&&this.modelScene.parameter.set(d),isEmptyObject(f)===!1&&this.setCamera(f);let w=this.works.getObserver(this.currentPano),T=this.locationMotion.ended?this.getForwardObserverOrNot(this.camera):null,E=this.works.getObserver(v.panoId),D=this.works.getObserver(y.panoId);if(this.adjustPanoCircleMeshPositionBasedOnModel&&this.helper.visible&&w){let e=[],t=w.work.observers;for(let n of w.accessibleNodes){let r=t[n];r&&e.push(r)}let n=new Map;if(e.sort((e,t)=>{let r=n.get(e);r===void 0&&(r=e.standingPosition.distanceTo(w.standingPosition),n.set(e,r));let o=n.get(e);return o===void 0&&(o=t.standingPosition.distanceTo(w.standingPosition),n.set(t,o)),r-o}),e.length){this.accessibleObserverFloorCheckCount%=e.length;let t=e[this.accessibleObserverFloorCheckCount],n=this.modelScene.models.find(e=>e.work===(t==null?void 0:t.work));if(t&&n&&n.visible){let e=.3,r=.05,o=.005,s=t.standingPosition.clone().applyMatrix4(t.work.transform),c=panoStringify({panoIndex:t.panoIndex,workCode:t.work.workCode}),l=adjustPanoCircleMeshVectors.map(t=>{scratchRaycaster$1.ray.origin.copy(s),scratchRaycaster$1.ray.origin.add(scratchVector3$3.copy(t).setY(e)),scratchRaycaster$1.ray.direction.set(0,-1,0),scratchRaycaster$1.firstHitOnly=!0,scratchRaycaster$1.floorIndex=-1;let[r]=n.intersectRaycaster(scratchRaycaster$1);return r&&r.distance-o<=e?new three.Vector3().copy(s).setY(r.point.y+o):s});l.sort((e,t)=>t.y-e.y);let u=l[Math.floor(l.length/2)],[d]=l.filter(e=>e.distanceTo(u)<=.05);if(d){let e=new three.Vector4(s.x,s.y,s.z,d.y-s.y),t=this.adjustPanoCircleMeshPositionFix.get(c);t&&!e.equals(t)&&(this.needsRender=!0),this.adjustPanoCircleMeshPositionFix.set(c,e)}}this.accessibleObserverFloorCheckCount++}}let O=new Map;if(E)for(let e of E.accessibleNodes){let t=E.work.observers[e];if(t){let e=panoStringify({panoIndex:t.panoIndex,workCode:t.work.workCode});O.set(e,t)}}if(D)for(let e of D.accessibleNodes){let t=D.work.observers[e];if(t){let e=panoStringify({panoIndex:t.panoIndex,workCode:t.work.workCode});O.set(e,t)}}if(this.panoMeshes.forEach((e,t)=>{O.get(t)?O.delete(t):(this.helper.remove(e),e.dispose(),this.panoMeshes.delete(t))}),O.forEach((e,t)=>{let n=this.panoCircleMeshCreator(e,{aerialObserverMinHeight:this.aerialObserverMinHeight});this.panoMeshes.set(t,n),this.helper.add(n),O.delete(t)}),this.panoMeshes.forEach((e,t)=>{let n=this.works.getObserver(t);if(n){let r=n.position.distanceTo(n.standingPosition)>this.aerialObserverMinHeight;if(r)e.position.copy(n.position).applyMatrix4(n.work.transform),e.scale.setScalar(18);else{e.position.copy(n.standingPosition).applyMatrix4(n.work.transform);let t=this.adjustPanoCircleMeshPositionFix.get(n.panoId);t&&(scratchVector3$3.set(t.x,t.y,t.z),scratchVector3$3.equals(e.position)&&(e.position.y+=t.w)),e.scale.setScalar(1.2)}let o=this.camera.position.clone().setY(e.position.y),s=new three.Vector3().copy(e.position).sub(o).normalize();if(t===panoStringify(this.currentPano)){let t=clamp$1((.5-o.distanceTo(e.position))/.5,0,1);s.multiplyScalar(1-t).add(p.clone().multiplyScalar(t))}if(s.length()>0){let t=r?-Math.PI/2:0,n=Math.atan2(s.x,s.z);e.quaternion.setFromEuler(new three.Euler(t,n,0,`YXZ`))}}else e.visible=!1}),this.camera.pose.distance>.1||C)this.panoMeshes.forEach(n=>{n.setOpacity(0),n.setCurrent(!1),n.updateTime&&n.updateTime(e,t),n.visible=!1});else if(w){let n=w.work.observers,[,r]=arrayMin(w.accessibleNodes,e=>{let t=n[e];return!t||!t.active?1/0:w.standingPosition.distanceTo(t.standingPosition)},!0);r=clamp$1(r,3,1/0);let o=w.accessibleNodes.concat(w.panoIndex).map(e=>panoStringify({panoIndex:e,workCode:w.work.workCode}));this.panoMeshes.forEach((n,s)=>{let c=this.works.getObserver(s),l=!1,u=1;if(o.indexOf(s)===-1)l=!1,u=0;else if(!c)l=!1,u=0;else if(!c.loadable&&!c.active)l=!1,u=0;else{let e=n.position.clone().project(this.camera);l=Math.abs(e.x)<1&&Math.abs(e.y)<1&&Math.abs(e.z)<1&&!n.loading&&n.progress===0&&T!==null&&panoStringify({panoIndex:T.panoIndex,workCode:T.work.workCode})===s;let t=n.position.clone().setY(this.camera.position.y).distanceTo(this.camera.position);u=t<.01?0:clamp$1(r/t,.1,.85)}c&&c===D&&c.position.distanceTo(c.standingPosition)>this.aerialObserverMinHeight&&n.position.distanceTo(this.camera.position)<35&&(u=0),this.modelScene.parameter.resolveValue().modelAlpha>0&&(u=0),n.setCurrent(l),n.setOpacity(u),n.updateTime&&n.updateTime(e,t)})}{let e=(s=this.modelScene.parameter.progress)==null?1:s,t=Math.round(e),n=this.modelScene.parameter.pano0,r=this.modelScene.parameter.pano1,o=t===0?n:r,l;if(o&&(l=this.works.getObserver(o.panoId),l||(l=this.panoPictureObserverMap.get(o))),this.tiling.appearDuration=this.tileAppearDuration,this.tiling.maxRequest=e<(canUseNativeImageBitmap()?.6:.99)?0:this.tileMaxRequest,this.tiling.imageOptions=this.imageOptions,!l||!o||this.tileLevelForFov===!1||this.camera.perspToOrtho.x>0){this.tiling.setObserver(null);let e={renderer:this.renderer,resolution:this.camera.resolution,pixelRatio:this.camera.pixelRatio,time:this.camera.time,cameraMatrix:this.camera.matrixWorld,cameraProjectionMatrix:this.camera.projectionMatrix,panoMap:null,panoMatrix:new three.Matrix4,panoZoom:1,minLevel:0,level:0};this.tiling.update(e),this.modelScene.parameter.set(`refinedScreen`,null)}else{let e=getImageSizeLevel(o.mapSize),s=e+1,u=new three.Vector2().copy(this.camera.resolution).multiplyScalar(this.camera.pixelRatio),d=Math.floor(this.tileLevelForFov(this.camera.fov,u)),f=d>e?d:0;this.tiling.setObserver(l);let p={renderer:this.renderer,resolution:this.camera.resolution,pixelRatio:this.camera.pixelRatio,time:this.camera.time,cameraMatrix:this.camera.matrixWorld,cameraProjectionMatrix:this.camera.projectionMatrix,panoMap:o.map,panoMatrix:o.matrix,panoZoom:o.zoom,minLevel:s,level:f},m=this.tiling.update(p),h={map:this.tiling.renderTarget.texture,matrixInverse:this.tiling.camera.matrixWorldInverse,projectionMatrix:this.tiling.camera.projectionMatrix,pano:t,opacity:(n==null?void 0:n.panoId)===(r==null?void 0:r.panoId)?1:easeInQuart(Math.abs(((c=this.modelScene.parameter.progress)==null?0:c)-.5)*2)},g=this.modelScene.parameter.refinedScreen;(m||h.pano!==(g==null?void 0:g.pano)||h.opacity!==(g==null?void 0:g.opacity))&&this.modelScene.parameter.set(`refinedScreen`,h)}}if(this.panoVideo.object.position.copy(this.camera.position),this.panoVideo.updateTime(e),w&&w.images.video&&(this.needsRender=!0),this.intersectMesh&&this.intersectMesh.parent&&w&&w.position.y-w.standingPosition.y>10){let e=clamp$1(this.camera.position.distanceTo(this.intersectMesh.position)*(2*Math.tan(.5*this.camera.fov/180*Math.PI))/5,.5);this.intersectMesh.scale.setScalar(e)}else this.intersectMesh.scale.setScalar(1);{let e=y.effect,{pano0:t,pano1:n}=this.modelScene.parameter;if(t&&n&&t!==n&&(e===`fly`||e===`model`)&&this.flyEffectUseDepthBuffer){if(((l=this.modelScene.parameter.pano0Depth)==null?void 0:l.panoId)!==t.panoId||((u=this.modelScene.parameter.pano1Depth)==null?void 0:u.panoId)!==n.panoId){let e=500,r=512;this.pano0DepthCubeRenderTarget?this.pano0DepthCubeRenderTarget.width!==512&&this.pano0DepthCubeRenderTarget.setSize(512,512):this.pano0DepthCubeRenderTarget=new three.WebGLCubeRenderTarget(512,{minFilter:three.NearestFilter,magFilter:three.NearestFilter,generateMipmaps:!1}),this.pano1DepthCubeRenderTarget?this.pano1DepthCubeRenderTarget.width!==512&&this.pano1DepthCubeRenderTarget.setSize(512,512):this.pano1DepthCubeRenderTarget=new three.WebGLCubeRenderTarget(512,{minFilter:three.NearestFilter,magFilter:three.NearestFilter,generateMipmaps:!1});let o=new three.CubeCamera(this.camera.near,this.camera.far,this.pano0DepthCubeRenderTarget);o.matrix.copy(t.matrix),o.matrixWorld.copy(o.matrix),o.matrixAutoUpdate=!1,renderDepthCube(this.renderer,this.modelScene,o,500);let s=new three.CubeCamera(this.camera.near,this.camera.far,this.pano1DepthCubeRenderTarget);s.matrix.copy(n.matrix),s.matrixWorld.copy(s.matrix),s.matrixAutoUpdate=!1,renderDepthCube(this.renderer,this.modelScene,s,500),this.modelScene.parameter.set({pano0Depth:{panoId:t.panoId,map:this.pano0DepthCubeRenderTarget.texture,mapSize:this.pano0DepthCubeRenderTarget.width,maxDepth:500},pano1Depth:{panoId:n.panoId,map:this.pano1DepthCubeRenderTarget.texture,mapSize:this.pano1DepthCubeRenderTarget.width,maxDepth:500}})}}else this.modelScene.parameter.set({pano0Depth:null,pano1Depth:null}),this.flyEffectUseDepthBuffer||(this.pano0DepthCubeRenderTarget&&(this.pano0DepthCubeRenderTarget.dispose(),this.pano0DepthCubeRenderTarget=void 0),this.pano1DepthCubeRenderTarget&&(this.pano1DepthCubeRenderTarget.dispose(),this.pano1DepthCubeRenderTarget=void 0))}}getTargetState(){let e=this.cameraMotion.getKeyFrameSegment(now())[1],t=this.locationMotion.getKeyFrameSegment(now())[1],n=this.panoResourceFromLocationMotionKeyframe(t),r=this.works.getObserver(n.panoId);return{workCode:r?r.work.workCode:this.currentPano.workCode,panoIndex:r?r.panoIndex:this.currentPano.panoIndex,mode:this.mode,longitude:e.value.longitude,latitude:e.value.latitude,fov:e.value.fov,offset:r?r.position.clone().applyMatrix4(r.work.transform):this.camera.position.clone(),distance:this.locationMotion.value.distance}}moveToPano(e,t,n){var r,o,s;let c=(r=t.effect)==null?`fly`:r;this.userAction=n,this.stopMomentumMovement();let l=panoStringify(e),u=this.works.getObserver(e);if(!u)throw Error(`Invalid PanoId ${JSON.stringify(e)}`);let d=getImageSizeFromURL(u.images.up),f=this.imageOptions.size;f===void 0&&u&&d&&(f=Number(d)),f===void 0&&(f=2048);let p=this.imageOptions.transform,m=Object.assign({key:`pano.${l}`},pick(this.imageOptions,[`format`,`size`,`quality`,`sharpen`,`forceUseExifOrientation`,`mappings`])),h={right:u.images.work.getURL(u.images.right),left:u.images.work.getURL(u.images.left),up:u.images.work.getURL(u.images.up),down:u.images.work.getURL(u.images.down),front:u.images.work.getURL(u.images.front),back:u.images.work.getURL(u.images.back)},g=`pano:`+jsonHash([h,m,p]);if(this.pendingTextureTask){if(this.pendingTextureTask.hash===g)return;{let e=this.pendingTextureTask.panoId;(o=this.panoMeshes.get(e))==null||o.setProgress(0),this.emit(`pano.texture.abort`,createEvent(`pano.texture.abort`,{error:null,progress:0,meta:null,pano:{panoIndex:u.panoIndex,workCode:u.work.workCode}}))}}let _=`move-to-pano-`+l;this.pending.add(_);let v=this.modelScene.parameter,y;if(v.pano0&&v.pano0.map.name===g?y=v.pano0:v.pano1&&v.pano1.map.name===g&&(y=v.pano1),y){let n={panoId:l,effect:c,effectEasing:(s=t.effectEasing)==null?defaultEffectEase:s,panoPicture:{panoId:y.panoId,map:y.map,mapHistogram:y.mapHistogram,mapSize:y.mapSize,matrix:u.matrix.clone().premultiply(u.work.transform),zoom:1},position:u.position.clone().applyMatrix4(u.work.transform),fixCameraTransform:new three.Matrix4};n.panoPicture&&this.panoPictureObserverMap.set(n.panoPicture,u),this.pendingTextureTask=void 0,AnimationFrameLoop.shared.add(()=>{this.pending.delete(_),this.doMoveToPano(e,n,t)},!0,1);return}this.pendingTextureTask={panoId:l,hash:g,onLoad:n=>{var r,o;let s=n.body;if(this.destroyed)s.dispose();else{s.name=g;let n=Array.isArray(s.image)?s.image[0]:s.image,d=(r=n==null?void 0:n.width)==null?2048:r,f=new Histogram().formPixels(getRgbaDataFromCubeTexture(this.renderer,s,!0,sharedHistogramRgbaData).data),p={panoId:l,effect:c,effectEasing:(o=t.effectEasing)==null?defaultEffectEase:o,panoPicture:{panoId:l,map:s,mapSize:d,mapHistogram:new three.Vector4().fromArray(f.toArray()),matrix:u.matrix.clone().premultiply(u.work.transform),zoom:1},position:u.position.clone().applyMatrix4(u.work.transform),fixCameraTransform:new three.Matrix4};p.panoPicture&&this.panoPictureObserverMap.set(p.panoPicture,u),this.doMoveToPano(e,p,t)}},onError:n=>{let r=Object.assign(Object.assign(Object.assign({},e),{mode:this.mode}),clonePose(this.camera.pose));this.emit(`pano.error`,createEvent(`pano.error`,{error:n,userAction:this.userAction,options:t,prevPano:this.currentPano,progress:0,state:r})),this.emit(`pano.cancel`,createEvent(`pano.cancel`,{error:n,userAction:this.userAction,options:t,prevPano:this.currentPano,progress:0,state:r})),this.emit(`error`,n),t.moveCancelCallback&&t.moveCancelCallback()}};let b=this.panoMeshes.get(l);b&&b.tap&&b.tap(),this.textureLoader.loadCubeTexture(h,{imageURL:{transform:p,options:m},format:three.RGBFormat,viaAjax:!0,fetcher:getFetcher(this.fiveId,u.work)},void 0,void 0,t=>{var n,r;this.emit(`pano.texture.progress`,createEvent(`pano.texture.progress`,{error:null,progress:t,meta:null,pano:e})),((n=this.pendingTextureTask)==null?void 0:n.hash)===g&&((r=this.panoMeshes.get(l))==null||r.setProgress(t))},this.renderer).then(t=>{var n,r;this.pending.delete(_),((n=this.pendingTextureTask)==null?void 0:n.hash)===g?(this.pendingTextureTask.onLoad(t),this.pendingTextureTask=void 0,(r=this.panoMeshes.get(l))==null||r.setProgress(0)):t.body.dispose(),this.emit(`pano.texture.success`,createEvent(`pano.texture.success`,{error:null,progress:1,meta:t.meta,pano:e}))}).catch(t=>{var n,r;this.pending.delete(_),((n=this.pendingTextureTask)==null?void 0:n.hash)===g&&(this.pendingTextureTask.onError(t),this.pendingTextureTask=void 0,(r=this.panoMeshes.get(l))==null||r.setProgress(0)),this.emit(`pano.texture.error`,createEvent(`pano.texture.error`,{error:t,progress:0,meta:null,pano:e})),this.emit(`error`,t)}),this.emit(`pano.texture.load`,createEvent(`pano.texture.load`,{error:null,progress:0,meta:null,pano:e}))}initAnimation(){return this.destroyed?Promise.resolve():new Promise(t=>{let{duration:n,effect:r,userAction:o}=this.initial;this.userAction=o;let s=e.initAnimationEndState(this),c={workCode:s.workCode,panoIndex:s.panoIndex},l={modelAlpha:0},u={perspToOrtho:0},d=!1;this.moveToPano(c,{longitude:s.longitude,latitude:s.latitude,fov:s.fov,effect:r,duration:n,moveStartCallback:e=>{d=!0,this.perspToOrthoMotion.set(u,n).catch(noop),this.modelAlphaMotion.setKeyframes([{progress:0,value:Object.assign({},this.modelAlphaMotion.value)},{progress:.6,value:Object.assign({},this.modelAlphaMotion.value)},{progress:1,value:l}],n).catch(noop),this.emit(`initAnimation.start`,createEvent(`initAnimation.start`,{state:e,userAction:this.userAction}))},moveEndCallback:e=>{this.emit(`initAnimation.end`,createEvent(`initAnimation.end`,{state:e,userAction:this.userAction})),this.initAnimationed=!0,t()},moveCancelCallback:()=>{let e=Object.assign(Object.assign(Object.assign({},c),{mode:this.mode}),clonePose(this.camera.pose));d===!1&&this.emit(`initAnimation.start`,createEvent(`initAnimation.start`,{state:e,userAction:this.userAction})),this.emit(`initAnimation.end`,createEvent(`initAnimation.end`,{state:e,userAction:this.userAction})),this.initAnimationed=!0,t()}},o)})}panoResourceFromLocationMotionKeyframe(e){return this.panoResources[e.key]}locationMotionKeyframesLength(e){let t=0;for(let n=1;n<e.length;n++){let r=this.panoResourceFromLocationMotionKeyframe(e[n-1]).position,o=this.panoResourceFromLocationMotionKeyframe(e[n]).position,s=r.distanceTo(o)*(e[n].value.count-e[n-1].value.count);t+=s}return t}doMoveToPano(e,t,n={}){var r,o,s,c,l,u,d,f,p,m,h;let g=now(),_=createUuid();this.panoResources[_]=t;let v=1,y,b,S;if(this.locationMotion.ended){let[e,n]=this.locationMotion.getKeyFrameSegment(g),o=this.locationMotion.value,s=((r=this.panoResourceFromLocationMotionKeyframe(n))==null?this.camera:r).position,c=t.position;y=Math.max(s.distanceTo(c),1),b=[{key:n.key,progress:0,value:Object.assign(Object.assign({},o),{count:0})},{key:_,progress:1,value:{distance:0,count:1}}],S=0}else{let[e,n]=this.locationMotion.getKeyFrameSegment(g),r=this.locationMotion.value,o=this.panoResourceFromLocationMotionKeyframe(e).position,s=this.panoResourceFromLocationMotionKeyframe(n).position,c=t.position,l=n.value.count-r.count,u=Math.max(o.distanceTo(s),1)*l;y=u+Math.max(s.distanceTo(c),1),b=[{key:e.key,progress:0,value:Object.assign({},r)},{key:n.key,progress:u/y,value:n.value},{key:_,progress:1,value:{count:n.value.count+1,distance:0}}];let d=this.locationMotionKeyframesLength(this.locationMotion.keyframes),f=this.locationMotionKeyframesLength(b);S=d===0||d===0?0:this.locationMotion.getProgressVelocity(g)*d/f}let C=t.effect===`instant`?0:this.calculateMovingDuration(n.duration,t.effect===`fly`||t.effect===`model`?y:0),w={longitude:n.longitude,latitude:n.latitude,fov:n.fov},T=Object.assign(Object.assign({},e),{mode:this.mode,longitude:(o=w.longitude)==null?this.camera.pose.longitude:o,latitude:(s=w.latitude)==null?this.camera.pose.latitude:s,fov:(c=w.fov)==null?this.camera.pose.fov:c,offset:t.position.clone(),distance:this.camera.pose.distance}),E=this.currentPano;if(this.emit(`pano.moveTo`,createEvent(`pano.moveTo`,{options:n,prevPano:E,progress:0,state:T,userAction:this.userAction,error:null})),n.moveStartCallback&&n.moveStartCallback(T),this.videoTexture&&this.videoTexture.image instanceof HTMLVideoElement&&this.videoTexture.image.getAttribute(`src`)&&(this.videoTexture.image.pause(),this.videoTexture.image.removeAttribute(`uuid`),this.videoTexture.image.removeAttribute(`src`),this.videoTexture.image.oncanplay=noop,this.videoTexture.needsUpdate=!0),this.panoVideo.setMaterial(null),t.effect===`fly`||t.effect===`model`)this.cameraMotion.set(w,C).catch(noop);else{let e=coordinatesToVector({longitude:this.cameraMotion.value.longitude,latitude:this.cameraMotion.value.latitude}),n=coordinatesToVector({longitude:(l=w.longitude)==null?this.cameraMotion.value.longitude:l,latitude:(u=w.latitude)==null?this.cameraMotion.value.latitude:u}),r=new three.Object3D;r.lookAt(e);let o=new three.Matrix4().makeRotationFromQuaternion(r.quaternion);r.lookAt(n);let s=new three.Matrix4().makeRotationFromQuaternion(r.quaternion),c=new three.Matrix4().getInverse(o).premultiply(s),g=this.cameraMotion.value.fov,_=(d=w.fov)==null?this.cameraMotion.value.fov:d,v=1;t.effect===`zoomin`?v=1.5:t.effect===`zoomout`&&(v=.4);let y=clamp$1(_*v,1,170);for(let e=0;e<b.length-1;e++){let t=b[e].key;if(t){let e=this.panoResources[t];e&&(e.fixCameraTransform.copy(c),e.panoPicture&&(e.panoPicture.zoom=Math.tan(y/2/180*Math.PI)/Math.tan(g/2/180*Math.PI)))}}this.cameraMotion.setKeyframes([{progress:0,value:{longitude:this.cameraMotion.value.longitude,latitude:this.cameraMotion.value.latitude,fov:this.cameraMotion.value.fov}},{progress:0,value:{longitude:(f=w.longitude)==null?this.cameraMotion.value.longitude:f,latitude:(p=w.latitude)==null?this.cameraMotion.value.latitude:p,fov:y}},{progress:1,value:{longitude:(m=w.longitude)==null?this.cameraMotion.value.longitude:m,latitude:(h=w.latitude)==null?this.cameraMotion.value.latitude:h,fov:_}}],C).catch(noop)}this.locationMotion.setKeyframes(b,C,S).then(()=>{for(let e of this.modelScene.children)e instanceof Model&&e.show();let t=Object.assign(Object.assign({},e),{mode:this.mode,longitude:this.camera.pose.longitude,latitude:this.camera.pose.latitude,fov:this.camera.pose.fov,offset:this.camera.pose.offset.clone(),distance:this.camera.pose.distance});this.emit(`pano.arrived`,createEvent(`pano.arrived`,{options:n,prevPano:E,progress:1,state:t,userAction:this.userAction,error:null})),n.moveEndCallback&&n.moveEndCallback(t);let r=this.works.getObserver(e);if(r&&r.images.video&&this.videoTexture&&this.videoTexture.image instanceof HTMLVideoElement){let e={map:this.videoTexture,size:r.images.video.size.clone(),matrix:r.images.video.matrix.clone(),panoMatrix:r.matrix.clone().premultiply(r.work.transform),alpha:1},t=createUuid(),n=this.videoTexture.image;n.setAttribute(`uuid`,t),n.oncanplay=noop,n.ontimeupdate=noop,canplayVideo().then(o=>{o&&r.images.video&&n.getAttribute(`uuid`)===t&&(n.oncanplay=()=>{n.oncanplay=noop,n.play()},n.ontimeupdate=()=>{n.currentTime>.5&&(n.ontimeupdate=noop,this.panoVideo.setMaterial(e))},n.src=r.images.video.source)}).catch((()=>{n.removeAttribute(`uuid`)}))}else{let e=this.videoTexture.image;e.removeAttribute(`uuid`),e.oncanplay=noop,e.ontimeupdate=noop}},()=>{this.emit(`pano.cancel`,createEvent(`pano.cancel`,{options:n,prevPano:E,progress:0,state:T,userAction:this.userAction,error:null})),n.moveCancelCallback&&n.moveCancelCallback()})}getForwardObserverOrNot(e,t){let n=this.works.getObserver(this.currentPano);if(!n)return null;let r=t==null?new three.Raycaster(e.position.clone(),e.getWorldDirection(new three.Vector3)):t;r.params.Points={threshold:.1},r.firstHitOnly=!0,r.floorIndex=-1;let o=n.standingPosition.clone().applyMatrix4(n.work.transform);if(n.position.clone().applyMatrix4(n.work.transform).distanceTo(r.ray.origin)>1){let e=new three.Raycaster(r.ray.origin,new three.Vector3(0,-1,0));e.firstHitOnly=r.firstHitOnly,e.floorIndex=r.floorIndex;let[t]=this.modelScene.intersectRaycaster(e);t&&t.distance<=2?o.copy(t.point):o.copy(r.ray.origin).add(new three.Vector3(0,-1.5,0))}let[s]=this.modelScene.intersectRaycaster(r),c=(s?s.point:r.ray.origin.clone().add(r.ray.direction.clone().normalize().multiplyScalar(3))).clone().sub(o).normalize();if(c.length()===0)return null;let l=n.work.observers,u=n.accessibleNodes.filter(t=>{if(t===this.currentPano.panoIndex&&n.work.workCode===this.currentPano.workCode)return!1;let r=l[t];if(!r)return!1;let o=r.standingPosition.clone().applyMatrix4(r.work.transform).project(e);return Math.abs(o.z)>1||Math.abs(o.x)>1||Math.abs(o.y)>1?!1:r.loadable||r.active}),d=new Map,f=u.slice().sort((e,t)=>{let n=l[e],r=d.get(n);r===void 0&&(r=scratchVector3$3.copy(n.standingPosition).applyMatrix4(n.work.transform).distanceTo(o),d.set(n,r));let s=l[t],c=d.get(s);return c===void 0&&(c=scratchVector3$3.copy(s.standingPosition).applyMatrix4(s.work.transform).distanceTo(o),d.set(s,c)),r-c});d.clear();for(let e of[Math.PI/8,Math.PI/6,Math.PI/4,Math.PI/3])for(let t of f){let n=l[t];if(n){let t=scratchVector3$3.copy(n.standingPosition).applyMatrix4(n.work.transform).sub(o);if(t&&t.length()!==0&&c.angleTo(t)<e)return n}}let p=null;if(t){let n=t.ray.intersectBox(this.modelScene.boundingBox,scratchVector3$3);n&&(n.project(e),Math.abs(n.z)<=1&&(p=n.clone()))}else p=new three.Vector3(0,0,0);if(p){let t=.4,r=n.accessibleNodes.filter(t=>{if(t===this.currentPano.panoIndex&&n.work.workCode===this.currentPano.workCode)return!1;let r=l[t];if(!r)return!1;let o=r.position.clone().applyMatrix4(r.work.transform).project(e);return Math.abs(o.z)>1||Math.abs(o.x)>1||Math.abs(o.y)>1?!1:r.loadable||r.active}),o=new Map,s=r.slice().sort((t,n)=>{let r=l[t],s=o.get(r);s===void 0&&(s=scratchVector3$3.copy(r.position).applyMatrix4(r.work.transform).distanceTo(e.position),o.set(r,s));let c=l[n],u=o.get(c);return u===void 0&&(u=scratchVector3$3.copy(c.position).applyMatrix4(c.work.transform).distanceTo(e.position),o.set(c,u)),s-u});o.clear();for(let t of s){let n=l[t];if(n){let t=scratchVector3$3.copy(n.position).applyMatrix4(n.work.transform);if(t.project(e),Math.abs(t.z)>1)continue;if(Math.pow(p.x-t.x,2)+Math.pow(p.y-t.y,2)<Math.pow(.4,2))return n}}}return null}onTapGesture(e){var t;if(this.userAction=e.userAction,this.stopMomentumMovement(),!this.initAnimationed)return;let n=e.center.raycaster;n.floorIndex=-1;let r=this.camera.getDirection(new three.Vector3).setY(0),o=null,s=this.works.getObserver(this.currentPano);if(!s)return;let c=s.work.observers,l=s.accessibleNodes.filter(e=>{if(e===this.currentPano.panoIndex&&s.work.workCode===this.currentPano.workCode)return!1;let t=c[e];return!t||scratchVector3$3.copy(t.position).applyMatrix4(t.work.transform).distanceTo(this.camera.position)>this.maxAccessibleDistance?!1:t.loadable||t.active}),[u]=this.modelScene.intersectRaycaster(n);if(u){let[e,n]=arrayMin(l,e=>{let t=c[e];return t?scratchVector3$3.copy(t.standingPosition).applyMatrix4(t.work.transform).distanceTo(u.point):1/0},!0);typeof e==`number`&&n<this.panoTapTriggerRadius&&(o=(t=c[e])==null?null:t)}if(o||(o=this.getForwardObserverOrNot(this.camera,n)),o&&o.panoId===panoStringify(this.currentPano)&&(o=null),o&&!this.locationMotion.ended){for(let e of this.locationMotion.keyframes)if(this.panoResourceFromLocationMotionKeyframe(e).panoId===o.panoId){o=null;break}}if(!o)this.emit(`gesture.tap`,e),e.defaultPrevented||this.locationMotion.ended===!0&&this.cameraBounce();else{let t={},n=Math.PI/6,c=Math.PI/12,l=o.position.clone().applyMatrix4(o.work.transform).setY(0).sub(s.position.clone().applyMatrix4(o.work.transform).setY(0)).normalize(),u=[],d=[],f=[],p=o.work.observers;for(let e of o.accessibleNodes){if(o.panoIndex===e||e===this.currentPano.panoIndex&&o.work.workCode===this.currentPano.workCode)continue;let t=p[e];if(!t)continue;let r=t.position.clone().applyMatrix4(t.work.transform).sub(o.position.clone().applyMatrix4(o.work.transform)).setY(0).normalize();l.angleTo(r)<n&&f.push(r)}let[m]=(f.length>0?f:[...u,...d]).slice().sort((e,t)=>e.angleTo(l)-t.angleTo(l));if(m&&m.angleTo(r)>c&&(t.longitude=Math.atan2(-m.x,-m.z)),this.cameraMotion.value.latitude<-Math.PI/4){let n=e.state.fov;t.latitude=clamp$1(0,clamp$1(typeof this.minLatitude==`function`?this.minLatitude(n):this.minLatitude,-Math.PI/2,Math.PI/2),clamp$1(typeof this.maxLatitude==`function`?this.maxLatitude(n):this.maxLatitude,-Math.PI/2,Math.PI/2))}let h=Object.assign({},e.state);if(h.workCode=o.work.workCode,h.panoIndex=o.panoIndex,t.longitude!==void 0&&(h.longitude=t.longitude),t.latitude!==void 0&&(h.latitude=t.latitude),t.fov!==void 0&&(h.fov=t.fov),h.distance=0,h.offset=o.position.clone(),e.state=h,this.emit(`gesture.tap`,e),!e.defaultPrevented){if(this.emit(`pano.select`,createEvent(`pano.select`,{prevPano:this.currentPano,state:h,userAction:e.userAction,options:t,progress:0,error:null})),o&&!o.active){let e=panoStringify({panoIndex:o.panoIndex,workCode:o.work.workCode}),t=this.panoMeshes.get(e);t&&(t.setDisabled(!1),t.setLoading(!0))}o&&o.active&&this.emit(`pano.request`,createEvent(`pano.request`,{userAction:e.userAction,prevPano:this.currentPano,progress:0,state:h,options:t,error:null}))}}}},DEG_TO_RAD=Math.PI/180,RAD_TO_DEG=180/Math.PI,MIN_TIMESTEP=.001,MAX_TIMESTEP=1,isIOS=(()=>{let e=typeof navigator<`u`&&/iPad|iPhone|iPod/.test(navigator.platform);return()=>e})(),isSafari=(()=>{let e=typeof navigator<`u`&&/^((?!chrome|android).)*safari/i.test(navigator.userAgent);return()=>e})(),isFirefoxAndroid=(()=>{let e=typeof navigator<`u`&&navigator.userAgent.indexOf(`Firefox`)!==-1&&navigator.userAgent.indexOf(`Android`)!==-1;return()=>e})(),getChromeVersion=(()=>{let e=typeof navigator<`u`?navigator.userAgent.match(/.*Chrome\/([0-9]+)/):null,t=e?parseInt(e[1],10):null;return()=>t})(),isChromeWithoutDeviceMotion=(()=>{let e=!1;if(getChromeVersion()===65){let t=typeof navigator<`u`?navigator.userAgent.match(/.*Chrome\/([0-9\.]*)/):null;if(t){let[n,r,o,s]=t[1].split(`.`);e=parseInt(o,10)===3325&&parseInt(s,10)<148}}return()=>e})(),isSafariWithoutDeviceMotion=(()=>{let e=isIOS()&&isSafari()&&typeof navigator<`u`&&navigator.userAgent.indexOf(`13_4`)!==-1;return()=>e})(),isR7=(()=>{let e=typeof navigator<`u`&&navigator.userAgent.indexOf(`R7 Build`)!==-1;return()=>e})();function isLandscapeMode(){let e=typeof window<`u`&&(window.orientation==90||window.orientation==-90);return isR7()?!e:e}function isTimestampDeltaValid(e){return!(isNaN(e)||e<=MIN_TIMESTEP||e>MAX_TIMESTEP)}function getQuaternionAngle(e){return e.w>1?0:2*Math.acos(e.w)}var warnOnce=(()=>{let e={};return(t,n)=>{e[t]===void 0&&(console.warn(`cardboard: `+n),e[t]=!0)}})();function getOriginFromUrl(e){let t,n=e.indexOf(`://`);t=n===-1?0:n+3;let r=e.indexOf(`/`,t);return r===-1&&(r=e.length),e.substring(0,r)}function isInsideCrossOriginIFrame(){if(typeof window>`u`||typeof document>`u`)return!1;let e=window.self!==window.top,t=getOriginFromUrl(document.referrer),n=getOriginFromUrl(window.location.href);return e&&t!==n}var updateEyeViewMatrices=(()=>{function e(e,t,n){let r=t?t[0]:0,o=t?t[1]:0,s=t?t[2]:0,c=t?t[3]:1,l=r+r,u=o+o,d=s+s,f=r*l,p=r*u,m=r*d,h=o*u,g=o*d,_=s*d,v=c*l,y=c*u,b=c*d;return e[0]=1-(h+_),e[1]=p+b,e[2]=m-y,e[3]=0,e[4]=p-b,e[5]=1-(f+_),e[6]=g+v,e[7]=0,e[8]=m+y,e[9]=g-v,e[10]=1-(f+h),e[11]=0,e[12]=n?n[0]:0,e[13]=n?n[1]:0,e[14]=n?n[2]:0,e[15]=1,e}function t(e,t,n){let r=n[0],o=n[1],s=n[2],c,l,u,d,f,p,m,h,g,_,v,y;return t===e?(e[12]=t[0]*r+t[4]*o+t[8]*s+t[12],e[13]=t[1]*r+t[5]*o+t[9]*s+t[13],e[14]=t[2]*r+t[6]*o+t[10]*s+t[14],e[15]=t[3]*r+t[7]*o+t[11]*s+t[15]):(c=t[0],l=t[1],u=t[2],d=t[3],f=t[4],p=t[5],m=t[6],h=t[7],g=t[8],_=t[9],v=t[10],y=t[11],e[0]=c,e[1]=l,e[2]=u,e[3]=d,e[4]=f,e[5]=p,e[6]=m,e[7]=h,e[8]=g,e[9]=_,e[10]=v,e[11]=y,e[12]=c*r+f*o+g*s+t[12],e[13]=l*r+p*o+_*s+t[13],e[14]=u*r+m*o+v*s+t[14],e[15]=d*r+h*o+y*s+t[15]),e}function n(e,t){let n=t[0],r=t[1],o=t[2],s=t[3],c=t[4],l=t[5],u=t[6],d=t[7],f=t[8],p=t[9],m=t[10],h=t[11],g=t[12],_=t[13],v=t[14],y=t[15],b=n*l-r*c,S=n*u-o*c,C=n*d-s*c,w=r*u-o*l,T=r*d-s*l,E=o*d-s*u,D=f*_-p*g,O=f*v-m*g,k=f*y-h*g,A=p*v-m*_,j=p*y-h*_,M=m*y-h*v,N=b*M-S*j+C*A+w*k-T*O+E*D;return N?(N=1/N,e[0]=(l*M-u*j+d*A)*N,e[1]=(o*j-r*M-s*A)*N,e[2]=(_*E-v*T+y*w)*N,e[3]=(m*T-p*E-h*w)*N,e[4]=(u*k-c*M-d*O)*N,e[5]=(n*M-o*k+s*O)*N,e[6]=(v*C-g*E-y*S)*N,e[7]=(f*E-m*C+h*S)*N,e[8]=(c*j-l*k+d*D)*N,e[9]=(r*k-n*j-s*D)*N,e[10]=(g*T-_*C+y*b)*N,e[11]=(p*C-f*T-h*b)*N,e[12]=(l*O-c*A-u*D)*N,e[13]=(n*A-r*O+o*D)*N,e[14]=(_*S-g*w-v*b)*N,e[15]=(f*w-p*S+m*b)*N,e):null}return(r,o,s)=>{e(r,o),s&&t(r,r,s),n(r,r)}})(),SensorSample=class{constructor(e=new three.Vector3,t=0){this.sample=e,this.timestampS=t}set(e,t){this.sample=e,this.timestampS=t}copy(e){this.set(e.sample,e.timestampS)}},ComplementaryFilter=class{constructor(e,t){this.kFilter=e,this.isDebug=t,this.currentAccelMeasurement=new SensorSample,this.currentGyroMeasurement=new SensorSample,this.previousGyroMeasurement=new SensorSample,isIOS()?this.filterQ=new three.Quaternion(-1,0,0,1):this.filterQ=new three.Quaternion(1,0,0,1),this.previousFilterQ=new three.Quaternion,this.previousFilterQ.copy(this.filterQ),this.accelQ=new three.Quaternion,this.isOrientationInitialized=!1,this.estimatedGravity=new three.Vector3,this.measuredGravity=new three.Vector3,this.gyroIntegralQ=new three.Quaternion}addAccelMeasurement(e,t){this.currentAccelMeasurement.set(e,t)}addGyroMeasurement(e,t){this.currentGyroMeasurement.set(e,t),isTimestampDeltaValid(t-this.previousGyroMeasurement.timestampS)&&this.run_(),this.previousGyroMeasurement.copy(this.currentGyroMeasurement)}getOrientation(){return this.filterQ}run_(){if(!this.isOrientationInitialized){this.accelQ=this.accelToQuaternion_(this.currentAccelMeasurement.sample),this.previousFilterQ.copy(this.accelQ),this.isOrientationInitialized=!0;return}let e=this.currentGyroMeasurement.timestampS-this.previousGyroMeasurement.timestampS,t=this.gyroToQuaternionDelta_(this.currentGyroMeasurement.sample,e);this.gyroIntegralQ.multiply(t),this.filterQ.copy(this.previousFilterQ),this.filterQ.multiply(t);let n=new three.Quaternion;n.copy(this.filterQ),n.inverse(),this.estimatedGravity.set(0,0,-1),this.estimatedGravity.applyQuaternion(n),this.estimatedGravity.normalize(),this.measuredGravity.copy(this.currentAccelMeasurement.sample),this.measuredGravity.normalize();let r=new three.Quaternion;r.setFromUnitVectors(this.estimatedGravity,this.measuredGravity),r.inverse(),this.isDebug&&console.log(`Delta: %d deg, G_est: (%s, %s, %s), G_meas: (%s, %s, %s)`,RAD_TO_DEG*getQuaternionAngle(r),this.estimatedGravity.x.toFixed(1),this.estimatedGravity.y.toFixed(1),this.estimatedGravity.z.toFixed(1),this.measuredGravity.x.toFixed(1),this.measuredGravity.y.toFixed(1),this.measuredGravity.z.toFixed(1));let o=new three.Quaternion;o.copy(this.filterQ),o.multiply(r),this.filterQ.slerp(o,1-this.kFilter),this.previousFilterQ.copy(this.filterQ)}accelToQuaternion_(e){let t=new three.Vector3;t.copy(e),t.normalize();let n=new three.Quaternion;return n.setFromUnitVectors(new three.Vector3(0,0,-1),t),n.inverse(),n}gyroToQuaternionDelta_(e,t){let n=new three.Quaternion,r=new three.Vector3;return r.copy(e),r.normalize(),n.setFromAxisAngle(r,e.length()*t),n}},PosePredictor=class{constructor(e,t){this.predictionTimeS=e,this.isDebug=t,this.previousQ=new three.Quaternion,this.previousTimestampS=null,this.deltaQ=new three.Quaternion,this.outQ=new three.Quaternion}getPrediction(e,t,n){if(!this.previousTimestampS)return this.previousQ.copy(e),this.previousTimestampS=n,e;let r=new three.Vector3;r.copy(t),r.normalize();let o=t.length();if(o<DEG_TO_RAD*20)return this.isDebug&&console.log(`Moving slowly, at %s deg/s: no prediction`,(RAD_TO_DEG*o).toFixed(1)),this.outQ.copy(e),this.previousQ.copy(e),this.outQ;let s=o*this.predictionTimeS;return this.deltaQ.setFromAxisAngle(r,s),this.outQ.copy(this.previousQ),this.outQ.multiply(this.deltaQ),this.previousQ.copy(e),this.previousTimestampS=n,this.outQ}},Distortion=class{constructor(e){this.coefficients=e}distortInverse(e){let t=0,n=1,r=e-this.distort(t);for(;Math.abs(n-t)>1e-4;){let o=e-this.distort(n),s=n-o*((n-t)/(o-r));t=n,n=s,r=o}return n}distort(e){let t=e*e,n=0;for(let e=0;e<this.coefficients.length;e++)n=t*(n+this.coefficients[e]);return(n+1)*e}},Pose=class{constructor(){this.angularAcceleration=null,this.angularVelocity=null,this.linearAcceleration=null,this.linearVelocity=null,this.orientation=null,this.position=null}},FieldOfView=class{constructor(){this.leftDegrees=0,this.rightDegrees=0,this.upDegrees=0,this.downDegrees=0}},Sensor=class{constructor(e,t,n,r){this.viewer={id:`CardboardV1`,label:`Cardboard I/O 2014`,fov:40,interLensDistance:.06,baselineLensDistance:.035,screenLensDistance:.042,distortionCoefficients:[.441,.156],inverseCoefficients:[-.4410035,.42756155,-.4804439,.5460139,-.58821183,.5733938,-.48303202,.33299083,-.17573841,.0651772,-.01488963,.001559834]},this.device={widthMeters:.11,heightMeters:.062,bevelMeters:.004},this.depthNear=.01,this.depthFar=1e4,this.yawOnly=n,this.accelerometer=new three.Vector3,this.gyroscope=new three.Vector3,this.filter=new ComplementaryFilter(e,r),this.posePredictor=new PosePredictor(t,r),this.isFirefoxAndroid=isFirefoxAndroid(),this.isIOS=isIOS();let o=getChromeVersion();this.isDeviceMotionInRadians=!this.isIOS&&o!==null&&o<66,this.isWithoutDeviceMotion=isChromeWithoutDeviceMotion()||isSafariWithoutDeviceMotion(),this.filterToWorldQ=new three.Quaternion,isIOS()?this.filterToWorldQ.setFromAxisAngle(new three.Vector3(1,0,0),Math.PI/2):this.filterToWorldQ.setFromAxisAngle(new three.Vector3(1,0,0),-Math.PI/2),this.inverseWorldToScreenQ=new three.Quaternion,this.worldToScreenQ=new three.Quaternion,this.originalPoseAdjustQ=new three.Quaternion;let s=typeof window<`u`?-window.orientation*Math.PI/180:0;this.originalPoseAdjustQ.setFromAxisAngle(new three.Vector3(0,0,1),s),this.setScreenTransform_(),isLandscapeMode()&&this.filterToWorldQ.multiply(this.inverseWorldToScreenQ),this.resetQ=new three.Quaternion,this.orientationOut_=new Float32Array(4),this.previousTimestampS=Date.now()}getPosition(){return null}getOrientation(){let e;if(this.isWithoutDeviceMotion&&this._deviceOrientationQ){this.deviceOrientationFixQ=this.deviceOrientationFixQ||(function(){let e=new three.Quaternion().setFromAxisAngle(new three.Vector3(0,0,-1),0),t=new three.Quaternion;return typeof window<`u`&&window.orientation===-90?t.setFromAxisAngle(new three.Vector3(0,1,0),Math.PI/-2):t.setFromAxisAngle(new three.Vector3(0,1,0),Math.PI/2),e.multiply(t)})(),this.deviceOrientationFilterToWorldQ=this.deviceOrientationFilterToWorldQ||(function(){let e=new three.Quaternion;return e.setFromAxisAngle(new three.Vector3(1,0,0),-Math.PI/2),e})(),e=this._deviceOrientationQ;let t=new three.Quaternion;return t.copy(e),t.multiply(this.deviceOrientationFilterToWorldQ),t.multiply(this.resetQ),t.multiply(this.worldToScreenQ),t.multiplyQuaternions(this.deviceOrientationFixQ,t),this.yawOnly&&(t.x=0,t.z=0,t.normalize()),this.orientationOut_[0]=t.x,this.orientationOut_[1]=t.y,this.orientationOut_[2]=t.z,this.orientationOut_[3]=t.w,this.orientationOut_}else{let t=this.filter.getOrientation();e=this.posePredictor.getPrediction(t,this.gyroscope,this.previousTimestampS)}let t=new three.Quaternion;return t.copy(this.filterToWorldQ),t.multiply(this.resetQ),t.multiply(e),t.multiply(this.worldToScreenQ),this.yawOnly&&(t.x=0,t.z=0,t.normalize()),this.orientationOut_[0]=t.x,this.orientationOut_[1]=t.y,this.orientationOut_[2]=t.z,this.orientationOut_[3]=t.w,this.orientationOut_}getPose(){let e=new Pose;return e.orientation=this.getOrientation(),e}resetPose(){this.resetQ.copy(this.filter.getOrientation()),this.resetQ.x=0,this.resetQ.y=0,this.resetQ.z*=-1,this.resetQ.normalize(),isLandscapeMode()&&this.resetQ.multiply(this.inverseWorldToScreenQ),this.resetQ.multiply(this.originalPoseAdjustQ)}getFrameData(e){let t=this.getOrientation(),n=this.getEyeOffset(),r=this.getEyeProjectionMatrix();return e.pose.angularAcceleration=null,e.pose.angularVelocity=null,e.pose.linearAcceleration=null,e.pose.linearVelocity=null,e.pose.orientation=t,e.pose.position=null,e.timestamp=this.previousTimestampS,e.leftProjectionMatrix.set(r.left),e.rightProjectionMatrix.set(r.right),updateEyeViewMatrices(e.leftViewMatrix,t,n.left),updateEyeViewMatrices(e.rightViewMatrix,t,n.right),e}start(){if(typeof window>`u`)return()=>{};let e=this.onDeviceMotion_.bind(this),t=this.onOrientationChange_.bind(this),n=this.onMessage_.bind(this),r=this.onDeviceOrientation_.bind(this);return isIOS()&&isInsideCrossOriginIFrame()&&window.addEventListener(`message`,n),window.addEventListener(`orientationchange`,t),this.isWithoutDeviceMotion?window.addEventListener(`deviceorientation`,r):window.addEventListener(`devicemotion`,e),()=>{window.removeEventListener(`devicemotion`,e),window.removeEventListener(`deviceorientation`,t),window.removeEventListener(`orientationchange`,t),window.removeEventListener(`message`,n)}}getEyeOffset(){return{left:[-this.viewer.interLensDistance*.5,0,0],right:[this.viewer.interLensDistance*.5,0,0]}}getEyeProjectionMatrix(){let e=this.getEyeFieldOfView(),t=this.depthNear,n=this.depthFar,r={left:[],right:[]};{let o=e.left.upDegrees*DEG_TO_RAD,s=e.left.downDegrees*DEG_TO_RAD,c=e.left.leftDegrees*DEG_TO_RAD,l=e.left.rightDegrees*DEG_TO_RAD,u=2/(c+l),d=2/(o+s);r.left[0]=u,r.left[1]=0,r.left[2]=0,r.left[3]=0,r.left[4]=0,r.left[5]=d,r.left[6]=0,r.left[7]=0,r.left[8]=-((c-l)*u*.5),r.left[9]=(o-s)*d*.5,r.left[10]=n/(t-n),r.left[11]=-1,r.left[12]=0,r.left[13]=0,r.left[14]=n*t/(t-n),r.left[15]=0}{let o=e.right.upDegrees*DEG_TO_RAD,s=e.right.downDegrees*DEG_TO_RAD,c=e.right.leftDegrees*DEG_TO_RAD,l=e.right.rightDegrees*DEG_TO_RAD,u=2/(c+l),d=2/(o+s);r.right[0]=u,r.right[1]=0,r.right[2]=0,r.right[3]=0,r.right[4]=0,r.right[5]=d,r.right[6]=0,r.right[7]=0,r.right[8]=-((c-l)*u*.5),r.right[9]=(o-s)*d*.5,r.right[10]=n/(t-n),r.right[11]=-1,r.right[12]=0,r.right[13]=0,r.right[14]=n*t/(t-n),r.right[15]=0}return r}getEyeFieldOfView(){let e=this.viewer,t=this.device,n=new Distortion(e.distortionCoefficients),r=e.screenLensDistance,o=(t.widthMeters-e.interLensDistance)/2,s=e.interLensDistance/2,c=e.baselineLensDistance-t.bevelMeters,l=t.heightMeters-c,u=RAD_TO_DEG*Math.atan(n.distort(o/r)),d=RAD_TO_DEG*Math.atan(n.distort(s/r)),f=RAD_TO_DEG*Math.atan(n.distort(c/r)),p=RAD_TO_DEG*Math.atan(n.distort(l/r)),m=new FieldOfView,h=new FieldOfView;return m.leftDegrees=Math.min(u,e.fov),m.rightDegrees=Math.min(d,e.fov),m.downDegrees=Math.min(f,e.fov),m.upDegrees=Math.min(p,e.fov),h.leftDegrees=m.rightDegrees,h.rightDegrees=m.leftDegrees,h.upDegrees=m.upDegrees,h.downDegrees=m.downDegrees,{left:m,right:h}}onDeviceOrientation_(e){this._deviceOrientationQ=this._deviceOrientationQ||new three.Quaternion;let{alpha:t,beta:n,gamma:r}=e;t=(t||0)*Math.PI/180,n=(n||0)*Math.PI/180,r=(r||0)*Math.PI/180,this._deviceOrientationQ.setFromEuler(new three.Euler(t,n,-r,`YXZ`))}onDeviceMotion_(e){this.updateDeviceMotion_(e)}updateDeviceMotion_(e){let t=e.accelerationIncludingGravity,n=e.rotationRate,r=e.timeStamp/1e3,o=r-this.previousTimestampS;if(o<0){warnOnce(`fusion-pose-sensor:invalid:non-monotonic`,`Invalid timestamps detected: non-monotonic timestamp from devicemotion`),this.previousTimestampS=r;return}else if(o<=MIN_TIMESTEP||o>MAX_TIMESTEP){warnOnce(`fusion-pose-sensor:invalid:outside-threshold`,`Invalid timestamps detected: Timestamp from devicemotion outside expected range.`),this.previousTimestampS=r;return}t&&(this.accelerometer.set(-t.x,-t.y,-t.z),n&&(isR7()?this.gyroscope.set(-n.beta,n.alpha,n.gamma):this.gyroscope.set(n.alpha,n.beta,n.gamma),this.isDeviceMotionInRadians||this.gyroscope.multiplyScalar(Math.PI/180),this.filter.addGyroMeasurement(this.gyroscope,r)),this.filter.addAccelMeasurement(this.accelerometer,r)),this.previousTimestampS=r}onOrientationChange_(){this.setScreenTransform_()}onMessage_(e){let t=e.data;!t||!t.type||t.type.toLowerCase()===`devicemotion`&&this.updateDeviceMotion_(t.deviceMotionEvent)}setScreenTransform_(){switch(this.worldToScreenQ.set(0,0,0,1),typeof window<`u`?window.orientation:0){case 0:break;case 90:this.worldToScreenQ.setFromAxisAngle(new three.Vector3(0,0,1),-Math.PI/2);break;case-90:this.worldToScreenQ.setFromAxisAngle(new three.Vector3(0,0,1),Math.PI/2);break;case 180:break}this.inverseWorldToScreenQ.copy(this.worldToScreenQ),this.inverseWorldToScreenQ.inverse()}},defaultLeftBounds=[0,0,.5,1],defaultRightBounds=[.5,0,.5,1],Cardboard=class{constructor(e){this.renderer=e,this.sensor=new Sensor(.98,.04,!1,!1),this.scale=1,this.cameraL=new three.PerspectiveCamera,this.cameraR=new three.PerspectiveCamera;let t=this.sensor.start();this.dispose=()=>{let e=this.renderer.getSize(new three.Vector2);this.renderer.setScissor(0,0,e.width,e.height),this.renderer.setViewport(0,0,e.width,e.height),this.renderer.setScissorTest(!1),t()}}render(e,t){let n=this.renderer.getSize(new three.Vector2);if(n.width>n.height){var r=e.autoUpdate;r&&(e.updateMatrixWorld(),e.autoUpdate=!1);let o={x:Math.round(n.width*defaultLeftBounds[0]),y:Math.round(n.height*defaultLeftBounds[1]),width:Math.round(n.width*defaultLeftBounds[2]),height:Math.round(n.height*defaultLeftBounds[3])},s={x:Math.round(n.width*defaultRightBounds[0]),y:Math.round(n.height*defaultRightBounds[1]),width:Math.round(n.width*defaultRightBounds[2]),height:Math.round(n.height*defaultRightBounds[3])};this.renderer.setScissorTest(!0),this.renderer.autoClear&&this.renderer.clear(),t.parent===null&&t.updateMatrixWorld(),t.matrixWorld.decompose(this.cameraL.position,this.cameraL.quaternion,this.cameraL.scale),t.matrixWorld.decompose(this.cameraR.position,this.cameraR.quaternion,this.cameraR.scale);let c=this.sensor.getEyeOffset();this.cameraL.translateOnAxis(new three.Vector3().fromArray(c.left),this.scale),this.cameraR.translateOnAxis(new three.Vector3().fromArray(c.right),this.scale);let l=this.sensor.getEyeProjectionMatrix();this.cameraL.projectionMatrix.elements=l.left.slice(),this.cameraR.projectionMatrix.elements=l.right.slice(),this.renderer.setViewport(o.x,o.y,o.width,o.height),this.renderer.setScissor(o.x,o.y,o.width,o.height),this.renderer.render(e,this.cameraL),this.renderer.setViewport(s.x,s.y,s.width,s.height),this.renderer.setScissor(s.x,s.y,s.width,s.height),this.renderer.render(e,this.cameraR),this.renderer.setViewport(0,0,n.width,n.height),this.renderer.setScissor(0,0,n.width,n.height),this.renderer.setScissorTest(!1),r&&(e.autoUpdate=!0)}else this.renderer.render(e,t)}dispose(){}},cardboard_png_data_url_default=`data:image/png;base64,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`,phone_png_data_url_default=`data:image/png;base64,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`,_a,LOCALE={zh:{TITLE:`眼镜模式`,HIT:`请将手机横屏放入 VR 眼镜中`},en:{TITLE:`GLASSES MODE`,HIT:`Please put the mobile phone horizontally into the VR glasses.`},ja:{TITLE:`メガネモード`,HIT:`携帯電話をVRメガネに水平に入れてください。`}},TEXT=typeof navigator<`u`?(_a=LOCALE[navigator.language.split(`-`)[0]])==null?LOCALE.zh:_a:LOCALE.zh,CONTENTS=`
|
|
1679
|
+
`,uniforms:{maxDepth:new three.Uniform(0)}});function renderDepthCube(e,t,n,r=1e3){depthMaterial.uniforms.maxDepth.value=r,scratchPrevClearColor.copy(e.getClearColor());let o=e.getClearAlpha(),s=t.overrideMaterial;t.overrideMaterial=depthMaterial,e.setClearColor(clearColor,0),n.update(e,t),e.setClearColor(scratchPrevClearColor,o),t.overrideMaterial=s}var defaultEffectEase=linear,scratchRaycaster$1=new three.Raycaster,scratchVector3$3=new three.Vector3,adjustPanoCircleMeshVectors=[new three.Vector3(0,0,0).multiplyScalar(.1),new three.Vector3(1,0,0).multiplyScalar(.1),new three.Vector3(-.5,0,-Math.sqrt(3)/2).multiplyScalar(.1),new three.Vector3(-.5,0,Math.sqrt(3)/2).multiplyScalar(.1)],defaultPanoramaControllerCustomInitArgs=Object.assign(Object.assign({},defaultPanoramaLikeControllerCustomInitArgs),{maxAccessibleDistance:5,panoTapTriggerRadius:.5,panoCircleMeshCreator:(e,t)=>e.position.distanceTo(e.standingPosition)>t.aerialObserverMinHeight?new PanoCircleMeshSolid:new PanoCircleMesh,adjustPanoCircleMeshPositionBasedOnModel:!1,tileLevelForFov:((e,t)=>{var n;let r=e=>e/180*Math.PI,o=(n=Math.log2)==null?(e=>Math.log(e)*Math.LOG2E):n,s=t.height/2/Math.tan(r(e/2))*Math.tan(r(45))*2,c=Math.max(o(s/512),0);return c<2.3&&c>.1&&(c=1),c=c%1>.75?Math.ceil(c):Math.floor(c),c}),tileAppearDuration:.5,tileMaxRequest:3,flyEffectUseDepthBuffer:!1}),PanoramaController=class e extends PanoramaLikeController{static parseArgs(t){var n,r,o,s,c,l,u,d;if(t instanceof e)return t;let f=super.parseArgs(t);return Object.assign(Object.assign({},f),{maxAccessibleDistance:(n=t.maxAccessibleDistance)==null?defaultPanoramaControllerCustomInitArgs.maxAccessibleDistance:n,panoTapTriggerRadius:(r=t.panoTapTriggerRadius)==null?defaultPanoramaControllerCustomInitArgs.panoTapTriggerRadius:r,panoCircleMeshCreator:(o=t.panoCircleMeshCreator)==null?defaultPanoramaControllerCustomInitArgs.panoCircleMeshCreator:o,adjustPanoCircleMeshPositionBasedOnModel:(s=t.adjustPanoCircleMeshPositionBasedOnModel)==null?defaultPanoramaControllerCustomInitArgs.adjustPanoCircleMeshPositionBasedOnModel:s,tileLevelForFov:(c=t.tileLevelForFov)==null?defaultPanoramaControllerCustomInitArgs.tileLevelForFov:c,tileAppearDuration:(l=t.tileAppearDuration)==null?defaultPanoramaControllerCustomInitArgs.tileAppearDuration:l,tileMaxRequest:(u=t.tileMaxRequest)==null?defaultPanoramaControllerCustomInitArgs.tileMaxRequest:u,flyEffectUseDepthBuffer:(d=t.flyEffectUseDepthBuffer)==null?defaultPanoramaControllerCustomInitArgs.flyEffectUseDepthBuffer:d})}static initAnimationEndState(e){let t=this.parseArgs(e),n=super.initAnimationEndState(t);return Object.assign(Object.assign({},n),{mode:`Panorama`})}constructor(t){let n=e.parseArgs(t);super(n),this.mode=`Panorama`,this.initAnimationed=!1,this.maxAccessibleDistance=n.maxAccessibleDistance,this.panoTapTriggerRadius=n.panoTapTriggerRadius,this.panoCircleMeshCreator=n.panoCircleMeshCreator,this.adjustPanoCircleMeshPositionBasedOnModel=n.adjustPanoCircleMeshPositionBasedOnModel,this.tileLevelForFov=n.tileLevelForFov,this.tileAppearDuration=n.tileAppearDuration,this.tileMaxRequest=n.tileMaxRequest,this.flyEffectUseDepthBuffer=n.flyEffectUseDepthBuffer,this.adjustPanoCircleMeshPositionFix=new Map;let{pano0:r,pano1:o}=this.modelScene.parameter.resolveValue();r&&(o==null?void 0:o.map)!==r.map&&(this.modelScene.parameter.set({pano0:o}),r.map.dispose());let s=new Set;r&&s.add(r),o&&s.add(o),this.panoMeshes=new Map,this.locationMotion=new Motion({count:0,distance:this.camera.pose.distance}),this.modelAlphaMotion=new Motion({modelAlpha:this.modelScene.parameter.resolveValue().modelAlpha}),this.perspToOrthoMotion=new Motion({perspToOrtho:this.camera.perspToOrtho.x}),this.panoResources={},this.panoResources[this.locationMotion.keyframes[0].key=this.locationMotion.keyframes[1].key=createUuid()]={panoId:panoStringify(this.currentPano),panoPicture:this.modelScene.parameter.resolveValue().pano1,position:this.camera.pose.offset.clone(),effect:`fly`,effectEasing:defaultEffectEase,fixCameraTransform:new three.Matrix4},this.panoPictureObserverMap=new WeakMap,this.textureLoader=new TextureLoader,this.tiling=new Tiling({fiveId:this.fiveId}),this.panoVideo=new PanoVideo,this.scene.add(this.panoVideo.object),this.accessibleObserverFloorCheckCount=0}get tileLevel(){return this.tiling.level}updateConfiguration(e){return super.updateConfiguration(e)===!1?!1:(e.maxAccessibleDistance!==void 0&&this.maxAccessibleDistance!==e.maxAccessibleDistance&&(this.maxAccessibleDistance=e.maxAccessibleDistance),e.panoTapTriggerRadius!==void 0&&this.panoTapTriggerRadius!==e.panoTapTriggerRadius&&(this.panoTapTriggerRadius=e.panoTapTriggerRadius),e.panoCircleMeshCreator!==void 0&&this.panoCircleMeshCreator!==e.panoCircleMeshCreator&&(this.panoCircleMeshCreator=e.panoCircleMeshCreator,this.panoMeshes&&(this.panoMeshes.forEach(e=>{this.helper.remove(e),e.dispose()}),this.panoMeshes.clear())),e.tileLevelForFov!==void 0&&this.tileLevelForFov!==e.tileLevelForFov&&(this.tileLevelForFov=e.tileLevelForFov),e.tileMaxRequest!==void 0&&this.tileMaxRequest!==e.tileMaxRequest&&(this.tileMaxRequest=e.tileMaxRequest),e.flyEffectUseDepthBuffer!==void 0&&this.flyEffectUseDepthBuffer!==e.flyEffectUseDepthBuffer&&(this.flyEffectUseDepthBuffer=e.flyEffectUseDepthBuffer),e.adjustPanoCircleMeshPositionBasedOnModel!==void 0&&this.adjustPanoCircleMeshPositionBasedOnModel!==e.adjustPanoCircleMeshPositionBasedOnModel&&(this.adjustPanoCircleMeshPositionBasedOnModel=e.adjustPanoCircleMeshPositionBasedOnModel,this.adjustPanoCircleMeshPositionBasedOnModel||this.adjustPanoCircleMeshPositionFix.clear()),!0)}destroy(){super.destroy(),this.tiling.dispose(),this.modelScene.parameter.set({refinedScreen:null,pano0Depth:null,pano1Depth:null}),this.pano0DepthCubeRenderTarget&&(this.pano0DepthCubeRenderTarget.dispose(),this.pano0DepthCubeRenderTarget=void 0),this.pano1DepthCubeRenderTarget&&(this.pano1DepthCubeRenderTarget.dispose(),this.pano1DepthCubeRenderTarget=void 0),this.locationMotion.dispose(),this.pendingTextureTask=void 0,this.panoMeshes&&(this.panoMeshes.forEach(e=>{this.helper.remove(e),e.dispose()}),this.panoMeshes.clear());let e=this.videoTexture.image;e.pause(),e.oncanplay=noop,e.ontimeupdate=noop,this.scene.remove(this.panoVideo.object),this.panoVideo.setMaterial(null),this.panoVideo.dispose();let{pano0:t,pano1:n}=this.modelScene.parameter.resolveValue();for(let e of Object.keys(this.panoResources)){let r=this.panoResources[e];if(r.panoPicture){let e=r.panoPicture.map;e&&e!==(t==null?void 0:t.map)&&e!==(n==null?void 0:n.map)&&(e.dispose(),r.panoPicture=null)}delete this.panoResources[e]}}isReady(){return this.locationMotion.ended===!0?super.isReady():!1}isTileReady(){let e=this.tiling.pedding<=0;return this.initAnimationed&&e}updateWork(t,n,r,o){this.userAction=o,this.works=t;let s=e.initAnimationEndState(Object.assign(Object.assign({},this),{initial:{currentState:Object.assign(Object.assign({},this.currentPano),this.camera.pose),duration:r.duration,effect:r.effect,state:n,userAction:o}}));return(s.workCode!==this.currentPano.workCode||s.panoIndex!==this.currentPano.panoIndex||s.longitude!==this.cameraMotion.value.longitude||s.latitude!==this.cameraMotion.value.latitude||s.fov!==this.cameraMotion.value.fov)&&(this.initAnimationed=!1,this.moveToPano({workCode:s.workCode,panoIndex:s.panoIndex},{effect:r.effect,duration:r.duration,longitude:s.longitude,latitude:s.latitude,fov:s.fov,moveEndCallback:()=>{this.initAnimationed=!0},moveCancelCallback:()=>{this.initAnimationed=!0}},o)),!0}updateModel(e){this.modelScene=e,this.hideIntersectMesh()}updateTime(e,t,...n){var r,o,s,c,l,u;if(this.destroyed)return;let d={},f={},p=this.camera.getDirection(new three.Vector3),m=this.locationMotion.keyframes[0],h=this.locationMotion.keyframes[this.locationMotion.keyframes.length-1],[g,_]=this.locationMotion.getKeyFrameSegment(e),v=this.panoResourceFromLocationMotionKeyframe(g),y=this.panoResourceFromLocationMotionKeyframe(_),b=this.panoResourceFromLocationMotionKeyframe(m),S=this.panoResourceFromLocationMotionKeyframe(h),C=!1;if(this.cameraMotion.ended===!1&&(this.cameraMotion.update(e),f.longitude=this.cameraMotion.value.longitude,f.latitude=this.cameraMotion.value.latitude,f.fov=this.cameraMotion.value.fov),this.modelAlphaMotion.ended===!1&&(this.modelAlphaMotion.update(e),d.modelAlpha=this.modelAlphaMotion.value.modelAlpha),this.perspToOrthoMotion.ended===!1&&(this.perspToOrthoMotion.update(e),this.camera.perspToOrtho.setScalar(clamp$1(this.perspToOrthoMotion.value.perspToOrtho,0,1))),this.locationMotion.ended===!1){this.locationMotion.update(e);let t=this.locationMotion.value.count-_.value.count+1,n=new three.Vector3().copy(v.position),s=new three.Vector3().copy(y.position);if(d.progress=y.effectEasing(t),t>=.01&&t<=.99&&(d.progress=clamp$1(y.effectEasing(t),.01,.99)),y.panoPicture&&(t<1?v.panoPicture&&(d.pano0=v.panoPicture):d.pano0=y.panoPicture,d.pano1=y.panoPicture),y.effect===`montage`?d.transition=`BLACK`:y.effect===`spread`?d.transition=`SPREAD`:d.transition=`FADE`,y.effect===`zoomin`||y.effect===`zoomout`?d.progress=Math.pow(t,3):y.effect===`model`&&this.camera.pose.distance<.01&&(d.modelAlpha=1-Math.pow(clamp$1(Math.abs(t-.5)*2,0,1),4)),t<1&&y.effect!==`fly`&&y.effect!==`model`){if(d.pano0&&v.panoPicture){let e={panoId:d.pano0.panoId,map:d.pano0.map,mapHistogram:d.pano0.mapHistogram,mapSize:d.pano0.mapSize,zoom:d.pano0.zoom,matrix:v.panoPicture.matrix.clone().premultiply(v.fixCameraTransform).setPosition(y.position)},t=this.panoPictureObserverMap.get(d.pano0);t&&this.panoPictureObserverMap.set(e,t),d.pano0=e}n.copy(s),C=!0}f.distance=this.locationMotion.value.distance,f.offset=new three.Vector3(n.x+(s.x-n.x)*t,n.y+(s.y-n.y)*t,n.z+(s.z-n.z)*t);let c=[],l=[];for(let e of this.locationMotion.keyframes){let{key:t,progress:n}=e;t!==void 0&&(c.push(t),n>this.locationMotion.progress&&l.push(t))}for(let e of Object.keys(this.panoResources)){if(l.indexOf(e)>=0)continue;let t=this.panoResources[e];if(t.panoPicture){let e=t.panoPicture.map;if(e){if(e===((r=d.pano0)==null?void 0:r.map)||e===((o=d.pano1)==null?void 0:o.map))continue;e.dispose(),t.panoPicture=null}}c.indexOf(e)>=0||delete this.panoResources[e]}let u=panoParse(y.panoId);u!==this.currentPano&&(this.currentPano=u,this.accessibleObserverFloorCheckCount=0),this.emit(`pano.moving`,createEvent(`pano.moving`,{userAction:this.userAction,prevPano:panoParse(b.panoId),state:Object.assign(Object.assign(Object.assign(Object.assign({},panoParse(S.panoId)),{mode:this.mode}),clonePose(this.camera.pose)),f),options:{},progress:this.locationMotion.progress,error:null}))}isEmptyObject(d)===!1&&this.modelScene.parameter.set(d),isEmptyObject(f)===!1&&this.setCamera(f);let w=this.works.getObserver(this.currentPano),T=this.locationMotion.ended?this.getForwardObserverOrNot(this.camera):null,E=this.works.getObserver(v.panoId),D=this.works.getObserver(y.panoId);if(this.adjustPanoCircleMeshPositionBasedOnModel&&this.helper.visible&&w){let e=[],t=w.work.observers;for(let n of w.accessibleNodes){let r=t[n];r&&e.push(r)}let n=new Map;if(e.sort((e,t)=>{let r=n.get(e);r===void 0&&(r=e.standingPosition.distanceTo(w.standingPosition),n.set(e,r));let o=n.get(e);return o===void 0&&(o=t.standingPosition.distanceTo(w.standingPosition),n.set(t,o)),r-o}),e.length){this.accessibleObserverFloorCheckCount%=e.length;let t=e[this.accessibleObserverFloorCheckCount],n=this.modelScene.models.find(e=>e.work===(t==null?void 0:t.work));if(t&&n&&n.visible){let e=.3,r=.05,o=.005,s=t.standingPosition.clone().applyMatrix4(t.work.transform),c=panoStringify({panoIndex:t.panoIndex,workCode:t.work.workCode}),l=adjustPanoCircleMeshVectors.map(t=>{scratchRaycaster$1.ray.origin.copy(s),scratchRaycaster$1.ray.origin.add(scratchVector3$3.copy(t).setY(e)),scratchRaycaster$1.ray.direction.set(0,-1,0),scratchRaycaster$1.firstHitOnly=!0,scratchRaycaster$1.floorIndex=-1;let[r]=n.intersectRaycaster(scratchRaycaster$1);return r&&r.distance-o<=e?new three.Vector3().copy(s).setY(r.point.y+o):s});l.sort((e,t)=>t.y-e.y);let u=l[Math.floor(l.length/2)],[d]=l.filter(e=>e.distanceTo(u)<=.05);if(d){let e=new three.Vector4(s.x,s.y,s.z,d.y-s.y),t=this.adjustPanoCircleMeshPositionFix.get(c);t&&!e.equals(t)&&(this.needsRender=!0),this.adjustPanoCircleMeshPositionFix.set(c,e)}}this.accessibleObserverFloorCheckCount++}}let O=new Map;if(E)for(let e of E.accessibleNodes){let t=E.work.observers[e];if(t){let e=panoStringify({panoIndex:t.panoIndex,workCode:t.work.workCode});O.set(e,t)}}if(D)for(let e of D.accessibleNodes){let t=D.work.observers[e];if(t){let e=panoStringify({panoIndex:t.panoIndex,workCode:t.work.workCode});O.set(e,t)}}if(this.panoMeshes.forEach((e,t)=>{O.get(t)?O.delete(t):(this.helper.remove(e),e.dispose(),this.panoMeshes.delete(t))}),O.forEach((e,t)=>{let n=this.panoCircleMeshCreator(e,{aerialObserverMinHeight:this.aerialObserverMinHeight});this.panoMeshes.set(t,n),this.helper.add(n),O.delete(t)}),this.panoMeshes.forEach((e,t)=>{let n=this.works.getObserver(t);if(n){let r=n.position.distanceTo(n.standingPosition)>this.aerialObserverMinHeight;if(r)e.position.copy(n.position).applyMatrix4(n.work.transform),e.scale.setScalar(18);else{e.position.copy(n.standingPosition).applyMatrix4(n.work.transform);let t=this.adjustPanoCircleMeshPositionFix.get(n.panoId);t&&(scratchVector3$3.set(t.x,t.y,t.z),scratchVector3$3.equals(e.position)&&(e.position.y+=t.w)),e.scale.setScalar(1.2)}let o=this.camera.position.clone().setY(e.position.y),s=new three.Vector3().copy(e.position).sub(o).normalize();if(t===panoStringify(this.currentPano)){let t=clamp$1((.5-o.distanceTo(e.position))/.5,0,1);s.multiplyScalar(1-t).add(p.clone().multiplyScalar(t))}if(s.length()>0){let t=r?-Math.PI/2:0,n=Math.atan2(s.x,s.z);e.quaternion.setFromEuler(new three.Euler(t,n,0,`YXZ`))}}else e.visible=!1}),this.camera.pose.distance>.1||C)this.panoMeshes.forEach(n=>{n.setOpacity(0),n.setCurrent(!1),n.updateTime&&n.updateTime(e,t),n.visible=!1});else if(w){let n=w.work.observers,[,r]=arrayMin(w.accessibleNodes,e=>{let t=n[e];return!t||!t.active?1/0:w.standingPosition.distanceTo(t.standingPosition)},!0);r=clamp$1(r,3,1/0);let o=w.accessibleNodes.concat(w.panoIndex).map(e=>panoStringify({panoIndex:e,workCode:w.work.workCode}));this.panoMeshes.forEach((n,s)=>{let c=this.works.getObserver(s),l=!1,u=1;if(o.indexOf(s)===-1)l=!1,u=0;else if(!c)l=!1,u=0;else if(!c.loadable&&!c.active)l=!1,u=0;else{let e=n.position.clone().project(this.camera);l=Math.abs(e.x)<1&&Math.abs(e.y)<1&&Math.abs(e.z)<1&&!n.loading&&n.progress===0&&T!==null&&panoStringify({panoIndex:T.panoIndex,workCode:T.work.workCode})===s;let t=n.position.clone().setY(this.camera.position.y).distanceTo(this.camera.position);u=t<.01?0:clamp$1(r/t,.1,.85)}c&&c===D&&c.position.distanceTo(c.standingPosition)>this.aerialObserverMinHeight&&n.position.distanceTo(this.camera.position)<35&&(u=0),this.modelScene.parameter.resolveValue().modelAlpha>0&&(u=0),n.setCurrent(l),n.setOpacity(u),n.updateTime&&n.updateTime(e,t)})}{let e=(s=this.modelScene.parameter.progress)==null?1:s,t=Math.round(e),n=this.modelScene.parameter.pano0,r=this.modelScene.parameter.pano1,o=t===0?n:r,l;if(o&&(l=this.works.getObserver(o.panoId),l||(l=this.panoPictureObserverMap.get(o))),this.tiling.appearDuration=this.tileAppearDuration,this.tiling.maxRequest=e<(canUseNativeImageBitmap()?.6:.99)?0:this.tileMaxRequest,this.tiling.imageOptions=this.imageOptions,!l||!o||this.tileLevelForFov===!1||this.camera.perspToOrtho.x>0){this.tiling.setObserver(null);let e={renderer:this.renderer,resolution:this.camera.resolution,pixelRatio:this.camera.pixelRatio,time:this.camera.time,cameraMatrix:this.camera.matrixWorld,cameraProjectionMatrix:this.camera.projectionMatrix,panoMap:null,panoMatrix:new three.Matrix4,panoZoom:1,minLevel:0,level:0};this.tiling.update(e),this.modelScene.parameter.set(`refinedScreen`,null)}else{let e=getImageSizeLevel(o.mapSize),s=e+1,u=new three.Vector2().copy(this.camera.resolution).multiplyScalar(this.camera.pixelRatio),d=Math.floor(this.tileLevelForFov(this.camera.fov,u)),f=d>e?d:0;this.tiling.setObserver(l);let p={renderer:this.renderer,resolution:this.camera.resolution,pixelRatio:this.camera.pixelRatio,time:this.camera.time,cameraMatrix:this.camera.matrixWorld,cameraProjectionMatrix:this.camera.projectionMatrix,panoMap:o.map,panoMatrix:o.matrix,panoZoom:o.zoom,minLevel:s,level:f},m=this.tiling.update(p),h={map:this.tiling.renderTarget.texture,matrixInverse:this.tiling.camera.matrixWorldInverse,projectionMatrix:this.tiling.camera.projectionMatrix,pano:t,opacity:(n==null?void 0:n.panoId)===(r==null?void 0:r.panoId)?1:easeInQuart(Math.abs(((c=this.modelScene.parameter.progress)==null?0:c)-.5)*2)},g=this.modelScene.parameter.refinedScreen;(m||h.pano!==(g==null?void 0:g.pano)||h.opacity!==(g==null?void 0:g.opacity))&&this.modelScene.parameter.set(`refinedScreen`,h)}}if(this.panoVideo.object.position.copy(this.camera.position),this.panoVideo.updateTime(e),w&&w.images.video&&(this.needsRender=!0),this.intersectMesh&&this.intersectMesh.parent&&w&&w.position.y-w.standingPosition.y>10){let e=clamp$1(this.camera.position.distanceTo(this.intersectMesh.position)*(2*Math.tan(.5*this.camera.fov/180*Math.PI))/5,.5);this.intersectMesh.scale.setScalar(e)}else this.intersectMesh.scale.setScalar(1);{let e=y.effect,{pano0:t,pano1:n}=this.modelScene.parameter;if(t&&n&&t!==n&&(e===`fly`||e===`model`)&&this.flyEffectUseDepthBuffer){if(((l=this.modelScene.parameter.pano0Depth)==null?void 0:l.panoId)!==t.panoId||((u=this.modelScene.parameter.pano1Depth)==null?void 0:u.panoId)!==n.panoId){let e=500,r=512;this.pano0DepthCubeRenderTarget?this.pano0DepthCubeRenderTarget.width!==512&&this.pano0DepthCubeRenderTarget.setSize(512,512):this.pano0DepthCubeRenderTarget=new three.WebGLCubeRenderTarget(512,{minFilter:three.NearestFilter,magFilter:three.NearestFilter,generateMipmaps:!1}),this.pano1DepthCubeRenderTarget?this.pano1DepthCubeRenderTarget.width!==512&&this.pano1DepthCubeRenderTarget.setSize(512,512):this.pano1DepthCubeRenderTarget=new three.WebGLCubeRenderTarget(512,{minFilter:three.NearestFilter,magFilter:three.NearestFilter,generateMipmaps:!1});let o=new three.CubeCamera(this.camera.near,this.camera.far,this.pano0DepthCubeRenderTarget);o.matrix.copy(t.matrix),o.matrixWorld.copy(o.matrix),o.matrixAutoUpdate=!1,renderDepthCube(this.renderer,this.modelScene,o,500);let s=new three.CubeCamera(this.camera.near,this.camera.far,this.pano1DepthCubeRenderTarget);s.matrix.copy(n.matrix),s.matrixWorld.copy(s.matrix),s.matrixAutoUpdate=!1,renderDepthCube(this.renderer,this.modelScene,s,500),this.modelScene.parameter.set({pano0Depth:{panoId:t.panoId,map:this.pano0DepthCubeRenderTarget.texture,mapSize:this.pano0DepthCubeRenderTarget.width,maxDepth:500},pano1Depth:{panoId:n.panoId,map:this.pano1DepthCubeRenderTarget.texture,mapSize:this.pano1DepthCubeRenderTarget.width,maxDepth:500}})}}else this.modelScene.parameter.set({pano0Depth:null,pano1Depth:null}),this.flyEffectUseDepthBuffer||(this.pano0DepthCubeRenderTarget&&(this.pano0DepthCubeRenderTarget.dispose(),this.pano0DepthCubeRenderTarget=void 0),this.pano1DepthCubeRenderTarget&&(this.pano1DepthCubeRenderTarget.dispose(),this.pano1DepthCubeRenderTarget=void 0))}}getTargetState(){let e=this.cameraMotion.getKeyFrameSegment(now())[1],t=this.locationMotion.getKeyFrameSegment(now())[1],n=this.panoResourceFromLocationMotionKeyframe(t),r=this.works.getObserver(n.panoId);return{workCode:r?r.work.workCode:this.currentPano.workCode,panoIndex:r?r.panoIndex:this.currentPano.panoIndex,mode:this.mode,longitude:e.value.longitude,latitude:e.value.latitude,fov:e.value.fov,offset:r?r.position.clone().applyMatrix4(r.work.transform):this.camera.position.clone(),distance:this.locationMotion.value.distance}}moveToPano(e,t,n){var r,o,s;let c=(r=t.effect)==null?`fly`:r;this.userAction=n,this.stopMomentumMovement();let l=panoStringify(e),u=this.works.getObserver(e);if(!u)throw Error(`Invalid PanoId ${JSON.stringify(e)}`);let d=getImageSizeFromURL(u.images.up),f=this.imageOptions.size;f===void 0&&u&&d&&(f=Number(d)),f===void 0&&(f=2048);let p=this.imageOptions.transform,m=Object.assign({key:`pano.${l}`},pick(this.imageOptions,[`format`,`size`,`quality`,`sharpen`,`forceUseExifOrientation`,`mappings`])),h={right:u.images.work.getURL(u.images.right),left:u.images.work.getURL(u.images.left),up:u.images.work.getURL(u.images.up),down:u.images.work.getURL(u.images.down),front:u.images.work.getURL(u.images.front),back:u.images.work.getURL(u.images.back)},g=`pano:`+jsonHash([h,m,p]);if(this.pendingTextureTask){if(this.pendingTextureTask.hash===g)return;{let e=this.pendingTextureTask.panoId;(o=this.panoMeshes.get(e))==null||o.setProgress(0),this.emit(`pano.texture.abort`,createEvent(`pano.texture.abort`,{error:null,progress:0,meta:null,pano:{panoIndex:u.panoIndex,workCode:u.work.workCode}}))}}let _=`move-to-pano-`+l;this.pending.add(_);let v=this.modelScene.parameter,y;if(v.pano0&&v.pano0.map.name===g?y=v.pano0:v.pano1&&v.pano1.map.name===g&&(y=v.pano1),y){let n={panoId:l,effect:c,effectEasing:(s=t.effectEasing)==null?defaultEffectEase:s,panoPicture:{panoId:y.panoId,map:y.map,mapHistogram:y.mapHistogram,mapSize:y.mapSize,matrix:u.matrix.clone().premultiply(u.work.transform),zoom:1},position:u.position.clone().applyMatrix4(u.work.transform),fixCameraTransform:new three.Matrix4};n.panoPicture&&this.panoPictureObserverMap.set(n.panoPicture,u),this.pendingTextureTask=void 0,AnimationFrameLoop.shared.add(()=>{this.pending.delete(_),this.doMoveToPano(e,n,t)},!0,1);return}this.pendingTextureTask={panoId:l,hash:g,onLoad:n=>{var r,o;let s=n.body;if(this.destroyed)s.dispose();else{s.name=g;let n=Array.isArray(s.image)?s.image[0]:s.image,d=(r=n==null?void 0:n.width)==null?2048:r,f=u.images.histogram;f||(f=new Histogram().formPixels(getRgbaDataFromCubeTexture(this.renderer,s,!0,sharedHistogramRgbaData).data),u.images.histogram=f);let p={panoId:l,effect:c,effectEasing:(o=t.effectEasing)==null?defaultEffectEase:o,panoPicture:{panoId:l,map:s,mapSize:d,mapHistogram:new three.Vector4().fromArray(f.toArray()),matrix:u.matrix.clone().premultiply(u.work.transform),zoom:1},position:u.position.clone().applyMatrix4(u.work.transform),fixCameraTransform:new three.Matrix4};p.panoPicture&&this.panoPictureObserverMap.set(p.panoPicture,u),this.doMoveToPano(e,p,t)}},onError:n=>{let r=Object.assign(Object.assign(Object.assign({},e),{mode:this.mode}),clonePose(this.camera.pose));this.emit(`pano.error`,createEvent(`pano.error`,{error:n,userAction:this.userAction,options:t,prevPano:this.currentPano,progress:0,state:r})),this.emit(`pano.cancel`,createEvent(`pano.cancel`,{error:n,userAction:this.userAction,options:t,prevPano:this.currentPano,progress:0,state:r})),this.emit(`error`,n),t.moveCancelCallback&&t.moveCancelCallback()}};let b=this.panoMeshes.get(l);b&&b.tap&&b.tap(),this.textureLoader.loadCubeTexture(h,{imageURL:{transform:p,options:m},format:three.RGBFormat,viaAjax:!0,fetcher:getFetcher(this.fiveId,u.work)},void 0,void 0,t=>{var n,r;this.emit(`pano.texture.progress`,createEvent(`pano.texture.progress`,{error:null,progress:t,meta:null,pano:e})),((n=this.pendingTextureTask)==null?void 0:n.hash)===g&&((r=this.panoMeshes.get(l))==null||r.setProgress(t))},this.renderer).then(t=>{var n,r;this.pending.delete(_),((n=this.pendingTextureTask)==null?void 0:n.hash)===g?(this.pendingTextureTask.onLoad(t),this.pendingTextureTask=void 0,(r=this.panoMeshes.get(l))==null||r.setProgress(0)):t.body.dispose(),this.emit(`pano.texture.success`,createEvent(`pano.texture.success`,{error:null,progress:1,meta:t.meta,pano:e}))}).catch(t=>{var n,r;this.pending.delete(_),((n=this.pendingTextureTask)==null?void 0:n.hash)===g&&(this.pendingTextureTask.onError(t),this.pendingTextureTask=void 0,(r=this.panoMeshes.get(l))==null||r.setProgress(0)),this.emit(`pano.texture.error`,createEvent(`pano.texture.error`,{error:t,progress:0,meta:null,pano:e})),this.emit(`error`,t)}),this.emit(`pano.texture.load`,createEvent(`pano.texture.load`,{error:null,progress:0,meta:null,pano:e}))}initAnimation(){return this.destroyed?Promise.resolve():new Promise(t=>{let{duration:n,effect:r,userAction:o}=this.initial;this.userAction=o;let s=e.initAnimationEndState(this),c={workCode:s.workCode,panoIndex:s.panoIndex},l={modelAlpha:0},u={perspToOrtho:0},d=!1;this.moveToPano(c,{longitude:s.longitude,latitude:s.latitude,fov:s.fov,effect:r,duration:n,moveStartCallback:e=>{d=!0,this.perspToOrthoMotion.set(u,n).catch(noop),this.modelAlphaMotion.setKeyframes([{progress:0,value:Object.assign({},this.modelAlphaMotion.value)},{progress:.6,value:Object.assign({},this.modelAlphaMotion.value)},{progress:1,value:l}],n).catch(noop),this.emit(`initAnimation.start`,createEvent(`initAnimation.start`,{state:e,userAction:this.userAction}))},moveEndCallback:e=>{this.emit(`initAnimation.end`,createEvent(`initAnimation.end`,{state:e,userAction:this.userAction})),this.initAnimationed=!0,t()},moveCancelCallback:()=>{let e=Object.assign(Object.assign(Object.assign({},c),{mode:this.mode}),clonePose(this.camera.pose));d===!1&&this.emit(`initAnimation.start`,createEvent(`initAnimation.start`,{state:e,userAction:this.userAction})),this.emit(`initAnimation.end`,createEvent(`initAnimation.end`,{state:e,userAction:this.userAction})),this.initAnimationed=!0,t()}},o)})}panoResourceFromLocationMotionKeyframe(e){return this.panoResources[e.key]}locationMotionKeyframesLength(e){let t=0;for(let n=1;n<e.length;n++){let r=this.panoResourceFromLocationMotionKeyframe(e[n-1]).position,o=this.panoResourceFromLocationMotionKeyframe(e[n]).position,s=r.distanceTo(o)*(e[n].value.count-e[n-1].value.count);t+=s}return t}doMoveToPano(e,t,n={}){var r,o,s,c,l,u,d,f,p,m,h;let g=now(),_=createUuid();this.panoResources[_]=t;let v=1,y,b,S;if(this.locationMotion.ended){let[e,n]=this.locationMotion.getKeyFrameSegment(g),o=this.locationMotion.value,s=((r=this.panoResourceFromLocationMotionKeyframe(n))==null?this.camera:r).position,c=t.position;y=Math.max(s.distanceTo(c),1),b=[{key:n.key,progress:0,value:Object.assign(Object.assign({},o),{count:0})},{key:_,progress:1,value:{distance:0,count:1}}],S=0}else{let[e,n]=this.locationMotion.getKeyFrameSegment(g),r=this.locationMotion.value,o=this.panoResourceFromLocationMotionKeyframe(e).position,s=this.panoResourceFromLocationMotionKeyframe(n).position,c=t.position,l=n.value.count-r.count,u=Math.max(o.distanceTo(s),1)*l;y=u+Math.max(s.distanceTo(c),1),b=[{key:e.key,progress:0,value:Object.assign({},r)},{key:n.key,progress:u/y,value:n.value},{key:_,progress:1,value:{count:n.value.count+1,distance:0}}];let d=this.locationMotionKeyframesLength(this.locationMotion.keyframes),f=this.locationMotionKeyframesLength(b);S=d===0||d===0?0:this.locationMotion.getProgressVelocity(g)*d/f}let C=t.effect===`instant`?0:this.calculateMovingDuration(n.duration,t.effect===`fly`||t.effect===`model`?y:0),w={longitude:n.longitude,latitude:n.latitude,fov:n.fov},T=Object.assign(Object.assign({},e),{mode:this.mode,longitude:(o=w.longitude)==null?this.camera.pose.longitude:o,latitude:(s=w.latitude)==null?this.camera.pose.latitude:s,fov:(c=w.fov)==null?this.camera.pose.fov:c,offset:t.position.clone(),distance:this.camera.pose.distance}),E=this.currentPano;if(this.emit(`pano.moveTo`,createEvent(`pano.moveTo`,{options:n,prevPano:E,progress:0,state:T,userAction:this.userAction,error:null})),n.moveStartCallback&&n.moveStartCallback(T),this.videoTexture&&this.videoTexture.image instanceof HTMLVideoElement&&this.videoTexture.image.getAttribute(`src`)&&(this.videoTexture.image.pause(),this.videoTexture.image.removeAttribute(`uuid`),this.videoTexture.image.removeAttribute(`src`),this.videoTexture.image.oncanplay=noop,this.videoTexture.needsUpdate=!0),this.panoVideo.setMaterial(null),t.effect===`fly`||t.effect===`model`)this.cameraMotion.set(w,C).catch(noop);else{let e=coordinatesToVector({longitude:this.cameraMotion.value.longitude,latitude:this.cameraMotion.value.latitude}),n=coordinatesToVector({longitude:(l=w.longitude)==null?this.cameraMotion.value.longitude:l,latitude:(u=w.latitude)==null?this.cameraMotion.value.latitude:u}),r=new three.Object3D;r.lookAt(e);let o=new three.Matrix4().makeRotationFromQuaternion(r.quaternion);r.lookAt(n);let s=new three.Matrix4().makeRotationFromQuaternion(r.quaternion),c=new three.Matrix4().getInverse(o).premultiply(s),g=this.cameraMotion.value.fov,_=(d=w.fov)==null?this.cameraMotion.value.fov:d,v=1;t.effect===`zoomin`?v=1.5:t.effect===`zoomout`&&(v=.4);let y=clamp$1(_*v,1,170);for(let e=0;e<b.length-1;e++){let t=b[e].key;if(t){let e=this.panoResources[t];e&&(e.fixCameraTransform.copy(c),e.panoPicture&&(e.panoPicture.zoom=Math.tan(y/2/180*Math.PI)/Math.tan(g/2/180*Math.PI)))}}this.cameraMotion.setKeyframes([{progress:0,value:{longitude:this.cameraMotion.value.longitude,latitude:this.cameraMotion.value.latitude,fov:this.cameraMotion.value.fov}},{progress:0,value:{longitude:(f=w.longitude)==null?this.cameraMotion.value.longitude:f,latitude:(p=w.latitude)==null?this.cameraMotion.value.latitude:p,fov:y}},{progress:1,value:{longitude:(m=w.longitude)==null?this.cameraMotion.value.longitude:m,latitude:(h=w.latitude)==null?this.cameraMotion.value.latitude:h,fov:_}}],C).catch(noop)}this.locationMotion.setKeyframes(b,C,S).then(()=>{for(let e of this.modelScene.children)e instanceof Model&&e.show();let t=Object.assign(Object.assign({},e),{mode:this.mode,longitude:this.camera.pose.longitude,latitude:this.camera.pose.latitude,fov:this.camera.pose.fov,offset:this.camera.pose.offset.clone(),distance:this.camera.pose.distance});this.emit(`pano.arrived`,createEvent(`pano.arrived`,{options:n,prevPano:E,progress:1,state:t,userAction:this.userAction,error:null})),n.moveEndCallback&&n.moveEndCallback(t);let r=this.works.getObserver(e);if(r&&r.images.video&&this.videoTexture&&this.videoTexture.image instanceof HTMLVideoElement){let e={map:this.videoTexture,size:r.images.video.size.clone(),matrix:r.images.video.matrix.clone(),panoMatrix:r.matrix.clone().premultiply(r.work.transform),alpha:1},t=createUuid(),n=this.videoTexture.image;n.setAttribute(`uuid`,t),n.oncanplay=noop,n.ontimeupdate=noop,canplayVideo().then(o=>{o&&r.images.video&&n.getAttribute(`uuid`)===t&&(n.oncanplay=()=>{n.oncanplay=noop,n.play()},n.ontimeupdate=()=>{n.currentTime>.5&&(n.ontimeupdate=noop,this.panoVideo.setMaterial(e))},n.src=r.images.video.source)}).catch((()=>{n.removeAttribute(`uuid`)}))}else{let e=this.videoTexture.image;e.removeAttribute(`uuid`),e.oncanplay=noop,e.ontimeupdate=noop}},()=>{this.emit(`pano.cancel`,createEvent(`pano.cancel`,{options:n,prevPano:E,progress:0,state:T,userAction:this.userAction,error:null})),n.moveCancelCallback&&n.moveCancelCallback()})}getForwardObserverOrNot(e,t){let n=this.works.getObserver(this.currentPano);if(!n)return null;let r=t==null?new three.Raycaster(e.position.clone(),e.getWorldDirection(new three.Vector3)):t;r.params.Points={threshold:.1},r.firstHitOnly=!0,r.floorIndex=-1;let o=n.standingPosition.clone().applyMatrix4(n.work.transform);if(n.position.clone().applyMatrix4(n.work.transform).distanceTo(r.ray.origin)>1){let e=new three.Raycaster(r.ray.origin,new three.Vector3(0,-1,0));e.firstHitOnly=r.firstHitOnly,e.floorIndex=r.floorIndex;let[t]=this.modelScene.intersectRaycaster(e);t&&t.distance<=2?o.copy(t.point):o.copy(r.ray.origin).add(new three.Vector3(0,-1.5,0))}let[s]=this.modelScene.intersectRaycaster(r),c=(s?s.point:r.ray.origin.clone().add(r.ray.direction.clone().normalize().multiplyScalar(3))).clone().sub(o).normalize();if(c.length()===0)return null;let l=n.work.observers,u=n.accessibleNodes.filter(t=>{if(t===this.currentPano.panoIndex&&n.work.workCode===this.currentPano.workCode)return!1;let r=l[t];if(!r)return!1;let o=r.standingPosition.clone().applyMatrix4(r.work.transform).project(e);return Math.abs(o.z)>1||Math.abs(o.x)>1||Math.abs(o.y)>1?!1:r.loadable||r.active}),d=new Map,f=u.slice().sort((e,t)=>{let n=l[e],r=d.get(n);r===void 0&&(r=scratchVector3$3.copy(n.standingPosition).applyMatrix4(n.work.transform).distanceTo(o),d.set(n,r));let s=l[t],c=d.get(s);return c===void 0&&(c=scratchVector3$3.copy(s.standingPosition).applyMatrix4(s.work.transform).distanceTo(o),d.set(s,c)),r-c});d.clear();for(let e of[Math.PI/8,Math.PI/6,Math.PI/4,Math.PI/3])for(let t of f){let n=l[t];if(n){let t=scratchVector3$3.copy(n.standingPosition).applyMatrix4(n.work.transform).sub(o);if(t&&t.length()!==0&&c.angleTo(t)<e)return n}}let p=null;if(t){let n=t.ray.intersectBox(this.modelScene.boundingBox,scratchVector3$3);n&&(n.project(e),Math.abs(n.z)<=1&&(p=n.clone()))}else p=new three.Vector3(0,0,0);if(p){let t=.4,r=n.accessibleNodes.filter(t=>{if(t===this.currentPano.panoIndex&&n.work.workCode===this.currentPano.workCode)return!1;let r=l[t];if(!r)return!1;let o=r.position.clone().applyMatrix4(r.work.transform).project(e);return Math.abs(o.z)>1||Math.abs(o.x)>1||Math.abs(o.y)>1?!1:r.loadable||r.active}),o=new Map,s=r.slice().sort((t,n)=>{let r=l[t],s=o.get(r);s===void 0&&(s=scratchVector3$3.copy(r.position).applyMatrix4(r.work.transform).distanceTo(e.position),o.set(r,s));let c=l[n],u=o.get(c);return u===void 0&&(u=scratchVector3$3.copy(c.position).applyMatrix4(c.work.transform).distanceTo(e.position),o.set(c,u)),s-u});o.clear();for(let t of s){let n=l[t];if(n){let t=scratchVector3$3.copy(n.position).applyMatrix4(n.work.transform);if(t.project(e),Math.abs(t.z)>1)continue;if(Math.pow(p.x-t.x,2)+Math.pow(p.y-t.y,2)<Math.pow(.4,2))return n}}}return null}onTapGesture(e){var t;if(this.userAction=e.userAction,this.stopMomentumMovement(),!this.initAnimationed)return;let n=e.center.raycaster;n.floorIndex=-1;let r=this.camera.getDirection(new three.Vector3).setY(0),o=null,s=this.works.getObserver(this.currentPano);if(!s)return;let c=s.work.observers,l=s.accessibleNodes.filter(e=>{if(e===this.currentPano.panoIndex&&s.work.workCode===this.currentPano.workCode)return!1;let t=c[e];return!t||scratchVector3$3.copy(t.position).applyMatrix4(t.work.transform).distanceTo(this.camera.position)>this.maxAccessibleDistance?!1:t.loadable||t.active}),[u]=this.modelScene.intersectRaycaster(n);if(u){let[e,n]=arrayMin(l,e=>{let t=c[e];return t?scratchVector3$3.copy(t.standingPosition).applyMatrix4(t.work.transform).distanceTo(u.point):1/0},!0);typeof e==`number`&&n<this.panoTapTriggerRadius&&(o=(t=c[e])==null?null:t)}if(o||(o=this.getForwardObserverOrNot(this.camera,n)),o&&o.panoId===panoStringify(this.currentPano)&&(o=null),o&&!this.locationMotion.ended){for(let e of this.locationMotion.keyframes)if(this.panoResourceFromLocationMotionKeyframe(e).panoId===o.panoId){o=null;break}}if(!o)this.emit(`gesture.tap`,e),e.defaultPrevented||this.locationMotion.ended===!0&&this.cameraBounce();else{let t={},n=Math.PI/6,c=Math.PI/12,l=o.position.clone().applyMatrix4(o.work.transform).setY(0).sub(s.position.clone().applyMatrix4(o.work.transform).setY(0)).normalize(),u=[],d=[],f=[],p=o.work.observers;for(let e of o.accessibleNodes){if(o.panoIndex===e||e===this.currentPano.panoIndex&&o.work.workCode===this.currentPano.workCode)continue;let t=p[e];if(!t)continue;let r=t.position.clone().applyMatrix4(t.work.transform).sub(o.position.clone().applyMatrix4(o.work.transform)).setY(0).normalize();l.angleTo(r)<n&&f.push(r)}let[m]=(f.length>0?f:[...u,...d]).slice().sort((e,t)=>e.angleTo(l)-t.angleTo(l));if(m&&m.angleTo(r)>c&&(t.longitude=Math.atan2(-m.x,-m.z)),this.cameraMotion.value.latitude<-Math.PI/4){let n=e.state.fov;t.latitude=clamp$1(0,clamp$1(typeof this.minLatitude==`function`?this.minLatitude(n):this.minLatitude,-Math.PI/2,Math.PI/2),clamp$1(typeof this.maxLatitude==`function`?this.maxLatitude(n):this.maxLatitude,-Math.PI/2,Math.PI/2))}let h=Object.assign({},e.state);if(h.workCode=o.work.workCode,h.panoIndex=o.panoIndex,t.longitude!==void 0&&(h.longitude=t.longitude),t.latitude!==void 0&&(h.latitude=t.latitude),t.fov!==void 0&&(h.fov=t.fov),h.distance=0,h.offset=o.position.clone(),e.state=h,this.emit(`gesture.tap`,e),!e.defaultPrevented){if(this.emit(`pano.select`,createEvent(`pano.select`,{prevPano:this.currentPano,state:h,userAction:e.userAction,options:t,progress:0,error:null})),o&&!o.active){let e=panoStringify({panoIndex:o.panoIndex,workCode:o.work.workCode}),t=this.panoMeshes.get(e);t&&(t.setDisabled(!1),t.setLoading(!0))}o&&o.active&&this.emit(`pano.request`,createEvent(`pano.request`,{userAction:e.userAction,prevPano:this.currentPano,progress:0,state:h,options:t,error:null}))}}}},DEG_TO_RAD=Math.PI/180,RAD_TO_DEG=180/Math.PI,MIN_TIMESTEP=.001,MAX_TIMESTEP=1,isIOS=(()=>{let e=typeof navigator<`u`&&/iPad|iPhone|iPod/.test(navigator.platform);return()=>e})(),isSafari=(()=>{let e=typeof navigator<`u`&&/^((?!chrome|android).)*safari/i.test(navigator.userAgent);return()=>e})(),isFirefoxAndroid=(()=>{let e=typeof navigator<`u`&&navigator.userAgent.indexOf(`Firefox`)!==-1&&navigator.userAgent.indexOf(`Android`)!==-1;return()=>e})(),getChromeVersion=(()=>{let e=typeof navigator<`u`?navigator.userAgent.match(/.*Chrome\/([0-9]+)/):null,t=e?parseInt(e[1],10):null;return()=>t})(),isChromeWithoutDeviceMotion=(()=>{let e=!1;if(getChromeVersion()===65){let t=typeof navigator<`u`?navigator.userAgent.match(/.*Chrome\/([0-9\.]*)/):null;if(t){let[n,r,o,s]=t[1].split(`.`);e=parseInt(o,10)===3325&&parseInt(s,10)<148}}return()=>e})(),isSafariWithoutDeviceMotion=(()=>{let e=isIOS()&&isSafari()&&typeof navigator<`u`&&navigator.userAgent.indexOf(`13_4`)!==-1;return()=>e})(),isR7=(()=>{let e=typeof navigator<`u`&&navigator.userAgent.indexOf(`R7 Build`)!==-1;return()=>e})();function isLandscapeMode(){let e=typeof window<`u`&&(window.orientation==90||window.orientation==-90);return isR7()?!e:e}function isTimestampDeltaValid(e){return!(isNaN(e)||e<=MIN_TIMESTEP||e>MAX_TIMESTEP)}function getQuaternionAngle(e){return e.w>1?0:2*Math.acos(e.w)}var warnOnce=(()=>{let e={};return(t,n)=>{e[t]===void 0&&(console.warn(`cardboard: `+n),e[t]=!0)}})();function getOriginFromUrl(e){let t,n=e.indexOf(`://`);t=n===-1?0:n+3;let r=e.indexOf(`/`,t);return r===-1&&(r=e.length),e.substring(0,r)}function isInsideCrossOriginIFrame(){if(typeof window>`u`||typeof document>`u`)return!1;let e=window.self!==window.top,t=getOriginFromUrl(document.referrer),n=getOriginFromUrl(window.location.href);return e&&t!==n}var updateEyeViewMatrices=(()=>{function e(e,t,n){let r=t?t[0]:0,o=t?t[1]:0,s=t?t[2]:0,c=t?t[3]:1,l=r+r,u=o+o,d=s+s,f=r*l,p=r*u,m=r*d,h=o*u,g=o*d,_=s*d,v=c*l,y=c*u,b=c*d;return e[0]=1-(h+_),e[1]=p+b,e[2]=m-y,e[3]=0,e[4]=p-b,e[5]=1-(f+_),e[6]=g+v,e[7]=0,e[8]=m+y,e[9]=g-v,e[10]=1-(f+h),e[11]=0,e[12]=n?n[0]:0,e[13]=n?n[1]:0,e[14]=n?n[2]:0,e[15]=1,e}function t(e,t,n){let r=n[0],o=n[1],s=n[2],c,l,u,d,f,p,m,h,g,_,v,y;return t===e?(e[12]=t[0]*r+t[4]*o+t[8]*s+t[12],e[13]=t[1]*r+t[5]*o+t[9]*s+t[13],e[14]=t[2]*r+t[6]*o+t[10]*s+t[14],e[15]=t[3]*r+t[7]*o+t[11]*s+t[15]):(c=t[0],l=t[1],u=t[2],d=t[3],f=t[4],p=t[5],m=t[6],h=t[7],g=t[8],_=t[9],v=t[10],y=t[11],e[0]=c,e[1]=l,e[2]=u,e[3]=d,e[4]=f,e[5]=p,e[6]=m,e[7]=h,e[8]=g,e[9]=_,e[10]=v,e[11]=y,e[12]=c*r+f*o+g*s+t[12],e[13]=l*r+p*o+_*s+t[13],e[14]=u*r+m*o+v*s+t[14],e[15]=d*r+h*o+y*s+t[15]),e}function n(e,t){let n=t[0],r=t[1],o=t[2],s=t[3],c=t[4],l=t[5],u=t[6],d=t[7],f=t[8],p=t[9],m=t[10],h=t[11],g=t[12],_=t[13],v=t[14],y=t[15],b=n*l-r*c,S=n*u-o*c,C=n*d-s*c,w=r*u-o*l,T=r*d-s*l,E=o*d-s*u,D=f*_-p*g,O=f*v-m*g,k=f*y-h*g,A=p*v-m*_,j=p*y-h*_,M=m*y-h*v,N=b*M-S*j+C*A+w*k-T*O+E*D;return N?(N=1/N,e[0]=(l*M-u*j+d*A)*N,e[1]=(o*j-r*M-s*A)*N,e[2]=(_*E-v*T+y*w)*N,e[3]=(m*T-p*E-h*w)*N,e[4]=(u*k-c*M-d*O)*N,e[5]=(n*M-o*k+s*O)*N,e[6]=(v*C-g*E-y*S)*N,e[7]=(f*E-m*C+h*S)*N,e[8]=(c*j-l*k+d*D)*N,e[9]=(r*k-n*j-s*D)*N,e[10]=(g*T-_*C+y*b)*N,e[11]=(p*C-f*T-h*b)*N,e[12]=(l*O-c*A-u*D)*N,e[13]=(n*A-r*O+o*D)*N,e[14]=(_*S-g*w-v*b)*N,e[15]=(f*w-p*S+m*b)*N,e):null}return(r,o,s)=>{e(r,o),s&&t(r,r,s),n(r,r)}})(),SensorSample=class{constructor(e=new three.Vector3,t=0){this.sample=e,this.timestampS=t}set(e,t){this.sample=e,this.timestampS=t}copy(e){this.set(e.sample,e.timestampS)}},ComplementaryFilter=class{constructor(e,t){this.kFilter=e,this.isDebug=t,this.currentAccelMeasurement=new SensorSample,this.currentGyroMeasurement=new SensorSample,this.previousGyroMeasurement=new SensorSample,isIOS()?this.filterQ=new three.Quaternion(-1,0,0,1):this.filterQ=new three.Quaternion(1,0,0,1),this.previousFilterQ=new three.Quaternion,this.previousFilterQ.copy(this.filterQ),this.accelQ=new three.Quaternion,this.isOrientationInitialized=!1,this.estimatedGravity=new three.Vector3,this.measuredGravity=new three.Vector3,this.gyroIntegralQ=new three.Quaternion}addAccelMeasurement(e,t){this.currentAccelMeasurement.set(e,t)}addGyroMeasurement(e,t){this.currentGyroMeasurement.set(e,t),isTimestampDeltaValid(t-this.previousGyroMeasurement.timestampS)&&this.run_(),this.previousGyroMeasurement.copy(this.currentGyroMeasurement)}getOrientation(){return this.filterQ}run_(){if(!this.isOrientationInitialized){this.accelQ=this.accelToQuaternion_(this.currentAccelMeasurement.sample),this.previousFilterQ.copy(this.accelQ),this.isOrientationInitialized=!0;return}let e=this.currentGyroMeasurement.timestampS-this.previousGyroMeasurement.timestampS,t=this.gyroToQuaternionDelta_(this.currentGyroMeasurement.sample,e);this.gyroIntegralQ.multiply(t),this.filterQ.copy(this.previousFilterQ),this.filterQ.multiply(t);let n=new three.Quaternion;n.copy(this.filterQ),n.inverse(),this.estimatedGravity.set(0,0,-1),this.estimatedGravity.applyQuaternion(n),this.estimatedGravity.normalize(),this.measuredGravity.copy(this.currentAccelMeasurement.sample),this.measuredGravity.normalize();let r=new three.Quaternion;r.setFromUnitVectors(this.estimatedGravity,this.measuredGravity),r.inverse(),this.isDebug&&console.log(`Delta: %d deg, G_est: (%s, %s, %s), G_meas: (%s, %s, %s)`,RAD_TO_DEG*getQuaternionAngle(r),this.estimatedGravity.x.toFixed(1),this.estimatedGravity.y.toFixed(1),this.estimatedGravity.z.toFixed(1),this.measuredGravity.x.toFixed(1),this.measuredGravity.y.toFixed(1),this.measuredGravity.z.toFixed(1));let o=new three.Quaternion;o.copy(this.filterQ),o.multiply(r),this.filterQ.slerp(o,1-this.kFilter),this.previousFilterQ.copy(this.filterQ)}accelToQuaternion_(e){let t=new three.Vector3;t.copy(e),t.normalize();let n=new three.Quaternion;return n.setFromUnitVectors(new three.Vector3(0,0,-1),t),n.inverse(),n}gyroToQuaternionDelta_(e,t){let n=new three.Quaternion,r=new three.Vector3;return r.copy(e),r.normalize(),n.setFromAxisAngle(r,e.length()*t),n}},PosePredictor=class{constructor(e,t){this.predictionTimeS=e,this.isDebug=t,this.previousQ=new three.Quaternion,this.previousTimestampS=null,this.deltaQ=new three.Quaternion,this.outQ=new three.Quaternion}getPrediction(e,t,n){if(!this.previousTimestampS)return this.previousQ.copy(e),this.previousTimestampS=n,e;let r=new three.Vector3;r.copy(t),r.normalize();let o=t.length();if(o<DEG_TO_RAD*20)return this.isDebug&&console.log(`Moving slowly, at %s deg/s: no prediction`,(RAD_TO_DEG*o).toFixed(1)),this.outQ.copy(e),this.previousQ.copy(e),this.outQ;let s=o*this.predictionTimeS;return this.deltaQ.setFromAxisAngle(r,s),this.outQ.copy(this.previousQ),this.outQ.multiply(this.deltaQ),this.previousQ.copy(e),this.previousTimestampS=n,this.outQ}},Distortion=class{constructor(e){this.coefficients=e}distortInverse(e){let t=0,n=1,r=e-this.distort(t);for(;Math.abs(n-t)>1e-4;){let o=e-this.distort(n),s=n-o*((n-t)/(o-r));t=n,n=s,r=o}return n}distort(e){let t=e*e,n=0;for(let e=0;e<this.coefficients.length;e++)n=t*(n+this.coefficients[e]);return(n+1)*e}},Pose=class{constructor(){this.angularAcceleration=null,this.angularVelocity=null,this.linearAcceleration=null,this.linearVelocity=null,this.orientation=null,this.position=null}},FieldOfView=class{constructor(){this.leftDegrees=0,this.rightDegrees=0,this.upDegrees=0,this.downDegrees=0}},Sensor=class{constructor(e,t,n,r){this.viewer={id:`CardboardV1`,label:`Cardboard I/O 2014`,fov:40,interLensDistance:.06,baselineLensDistance:.035,screenLensDistance:.042,distortionCoefficients:[.441,.156],inverseCoefficients:[-.4410035,.42756155,-.4804439,.5460139,-.58821183,.5733938,-.48303202,.33299083,-.17573841,.0651772,-.01488963,.001559834]},this.device={widthMeters:.11,heightMeters:.062,bevelMeters:.004},this.depthNear=.01,this.depthFar=1e4,this.yawOnly=n,this.accelerometer=new three.Vector3,this.gyroscope=new three.Vector3,this.filter=new ComplementaryFilter(e,r),this.posePredictor=new PosePredictor(t,r),this.isFirefoxAndroid=isFirefoxAndroid(),this.isIOS=isIOS();let o=getChromeVersion();this.isDeviceMotionInRadians=!this.isIOS&&o!==null&&o<66,this.isWithoutDeviceMotion=isChromeWithoutDeviceMotion()||isSafariWithoutDeviceMotion(),this.filterToWorldQ=new three.Quaternion,isIOS()?this.filterToWorldQ.setFromAxisAngle(new three.Vector3(1,0,0),Math.PI/2):this.filterToWorldQ.setFromAxisAngle(new three.Vector3(1,0,0),-Math.PI/2),this.inverseWorldToScreenQ=new three.Quaternion,this.worldToScreenQ=new three.Quaternion,this.originalPoseAdjustQ=new three.Quaternion;let s=typeof window<`u`?-window.orientation*Math.PI/180:0;this.originalPoseAdjustQ.setFromAxisAngle(new three.Vector3(0,0,1),s),this.setScreenTransform_(),isLandscapeMode()&&this.filterToWorldQ.multiply(this.inverseWorldToScreenQ),this.resetQ=new three.Quaternion,this.orientationOut_=new Float32Array(4),this.previousTimestampS=Date.now()}getPosition(){return null}getOrientation(){let e;if(this.isWithoutDeviceMotion&&this._deviceOrientationQ){this.deviceOrientationFixQ=this.deviceOrientationFixQ||(function(){let e=new three.Quaternion().setFromAxisAngle(new three.Vector3(0,0,-1),0),t=new three.Quaternion;return typeof window<`u`&&window.orientation===-90?t.setFromAxisAngle(new three.Vector3(0,1,0),Math.PI/-2):t.setFromAxisAngle(new three.Vector3(0,1,0),Math.PI/2),e.multiply(t)})(),this.deviceOrientationFilterToWorldQ=this.deviceOrientationFilterToWorldQ||(function(){let e=new three.Quaternion;return e.setFromAxisAngle(new three.Vector3(1,0,0),-Math.PI/2),e})(),e=this._deviceOrientationQ;let t=new three.Quaternion;return t.copy(e),t.multiply(this.deviceOrientationFilterToWorldQ),t.multiply(this.resetQ),t.multiply(this.worldToScreenQ),t.multiplyQuaternions(this.deviceOrientationFixQ,t),this.yawOnly&&(t.x=0,t.z=0,t.normalize()),this.orientationOut_[0]=t.x,this.orientationOut_[1]=t.y,this.orientationOut_[2]=t.z,this.orientationOut_[3]=t.w,this.orientationOut_}else{let t=this.filter.getOrientation();e=this.posePredictor.getPrediction(t,this.gyroscope,this.previousTimestampS)}let t=new three.Quaternion;return t.copy(this.filterToWorldQ),t.multiply(this.resetQ),t.multiply(e),t.multiply(this.worldToScreenQ),this.yawOnly&&(t.x=0,t.z=0,t.normalize()),this.orientationOut_[0]=t.x,this.orientationOut_[1]=t.y,this.orientationOut_[2]=t.z,this.orientationOut_[3]=t.w,this.orientationOut_}getPose(){let e=new Pose;return e.orientation=this.getOrientation(),e}resetPose(){this.resetQ.copy(this.filter.getOrientation()),this.resetQ.x=0,this.resetQ.y=0,this.resetQ.z*=-1,this.resetQ.normalize(),isLandscapeMode()&&this.resetQ.multiply(this.inverseWorldToScreenQ),this.resetQ.multiply(this.originalPoseAdjustQ)}getFrameData(e){let t=this.getOrientation(),n=this.getEyeOffset(),r=this.getEyeProjectionMatrix();return e.pose.angularAcceleration=null,e.pose.angularVelocity=null,e.pose.linearAcceleration=null,e.pose.linearVelocity=null,e.pose.orientation=t,e.pose.position=null,e.timestamp=this.previousTimestampS,e.leftProjectionMatrix.set(r.left),e.rightProjectionMatrix.set(r.right),updateEyeViewMatrices(e.leftViewMatrix,t,n.left),updateEyeViewMatrices(e.rightViewMatrix,t,n.right),e}start(){if(typeof window>`u`)return()=>{};let e=this.onDeviceMotion_.bind(this),t=this.onOrientationChange_.bind(this),n=this.onMessage_.bind(this),r=this.onDeviceOrientation_.bind(this);return isIOS()&&isInsideCrossOriginIFrame()&&window.addEventListener(`message`,n),window.addEventListener(`orientationchange`,t),this.isWithoutDeviceMotion?window.addEventListener(`deviceorientation`,r):window.addEventListener(`devicemotion`,e),()=>{window.removeEventListener(`devicemotion`,e),window.removeEventListener(`deviceorientation`,t),window.removeEventListener(`orientationchange`,t),window.removeEventListener(`message`,n)}}getEyeOffset(){return{left:[-this.viewer.interLensDistance*.5,0,0],right:[this.viewer.interLensDistance*.5,0,0]}}getEyeProjectionMatrix(){let e=this.getEyeFieldOfView(),t=this.depthNear,n=this.depthFar,r={left:[],right:[]};{let o=e.left.upDegrees*DEG_TO_RAD,s=e.left.downDegrees*DEG_TO_RAD,c=e.left.leftDegrees*DEG_TO_RAD,l=e.left.rightDegrees*DEG_TO_RAD,u=2/(c+l),d=2/(o+s);r.left[0]=u,r.left[1]=0,r.left[2]=0,r.left[3]=0,r.left[4]=0,r.left[5]=d,r.left[6]=0,r.left[7]=0,r.left[8]=-((c-l)*u*.5),r.left[9]=(o-s)*d*.5,r.left[10]=n/(t-n),r.left[11]=-1,r.left[12]=0,r.left[13]=0,r.left[14]=n*t/(t-n),r.left[15]=0}{let o=e.right.upDegrees*DEG_TO_RAD,s=e.right.downDegrees*DEG_TO_RAD,c=e.right.leftDegrees*DEG_TO_RAD,l=e.right.rightDegrees*DEG_TO_RAD,u=2/(c+l),d=2/(o+s);r.right[0]=u,r.right[1]=0,r.right[2]=0,r.right[3]=0,r.right[4]=0,r.right[5]=d,r.right[6]=0,r.right[7]=0,r.right[8]=-((c-l)*u*.5),r.right[9]=(o-s)*d*.5,r.right[10]=n/(t-n),r.right[11]=-1,r.right[12]=0,r.right[13]=0,r.right[14]=n*t/(t-n),r.right[15]=0}return r}getEyeFieldOfView(){let e=this.viewer,t=this.device,n=new Distortion(e.distortionCoefficients),r=e.screenLensDistance,o=(t.widthMeters-e.interLensDistance)/2,s=e.interLensDistance/2,c=e.baselineLensDistance-t.bevelMeters,l=t.heightMeters-c,u=RAD_TO_DEG*Math.atan(n.distort(o/r)),d=RAD_TO_DEG*Math.atan(n.distort(s/r)),f=RAD_TO_DEG*Math.atan(n.distort(c/r)),p=RAD_TO_DEG*Math.atan(n.distort(l/r)),m=new FieldOfView,h=new FieldOfView;return m.leftDegrees=Math.min(u,e.fov),m.rightDegrees=Math.min(d,e.fov),m.downDegrees=Math.min(f,e.fov),m.upDegrees=Math.min(p,e.fov),h.leftDegrees=m.rightDegrees,h.rightDegrees=m.leftDegrees,h.upDegrees=m.upDegrees,h.downDegrees=m.downDegrees,{left:m,right:h}}onDeviceOrientation_(e){this._deviceOrientationQ=this._deviceOrientationQ||new three.Quaternion;let{alpha:t,beta:n,gamma:r}=e;t=(t||0)*Math.PI/180,n=(n||0)*Math.PI/180,r=(r||0)*Math.PI/180,this._deviceOrientationQ.setFromEuler(new three.Euler(t,n,-r,`YXZ`))}onDeviceMotion_(e){this.updateDeviceMotion_(e)}updateDeviceMotion_(e){let t=e.accelerationIncludingGravity,n=e.rotationRate,r=e.timeStamp/1e3,o=r-this.previousTimestampS;if(o<0){warnOnce(`fusion-pose-sensor:invalid:non-monotonic`,`Invalid timestamps detected: non-monotonic timestamp from devicemotion`),this.previousTimestampS=r;return}else if(o<=MIN_TIMESTEP||o>MAX_TIMESTEP){warnOnce(`fusion-pose-sensor:invalid:outside-threshold`,`Invalid timestamps detected: Timestamp from devicemotion outside expected range.`),this.previousTimestampS=r;return}t&&(this.accelerometer.set(-t.x,-t.y,-t.z),n&&(isR7()?this.gyroscope.set(-n.beta,n.alpha,n.gamma):this.gyroscope.set(n.alpha,n.beta,n.gamma),this.isDeviceMotionInRadians||this.gyroscope.multiplyScalar(Math.PI/180),this.filter.addGyroMeasurement(this.gyroscope,r)),this.filter.addAccelMeasurement(this.accelerometer,r)),this.previousTimestampS=r}onOrientationChange_(){this.setScreenTransform_()}onMessage_(e){let t=e.data;!t||!t.type||t.type.toLowerCase()===`devicemotion`&&this.updateDeviceMotion_(t.deviceMotionEvent)}setScreenTransform_(){switch(this.worldToScreenQ.set(0,0,0,1),typeof window<`u`?window.orientation:0){case 0:break;case 90:this.worldToScreenQ.setFromAxisAngle(new three.Vector3(0,0,1),-Math.PI/2);break;case-90:this.worldToScreenQ.setFromAxisAngle(new three.Vector3(0,0,1),Math.PI/2);break;case 180:break}this.inverseWorldToScreenQ.copy(this.worldToScreenQ),this.inverseWorldToScreenQ.inverse()}},defaultLeftBounds=[0,0,.5,1],defaultRightBounds=[.5,0,.5,1],Cardboard=class{constructor(e){this.renderer=e,this.sensor=new Sensor(.98,.04,!1,!1),this.scale=1,this.cameraL=new three.PerspectiveCamera,this.cameraR=new three.PerspectiveCamera;let t=this.sensor.start();this.dispose=()=>{let e=this.renderer.getSize(new three.Vector2);this.renderer.setScissor(0,0,e.width,e.height),this.renderer.setViewport(0,0,e.width,e.height),this.renderer.setScissorTest(!1),t()}}render(e,t){let n=this.renderer.getSize(new three.Vector2);if(n.width>n.height){var r=e.autoUpdate;r&&(e.updateMatrixWorld(),e.autoUpdate=!1);let o={x:Math.round(n.width*defaultLeftBounds[0]),y:Math.round(n.height*defaultLeftBounds[1]),width:Math.round(n.width*defaultLeftBounds[2]),height:Math.round(n.height*defaultLeftBounds[3])},s={x:Math.round(n.width*defaultRightBounds[0]),y:Math.round(n.height*defaultRightBounds[1]),width:Math.round(n.width*defaultRightBounds[2]),height:Math.round(n.height*defaultRightBounds[3])};this.renderer.setScissorTest(!0),this.renderer.autoClear&&this.renderer.clear(),t.parent===null&&t.updateMatrixWorld(),t.matrixWorld.decompose(this.cameraL.position,this.cameraL.quaternion,this.cameraL.scale),t.matrixWorld.decompose(this.cameraR.position,this.cameraR.quaternion,this.cameraR.scale);let c=this.sensor.getEyeOffset();this.cameraL.translateOnAxis(new three.Vector3().fromArray(c.left),this.scale),this.cameraR.translateOnAxis(new three.Vector3().fromArray(c.right),this.scale);let l=this.sensor.getEyeProjectionMatrix();this.cameraL.projectionMatrix.elements=l.left.slice(),this.cameraR.projectionMatrix.elements=l.right.slice(),this.renderer.setViewport(o.x,o.y,o.width,o.height),this.renderer.setScissor(o.x,o.y,o.width,o.height),this.renderer.render(e,this.cameraL),this.renderer.setViewport(s.x,s.y,s.width,s.height),this.renderer.setScissor(s.x,s.y,s.width,s.height),this.renderer.render(e,this.cameraR),this.renderer.setViewport(0,0,n.width,n.height),this.renderer.setScissor(0,0,n.width,n.height),this.renderer.setScissorTest(!1),r&&(e.autoUpdate=!0)}else this.renderer.render(e,t)}dispose(){}},cardboard_png_data_url_default=`data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAASwAAADqCAMAAAAvZYhaAAAC/VBMVEUAAAD///99fX37+/v5+fn29vbx8fHv7+/Nzc3o6Ojq6urh4eHU1NTR0dGDg4Pl5eWSkpLHx8fj4+Pe3t7X19fAwMDZ2dnCwsKrq6uioqLb29uNjY2enp67u7t5eXmAgIC2traWlpa5ubnKysqmpqZycnKHh4eurq6ysrKKioqDg4Pd3d12dnb9/f1vb2/s7OxlZWXz8/OoqKiZmZlpaWmbm5teXl7W1tbJycnExMRiYmJsbGywsLCPj49aWlq9vb1UVFRYWFhra2t+fn7t7e1RUVFOTk6Dg4OAgICCgoKKioqEhISIiIhqamqCgoKIiIiQkJCIiIiWlpawsLBmZmaAgICenp6Li4uBgYGTk5OMjIyVlZWFhYWCgoKvr6+Ojo59fX2SkpKvr6+Ojo6QkJCurq6BgYGxsbF8fHx4eHitra2enp6srKyJiYmurq54eHj5+fl+fn57e3v////5+fnS0tLAwMCVlZWwsLCurq5QUFCtra2EhISUlJSwsLCUlJSUlJSlpaWVlZW3t7diYmLAwMCFhYV3d3f///+tra3///9XV1eampqnp6d8fHz///////9VVVVlZWVtbW3+/v5SUlKcnJytra28vLzGxsbR0dHX19doaGiWlpafn5/Hx8ezs7Nzc3Nubm7AwMCIiIjj4+NTU1P29vZbW1vl5eVkZGTMzMxYWFjq6upfX1/k5OT////4+PjV1dWkpKRoaGj4+Pizs7Pm5ubAwMCfn5+vr6+urq4wMDCxsbG2tra5ubliYmIuLi6zs7NHR0empqY0NDRCQkKqqqo5OTmoqKg7OztfX19dXV1oaGikpKRkZGStra0hISE/Pz89PT0pKSlmZmZJSUlERERbW1s2NjZVVVUmJia7u7uEhIRXV1dZWVlLS0tOTk6srKxqamojIyNTU1MrKyuAgICCgoJRUVFra2ttbW13d3dxcXFvb299fX1zc3N2dnZ5eXl8fHyHh4eSkpKenp6Ojo6VlZWMjIyYmJihoaGcnJyJiYmamprZ2YdEAAAAunRSTlMAs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7P9s7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Oz+QSzswb9DiH3FyI57Jn1ajgu7uHYmIgr8OHHwqVOQybv6OZuUvTt3dHPrIeFSNVgLCAWD9/UqKebiH1iXVTczcvKvambhnBuY/vGrKqjlHlzVDj37s/Fw7+tpJGAeN7VzcWTgGJNQ8O9u7iko5aVjvbNsa+so1pd3mNGAAAqAElEQVR42uzZzWvTYBwH8DxNmvRlfVNr17Wl05a9dISyiugO4qVQ2g1pVyx2Q7QKCoIivgxF1HnTXbbDDnNDJ8iQHcQX8O3We1t6GnjJyYPSuTmdf4C/ZE260U5rl6bJ2g8Pu2zP5cvz++ZJhilOcOxcfPHq/NuFhVcftK8WXizeCGItFWKKX5x/23Zk3/6OPr1+j0mr1fkpkuxXv5luBbbZWPzevEWjMRja2iCrvXs3stJRFGRFEDhOT1xv5QWCkYvPPtosFg+XFZyrvSYdRUJEBA4Igg2LRuBhk+cVOndv3uWyWm0DlqMajWafXkcSNNrexA2sSQ1dvPK+86DruNUGWRn6dGoa/dvk9BjWbMLxZ7e7e3ogK5fVZtBTOKrew6Y6Xufu3Qm0d3f3dEJWGj1Fo/81dbU52isUf2T3etvZrHoG9vtxVKOJm9guF049ddrt3gBkdVCzh0DlWtO4YejT00OHnU44VwHXPgqJ4PV1bFeKDD8xH4Cs7PaAtY9AYpncfeUFSR0zc1l5B/Q4EhW9q+KCpHodXFYBjxZxWnFtk9SZrl4uK6/Hj+pmWvlxDQ2fMRq7eh0OSIpCW7Ti2iJ8/4zK7WazcloqJtUaxqLweFSl4rI6ZNOhylpxsUKpqFsF3EazS4ukNLmIKcuJpFHF6erUI8lNKeiaGrl7WcUxtu+nUUO8VsZLEDz8VBy33YCjxnko+1dsrtI5hz1q1GATcm76YCrpVnHMVgrJgWwfjCN3u1Sc3k4TkgtZNv3QcLHS3Wyly4ncqis8/qSYlFNDINl5IZ9ZDKaifFHZSCRLkzKZxZEkX1QHtUi+ZDCLQlEZ2/uQzDX2c0T4vjzuntWaatiVPiQU1YEBoahoRMNCNRBzv9zuqCNJo1BUdGU4jcOiqyDhfgmLvryoOnClkfRwhcehqDh2A4ErkGTNBa9+paLClUqSK2rkrnCjMhFK9mYMqy+4Jwhf8wjlIWcvjcYGGYbxxUZvmd6V93w9XmicHpJQmD0zifM+ZovYzFWsjMifiB0urVpRyMeJmI+pyBnCxBcaF8avQ60kL58nYkyJ78f3leUvXwqrP9e/MqzBCCaykWRp/NTKQT0fHfzN8L79WlteSm9S+MUdt2t16XR4+vVXTd2vhtVfRrL9cw9ijGB9rZDOgPRm+XxunQGnRD9Ubm8bqRgvZ0Z9woFaX81lNqQzW7MCKwy4IE5T8YfKbNWRSmG6FCtN3upSNpspKosKLBXY6jorxuPPyF+pSKWYezDIFP1YyWXYpLJlSeWFqNi0fFD7O235VFTFOWbVUjUiKRIWBaTZP5vgk/r2vZDOgkylAczD4tMCy5DW6R2V+vBlvqkohZhN8DX1dY09UkJW5b0uJMXJ/dzRIEaKpe5wmShlmEv4hOHLf84WlU8gEKLi5Zagtk5itTkR5f/trvNvj/JTsKr4Xf3366GnhKSy2WJWmZJKpypfDCoHVmHriZpu6hvzZ+zu0HH8kBj8+KvKfyfN/j/UnclvG1UcxxGnhGxKaVIIioBEosi9gVAaCSkHkFhFgAOrBEIgDixCnOAAAgmVG1cEZ7jxHzi2YzvYcWyP3cRNY6e1J2sdJ7bjbLXTLOL73rzFz88TGqip+cyLZ+kMJB++v988jwN0fSJMFb1JIFxxXXq3kq4wCIjWw/+gVT3G6+++/wOtP7wmMuUVooASqtmNQim/6djd36tUyuX9o930WnZrXagCJdwQnz3lc+JvrVb16MXW+/4P/PaRg3X0AstUUm1WRil7VIn5xzkeD74EU4fl3c0CVC0bG/iLvHi6rs7vf60ncR9E4kXbVvcbf724+a2VZpMUdCuhysgfHS5xR1KVR+dyZQdvrNdOdT9851X+IWnr/wDR0h15I2kmuSwK8eQetwG+dGP+4200rW9Oq+r8/a3NT9cPH/K3x+tRSJKx8haObvqvXx8fx8CLrokOLBp/7q69daq5An5BtrWL0trVitHFkcea4M9/FY2qGBGhQreKFNI3x68TdFXSGIaO3+P3e6a+vK1Uvc+ev7R1NT1i7pktxU3AVEU2HIee64JxDCy1lrgqrBVV3Ne7r/ztZMFq6w+NtHWdUeg604Vhu62f2/Dr277m8wQ0KqkqvnkMUSo2uWKFWKvKTxaMy1+c7Oq7Tuu9ctuZZucX/mnD5kbUpCSBkT6AG00VXNkJ0/BzYeCxk2L1Ki3AnjNtZzDaFGqPnXROw6//46vnHWmHNaMyhari/iS86EAThgYNVd0ZBM0V5U37mdXnZF51/kJbc9Mr5wmzTJSZjG7tuXVTateyK0U9WXR1oq0PHiaz9fa25kY0qp31ZIaHKn8LEYEOLDpSVI0w2dv5SvoS/F5/wkBcPYH/Is791WC3DcNuXz+3oddXzxMyXFUBmQJWZ1Kxb1oeeVPUVPF82dt6Ea4e7r+/iRnCPIG6Wit5M1zV+v6YNMDE6NiUIPmqh99aGPrs9OXH4GoY39KF+y9o4KB+XD8HNOz6vs9ek40qg4Vg7E5JUdZig83NUE7h9ZuhYLJ2vvUs6e0DfVVc6LtAwErsY9gepzTs+l8/WuPzhCQyRWPlzR6M12Bri/4Rhh6setGCKMXWz8/VzK/g6nxfczLE737ZQiQDiKpoibZ0NVeQYhcs20Kki4rfGsQY0G+JL6BhPdnX19vXS8BKbst9sVaQ5zTm+h9G0w5HGsvWbIZhzh45x+tio4pmyq4SdagqDI7br3zq+jYaVktv8/HHG8+z8ltPilBt36Sh0pNFZdzmNMvjnIzdPK5Ubh0fHsRik6oq4Fei9XP1nRBF+EDvWYXes70YyrZyTDt+56/HM2KaKtz95rkqY99pdWUdmyJURTljt/Y3C7ORqMB6ompsrZUP3doMntMpZX2L5zHtZ5uLDv5AYdswM4zk9oEw5dFUKcL0jjVWLpq5mXDIlUpM5PhDeWEMzkwzshlTmrxUNiUeMj/XiWCdBUNnhwTYwbDbVtaUO3s9OhXBkS1G55Eqind3TE636+pi9aZNGpbKxZxrenpl5Uo4HE75XC5XYC4TEb4iUpdZONBuh8DtFj3+A9Kx2sFQ+xAFGwLsYNhuC+7g9QiV1dS3Z2GKsVHxezgyWZov7Z4Y21kNTFNWgA+2Ai5CYAKf9AhhEalrR86zJO7Jl5msV3ErbG8aLrFnL1aosJD624kJUWypmyzZ6qm0qWwGgWKsEK4FwuGQJcsVMr0WoiKT1FaexkpNlt/dyaoQ84aB9uag47OXECmwbWTmCRkQP3J6JGp71xsXS9ZSOpqaBqqra1dC4USKuAKpjBdIXyRcNFtIFhC+3BjuGHsHTaqwg9De0Y5B14BuA2Xf7pw7cv2ljzBTgKxsKQJPzJWxJ+pP6lKipfs63JiBH10VcKEQ4YqSMr0CIouHa1/t7sgVhvUW8XU8Re5oAj57ic+pTOqJpqp4rImCKm5Kr0Ow5w1M18JcXQGkxwcYoSj9CF+my7KVPKhtWRjv8pb1YMfd5hKefZJUkTkVsGSZedGqVF+gfo937mZuMD+aKyaLdC3mKhWYicOVECYaVxx2PGq03JdfILLQsh7p6GjpaMGgawX1mN05//L6H0bp3S+dRagY6OrZSevGpCCCpatypxeuTduoYrkCrnAiHOC2Urk4gCvFlmkeacGy6vBlTN+7tR+QLjp25/2b61s+hSaSqq34vMBSRVuHrqtez/KXvSGIsXXFZd24weswRUC0KN64Yis6SaIlVRE+svp7Z8vdA/VnzRQ2kqurMlVrl627Ud0iBDVPPPeMYDi1cmKs4MqSFbLqMEUJRfHLRlXhYm3edCjJosKW8Hs13+PznJa7xXujaTpVwPSzSlXUAVUED1noi16JUtgtIxGGAKUEtdbOVIFAOBGCKiZrdRayLF1xflckn9M6FVtu0rbwbxN8jF/Uxrc92DKIYa0BVicfA+r26a8f/PQlqwC3IsSU7FVjXBXXpCNq8KAQ9LlCiitNFZCufIFEIsxzFQpdhSyqS9qihVjmomSLf4w+nnlq8C7QjfojqcpumKsyVfPm9pRf4lGalpYsZ3bB5fP5UgjWFRtXTJV05XNBFhEFVSA4q9mihVjA31h44k2LzhwGL14cvDhIwQaGsmaIff3c019/CQ+KHaz+qmNViklR9Lu1D5anEgn4XD7MMOHKZ+NKVQWxVFYCrhhhwzCYL2JLFuJYdRVSZQf33PMjHjngB+m+2E3BBoayBnxbX1NOe/17L1lPP0uov2pXxZt+BXE71J1NbgXhicpCEQbsVNWXNROStuIGELbkLbGi1iDwv0hldf+nkFYFWdmiSU0J4hV62wF/27PKpgv4YApFWL9haaq4K9fMTDAk8RrSFtNFu9amlMV9fUxkne/+7xjGVJ2kKrucWaWIiVXayfKu2tJ9TRUSSBRVhVdShDdOaFcM6coVDEpZ4VDUkLZEISJa62qwAKalnUTWMKV7uJuCDQxlDcS2ft5tX49WRVOFVqWqyuSnSNAxavDU+tozXdQUf4GrgH2srimqAFpclSxcnDQseLJ414q6hS0erd+JrMeH8X/UODeMcQ7IbbwAbVs/9zavHxh1ULZYq5IlaBy6qStVkx6tpe0gc4SBxSrCldtrV8AFAnNzc0wVkWUajNpoxVgFimjhcenDkHXuv+C9Uev9XzGphAqYu043hf9TlCgzh0NvgBcfXuiPXq8IV6avKa5uSFeE1NzcBI8VMJeXZbRmq6J1LBoW84UHD/fiffS5xvMTujppVeu8VUlbxZjbggdeLUEmy7+f8wFY4g2LBStVq2paUwVXMlihiYk5pgokMsvVtiCLt/g9tWWBnyFLJKvnXI8CDgiwg6GstXPsr/8UXR1kDThSSzATKbsFfvqlNS1weTtIJbHyoyvW3a+oroDqSlUVCIQhK8xVJSALCFmA1+GuejMEB1RWT2NhqnbisKS6ymQKU+5q1Dr0sNeYEWB5wop90X1tiqXfBVVXYObq1SBTJWQpXYvJyrJYyWjFGi5rBKpIr8p7V3PClZgv7ON7cApRdBG3RA+rxMOIiyCDhQFEsPRYAZtYgbmFhSCPFZivKwu2xERL6Joisp7uGRnpGenBoGsNebz+OSP214+QaRVk5SM57mpeulqOOYFbhaqSuioZmiQ2A1WGOndHt1Jc6d3K4ipkcVdqstRZ/DYVVc0SldU/Iugf6SdgpW4DrPTj9Jjd9f3szXIpmsvxUMkKNNc0VVrHKi8SR0wTT5XQhh9Zzt0VVbauUqGFxcUZ4WpmBrJAtay41eHzRJXa4oms8/2NgfWqUjIHVxzhKnqLqHLSFylLMVZegBjpCJvKfgrBkqki6K5UVZCVWFxcJKY0WUDp8HnpqfGyfnrGAdYKJlelPF7IrP/ppKI0xORhfwFCmCTmSN1nHcv+LsiQrvBoZm5x8SoTBVVclt60aLKsRZU1MDDQP9CPQdcCdV85DsQ1QL9+YDRNVBUzMCVKcFW62hyzTPFcqdECe0QVF0M3a/fJ5zQiVnbtClTFCiws5ia4KhA8QRa+Dz1ZDwzccf6i7Wx60zjCON5PEPVoq5WcRFGd+ugoN/fUSy9VT1UPTXuu1EPVr5B7T/02wAG0ZrFZMAjMshCVBRziXTCOncR2Xtqq/3nZfXZmdrdJtf15CsYiCvzyf56dmd3iH3msLv2kqvGCTnK9KcVAmNbfMf4e8xSRoor5GO29JlTlzq5UV028Ipu5EtiZyXIuKVP/r6zfWLd6Xg0ByQLUrqQo9mXqetep14D0wi3pj6m9K0dBmlw909uV2Ege4gUlVNm2nyWL9aw0Wbfv3r199zbGXUDfp9wDeh491v78Y97XF0qzwojOMw+OSgQKUWtZjXUfnVtEiVbNxuO6WOlAFLnKjFW86T5bLKZwJbFJljF3OIMqNihgJSGrWH5m3aoNU2Zj5639sKzI0nS9rD05aMJWnCQxKtpjUYVP02IFjKOgPD/Rx2sZkqocWa0zocpMVqH8FmAV2AoBqUq4Om+UFNQavOohLMzWQSV70hBPsqAqyxWeRLKEKWAh4mRKkaVPtDLLUHD/9n2M24T2c/qe7s3nRa7SGju46JZLZUOXFHbYEoUlL9GrKY7Ux/xYCFm5rurkittqLsaTKalieFClL6VlsjRKvAx37xcJjoNBNX2+AC5MVRiSPyrRKeQabFWAsn9Fj8EIT8ieiFY4SgWC5hCvwOaNPcbPkZWWrHtFuvpmJ4CrDFVwBUoYiitRi0dh4nQ7XByY+1fyMQOV+kw7h0qySBXVIGiGvh+qroZZyXLMZCmy9u7vcfANBr+X0GP6efpzfsZc9DyUpqgCJes5c0XZSs61dmqRKsCjpe9fyccCrO6eGCcGZQkKDFVN2/d9y04wHJIshiJLC1ZJytrb3t7b3vtg8Icw6J6BCdbzlKOgYNngwUrT1ZioV+ixHj8y9q8SJpC8FFdKCequmgvf8xVVubIUU/yGy9ouir3vMGtwVFOTCL+zXxaUjGRd1bUp03EFNvT9q0pEnbWskdKujlNjBejkxNBrtdzYFFylyBpklWFJytrcLoyvsHI25wsc33kHT13Zs9Sp1sUTc+9O1GEtMRLUR81+XTw5P1cHUhbfbve8ieLKlAXSZfHGymVtbCtsbG9g0L3AfGz+DMEKfNnYSRTwJ773ttyFKoZWhQ3e2RVXgO3sqftXMlR1puKg368oqgD5NHIF+pbXclxhKlZlWSmyqjkNHrKKAh1rrbgax678V1DVFclS29b1QeqqhS1nlKkoIBXNvl0zF86mKnLV8x1nbAukKbh6H1liBQuKlLX9eCc4pQv4FFX+ZVfUoJGtmxq19mRd8aZF+1cUKw7WdzWtBOk5HM1Vf4rFsStFkSur9T6yMNh/hSbr252dM2VuRa46h10AX1HTinj+xFBFsmj/KqIuwVTpmXJunlzRslkg9pDtllMdQ5USq3xZpCqRrE83dnc3djc4+AaD7kH69wT9mdOdYBD3dYnP8f7sCihYGGBtlqA0wGdaVIEUKw7e8zN1O4ZUyRIckSowgQDLpmYVkS+LhGEIWbvF8BjtfUKqkrL+mHNT+Ooq04e2VoLJsEhZZqwAzsGTLHPdzKBYgV4IAaGq6v2TVRIjlnVv9x5Gjgl6jvaYvkcVXgpVlCvBct6VtqJgiduqkiutXeNd1pOx4pAsqyYTyEjaVEtQbLdbeP9eXIGEazm5sshXXIb3igHHQlmFZIrjXXNXZYzIF6/DTnasuKxePVYFyBR84B3XUtqV2q+aUa7sFvZdrKEkocp1nZx5FonCbbGyNoOdoJUswUiVFyBYXJc6e1iqsyv9hHu/J2XVKVjSBpdVORbdioJl5Eqe7uotOp3BLBJFuMD51+VOKRL2n2Vt3tvEUH6EiUMwmcSpIledxnwOVaIQqRQv8nIFcMCrU2OnVAlZrjtiz8xuVwhVJGsKV75ZgS6YVvNk0RwrTtbDzQ8GogweYeJAswVy5b2BK6ji0Gzr1VNylXrdmU2yDFcHtus2a0oJGjPROFduZzCoWqqpmGr+Fk0JQ/giWUXwbbBzThUo8ECbu5pryXp7DFV5ripox5DFRgx1JHs6tckVSHfVA1Zn0B5MaWYF3FjXtJMnq0TJKlgWtkjbhilwI13FTYuxX08/DJKrOt4bTOnNSuro4cQyyapndHaosodVaAgVVZIpY5CzU0ozB5L1oBhZ2HHoKK6EreW8MQdQlZg/dMOnubkCIws9XK9AmmvikgW2GMpy1U+6OlkYzQqqhCxypcsSoZKmSNanRbDJtrLiXuVhCP5qxLLk/AGyXuS2q/hyxmSqaFrOmYZhP32PoZl0ZTvtk5NxiirhajY7yT4VBleA6yJZdwqR9SAIdjytBoFzCFGNuAzn3NWfx6kLHEVW33JtowRJlhWGrrp1BVRXYIj+vfRJFfUqwSxUZAE6yQpV0XGwcFmPg+DUFyQ/sveMqeLQEXHeI1dmu5IGcLzrGc2KsLETNKKjIKkiV7ZtdZbLZUtLFUxJUMqTrAk8ZJGqFFkPP32I8Z9l4XShVoEtjLeNhm6rfGLmSnMFrOm0KVxpoZJOwvHYUkrQdDVtL5erhCuJNDWdAT9TVkbPuvOwCLBL+tIHpIoFq81UUYfnvM09CkpXB3g/IzVWZIpJGWKtcJCUSapkv1qcLFcrzyhAyhXIWhqKnhVDsj5+8GFaHjx8gKF//10QvFRccU4bgFciNflQqCJZhivQw9shVXqsQD/0/YXZregw6EDVapKnCnSMCTzJolApsooAyXohRZErVOG8S1XIm/zrfzkMCqzZbGi4IlUwMsS/y1SLFR0GwxOoWoYZfV26ov5uXlN6SaqKl/UoCM6oswucKg8WG7Jn4Wb2Pq5GeCN9vQKpK3ErM/xFbl1tV1KVW12BgZsbq4z+LibwkAVSZN0pgkfsSj9SJbiAK64qttW9TlFlbqD3wzA8SDdFK+QJ/oaZ3q6gyvJWDD/jEEiEmS0LZaiKKmNA1lZxsmRjp9/e8gqqulKXtLXObVfSFZtGTXVXTXIltNg+/gq/py1w3NYKnHdm2jKQKlCCf492xvydl6FGGcnaKkjWt0FwQaakrOsGo5s4JM6beq5SN9DDxcJWelWTXAlTgNnCW5tY9GNrMmCmzpdjbXvBzBVceeSKggXgytNllVGGW1tbX3xcBNhUXsMUpQoMeKgYcSG+1qYMRqyYIj7lRBUarihV0ta4WsVmVdVf4N0vJk57xThf+i65Sq3BcBaCQWzK/L8zLzVT2AkXsu4U8IVkrePGLmWtSRRuOOdmripaCYLZYjxLqcB+BF3oOHUGoA3YDJSnaqCmapqeKuC1iYGy1mkZZVgWsm4VlCzIIleC5w2gHhCHWTUY5wr0sTttG65IlnJVaNhqA6wBIet8NfBmlkCqipuV4Wqiu1I+rOCFago3hx9t3br1ScGy6NcnvWkA0gX2kwvn9HYF3MlkYajSChAjwgonLQfv1PFDV18HZsQKjAe6q2SwvD+MYB19dKtAWeeaq+p1QpVo8jfHuisJ5Qp2sCtm6Y29T644NqGcj3+vZgX8DFcyWP6NMmtgXHNZXxTBT7jkT/t1i51GgjnP1lq7kkNr7YIptsWapCq9/kiVJHsfJkXVuKqp0j9fxb+OXTFZ7Ot7LiuFL2AQNwr5z2HJckgWY9VQmMNXKGXJvavU/fM+NsXcgxxZdhI9VUBVhaHLWjgkKuOTezrJboVb8IjLKoSfgmBFseK80GRhjPTODvQz7ljGTJLLQF1VzzBFqvKPgYJFa8AtER3jM6H8QG3vZfBDobLOhSoMwU5Dt3VE7SrzOlmbLfnSZ6HATutWZqqymxVUqXSUz8+SRei/k6IAbkC3/AuT9XkhsnByZ8XrD0NyYwTrylg3V8zLZFstv5k9tSJRdmZbp1QRslc5eqRErvRP/XvBTQlfksbXXJbGJ7CHG+NxPl/KMqwSfzc05qdQlZcr2Bni5VoyVn1KlV6Bw+liylWRK5dildHYJ06y8MSd+Zl/kNXaj0qQovX6I8j67PMCkLKqBF7B/uGhZuuEYpVx7WfPbzl+/mzBcs5ujso4nVC+Wrt5qlRXC6+ajBRhfvamfxNNGOQd6P4KWbBVmKwqgRfQNoLVmNQEGbGCnxCbYMMcV8OTqzK2MCP21yQrt7GPW51UqqSKXJ1Sa2eI0+i/C1kJPoc53KSS/xwui2KFsTxs6MlyyVVdm10JPxbCGZIqo1d1jqSpEh/gapYWK0LWn2mJ00n5BFz/MpqJ8iF9/UPdufy4FMVx/MYf4E9ghURELMQCEa/Em3gl4hWPeEYICfGKJREiQbARwULEwoYVG4nGdWk7DUHTpEbbSKudajvtdDpjiO9533POvUXNovOZ03tvaybRT76/X29Oz22HFzvOZLgaFfRk9YAqVBm+XofWIPODhVQvou9NV6pZ9Yl3XCBKbOKfIatdqlJJ4UShdNmfrVyBKAypiq0rQxU655GsUZaFVFH6XatnSVd2CQK68hNFGNrYS/rVwriRjRfVp/f0XoUpr0BMVfJTu4fUrAxTRcvQewhZmyYjW+P/CH4Jo92xkKW+nLnieUawmsKVWr6gvQmRwd9mQpoVSGWpKYrbHPn14znLl/tCr0BFKvn2z6JAVLarYlNkSgFXiTUOODt+FJCyVKzwwpx2abQwBC0RKztXdJoTf55sc2L16xkn0UrX6/VKJf+Lta5E7ItExeorXlgZ7TyBqKzAF0MsUloRYiSy1x2wdzRl+VX1fBjyzKbVCHcFW5/IH78SqmxXVeGqWahX4IrQ4k2sZKr6+jmp5tZszK+wIPTGBhNSk4AvsV7rEHaOoqzvSIbv+9EHPbMOK1IVMFcnvCITxF/0SSv/+XrG5a7ieRIrThOuSLz6NFOpXu2dEwzbEtkwkkRWD2JKMHQxV+4xh7ByPJhoMX7ieIx/eYzI0r93vwVVTJcwVtVipbl69+otWSXLVGGItq5s/XzGSdcr3FU+X5ma4E2s1StNiWVPXJhC1Jz5tTvF/qEfwhJumih62+pQFp+XrjrHkPWBEhuBKKZLUISsQFewk8RffOOuguasPgtXkYoEtvL8839wa5VTeFOILZeWvgA1YsD+4W2sXME3vBuz7eqknW5Ac5UDeNMaTVkfhKsPPzyKqxrXC7tdEZirWCxFVYXMhMqZy2FpqpIHaf+Viz9+9hejKeFLCdN0vYiVapX0UKvp6ZLIjeBTxVb9ZI84nOVE1jj8UHBggofsx+3fYbI+SFexGG9ZdMPola6YKVWD5I2WJDElZBmqECxBi5mSNOWZFycbHx78ma7U+2u1avk7KFf76pV8+ufgwPBIHIaC4ReNajXIxlFHsonI+m+kLOmq6HFcaetrmCvMXObeolUFpIrbasgLyYaoK6WL9zKurBNYm2I7lSn2Qgi2LHEkqxGtUZKlVElZvGlhgIxWgkIVrqyJ5YpRX6iMXIFMVs4vpVkBKnjP6VzYczp8mVLtCsQ3Oz7OTkS0JozDmEBRx9p9sQ8CD0tZMbgilDyOOjd9yVQZrf0bVBWTsGRXoJw37ucXdGKDUGmuCqKbdZoqtgU4Yqp4pNh2nUNQXQu2JvwvkFWWqkCu7ElcLuwVZL3mqHYFVcWUZsqeNI6TOqFPx9ViVSDEO1dFN2xIEmzw9cJ3HJ1j49HBR11WVakCLuG9cKVi9eVDEWTet3EFWz1EFQtAxG+K2po69B/Bko3KbuzAdAUWn8Xr4KjIinGw4CJX8wTy5PT1a721v3sZhalSz0tblRRF+cmvu8OI533AFEiPdGBJDtxUosSOxyp7xrFYdoVEa9qEaRLcwQg7Nh8TsqQrdKFcn67KxU7UIFf1qbdI+Bz0GkhVCVlf3OeAxWAEiiAJgzKVfL1mw+3Ektjo9ccjxWwddkK+cxu2/odF+XyZq6IUIcvQFddq8GMyR2P1UU5Z2Y2dU3quGC5I8ixXYPBfMqV2ovz08wXFRSeQ5ePAf8kSycpRW9DQ7wFN1483cpLhZaqnCEq5b/Y7p/ZbXAPi0js8tQGRLLqHK0qTS7BRZjD8Z1X22TobuCFTuN3a54SwGZWEaE2aNkmAQ3VfYf473wtZOaYK1D0D90dPNPWNLTorUlXFVFizAsrV1yxXRdi97ezeYzv2btq2gqWL2GqkG54qMrPo9DwxUdp8FdtiT1WJEjy0ywll1RVia1LHkDKkqopwRah4Js0ecXIPSqWeb6+Eq/bLPMp4BrL/yqeweMe2pdQXsdUYpI1a5gZH1n3ey7kms1OpMyuYIu1qsdOGlReQrM5tIVnVWIyqCpHljlBXOWYq9fIdxzZlXJk0wOqDPTH/c1i2aSnt9JDVGGalBrgZ677csKHBSlBxaL3TniVHaFl1LqsMVUJWqZiPeBFPo/UpQ+Yvk5+/fnylFqUZbd12lXETgL9SHTRex8+TUkQxNhpxJkKLkryv7TVFdKuRTRzc54Sigk1VTfcxafokjND76jGaLCJKuCoVInCly8LscQfrrGKsQJix7VZBjC/kQSHfiHBH8rRAv6+EAX+3Ms4Ysof2ifS2Z/kF4qoj0LOqyhUoQI/ua8CWFe4KprisRgIIYWcC/tPbWLrSEV909HNzw5DogapPgSwzddgswHCWXJ/+37JKjKmGKshqs35PmrKClYknfNx1Alh2diNk5ac2lSpgqbLbFDY8sbdObj91+OL6E84/sWrSnOlzMJgCHAB2v83jAGVYU65AOuIZXWuQuQqvwMBFoaVE1hetsG6y+ey2rSumYsGIhpkoYYjYOXhy+5RTZw5fPLdv/a7jRuH9Q7jmdALpWdSUkgU8U1bQREzblY6ZEchSvv5UJLsunpm7/eTBPZyDB08eOrR9+1xoOXP48F2Y2bd+/S5bTudsuD1n4ZyFFBxQcIBB90HgYVKGJSHrOwZk0aalhA3JVGmEqqKy8uJTIRgnnG5jyfWZC2diLMSYyVH3sQHiWOxJskrSFWa+GzRZRJiUxVWFL3S01+8Vhaosve1xupANt2f+I0hWjasCTJan6xoSrmxVGNyUvoI25mYpohK3O93Ikmv/KGs/GjxVpWSxaPnKMGx6L2z53reSuqiTHRx2uhOEawZl5oyZGHQPxLHYa7KUq3K5wWIl4wVZfzqzErK4qlRNXqkoivGc06UsucZU/R378/k+WoJKlkCWoW0K2C+BGETV57wLU9SWzNcup2vZcHvGX4Nk9clYwRVkCVHY0O2QPb1nNytAVJFPNiWuXP7DuOV0MSRc/5AsnyozWRiQZTWr4AtuMlDVOwBHTJfilNPVbJg9e8ZspgMHGHyvHuMcgCzlyp8ssqUHg393bdI38qEj0WEXJKgvDC6ta1uWDNfs9ihZ/T5V1XI6IvHYGNBOQkMueMO1g3D19he1BF3UlajE7jsltcL117KkKsiqTo1oQNeAOWllX5uUgSq46vmhXafIo9XtVcjDNWv2rNkYs+QeGI8dKBQgi4vCqBYMV16kpdefHSuooq5ycSFJ9i2ycdc7Y4ENj2f9CSSrXhZUQT5i4A0HTcT4U8VX7dcirglsjY1g0XBd+pOse5AlTYXI4t3KMsVVcVfpIFVgz3FnrLDq8R9lVZQqUImYNImq4NfAr0lxNciLlhvMky4+IbVYfGnerFnzZs3DCJRVKFSUqlqtVo/EDVnxb8SUfWUSQiWvyPoed4O5OXZyRVl5dV4495Gsalm4Av1wZZAMUIVQ+a5eS7NVgjZblzhjjYdtZeWlKmoLdgxfL4zP/mKhArwGY7+gCsMicsUZgyx7wNQsmLcAQ5rC4VMpq8aJWHxI4mMqpCryPr66eg1UInLJrs7lY87YZMPpBYE8giyVKtAXj5vJKiahpPcz/QrpqH71WjL6YdgD3JSWsN0rnbHKkkuhsmqQVeWq+oisiO6rytejv6XAEweuVKzUVRlc23hnLLPyKtUzf8F8DLbHEWT1iVBRWSMRostvq94LW/rVRzxXMcRKiBI/LFvNvc4Y5wb8mGASvi5l9YGBOGRp0Wr0MlvUl9whVr/bO3fdtmEoDPNJ0r1P0UW+oKC1GGjRJoCBdKinwB09B/DgIICHvELRIQ+RQYuHnqxdjI42ejMqVWpguUWPKNJHFKtKBZJBlD5YpucPh8c/aRLeeHSOK/vgFHzBak93bsgaY3ZIVUl+eQCgVdZPcTsE5RCJqs+/lSrSJUvrhFkBX+RkJdmBXCFr1bRA+drjpp52uS35fPPDWxYQnzFbuJo6zhPnIOt6g5s06QxEfN8PAPGytQUf0JbQRbK+x4YjlR9eDpg9dOdOFjEPv0hXiMgOoJXWe7rblnIbLuWms8mz+oX2kozqEOdrLC1hSpJWVjZB+HS1TSjbgDyWZALPmXXwhdNxOvhCWz20JVyluoIYQKiiyRhqNwG/RvLsiGdW18WI2chw2pEkpRWgLEUICk9V1zf6X56bMKMqz6s+s5QrpWuc2PIlQbBSogAO+XR1Ky6afvy0AuGKniXhPWIWI3U5vdRW4AcCkJArJN7d7SLtlx9VW8pXbdfN/6frfJPYUq58cqWivBpIlTrFRcJOObOe4SKx1Vsj20Cwjam01JODjiUpcbaE9jL4W9Hkla7tNgTI9XgxmtChiMie0F5G/930+vX6wOOsKvinKDlaFdrL4XOcipIACOpcxco820J7BfhsLH1F+jyUQxE2hvYqdEezo8lk8hQIavQFwiwN7ZV5Awa0+Mnh1nen/Z44BkLv9DljYHVorwbfgwGtf4iL2u+03weXYKJKi5pXE0J7FU5Bw8zz+N6Q0F4OD4EwvhWRJoX2UoZhUY9PZ2PYrNBewuAODLzDUMPjMQ8Kd6GIaMZaclxG8FfcIWsxGLkxGOzazl7AYKLn09idtd2qmP7ZiZsK24fHR20MLafPB6O2UTWAP1yGz7GpTmekAAAAAElFTkSuQmCC`,phone_png_data_url_default=`data:image/png;base64,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`,_a,LOCALE={zh:{TITLE:`眼镜模式`,HIT:`请将手机横屏放入 VR 眼镜中`},en:{TITLE:`GLASSES MODE`,HIT:`Please put the mobile phone horizontally into the VR glasses.`},ja:{TITLE:`メガネモード`,HIT:`携帯電話をVRメガネに水平に入れてください。`}},TEXT=typeof navigator<`u`?(_a=LOCALE[navigator.language.split(`-`)[0]])==null?LOCALE.zh:_a:LOCALE.zh,CONTENTS=`
|
|
1680
1680
|
<style>
|
|
1681
1681
|
.$id {
|
|
1682
1682
|
all: initial;
|
|
@@ -2037,7 +2037,7 @@ void main() {
|
|
|
2037
2037
|
|
|
2038
2038
|
gl_FragColor = vec4(gl_FragColor.rgb, gl_FragColor.a * opacity * outside * inside);
|
|
2039
2039
|
}
|
|
2040
|
-
`,PanoSphereMesh=class extends three.Object3D{constructor(){super(),this.progress=0,this.opacity=0,this.loading=!1,this.current=!1,this.disabled=!1,this.currentMotion=new Motion({ringScale:1.1,ringOpacity:0,circleFade:0,circleOpacity:.85,circleScale:1}),this.opacityMotion=new Motion({opacity:0}),this.loadingMotion=new Motion({opacity:0}),this.disableMotion=new Motion({opacity:0});let e={blending:three.CustomBlending,blendSrc:three.SrcAlphaFactor,blendDst:three.OneMinusSrcAlphaFactor,blendSrcAlpha:three.OneFactor,blendDstAlpha:three.OneMinusSrcAlphaFactor,depthWrite:!1,transparent:!0};this.hitTestMesh=new three.Mesh(sharedGeometry,new three.MeshBasicMaterial(Object.assign(Object.assign({},e),{color:0,opacity:0}))),this.hitTestMesh.scale.set(1.5,1.5,1.5),this.ringMesh=new three.Mesh(sharedGeometry,new three.ShaderMaterial(Object.assign(Object.assign({},e),{vertexShader:ringVertexShader,fragmentShader:ringFragmentShader,uniforms:{opacity:{value:0}}}))),this.panoMesh=new three.Mesh(sharedGeometry,new three.ShaderMaterial(Object.assign(Object.assign({},e),{vertexShader,fragmentShader,uniforms:{circleScale:{value:1.1},circleFade:{value:0},circleOpacity:{value:.5},loadingAngle:{value:0},loadingOpacity:{value:0},opacity:{value:0},disable:{value:0}}}))),this.add(this.hitTestMesh),this.add(this.ringMesh),this.add(this.panoMesh),this.renderOrder=1e4,this.needsRender=!0}setProgress(e){this.progress=e,this.setLoading(e>0)}setOpacity(e){this.opacity!==e&&(this.opacity=e=clamp$1(e,0,1),this.opacityMotion.set({opacity:e},30).catch(noop))}setCurrent(e){if(this.current!==e){if(e)this.currentMotion.setKeyframes([{progress:0,value:{ringScale:2,ringOpacity:0,circleFade:0,circleOpacity:.85,circleScale:1}},{progress:.05,value:{ringScale:1,ringOpacity:1,circleFade:0,circleOpacity:.85,circleScale:1}},{progress:.15,value:{ringScale:1.2,ringOpacity:1,circleFade:0,circleOpacity:.85,circleScale:1}},{progress:.25,value:{ringScale:1.1,ringOpacity:1,circleFade:0,circleOpacity:.85,circleScale:1}},{progress:.8,value:{ringScale:1.1,ringOpacity:1,circleFade:1,circleOpacity:.85,circleScale:1}},{progress:.9,value:{ringScale:1.1,ringOpacity:1,circleFade:1,circleOpacity:.65,circleScale:.8}},{progress:.92,value:{ringScale:1.1,ringOpacity:1,circleFade:1,circleOpacity:.65,circleScale:.8}},{progress:1,value:{ringScale:1.1,ringOpacity:1,circleFade:1,circleOpacity:.85,circleScale:1.1}}],1500).catch(noop);else{let e=[{progress:0,value:Object.assign({},this.currentMotion.value)},{progress:1,value:{ringScale:1.1,ringOpacity:0,circleFade:0,circleOpacity:.85,circleScale:1}}];this.currentMotion.setKeyframes(e,200).catch(noop)}this.current=e}}setLoading(e){this.loading!==e&&(e?this.loadingMotion.setKeyframes([{progress:0,value:{opacity:0}},{progress:.3,value:{opacity:0}},{progress:1,value:{opacity:.8}}],500).catch(noop):this.loadingMotion.set({opacity:0},0).catch(noop),this.loading=e,this.disabled===!0&&this.setDisabled(!1),this.needsRender=!0)}setDisabled(e){this.disabled!==e&&(this.disabled=e,this.loading===!0&&this.setLoading(!1),this.disableMotion.set({opacity:e?1:0},300).catch(noop),this.needsRender=!0)}tap(){return Promise.resolve()}updateTime(e,t){this.opacityMotion.update(e),this.currentMotion.update(e),this.loadingMotion.update(e);let n=this.opacityMotion.value.opacity;this.visible=n!==0;let{ringScale:r,ringOpacity:o,circleFade:s,circleOpacity:c,circleScale:l}=this.currentMotion.value;this.ringMesh.scale.set(r,1,r),this.ringMesh.material.uniforms.opacity.value=o*n,this.panoMesh.material.uniforms.opacity.value=n,this.panoMesh.material.uniforms.circleOpacity.value=c,this.panoMesh.material.uniforms.circleScale.value=l,this.panoMesh.material.uniforms.circleFade.value=s,this.panoMesh.material.uniforms.loadingOpacity.value=this.loadingMotion.value.opacity,this.panoMesh.material.uniforms.disable.value=this.disableMotion.value.opacity,this.panoMesh.material.uniforms.loadingAngle.value=e/120%(Math.PI*2),this.needsRender=!0}dispose(){this.hitTestMesh.material.dispose(),this.ringMesh.material.dispose(),this.panoMesh.material.dispose()}},ACTIVE_TO_CURRENT_DELAY=1500,defaultVRPanoramaControllerCustomInitArgs=Object.assign({},omit(defaultPanoramaControllerCustomInitArgs,[`maxLatitude`,`minLatitude`])),VRPanoramaController=class e extends PanoramaController{static parseArgs(t){if(t instanceof e)return t;let n=Object.assign(Object.assign({},t),{maxLatitude:Math.PI/2,minLatitude:-Math.PI/2});return super.parseArgs(n)}static initAnimationEndState(e){let t=this.parseArgs(e),n=super.initAnimationEndState(t);return Object.assign(Object.assign({},n),{mode:`VRPanorama`})}constructor(t){let n=e.parseArgs(t);super(n),this.mode=`VRPanorama`,this.cardboard=new Cardboard(this.renderer);let r=createHelper();this.helperElement=r;let o=new Hammer(r);this.element.parentNode&&(this.element.parentNode.insertBefore(r,this.element),this.updateHelperElementSize(),o.on(`tap`,()=>this.emit(`vr.requestExit`,createEvent(`vr.requestExit`,{})))),this.destroyHelper=()=>{o.destroy(),r.parentNode&&r.parentNode.removeChild(r),this.helperElement=void 0}}updateConfiguration(e){return super.updateConfiguration(Object.assign(Object.assign({},e),{maxLatitude:Math.PI/2,minLatitude:-Math.PI/2}))}destroy(){super.destroy(),this.cardboard.dispose(),this.destroyHelper()}isReady(){return!1}updateRenderSize(){this.needsRender=!0}updateCamera(e,t,n){return Promise.resolve()}updateCameraWithKeyframes(e,t,n){return Promise.resolve()}updateTime(e,t,...n){var r,o,s,c,l,u;if(this.destroyed)return;this.updateHelperElementSize(),this.userAction=!0,this.needsRender=!0;let d={},f={},p=this.locationMotion.keyframes[0],m=this.locationMotion.keyframes[this.locationMotion.keyframes.length-1],[h,g]=this.locationMotion.getKeyFrameSegment(e),_=this.panoResourceFromLocationMotionKeyframe(h),v=this.panoResourceFromLocationMotionKeyframe(g),y=this.panoResourceFromLocationMotionKeyframe(p),b=this.panoResourceFromLocationMotionKeyframe(m),S=!1;if(this.modelAlphaMotion.ended===!1&&(this.modelAlphaMotion.update(e),d.modelAlpha=this.modelAlphaMotion.value.modelAlpha),this.perspToOrthoMotion.ended===!1&&(this.perspToOrthoMotion.update(e),this.camera.perspToOrtho.setScalar(clamp$1(this.perspToOrthoMotion.value.perspToOrtho,0,1))),this.locationMotion.ended===!1){this.locationMotion.update(e);let t=this.locationMotion.value.count-g.value.count+1,n=new three.Vector3().copy(_.position),s=new three.Vector3().copy(v.position);if(d.progress=t,t>=.01&&t<=.99&&(d.progress=clamp$1(v.effectEasing(t),.01,.99)),v.panoPicture&&(t<1?_.panoPicture&&(d.pano0=_.panoPicture):d.pano0=v.panoPicture,d.pano1=v.panoPicture),v.effect===`montage`?d.transition=`BLACK`:v.effect===`spread`?d.transition=`SPREAD`:d.transition=`FADE`,v.effect===`zoomin`||v.effect===`zoomout`?d.progress=Math.pow(t,3):v.effect===`model`&&this.camera.pose.distance<.01&&(d.modelAlpha=1-Math.pow(clamp$1(Math.abs(t-.5)*2,0,1),4)),t<1&&v.effect!==`fly`){if(d.pano0&&_.panoPicture){let e={panoId:d.pano0.panoId,map:d.pano0.map,mapHistogram:d.pano0.mapHistogram,mapSize:d.pano0.mapSize,zoom:d.pano0.zoom,matrix:_.panoPicture.matrix.clone().setPosition(v.position)},t=this.panoPictureObserverMap.get(d.pano0);t&&this.panoPictureObserverMap.set(e,t),d.pano0=e}n.copy(s),S=!0}f.distance=this.locationMotion.value.distance,f.offset=new three.Vector3(n.x+(s.x-n.x)*t,n.y+(s.y-n.y)*t,n.z+(s.z-n.z)*t);let c=[],l=[];for(let e of this.locationMotion.keyframes){let{key:t,progress:n}=e;t!==void 0&&(c.push(t),n>this.locationMotion.progress&&l.push(t))}for(let e of Object.keys(this.panoResources)){if(l.indexOf(e)>=0)continue;let t=this.panoResources[e];if(t.panoPicture){let e=t.panoPicture.map;if(e){if(e===((r=d.pano0)==null?void 0:r.map)||e===((o=d.pano1)==null?void 0:o.map))continue;e.dispose(),t.panoPicture=null}}c.indexOf(e)>=0||delete this.panoResources[e]}this.currentPano=panoParse(v.panoId),this.emit(`pano.moving`,createEvent(`pano.moving`,{userAction:this.userAction,prevPano:panoParse(y.panoId),state:Object.assign(Object.assign(Object.assign(Object.assign({},panoParse(b.panoId)),{mode:this.mode}),clonePose(this.camera.pose)),f),options:{},progress:this.locationMotion.progress,error:null}))}isEmptyObject(d)===!1&&this.modelScene.parameter.set(d),f.offset&&this.camera.position.copy(f.offset);let C=this.camera.pose.longitude,w=this.camera.pose.latitude;this.camera.quaternion.fromArray(this.cardboard.sensor.getOrientation()),this.camera.computePose(),(C!==this.camera.pose.longitude||w!==this.camera.pose.latitude)&&(this.cameraMotion.set(pick(this.camera.pose,[`longitude`,`latitude`]),0).catch(noop),this.emit(`camera.update`,createEvent(`camera.update`,{userAction:!0,state:Object.assign(Object.assign(Object.assign({},this.currentPano),{mode:this.mode}),clonePose(this.camera.pose))}))),this.works.getObserver(this.currentPano);let T=this.works.getObserver(_.panoId),E=this.works.getObserver(v.panoId),D=new Map;if(T)for(let e of T.accessibleNodes){let t=T.work.observers[e];if(t){let e=panoStringify({panoIndex:t.panoIndex,workCode:t.work.workCode});D.set(e,t)}}if(E)for(let e of E.accessibleNodes){let t=E.work.observers[e];if(t){let e=panoStringify({panoIndex:t.panoIndex,workCode:t.work.workCode});D.set(e,t)}}if(this.panoMeshes.forEach((e,t)=>{let n=D.get(t);n?(e.position.copy(n.position).applyMatrix4(n.work.transform),D.delete(t)):(this.helper.remove(e),e.dispose(),this.panoMeshes.delete(t))}),D.forEach((e,t)=>{let n=new PanoSphereMesh;n.position.copy(e.position).applyMatrix4(e.work.transform),e.position.distanceTo(e.standingPosition)>this.aerialObserverMinHeight?n.scale.setScalar(15):n.scale.setScalar(1),this.panoMeshes.set(t,n),this.helper.add(n),D.delete(t)}),this.camera.pose.distance>.1||S?this.panoMeshes.forEach((n,r)=>{n.setOpacity(0),n.updateTime&&n.updateTime(e,t),n.visible=!1}):this.panoMeshes.forEach((e,t)=>{let n=panoParse(t),r=this.works.getObserver(n);if(!r)return;if(!r.loadable&&!r.active){e.setOpacity(0);return}let o=e.position.clone().setY(this.camera.position.y).distanceTo(this.camera.position);o<.05?e.setOpacity(0):e.setOpacity(clamp$1(1.5/o,0,1)),panoEqual(this.currentPano,n)&&e.setOpacity(0),e.lookAt(this.camera.position)}),this.locationMotion.ended){let n=this.intersect(e);this.panoMeshes.forEach((r,o)=>{r.setCurrent(r===n),r.updateTime&&r.updateTime(e,t)})}{let e=(s=this.modelScene.parameter.progress)==null?1:s,t=Math.round(e),n=this.modelScene.parameter.pano0,r=this.modelScene.parameter.pano1,o=t===0?n:r,l;if(o&&(l=this.works.getObserver(o.panoId),l||(l=this.panoPictureObserverMap.get(o))),this.tiling.appearDuration=this.tileAppearDuration,this.tiling.maxRequest=e<(canUseNativeImageBitmap()?.6:.99)?0:this.tileMaxRequest,this.tiling.imageOptions=this.imageOptions,!l||!o||this.tileLevelForFov===!1||this.camera.perspToOrtho.x>0){this.tiling.setObserver(null);let e={renderer:this.renderer,resolution:this.camera.resolution,pixelRatio:this.camera.pixelRatio,time:this.camera.time,cameraMatrix:this.camera.matrixWorld,cameraProjectionMatrix:this.camera.projectionMatrix,panoMap:null,panoMatrix:new three.Matrix4,panoZoom:1,minLevel:0,level:0};this.tiling.update(e),this.modelScene.parameter.set(`refinedScreen`,null)}else{let e=getImageSizeLevel(o.mapSize),s=e+1,u=new three.Vector2().copy(this.camera.resolution).multiplyScalar(this.camera.pixelRatio),d=Math.floor(this.tileLevelForFov(this.camera.fov,u)),f=d>e?d:0;this.tiling.setObserver(l);let p={renderer:this.renderer,resolution:this.camera.resolution,pixelRatio:this.camera.pixelRatio,time:this.camera.time,cameraMatrix:this.camera.matrixWorld,cameraProjectionMatrix:this.camera.projectionMatrix,panoMap:o.map,panoMatrix:o.matrix,panoZoom:o.zoom,minLevel:s,level:f},m=this.tiling.update(p),h={map:this.tiling.renderTarget.texture,matrixInverse:this.tiling.camera.matrixWorldInverse,projectionMatrix:this.tiling.camera.projectionMatrix,pano:t,opacity:(n==null?void 0:n.panoId)===(r==null?void 0:r.panoId)?1:easeInQuart(Math.abs(((c=this.modelScene.parameter.progress)==null?0:c)-.5)*2)},g=this.modelScene.parameter.refinedScreen;(m||h.pano!==(g==null?void 0:g.pano)||h.opacity!==(g==null?void 0:g.opacity))&&this.modelScene.parameter.set(`refinedScreen`,h)}}this.panoVideo.object.position.copy(this.camera.position),this.panoVideo.updateTime(e);{let e=v.effect,{pano0:t,pano1:n}=this.modelScene.parameter;if(t&&n&&t!==n&&(e===`fly`||e===`model`)&&this.flyEffectUseDepthBuffer){if(((l=this.modelScene.parameter.pano0Depth)==null?void 0:l.panoId)!==t.panoId||((u=this.modelScene.parameter.pano1Depth)==null?void 0:u.panoId)!==n.panoId){let e=500,r=512;this.pano0DepthCubeRenderTarget?this.pano0DepthCubeRenderTarget.width!==512&&this.pano0DepthCubeRenderTarget.setSize(512,512):this.pano0DepthCubeRenderTarget=new three.WebGLCubeRenderTarget(512,{minFilter:three.NearestFilter,magFilter:three.NearestFilter,generateMipmaps:!1}),this.pano1DepthCubeRenderTarget?this.pano1DepthCubeRenderTarget.width!==512&&this.pano1DepthCubeRenderTarget.setSize(512,512):this.pano1DepthCubeRenderTarget=new three.WebGLCubeRenderTarget(512,{minFilter:three.NearestFilter,magFilter:three.NearestFilter,generateMipmaps:!1});let o=new three.CubeCamera(this.camera.near,this.camera.far,this.pano0DepthCubeRenderTarget);o.matrix.copy(t.matrix),o.matrixWorld.copy(o.matrix),o.matrixAutoUpdate=!1,renderDepthCube(this.renderer,this.modelScene,o,500);let s=new three.CubeCamera(this.camera.near,this.camera.far,this.pano1DepthCubeRenderTarget);s.matrix.copy(n.matrix),s.matrixWorld.copy(s.matrix),s.matrixAutoUpdate=!1,renderDepthCube(this.renderer,this.modelScene,s,500),this.modelScene.parameter.set({pano0Depth:{panoId:t.panoId,map:this.pano0DepthCubeRenderTarget.texture,mapSize:this.pano0DepthCubeRenderTarget.width,maxDepth:500},pano1Depth:{panoId:n.panoId,map:this.pano1DepthCubeRenderTarget.texture,mapSize:this.pano1DepthCubeRenderTarget.width,maxDepth:500}})}}else this.modelScene.parameter.set({pano0Depth:null,pano1Depth:null}),this.flyEffectUseDepthBuffer||(this.pano0DepthCubeRenderTarget&&(this.pano0DepthCubeRenderTarget.dispose(),this.pano0DepthCubeRenderTarget=void 0),this.pano1DepthCubeRenderTarget&&(this.pano1DepthCubeRenderTarget.dispose(),this.pano1DepthCubeRenderTarget=void 0))}}render(){return this.renderer.setRenderTarget(null),this.renderer.setScissorTest(!1),this.cardboard.render(this.scene,this.camera),!0}setCamera(e={}){}destroyHelper(){}updateHelperElementSize(){if(!this.helperElement)return;let e=new three.Vector2(this.element.offsetWidth,this.element.offsetHeight),t=e.x*this.viewport.left,n=e.y*(1-this.viewport.bottom-this.viewport.height),r=e.x*this.viewport.width,o=e.y*this.viewport.height;this.helperElement.style.marginLeft!==t+`px`&&(this.helperElement.style.marginLeft=t+`px`),this.helperElement.style.marginTop!==n+`px`&&(this.helperElement.style.marginTop=n+`px`),this.helperElement.style.width!==r+`px`&&(this.helperElement.style.width=r+`px`),this.helperElement.style.height!==o+`px`&&(this.helperElement.style.height=o+`px`)}intersect(e){var t,n;if(this.locationMotion.ended===!1){this.intersectMesh.visible=!1,this.activePanoMesh=void 0,this.activeTime=void 0;return}if(this.activePanoMesh&&this.activeTime&&e-this.activeTime>ACTIVE_TO_CURRENT_DELAY){let e=this.activePanoMesh,t=null;return this.panoMeshes.forEach((n,r)=>{n===e&&(t=r)}),t!==null&&this.moveToPano(panoParse(t),{},!0),this.activePanoMesh=void 0,this.activeTime=void 0,e}let r=this.camera.getDirection(new three.Vector3),o=new three.Raycaster(this.camera.position,r);o.params.Points={threshold:.1},o.firstHitOnly=!0,o.floorIndex=-1;let s,c=[],l=this.works.getObserver(this.currentPano),u=l?l.accessibleNodes.map(e=>panoStringify({panoIndex:e,workCode:l.work.workCode})):[];for(let e of u){let r=this.panoMeshes.get(e);if(r){let[e]=o.intersectObject((t=r.hitTestMesh)==null?r:t,!0);if(e){let t=(n=l==null?void 0:l.floorIndex)==null?0:n;c.push({panoMesh:r,intersection:Object.assign({floorIndex:t,floor:t},e)})}}}let[d]=c.sort((e,t)=>e.intersection.distance-t.intersection.distance);d?(s=d.intersection,this.activePanoMesh!==d.panoMesh&&(this.activePanoMesh=d.panoMesh,this.activeTime=e),this.intersectMesh.position.copy(d.panoMesh.position),this.intersectMesh.lookAt(this.camera.position)):(this.activePanoMesh=void 0,this.activeTime=void 0),s||(s=this.modelScene.intersectRaycaster(o)[0]);let f=createEvent(`intersect.update`,{raycaster:o,intersection:s==null?null:s,object:this.intersectMesh});if(this.emit(`intersect.update`,f),f.defaultPrevented){this.hideIntersectMesh();return}if(s&&s.face){let e=s.face.normal,t=new three.Quaternion;t.setFromUnitVectors(new three.Vector3(0,0,1),e),this.intersectMesh.quaternion.copy(t);let n=s.point.clone();this.intersectMesh.position.copy(n),d?this.intersectMesh.visible=!1:this.intersectMesh.visible=!0}else this.intersectMesh.visible=!1;return d==null?void 0:d.panoMesh}onPanGesture(){}onTapGesture(){}onPinchGesture(){}onMouseMove(){}onMouseOut(){}},HUMAN_EYE_POSITION=new three.Vector3(0,1.6,0),scratchObserverBox$1=new three.Box3,scratchVector3$2=new three.Vector3,defaultModelControllerCustomInitArgs=Object.assign({},defaultPanoramaLikeControllerCustomInitArgs),ModelController=class e extends PanoramaLikeController{static parseArgs(t){return t instanceof e?t:super.parseArgs(t)}static initAnimationEndState(e){var t,n,r,o,s,c;let l=this.parseArgs(e),u=l.works,{state:d,currentState:f}=e.initial,p=typeof d.panoIndex==`number`?{workCode:(r=(t=d.workCode)==null?(n=l.works[0])==null?void 0:n.workCode:t)==null?``:r,panoIndex:d.panoIndex}:{workCode:f.workCode,panoIndex:f.panoIndex},m=u.getObserver(p),h=clamp$1((o=d.fov)==null?!m||isFristPersonMode(f.mode)?f.fov:l.defaultFov:o,l.minFov,l.maxFov),g=(s=d.longitude)==null?f.longitude:s,_=clamp$1(typeof l.minLatitude==`function`?l.minLatitude(h):l.minLatitude,-Math.PI/2,Math.PI/2),v=clamp$1(typeof l.maxLatitude==`function`?l.maxLatitude(h):l.maxLatitude,-Math.PI/2,Math.PI/2),y=clamp$1((c=d.latitude)==null?!m||isFristPersonMode(f.mode)?f.latitude:l.defaultLatitude:c,_,v),b=new three.Vector3;if(l.initial.state.offset)b.copy(l.initial.state.offset);else if(m)b.copy(m.position).applyMatrix4(m.work.transform);else{let e=coordinatesToVector(f).setLength(f.distance);b.copy(l.initial.currentState.offset).sub(e)}return{workCode:p.workCode,panoIndex:p.panoIndex,mode:`Model`,longitude:g,latitude:y,fov:h,offset:b,distance:0}}constructor(t){let n=e.parseArgs(t);super(n),this.mode=`Model`,this.locationMotion=new Motion({x:this.camera.pose.offset.x,y:this.camera.pose.offset.y,z:this.camera.pose.offset.z,distance:this.camera.pose.distance}),this.modelAlphaMotion=new Motion({modelAlpha:this.modelScene.parameter.resolveValue().modelAlpha}),this.perspToOrthoMotion=new Motion({perspToOrtho:this.camera.perspToOrtho.x})}updateConfiguration(e){return super.updateConfiguration(e)}destroy(){super.destroy(),this.locationMotion.dispose()}isReady(){return this.locationMotion.ended===!1?!1:super.isReady()}updateWork(t,n,r,o){this.works=t;let s=e.initAnimationEndState(Object.assign(Object.assign({},this),{initial:{currentState:Object.assign(Object.assign({},this.currentPano),this.camera.pose),duration:r.duration,effect:r.effect,state:n,userAction:o}}));return(s.workCode!==this.currentPano.workCode||s.panoIndex!==this.currentPano.panoIndex||s.longitude!==this.cameraMotion.value.longitude||s.latitude!==this.cameraMotion.value.latitude||s.fov!==this.cameraMotion.value.fov)&&this.moveToPosition(s.offset,{duration:0,longitude:s.longitude,latitude:s.latitude,fov:s.fov},o),!0}updateCamera(e,t,n){return this.initAnimationReady.then(()=>{this.userAction=n,this.stopMomentumMovement();let r={},o={};return r.distance=0,e.offset!==void 0&&(r.x=e.offset.x,r.y=e.offset.y,r.z=e.offset.z),e.longitude!==void 0&&(o.longitude=e.longitude),e.latitude!==void 0&&(o.latitude=e.latitude),e.fov!==void 0&&(o.fov=e.fov),this.locationMotion.set(r,t).catch(noop),this.cameraMotion.set(o,t).catch(noop)})}updateCameraWithKeyframes(e,t,n){return this.initAnimationReady.then(()=>{this.userAction=n,this.stopMomentumMovement();let r=[],o=[];for(let t of e)r.push({key:t.key,progress:t.progress,value:{distance:0,x:t.value.offset.x,y:t.value.offset.x,z:t.value.offset.x}}),o.push({key:t.key,progress:t.progress,value:{longitude:t.value.longitude,latitude:t.value.latitude,fov:t.value.fov}});return this.locationMotion.setKeyframes(r,t).catch(noop),this.cameraMotion.setKeyframes(e,t)})}updateTime(e,t,...n){if(this.destroyed)return;let r={},o={};if(this.modelAlphaMotion.ended||(this.modelAlphaMotion.update(e),r.modelAlpha=this.modelAlphaMotion.value.modelAlpha),this.modelScene.parameter.modelAlpha===0&&this.modelScene.parameter.progress!==1){let{pano0:e,pano1:t}=this.modelScene.parameter;e&&e.map!==(t==null?void 0:t.map)&&e.map.dispose(),r.progress=1,r.pano0=r.pano1=t}if(this.perspToOrthoMotion.ended||(this.perspToOrthoMotion.update(e),this.camera.perspToOrtho.setScalar(clamp$1(this.perspToOrthoMotion.value.perspToOrtho,0,1))),!this.locationMotion.ended){this.locationMotion.update(e),o.distance=this.locationMotion.value.distance,o.offset=new three.Vector3(this.locationMotion.value.x,this.locationMotion.value.y,this.locationMotion.value.z);let t=new three.Vector3(this.locationMotion.value.x,this.locationMotion.value.y,this.locationMotion.value.z),n=[];for(let e of this.works){let r=this.modelScene.models.find(t=>t.work===e);if(!(!r||r.visible===!1)&&!(e.observers.length<=0)&&(scratchObserverBox$1.copy(e.observerBox).expandByScalar(10).applyMatrix4(e.transform),scratchObserverBox$1.containsPoint(t)))for(let t of e.observers)n.push(t)}let r=arrayMin(n,e=>scratchVector3$2.copy(e.position).applyMatrix4(e.work.transform).distanceTo(t));this.currentPano=r?{workCode:r.work.workCode,panoIndex:r.panoIndex}:{workCode:``,panoIndex:0}}this.cameraMotion.ended||(this.cameraMotion.update(e),o.longitude=this.cameraMotion.value.longitude,o.latitude=this.cameraMotion.value.latitude,o.fov=this.cameraMotion.value.fov),isEmptyObject(r)||this.modelScene.parameter.set(r),isEmptyObject(o)||this.setCamera(o);let s=this.works.getObserver(this.currentPano);if(this.intersectMesh&&this.intersectMesh.parent&&s&&s.position.y-s.standingPosition.y>10){let e=clamp$1(this.camera.position.distanceTo(this.intersectMesh.position)*(2*Math.tan(.5*this.camera.fov/180*Math.PI))/5,.5);this.intersectMesh.scale.setScalar(e)}else this.intersectMesh.scale.setScalar(1)}initAnimation(){return this.destroyed?Promise.resolve():new Promise(t=>{let{state:n,currentState:r,duration:o,userAction:s}=this.initial;this.userAction=s;let c=e.initAnimationEndState(this),l={modelAlpha:1},u={perspToOrtho:0},d={longitude:c.longitude,latitude:c.latitude,fov:c.fov,duration:o,moveStartCallback:e=>{this.perspToOrthoMotion.set(u,o).catch(noop),this.modelAlphaMotion.set(l,o).catch(noop),this.emit(`initAnimation.start`,createEvent(`initAnimation.start`,{state:e,userAction:this.userAction}))},moveEndCallback:e=>{this.emit(`initAnimation.end`,createEvent(`initAnimation.end`,{state:e,userAction:this.userAction})),t()},moveCancelCallback:()=>{let e=this.currentPano,n=Object.assign(Object.assign({},e),{mode:this.mode,longitude:this.camera.pose.longitude,latitude:this.camera.pose.latitude,fov:this.camera.pose.fov,offset:this.camera.pose.offset.clone(),distance:this.camera.pose.distance});this.emit(`initAnimation.end`,createEvent(`initAnimation.end`,{state:n,userAction:this.userAction})),t()}};this.moveToPosition(c.offset,d,s)})}getTargetState(){let e=this.cameraMotion.getKeyFrameSegment(now())[1],t=this.locationMotion.getKeyFrameSegment(now())[1];return Object.assign(Object.assign({},this.currentPano),{mode:this.mode,longitude:e.value.longitude,latitude:e.value.latitude,fov:e.value.fov,offset:new three.Vector3(t.value.x,t.value.y,t.value.z),distance:t.value.distance})}moveToPano(e,t={},n){let r=this.works.getObserver(e);if(r){let e=new three.Vector3().copy(r.position).applyMatrix4(r.work.transform);this.moveToPosition(e,t,n)}}moveToPosition(e,t={},n){var r,o,s;this.userAction=n,this.stopMomentumMovement();let c=now(),l=new three.Vector3(this.locationMotion.value.x,this.locationMotion.value.y,this.locationMotion.value.z),u=l.distanceTo(e),d=this.locationMotion.getProgressVelocity(c),f=0;for(let e=1;e<this.locationMotion.keyframes.length;e++){let{x:t,y:n,z:r}=this.locationMotion.keyframes[e-1].value,{x:o,y:s,z:c}=this.locationMotion.keyframes[e].value;f+=Math.sqrt(Math.pow(o-t,2)+Math.pow(s-n,2)+Math.pow(c-r,2))}let p=u===0?0:d*f/u,m=this.calculateMovingDuration(t.duration,u),h={x:e.x,y:e.y,z:e.z,distance:0},g={longitude:t.longitude,latitude:t.latitude,fov:t.fov},_=[];for(let e of this.works){let t=this.modelScene.models.find(t=>t.work===e);if(!(!t||t.visible===!1)&&!(e.observers.length<=0)&&(scratchObserverBox$1.copy(e.observerBox).expandByScalar(10).applyMatrix4(e.transform),scratchObserverBox$1.containsPoint(l)))for(let t of e.observers)_.push(t)}let v=arrayMin(_,e=>scratchVector3$2.copy(e.position).applyMatrix4(e.work.transform).distanceTo(l)),y=v?{workCode:v.work.workCode,panoIndex:v.panoIndex}:{workCode:``,panoIndex:0},b=Object.assign(Object.assign({},y),{mode:this.mode,longitude:(r=g.longitude)==null?this.camera.pose.longitude:r,latitude:(o=g.latitude)==null?this.camera.pose.latitude:o,fov:(s=g.fov)==null?this.camera.pose.fov:s,offset:e.clone(),distance:0}),S=this.currentPano;this.emit(`pano.moveTo`,createEvent(`pano.moveTo`,{options:t,prevPano:S,progress:0,state:b,userAction:this.userAction,error:null})),t.moveStartCallback&&t.moveStartCallback(b),this.cameraMotion.set(g,m).catch(noop),this.locationMotion.set(h,m,p).then(()=>{for(let e of this.modelScene.children)e instanceof Model&&e.show();let e=Object.assign(Object.assign(Object.assign({},y),{mode:this.mode}),clonePose(this.camera.pose));this.emit(`pano.arrived`,createEvent(`pano.arrived`,{options:t,prevPano:S,progress:0,state:e,userAction:this.userAction,error:null})),t.moveEndCallback&&t.moveEndCallback(e)},()=>{t.moveCancelCallback&&t.moveCancelCallback(),this.emit(`pano.cancel`,createEvent(`pano.cancel`,{options:t,prevPano:S,progress:0,state:b,userAction:this.userAction,error:null}))})}onTapGesture(e){let t=e.center.raycaster;this.stopMomentumMovement();let[n]=this.modelScene.intersectRaycaster(t);if(n&&n.face){let e=n.face.normal,t=n.point;if(new three.Vector3(0,1,0).angleTo(e)>Math.PI/3){let r=new three.Raycaster;r.firstHitOnly=!0;let o=e.clone().setLength(.3).add(t);r.set(o,new three.Vector3(0,-1,0)),n=this.modelScene.intersectRaycaster(r)[0]}}if(n){let t=new three.Vector3().copy(n.point).add(HUMAN_EYE_POSITION),r=[];for(let e of this.works){let n=this.modelScene.models.find(t=>t.work===e);if(!(!n||n.visible===!1)&&!(e.observers.length<=0)&&(scratchObserverBox$1.copy(e.observerBox).expandByScalar(10).applyMatrix4(e.transform),scratchObserverBox$1.containsPoint(t)))for(let t of e.observers)r.push(t)}let[o,s]=arrayMin(r,e=>scratchVector3$2.copy(e.position).applyMatrix4(e.work.transform).distanceTo(t),!0);o&&s<5&&(t.y=scratchVector3$2.copy(o.position).applyMatrix4(o.work.transform).y),e.state.offset.copy(t),e.state.distance=0,this.emit(`gesture.tap`,e),e.defaultPrevented||this.moveToPosition(t,{},!0)}else this.emit(`gesture.tap`,e),e.defaultPrevented||this.cameraBounce()}},scratchObserverBox=new three.Box3,scratchVector3$1=new three.Vector3,minDistance=.5,PANGESTURE_FORWARD_ANGLE=Math.PI/7,defaultMapviewControllerCustomInitArgs={defaultLongitude:Math.PI/4,defaultLatitude:Math.PI/4,defaultDistance:150,maxLatitude:Math.PI/2,minLatitude:0,cameraType:`auto`,cameraFence:null,intersectMeshCreator:()=>new IntersectMesh},MapviewController=class e extends BaseController{static parseArgs(t){var n,r,o,s,c,l,u,d;if(t instanceof e)return t;let f=super.parseArgs(t);return Object.assign(Object.assign({},f),{defaultLongitude:(n=t.defaultLongitude)==null?defaultMapviewControllerCustomInitArgs.defaultLongitude:n,defaultLatitude:(r=t.defaultLatitude)==null?defaultMapviewControllerCustomInitArgs.defaultLatitude:r,defaultDistance:(o=t.defaultDistance)==null?defaultMapviewControllerCustomInitArgs.defaultDistance:o,maxLatitude:(s=t.maxLatitude)==null?defaultMapviewControllerCustomInitArgs.maxLatitude:s,minLatitude:(c=t.minLatitude)==null?defaultMapviewControllerCustomInitArgs.minLatitude:c,cameraType:(l=t.cameraType)==null?defaultMapviewControllerCustomInitArgs.cameraType:l,cameraFence:(u=t.cameraFence)==null?defaultMapviewControllerCustomInitArgs.cameraFence:u,intersectMeshCreator:(d=t.intersectMeshCreator)==null?defaultMapviewControllerCustomInitArgs.intersectMeshCreator:d})}static distanceFromModel(e,t,n){let r=e.boundingBox,o=r.isEmpty()?10:Math.pow(Math.pow(r.max.x-r.min.x+1,2)+Math.pow(r.max.y-r.min.y+1,2)+Math.pow(r.max.z-r.min.z+1,2),1/2);o=isNaN(o)||!isFinite(o)?1:o;let s=o/2/Math.tan(Math.PI*t/360);return n<1&&(s/=n),isNaN(s)||!isFinite(s)?o:s}static initAnimationEndState(t){var n,r,o,s,c,l,u;let d=this.parseArgs(t),f=d.works,p=d.modelScene,{state:m,currentState:h}=t.initial,g=typeof m.panoIndex==`number`?{workCode:(o=(n=m.workCode)==null?(r=d.works[0])==null?void 0:r.workCode:n)==null?``:o,panoIndex:m.panoIndex}:{workCode:h.workCode,panoIndex:h.panoIndex},_=(s=m.fov)==null?60:s,v=clamp$1(typeof d.minLatitude==`function`?d.minLatitude(_):d.minLatitude,-Math.PI/2,Math.PI/2),y=clamp$1(typeof d.maxLatitude==`function`?d.maxLatitude(_):d.maxLatitude,-Math.PI/2,Math.PI/2),b=clamp$1((c=m.latitude)==null?isThirdPersonMode(h.mode)?h.latitude:d.defaultLatitude:c,v,y),S=e.distanceFromModel(d.modelScene,_,d.camera.aspect),C=new three.Vector3,w=(l=m.distance)==null?Math.min(d.defaultDistance,S):l,T=(u=m.longitude)==null?isThirdPersonMode(h.mode)?h.longitude:d.defaultLongitude:u;if(m.offset)C.copy(m.offset);else{let e=f.getObserver(g);d.defaultDistance<S&&e?(C.copy(e.position).applyMatrix4(e.work.transform),m.longitude===void 0&&(T=h.longitude)):(p.boundingBox.getCenter(C),w=S)}return Object.assign(Object.assign({},g),{mode:`Mapview`,longitude:T,latitude:b,fov:_,offset:C,distance:w})}constructor(t){let n=e.parseArgs(t);super(n),this.mode=`Mapview`,this.defaultLongitude=n.defaultLongitude,this.defaultLatitude=n.defaultLatitude,this.defaultDistance=n.defaultDistance,this.maxLatitude=n.maxLatitude,this.minLatitude=n.minLatitude,this.cameraType=n.cameraType,this.cameraFence=n.cameraFence,this.locationMotion=new Motion({x:this.camera.pose.offset.x,y:this.camera.pose.offset.y,z:this.camera.pose.offset.z,distance:this.camera.pose.distance}),this.modelAlphaMotion=new Motion({modelAlpha:this.modelScene.parameter.resolveValue().modelAlpha}),this.perspToOrthoMotion=new Motion({perspToOrtho:this.camera.perspToOrtho.x}),this.pendingTextureId=null,this.textureLoader=new TextureLoader,this.intersectMeshCreator=n.intersectMeshCreator,this.intersectMesh=this.intersectMeshCreator(),this.intersectMesh.name=`intersect`,this.intersectMesh.visible=!1,this.helper.add(this.intersectMesh)}updateConfiguration(e){if(super.updateConfiguration(e)===!1)return!1;if(e.defaultLongitude!==void 0&&this.defaultLongitude!==e.defaultLongitude&&(this.defaultLongitude=e.defaultLongitude),e.defaultLatitude!==void 0&&this.defaultLatitude!==e.defaultLatitude&&(this.defaultLatitude=e.defaultLatitude),e.defaultDistance!==void 0&&this.defaultDistance!==e.defaultDistance&&(this.defaultDistance=e.defaultDistance),e.maxLatitude!==void 0&&this.maxLatitude!==e.maxLatitude&&(this.maxLatitude=e.maxLatitude),e.minLatitude!==void 0&&this.minLatitude!==e.minLatitude&&(this.minLatitude=e.minLatitude),e.cameraType!==void 0&&this.cameraType!==e.cameraType&&(this.cameraType=e.cameraType),this.cameraFence instanceof three.Box3&&e.cameraFence instanceof three.Box3||this.cameraFence instanceof three.Sphere&&e.cameraFence instanceof three.Sphere?this.cameraFence.equals(e.cameraFence)||(this.cameraFence=e.cameraFence):e.cameraFence!==void 0&&(this.cameraFence=e.cameraFence),e.intersectMeshCreator!==void 0&&this.intersectMeshCreator!==e.intersectMeshCreator){this.intersectMeshCreator=e.intersectMeshCreator;let t=this.intersectMesh;this.intersectMesh=this.intersectMeshCreator(),this.intersectMesh.name=t.name,this.intersectMesh.visible=t.visible;let n=this.intersectMesh.parent;n&&n.add(this.intersectMesh),t.dispose()}return!0}destroy(){super.destroy(),this.pendingTextureId=null,this.locationMotion.dispose(),this.panState=void 0,this.intersectMesh.dispose(),this.helper.remove(this.intersectMesh)}isReady(){return this.locationMotion.ended===!1?!1:super.isReady()}updateWork(t,n,r,o){this.userAction=o,this.works=t;let s=e.initAnimationEndState(Object.assign(Object.assign({},this),{initial:{currentState:Object.assign(Object.assign({},this.currentPano),this.camera.pose),duration:r.duration,effect:r.effect,state:n,userAction:o}}));this.currentPano={workCode:s.workCode,panoIndex:s.panoIndex};let c={longitude:s.longitude,latitude:s.latitude,fov:s.fov},l={x:s.offset.x,y:s.offset.y,z:s.offset.z,distance:s.distance};return(c.longitude!==this.cameraMotion.value.longitude||c.latitude!==this.cameraMotion.value.latitude||c.fov!==this.cameraMotion.value.fov)&&this.cameraMotion.set(c,r.duration).catch(noop),(l.x!==this.locationMotion.value.x||l.y!==this.locationMotion.value.y||l.z!==this.locationMotion.value.z||l.distance!==this.locationMotion.value.distance)&&this.locationMotion.set(l,r.duration).catch(noop),!0}updateModel(e){super.updateModel(e),this.hideIntersectMesh()}updateCamera(e,t,n){return this.initAnimationReady.then(()=>{this.userAction=n,this.stopMomentumMovement();let r={},o={};return e.distance!==void 0&&(r.distance=e.distance),e.offset!==void 0&&(r.x=e.offset.x,r.y=e.offset.y,r.z=e.offset.z),e.longitude!==void 0&&(o.longitude=e.longitude),e.latitude!==void 0&&(o.latitude=e.latitude),e.fov!==void 0&&(o.fov=e.fov),this.locationMotion.set(r,t).catch(noop),this.cameraMotion.set(o,t).catch(noop)})}updateCameraWithKeyframes(e,t,n){return this.initAnimationReady.then(()=>{this.userAction=n,this.stopMomentumMovement();let r=[],o=[];for(let t of e)r.push({key:t.key,progress:t.progress,value:{distance:t.value.distance,x:t.value.offset.x,y:t.value.offset.x,z:t.value.offset.x}}),o.push({key:t.key,progress:t.progress,value:{longitude:t.value.longitude,latitude:t.value.latitude,fov:t.value.fov}});return this.locationMotion.setKeyframes(r,t).catch(noop),this.cameraMotion.setKeyframes(e,t)})}updateTime(e,t){if(this.destroyed)return;let n={},r={};if(this.locationMotion.ended||(this.locationMotion.update(e),r.distance=this.locationMotion.value.distance,r.offset=new three.Vector3(this.locationMotion.value.x,this.locationMotion.value.y,this.locationMotion.value.z)),this.cameraMotion.ended||(this.cameraMotion.update(e),r.longitude=this.cameraMotion.value.longitude,r.latitude=this.cameraMotion.value.latitude,r.fov=this.cameraMotion.value.fov),this.modelAlphaMotion.ended||(this.modelAlphaMotion.update(e),n.modelAlpha=this.modelAlphaMotion.value.modelAlpha),this.modelScene.parameter.modelAlpha===0&&this.modelScene.parameter.progress!==1){let{pano0:e,pano1:t}=this.modelScene.parameter;e&&e.map!==(t==null?void 0:t.map)&&e.map.dispose(),n.progress=1,n.pano0=n.pano1=t}let o=0;if(this.cameraType===`auto`?o=Math.abs(Math.PI/2-this.cameraMotion.value.latitude)<.02||Math.abs(-Math.PI/2-this.cameraMotion.value.latitude)<.02?1:0:this.cameraType===`perspective`?o=0:this.cameraType===`orthographic`&&(o=1),this.perspToOrthoMotion.getTargetKeyframe().value.perspToOrtho!==o&&this.perspToOrthoMotion.set({perspToOrtho:o},500).catch(noop),this.perspToOrthoMotion.ended||(this.perspToOrthoMotion.update(e),this.camera.perspToOrtho.setScalar(clamp$1(this.perspToOrthoMotion.value.perspToOrtho,0,1))),isEmptyObject(n)||this.modelScene.parameter.set(n),isEmptyObject(r)||this.setCamera(r),this.cameraFence&&!this.panState&&!this.pinchState&&!this.mouseWheelState&&!this.inMomentumMovement&&this.locationMotion.ended&&this.perspToOrthoMotion.ended&&this.cameraMotion.ended){let e=coordinatesToVector(this.camera.pose,new three.Vector3),t=new three.Vector3().copy(this.camera.pose.offset).sub(e.clone().multiplyScalar(this.camera.pose.distance));if(this.cameraFence.distanceToPoint(t)>.01){let e=this.cameraFence.clampPoint(t,new three.Vector3),n=this.camera.pose.offset.clone().add(e).sub(t),r=Object.assign(Object.assign({},this.currentPano),{mode:this.mode,longitude:this.camera.pose.longitude,latitude:this.camera.pose.latitude,fov:this.camera.pose.fov,offset:n,distance:this.camera.pose.distance});this.fixFinalState(r),this.locationMotion.set({x:r.offset.x,y:r.offset.y,z:r.offset.z,distance:r.distance},300).catch(noop)}}if(this.intersectMesh&&this.intersectMesh.parent){let e=clamp$1(this.camera.position.distanceTo(this.intersectMesh.position)*(2*Math.tan(.5*this.camera.fov/180*Math.PI))/5,.5);this.intersectMesh.scale.setScalar(e)}else this.intersectMesh.scale.setScalar(1)}getTargetState(){let e=this.cameraMotion.getKeyFrameSegment(now())[1],t=this.locationMotion.getKeyFrameSegment(now())[1];return Object.assign(Object.assign({},this.currentPano),{mode:this.mode,longitude:e.value.longitude,latitude:e.value.latitude,fov:e.value.fov,distance:t.value.distance,offset:new three.Vector3(t.value.x,t.value.y,t.value.z)})}initAnimation(){return this.destroyed?Promise.resolve():new Promise(t=>{let{state:n,currentState:r,duration:o,userAction:s}=this.initial;this.userAction=s;let c=e.initAnimationEndState(this),l={longitude:c.longitude,latitude:c.latitude,fov:c.fov},u={x:c.offset.x,y:c.offset.y,z:c.offset.z,distance:c.distance};this.emit(`initAnimation.start`,createEvent(`initAnimation.start`,{state:c,userAction:this.userAction})),this.perspToOrthoMotion.set({perspToOrtho:0},o).catch(noop),this.modelAlphaMotion.set({modelAlpha:1},o/3).catch(noop),this.cameraMotion.set(l,o).catch(noop),this.locationMotion.set(u,o).then(()=>{this.emit(`initAnimation.end`,createEvent(`initAnimation.end`,{state:c,userAction:this.userAction}))},e=>{let t=Object.assign(Object.assign(Object.assign({},this.currentPano),{mode:this.mode}),clonePose(this.camera.pose));this.emit(`initAnimation.end`,createEvent(`initAnimation.end`,{state:t,userAction:this.userAction}))}).then(()=>{t()})})}getForwardObserverOrNot(e){let[t]=this.modelScene.intersectRaycaster(e);if(!t)return null;let n=[];for(let t of this.works){let r=this.modelScene.models.find(e=>e.work===t);if(!(!r||r.visible===!1)&&!(t.observers.length<=0)&&(scratchObserverBox.copy(t.observerBox).expandByScalar(10).applyMatrix4(t.transform),scratchObserverBox.containsPoint(e.ray.origin)||e.ray.intersectsBox(scratchObserverBox)))for(let e of t.observers)n.push(e)}let[r,o]=arrayMin(n,e=>scratchVector3$1.copy(e.standingPosition).applyMatrix4(e.work.transform).distanceTo(t.point),!0);return r&&o<Math.max(r.standingPosition.distanceTo(this.camera.position)/5,10)?r:null}coordinatesForOffset(e){let t=this.renderer.getSize(new three.Vector2);return{longitude:-2*e.x/(t.x*this.viewport.width),latitude:2*e.y/(t.y*this.viewport.height)}}requestMomentumMovement(e,t,n,r){if(this.inMomentumMovement===null)return;r=Math.max(r,1);let o=Object.assign({},n),s={longitude:0,latitude:0,x:0,y:0,z:0};for(let e=0;e<r;e++)o.longitude*=.996,o.latitude*=.996*.998,o.x*=.99,o.y*=.99,o.z*=.99,s.longitude+=o.longitude,s.latitude+=o.latitude,s.x+=o.x,s.y+=o.y,s.z+=o.z;let c=this.cameraMotion.value.fov,l=formatRad$1(this.cameraMotion.value.longitude+s.longitude),u=clamp$1(typeof this.minLatitude==`function`?this.minLatitude(c):this.minLatitude,-Math.PI/2,Math.PI/2),d=clamp$1(typeof this.maxLatitude==`function`?this.maxLatitude(c):this.maxLatitude,-Math.PI/2,Math.PI/2),f=clamp$1(this.cameraMotion.value.latitude+s.latitude,u,d),p=new three.Vector3(this.locationMotion.value.x+s.x,this.locationMotion.value.y+s.y,this.locationMotion.value.z+s.z),m=Object.assign(Object.assign({},this.currentPano),{mode:this.mode,longitude:l,latitude:f,offset:p,fov:c,distance:this.locationMotion.value.distance}),h=e.state.offset.clone().sub(coordinatesToVector(e.state).setLength(m.distance)),g=!(Math.abs(o.longitude)>1e-4||Math.abs(o.latitude)>1e-4||Math.abs(o.x)>1e-4||Math.abs(o.y)>1e-4||Math.abs(o.z)>1e-4);(this.cameraFence?this.cameraFence.containsPoint(h):!0)===!1&&(g=!0);let _=createEvent(`gesture.momentum`,Object.assign(Object.assign({},e),{isFirst:t,isFinal:g,state:m}));if(this.emit(`gesture.create`,_),this.inMomentumMovement.event=_,this.emit(`gesture.momentum`,_),e.defaultPrevented){this.inMomentumMovement=null;return}this.inMomentumMovement&&(this.cameraMotion.set({longitude:l,latitude:f},0).catch(noop),this.locationMotion.set({x:m.offset.x,y:m.offset.y,z:m.offset.z,distance:m.distance},0).catch(noop),g?this.inMomentumMovement=null:AnimationFrameLoop.shared.add((t,n)=>{this.requestMomentumMovement(e,!1,o,n)},!0))}fixFinalState(e){if(this.perspToOrthoMotion.getTargetKeyframe().value.perspToOrtho===1)return;let t=coordinatesToVector(e,new three.Vector3),n=new three.Vector3().copy(e.offset).sub(t.clone().setLength(e.distance)),r=new three.Raycaster(n,t);r.params.Points={threshold:.1},r.firstHitOnly=!0,r.hitFilter=e=>e.distance>minDistance+r.near,r.near=this.camera.near,r.far=this.camera.far;let o;if(o=this.modelScene.intersectRaycaster(r)[0],o&&o.distance<this.camera.near&&(o=void 0),!o){let e=new three.Plane(new three.Vector3(0,1,0),-this.modelScene.boundingBox.min.y),t=r.ray.intersectPlane(e,new three.Vector3);if(t){let e=t.distanceTo(r.ray.origin);e<1e3&&e>=r.near&&(o={distance:e,floorIndex:0,floor:0,point:t,object:this.scene,face:null})}}if(!o){let r=Math.max(e.distance,3);o={distance:r,floorIndex:0,floor:0,point:n.clone().add(t.clone().setLength(r)),object:this.scene,face:null}}o.distance>=this.camera.near&¬SimilarValue(e.distance,o.distance)&&(e.distance=o.distance,e.offset=o.point)}onPanGesture(e){this.userAction=e.userAction,this.stopMomentumMovement(),this.hideIntersectMesh();let t=e.pointers.length,n=this.panState,r=0,o=!1;e.pointerType===`mouse`&&(r=e.center.buttons,o=e.center.shiftKey),n&&r===0&&n.buttons!==0&&(r=n.buttons);let s=n==null?void 0:n.target;if(!s){let t=this.relativeClientPosition(e.center),n=this.createRaycasterFromCamera(t,this.camera);s=new three.Vector3().copy(n.ray.direction).multiplyScalar(3).add(n.ray.origin);let[r]=this.modelScene.intersectRaycaster(n);if(!r&&n.ray.direction.y<-.3){let e=new three.Plane(new three.Vector3(0,1,0),0),t=n.ray.intersectPlane(e,new three.Vector3);if(t){let e=t.distanceTo(n.ray.origin);e<1e4&&e>=n.near&&(r={distance:e,floorIndex:0,floor:0,point:t,object:this.scene})}}if(r)s.copy(r.point);else{let e=new three.Vector3().copy(this.camera.pose.offset).sub(this.camera.position).normalize(),t=new three.Plane().setFromNormalAndCoplanarPoint(e,this.camera.pose.offset);n.ray.intersectPlane(t,s)}}if(e.isFinal?this.panState=void 0:this.panState={target:s,buttons:r,pointerLength:t,defaultPrevented:e.defaultPrevented,x:e.center.x,y:e.center.y},n===void 0||n.pointerLength!==t){this.emit(`gesture.pan`,e);return}if(t>1||r===2||o){let t={x:e.center.x-n.x,y:e.center.y-n.y},r=new three.Vector3(this.locationMotion.value.x,this.locationMotion.value.y,this.locationMotion.value.z),o=coordinatesToVector(this.cameraMotion.value).setLength(this.locationMotion.value.distance).add(r),s=new three.Vector3().copy(o).sub(n.target).length();s*=Math.tan(this.camera.pose.fov/2*Math.PI/180);let c=this.renderer.getSize(new three.Vector2),l=2*t.x*s/c.y,u=2*t.y*s/c.y,d=new three.Vector3;d.setFromMatrixColumn(this.camera.matrix,0),d.multiplyScalar(-l),r.add(d),this.camera.pose.latitude<PANGESTURE_FORWARD_ANGLE?d.setFromMatrixColumn(this.camera.matrix,1):(d.setFromMatrixColumn(this.camera.matrix,0),d.crossVectors(this.camera.up,d)),d.multiplyScalar(u),r.add(d);let f=Object.assign(Object.assign({},this.currentPano),{mode:this.mode,longitude:this.camera.pose.longitude,latitude:this.camera.pose.latitude,fov:this.camera.pose.fov,offset:r,distance:this.camera.pose.distance});if(e.state=f,this.emit(`gesture.pan`,e),e.defaultPrevented){this.panState&&(this.panState.defaultPrevented=e.defaultPrevented);return}if(e.isFinal&&n.defaultPrevented)return;if(this.locationMotion.set({x:f.offset.x,y:f.offset.y,z:f.offset.z},0).catch(noop),e.isFinal&&(this.fixFinalState(f),Object.assign(e,{__fixFinalState:!0}),this.locationMotion.set({distance:f.distance,x:f.offset.x,y:f.offset.y,z:f.offset.z},0).catch(noop)),e.isFinal){let t=this.renderer.getSize(new three.Vector2),n=2*e.velocityX*s/t.y,r=2*e.velocityY*s/t.y,o=new three.Vector3,c=new three.Vector3;o.setFromMatrixColumn(this.camera.matrix,0),o.multiplyScalar(-n),c.add(o),this.camera.pose.latitude<PANGESTURE_FORWARD_ANGLE?o.setFromMatrixColumn(this.camera.matrix,1):(o.setFromMatrixColumn(this.camera.matrix,0),o.crossVectors(this.camera.up,o)),o.multiplyScalar(r),c.add(o),this.inMomentumMovement={uuid:createUuid()},this.requestMomentumMovement(e,!0,{longitude:0,latitude:0,x:c.x,y:c.y,z:c.z},0)}}else{let t={x:e.center.x-n.x,y:e.center.y-n.y},r=this.coordinatesForOffset(t),o=formatRad$1(this.cameraMotion.value.longitude+r.longitude),s=this.camera.pose.fov,c=clamp$1(typeof this.minLatitude==`function`?this.minLatitude(s):this.minLatitude,-Math.PI/2,Math.PI/2),l=clamp$1(typeof this.maxLatitude==`function`?this.maxLatitude(s):this.maxLatitude,-Math.PI/2,Math.PI/2),u=clamp$1(this.cameraMotion.value.latitude+r.latitude,c,l);this.camera.aspect<1&&Math.abs(e.overallVelocityX)>.2&&Math.atan2(Math.abs(e.overallVelocityY),Math.abs(e.overallVelocityX))<Math.PI/6.923&&(u=this.cameraMotion.value.latitude);let d=Object.assign(Object.assign({},this.currentPano),{mode:this.mode,longitude:o,latitude:u,fov:s,offset:this.camera.pose.offset,distance:this.camera.pose.distance});if(e.isFinal&&Object.assign(e,{__fixFinalState:!0}),e.state=d,this.emit(`gesture.pan`,e),e.defaultPrevented||e.isFinal&&n.defaultPrevented)return;if(e.isFinal?this.locationMotion.set({distance:d.distance,x:d.offset.x,y:d.offset.y,z:d.offset.z},0).catch(noop):this.cameraMotion.set({longitude:d.longitude,latitude:d.latitude},0).catch(noop),e.isFinal){let t=e.velocityX,n=e.velocityY;this.inMomentumMovement={uuid:createUuid()},this.requestMomentumMovement(e,!0,Object.assign(Object.assign({},this.coordinatesForOffset({x:t,y:n})),{x:0,y:0,z:0}),0)}}}onPinchGesture(t){var n;if(!this.initAnimationIsReady)return;this.userAction=t.userAction,this.stopMomentumMovement(),this.hideIntersectMesh();let r=(n=this.pinchState)==null?void 0:n.distance;if(t.isFirst){this.pinchState={x:t.center.x,y:t.center.y,scale:1,distance:this.locationMotion.value.distance};return}if(r===void 0)return;let o=this.modelScene.boundingBox.getCenter(new three.Vector3),s=e.distanceFromModel(this.modelScene,this.cameraMotion.value.fov,this.camera.aspect),c=clamp$1(r/t.scale,minDistance,1/0),l=t.state.offset.clone().sub(coordinatesToVector(t.state).setLength(c)),u=this.modelScene.boundingBox.containsPoint(l),d;if(!u&&this.pinchState&&this.pinchState.scale>t.scale&&o.distanceTo(l)>s?d=t.state.distance:(d=c,this.pinchState&&(this.pinchState.scale=t.scale)),t.state.distance=d,this.emit(`gesture.pinch`,t),!t.defaultPrevented&&(this.locationMotion.set({distance:t.state.distance},0).catch(noop),t.pointerType!==`mouse`&&(t.type=`gesture.pan`,this.onPanGesture(t)),t.isFinal)){if(!(`__fixFinalState`in t)){let e=t.state;this.fixFinalState(t.state);let n={x:e.offset.x,y:e.offset.y,z:e.offset.z,distance:e.distance};this.locationMotion.set(n,0).catch(noop)}this.panState=void 0,this.pinchState=void 0}}onMouseMove(e){var t,n;if(!this.intersectMesh.parent||this.panState||this.pinchState||this.mouseWheelState||(this.emit(`gesture.mousemove`,e),e.defaultPrevented))return;let r=e.center.raycaster;if(e.isFinal&&this.intersectMesh.parent&&this.intersectMesh.visible===!0){this.hideIntersectMesh();return}let[o]=this.modelScene.intersectRaycaster(r),s=createEvent(`intersect.update`,{raycaster:r,intersection:o==null?null:o,object:this.intersectMesh});if(this.emit(`intersect.update`,s),s.defaultPrevented){this.hideIntersectMesh();return}if(o){let e=(n=(t=o.face)==null?void 0:t.normal)==null?new three.Vector3().copy(r.ray.direction).multiplyScalar(-1):n,s=e.clone(),c=o.point.clone();this.intersectMesh.position.copy(c);let l=c.clone().add(s);if(this.intersectMesh.lookAt(l),Math.abs(e.y)>.99){let e=this.camera.position.clone().sub(c);this.intersectMesh.rotation.z=-Math.atan2(e.z,e.x)}this.intersectMesh.visible=!0,this.needsRender=!0}else this.hideIntersectMesh()}onMouseWheel(t){if(this.initAnimationIsReady)if(this.userAction=t.userAction,this.stopMomentumMovement(),this.hideIntersectMesh(),t.isFinal){let e=Object.assign(Object.assign({},this.currentPano),{mode:this.mode,longitude:this.cameraMotion.value.longitude,latitude:this.cameraMotion.value.latitude,fov:this.cameraMotion.value.fov,offset:new three.Vector3(this.locationMotion.value.x,this.locationMotion.value.y,this.locationMotion.value.z),distance:this.locationMotion.value.distance});if(this.fixFinalState(e),this.emit(`gesture.mousewheel`,t),t.defaultPrevented)return;let n={x:e.offset.x,y:e.offset.y,z:e.offset.z,distance:e.distance};this.locationMotion.set(n,0).catch(noop)}else{let n=e.distanceFromModel(this.modelScene,this.cameraMotion.value.fov,this.camera.aspect),r=new three.Vector3(this.locationMotion.value.x,this.locationMotion.value.y,this.locationMotion.value.z),o=coordinatesToVector(this.cameraMotion.value,new three.Vector3).negate(),s=new three.Ray(r,o).intersectBox(this.modelScene.boundingBox,new three.Vector3);s&&(n+=s.distanceTo(r));let c=Math.max(this.locationMotion.value.distance-this.camera.near,0),l=t.center.delta/10*Math.max(c/5,.1);if(c<=n||l>0)if(this.locationMotion.value.distance-l>=minDistance){let e=this.locationMotion.value.distance-l;t.state.distance=e}else{let e=coordinatesToVector(this.cameraMotion.value);e.setLength(l),t.state.offset.add(e)}if(this.emit(`gesture.mousewheel`,t),t.defaultPrevented)return;this.locationMotion.set({distance:t.state.distance,x:t.state.offset.x,y:t.state.offset.y,z:t.state.offset.z},0).catch(noop)}}onTapGesture(e){var t;this.userAction=e.userAction,this.stopMomentumMovement();let n=e.center.raycaster,r=this.getForwardObserverOrNot(n);if(!r)this.emit(`gesture.tap`,e);else{let n={longitude:this.camera.pose.longitude,latitude:0},o=Object.assign(Object.assign({},e.state),{mode:`Panorama`,workCode:r.work.workCode,panoIndex:r.panoIndex,longitude:n.longitude,latitude:n.latitude,offset:r?r.position.clone():new three.Vector3,distance:0});if(e.state=o,this.emit(`gesture.tap`,e),!e.defaultPrevented&&(this.emit(`pano.select`,createEvent(`pano.select`,{prevPano:this.currentPano,state:o,userAction:e.userAction,options:n,progress:0,error:null})),r&&r.active)){let e=this.pendingTextureId=createUuid(),s=panoStringify({panoIndex:r.panoIndex,workCode:r.work.workCode}),c={right:r.images.work.getURL(r.images.right),left:r.images.work.getURL(r.images.left),up:r.images.work.getURL(r.images.up),down:r.images.work.getURL(r.images.down),front:r.images.work.getURL(r.images.front),back:r.images.work.getURL(r.images.back)},l=this.imageOptions.transform,u=Object.assign({key:`pano.${s}`},pick(this.imageOptions,[`format`,`size`,`quality`,`sharpen`,`forceUseExifOrientation`,`mappings`])),d=`pano:`+jsonHash([c,u,l]),f=this.modelScene.parameter,p;f.pano0&&f.pano0.map.name===d?p=f.pano0:f.pano1&&f.pano1.map.name===d&&(p=f.pano1),p?(f.pano0&&f.pano0.map!==p.map&&f.pano0.map.dispose(),f.pano1&&f.pano1.map!==p.map&&f.pano1.map!==((t=f.pano0)==null?void 0:t.map)&&f.pano1.map.dispose(),f.set({pano0:p,pano1:p}),this.emit(`pano.request`,createEvent(`pano.request`,{userAction:!0,prevPano:this.currentPano,progress:0,state:o,options:n,error:null}))):this.textureLoader.loadCubeTexture(c,{imageURL:{transform:l,options:u},format:three.RGBFormat,viaAjax:!0,fetcher:getFetcher(this.fiveId,r.work)},void 0,void 0,void 0,this.renderer).then(t=>{var c,l;let{body:u}=t;if(this.destroyed||this.pendingTextureId!==e){u.dispose();return}this.pendingTextureId=null,u.name=d;let p=Array.isArray(u.image)?u.image[0]:u.image,m=(c=p==null?void 0:p.width)==null?2048:c,h=new Histogram().formPixels(getRgbaDataFromCubeTexture(this.renderer,u,!0,sharedHistogramRgbaData).data),g={panoId:s,map:u,mapSize:m,mapHistogram:new three.Vector4().fromArray(h.toArray()),matrix:r.matrix.clone().premultiply(r.work.transform),zoom:1};f.pano0&&f.pano0.map.dispose(),f.pano1&&f.pano1.map!==((l=f.pano0)==null?void 0:l.map)&&f.pano1.map.dispose(),f.set({pano0:g,pano1:g}),this.emit(`pano.request`,createEvent(`pano.request`,{userAction:!0,prevPano:this.currentPano,progress:0,state:o,options:n,error:null}))}).catch(t=>{this.destroyed||this.pendingTextureId!==e||(this.pendingTextureId=null)})}}}onDblTapGesture(e){if(!this.initAnimationIsReady)return;this.userAction=e.userAction,this.stopMomentumMovement(),this.hideIntersectMesh();let t=e.state,n=e.center.raycaster,r=n.ray.origin.clone().add(n.ray.direction.clone().setLength(3)),o=1,s=3,c=1,[l]=this.modelScene.intersectRaycaster(n);if(l&&(r=l.point.clone(),c=l.distance>4/2?1:3),e.state.distance=c,e.state.offset=r,this.emit(`gesture.dbltap`,e),e.defaultPrevented)return;let u={x:t.offset.x,y:t.offset.y,z:t.offset.z,distance:t.distance};this.locationMotion.set(u,360).catch(noop),this.hideIntersectMesh()}hideIntersectMesh(){this.intersectMesh.visible===!0&&(this.intersectMesh.visible=!1,this.needsRender=!0)}};function isNil(e){return e==null}var _moveEvent={type:`move`},XRController=class{constructor(){this._targetRay=null,this._grip=null,this._hand=null,this._axes=[0,0]}getHandSpace(){return this._hand===null&&(this._hand=new three.Group,this._hand.matrixAutoUpdate=!1,this._hand.visible=!1,this._hand.joints={},this._hand.inputState={pinching:!1}),this._hand}getTargetRaySpace(){return this._targetRay===null&&(this._targetRay=new three.Group,this._targetRay.matrixAutoUpdate=!1,this._targetRay.visible=!1,this._targetRay.hasLinearVelocity=!1,this._targetRay.linearVelocity=new three.Vector3,this._targetRay.hasAngularVelocity=!1,this._targetRay.angularVelocity=new three.Vector3),this._targetRay}getGripSpace(){return this._grip===null&&(this._grip=new three.Group,this._grip.matrixAutoUpdate=!1,this._grip.visible=!1,this._grip.hasLinearVelocity=!1,this._grip.linearVelocity=new three.Vector3,this._grip.hasAngularVelocity=!1,this._grip.angularVelocity=new three.Vector3),this._grip}dispatchEvent(e){return this._targetRay!==null&&this._targetRay.dispatchEvent(e),this._grip!==null&&this._grip.dispatchEvent(e),this._hand!==null&&this._hand.dispatchEvent(e),this}disconnect(e){return this.dispatchEvent({type:`disconnected`,data:e}),this._targetRay!==null&&(this._targetRay.visible=!1),this._grip!==null&&(this._grip.visible=!1),this._hand!==null&&(this._hand.visible=!1),this}getAxes(){return this._axes}update(e,t,n){let r=null,o=null,s=null,c=this._targetRay,l=this._grip,u=this._hand;if(e&&e.gamepad&&e.gamepad.axes&&(this._axes=[e.gamepad.axes[2],e.gamepad.axes[3]]),e&&t.session.visibilityState!==`visible-blurred`)if(c!==null&&(r=t.getPose(e.targetRaySpace,n),r!==null&&(c.matrix.fromArray(r.transform.matrix),c.matrix.decompose(c.position,c.rotation,c.scale),r.linearVelocity?(c.hasLinearVelocity=!0,c.linearVelocity.copy(r.linearVelocity)):c.hasLinearVelocity=!1,r.angularVelocity?(c.hasAngularVelocity=!0,c.angularVelocity.copy(r.angularVelocity)):c.hasAngularVelocity=!1,this.dispatchEvent(_moveEvent))),u&&e.hand){s=!0;for(let r of e.hand.values()){let e=t.getJointPose(r,n);if(u.joints[r.jointName]===void 0){let e=new three.Group;e.matrixAutoUpdate=!1,e.visible=!1,u.joints[r.jointName]=e,u.add(e)}let o=u.joints[r.jointName];e!==null&&(o.matrix.fromArray(e.transform.matrix),o.matrix.decompose(o.position,o.rotation,o.scale),o.jointRadius=e.radius),o.visible=e!==null}let r=u.joints[`index-finger-tip`],o=u.joints[`thumb-tip`],c=r.position.distanceTo(o.position),l=.02,d=.005;u.inputState.pinching&&c>l+d?(u.inputState.pinching=!1,this.dispatchEvent({type:`pinchend`,handedness:e.handedness,target:this})):!u.inputState.pinching&&c<=l-d&&(u.inputState.pinching=!0,this.dispatchEvent({type:`pinchstart`,handedness:e.handedness,target:this}))}else l!==null&&e.gripSpace&&(o=t.getPose(e.gripSpace,n),o!==null&&(l.matrix.fromArray(o.transform.matrix),l.matrix.decompose(l.position,l.rotation,l.scale),o.linearVelocity?(l.hasLinearVelocity=!0,l.linearVelocity.copy(o.linearVelocity)):l.hasLinearVelocity=!1,o.angularVelocity?(l.hasAngularVelocity=!0,l.angularVelocity.copy(o.angularVelocity)):l.hasAngularVelocity=!1));return c!==null&&(c.visible=r!==null),l!==null&&(l.visible=o!==null),u!==null&&(u.visible=s!==null),this}},framebufferScaleFactor=1,isAppleVisionPro=()=>{try{let e=/Macintosh/i.test(navigator.userAgent),t=navigator.maxTouchPoints===5;return e&&t}catch(e){return console.error(`Error determining if the device is an Apple Vision Pro: `,e),!1}},isOculus=()=>{try{return/Oculus/i.test(navigator.userAgent)}catch(e){return console.error(`Error determining if the device is an Oculus: `,e),!1}},XRManager=class{constructor(e,t,n){var r,o,s,c,l;this.isPanorama=(r=n==null?void 0:n.isPanorama)==null?!0:r,navigator.userAgent.toLowerCase();let u;u=isAppleVisionPro()?`VP`:isOculus()?`Oculus`:`Pico`,this.machineType=(o=n==null?void 0:n.machineType)==null?u:o,this.renderer=e,this.gl=t,this.enabled=!1,this.session=null,this.referenceSpaceType=(s=n==null?void 0:n.referenceSpaceType)==null?`local-floor`:s,this.referenceSpace=null,this.onSessionStartCallback=(c=n==null?void 0:n.onSessionStart)==null?noop:c,this.onSessionEndCallback=(l=n==null?void 0:n.onSessionEnd)==null?noop:l,this.controllers=[new XRController,new XRController],this.inputSourcesMap=new Map,this.cameraVR=new three.ArrayCamera,this.cameraL=new three.PerspectiveCamera,this.cameraR=new three.PerspectiveCamera,this.cameraVR.cameras.push(this.cameraL,this.cameraR),this.cameraL.viewport=new three.Vector4,this.cameraR.viewport=new three.Vector4,this.cameraL.layers.enable(1),this.cameraR.layers.enable(2),this.cameraVR.layers.enable(1),this.cameraVR.layers.enable(2),this.isPresenting=!1,this.currentDepthNear=null,this.currentDepthFar=null,this.cameraLPos=new three.Vector3,this.cameraRPos=new three.Vector3}getController(e){let t=this.controllers[e];return t||console.warn(`no controller find`),t.getTargetRaySpace()}getRightController(){if(!this.session||!this.session.inputSources)return null;let e;if(this.session.inputSources.forEach((t,n)=>{t.handedness===`right`&&(e=n)}),e===void 0)return console.warn(`no inputSource for right hand`),null;let t=this.controllers[e];return t?t.getTargetRaySpace():(console.warn(`right controller not find`),null)}getLeftController(){if(!this.session||!this.session.inputSources)return null;let e;if(this.session.inputSources.forEach((t,n)=>{t.handedness===`left`&&(e=n)}),e===void 0)return console.warn(`no inputSource for left hand`),null;let t=this.controllers[e];return t?t.getTargetRaySpace():(console.warn(`left controller not find`),null)}getControllerGrip(e){let t=this.controllers[e];return t||console.warn(`no controller find`),t.getGripSpace()}getCameras(){return{cameraL:this.cameraL,cameraR:this.cameraR,cameraVR:this.cameraVR}}updateCamera(e,t){t===null?e.matrixWorld.copy(e.matrix):e.matrixWorld.multiplyMatrices(t.matrixWorld,e.matrix),e.matrixWorldInverse.getInverse(e.matrixWorld)}setProjectionFromUnion(e,t,n){this.cameraLPos.setFromMatrixPosition(t.matrixWorld),this.cameraRPos.setFromMatrixPosition(n.matrixWorld);var r=this.cameraLPos.distanceTo(this.cameraRPos),o=t.projectionMatrix.elements,s=n.projectionMatrix.elements,c=o[14]/(o[10]-1),l=o[14]/(o[10]+1),u=(o[9]+1)/o[5],d=(o[9]-1)/o[5],f=(o[8]-1)/o[0],p=(s[8]+1)/s[0],m=c*f,h=c*p,g=r/(-f+p),_=g*-f;t.matrixWorld.decompose(e.position,e.quaternion,e.scale),e.translateX(_),e.translateZ(g),e.matrixWorld.compose(e.position,e.quaternion,e.scale),e.matrixWorldInverse.getInverse(e.matrixWorld);var v=c+g,y=l+g,b=m-_,S=h+(r-_),C=u*l/y*v,w=d*l/y*v;e.projectionMatrix.makePerspective(b,S,C,w,v,y)}getCamera(e){this.cameraVR.near=this.cameraR.near=this.cameraL.near=e.near,this.cameraVR.far=this.cameraR.far=this.cameraL.far=e.far,this.session&&(this.currentDepthNear!==this.cameraVR.near||this.currentDepthFar!==this.cameraVR.far)&&(this.session.updateRenderState({depthNear:this.cameraVR.near,depthFar:this.cameraVR.far}),this.currentDepthNear=this.cameraVR.near,this.currentDepthFar=this.cameraVR.far);let t=e.parent,n=this.cameraVR.cameras;this.updateCamera(this.cameraVR,t);for(let e=0;e<n.length;e++)this.updateCamera(n[e],t);e.matrixWorld.copy(this.cameraVR.matrixWorld);let r=e.children;for(let e=0,t=r.length;e<t;e++)r[e].updateMatrixWorld(!0);return n.length===2?this.setProjectionFromUnion(this.cameraVR,this.cameraL,this.cameraR):this.cameraVR.projectionMatrix.copy(this.cameraL.projectionMatrix),this.cameraVR}updateInputSources(e){if(!this.session){console.warn(`session is lose!`);return}let t=this.session.inputSources;for(let e=0;e<this.controllers.length;e++)this.inputSourcesMap.set(t[e],this.controllers[e]);for(let t=0;t<e.removed.length;t++){let n=e.removed[t],r=this.inputSourcesMap.get(n);r&&(r.dispatchEvent({type:`disconnected`,data:n}),this.inputSourcesMap.delete(n))}for(let t=0;t<e.added.length;t++){let n=e.added[t],r=this.inputSourcesMap.get(n);r&&r.dispatchEvent({type:`connected`,data:n})}}onSessionEvent(e){let t=this.inputSourcesMap.get(e.inputSource);t&&t.dispatchEvent({type:e.type})}onSessionEnd(){this.inputSourcesMap.forEach(function(e,t){e.disconnect(t)}),this.inputSourcesMap.clear(),this.isPresenting=!1,this.session=null,AnimationFrameLoop.shared.setContext(null),this.onSessionEndCallback()}onRequestReferenceSpace(e){this.referenceSpace=e,this.isPresenting=!0,this.session&&this.onSessionStartCallback(this.session)}setSession(e){if(this.session=e,this.session){this.session.addEventListener(`select`,e=>{this.onSessionEvent(e)}),this.session.addEventListener(`selectstart`,e=>{this.onSessionEvent(e)}),this.session.addEventListener(`selectend`,e=>{this.onSessionEvent(e)}),this.session.addEventListener(`squeeze`,e=>{this.onSessionEvent(e)}),this.session.addEventListener(`squeezestart`,e=>{this.onSessionEvent(e)}),this.session.addEventListener(`squeezeend`,e=>{this.onSessionEvent(e)}),this.session.addEventListener(`end`,e=>{this.onSessionEnd()});let e=this.gl.getContextAttributes();this.gl.makeXRCompatible().then(()=>{let t={antialias:e==null?void 0:e.antialias,alpha:e==null?void 0:e.alpha,depth:e==null?void 0:e.depth,stencil:e==null?void 0:e.stencil,framebufferScaleFactor};if(!this.session){console.error(`session is lose while set session!`);return}switch(this.machineType){case`Pico`:case`VP`:this.session.updateRenderState({baseLayer:new XRWebGLLayer(this.session,this.gl,t)});break;case`Oculus`:this.session.updateRenderState({baseLayer:new XRWebGLLayer(this.session,this.gl,t)});break;default:this.machineType;break}this.session.requestReferenceSpace(this.referenceSpaceType).then(e=>{this.onRequestReferenceSpace(e)}),this.session.addEventListener(`inputsourceschange`,e=>{this.updateInputSources(e)})})}}},LineSegmentsGeometry=class extends three.InstancedBufferGeometry{constructor(){super(),this.type=`LineSegmentsGeometry`,this.setIndex([0,2,1,2,3,1,2,4,3,4,5,3,4,6,5,6,7,5]),this.setAttribute(`position`,new three.Float32BufferAttribute([-1,2,0,1,2,0,-1,1,0,1,1,0,-1,0,0,1,0,0,-1,-1,0,1,-1,0],3)),this.setAttribute(`uv`,new three.Float32BufferAttribute([-1,2,1,2,-1,1,1,1,-1,-1,1,-1,-1,-2,1,-2],2))}applyMatrix4(e){let t=this.attributes.instanceStart,n=this.attributes.instanceEnd;return t!==void 0&&(t.applyMatrix4(e),n.applyMatrix4(e),t.needsUpdate=!0),this.boundingBox!==null&&this.computeBoundingBox(),this.boundingSphere!==null&&this.computeBoundingSphere(),this}setPositions(e){let t;t=e instanceof Float32Array?e:Array.isArray(e)?new Float32Array(e):new Float32Array;let n=new three.InstancedInterleavedBuffer(t,6,1);return this.setAttribute(`instanceStart`,new three.InterleavedBufferAttribute(n,3,0)),this.setAttribute(`instanceEnd`,new three.InterleavedBufferAttribute(n,3,3)),this.computeBoundingBox(),this.computeBoundingSphere(),this}setColors(e){let t;t=e instanceof Float32Array?e:Array.isArray(e)?new Float32Array(e):new Float32Array;let n=new three.InstancedInterleavedBuffer(t,6,1);return this.setAttribute(`instanceColorStart`,new three.InterleavedBufferAttribute(n,3,0)),this.setAttribute(`instanceColorEnd`,new three.InterleavedBufferAttribute(n,3,3)),this}fromWireframeGeometry(e){return this.setPositions(e.attributes.position.array),this}fromEdgesGeometry(e){return this.setPositions(e.attributes.position.array),this}fromMesh(e){return this.fromWireframeGeometry(new three.WireframeGeometry(e.geometry)),this}fromLineSegments(e){var t=e.geometry;if(t instanceof three.Geometry){let e=new three.BufferGeometry().fromGeometry(t);this.setPositions(e.attributes.position.array)}else t instanceof three.BufferGeometry&&this.setPositions(t.attributes.position.array);return this}computeBoundingBox(){this.boundingBox===null&&(this.boundingBox=new three.Box3);let e=this.attributes.instanceStart,t=this.attributes.instanceEnd;if(e!==void 0&&t!==void 0){let n=new three.Box3;this.boundingBox.setFromBufferAttribute(e),n.setFromBufferAttribute(t),this.boundingBox.union(n)}}computeBoundingSphere(){this.boundingSphere===null&&(this.boundingSphere=new three.Sphere),this.boundingBox===null&&this.computeBoundingBox();let e=this.attributes.instanceStart,t=this.attributes.instanceEnd;if(e!==void 0&&t!==void 0){let n=this.boundingSphere.center;this.boundingBox.getCenter(n);let r=0,o=new three.Vector3;for(let s=0,c=e.count;s<c;s++)o.fromBufferAttribute(e,s),r=Math.max(r,n.distanceToSquared(o)),o.fromBufferAttribute(t,s),r=Math.max(r,n.distanceToSquared(o));this.boundingSphere.radius=Math.sqrt(r),isNaN(this.boundingSphere.radius)&&console.error(`THREE.LineSegmentsGeometry.computeBoundingSphere(): Computed radius is NaN. The instanced position data is likely to have NaN values.`,this)}}toJSON(){}};Object.assign(LineSegmentsGeometry.prototype,{isLineSegmentsGeometry:!0});var lineShader={uniforms:three.UniformsUtils.merge([three.UniformsLib.common,three.UniformsLib.fog,{linewidth:{value:1},resolution:{value:new three.Vector2(1,1)},dashScale:{value:1},dashSize:{value:1},gapSize:{value:1},opacity:{value:1}}]),vertexShader:`
|
|
2040
|
+
`,PanoSphereMesh=class extends three.Object3D{constructor(){super(),this.progress=0,this.opacity=0,this.loading=!1,this.current=!1,this.disabled=!1,this.currentMotion=new Motion({ringScale:1.1,ringOpacity:0,circleFade:0,circleOpacity:.85,circleScale:1}),this.opacityMotion=new Motion({opacity:0}),this.loadingMotion=new Motion({opacity:0}),this.disableMotion=new Motion({opacity:0});let e={blending:three.CustomBlending,blendSrc:three.SrcAlphaFactor,blendDst:three.OneMinusSrcAlphaFactor,blendSrcAlpha:three.OneFactor,blendDstAlpha:three.OneMinusSrcAlphaFactor,depthWrite:!1,transparent:!0};this.hitTestMesh=new three.Mesh(sharedGeometry,new three.MeshBasicMaterial(Object.assign(Object.assign({},e),{color:0,opacity:0}))),this.hitTestMesh.scale.set(1.5,1.5,1.5),this.ringMesh=new three.Mesh(sharedGeometry,new three.ShaderMaterial(Object.assign(Object.assign({},e),{vertexShader:ringVertexShader,fragmentShader:ringFragmentShader,uniforms:{opacity:{value:0}}}))),this.panoMesh=new three.Mesh(sharedGeometry,new three.ShaderMaterial(Object.assign(Object.assign({},e),{vertexShader,fragmentShader,uniforms:{circleScale:{value:1.1},circleFade:{value:0},circleOpacity:{value:.5},loadingAngle:{value:0},loadingOpacity:{value:0},opacity:{value:0},disable:{value:0}}}))),this.add(this.hitTestMesh),this.add(this.ringMesh),this.add(this.panoMesh),this.renderOrder=1e4,this.needsRender=!0}setProgress(e){this.progress=e,this.setLoading(e>0)}setOpacity(e){this.opacity!==e&&(this.opacity=e=clamp$1(e,0,1),this.opacityMotion.set({opacity:e},30).catch(noop))}setCurrent(e){if(this.current!==e){if(e)this.currentMotion.setKeyframes([{progress:0,value:{ringScale:2,ringOpacity:0,circleFade:0,circleOpacity:.85,circleScale:1}},{progress:.05,value:{ringScale:1,ringOpacity:1,circleFade:0,circleOpacity:.85,circleScale:1}},{progress:.15,value:{ringScale:1.2,ringOpacity:1,circleFade:0,circleOpacity:.85,circleScale:1}},{progress:.25,value:{ringScale:1.1,ringOpacity:1,circleFade:0,circleOpacity:.85,circleScale:1}},{progress:.8,value:{ringScale:1.1,ringOpacity:1,circleFade:1,circleOpacity:.85,circleScale:1}},{progress:.9,value:{ringScale:1.1,ringOpacity:1,circleFade:1,circleOpacity:.65,circleScale:.8}},{progress:.92,value:{ringScale:1.1,ringOpacity:1,circleFade:1,circleOpacity:.65,circleScale:.8}},{progress:1,value:{ringScale:1.1,ringOpacity:1,circleFade:1,circleOpacity:.85,circleScale:1.1}}],1500).catch(noop);else{let e=[{progress:0,value:Object.assign({},this.currentMotion.value)},{progress:1,value:{ringScale:1.1,ringOpacity:0,circleFade:0,circleOpacity:.85,circleScale:1}}];this.currentMotion.setKeyframes(e,200).catch(noop)}this.current=e}}setLoading(e){this.loading!==e&&(e?this.loadingMotion.setKeyframes([{progress:0,value:{opacity:0}},{progress:.3,value:{opacity:0}},{progress:1,value:{opacity:.8}}],500).catch(noop):this.loadingMotion.set({opacity:0},0).catch(noop),this.loading=e,this.disabled===!0&&this.setDisabled(!1),this.needsRender=!0)}setDisabled(e){this.disabled!==e&&(this.disabled=e,this.loading===!0&&this.setLoading(!1),this.disableMotion.set({opacity:e?1:0},300).catch(noop),this.needsRender=!0)}tap(){return Promise.resolve()}updateTime(e,t){this.opacityMotion.update(e),this.currentMotion.update(e),this.loadingMotion.update(e);let n=this.opacityMotion.value.opacity;this.visible=n!==0;let{ringScale:r,ringOpacity:o,circleFade:s,circleOpacity:c,circleScale:l}=this.currentMotion.value;this.ringMesh.scale.set(r,1,r),this.ringMesh.material.uniforms.opacity.value=o*n,this.panoMesh.material.uniforms.opacity.value=n,this.panoMesh.material.uniforms.circleOpacity.value=c,this.panoMesh.material.uniforms.circleScale.value=l,this.panoMesh.material.uniforms.circleFade.value=s,this.panoMesh.material.uniforms.loadingOpacity.value=this.loadingMotion.value.opacity,this.panoMesh.material.uniforms.disable.value=this.disableMotion.value.opacity,this.panoMesh.material.uniforms.loadingAngle.value=e/120%(Math.PI*2),this.needsRender=!0}dispose(){this.hitTestMesh.material.dispose(),this.ringMesh.material.dispose(),this.panoMesh.material.dispose()}},ACTIVE_TO_CURRENT_DELAY=1500,defaultVRPanoramaControllerCustomInitArgs=Object.assign({},omit(defaultPanoramaControllerCustomInitArgs,[`maxLatitude`,`minLatitude`])),VRPanoramaController=class e extends PanoramaController{static parseArgs(t){if(t instanceof e)return t;let n=Object.assign(Object.assign({},t),{maxLatitude:Math.PI/2,minLatitude:-Math.PI/2});return super.parseArgs(n)}static initAnimationEndState(e){let t=this.parseArgs(e),n=super.initAnimationEndState(t);return Object.assign(Object.assign({},n),{mode:`VRPanorama`})}constructor(t){let n=e.parseArgs(t);super(n),this.mode=`VRPanorama`,this.cardboard=new Cardboard(this.renderer);let r=createHelper();this.helperElement=r;let o=new Hammer(r);this.element.parentNode&&(this.element.parentNode.insertBefore(r,this.element),this.updateHelperElementSize(),o.on(`tap`,()=>this.emit(`vr.requestExit`,createEvent(`vr.requestExit`,{})))),this.destroyHelper=()=>{o.destroy(),r.parentNode&&r.parentNode.removeChild(r),this.helperElement=void 0}}updateConfiguration(e){return super.updateConfiguration(Object.assign(Object.assign({},e),{maxLatitude:Math.PI/2,minLatitude:-Math.PI/2}))}destroy(){super.destroy(),this.cardboard.dispose(),this.destroyHelper()}isReady(){return!1}updateRenderSize(){this.needsRender=!0}updateCamera(e,t,n){return Promise.resolve()}updateCameraWithKeyframes(e,t,n){return Promise.resolve()}updateTime(e,t,...n){var r,o,s,c,l,u;if(this.destroyed)return;this.updateHelperElementSize(),this.userAction=!0,this.needsRender=!0;let d={},f={},p=this.locationMotion.keyframes[0],m=this.locationMotion.keyframes[this.locationMotion.keyframes.length-1],[h,g]=this.locationMotion.getKeyFrameSegment(e),_=this.panoResourceFromLocationMotionKeyframe(h),v=this.panoResourceFromLocationMotionKeyframe(g),y=this.panoResourceFromLocationMotionKeyframe(p),b=this.panoResourceFromLocationMotionKeyframe(m),S=!1;if(this.modelAlphaMotion.ended===!1&&(this.modelAlphaMotion.update(e),d.modelAlpha=this.modelAlphaMotion.value.modelAlpha),this.perspToOrthoMotion.ended===!1&&(this.perspToOrthoMotion.update(e),this.camera.perspToOrtho.setScalar(clamp$1(this.perspToOrthoMotion.value.perspToOrtho,0,1))),this.locationMotion.ended===!1){this.locationMotion.update(e);let t=this.locationMotion.value.count-g.value.count+1,n=new three.Vector3().copy(_.position),s=new three.Vector3().copy(v.position);if(d.progress=t,t>=.01&&t<=.99&&(d.progress=clamp$1(v.effectEasing(t),.01,.99)),v.panoPicture&&(t<1?_.panoPicture&&(d.pano0=_.panoPicture):d.pano0=v.panoPicture,d.pano1=v.panoPicture),v.effect===`montage`?d.transition=`BLACK`:v.effect===`spread`?d.transition=`SPREAD`:d.transition=`FADE`,v.effect===`zoomin`||v.effect===`zoomout`?d.progress=Math.pow(t,3):v.effect===`model`&&this.camera.pose.distance<.01&&(d.modelAlpha=1-Math.pow(clamp$1(Math.abs(t-.5)*2,0,1),4)),t<1&&v.effect!==`fly`){if(d.pano0&&_.panoPicture){let e={panoId:d.pano0.panoId,map:d.pano0.map,mapHistogram:d.pano0.mapHistogram,mapSize:d.pano0.mapSize,zoom:d.pano0.zoom,matrix:_.panoPicture.matrix.clone().setPosition(v.position)},t=this.panoPictureObserverMap.get(d.pano0);t&&this.panoPictureObserverMap.set(e,t),d.pano0=e}n.copy(s),S=!0}f.distance=this.locationMotion.value.distance,f.offset=new three.Vector3(n.x+(s.x-n.x)*t,n.y+(s.y-n.y)*t,n.z+(s.z-n.z)*t);let c=[],l=[];for(let e of this.locationMotion.keyframes){let{key:t,progress:n}=e;t!==void 0&&(c.push(t),n>this.locationMotion.progress&&l.push(t))}for(let e of Object.keys(this.panoResources)){if(l.indexOf(e)>=0)continue;let t=this.panoResources[e];if(t.panoPicture){let e=t.panoPicture.map;if(e){if(e===((r=d.pano0)==null?void 0:r.map)||e===((o=d.pano1)==null?void 0:o.map))continue;e.dispose(),t.panoPicture=null}}c.indexOf(e)>=0||delete this.panoResources[e]}this.currentPano=panoParse(v.panoId),this.emit(`pano.moving`,createEvent(`pano.moving`,{userAction:this.userAction,prevPano:panoParse(y.panoId),state:Object.assign(Object.assign(Object.assign(Object.assign({},panoParse(b.panoId)),{mode:this.mode}),clonePose(this.camera.pose)),f),options:{},progress:this.locationMotion.progress,error:null}))}isEmptyObject(d)===!1&&this.modelScene.parameter.set(d),f.offset&&this.camera.position.copy(f.offset);let C=this.camera.pose.longitude,w=this.camera.pose.latitude;this.camera.quaternion.fromArray(this.cardboard.sensor.getOrientation()),this.camera.computePose(),(C!==this.camera.pose.longitude||w!==this.camera.pose.latitude)&&(this.cameraMotion.set(pick(this.camera.pose,[`longitude`,`latitude`]),0).catch(noop),this.emit(`camera.update`,createEvent(`camera.update`,{userAction:!0,state:Object.assign(Object.assign(Object.assign({},this.currentPano),{mode:this.mode}),clonePose(this.camera.pose))}))),this.works.getObserver(this.currentPano);let T=this.works.getObserver(_.panoId),E=this.works.getObserver(v.panoId),D=new Map;if(T)for(let e of T.accessibleNodes){let t=T.work.observers[e];if(t){let e=panoStringify({panoIndex:t.panoIndex,workCode:t.work.workCode});D.set(e,t)}}if(E)for(let e of E.accessibleNodes){let t=E.work.observers[e];if(t){let e=panoStringify({panoIndex:t.panoIndex,workCode:t.work.workCode});D.set(e,t)}}if(this.panoMeshes.forEach((e,t)=>{let n=D.get(t);n?(e.position.copy(n.position).applyMatrix4(n.work.transform),D.delete(t)):(this.helper.remove(e),e.dispose(),this.panoMeshes.delete(t))}),D.forEach((e,t)=>{let n=new PanoSphereMesh;n.position.copy(e.position).applyMatrix4(e.work.transform),e.position.distanceTo(e.standingPosition)>this.aerialObserverMinHeight?n.scale.setScalar(15):n.scale.setScalar(1),this.panoMeshes.set(t,n),this.helper.add(n),D.delete(t)}),this.camera.pose.distance>.1||S?this.panoMeshes.forEach((n,r)=>{n.setOpacity(0),n.updateTime&&n.updateTime(e,t),n.visible=!1}):this.panoMeshes.forEach((e,t)=>{let n=panoParse(t),r=this.works.getObserver(n);if(!r)return;if(!r.loadable&&!r.active){e.setOpacity(0);return}let o=e.position.clone().setY(this.camera.position.y).distanceTo(this.camera.position);o<.05?e.setOpacity(0):e.setOpacity(clamp$1(1.5/o,0,1)),panoEqual(this.currentPano,n)&&e.setOpacity(0),e.lookAt(this.camera.position)}),this.locationMotion.ended){let n=this.intersect(e);this.panoMeshes.forEach((r,o)=>{r.setCurrent(r===n),r.updateTime&&r.updateTime(e,t)})}{let e=(s=this.modelScene.parameter.progress)==null?1:s,t=Math.round(e),n=this.modelScene.parameter.pano0,r=this.modelScene.parameter.pano1,o=t===0?n:r,l;if(o&&(l=this.works.getObserver(o.panoId),l||(l=this.panoPictureObserverMap.get(o))),this.tiling.appearDuration=this.tileAppearDuration,this.tiling.maxRequest=e<(canUseNativeImageBitmap()?.6:.99)?0:this.tileMaxRequest,this.tiling.imageOptions=this.imageOptions,!l||!o||this.tileLevelForFov===!1||this.camera.perspToOrtho.x>0){this.tiling.setObserver(null);let e={renderer:this.renderer,resolution:this.camera.resolution,pixelRatio:this.camera.pixelRatio,time:this.camera.time,cameraMatrix:this.camera.matrixWorld,cameraProjectionMatrix:this.camera.projectionMatrix,panoMap:null,panoMatrix:new three.Matrix4,panoZoom:1,minLevel:0,level:0};this.tiling.update(e),this.modelScene.parameter.set(`refinedScreen`,null)}else{let e=getImageSizeLevel(o.mapSize),s=e+1,u=new three.Vector2().copy(this.camera.resolution).multiplyScalar(this.camera.pixelRatio),d=Math.floor(this.tileLevelForFov(this.camera.fov,u)),f=d>e?d:0;this.tiling.setObserver(l);let p={renderer:this.renderer,resolution:this.camera.resolution,pixelRatio:this.camera.pixelRatio,time:this.camera.time,cameraMatrix:this.camera.matrixWorld,cameraProjectionMatrix:this.camera.projectionMatrix,panoMap:o.map,panoMatrix:o.matrix,panoZoom:o.zoom,minLevel:s,level:f},m=this.tiling.update(p),h={map:this.tiling.renderTarget.texture,matrixInverse:this.tiling.camera.matrixWorldInverse,projectionMatrix:this.tiling.camera.projectionMatrix,pano:t,opacity:(n==null?void 0:n.panoId)===(r==null?void 0:r.panoId)?1:easeInQuart(Math.abs(((c=this.modelScene.parameter.progress)==null?0:c)-.5)*2)},g=this.modelScene.parameter.refinedScreen;(m||h.pano!==(g==null?void 0:g.pano)||h.opacity!==(g==null?void 0:g.opacity))&&this.modelScene.parameter.set(`refinedScreen`,h)}}this.panoVideo.object.position.copy(this.camera.position),this.panoVideo.updateTime(e);{let e=v.effect,{pano0:t,pano1:n}=this.modelScene.parameter;if(t&&n&&t!==n&&(e===`fly`||e===`model`)&&this.flyEffectUseDepthBuffer){if(((l=this.modelScene.parameter.pano0Depth)==null?void 0:l.panoId)!==t.panoId||((u=this.modelScene.parameter.pano1Depth)==null?void 0:u.panoId)!==n.panoId){let e=500,r=512;this.pano0DepthCubeRenderTarget?this.pano0DepthCubeRenderTarget.width!==512&&this.pano0DepthCubeRenderTarget.setSize(512,512):this.pano0DepthCubeRenderTarget=new three.WebGLCubeRenderTarget(512,{minFilter:three.NearestFilter,magFilter:three.NearestFilter,generateMipmaps:!1}),this.pano1DepthCubeRenderTarget?this.pano1DepthCubeRenderTarget.width!==512&&this.pano1DepthCubeRenderTarget.setSize(512,512):this.pano1DepthCubeRenderTarget=new three.WebGLCubeRenderTarget(512,{minFilter:three.NearestFilter,magFilter:three.NearestFilter,generateMipmaps:!1});let o=new three.CubeCamera(this.camera.near,this.camera.far,this.pano0DepthCubeRenderTarget);o.matrix.copy(t.matrix),o.matrixWorld.copy(o.matrix),o.matrixAutoUpdate=!1,renderDepthCube(this.renderer,this.modelScene,o,500);let s=new three.CubeCamera(this.camera.near,this.camera.far,this.pano1DepthCubeRenderTarget);s.matrix.copy(n.matrix),s.matrixWorld.copy(s.matrix),s.matrixAutoUpdate=!1,renderDepthCube(this.renderer,this.modelScene,s,500),this.modelScene.parameter.set({pano0Depth:{panoId:t.panoId,map:this.pano0DepthCubeRenderTarget.texture,mapSize:this.pano0DepthCubeRenderTarget.width,maxDepth:500},pano1Depth:{panoId:n.panoId,map:this.pano1DepthCubeRenderTarget.texture,mapSize:this.pano1DepthCubeRenderTarget.width,maxDepth:500}})}}else this.modelScene.parameter.set({pano0Depth:null,pano1Depth:null}),this.flyEffectUseDepthBuffer||(this.pano0DepthCubeRenderTarget&&(this.pano0DepthCubeRenderTarget.dispose(),this.pano0DepthCubeRenderTarget=void 0),this.pano1DepthCubeRenderTarget&&(this.pano1DepthCubeRenderTarget.dispose(),this.pano1DepthCubeRenderTarget=void 0))}}render(){return this.renderer.setRenderTarget(null),this.renderer.setScissorTest(!1),this.cardboard.render(this.scene,this.camera),!0}setCamera(e={}){}destroyHelper(){}updateHelperElementSize(){if(!this.helperElement)return;let e=new three.Vector2(this.element.offsetWidth,this.element.offsetHeight),t=e.x*this.viewport.left,n=e.y*(1-this.viewport.bottom-this.viewport.height),r=e.x*this.viewport.width,o=e.y*this.viewport.height;this.helperElement.style.marginLeft!==t+`px`&&(this.helperElement.style.marginLeft=t+`px`),this.helperElement.style.marginTop!==n+`px`&&(this.helperElement.style.marginTop=n+`px`),this.helperElement.style.width!==r+`px`&&(this.helperElement.style.width=r+`px`),this.helperElement.style.height!==o+`px`&&(this.helperElement.style.height=o+`px`)}intersect(e){var t,n;if(this.locationMotion.ended===!1){this.intersectMesh.visible=!1,this.activePanoMesh=void 0,this.activeTime=void 0;return}if(this.activePanoMesh&&this.activeTime&&e-this.activeTime>ACTIVE_TO_CURRENT_DELAY){let e=this.activePanoMesh,t=null;return this.panoMeshes.forEach((n,r)=>{n===e&&(t=r)}),t!==null&&this.moveToPano(panoParse(t),{},!0),this.activePanoMesh=void 0,this.activeTime=void 0,e}let r=this.camera.getDirection(new three.Vector3),o=new three.Raycaster(this.camera.position,r);o.params.Points={threshold:.1},o.firstHitOnly=!0,o.floorIndex=-1;let s,c=[],l=this.works.getObserver(this.currentPano),u=l?l.accessibleNodes.map(e=>panoStringify({panoIndex:e,workCode:l.work.workCode})):[];for(let e of u){let r=this.panoMeshes.get(e);if(r){let[e]=o.intersectObject((t=r.hitTestMesh)==null?r:t,!0);if(e){let t=(n=l==null?void 0:l.floorIndex)==null?0:n;c.push({panoMesh:r,intersection:Object.assign({floorIndex:t,floor:t},e)})}}}let[d]=c.sort((e,t)=>e.intersection.distance-t.intersection.distance);d?(s=d.intersection,this.activePanoMesh!==d.panoMesh&&(this.activePanoMesh=d.panoMesh,this.activeTime=e),this.intersectMesh.position.copy(d.panoMesh.position),this.intersectMesh.lookAt(this.camera.position)):(this.activePanoMesh=void 0,this.activeTime=void 0),s||(s=this.modelScene.intersectRaycaster(o)[0]);let f=createEvent(`intersect.update`,{raycaster:o,intersection:s==null?null:s,object:this.intersectMesh});if(this.emit(`intersect.update`,f),f.defaultPrevented){this.hideIntersectMesh();return}if(s&&s.face){let e=s.face.normal,t=new three.Quaternion;t.setFromUnitVectors(new three.Vector3(0,0,1),e),this.intersectMesh.quaternion.copy(t);let n=s.point.clone();this.intersectMesh.position.copy(n),d?this.intersectMesh.visible=!1:this.intersectMesh.visible=!0}else this.intersectMesh.visible=!1;return d==null?void 0:d.panoMesh}onPanGesture(){}onTapGesture(){}onPinchGesture(){}onMouseMove(){}onMouseOut(){}},HUMAN_EYE_POSITION=new three.Vector3(0,1.6,0),scratchObserverBox$1=new three.Box3,scratchVector3$2=new three.Vector3,defaultModelControllerCustomInitArgs=Object.assign({},defaultPanoramaLikeControllerCustomInitArgs),ModelController=class e extends PanoramaLikeController{static parseArgs(t){return t instanceof e?t:super.parseArgs(t)}static initAnimationEndState(e){var t,n,r,o,s,c;let l=this.parseArgs(e),u=l.works,{state:d,currentState:f}=e.initial,p=typeof d.panoIndex==`number`?{workCode:(r=(t=d.workCode)==null?(n=l.works[0])==null?void 0:n.workCode:t)==null?``:r,panoIndex:d.panoIndex}:{workCode:f.workCode,panoIndex:f.panoIndex},m=u.getObserver(p),h=clamp$1((o=d.fov)==null?!m||isFristPersonMode(f.mode)?f.fov:l.defaultFov:o,l.minFov,l.maxFov),g=(s=d.longitude)==null?f.longitude:s,_=clamp$1(typeof l.minLatitude==`function`?l.minLatitude(h):l.minLatitude,-Math.PI/2,Math.PI/2),v=clamp$1(typeof l.maxLatitude==`function`?l.maxLatitude(h):l.maxLatitude,-Math.PI/2,Math.PI/2),y=clamp$1((c=d.latitude)==null?!m||isFristPersonMode(f.mode)?f.latitude:l.defaultLatitude:c,_,v),b=new three.Vector3;if(l.initial.state.offset)b.copy(l.initial.state.offset);else if(m)b.copy(m.position).applyMatrix4(m.work.transform);else{let e=coordinatesToVector(f).setLength(f.distance);b.copy(l.initial.currentState.offset).sub(e)}return{workCode:p.workCode,panoIndex:p.panoIndex,mode:`Model`,longitude:g,latitude:y,fov:h,offset:b,distance:0}}constructor(t){let n=e.parseArgs(t);super(n),this.mode=`Model`,this.locationMotion=new Motion({x:this.camera.pose.offset.x,y:this.camera.pose.offset.y,z:this.camera.pose.offset.z,distance:this.camera.pose.distance}),this.modelAlphaMotion=new Motion({modelAlpha:this.modelScene.parameter.resolveValue().modelAlpha}),this.perspToOrthoMotion=new Motion({perspToOrtho:this.camera.perspToOrtho.x})}updateConfiguration(e){return super.updateConfiguration(e)}destroy(){super.destroy(),this.locationMotion.dispose()}isReady(){return this.locationMotion.ended===!1?!1:super.isReady()}updateWork(t,n,r,o){this.works=t;let s=e.initAnimationEndState(Object.assign(Object.assign({},this),{initial:{currentState:Object.assign(Object.assign({},this.currentPano),this.camera.pose),duration:r.duration,effect:r.effect,state:n,userAction:o}}));return(s.workCode!==this.currentPano.workCode||s.panoIndex!==this.currentPano.panoIndex||s.longitude!==this.cameraMotion.value.longitude||s.latitude!==this.cameraMotion.value.latitude||s.fov!==this.cameraMotion.value.fov)&&this.moveToPosition(s.offset,{duration:0,longitude:s.longitude,latitude:s.latitude,fov:s.fov},o),!0}updateCamera(e,t,n){return this.initAnimationReady.then(()=>{this.userAction=n,this.stopMomentumMovement();let r={},o={};return r.distance=0,e.offset!==void 0&&(r.x=e.offset.x,r.y=e.offset.y,r.z=e.offset.z),e.longitude!==void 0&&(o.longitude=e.longitude),e.latitude!==void 0&&(o.latitude=e.latitude),e.fov!==void 0&&(o.fov=e.fov),this.locationMotion.set(r,t).catch(noop),this.cameraMotion.set(o,t).catch(noop)})}updateCameraWithKeyframes(e,t,n){return this.initAnimationReady.then(()=>{this.userAction=n,this.stopMomentumMovement();let r=[],o=[];for(let t of e)r.push({key:t.key,progress:t.progress,value:{distance:0,x:t.value.offset.x,y:t.value.offset.x,z:t.value.offset.x}}),o.push({key:t.key,progress:t.progress,value:{longitude:t.value.longitude,latitude:t.value.latitude,fov:t.value.fov}});return this.locationMotion.setKeyframes(r,t).catch(noop),this.cameraMotion.setKeyframes(e,t)})}updateTime(e,t,...n){if(this.destroyed)return;let r={},o={};if(this.modelAlphaMotion.ended||(this.modelAlphaMotion.update(e),r.modelAlpha=this.modelAlphaMotion.value.modelAlpha),this.modelScene.parameter.modelAlpha===0&&this.modelScene.parameter.progress!==1){let{pano0:e,pano1:t}=this.modelScene.parameter;e&&e.map!==(t==null?void 0:t.map)&&e.map.dispose(),r.progress=1,r.pano0=r.pano1=t}if(this.perspToOrthoMotion.ended||(this.perspToOrthoMotion.update(e),this.camera.perspToOrtho.setScalar(clamp$1(this.perspToOrthoMotion.value.perspToOrtho,0,1))),!this.locationMotion.ended){this.locationMotion.update(e),o.distance=this.locationMotion.value.distance,o.offset=new three.Vector3(this.locationMotion.value.x,this.locationMotion.value.y,this.locationMotion.value.z);let t=new three.Vector3(this.locationMotion.value.x,this.locationMotion.value.y,this.locationMotion.value.z),n=[];for(let e of this.works){let r=this.modelScene.models.find(t=>t.work===e);if(!(!r||r.visible===!1)&&!(e.observers.length<=0)&&(scratchObserverBox$1.copy(e.observerBox).expandByScalar(10).applyMatrix4(e.transform),scratchObserverBox$1.containsPoint(t)))for(let t of e.observers)n.push(t)}let r=arrayMin(n,e=>scratchVector3$2.copy(e.position).applyMatrix4(e.work.transform).distanceTo(t));this.currentPano=r?{workCode:r.work.workCode,panoIndex:r.panoIndex}:{workCode:``,panoIndex:0}}this.cameraMotion.ended||(this.cameraMotion.update(e),o.longitude=this.cameraMotion.value.longitude,o.latitude=this.cameraMotion.value.latitude,o.fov=this.cameraMotion.value.fov),isEmptyObject(r)||this.modelScene.parameter.set(r),isEmptyObject(o)||this.setCamera(o);let s=this.works.getObserver(this.currentPano);if(this.intersectMesh&&this.intersectMesh.parent&&s&&s.position.y-s.standingPosition.y>10){let e=clamp$1(this.camera.position.distanceTo(this.intersectMesh.position)*(2*Math.tan(.5*this.camera.fov/180*Math.PI))/5,.5);this.intersectMesh.scale.setScalar(e)}else this.intersectMesh.scale.setScalar(1)}initAnimation(){return this.destroyed?Promise.resolve():new Promise(t=>{let{state:n,currentState:r,duration:o,userAction:s}=this.initial;this.userAction=s;let c=e.initAnimationEndState(this),l={modelAlpha:1},u={perspToOrtho:0},d={longitude:c.longitude,latitude:c.latitude,fov:c.fov,duration:o,moveStartCallback:e=>{this.perspToOrthoMotion.set(u,o).catch(noop),this.modelAlphaMotion.set(l,o).catch(noop),this.emit(`initAnimation.start`,createEvent(`initAnimation.start`,{state:e,userAction:this.userAction}))},moveEndCallback:e=>{this.emit(`initAnimation.end`,createEvent(`initAnimation.end`,{state:e,userAction:this.userAction})),t()},moveCancelCallback:()=>{let e=this.currentPano,n=Object.assign(Object.assign({},e),{mode:this.mode,longitude:this.camera.pose.longitude,latitude:this.camera.pose.latitude,fov:this.camera.pose.fov,offset:this.camera.pose.offset.clone(),distance:this.camera.pose.distance});this.emit(`initAnimation.end`,createEvent(`initAnimation.end`,{state:n,userAction:this.userAction})),t()}};this.moveToPosition(c.offset,d,s)})}getTargetState(){let e=this.cameraMotion.getKeyFrameSegment(now())[1],t=this.locationMotion.getKeyFrameSegment(now())[1];return Object.assign(Object.assign({},this.currentPano),{mode:this.mode,longitude:e.value.longitude,latitude:e.value.latitude,fov:e.value.fov,offset:new three.Vector3(t.value.x,t.value.y,t.value.z),distance:t.value.distance})}moveToPano(e,t={},n){let r=this.works.getObserver(e);if(r){let e=new three.Vector3().copy(r.position).applyMatrix4(r.work.transform);this.moveToPosition(e,t,n)}}moveToPosition(e,t={},n){var r,o,s;this.userAction=n,this.stopMomentumMovement();let c=now(),l=new three.Vector3(this.locationMotion.value.x,this.locationMotion.value.y,this.locationMotion.value.z),u=l.distanceTo(e),d=this.locationMotion.getProgressVelocity(c),f=0;for(let e=1;e<this.locationMotion.keyframes.length;e++){let{x:t,y:n,z:r}=this.locationMotion.keyframes[e-1].value,{x:o,y:s,z:c}=this.locationMotion.keyframes[e].value;f+=Math.sqrt(Math.pow(o-t,2)+Math.pow(s-n,2)+Math.pow(c-r,2))}let p=u===0?0:d*f/u,m=this.calculateMovingDuration(t.duration,u),h={x:e.x,y:e.y,z:e.z,distance:0},g={longitude:t.longitude,latitude:t.latitude,fov:t.fov},_=[];for(let e of this.works){let t=this.modelScene.models.find(t=>t.work===e);if(!(!t||t.visible===!1)&&!(e.observers.length<=0)&&(scratchObserverBox$1.copy(e.observerBox).expandByScalar(10).applyMatrix4(e.transform),scratchObserverBox$1.containsPoint(l)))for(let t of e.observers)_.push(t)}let v=arrayMin(_,e=>scratchVector3$2.copy(e.position).applyMatrix4(e.work.transform).distanceTo(l)),y=v?{workCode:v.work.workCode,panoIndex:v.panoIndex}:{workCode:``,panoIndex:0},b=Object.assign(Object.assign({},y),{mode:this.mode,longitude:(r=g.longitude)==null?this.camera.pose.longitude:r,latitude:(o=g.latitude)==null?this.camera.pose.latitude:o,fov:(s=g.fov)==null?this.camera.pose.fov:s,offset:e.clone(),distance:0}),S=this.currentPano;this.emit(`pano.moveTo`,createEvent(`pano.moveTo`,{options:t,prevPano:S,progress:0,state:b,userAction:this.userAction,error:null})),t.moveStartCallback&&t.moveStartCallback(b),this.cameraMotion.set(g,m).catch(noop),this.locationMotion.set(h,m,p).then(()=>{for(let e of this.modelScene.children)e instanceof Model&&e.show();let e=Object.assign(Object.assign(Object.assign({},y),{mode:this.mode}),clonePose(this.camera.pose));this.emit(`pano.arrived`,createEvent(`pano.arrived`,{options:t,prevPano:S,progress:0,state:e,userAction:this.userAction,error:null})),t.moveEndCallback&&t.moveEndCallback(e)},()=>{t.moveCancelCallback&&t.moveCancelCallback(),this.emit(`pano.cancel`,createEvent(`pano.cancel`,{options:t,prevPano:S,progress:0,state:b,userAction:this.userAction,error:null}))})}onTapGesture(e){let t=e.center.raycaster;this.stopMomentumMovement();let[n]=this.modelScene.intersectRaycaster(t);if(n&&n.face){let e=n.face.normal,t=n.point;if(new three.Vector3(0,1,0).angleTo(e)>Math.PI/3){let r=new three.Raycaster;r.firstHitOnly=!0;let o=e.clone().setLength(.3).add(t);r.set(o,new three.Vector3(0,-1,0)),n=this.modelScene.intersectRaycaster(r)[0]}}if(n){let t=new three.Vector3().copy(n.point).add(HUMAN_EYE_POSITION),r=[];for(let e of this.works){let n=this.modelScene.models.find(t=>t.work===e);if(!(!n||n.visible===!1)&&!(e.observers.length<=0)&&(scratchObserverBox$1.copy(e.observerBox).expandByScalar(10).applyMatrix4(e.transform),scratchObserverBox$1.containsPoint(t)))for(let t of e.observers)r.push(t)}let[o,s]=arrayMin(r,e=>scratchVector3$2.copy(e.position).applyMatrix4(e.work.transform).distanceTo(t),!0);o&&s<5&&(t.y=scratchVector3$2.copy(o.position).applyMatrix4(o.work.transform).y),e.state.offset.copy(t),e.state.distance=0,this.emit(`gesture.tap`,e),e.defaultPrevented||this.moveToPosition(t,{},!0)}else this.emit(`gesture.tap`,e),e.defaultPrevented||this.cameraBounce()}},scratchObserverBox=new three.Box3,scratchVector3$1=new three.Vector3,minDistance=.5,PANGESTURE_FORWARD_ANGLE=Math.PI/7,defaultMapviewControllerCustomInitArgs={defaultLongitude:Math.PI/4,defaultLatitude:Math.PI/4,defaultDistance:150,maxLatitude:Math.PI/2,minLatitude:0,cameraType:`auto`,cameraFence:null,intersectMeshCreator:()=>new IntersectMesh},MapviewController=class e extends BaseController{static parseArgs(t){var n,r,o,s,c,l,u,d;if(t instanceof e)return t;let f=super.parseArgs(t);return Object.assign(Object.assign({},f),{defaultLongitude:(n=t.defaultLongitude)==null?defaultMapviewControllerCustomInitArgs.defaultLongitude:n,defaultLatitude:(r=t.defaultLatitude)==null?defaultMapviewControllerCustomInitArgs.defaultLatitude:r,defaultDistance:(o=t.defaultDistance)==null?defaultMapviewControllerCustomInitArgs.defaultDistance:o,maxLatitude:(s=t.maxLatitude)==null?defaultMapviewControllerCustomInitArgs.maxLatitude:s,minLatitude:(c=t.minLatitude)==null?defaultMapviewControllerCustomInitArgs.minLatitude:c,cameraType:(l=t.cameraType)==null?defaultMapviewControllerCustomInitArgs.cameraType:l,cameraFence:(u=t.cameraFence)==null?defaultMapviewControllerCustomInitArgs.cameraFence:u,intersectMeshCreator:(d=t.intersectMeshCreator)==null?defaultMapviewControllerCustomInitArgs.intersectMeshCreator:d})}static distanceFromModel(e,t,n){let r=e.boundingBox,o=r.isEmpty()?10:Math.pow(Math.pow(r.max.x-r.min.x+1,2)+Math.pow(r.max.y-r.min.y+1,2)+Math.pow(r.max.z-r.min.z+1,2),1/2);o=isNaN(o)||!isFinite(o)?1:o;let s=o/2/Math.tan(Math.PI*t/360);return n<1&&(s/=n),isNaN(s)||!isFinite(s)?o:s}static initAnimationEndState(t){var n,r,o,s,c,l,u;let d=this.parseArgs(t),f=d.works,p=d.modelScene,{state:m,currentState:h}=t.initial,g=typeof m.panoIndex==`number`?{workCode:(o=(n=m.workCode)==null?(r=d.works[0])==null?void 0:r.workCode:n)==null?``:o,panoIndex:m.panoIndex}:{workCode:h.workCode,panoIndex:h.panoIndex},_=(s=m.fov)==null?60:s,v=clamp$1(typeof d.minLatitude==`function`?d.minLatitude(_):d.minLatitude,-Math.PI/2,Math.PI/2),y=clamp$1(typeof d.maxLatitude==`function`?d.maxLatitude(_):d.maxLatitude,-Math.PI/2,Math.PI/2),b=clamp$1((c=m.latitude)==null?isThirdPersonMode(h.mode)?h.latitude:d.defaultLatitude:c,v,y),S=e.distanceFromModel(d.modelScene,_,d.camera.aspect),C=new three.Vector3,w=(l=m.distance)==null?Math.min(d.defaultDistance,S):l,T=(u=m.longitude)==null?isThirdPersonMode(h.mode)?h.longitude:d.defaultLongitude:u;if(m.offset)C.copy(m.offset);else{let e=f.getObserver(g);d.defaultDistance<S&&e?(C.copy(e.position).applyMatrix4(e.work.transform),m.longitude===void 0&&(T=h.longitude)):(p.boundingBox.getCenter(C),w=S)}return Object.assign(Object.assign({},g),{mode:`Mapview`,longitude:T,latitude:b,fov:_,offset:C,distance:w})}constructor(t){let n=e.parseArgs(t);super(n),this.mode=`Mapview`,this.defaultLongitude=n.defaultLongitude,this.defaultLatitude=n.defaultLatitude,this.defaultDistance=n.defaultDistance,this.maxLatitude=n.maxLatitude,this.minLatitude=n.minLatitude,this.cameraType=n.cameraType,this.cameraFence=n.cameraFence,this.locationMotion=new Motion({x:this.camera.pose.offset.x,y:this.camera.pose.offset.y,z:this.camera.pose.offset.z,distance:this.camera.pose.distance}),this.modelAlphaMotion=new Motion({modelAlpha:this.modelScene.parameter.resolveValue().modelAlpha}),this.perspToOrthoMotion=new Motion({perspToOrtho:this.camera.perspToOrtho.x}),this.pendingTextureId=null,this.textureLoader=new TextureLoader,this.intersectMeshCreator=n.intersectMeshCreator,this.intersectMesh=this.intersectMeshCreator(),this.intersectMesh.name=`intersect`,this.intersectMesh.visible=!1,this.helper.add(this.intersectMesh)}updateConfiguration(e){if(super.updateConfiguration(e)===!1)return!1;if(e.defaultLongitude!==void 0&&this.defaultLongitude!==e.defaultLongitude&&(this.defaultLongitude=e.defaultLongitude),e.defaultLatitude!==void 0&&this.defaultLatitude!==e.defaultLatitude&&(this.defaultLatitude=e.defaultLatitude),e.defaultDistance!==void 0&&this.defaultDistance!==e.defaultDistance&&(this.defaultDistance=e.defaultDistance),e.maxLatitude!==void 0&&this.maxLatitude!==e.maxLatitude&&(this.maxLatitude=e.maxLatitude),e.minLatitude!==void 0&&this.minLatitude!==e.minLatitude&&(this.minLatitude=e.minLatitude),e.cameraType!==void 0&&this.cameraType!==e.cameraType&&(this.cameraType=e.cameraType),this.cameraFence instanceof three.Box3&&e.cameraFence instanceof three.Box3||this.cameraFence instanceof three.Sphere&&e.cameraFence instanceof three.Sphere?this.cameraFence.equals(e.cameraFence)||(this.cameraFence=e.cameraFence):e.cameraFence!==void 0&&(this.cameraFence=e.cameraFence),e.intersectMeshCreator!==void 0&&this.intersectMeshCreator!==e.intersectMeshCreator){this.intersectMeshCreator=e.intersectMeshCreator;let t=this.intersectMesh;this.intersectMesh=this.intersectMeshCreator(),this.intersectMesh.name=t.name,this.intersectMesh.visible=t.visible;let n=this.intersectMesh.parent;n&&n.add(this.intersectMesh),t.dispose()}return!0}destroy(){super.destroy(),this.pendingTextureId=null,this.locationMotion.dispose(),this.panState=void 0,this.intersectMesh.dispose(),this.helper.remove(this.intersectMesh)}isReady(){return this.locationMotion.ended===!1?!1:super.isReady()}updateWork(t,n,r,o){this.userAction=o,this.works=t;let s=e.initAnimationEndState(Object.assign(Object.assign({},this),{initial:{currentState:Object.assign(Object.assign({},this.currentPano),this.camera.pose),duration:r.duration,effect:r.effect,state:n,userAction:o}}));this.currentPano={workCode:s.workCode,panoIndex:s.panoIndex};let c={longitude:s.longitude,latitude:s.latitude,fov:s.fov},l={x:s.offset.x,y:s.offset.y,z:s.offset.z,distance:s.distance};return(c.longitude!==this.cameraMotion.value.longitude||c.latitude!==this.cameraMotion.value.latitude||c.fov!==this.cameraMotion.value.fov)&&this.cameraMotion.set(c,r.duration).catch(noop),(l.x!==this.locationMotion.value.x||l.y!==this.locationMotion.value.y||l.z!==this.locationMotion.value.z||l.distance!==this.locationMotion.value.distance)&&this.locationMotion.set(l,r.duration).catch(noop),!0}updateModel(e){super.updateModel(e),this.hideIntersectMesh()}updateCamera(e,t,n){return this.initAnimationReady.then(()=>{this.userAction=n,this.stopMomentumMovement();let r={},o={};return e.distance!==void 0&&(r.distance=e.distance),e.offset!==void 0&&(r.x=e.offset.x,r.y=e.offset.y,r.z=e.offset.z),e.longitude!==void 0&&(o.longitude=e.longitude),e.latitude!==void 0&&(o.latitude=e.latitude),e.fov!==void 0&&(o.fov=e.fov),this.locationMotion.set(r,t).catch(noop),this.cameraMotion.set(o,t).catch(noop)})}updateCameraWithKeyframes(e,t,n){return this.initAnimationReady.then(()=>{this.userAction=n,this.stopMomentumMovement();let r=[],o=[];for(let t of e)r.push({key:t.key,progress:t.progress,value:{distance:t.value.distance,x:t.value.offset.x,y:t.value.offset.x,z:t.value.offset.x}}),o.push({key:t.key,progress:t.progress,value:{longitude:t.value.longitude,latitude:t.value.latitude,fov:t.value.fov}});return this.locationMotion.setKeyframes(r,t).catch(noop),this.cameraMotion.setKeyframes(e,t)})}updateTime(e,t){if(this.destroyed)return;let n={},r={};if(this.locationMotion.ended||(this.locationMotion.update(e),r.distance=this.locationMotion.value.distance,r.offset=new three.Vector3(this.locationMotion.value.x,this.locationMotion.value.y,this.locationMotion.value.z)),this.cameraMotion.ended||(this.cameraMotion.update(e),r.longitude=this.cameraMotion.value.longitude,r.latitude=this.cameraMotion.value.latitude,r.fov=this.cameraMotion.value.fov),this.modelAlphaMotion.ended||(this.modelAlphaMotion.update(e),n.modelAlpha=this.modelAlphaMotion.value.modelAlpha),this.modelScene.parameter.modelAlpha===0&&this.modelScene.parameter.progress!==1){let{pano0:e,pano1:t}=this.modelScene.parameter;e&&e.map!==(t==null?void 0:t.map)&&e.map.dispose(),n.progress=1,n.pano0=n.pano1=t}let o=0;if(this.cameraType===`auto`?o=Math.abs(Math.PI/2-this.cameraMotion.value.latitude)<.02||Math.abs(-Math.PI/2-this.cameraMotion.value.latitude)<.02?1:0:this.cameraType===`perspective`?o=0:this.cameraType===`orthographic`&&(o=1),this.perspToOrthoMotion.getTargetKeyframe().value.perspToOrtho!==o&&this.perspToOrthoMotion.set({perspToOrtho:o},500).catch(noop),this.perspToOrthoMotion.ended||(this.perspToOrthoMotion.update(e),this.camera.perspToOrtho.setScalar(clamp$1(this.perspToOrthoMotion.value.perspToOrtho,0,1))),isEmptyObject(n)||this.modelScene.parameter.set(n),isEmptyObject(r)||this.setCamera(r),this.cameraFence&&!this.panState&&!this.pinchState&&!this.mouseWheelState&&!this.inMomentumMovement&&this.locationMotion.ended&&this.perspToOrthoMotion.ended&&this.cameraMotion.ended){let e=coordinatesToVector(this.camera.pose,new three.Vector3),t=new three.Vector3().copy(this.camera.pose.offset).sub(e.clone().multiplyScalar(this.camera.pose.distance));if(this.cameraFence.distanceToPoint(t)>.01){let e=this.cameraFence.clampPoint(t,new three.Vector3),n=this.camera.pose.offset.clone().add(e).sub(t),r=Object.assign(Object.assign({},this.currentPano),{mode:this.mode,longitude:this.camera.pose.longitude,latitude:this.camera.pose.latitude,fov:this.camera.pose.fov,offset:n,distance:this.camera.pose.distance});this.fixFinalState(r),this.locationMotion.set({x:r.offset.x,y:r.offset.y,z:r.offset.z,distance:r.distance},300).catch(noop)}}if(this.intersectMesh&&this.intersectMesh.parent){let e=clamp$1(this.camera.position.distanceTo(this.intersectMesh.position)*(2*Math.tan(.5*this.camera.fov/180*Math.PI))/5,.5);this.intersectMesh.scale.setScalar(e)}else this.intersectMesh.scale.setScalar(1)}getTargetState(){let e=this.cameraMotion.getKeyFrameSegment(now())[1],t=this.locationMotion.getKeyFrameSegment(now())[1];return Object.assign(Object.assign({},this.currentPano),{mode:this.mode,longitude:e.value.longitude,latitude:e.value.latitude,fov:e.value.fov,distance:t.value.distance,offset:new three.Vector3(t.value.x,t.value.y,t.value.z)})}initAnimation(){return this.destroyed?Promise.resolve():new Promise(t=>{let{state:n,currentState:r,duration:o,userAction:s}=this.initial;this.userAction=s;let c=e.initAnimationEndState(this),l={longitude:c.longitude,latitude:c.latitude,fov:c.fov},u={x:c.offset.x,y:c.offset.y,z:c.offset.z,distance:c.distance};this.emit(`initAnimation.start`,createEvent(`initAnimation.start`,{state:c,userAction:this.userAction})),this.perspToOrthoMotion.set({perspToOrtho:0},o).catch(noop),this.modelAlphaMotion.set({modelAlpha:1},o/3).catch(noop),this.cameraMotion.set(l,o).catch(noop),this.locationMotion.set(u,o).then(()=>{this.emit(`initAnimation.end`,createEvent(`initAnimation.end`,{state:c,userAction:this.userAction}))},e=>{let t=Object.assign(Object.assign(Object.assign({},this.currentPano),{mode:this.mode}),clonePose(this.camera.pose));this.emit(`initAnimation.end`,createEvent(`initAnimation.end`,{state:t,userAction:this.userAction}))}).then(()=>{t()})})}getForwardObserverOrNot(e){let[t]=this.modelScene.intersectRaycaster(e);if(!t)return null;let n=[];for(let t of this.works){let r=this.modelScene.models.find(e=>e.work===t);if(!(!r||r.visible===!1)&&!(t.observers.length<=0)&&(scratchObserverBox.copy(t.observerBox).expandByScalar(10).applyMatrix4(t.transform),scratchObserverBox.containsPoint(e.ray.origin)||e.ray.intersectsBox(scratchObserverBox)))for(let e of t.observers)n.push(e)}let[r,o]=arrayMin(n,e=>scratchVector3$1.copy(e.standingPosition).applyMatrix4(e.work.transform).distanceTo(t.point),!0);return r&&o<Math.max(r.standingPosition.distanceTo(this.camera.position)/5,10)?r:null}coordinatesForOffset(e){let t=this.renderer.getSize(new three.Vector2);return{longitude:-2*e.x/(t.x*this.viewport.width),latitude:2*e.y/(t.y*this.viewport.height)}}requestMomentumMovement(e,t,n,r){if(this.inMomentumMovement===null)return;r=Math.max(r,1);let o=Object.assign({},n),s={longitude:0,latitude:0,x:0,y:0,z:0};for(let e=0;e<r;e++)o.longitude*=.996,o.latitude*=.996*.998,o.x*=.99,o.y*=.99,o.z*=.99,s.longitude+=o.longitude,s.latitude+=o.latitude,s.x+=o.x,s.y+=o.y,s.z+=o.z;let c=this.cameraMotion.value.fov,l=formatRad$1(this.cameraMotion.value.longitude+s.longitude),u=clamp$1(typeof this.minLatitude==`function`?this.minLatitude(c):this.minLatitude,-Math.PI/2,Math.PI/2),d=clamp$1(typeof this.maxLatitude==`function`?this.maxLatitude(c):this.maxLatitude,-Math.PI/2,Math.PI/2),f=clamp$1(this.cameraMotion.value.latitude+s.latitude,u,d),p=new three.Vector3(this.locationMotion.value.x+s.x,this.locationMotion.value.y+s.y,this.locationMotion.value.z+s.z),m=Object.assign(Object.assign({},this.currentPano),{mode:this.mode,longitude:l,latitude:f,offset:p,fov:c,distance:this.locationMotion.value.distance}),h=e.state.offset.clone().sub(coordinatesToVector(e.state).setLength(m.distance)),g=!(Math.abs(o.longitude)>1e-4||Math.abs(o.latitude)>1e-4||Math.abs(o.x)>1e-4||Math.abs(o.y)>1e-4||Math.abs(o.z)>1e-4);(this.cameraFence?this.cameraFence.containsPoint(h):!0)===!1&&(g=!0);let _=createEvent(`gesture.momentum`,Object.assign(Object.assign({},e),{isFirst:t,isFinal:g,state:m}));if(this.emit(`gesture.fire`,_),this.inMomentumMovement.event=_,this.emit(`gesture.momentum`,_),e.defaultPrevented){this.inMomentumMovement=null;return}this.inMomentumMovement&&(this.cameraMotion.set({longitude:l,latitude:f},0).catch(noop),this.locationMotion.set({x:m.offset.x,y:m.offset.y,z:m.offset.z,distance:m.distance},0).catch(noop),g?this.inMomentumMovement=null:AnimationFrameLoop.shared.add((t,n)=>{this.requestMomentumMovement(e,!1,o,n)},!0))}fixFinalState(e){if(this.perspToOrthoMotion.getTargetKeyframe().value.perspToOrtho===1)return;let t=coordinatesToVector(e,new three.Vector3),n=new three.Vector3().copy(e.offset).sub(t.clone().setLength(e.distance)),r=new three.Raycaster(n,t);r.params.Points={threshold:.1},r.firstHitOnly=!0,r.hitFilter=e=>e.distance>minDistance+r.near,r.near=this.camera.near,r.far=this.camera.far;let o;if(o=this.modelScene.intersectRaycaster(r)[0],o&&o.distance<this.camera.near&&(o=void 0),!o){let e=new three.Plane(new three.Vector3(0,1,0),-this.modelScene.boundingBox.min.y),t=r.ray.intersectPlane(e,new three.Vector3);if(t){let e=t.distanceTo(r.ray.origin);e<1e3&&e>=r.near&&(o={distance:e,floorIndex:0,floor:0,point:t,object:this.scene,face:null})}}if(!o){let r=Math.max(e.distance,3);o={distance:r,floorIndex:0,floor:0,point:n.clone().add(t.clone().setLength(r)),object:this.scene,face:null}}o.distance>=this.camera.near&¬SimilarValue(e.distance,o.distance)&&(e.distance=o.distance,e.offset=o.point)}onPanGesture(e){this.userAction=e.userAction,this.stopMomentumMovement(),this.hideIntersectMesh();let t=e.pointers.length,n=this.panState,r=0,o=!1;e.pointerType===`mouse`&&(r=e.center.buttons,o=e.center.shiftKey),n&&r===0&&n.buttons!==0&&(r=n.buttons);let s=n==null?void 0:n.target;if(!s){let t=this.relativeClientPosition(e.center),n=this.createRaycasterFromCamera(t,this.camera);s=new three.Vector3().copy(n.ray.direction).multiplyScalar(3).add(n.ray.origin);let[r]=this.modelScene.intersectRaycaster(n);if(!r&&n.ray.direction.y<-.3){let e=new three.Plane(new three.Vector3(0,1,0),0),t=n.ray.intersectPlane(e,new three.Vector3);if(t){let e=t.distanceTo(n.ray.origin);e<1e4&&e>=n.near&&(r={distance:e,floorIndex:0,floor:0,point:t,object:this.scene})}}if(r)s.copy(r.point);else{let e=new three.Vector3().copy(this.camera.pose.offset).sub(this.camera.position).normalize(),t=new three.Plane().setFromNormalAndCoplanarPoint(e,this.camera.pose.offset);n.ray.intersectPlane(t,s)}}if(e.isFinal?this.panState=void 0:this.panState={target:s,buttons:r,pointerLength:t,defaultPrevented:e.defaultPrevented,x:e.center.x,y:e.center.y},n===void 0||n.pointerLength!==t){this.emit(`gesture.pan`,e);return}if(t>1||r===2||o){let t={x:e.center.x-n.x,y:e.center.y-n.y},r=new three.Vector3(this.locationMotion.value.x,this.locationMotion.value.y,this.locationMotion.value.z),o=coordinatesToVector(this.cameraMotion.value).setLength(this.locationMotion.value.distance).add(r),s=new three.Vector3().copy(o).sub(n.target).length();s*=Math.tan(this.camera.pose.fov/2*Math.PI/180);let c=this.renderer.getSize(new three.Vector2),l=2*t.x*s/c.y,u=2*t.y*s/c.y,d=new three.Vector3;d.setFromMatrixColumn(this.camera.matrix,0),d.multiplyScalar(-l),r.add(d),this.camera.pose.latitude<PANGESTURE_FORWARD_ANGLE?d.setFromMatrixColumn(this.camera.matrix,1):(d.setFromMatrixColumn(this.camera.matrix,0),d.crossVectors(this.camera.up,d)),d.multiplyScalar(u),r.add(d);let f=Object.assign(Object.assign({},this.currentPano),{mode:this.mode,longitude:this.camera.pose.longitude,latitude:this.camera.pose.latitude,fov:this.camera.pose.fov,offset:r,distance:this.camera.pose.distance});if(e.state=f,this.emit(`gesture.pan`,e),e.defaultPrevented){this.panState&&(this.panState.defaultPrevented=e.defaultPrevented);return}if(e.isFinal&&n.defaultPrevented)return;if(this.locationMotion.set({x:f.offset.x,y:f.offset.y,z:f.offset.z},0).catch(noop),e.isFinal&&(this.fixFinalState(f),Object.assign(e,{__fixFinalState:!0}),this.locationMotion.set({distance:f.distance,x:f.offset.x,y:f.offset.y,z:f.offset.z},0).catch(noop)),e.isFinal){let t=this.renderer.getSize(new three.Vector2),n=2*e.velocityX*s/t.y,r=2*e.velocityY*s/t.y,o=new three.Vector3,c=new three.Vector3;o.setFromMatrixColumn(this.camera.matrix,0),o.multiplyScalar(-n),c.add(o),this.camera.pose.latitude<PANGESTURE_FORWARD_ANGLE?o.setFromMatrixColumn(this.camera.matrix,1):(o.setFromMatrixColumn(this.camera.matrix,0),o.crossVectors(this.camera.up,o)),o.multiplyScalar(r),c.add(o),this.inMomentumMovement={uuid:createUuid()},this.requestMomentumMovement(e,!0,{longitude:0,latitude:0,x:c.x,y:c.y,z:c.z},0)}}else{let t={x:e.center.x-n.x,y:e.center.y-n.y},r=this.coordinatesForOffset(t),o=formatRad$1(this.cameraMotion.value.longitude+r.longitude),s=this.camera.pose.fov,c=clamp$1(typeof this.minLatitude==`function`?this.minLatitude(s):this.minLatitude,-Math.PI/2,Math.PI/2),l=clamp$1(typeof this.maxLatitude==`function`?this.maxLatitude(s):this.maxLatitude,-Math.PI/2,Math.PI/2),u=clamp$1(this.cameraMotion.value.latitude+r.latitude,c,l);this.camera.aspect<1&&Math.abs(e.overallVelocityX)>.2&&Math.atan2(Math.abs(e.overallVelocityY),Math.abs(e.overallVelocityX))<Math.PI/6.923&&(u=this.cameraMotion.value.latitude);let d=Object.assign(Object.assign({},this.currentPano),{mode:this.mode,longitude:o,latitude:u,fov:s,offset:this.camera.pose.offset,distance:this.camera.pose.distance});if(e.isFinal&&Object.assign(e,{__fixFinalState:!0}),e.state=d,this.emit(`gesture.pan`,e),e.defaultPrevented||e.isFinal&&n.defaultPrevented)return;if(e.isFinal?this.locationMotion.set({distance:d.distance,x:d.offset.x,y:d.offset.y,z:d.offset.z},0).catch(noop):this.cameraMotion.set({longitude:d.longitude,latitude:d.latitude},0).catch(noop),e.isFinal){let t=e.velocityX,n=e.velocityY;this.inMomentumMovement={uuid:createUuid()},this.requestMomentumMovement(e,!0,Object.assign(Object.assign({},this.coordinatesForOffset({x:t,y:n})),{x:0,y:0,z:0}),0)}}}onPinchGesture(t){var n;if(!this.initAnimationIsReady)return;this.userAction=t.userAction,this.stopMomentumMovement(),this.hideIntersectMesh();let r=(n=this.pinchState)==null?void 0:n.distance;if(t.isFirst){this.pinchState={x:t.center.x,y:t.center.y,scale:1,distance:this.locationMotion.value.distance};return}if(r===void 0)return;let o=this.modelScene.boundingBox.getCenter(new three.Vector3),s=e.distanceFromModel(this.modelScene,this.cameraMotion.value.fov,this.camera.aspect),c=clamp$1(r/t.scale,minDistance,1/0),l=t.state.offset.clone().sub(coordinatesToVector(t.state).setLength(c)),u=this.modelScene.boundingBox.containsPoint(l),d;if(!u&&this.pinchState&&this.pinchState.scale>t.scale&&o.distanceTo(l)>s?d=t.state.distance:(d=c,this.pinchState&&(this.pinchState.scale=t.scale)),t.state.distance=d,this.emit(`gesture.pinch`,t),!t.defaultPrevented&&(this.locationMotion.set({distance:t.state.distance},0).catch(noop),t.pointerType!==`mouse`&&(t.type=`gesture.pan`,this.onPanGesture(t)),t.isFinal)){if(!(`__fixFinalState`in t)){let e=t.state;this.fixFinalState(t.state);let n={x:e.offset.x,y:e.offset.y,z:e.offset.z,distance:e.distance};this.locationMotion.set(n,0).catch(noop)}this.panState=void 0,this.pinchState=void 0}}onMouseMove(e){var t,n;if(!this.intersectMesh.parent||this.panState||this.pinchState||this.mouseWheelState||(this.emit(`gesture.mousemove`,e),e.defaultPrevented))return;let r=e.center.raycaster;if(e.isFinal&&this.intersectMesh.parent&&this.intersectMesh.visible===!0){this.hideIntersectMesh();return}let[o]=this.modelScene.intersectRaycaster(r),s=createEvent(`intersect.update`,{raycaster:r,intersection:o==null?null:o,object:this.intersectMesh});if(this.emit(`intersect.update`,s),s.defaultPrevented){this.hideIntersectMesh();return}if(o){let e=(n=(t=o.face)==null?void 0:t.normal)==null?new three.Vector3().copy(r.ray.direction).multiplyScalar(-1):n,s=e.clone(),c=o.point.clone();this.intersectMesh.position.copy(c);let l=c.clone().add(s);if(this.intersectMesh.lookAt(l),Math.abs(e.y)>.99){let e=this.camera.position.clone().sub(c);this.intersectMesh.rotation.z=-Math.atan2(e.z,e.x)}this.intersectMesh.visible=!0,this.needsRender=!0}else this.hideIntersectMesh()}onMouseWheel(t){if(this.initAnimationIsReady)if(this.userAction=t.userAction,this.stopMomentumMovement(),this.hideIntersectMesh(),t.isFinal){let e=Object.assign(Object.assign({},this.currentPano),{mode:this.mode,longitude:this.cameraMotion.value.longitude,latitude:this.cameraMotion.value.latitude,fov:this.cameraMotion.value.fov,offset:new three.Vector3(this.locationMotion.value.x,this.locationMotion.value.y,this.locationMotion.value.z),distance:this.locationMotion.value.distance});if(this.fixFinalState(e),this.emit(`gesture.mousewheel`,t),t.defaultPrevented)return;let n={x:e.offset.x,y:e.offset.y,z:e.offset.z,distance:e.distance};this.locationMotion.set(n,0).catch(noop)}else{let n=e.distanceFromModel(this.modelScene,this.cameraMotion.value.fov,this.camera.aspect),r=new three.Vector3(this.locationMotion.value.x,this.locationMotion.value.y,this.locationMotion.value.z),o=coordinatesToVector(this.cameraMotion.value,new three.Vector3).negate(),s=new three.Ray(r,o).intersectBox(this.modelScene.boundingBox,new three.Vector3);s&&(n+=s.distanceTo(r));let c=Math.max(this.locationMotion.value.distance-this.camera.near,0),l=t.center.delta/10*Math.max(c/5,.1);if(c<=n||l>0)if(this.locationMotion.value.distance-l>=minDistance){let e=this.locationMotion.value.distance-l;t.state.distance=e}else{let e=coordinatesToVector(this.cameraMotion.value);e.setLength(l),t.state.offset.add(e)}if(this.emit(`gesture.mousewheel`,t),t.defaultPrevented)return;this.locationMotion.set({distance:t.state.distance,x:t.state.offset.x,y:t.state.offset.y,z:t.state.offset.z},0).catch(noop)}}onTapGesture(e){var t;this.userAction=e.userAction,this.stopMomentumMovement();let n=e.center.raycaster,r=this.getForwardObserverOrNot(n);if(!r)this.emit(`gesture.tap`,e);else{let n={longitude:this.camera.pose.longitude,latitude:0},o=Object.assign(Object.assign({},e.state),{mode:`Panorama`,workCode:r.work.workCode,panoIndex:r.panoIndex,longitude:n.longitude,latitude:n.latitude,offset:r?r.position.clone():new three.Vector3,distance:0});if(e.state=o,this.emit(`gesture.tap`,e),!e.defaultPrevented&&(this.emit(`pano.select`,createEvent(`pano.select`,{prevPano:this.currentPano,state:o,userAction:e.userAction,options:n,progress:0,error:null})),r&&r.active)){let e=this.pendingTextureId=createUuid(),s=panoStringify({panoIndex:r.panoIndex,workCode:r.work.workCode}),c={right:r.images.work.getURL(r.images.right),left:r.images.work.getURL(r.images.left),up:r.images.work.getURL(r.images.up),down:r.images.work.getURL(r.images.down),front:r.images.work.getURL(r.images.front),back:r.images.work.getURL(r.images.back)},l=this.imageOptions.transform,u=Object.assign({key:`pano.${s}`},pick(this.imageOptions,[`format`,`size`,`quality`,`sharpen`,`forceUseExifOrientation`,`mappings`])),d=`pano:`+jsonHash([c,u,l]),f=this.modelScene.parameter,p;f.pano0&&f.pano0.map.name===d?p=f.pano0:f.pano1&&f.pano1.map.name===d&&(p=f.pano1),p?(f.pano0&&f.pano0.map!==p.map&&f.pano0.map.dispose(),f.pano1&&f.pano1.map!==p.map&&f.pano1.map!==((t=f.pano0)==null?void 0:t.map)&&f.pano1.map.dispose(),f.set({pano0:p,pano1:p}),this.emit(`pano.request`,createEvent(`pano.request`,{userAction:!0,prevPano:this.currentPano,progress:0,state:o,options:n,error:null}))):this.textureLoader.loadCubeTexture(c,{imageURL:{transform:l,options:u},format:three.RGBFormat,viaAjax:!0,fetcher:getFetcher(this.fiveId,r.work)},void 0,void 0,void 0,this.renderer).then(t=>{var c,l;let{body:u}=t;if(this.destroyed||this.pendingTextureId!==e){u.dispose();return}this.pendingTextureId=null,u.name=d;let p=Array.isArray(u.image)?u.image[0]:u.image,m=(c=p==null?void 0:p.width)==null?2048:c,h=r.images.histogram;h||(h=new Histogram().formPixels(getRgbaDataFromCubeTexture(this.renderer,u,!0,sharedHistogramRgbaData).data),r.images.histogram=h);let g={panoId:s,map:u,mapSize:m,mapHistogram:new three.Vector4().fromArray(h.toArray()),matrix:r.matrix.clone().premultiply(r.work.transform),zoom:1};f.pano0&&f.pano0.map.dispose(),f.pano1&&f.pano1.map!==((l=f.pano0)==null?void 0:l.map)&&f.pano1.map.dispose(),f.set({pano0:g,pano1:g}),this.emit(`pano.request`,createEvent(`pano.request`,{userAction:!0,prevPano:this.currentPano,progress:0,state:o,options:n,error:null}))}).catch(t=>{this.destroyed||this.pendingTextureId!==e||(this.pendingTextureId=null)})}}}onDblTapGesture(e){if(!this.initAnimationIsReady)return;this.userAction=e.userAction,this.stopMomentumMovement(),this.hideIntersectMesh();let t=e.state,n=e.center.raycaster,r=n.ray.origin.clone().add(n.ray.direction.clone().setLength(3)),o=1,s=3,c=1,[l]=this.modelScene.intersectRaycaster(n);if(l&&(r=l.point.clone(),c=l.distance>4/2?1:3),e.state.distance=c,e.state.offset=r,this.emit(`gesture.dbltap`,e),e.defaultPrevented)return;let u={x:t.offset.x,y:t.offset.y,z:t.offset.z,distance:t.distance};this.locationMotion.set(u,360).catch(noop),this.hideIntersectMesh()}hideIntersectMesh(){this.intersectMesh.visible===!0&&(this.intersectMesh.visible=!1,this.needsRender=!0)}};function isNil(e){return e==null}var _moveEvent={type:`move`},XRController=class{constructor(){this._targetRay=null,this._grip=null,this._hand=null,this._axes=[0,0]}getHandSpace(){return this._hand===null&&(this._hand=new three.Group,this._hand.matrixAutoUpdate=!1,this._hand.visible=!1,this._hand.joints={},this._hand.inputState={pinching:!1}),this._hand}getTargetRaySpace(){return this._targetRay===null&&(this._targetRay=new three.Group,this._targetRay.matrixAutoUpdate=!1,this._targetRay.visible=!1,this._targetRay.hasLinearVelocity=!1,this._targetRay.linearVelocity=new three.Vector3,this._targetRay.hasAngularVelocity=!1,this._targetRay.angularVelocity=new three.Vector3),this._targetRay}getGripSpace(){return this._grip===null&&(this._grip=new three.Group,this._grip.matrixAutoUpdate=!1,this._grip.visible=!1,this._grip.hasLinearVelocity=!1,this._grip.linearVelocity=new three.Vector3,this._grip.hasAngularVelocity=!1,this._grip.angularVelocity=new three.Vector3),this._grip}dispatchEvent(e){return this._targetRay!==null&&this._targetRay.dispatchEvent(e),this._grip!==null&&this._grip.dispatchEvent(e),this._hand!==null&&this._hand.dispatchEvent(e),this}disconnect(e){return this.dispatchEvent({type:`disconnected`,data:e}),this._targetRay!==null&&(this._targetRay.visible=!1),this._grip!==null&&(this._grip.visible=!1),this._hand!==null&&(this._hand.visible=!1),this}getAxes(){return this._axes}update(e,t,n){let r=null,o=null,s=null,c=this._targetRay,l=this._grip,u=this._hand;if(e&&e.gamepad&&e.gamepad.axes&&(this._axes=[e.gamepad.axes[2],e.gamepad.axes[3]]),e&&t.session.visibilityState!==`visible-blurred`)if(c!==null&&(r=t.getPose(e.targetRaySpace,n),r!==null&&(c.matrix.fromArray(r.transform.matrix),c.matrix.decompose(c.position,c.rotation,c.scale),r.linearVelocity?(c.hasLinearVelocity=!0,c.linearVelocity.copy(r.linearVelocity)):c.hasLinearVelocity=!1,r.angularVelocity?(c.hasAngularVelocity=!0,c.angularVelocity.copy(r.angularVelocity)):c.hasAngularVelocity=!1,this.dispatchEvent(_moveEvent))),u&&e.hand){s=!0;for(let r of e.hand.values()){let e=t.getJointPose(r,n);if(u.joints[r.jointName]===void 0){let e=new three.Group;e.matrixAutoUpdate=!1,e.visible=!1,u.joints[r.jointName]=e,u.add(e)}let o=u.joints[r.jointName];e!==null&&(o.matrix.fromArray(e.transform.matrix),o.matrix.decompose(o.position,o.rotation,o.scale),o.jointRadius=e.radius),o.visible=e!==null}let r=u.joints[`index-finger-tip`],o=u.joints[`thumb-tip`],c=r.position.distanceTo(o.position),l=.02,d=.005;u.inputState.pinching&&c>l+d?(u.inputState.pinching=!1,this.dispatchEvent({type:`pinchend`,handedness:e.handedness,target:this})):!u.inputState.pinching&&c<=l-d&&(u.inputState.pinching=!0,this.dispatchEvent({type:`pinchstart`,handedness:e.handedness,target:this}))}else l!==null&&e.gripSpace&&(o=t.getPose(e.gripSpace,n),o!==null&&(l.matrix.fromArray(o.transform.matrix),l.matrix.decompose(l.position,l.rotation,l.scale),o.linearVelocity?(l.hasLinearVelocity=!0,l.linearVelocity.copy(o.linearVelocity)):l.hasLinearVelocity=!1,o.angularVelocity?(l.hasAngularVelocity=!0,l.angularVelocity.copy(o.angularVelocity)):l.hasAngularVelocity=!1));return c!==null&&(c.visible=r!==null),l!==null&&(l.visible=o!==null),u!==null&&(u.visible=s!==null),this}},framebufferScaleFactor=1,isAppleVisionPro=()=>{try{let e=/Macintosh/i.test(navigator.userAgent),t=navigator.maxTouchPoints===5;return e&&t}catch(e){return console.error(`Error determining if the device is an Apple Vision Pro: `,e),!1}},isOculus=()=>{try{return/Oculus/i.test(navigator.userAgent)}catch(e){return console.error(`Error determining if the device is an Oculus: `,e),!1}},XRManager=class{constructor(e,t,n){var r,o,s,c,l;this.isPanorama=(r=n==null?void 0:n.isPanorama)==null?!0:r,navigator.userAgent.toLowerCase();let u;u=isAppleVisionPro()?`VP`:isOculus()?`Oculus`:`Pico`,this.machineType=(o=n==null?void 0:n.machineType)==null?u:o,this.renderer=e,this.gl=t,this.enabled=!1,this.session=null,this.referenceSpaceType=(s=n==null?void 0:n.referenceSpaceType)==null?`local-floor`:s,this.referenceSpace=null,this.onSessionStartCallback=(c=n==null?void 0:n.onSessionStart)==null?noop:c,this.onSessionEndCallback=(l=n==null?void 0:n.onSessionEnd)==null?noop:l,this.controllers=[new XRController,new XRController],this.inputSourcesMap=new Map,this.cameraVR=new three.ArrayCamera,this.cameraL=new three.PerspectiveCamera,this.cameraR=new three.PerspectiveCamera,this.cameraVR.cameras.push(this.cameraL,this.cameraR),this.cameraL.viewport=new three.Vector4,this.cameraR.viewport=new three.Vector4,this.cameraL.layers.enable(1),this.cameraR.layers.enable(2),this.cameraVR.layers.enable(1),this.cameraVR.layers.enable(2),this.isPresenting=!1,this.currentDepthNear=null,this.currentDepthFar=null,this.cameraLPos=new three.Vector3,this.cameraRPos=new three.Vector3}getController(e){let t=this.controllers[e];return t||console.warn(`no controller find`),t.getTargetRaySpace()}getRightController(){if(!this.session||!this.session.inputSources)return null;let e;if(this.session.inputSources.forEach((t,n)=>{t.handedness===`right`&&(e=n)}),e===void 0)return console.warn(`no inputSource for right hand`),null;let t=this.controllers[e];return t?t.getTargetRaySpace():(console.warn(`right controller not find`),null)}getLeftController(){if(!this.session||!this.session.inputSources)return null;let e;if(this.session.inputSources.forEach((t,n)=>{t.handedness===`left`&&(e=n)}),e===void 0)return console.warn(`no inputSource for left hand`),null;let t=this.controllers[e];return t?t.getTargetRaySpace():(console.warn(`left controller not find`),null)}getControllerGrip(e){let t=this.controllers[e];return t||console.warn(`no controller find`),t.getGripSpace()}getCameras(){return{cameraL:this.cameraL,cameraR:this.cameraR,cameraVR:this.cameraVR}}updateCamera(e,t){t===null?e.matrixWorld.copy(e.matrix):e.matrixWorld.multiplyMatrices(t.matrixWorld,e.matrix),e.matrixWorldInverse.getInverse(e.matrixWorld)}setProjectionFromUnion(e,t,n){this.cameraLPos.setFromMatrixPosition(t.matrixWorld),this.cameraRPos.setFromMatrixPosition(n.matrixWorld);var r=this.cameraLPos.distanceTo(this.cameraRPos),o=t.projectionMatrix.elements,s=n.projectionMatrix.elements,c=o[14]/(o[10]-1),l=o[14]/(o[10]+1),u=(o[9]+1)/o[5],d=(o[9]-1)/o[5],f=(o[8]-1)/o[0],p=(s[8]+1)/s[0],m=c*f,h=c*p,g=r/(-f+p),_=g*-f;t.matrixWorld.decompose(e.position,e.quaternion,e.scale),e.translateX(_),e.translateZ(g),e.matrixWorld.compose(e.position,e.quaternion,e.scale),e.matrixWorldInverse.getInverse(e.matrixWorld);var v=c+g,y=l+g,b=m-_,S=h+(r-_),C=u*l/y*v,w=d*l/y*v;e.projectionMatrix.makePerspective(b,S,C,w,v,y)}getCamera(e){this.cameraVR.near=this.cameraR.near=this.cameraL.near=e.near,this.cameraVR.far=this.cameraR.far=this.cameraL.far=e.far,this.session&&(this.currentDepthNear!==this.cameraVR.near||this.currentDepthFar!==this.cameraVR.far)&&(this.session.updateRenderState({depthNear:this.cameraVR.near,depthFar:this.cameraVR.far}),this.currentDepthNear=this.cameraVR.near,this.currentDepthFar=this.cameraVR.far);let t=e.parent,n=this.cameraVR.cameras;this.updateCamera(this.cameraVR,t);for(let e=0;e<n.length;e++)this.updateCamera(n[e],t);e.matrixWorld.copy(this.cameraVR.matrixWorld);let r=e.children;for(let e=0,t=r.length;e<t;e++)r[e].updateMatrixWorld(!0);return n.length===2?this.setProjectionFromUnion(this.cameraVR,this.cameraL,this.cameraR):this.cameraVR.projectionMatrix.copy(this.cameraL.projectionMatrix),this.cameraVR}updateInputSources(e){if(!this.session){console.warn(`session is lose!`);return}let t=this.session.inputSources;for(let e=0;e<this.controllers.length;e++)this.inputSourcesMap.set(t[e],this.controllers[e]);for(let t=0;t<e.removed.length;t++){let n=e.removed[t],r=this.inputSourcesMap.get(n);r&&(r.dispatchEvent({type:`disconnected`,data:n}),this.inputSourcesMap.delete(n))}for(let t=0;t<e.added.length;t++){let n=e.added[t],r=this.inputSourcesMap.get(n);r&&r.dispatchEvent({type:`connected`,data:n})}}onSessionEvent(e){let t=this.inputSourcesMap.get(e.inputSource);t&&t.dispatchEvent({type:e.type})}onSessionEnd(){this.inputSourcesMap.forEach(function(e,t){e.disconnect(t)}),this.inputSourcesMap.clear(),this.isPresenting=!1,this.session=null,AnimationFrameLoop.shared.setContext(null),this.onSessionEndCallback()}onRequestReferenceSpace(e){this.referenceSpace=e,this.isPresenting=!0,this.session&&this.onSessionStartCallback(this.session)}setSession(e){if(this.session=e,this.session){this.session.addEventListener(`select`,e=>{this.onSessionEvent(e)}),this.session.addEventListener(`selectstart`,e=>{this.onSessionEvent(e)}),this.session.addEventListener(`selectend`,e=>{this.onSessionEvent(e)}),this.session.addEventListener(`squeeze`,e=>{this.onSessionEvent(e)}),this.session.addEventListener(`squeezestart`,e=>{this.onSessionEvent(e)}),this.session.addEventListener(`squeezeend`,e=>{this.onSessionEvent(e)}),this.session.addEventListener(`end`,e=>{this.onSessionEnd()});let e=this.gl.getContextAttributes();this.gl.makeXRCompatible().then(()=>{let t={antialias:e==null?void 0:e.antialias,alpha:e==null?void 0:e.alpha,depth:e==null?void 0:e.depth,stencil:e==null?void 0:e.stencil,framebufferScaleFactor};if(!this.session){console.error(`session is lose while set session!`);return}switch(this.machineType){case`Pico`:case`VP`:this.session.updateRenderState({baseLayer:new XRWebGLLayer(this.session,this.gl,t)});break;case`Oculus`:this.session.updateRenderState({baseLayer:new XRWebGLLayer(this.session,this.gl,t)});break;default:this.machineType;break}this.session.requestReferenceSpace(this.referenceSpaceType).then(e=>{this.onRequestReferenceSpace(e)}),this.session.addEventListener(`inputsourceschange`,e=>{this.updateInputSources(e)})})}}},LineSegmentsGeometry=class extends three.InstancedBufferGeometry{constructor(){super(),this.type=`LineSegmentsGeometry`,this.setIndex([0,2,1,2,3,1,2,4,3,4,5,3,4,6,5,6,7,5]),this.setAttribute(`position`,new three.Float32BufferAttribute([-1,2,0,1,2,0,-1,1,0,1,1,0,-1,0,0,1,0,0,-1,-1,0,1,-1,0],3)),this.setAttribute(`uv`,new three.Float32BufferAttribute([-1,2,1,2,-1,1,1,1,-1,-1,1,-1,-1,-2,1,-2],2))}applyMatrix4(e){let t=this.attributes.instanceStart,n=this.attributes.instanceEnd;return t!==void 0&&(t.applyMatrix4(e),n.applyMatrix4(e),t.needsUpdate=!0),this.boundingBox!==null&&this.computeBoundingBox(),this.boundingSphere!==null&&this.computeBoundingSphere(),this}setPositions(e){let t;t=e instanceof Float32Array?e:Array.isArray(e)?new Float32Array(e):new Float32Array;let n=new three.InstancedInterleavedBuffer(t,6,1);return this.setAttribute(`instanceStart`,new three.InterleavedBufferAttribute(n,3,0)),this.setAttribute(`instanceEnd`,new three.InterleavedBufferAttribute(n,3,3)),this.computeBoundingBox(),this.computeBoundingSphere(),this}setColors(e){let t;t=e instanceof Float32Array?e:Array.isArray(e)?new Float32Array(e):new Float32Array;let n=new three.InstancedInterleavedBuffer(t,6,1);return this.setAttribute(`instanceColorStart`,new three.InterleavedBufferAttribute(n,3,0)),this.setAttribute(`instanceColorEnd`,new three.InterleavedBufferAttribute(n,3,3)),this}fromWireframeGeometry(e){return this.setPositions(e.attributes.position.array),this}fromEdgesGeometry(e){return this.setPositions(e.attributes.position.array),this}fromMesh(e){return this.fromWireframeGeometry(new three.WireframeGeometry(e.geometry)),this}fromLineSegments(e){var t=e.geometry;if(t instanceof three.Geometry){let e=new three.BufferGeometry().fromGeometry(t);this.setPositions(e.attributes.position.array)}else t instanceof three.BufferGeometry&&this.setPositions(t.attributes.position.array);return this}computeBoundingBox(){this.boundingBox===null&&(this.boundingBox=new three.Box3);let e=this.attributes.instanceStart,t=this.attributes.instanceEnd;if(e!==void 0&&t!==void 0){let n=new three.Box3;this.boundingBox.setFromBufferAttribute(e),n.setFromBufferAttribute(t),this.boundingBox.union(n)}}computeBoundingSphere(){this.boundingSphere===null&&(this.boundingSphere=new three.Sphere),this.boundingBox===null&&this.computeBoundingBox();let e=this.attributes.instanceStart,t=this.attributes.instanceEnd;if(e!==void 0&&t!==void 0){let n=this.boundingSphere.center;this.boundingBox.getCenter(n);let r=0,o=new three.Vector3;for(let s=0,c=e.count;s<c;s++)o.fromBufferAttribute(e,s),r=Math.max(r,n.distanceToSquared(o)),o.fromBufferAttribute(t,s),r=Math.max(r,n.distanceToSquared(o));this.boundingSphere.radius=Math.sqrt(r),isNaN(this.boundingSphere.radius)&&console.error(`THREE.LineSegmentsGeometry.computeBoundingSphere(): Computed radius is NaN. The instanced position data is likely to have NaN values.`,this)}}toJSON(){}};Object.assign(LineSegmentsGeometry.prototype,{isLineSegmentsGeometry:!0});var lineShader={uniforms:three.UniformsUtils.merge([three.UniformsLib.common,three.UniformsLib.fog,{linewidth:{value:1},resolution:{value:new three.Vector2(1,1)},dashScale:{value:1},dashSize:{value:1},gapSize:{value:1},opacity:{value:1}}]),vertexShader:`
|
|
2041
2041
|
#include <common>
|
|
2042
2042
|
#include <color_pars_vertex>
|
|
2043
2043
|
#include <fog_pars_vertex>
|
|
@@ -2236,7 +2236,7 @@ void main() {
|
|
|
2236
2236
|
#include <premultiplied_alpha_fragment>
|
|
2237
2237
|
|
|
2238
2238
|
}
|
|
2239
|
-
`},LineMaterial=class extends three.ShaderMaterial{constructor(e){super({uniforms:three.UniformsUtils.clone(lineShader.uniforms),vertexShader:lineShader.vertexShader,fragmentShader:lineShader.fragmentShader,clipping:!0}),this.type=`LineMaterial`,this.dashed=!1,Object.defineProperties(this,{color:{enumerable:!0,get(){return this.uniforms.diffuse.value},set(e){this.uniforms.diffuse.value=e}},linewidth:{enumerable:!0,get(){return this.uniforms.linewidth.value},set(e){this.uniforms.linewidth.value=e}},dashScale:{enumerable:!0,get(){return this.uniforms.dashScale.value},set(e){this.uniforms.dashScale.value=e}},dashSize:{enumerable:!0,get(){return this.uniforms.dashSize.value},set(e){this.uniforms.dashSize.value=e}},gapSize:{enumerable:!0,get(){return this.uniforms.gapSize.value},set(e){this.uniforms.gapSize.value=e}},opacity:{enumerable:!0,get(){return this.uniforms.opacity.value},set(e){this.uniforms.opacity.value=e}},resolution:{enumerable:!0,get(){return this.uniforms.resolution.value},set(e){this.uniforms.resolution.value.copy(e)}}}),this.setValues(e)}};Object.assign(LineMaterial.prototype,{isLineMaterial:!0});var LineSegments2=class extends three.Mesh{constructor(e,t){super(),this.type=`LineSegments2`,this.geometry=e===void 0?new LineSegmentsGeometry:e,this.material=t===void 0?new LineMaterial({color:Math.random()*16777215}):t}computeLineDistances(){let e=this.geometry,t=e.attributes.instanceStart,n=e.attributes.instanceEnd,r=new Float32Array(2*t.count),o=new three.Vector3,s=new three.Vector3;for(var c=0,l=0,u=t.count;c<u;c++,l+=2)o.fromBufferAttribute(t,c),s.fromBufferAttribute(n,c),r[l]=l===0?0:r[l-1],r[l+1]=r[l]+o.distanceTo(s);let d=new three.InstancedInterleavedBuffer(r,2,1);return e.setAttribute(`instanceDistanceStart`,new three.InterleavedBufferAttribute(d,1,0)),e.setAttribute(`instanceDistanceEnd`,new three.InterleavedBufferAttribute(d,1,1)),this}raycast(e,t){e.camera===null&&console.error(`LineSegments2: "Raycaster.camera" needs to be set in order to raycast against LineSegments2.`);let n=e.ray,r=e.camera,o=r.projectionMatrix,s=this.geometry,c=this.material,l=c.resolution,u=c.linewidth,d=s.attributes.instanceStart,f=s.attributes.instanceEnd,p=new three.Vector4,m=new three.Vector4,h=new three.Vector4,g=new three.Vector3,_=new three.Matrix4,v=new three.Line3,y=new three.Vector3;n.at(1,h),h.w=1,h.applyMatrix4(r.matrixWorldInverse),h.applyMatrix4(o),h.multiplyScalar(1/h.w),h.x*=l.x/2,h.y*=l.y/2,h.z=0,g.copy(h);let b=this.matrixWorld;_.multiplyMatrices(r.matrixWorldInverse,b);for(var S=0,C=d.count;S<C;S++){p.fromBufferAttribute(d,S),m.fromBufferAttribute(f,S),p.w=1,m.w=1,p.applyMatrix4(_),m.applyMatrix4(_),p.applyMatrix4(o),m.applyMatrix4(o),p.multiplyScalar(1/p.w),m.multiplyScalar(1/m.w);var w=p.z<-1&&m.z<-1,T=p.z>1&&m.z>1;if(w||T)continue;p.x*=l.x/2,p.y*=l.y/2,m.x*=l.x/2,m.y*=l.y/2,v.start.copy(p),v.start.z=0,v.end.copy(m),v.end.z=0;let e=v.closestPointToPointParameter(g,!0);v.at(e,y);let r=three.MathUtils.lerp(p.z,m.z,e),s=r>=-1&&r<=1;var E=g.distanceTo(y)<u*.5;if(s&&E){v.start.fromBufferAttribute(d,S),v.end.fromBufferAttribute(f,S),v.start.applyMatrix4(b),v.end.applyMatrix4(b);var D=new three.Vector3,O=new three.Vector3;n.distanceSqToSegment(v.start,v.end,O,D),t.push({point:O,pointOnLine:D,distance:n.origin.distanceTo(O),object:this,faceIndex:S})}}}};Object.assign(LineSegments2.prototype,{isLineSegments2:!0});var Line2=class extends LineSegments2{constructor(e,t){super(e,t),this.type=`Line2`}};Object.assign(Line2.prototype,{isLine2:!0});var LineGeometry=class extends LineSegmentsGeometry{constructor(){super(),this.type=`LineGeometry`}setPositions(e){let t=e.length-3,n=new Float32Array(2*t);for(let r=0;r<t;r+=3)n[2*r]=e[r],n[2*r+1]=e[r+1],n[2*r+2]=e[r+2],n[2*r+3]=e[r+3],n[2*r+4]=e[r+4],n[2*r+5]=e[r+5];return super.setPositions(n),this}setColors(e){let t=e.length-3,n=new Float32Array(2*t);for(let r=0;r<t;r+=3)n[2*r]=e[r],n[2*r+1]=e[r+1],n[2*r+2]=e[r+2],n[2*r+3]=e[r+3],n[2*r+4]=e[r+4],n[2*r+5]=e[r+5];return super.setColors(n),this}fromLine(e){let t=e.geometry;if(t instanceof three.Geometry){let e=new three.BufferGeometry().fromGeometry(t);this.setPositions(e.attributes.position.array)}else t instanceof three.BufferGeometry&&this.setPositions(t.attributes.position.array);return this}copy(){return this}};Object.assign(LineGeometry.prototype,{isLineGeometry:!0});var circleImageURL=`data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAAZiS0dEAAAAAAAA+UO7fwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9sHDgwCEMBJZu0AAAAdaVRYdENvbW1lbnQAAAAAAENyZWF0ZWQgd2l0aCBHSU1QZC5lBwAABM5JREFUWMO1V0tPG2cUPZ4Hxh6DazIOrjFNqJs0FIMqWFgWQkatsmvVbtggKlSVRVf5AWz4AWz4AUSKEChll19QJYSXkECuhFxsHjEhxCYm+DWGMZ5HF72DJq4bAzFXurI0M/I5997v3u9cC65vTJVn2lX/xHINQOYSBLTLEuIuCWw4Z3IGAEvf6ASmVHjNzHCXBG4A0AjACsAOwEbO0nsFQBnAGYASAIl+ZRMR7SolMEdsByD09fV5R0ZGgg8ePPjW5/N1iqLYpuu6RZblciKR2I9Go69evnwZnZ+fjwI4IS8AKBIRzeQfJWCANwKwh0KhtrGxsYehUOin1tbW+zzP23ietzY2NnIAoGmaLsuyUiqVyvl8XtrY2NiamZn589mzZxsAUgCOAeQAnFI2tI+VxIjaAeDzoaGh7xYWFuZOTk6OZVk+12uYqqq6JEnn0Wg0OT4+/geAXwGEAdwDIFJQXC1wO4DWR48e/RCPxxclSSroVzRFUbSDg4P848ePFwH8DuAhkWih83TRQWxFOXgAwvDwcOfo6OhvXV1d39tsNtuVBwTDWBwOh1UUxVsMw1hXVlbSdCgNV43uYSvrHg6H24aHh38eHBz85TrgF9FYLHA4HLzH43FvbW2d7u/vG+dANp8FpqIlbd3d3V8Fg8EfBUFw4BONZVmL3+9vHhkZCQL4AoAHgJPK8G+yzC0XDofdoVAo5PP5vkadTBAEtr+/39ff3x8gAp/RPOEqx2qjx+NpvXv3bk9DQ0NDvQgwDIOWlhZrMBj8kgi0UJdxRgYMArzL5XJ7vd57qLPZ7Xamp6fnNgBXtQxcjFuHw+Hyer3t9SYgCAITCAScAJoBNNEY/08GOFVVrfVMv7kMNDntFD1vjIAPrlRN0xjckOm6biFQ3jwNPwDMZrOnqVTqfb3Bi8Wivru7W/VCYkwPlKOjo0IikXh7EwQikYgE4Nw0CfXKDCipVCoTj8df3QABbW1tLUc6oUgkFPMkVACUNjc337148eKvw8PDbJ2jP1taWkoCyNDVXDSECmNSK4qiKNLq6urW8+fPI/UicHx8rD59+jSVy+WOAKSJhKENwFItLtoxk8mwsixzHR0dHe3t7c5PAU+n09rs7OzJkydPYqVSaQfANoDXALIk31S2smU1TWMPDg7K5XKZ7+3t9TudTut1U7+wsFCcmJiIpdPpbQBxADsAknQWymYCOukBHYCuKApisdhpMpnURFEU79y503TVyKenpzOTk5M7e3t7MQKPV0Zv1gNm+awB0MvlshqLxfLb29uyJElWURSbXC4XXyvqxcXFs6mpqeTc3Nzu3t7e3wQcA7BPZ8Cov1pNlJplmQtAG8MwHV6v95tAINA5MDBwPxAIuLu6upr8fr/VAN3c3JQjkcjZ+vp6fnl5+d2bN29SuVzuNYAEpf01CdRChUL+X1VskHACuA3Ay3Fcu9vt7nA6nZ7m5uYWQRCaNE3jVVW15PP580KhIGUymWw2m00DOAJwSP4WwPtq4LX2Ao6USxNlQyS/RcQcdLGwlNIz6vEMAaZpNzCk2Pll94LK/cDYimxERiBwG10sxjgvEZBE0UpE6vxj+0Ct5bTaXthgEhRmja8QWNkkPGsuIpfdjpkK+cZUWTC0KredVmtD/gdlSl6EG4AMvQAAAABJRU5ErkJggg==`,DEFAULT_COLOR=14467195,POINT_SIZE=8,DEFAULT_LINEWIDTH=2,DEFAULT_DASHSCALE=20,sharedCircleTexture=null,FiveLine=class extends three.Object3D{static get version(){return`6.8.0-alpha.21`}constructor(e=new three.Vector3,t=new three.Vector3){super(),this.type=`FiveLine`,this.needsRender=!0,this.line=new Line2(new LineGeometry,new LineMaterial({color:DEFAULT_COLOR,linewidth:DEFAULT_LINEWIDTH,dashScale:DEFAULT_DASHSCALE,dashed:!1}));let n=new three.BufferGeometry,r=new three.PointsMaterial({color:DEFAULT_COLOR,size:POINT_SIZE,map:sharedCircleTexture||(sharedCircleTexture=new three.TextureLoader().load(`data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAAZiS0dEAAAAAAAA+UO7fwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9sHDgwCEMBJZu0AAAAdaVRYdENvbW1lbnQAAAAAAENyZWF0ZWQgd2l0aCBHSU1QZC5lBwAABM5JREFUWMO1V0tPG2cUPZ4Hxh6DazIOrjFNqJs0FIMqWFgWQkatsmvVbtggKlSVRVf5AWz4AWz4AUSKEChll19QJYSXkECuhFxsHjEhxCYm+DWGMZ5HF72DJq4bAzFXurI0M/I5997v3u9cC65vTJVn2lX/xHINQOYSBLTLEuIuCWw4Z3IGAEvf6ASmVHjNzHCXBG4A0AjACsAOwEbO0nsFQBnAGYASAIl+ZRMR7SolMEdsByD09fV5R0ZGgg8ePPjW5/N1iqLYpuu6RZblciKR2I9Go69evnwZnZ+fjwI4IS8AKBIRzeQfJWCANwKwh0KhtrGxsYehUOin1tbW+zzP23ietzY2NnIAoGmaLsuyUiqVyvl8XtrY2NiamZn589mzZxsAUgCOAeQAnFI2tI+VxIjaAeDzoaGh7xYWFuZOTk6OZVk+12uYqqq6JEnn0Wg0OT4+/geAXwGEAdwDIFJQXC1wO4DWR48e/RCPxxclSSroVzRFUbSDg4P848ePFwH8DuAhkWih83TRQWxFOXgAwvDwcOfo6OhvXV1d39tsNtuVBwTDWBwOh1UUxVsMw1hXVlbSdCgNV43uYSvrHg6H24aHh38eHBz85TrgF9FYLHA4HLzH43FvbW2d7u/vG+dANp8FpqIlbd3d3V8Fg8EfBUFw4BONZVmL3+9vHhkZCQL4AoAHgJPK8G+yzC0XDofdoVAo5PP5vkadTBAEtr+/39ff3x8gAp/RPOEqx2qjx+NpvXv3bk9DQ0NDvQgwDIOWlhZrMBj8kgi0UJdxRgYMArzL5XJ7vd57qLPZ7Xamp6fnNgBXtQxcjFuHw+Hyer3t9SYgCAITCAScAJoBNNEY/08GOFVVrfVMv7kMNDntFD1vjIAPrlRN0xjckOm6biFQ3jwNPwDMZrOnqVTqfb3Bi8Wivru7W/VCYkwPlKOjo0IikXh7EwQikYgE4Nw0CfXKDCipVCoTj8df3QABbW1tLUc6oUgkFPMkVACUNjc337148eKvw8PDbJ2jP1taWkoCyNDVXDSECmNSK4qiKNLq6urW8+fPI/UicHx8rD59+jSVy+WOAKSJhKENwFItLtoxk8mwsixzHR0dHe3t7c5PAU+n09rs7OzJkydPYqVSaQfANoDXALIk31S2smU1TWMPDg7K5XKZ7+3t9TudTut1U7+wsFCcmJiIpdPpbQBxADsAknQWymYCOukBHYCuKApisdhpMpnURFEU79y503TVyKenpzOTk5M7e3t7MQKPV0Zv1gNm+awB0MvlshqLxfLb29uyJElWURSbXC4XXyvqxcXFs6mpqeTc3Nzu3t7e3wQcA7BPZ8Cov1pNlJplmQtAG8MwHV6v95tAINA5MDBwPxAIuLu6upr8fr/VAN3c3JQjkcjZ+vp6fnl5+d2bN29SuVzuNYAEpf01CdRChUL+X1VskHACuA3Ay3Fcu9vt7nA6nZ7m5uYWQRCaNE3jVVW15PP580KhIGUymWw2m00DOAJwSP4WwPtq4LX2Ao6USxNlQyS/RcQcdLGwlNIz6vEMAaZpNzCk2Pll94LK/cDYimxERiBwG10sxjgvEZBE0UpE6vxj+0Ct5bTaXthgEhRmja8QWNkkPGsuIpfdjpkK+cZUWTC0KredVmtD/gdlSl6EG4AMvQAAAABJRU5ErkJggg==`)),sizeAttenuation:!1,transparent:!0});this.points=new three.Points(n,r),this.points.renderOrder=11,this.points.frustumCulled=!1,this.setPoints(e,t),this.add(this.line,this.points)}setPoints(e,t){let n=[].concat(e.toArray(),t.toArray());this.points.geometry.setAttribute(`position`,new three.BufferAttribute(new Float32Array(n),3)),this.line.geometry.setPositions(n),this.line.computeLineDistances(),this.needsRender=!0}getPoints(){let e=this.points.geometry.attributes.position.array;return[new three.Vector3(e[0],e[1],e[2]),new three.Vector3(e[3],e[4],e[5])]}setMaterial(e){let t=this.line.material;for(let n in e){if(!e.hasOwnProperty(n))continue;let r=e[n];n===`dashed`?(t.dashed=r,r?t.defines.USE_DASH=``:delete t.defines.USE_DASH,t.needsUpdate=!0):t[n]=e[n]}this.needsRender=!0}setResolution(e,t){let n=this.line.material.resolution;(n.x!==e||n.y!==t)&&(n.set(e,t),this.needsRender=!0)}};Object.assign(FiveLine.prototype,{isFiveLine:!0});var Constants={Handedness:Object.freeze({NONE:`none`,LEFT:`left`,RIGHT:`right`}),ComponentState:Object.freeze({DEFAULT:`default`,TOUCHED:`touched`,PRESSED:`pressed`}),ComponentProperty:Object.freeze({BUTTON:`button`,X_AXIS:`xAxis`,Y_AXIS:`yAxis`,STATE:`state`}),ComponentType:Object.freeze({TRIGGER:`trigger`,SQUEEZE:`squeeze`,TOUCHPAD:`touchpad`,THUMBSTICK:`thumbstick`,BUTTON:`button`}),ButtonTouchThreshold:.05,AxisTouchThreshold:.1,VisualResponseProperty:Object.freeze({TRANSFORM:`transform`,VISIBILITY:`visibility`})};function fetchJsonFile(e){return __awaiter(this,void 0,void 0,function*(){let t=yield fetch(e);if(t.ok)return t.json();throw Error(t.statusText)})}function fetchProfilesList(e){return __awaiter(this,void 0,void 0,function*(){if(!e)throw Error(`No basePath supplied`);return yield fetchJsonFile(`${e}/profilesList.json`)})}function fetchProfile(e,t){return __awaiter(this,arguments,void 0,function*(e,t,n=null,r=!0){if(!e)throw Error(`No xrInputSource supplied`);if(!t)throw Error(`No basePath supplied`);let o=yield fetchProfilesList(t),s;if(e.profiles.some(e=>{let n=o[e];return n&&(s={profileId:e,profilePath:`${t}/${n.path}`,deprecated:!!n.deprecated}),!!s}),!s){if(!n)throw Error(`No matching profile name found`);let e=o[n];if(!e)throw Error(`No matching profile name found and default profile "${n}" missing.`);s={profileId:n,profilePath:`${t}/${e.path}`,deprecated:!!e.deprecated}}let c=yield fetchJsonFile(s.profilePath),l;if(r){let t;if(t=c.layouts[e.handedness],!t)throw Error(`No matching handedness, ${e.handedness}, in profile ${s.profileId}`);t.assetPath&&(l=s.profilePath.replace(`profile.json`,t.assetPath))}return{profile:c,assetPath:l}})}var defaultComponentValues={xAxis:0,yAxis:0,button:0,state:Constants.ComponentState.DEFAULT};function normalizeAxes(e=0,t=0){let n=e,r=t;if(Math.sqrt(e*e+t*t)>1){let o=Math.atan2(t,e);n=Math.cos(o),r=Math.sin(o)}return{normalizedXAxis:n*.5+.5,normalizedYAxis:r*.5+.5}}var VisualResponse=class{constructor(e){this.componentProperty=e.componentProperty,this.states=e.states,this.valueNodeName=e.valueNodeName,this.valueNodeProperty=e.valueNodeProperty,this.valueNodeProperty===Constants.VisualResponseProperty.TRANSFORM&&(this.minNodeName=e.minNodeName,this.maxNodeName=e.maxNodeName),this.value=0,this.updateFromComponent(defaultComponentValues)}updateFromComponent({xAxis:e,yAxis:t,button:n,state:r}){let{normalizedXAxis:o,normalizedYAxis:s}=normalizeAxes(e,t);switch(this.componentProperty){case Constants.ComponentProperty.X_AXIS:this.value=this.states.includes(r)?o:.5;break;case Constants.ComponentProperty.Y_AXIS:this.value=this.states.includes(r)?s:.5;break;case Constants.ComponentProperty.BUTTON:this.value=this.states.includes(r)?n:0;break;case Constants.ComponentProperty.STATE:this.valueNodeProperty===Constants.VisualResponseProperty.VISIBILITY?this.value=this.states.includes(r):this.value=this.states.includes(r)?1:0;break;default:throw Error(`Unexpected visualResponse componentProperty ${this.componentProperty}`)}}},Component=class{constructor(e,t){if(!e||!t||!t.visualResponses||!t.gamepadIndices||Object.keys(t.gamepadIndices).length===0)throw Error(`Invalid arguments supplied`);this.id=e,this.type=t.type,this.rootNodeName=t.rootNodeName,this.touchPointNodeName=t.touchPointNodeName,this.visualResponses={},Object.keys(t.visualResponses).forEach(e=>{let n=new VisualResponse(t.visualResponses[e]);this.visualResponses[e]=n}),this.gamepadIndices=Object.assign({},t.gamepadIndices),this.values={state:Constants.ComponentState.DEFAULT,button:this.gamepadIndices.button===void 0?void 0:0,xAxis:this.gamepadIndices.xAxis===void 0?void 0:0,yAxis:this.gamepadIndices.yAxis===void 0?void 0:0}}get data(){return Object.assign({id:this.id},this.values)}updateFromGamepad(e){if(this.values.state=Constants.ComponentState.DEFAULT,this.gamepadIndices.button!==void 0&&e.buttons.length>this.gamepadIndices.button){let t=e.buttons[this.gamepadIndices.button];this.values.button=t.value,this.values.button=this.values.button<0?0:this.values.button,this.values.button=this.values.button>1?1:this.values.button,t.pressed||this.values.button===1?this.values.state=Constants.ComponentState.PRESSED:(t.touched||this.values.button>Constants.ButtonTouchThreshold)&&(this.values.state=Constants.ComponentState.TOUCHED)}this.gamepadIndices.xAxis!==void 0&&e.axes.length>this.gamepadIndices.xAxis&&(this.values.xAxis=e.axes[this.gamepadIndices.xAxis],this.values.xAxis=this.values.xAxis<-1?-1:this.values.xAxis,this.values.xAxis=this.values.xAxis>1?1:this.values.xAxis,this.values.state===Constants.ComponentState.DEFAULT&&Math.abs(this.values.xAxis)>Constants.AxisTouchThreshold&&(this.values.state=Constants.ComponentState.TOUCHED)),this.gamepadIndices.yAxis!==void 0&&e.axes.length>this.gamepadIndices.yAxis&&(this.values.yAxis=e.axes[this.gamepadIndices.yAxis],this.values.yAxis=this.values.yAxis<-1?-1:this.values.yAxis,this.values.yAxis=this.values.yAxis>1?1:this.values.yAxis,this.values.state===Constants.ComponentState.DEFAULT&&Math.abs(this.values.yAxis)>Constants.AxisTouchThreshold&&(this.values.state=Constants.ComponentState.TOUCHED)),Object.values(this.visualResponses).forEach(e=>{e.updateFromComponent(this.values)})}},MotionController=class{constructor(e,t,n){if(!e)throw Error(`No xrInputSource supplied`);if(!t)throw Error(`No profile supplied`);this.xrInputSource=e,this.assetUrl=n,this.id=t.profileId,this.layoutDescription=t.layouts[e.handedness],this.components={},Object.keys(this.layoutDescription.components).forEach(e=>{let t=this.layoutDescription.components[e];this.components[e]=new Component(e,t)}),this.updateFromGamepad()}get gripSpace(){return this.xrInputSource.gripSpace}get targetRaySpace(){return this.xrInputSource.targetRaySpace}get data(){let e=[];return Object.values(this.components).forEach(t=>{e.push(t.data)}),e}updateFromGamepad(){Object.values(this.components).forEach(e=>{e.updateFromGamepad(this.xrInputSource.gamepad)})}},DEFAULT_PROFILES_PATH=`https://cdn.jsdelivr.net/npm/@webxr-input-profiles/assets@1.0/dist/profiles`,DEFAULT_PROFILE=`generic-trigger`,XRControllerModel=class extends three.Object3D{constructor(){super(),this.motionController=null,this.envMap=null}setEnvironmentMap(e){return this.envMap==e?this:(this.envMap=e,this.traverse(e=>{e instanceof three.Mesh&&e.isMesh&&(e.material.envMap=this.envMap,e.material.needsUpdate=!0)}),this)}updateMatrixWorld(e){super.updateMatrixWorld(e),this.motionController&&(this.motionController.updateFromGamepad(),Object.values(this.motionController.components).forEach(e=>{Object.values(e.visualResponses).forEach(e=>{let{valueNode:t,minNode:n,maxNode:r,value:o,valueNodeProperty:s}=e;t&&(s===Constants.VisualResponseProperty.VISIBILITY?t.visible=o:s===Constants.VisualResponseProperty.TRANSFORM&&(t.quaternion.copy(n.quaternion).slerp(r.quaternion,o),t.position.lerpVectors(n.position,r.position,o)))})}))}};function findNodes(e,t){Object.values(e.components).forEach(e=>{let{type:n,touchPointNodeName:r,visualResponses:o}=e;if(n===Constants.ComponentType.TOUCHPAD)if(e.touchPointNode=t.getObjectByName(r),e.touchPointNode){let t=new three.Mesh(new three.SphereGeometry(.001),new three.MeshBasicMaterial({color:255}));e.touchPointNode.add(t)}else console.warn(`Could not find touch dot, ${e.touchPointNodeName}, in touchpad component ${e.id}`);Object.values(o).forEach(e=>{let{valueNodeName:n,minNodeName:r,maxNodeName:o,valueNodeProperty:s}=e;if(s===Constants.VisualResponseProperty.TRANSFORM){if(e.minNode=t.getObjectByName(r),e.maxNode=t.getObjectByName(o),!e.minNode){console.warn(`Could not find ${r} in the model`);return}if(!e.maxNode){console.warn(`Could not find ${o} in the model`);return}}e.valueNode=t.getObjectByName(n),e.valueNode||console.warn(`Could not find ${n} in the model`)})})}function addAssetSceneToControllerModel(e,t){findNodes(e.motionController,t),e.envMap&&t.traverse(t=>{t instanceof three.Mesh&&t.isMesh&&(t.material.envMap=e.envMap,t.material.needsUpdate=!0)}),e.add(t)}var XRControllerModelFactory=class{constructor(e=null){this.gltfLoader=e,this.path=DEFAULT_PROFILES_PATH,this._assetCache={}}createControllerModel(e){let t=new XRControllerModel,n=null;return e.addEventListener(`connected`,e=>{let r=e.data;r.targetRayMode!==`tracked-pointer`||!r.gamepad||fetchProfile(r,this.path,DEFAULT_PROFILE).then(({profile:e,assetPath:o})=>{t.motionController=new MotionController(r,e,o);let s=this._assetCache[t.motionController.assetUrl];if(s)n=s.scene.clone(),addAssetSceneToControllerModel(t,n);else{if(!this.gltfLoader)throw Error(`GLTFLoader not set.`);this.gltfLoader.load(t.motionController.assetUrl,e=>{this._assetCache[t.motionController.assetUrl]=e,n=e.scene.clone(),addAssetSceneToControllerModel(t,n)})}}).catch(e=>{console.warn(e)})}),e.addEventListener(`disconnected`,()=>{t.motionController=null,t.remove(n),n=null}),t}},defaultXRPanoramaControllerInitArgs=Object.assign({},omit(defaultPanoramaControllerCustomInitArgs,[`maxLatitude`,`minLatitude`]));function mapPanoResource(e,t){if(!t)return e;let n=e.match(/\d+_[a-z].png/);return e.substring(0,n.index)+t+`/`+e.substring(n.index)}var CONTROLLER_EVNET_DELTA_TIME=300,scratchRaycaster=new three.Raycaster,scratchVector3=new three.Vector3,XRPanoramaController=class e extends PanoramaController{static parseArgs(t){if(t instanceof e)return t;let n=Object.assign(Object.assign({},t),{maxLatitude:Math.PI/2,minLatitude:-Math.PI/2});return super.parseArgs(n)}static initAnimationEndState(e){let t=this.parseArgs(e),n=super.initAnimationEndState(t);return Object.assign(Object.assign({},n),{mode:`XRPanorama`})}constructor(e){super(e),this.xrManager=new XRManager(this.renderer,this.renderer.getContext(),{onSessionStart:e=>{this.emit(`xr.session.start`,createEvent(`xr.session.start`,{session:e,machineType:this.xrManager.machineType}))},onSessionEnd:()=>{this.emit(`xr.session.end`,createEvent(`xr.session.end`,{session:null,machineType:this.xrManager.machineType}))}}),this.xrControllerRay={left:new three.Raycaster,right:new three.Raycaster},this.xrControllerRay.left.params.Points={threshold:.1},this.xrControllerRay.left.firstHitOnly=!0,this.xrControllerRay.left.floorIndex=-1,this.xrControllerRay.right.params.Points={threshold:.1},this.xrControllerRay.right.firstHitOnly=!0,this.xrControllerRay.right.floorIndex=-1,this.gazeRay=null,this.pointerLines={left:new FiveLine,right:new FiveLine},this.pointerLines.left.visible=!1,this.pointerLines.right.visible=!0,this.pointerLines.left.setMaterial({color:new three.Vector3(1,1,1)}),this.pointerLines.left.points.material.depthTest=!1,this.pointerLines.right.setMaterial({color:new three.Vector3(1,1,1)}),this.pointerLines.right.points.material.depthTest=!1,this.controllerWrappers=[new three.Group,new three.Group];let t=this.xrManager.getController(0);this.controllerWrappers[0].add(t);let n=this.xrManager.getController(1);this.controllerWrappers[1].add(n);let r=new XRControllerModelFactory;r.gltfLoader={load(e,t){internalFetcher.ajax(e,{responseType:`arraybuffer`}).then(t=>{var n;return parseGltf(t.body,{resourcePath:e.slice(0,e.lastIndexOf(`/`)+1),search:(n=e.split(`?`)[1])==null?``:n,fetcher:internalFetcher})}).then(e=>t(e))}},(this.xrManager.machineType===`Oculus`||this.xrManager.machineType===`Pico`)&&this.scene.add(this.pointerLines.left,this.pointerLines.right,this.controllerWrappers[0],this.controllerWrappers[1]),this.panoResources={},this.panoResources[this.locationMotion.keyframes[0].key=this.locationMotion.keyframes[1].key=createUuid()]={panoId:panoStringify(this.currentPano),leftPanoPicture:null,position:this.camera.pose.offset.clone(),effect:`fade`,effectEasing:defaultEffectEase,fixCameraTransform:new three.Matrix4},this.parallaxCameraMatrixs=[];let o=AnimationFrameLoop.shared.getContext();if(!o){console.error(`获取session失败,请退出重试`);return}this.on(`xr.session.end`,()=>{this.scene.remove(this.pointerLines.left,this.pointerLines.right)}),this.xrManager.setSession(o),this.on(`xr.session.start`,()=>{let e=this.xrManager.getControllerGrip(0);e.add(r.createControllerModel(e)),this.controllerWrappers[0].add(e);let t=this.xrManager.getControllerGrip(1);t.add(r.createControllerModel(t)),this.controllerWrappers[1].add(t)}),this.xrHandleState={LeftAxesUp:{touchStartTime:0,touchStart:!1},LeftAxesDown:{touchStartTime:0,touchStart:!1},LeftAxesLeft:{touchStartTime:0,touchStart:!1},LeftAxesRight:{touchStartTime:0,touchStart:!1},LeftTrigger:{touchStartTime:0,touchStart:!1},LeftPinch:{touchStartTime:0,touchStart:!1},RightAxesUp:{touchStartTime:0,touchStart:!1},RightAxesDown:{touchStartTime:0,touchStart:!1},RightAxesLeft:{touchStartTime:0,touchStart:!1},RightAxesRight:{touchStartTime:0,touchStart:!1},RightTrigger:{touchStartTime:0,touchStart:!1},RightPinch:{touchStartTime:0,touchStart:!1},Y:{touchStartTime:0,touchStart:!1},X:{touchStartTime:0,touchStart:!1},A:{touchStartTime:0,touchStart:!1},B:{touchStartTime:0,touchStart:!1}},this.xrManager.machineType===`VP`&&this.initHandEvent()}updateConfiguration(e){return super.updateConfiguration(Object.assign(Object.assign({},e),{maxLatitude:Math.PI/2,minLatitude:-Math.PI/2}))}moveToPano(e,t,n){var r,o,s;let c=(r=t.effect)==null?`fade`:r;this.userAction=n,this.stopMomentumMovement();let l=panoStringify(e),u=this.works.getObserver(e);if(!u)throw Error(`Invalid PanoIndex`);let d=getImageSizeFromURL(u.images.up),f=this.imageOptions.size;f===void 0&&u&&d&&(f=Number(d)),f===void 0&&(f=2048);let p=this.imageOptions.transform,m=(e,t)=>mapPanoResource(applyImageURLOptions(e,p,t)),h=Object.assign({key:`pano.${l}`},pick(this.imageOptions,[`format`,`size`,`quality`])),g={right:u.images.work.getURL(u.images.right),left:u.images.work.getURL(u.images.left),up:u.images.work.getURL(u.images.up),down:u.images.work.getURL(u.images.down),front:u.images.work.getURL(u.images.front),back:u.images.work.getURL(u.images.back)},_=`pano:`+jsonHash([g,h,p]);if(this.pendingTextureTask){if(this.pendingTextureTask.hash===_)return;{let t=this.pendingTextureTask.panoId;(o=this.panoMeshes.get(t))==null||o.setProgress(0),this.emit(`pano.texture.abort`,createEvent(`pano.texture.abort`,{error:null,progress:0,meta:null,pano:e}))}}let{pano0:v,pano1:y}=this.modelScene.parameter.resolveValue(),b;if((v==null?void 0:v.map.name)===_?b=v:(y==null?void 0:y.map.name)===_&&(b=y),b){let n={panoId:l,effect:c,effectEasing:(s=t.effectEasing)==null?defaultEffectEase:s,leftPanoPicture:{panoId:b.panoId,map:b.map,mapHistogram:b.mapHistogram,mapSize:b.mapSize,matrix:u.matrix.clone().premultiply(u.work.transform),zoom:1},position:u.position.clone().applyMatrix4(u.work.transform),fixCameraTransform:new three.Matrix4};this.doMoveToPano(e,n,t);return}let S=`move-to-pano-`+l;this.pending.add(S),this.pendingTextureTask={panoId:l,hash:_,onLoad:n=>{var r,o;let s=n.body;if(this.destroyed)s.dispose();else{s.name=_;let n=Array.isArray(s.image)?s.image[0]:s.image,d=(r=n==null?void 0:n.width)==null?2048:r,f=new Histogram().formPixels(getRgbaDataFromCubeTexture(this.renderer,s,!0,sharedHistogramRgbaData).data),p={panoId:l,effect:c,effectEasing:(o=t.effectEasing)==null?defaultEffectEase:o,leftPanoPicture:{panoId:l,map:s,mapSize:d,mapHistogram:new three.Vector4().fromArray(f.toArray()),matrix:u.matrix.clone(),zoom:1},position:u.position.clone(),fixCameraTransform:new three.Matrix4};this.doMoveToPano(e,p,t)}},onError:n=>{let r=Object.assign(Object.assign(Object.assign({},e),{mode:this.mode}),clonePose(this.camera.pose));this.emit(`pano.error`,createEvent(`pano.error`,{error:n,userAction:this.userAction,options:t,prevPano:this.currentPano,progress:0,state:r})),this.emit(`pano.cancel`,createEvent(`pano.cancel`,{error:null,userAction:this.userAction,options:t,prevPano:this.currentPano,progress:0,state:r})),t.moveCancelCallback&&t.moveCancelCallback()}};let C=this.panoMeshes.get(l);C&&C.tap&&C.tap(),this.textureLoader.loadCubeTexture(g,{imageURL:{transform:m,options:h},format:three.RGBFormat,fetcher:getFetcher(this.fiveId,u.work)},void 0,void 0,t=>{var n,r;((n=this.pendingTextureTask)==null?void 0:n.hash)===_&&((r=this.panoMeshes.get(l))==null||r.setProgress(t)),this.emit(`pano.texture.progress`,createEvent(`pano.texture.progress`,{error:null,progress:t,meta:null,pano:e}))},this.renderer).then(t=>{var n,r;this.pending.delete(S),((n=this.pendingTextureTask)==null?void 0:n.hash)===_?(this.pendingTextureTask.onLoad(t),this.pendingTextureTask=void 0,(r=this.panoMeshes.get(l))==null||r.setProgress(0)):t.body.dispose(),this.emit(`pano.texture.success`,createEvent(`pano.texture.success`,{error:null,progress:1,meta:t.meta,pano:e}))}).then(()=>new Promise(e=>{AnimationFrameLoop.shared.add(()=>e(),!0)})).catch(t=>{var n,r;this.pending.delete(S),((n=this.pendingTextureTask)==null?void 0:n.hash)===_&&(this.pendingTextureTask.onError(t),this.pendingTextureTask=void 0,(r=this.panoMeshes.get(l))==null||r.setProgress(0)),this.emit(`pano.texture.error`,createEvent(`pano.texture.error`,{error:t,progress:0,meta:null,pano:e})),this.emit(`error`,t)}),this.emit(`pano.texture.load`,createEvent(`pano.texture.load`,{error:null,progress:0,meta:null,pano:e}))}doMoveToPano(e,t,n={}){var r,o,s,c,l,u,d,f,p,m;let h=now(),g=createUuid();this.panoResources[g]=t;let _=1,v,y,b;if(this.locationMotion.ended){let[e,n]=this.locationMotion.getKeyFrameSegment(h),r=this.locationMotion.value,o=this.panoResourceFromLocationMotionKeyframe(n).position,s=t.position;v=Math.max(o.distanceTo(s),1),y=[{key:n.key,progress:0,value:Object.assign(Object.assign({},r),{count:0})},{key:g,progress:1,value:{distance:0,count:1}}],b=0}else{let[e,n]=this.locationMotion.getKeyFrameSegment(h),r=this.locationMotion.value,o=this.panoResourceFromLocationMotionKeyframe(e).position,s=this.panoResourceFromLocationMotionKeyframe(n).position,c=t.position,l=n.value.count-r.count,u=Math.max(o.distanceTo(s),1)*l;v=u+Math.max(s.distanceTo(c),1),y=[{key:e.key,progress:0,value:Object.assign({},r)},{key:n.key,progress:u/v,value:n.value},{key:g,progress:1,value:{count:n.value.count+1,distance:0}}];let d=this.locationMotionKeyframesLength(this.locationMotion.keyframes),f=this.locationMotionKeyframesLength(y);b=this.locationMotion.getProgressVelocity(h)*d/f}let S=t.effect===`instant`?0:this.calculateMovingDuration(n.duration,t.effect===`fly`||t.effect===`model`?v:0),C={longitude:n.longitude,latitude:n.latitude,fov:n.fov},w=Object.assign(Object.assign({},e),{mode:this.mode,longitude:(r=C.longitude)==null?this.camera.pose.longitude:r,latitude:(o=C.latitude)==null?this.camera.pose.latitude:o,fov:(s=C.fov)==null?this.camera.pose.fov:s,offset:t.position.clone(),distance:0}),T=this.currentPano;if(this.emit(`pano.moveTo`,createEvent(`pano.moveTo`,{options:n,prevPano:T,progress:0,state:w,userAction:this.userAction,error:null})),n.moveStartCallback&&n.moveStartCallback(w),this.videoTexture&&this.videoTexture.image instanceof HTMLVideoElement&&this.videoTexture.image.getAttribute(`src`)&&(this.videoTexture.image.pause(),this.videoTexture.image.removeAttribute(`uuid`),this.videoTexture.image.removeAttribute(`src`),this.videoTexture.image.oncanplay=noop,this.videoTexture.needsUpdate=!0),this.panoVideo.setMaterial(null),t.effect===`fly`||t.effect===`model`)this.cameraMotion.set(C,S).catch(noop);else{let e=coordinatesToVector({longitude:this.cameraMotion.value.longitude,latitude:this.cameraMotion.value.latitude}),n=coordinatesToVector({longitude:(c=C.longitude)==null?this.cameraMotion.value.longitude:c,latitude:(l=C.latitude)==null?this.cameraMotion.value.latitude:l}),r=new three.Object3D;r.lookAt(e);let o=new three.Matrix4().makeRotationFromQuaternion(r.quaternion);r.lookAt(n);let s=new three.Matrix4().makeRotationFromQuaternion(r.quaternion),h=new three.Matrix4().getInverse(o).premultiply(s),g=this.cameraMotion.value.fov,_=(u=C.fov)==null?this.cameraMotion.value.fov:u,v=1;t.effect===`zoomin`?v=1.5:t.effect===`zoomout`&&(v=.4);let b=_*v;for(let e=0;e<y.length-1;e++){let t=y[e].key;if(t){let e=this.panoResources[t];e&&(e.fixCameraTransform.copy(h),e.leftPanoPicture&&(e.leftPanoPicture.zoom=Math.tan(b/2/180*Math.PI)/Math.tan(g/2/180*Math.PI)))}}this.cameraMotion.setKeyframes([{progress:0,value:{longitude:this.cameraMotion.value.longitude,latitude:this.cameraMotion.value.latitude,fov:this.cameraMotion.value.fov}},{progress:0,value:{longitude:(d=C.longitude)==null?this.cameraMotion.value.longitude:d,latitude:(f=C.latitude)==null?this.cameraMotion.value.latitude:f,fov:b}},{progress:1,value:{longitude:(p=C.longitude)==null?this.cameraMotion.value.longitude:p,latitude:(m=C.latitude)==null?this.cameraMotion.value.latitude:m,fov:_}}],S).catch(noop)}this.locationMotion.setKeyframes(y,S,b).then(()=>{for(let e of this.modelScene.children)e instanceof Model&&e.show();let t=Object.assign(Object.assign({},e),{mode:this.mode,longitude:this.camera.pose.longitude,latitude:this.camera.pose.latitude,fov:this.camera.pose.fov,offset:this.camera.pose.offset.clone(),distance:0});this.emit(`pano.arrived`,createEvent(`pano.arrived`,{options:n,prevPano:T,progress:1,state:t,userAction:this.userAction,error:null})),n.moveEndCallback&&n.moveEndCallback(t);let r=this.works.getObserver(this.currentPano);if(r&&r.images.video&&this.videoTexture&&this.videoTexture.image instanceof HTMLVideoElement){let e={map:this.videoTexture,size:r.images.video.size.clone(),matrix:r.images.video.matrix.clone(),panoMatrix:r.matrix.clone().premultiply(r.work.transform),alpha:1},t=createUuid(),n=this.videoTexture.image;n.setAttribute(`uuid`,t),canplayVideo().then(o=>{o&&r.images.video&&n.getAttribute(`uuid`)===t&&(n.oncanplay=()=>{n.oncanplay=noop,n.play()},n.ontimeupdate=()=>{n.currentTime>.5&&(n.ontimeupdate=noop,this.panoVideo.setMaterial(e))},n.src=r.images.video.source)}).catch((()=>{n.removeAttribute(`uuid`)}))}},()=>{this.emit(`pano.cancel`,createEvent(`pano.cancel`,{options:n,prevPano:T,progress:0,state:w,userAction:this.userAction,error:null})),n.moveCancelCallback&&n.moveCancelCallback()})}checkSelectedPano(e){var t;this.stopMomentumMovement(),this.camera.getDirection(new three.Vector3).setY(0);let n=null,r=this.works.getObserver(this.currentPano);if(!r)return null;let o=r.work.observers,s=r.accessibleNodes.filter(e=>{if(e===this.currentPano.panoIndex&&r.work.workCode===this.currentPano.workCode)return!1;let t=o[e];return!t||scratchVector3.copy(t.position).applyMatrix4(t.work.transform).distanceTo(this.camera.position)>this.maxAccessibleDistance?!1:t.loadable||t.active}),[c]=this.modelScene.intersectRaycaster(e);if(c){let[e,r]=arrayMin(s,e=>{let t=o[e];return t?scratchVector3.copy(t.standingPosition).applyMatrix4(t.work.transform).distanceTo(c.point):1/0},!0);typeof e==`number`&&r<this.panoTapTriggerRadius&&(n=(t=o[e])==null?null:t)}if(isNil(n)){let t=this.getForwardObserverOrNot(this.xrManager.cameraVR,e);t&&(n=t)}for(let e of this.locationMotion.keyframes){let t=this.panoResourceFromLocationMotionKeyframe(e);if(!(e.progress<this.locationMotion.progress)&&n){let e=panoStringify({panoIndex:n.panoIndex,workCode:n.work.workCode});if(t.panoId===e){n=null;break}}}if(isNil(n))return this.locationMotion.ended===!0&&this.cameraBounce(),null;if(!n.active){let e=panoStringify({panoIndex:n.panoIndex,workCode:n.work.workCode}),t=this.panoMeshes.get(e);t&&(t.setDisabled(!1),t.setLoading(!0))}let l={workCode:n.work.workCode,panoIndex:n.panoIndex,mode:this.mode,longitude:this.camera.pose.longitude,latitude:this.camera.pose.latitude,fov:this.camera.pose.fov,distance:0,offset:n?n.position.clone():new three.Vector3};return this.emit(`pano.select`,createEvent(`pano.select`,{prevPano:this.currentPano,state:l,userAction:!0,options:{},progress:0,error:null})),n&&n.active?(this.emit(`pano.request`,createEvent(`pano.request`,{userAction:!0,prevPano:this.currentPano,progress:0,state:l,options:{},error:null})),{workCode:n.work.workCode,panoIndex:n.panoIndex}):null}destroy(){super.destroy()}isReady(){return!1}updateCamera(e,t,n){return Promise.resolve()}updateCameraWithKeyframes(e,t,n){return Promise.resolve()}updateTime(e,t,...n){var r,o,s,c,l,u,d,f,p;this.userAction=!0;let m={},h={},g=this.camera.getDirection(new three.Vector3),_=this.locationMotion.keyframes[0],v=this.locationMotion.keyframes[this.locationMotion.keyframes.length-1],[y,b]=this.locationMotion.getKeyFrameSegment(e),S=this.panoResourceFromLocationMotionKeyframe(y),C=this.panoResourceFromLocationMotionKeyframe(b),w=this.panoResourceFromLocationMotionKeyframe(_),T=this.panoResourceFromLocationMotionKeyframe(v),E=!1;if(this.cameraMotion.ended===!1&&(this.cameraMotion.update(e),h.fov=this.cameraMotion.value.fov),this.modelAlphaMotion.ended===!1&&(this.modelAlphaMotion.update(e),m.modelAlpha=this.modelAlphaMotion.value.modelAlpha),this.perspToOrthoMotion.ended===!1&&(this.perspToOrthoMotion.update(e),this.camera.perspToOrtho.setScalar(clamp$1(this.perspToOrthoMotion.value.perspToOrtho,0,1))),this.locationMotion.ended===!1){this.locationMotion.update(e);let t=this.locationMotion.value.count-b.value.count+1,n=new three.Vector3().copy(S.position),s=new three.Vector3().copy(C.position);if(m.progress=t,t>=.01&&t<=.99&&(m.progress=clamp$1(C.effectEasing(t),.01,.99)),C.leftPanoPicture&&(t<1?S.leftPanoPicture&&(m.pano0=S.leftPanoPicture):m.pano0=C.leftPanoPicture,m.pano1=C.leftPanoPicture),C.effect===`montage`?m.transition=`BLACK`:C.effect===`spread`?m.transition=`SPREAD`:m.transition=`FADE`,C.effect===`zoomin`||C.effect===`zoomout`?m.progress=Math.pow(t,3):C.effect===`model`&&this.camera.pose.distance<.01&&(m.modelAlpha=1-Math.pow(clamp$1(Math.abs(t-.5)*2,0,1),4)),t<1&&C.effect!==`fly`){if(m.pano0&&S.leftPanoPicture){let e={panoId:m.pano0.panoId,map:m.pano0.map,mapHistogram:m.pano0.mapHistogram,mapSize:m.pano0.mapSize,zoom:m.pano0.zoom,matrix:S.leftPanoPicture.matrix.clone().setPosition(C.position)},t=this.panoPictureObserverMap.get(m.pano0);t&&this.panoPictureObserverMap.set(e,t),m.pano0=e}n.copy(s),E=!0}h.distance=this.locationMotion.value.distance,h.offset=new three.Vector3(n.x+(s.x-n.x)*t,n.y+(s.y-n.y)*t,n.z+(s.z-n.z)*t);let c=[],l=[];for(let e of this.locationMotion.keyframes){let{key:t,progress:n}=e;t!==void 0&&(c.push(t),n>this.locationMotion.progress&&l.push(t))}for(let e of Object.keys(this.panoResources)){if(l.indexOf(e)>=0)continue;let t=this.panoResources[e];if(t.leftPanoPicture){let e=t.leftPanoPicture.map;if(e){if(e===((r=m.pano0)==null?void 0:r.map)||e===((o=m.pano1)==null?void 0:o.map))continue;e.dispose(),t.leftPanoPicture=null}}c.indexOf(e)>=0||delete this.panoResources[e]}let u=panoParse(C.panoId);u!==this.currentPano&&(this.currentPano=u,this.accessibleObserverFloorCheckCount=0),this.emit(`pano.moving`,createEvent(`pano.moving`,{userAction:this.userAction,prevPano:panoParse(w.panoId),state:Object.assign(Object.assign(Object.assign(Object.assign({},panoParse(T.panoId)),{mode:this.mode}),clonePose(this.camera.pose)),h),options:{},progress:this.locationMotion.progress,error:null}))}this.camera.setFromPose(h),this.xrManager.cameraVR.projectionMatrix.copy(this.camera.projectionMatrix),this.xrManager.cameraVR.projectionMatrixInverse.copy(this.camera.projectionMatrixInverse),this.xrManager.cameraVR.matrix.copy(this.camera.matrix),this.xrManager.cameraVR.position.copy(this.camera.position),this.xrManager.cameraVR.quaternion.copy(this.camera.quaternion),this.xrManager.cameraVR.scale.copy(this.camera.scale),this.xrManager.cameraVR.matrixAutoUpdate=!1,this.xrManager.cameraVR.matrixWorld.copy(this.camera.matrixWorld);let[D,O]=n,k=new three.Vector3(0,0,0),A=new three.Vector2().copy(this.camera.resolution);if(O&&this.xrManager.session&&this.xrManager.referenceSpace&&this.xrManager.session.renderState.baseLayer){let n=this.xrManager.cameraVR,r=this.xrManager.referenceSpace,o=this.xrManager.session.renderState.baseLayer,u=O.getViewerPose(r),d=(s=u==null?void 0:u.views)==null?[]:s;for(let e=0;e<d.length;e++){let t=d[e],r=n.cameras[e],s=o.getViewport(t);s&&(r.projectionMatrix.fromArray(t.projectionMatrix),r.projectionMatrixInverse.getInverse(r.projectionMatrix),r.matrix.fromArray(t.transform.matrix),r.matrix.setPosition(this.camera.position),r.matrix.decompose(r.position,r.quaternion,r.scale),r.matrixWorld.copy(r.matrix),r.matrixWorldInverse.getInverse(r.matrixWorld),r.matrixAutoUpdate=!1,k.copy(r.position),r.viewport.set(s.x,s.y,s.width,s.height),A.set(s.width,s.height))}if(this.xrManager.setProjectionFromUnion(this.xrManager.cameraVR,this.xrManager.cameraL,this.xrManager.cameraR),this.camera.quaternion.copy(this.xrManager.cameraVR.quaternion),this.camera.scale.copy(this.xrManager.cameraVR.scale),this.camera.matrix.compose(this.camera.position,this.camera.quaternion,this.camera.scale),this.camera.computePose((c=h.distance)==null?this.camera.pose.distance:c),this.xrManager.session.inputSources){for(let e=0;e<this.xrManager.session.inputSources.length;e++)if(this.xrManager.session.inputSources[e]&&this.xrManager.session.inputSources[e].targetRayMode===`transient-pointer`){let t=O.getPose(this.xrManager.session.inputSources[e].targetRaySpace,r);if(t){let e=t.transform.orientation,n=new three.Quaternion(e.x,e.y,e.z,e.w),r=new three.Vector3(0,0,-1).applyQuaternion(n);this.gazeRay=new three.Raycaster(this.camera.position,r)}}}if(this.xrManager.machineType===`Oculus`||this.xrManager.machineType===`Pico`){let n=this.xrManager.session.inputSources;for(let e=0;e<n.length;e++){let t=this.xrManager.controllers[e],o=n[e];if(!o)continue;t&&t.update(o,O,r);let s=this.xrManager.getController(e),c=new three.Vector3(0,1.2,0),u=s.position.clone().add(k).sub(c);o.handedness===`left`?this.xrControllerRay.left.set(u,new three.Vector3(0,0,-1).applyEuler(s.rotation)):o.handedness===`right`&&this.xrControllerRay.right.set(u,new three.Vector3(0,0,-1).applyEuler(s.rotation)),this.controllerWrappers[e].position.copy(new three.Vector3(0,0,0).add(k).sub(c));let d=this.modelScene.intersectRaycaster(this.xrControllerRay.right);if(d.length===0){let e=this.works.getResolvedObserver(this.currentPano);d=this.xrControllerRay.right.intersectObject(this.modelScene.boundingMesh,!0).map(t=>{var n;let r=(n=e==null?void 0:e.floorIndex)==null?0:n;return Object.assign({floorIndex:r,floor:r},t)})}if(d.length>=1&&d[0].face)if(o.handedness===`right`){let e=this.xrControllerRay.right.intersectObject(this.xrCustomObjectsScene,!0),t=d[0].face.normal,n=t.clone(),r=d[0].point.clone();this.intersectMesh.position.copy(r);let o=r.clone().add(n);if(this.intersectMesh.lookAt(o),Math.abs(t.y)>.99){let e=this.camera.position.clone().sub(r);this.intersectMesh.rotation.z=-Math.atan2(e.z,e.x)}this.intersectMesh.visible=!0,this.needsRender=!0,e.length>0?(this.pointerLines.right.setPoints(u,e[0].point),this.pointerLines.right.points.visible=!0,this.intersectMesh.visible=!1):(this.pointerLines.right.points.visible=!1,this.pointerLines.right.setPoints(u,d[0].point));let s=d[0],c=createEvent(`intersect.update`,{raycaster:(l=this.xrControllerRay.right)==null?null:l,intersection:s==null?null:s,object:this.intersectMesh});if(this.emit(`intersect.update`,c),c.defaultPrevented){this.hideIntersectMesh();return}}else this.pointerLines.left.setPoints(u,d[0].point)}this.updateControllerHelper(n,e,t)}}else O||console.error(`xrFrame丢失,请重试`),this.xrManager.session||console.error(`session丢失,请重试`),this.xrManager.session&&!this.xrManager.session.renderState.baseLayer&&console.error(`no layer found`);isEmptyObject(m)===!1&&this.modelScene.parameter.set(m),this.emit(`camera.update`,createEvent(`camera.update`,{userAction:this.userAction,state:Object.assign(Object.assign(Object.assign({},this.currentPano),{mode:this.mode}),clonePose(this.camera.pose))}));let j=this.works.getResolvedObserver(this.currentPano),M=this.locationMotion.ended?this.getForwardObserverOrNot(this.xrManager.cameraVR):null,N=this.works.getObserver(S.panoId),P=this.works.getObserver(C.panoId);if(this.adjustPanoCircleMeshPositionBasedOnModel&&this.helper.visible&&j){let e=[],t=j.work.observers;for(let n of j.accessibleNodes){let r=t[n];r&&e.push(r)}let n=new Map;if(e.sort((e,t)=>{let r=n.get(e);r===void 0&&(r=e.standingPosition.distanceTo(j.standingPosition),n.set(e,r));let o=n.get(e);return o===void 0&&(o=t.standingPosition.distanceTo(j.standingPosition),n.set(t,o)),r-o}),e.length){this.accessibleObserverFloorCheckCount%=e.length;let t=e[this.accessibleObserverFloorCheckCount],n=this.modelScene.models.find(e=>e.work===(t==null?void 0:t.work));if(t&&n&&n.visible){let e=.3,r=.05,o=.005,s=t.standingPosition.clone().applyMatrix4(t.work.transform),c=panoStringify({panoIndex:t.panoIndex,workCode:t.work.workCode}),l=adjustPanoCircleMeshVectors.map(t=>{scratchRaycaster.ray.origin.copy(s),scratchRaycaster.ray.origin.add(scratchVector3.copy(t).setY(e)),scratchRaycaster.ray.direction.set(0,-1,0),scratchRaycaster.firstHitOnly=!0,scratchRaycaster.floorIndex=-1;let[r]=n.intersectRaycaster(scratchRaycaster);return r&&r.distance-o<=e?new three.Vector3().copy(s).setY(r.point.y+o):s});l.sort((e,t)=>t.y-e.y);let u=l[Math.floor(l.length/2)],[d]=l.filter(e=>e.distanceTo(u)<=.05);if(d){let e=new three.Vector4(s.x,s.y,s.z,d.y-s.y),t=this.adjustPanoCircleMeshPositionFix.get(c);t&&!e.equals(t)&&(this.needsRender=!0),this.adjustPanoCircleMeshPositionFix.set(c,e)}}this.accessibleObserverFloorCheckCount++}}let F=new Map;if(N)for(let e of N.accessibleNodes){let t=N.work.observers[e];if(t){let e=panoStringify({panoIndex:t.panoIndex,workCode:t.work.workCode});F.set(e,t)}}if(P)for(let e of P.accessibleNodes){let t=P.work.observers[e];if(t){let e=panoStringify({panoIndex:t.panoIndex,workCode:t.work.workCode});F.set(e,t)}}if(this.panoMeshes.forEach((e,t)=>{F.get(t)?F.delete(t):(this.helper.remove(e),e.dispose(),this.panoMeshes.delete(t))}),F.forEach((e,t)=>{let n=this.panoCircleMeshCreator(e,{aerialObserverMinHeight:this.aerialObserverMinHeight});this.panoMeshes.set(t,n),this.helper.add(n),F.delete(t)}),this.panoMeshes.forEach((e,t)=>{let n=this.works.getObserver(t);if(n){let r=n.position.distanceTo(n.standingPosition)>this.aerialObserverMinHeight;if(r)e.position.copy(n.position).applyMatrix4(n.work.transform),e.scale.setScalar(18);else{e.position.copy(n.standingPosition).applyMatrix4(n.work.transform);let t=this.adjustPanoCircleMeshPositionFix.get(n.panoId);t&&(scratchVector3.set(t.x,t.y,t.z),scratchVector3.equals(e.position)&&(e.position.y+=t.w)),e.scale.setScalar(1.2)}let o=this.camera.position.clone().setY(e.position.y),s=new three.Vector3().copy(e.position).sub(o).normalize();if(t===panoStringify(this.currentPano)){let t=clamp$1((.5-o.distanceTo(e.position))/.5,0,1);s.multiplyScalar(1-t).add(g.clone().multiplyScalar(t))}if(s.length()>0){let t=r?-Math.PI/2:0,n=Math.atan2(s.x,s.z);e.quaternion.setFromEuler(new three.Euler(t,n,0,`YXZ`))}}else e.visible=!1}),this.camera.pose.distance>.1||E)this.panoMeshes.forEach(n=>{n.setOpacity(0),n.setCurrent(!1),n.updateTime&&n.updateTime(e,t),n.visible=!1});else if(j){let n=j.work.observers,[,r]=arrayMin(j.accessibleNodes,e=>{let t=n[e];return!t||!t.active?1/0:j.standingPosition.distanceTo(t.standingPosition)},!0);r=clamp$1(r,2.5,1/0);let o=j.accessibleNodes.concat(j.panoIndex).map(e=>panoStringify({panoIndex:e,workCode:j.work.workCode}));this.panoMeshes.forEach((n,s)=>{let c=this.works.getObserver(s),l=!1,u=1;if(o.indexOf(s)===-1)l=!1,u=0;else if(!c)l=!1,u=0;else if(!c.loadable&&!c.active)l=!1,u=0;else{let e=n.position.clone().project(this.camera);l=Math.abs(e.x)<1&&Math.abs(e.y)<1&&Math.abs(e.z)<1&&!n.loading&&n.progress===0&&M!==null&&panoStringify({panoIndex:M.panoIndex,workCode:M.work.workCode})===s;let t=n.position.clone().setY(this.camera.position.y).distanceTo(this.camera.position);u=t<.01?0:clamp$1(r/t,.1,.85)}c&&c===P&&c.position.distanceTo(c.standingPosition)>this.aerialObserverMinHeight&&n.position.distanceTo(this.camera.position)<35&&(u=0),this.modelScene.parameter.resolveValue().modelAlpha>0&&(u=0),n.setCurrent(l),n.setOpacity(u),n.updateTime&&n.updateTime(e,t)})}{let e=(u=this.modelScene.parameter.progress)==null?1:u,t=Math.round(e),n=this.modelScene.parameter.pano0,r=this.modelScene.parameter.pano1,o=t===0?n:r,s;if(o&&(s=this.works.getObserver(o.panoId),s||(s=this.panoPictureObserverMap.get(o))),this.tiling.appearDuration=this.tileAppearDuration,this.tiling.maxRequest=e<(canUseNativeImageBitmap()?.6:.99)?0:this.tileMaxRequest,this.tiling.imageOptions=this.imageOptions,!s||!o||this.tileLevelForFov===!1||this.camera.perspToOrtho.x>0){this.tiling.setObserver(null);let e={renderer:this.renderer,resolution:A,pixelRatio:1,time:this.camera.time,cameraMatrix:this.xrManager.cameraVR.matrixWorld,cameraProjectionMatrix:this.xrManager.cameraVR.projectionMatrix,panoMap:null,panoMatrix:new three.Matrix4,panoZoom:1,minLevel:0,level:0};this.tiling.update(e),this.modelScene.parameter.set(`refinedScreen`,null)}else{let e=getImageSizeLevel(o.mapSize)+1,c=4;this.tiling.setObserver(s);let l={renderer:this.renderer,resolution:A,pixelRatio:1,time:this.camera.time,cameraMatrix:this.xrManager.cameraVR.matrixWorld,cameraProjectionMatrix:this.xrManager.cameraVR.projectionMatrix,panoMap:o.map,panoMatrix:o.matrix,panoZoom:o.zoom,minLevel:e,level:4},u=this.tiling.update(l),f={map:this.tiling.renderTarget.texture,matrixInverse:this.tiling.camera.matrixWorldInverse,projectionMatrix:this.tiling.camera.projectionMatrix,pano:t,opacity:(n==null?void 0:n.panoId)===(r==null?void 0:r.panoId)?1:easeInQuart(Math.abs(((d=this.modelScene.parameter.progress)==null?0:d)-.5)*2)},p=this.modelScene.parameter.refinedScreen;(u||f.pano!==(p==null?void 0:p.pano)||f.opacity!==(p==null?void 0:p.opacity))&&this.modelScene.parameter.set(`refinedScreen`,f)}}if(this.panoVideo.object.position.copy(this.camera.position),this.panoVideo.updateTime(e),this.intersectMesh&&this.intersectMesh.parent&&j&&j.position.y-j.standingPosition.y>10){let e=clamp$1(this.camera.position.distanceTo(this.intersectMesh.position)*(2*Math.tan(.5*this.camera.fov/180*Math.PI))/5,.5);this.intersectMesh.scale.setScalar(e)}else this.intersectMesh.scale.setScalar(1);{let e=C.effect,{pano0:t,pano1:n}=this.modelScene.parameter;if(t&&n&&t!==n&&(e===`fly`||e===`model`)&&this.flyEffectUseDepthBuffer){if(((f=this.modelScene.parameter.pano0Depth)==null?void 0:f.panoId)!==t.panoId||((p=this.modelScene.parameter.pano1Depth)==null?void 0:p.panoId)!==n.panoId){let e=500,r=512;this.pano0DepthCubeRenderTarget?this.pano0DepthCubeRenderTarget.width!==512&&this.pano0DepthCubeRenderTarget.setSize(512,512):this.pano0DepthCubeRenderTarget=new three.WebGLCubeRenderTarget(512,{minFilter:three.NearestFilter,magFilter:three.NearestFilter,generateMipmaps:!1}),this.pano1DepthCubeRenderTarget?this.pano1DepthCubeRenderTarget.width!==512&&this.pano1DepthCubeRenderTarget.setSize(512,512):this.pano1DepthCubeRenderTarget=new three.WebGLCubeRenderTarget(512,{minFilter:three.NearestFilter,magFilter:three.NearestFilter,generateMipmaps:!1});let o=new three.CubeCamera(this.camera.near,this.camera.far,this.pano0DepthCubeRenderTarget);o.matrix.copy(t.matrix),o.matrixWorld.copy(o.matrix),o.matrixAutoUpdate=!1,renderDepthCube(this.renderer,this.modelScene,o,500);let s=new three.CubeCamera(this.camera.near,this.camera.far,this.pano1DepthCubeRenderTarget);s.matrix.copy(n.matrix),s.matrixWorld.copy(s.matrix),s.matrixAutoUpdate=!1,renderDepthCube(this.renderer,this.modelScene,s,500),this.modelScene.parameter.set({pano0Depth:{panoId:t.panoId,map:this.pano0DepthCubeRenderTarget.texture,mapSize:this.pano0DepthCubeRenderTarget.width,maxDepth:500},pano1Depth:{panoId:n.panoId,map:this.pano1DepthCubeRenderTarget.texture,mapSize:this.pano1DepthCubeRenderTarget.width,maxDepth:500}})}}else this.modelScene.parameter.set({pano0Depth:null,pano1Depth:null}),this.flyEffectUseDepthBuffer||(this.pano0DepthCubeRenderTarget&&(this.pano0DepthCubeRenderTarget.dispose(),this.pano0DepthCubeRenderTarget=void 0),this.pano1DepthCubeRenderTarget&&(this.pano1DepthCubeRenderTarget.dispose(),this.pano1DepthCubeRenderTarget=void 0))}}render(){if(this.xrManager.session&&this.xrManager.session.renderState.baseLayer){let e=this.xrManager.session.renderState.baseLayer;return this.renderer.setRenderTarget(null),this.renderer.setScissorTest(!1),this.renderer.setFramebuffer(e.framebuffer),this.renderer.render(this.scene,this.xrManager.cameraVR),this.renderer.setFramebuffer(null),!0}return!1}onPanGesture(){}onTapGesture(){}onPinchGesture(){}onMouseMove(){}onMouseOut(){}panoResourceFromLocationMotionKeyframe(e){return this.panoResources[e.key]}updateControllerHelper(e,t,n){let r=this.xrControllerRay.left,o=this.xrControllerRay.right;if(!e||e.length===0)return;let s={buttons:{X:!1,Y:!1,LeftTrigger:!1,LeftPinch:!1,A:!1,B:!1,RightTrigger:!1,RightPinch:!1}};for(let c=0;c<e.length;c++){let l=e[c].handedness,u=e[c].gamepad;switch(l){case`left`:u.axes&&(this.emitHandleEvent(u.axes[2]===-1,`LeftAxesLeft`,t),this.emitHandleEvent(u.axes[2]===1,`LeftAxesRight`,t),this.emitHandleEvent(u.axes[3]===-1,`LeftAxesUp`,t),this.emitHandleEvent(u.axes[3]===1,`LeftAxesDown`,t)),u!=null&&u.buttons&&(u.buttons[4]&&this.emitHandleEvent(u.buttons[4].pressed,`X`,t),u.buttons[5]&&this.emitHandleEvent(u.buttons[5].pressed,`Y`,t),u.buttons[0]&&this.emitHandleEvent(u.buttons[0].pressed,`LeftTrigger`,t),u.buttons[1]&&this.emitHandleEvent(u.buttons[1].pressed,`LeftPinch`,t));let e={raycaster:r,axes:{up:u.axes&&u.axes[3]<0?Math.abs(u.axes[3]):0,down:u.axes&&u.axes[3]<0?0:Math.abs(u.axes[3]),left:u.axes&&u.axes[2]<0?Math.abs(u.axes[2]):0,right:u.axes&&u.axes[2]<0?0:Math.abs(u.axes[2])},deltaTime:n};s.buttons.X=u.buttons&&u.buttons[4]?u.buttons[4].pressed:!1,s.buttons.Y=u.buttons&&u.buttons[5]?u==null?void 0:u.buttons[5].pressed:!1,s.buttons.LeftTrigger=u.buttons&&u.buttons[0]?u==null?void 0:u.buttons[0].pressed:!1,s.buttons.LeftPinch=u.buttons&&u.buttons[1]?u==null?void 0:u.buttons[1].pressed:!1,s.left=e;break;case`right`:u.axes&&(this.emitHandleEvent(u.axes[2]===-1,`RightAxesLeft`,t),this.emitHandleEvent(u.axes[2]===1,`RightAxesRight`,t),this.emitHandleEvent(u.axes[3]===-1,`RightAxesUp`,t),this.emitHandleEvent(u.axes[3]===1,`RightAxesDown`,t)),u.buttons&&(u.buttons[4]&&this.emitHandleEvent(u.buttons[4].pressed,`A`,t),u.buttons[5]&&this.emitHandleEvent(u.buttons[5].pressed,`B`,t),u.buttons[0]&&this.emitHandleEvent(u.buttons[0].pressed,`RightTrigger`,t),u.buttons[1]&&this.emitHandleEvent(u.buttons[1].pressed,`RightPinch`,t)),s.right={raycaster:o,axes:{up:u.axes&&u.axes[3]<0?Math.abs(u.axes[3]):0,down:u.axes&&u.axes[3]<0?0:Math.abs(u.axes[3]),left:u.axes&&u.axes[2]<0?Math.abs(u.axes[2]):0,right:u.axes&&u.axes[2]<0?0:Math.abs(u.axes[2])},deltaTime:n},s.buttons.A=u.buttons&&u.buttons[4]?u==null?void 0:u.buttons[4].pressed:!1,s.buttons.B=u.buttons&&u.buttons[5]?u==null?void 0:u.buttons[5].pressed:!1,s.buttons.RightTrigger=u.buttons&&u.buttons[0]?u==null?void 0:u.buttons[0].pressed:!1,s.buttons.RightPinch=u.buttons&&u.buttons[1]?u==null?void 0:u.buttons[1].pressed:!1;break;default:break}}this.emit(`xr.controller.update`,createEvent(`xr.controller.update`,s))}emitHandleEvent(e,t,n){let r=this.xrControllerRay.left,o=this.xrControllerRay.right;if(e)this.xrHandleState[t].touchStart===!1?(this.xrHandleState[t].touchStartTime=n,this.xrHandleState[t].touchStart=!0,this.emit(`xr.gesture.buttonDown`,createEvent(`xr.gesture.buttonDown`,{session:this.xrManager.session,machineType:this.xrManager.machineType,buttons:t,isFinal:!1,isFirst:!0,controllers:{raycaster:{leftRay:r,rightRay:o}}}))):n-this.xrHandleState[t].touchStartTime>CONTROLLER_EVNET_DELTA_TIME&&this.emit(`xr.gesture.press`,createEvent(`xr.gesture.tap`,{session:this.xrManager.session,machineType:this.xrManager.machineType,buttons:t,isFinal:!0,isFirst:!0,controllers:{raycaster:{leftRay:r,rightRay:o}}}));else if(this.xrHandleState[t].touchStart===!0){if(this.emit(`xr.gesture.buttonUp`,createEvent(`xr.gesture.buttonUp`,{session:this.xrManager.session,machineType:this.xrManager.machineType,buttons:t,isFinal:!0,isFirst:!1,controllers:{raycaster:{leftRay:r,rightRay:o}}})),n-this.xrHandleState[t].touchStartTime<=CONTROLLER_EVNET_DELTA_TIME){let e=createEvent(`xr.gesture.tap`,{session:this.xrManager.session,machineType:this.xrManager.machineType,buttons:t,isFinal:!0,isFirst:!1,controllers:{raycaster:{leftRay:r,rightRay:o}}});!this.emit(`xr.gesture.tap`,e)&&!e.defaultPrevented&&t===`RightTrigger`&&this.checkSelectedPano(this.xrControllerRay.right)}this.xrHandleState[t].touchStart=!1,this.xrHandleState[t].touchStartTime=0}}initHandEvent(){if(!this.xrManager.session)throw Error(`初始化失败`);this.xrManager.session.addEventListener(`select`,e=>{this.gazeRay&&this.checkSelectedPano(this.gazeRay)})}},Controllers={Floorplan:FloorplanController,Topview:TopviewController,Panorama:PanoramaController,VRPanorama:VRPanoramaController,Model:ModelController,Mapview:MapviewController,XRPanorama:XRPanoramaController},controllersDefaultInitArgs={Floorplan:defaultFloorplanControllerCustomInitArgs,Topview:defaultTopviewControllerCustomInitArgs,Panorama:defaultPanoramaControllerCustomInitArgs,VRPanorama:defaultVRPanoramaControllerCustomInitArgs,Model:defaultModelControllerCustomInitArgs,Mapview:defaultMapviewControllerCustomInitArgs,XRPanorama:defaultXRPanoramaControllerInitArgs},PROXY_CONTROLLER_EVENT_NAMES=`gesture.pan,gesture.tap,gesture.dbltap,gesture.press,gesture.pinch,gesture.mousewheel,gesture.mousemove,gesture.momentum,gesture.create,initAnimation.start,initAnimation.end,camera.update,intersect.update,pano.select,pano.moveTo,pano.moving,pano.arrived,pano.cancel,pano.error,pano.texture.load,pano.texture.progress,pano.texture.success,pano.texture.error,pano.texture.abort,xr.session.start,xr.session.end,xr.gesture.tap,xr.gesture.press,xr.gesture.buttonUp,xr.gesture.buttonDown,xr.controller.update`.split(`,`);function initLegacyEvent(e){e.on(`initAnimation.start`,t=>{e.emit(`initAnimationWillStart`,t.state.panoIndex,t.state,t.userAction)}),e.on(`initAnimation.end`,t=>{e.emit(`initAnimationEnded`,t.state.panoIndex,t.state,t.userAction)}),e.on(`gesture.pan`,t=>{let n=!1;n=e.emit(`wantsGesture`,`pan`,t.pointers,t.isFinal),n&&t.preventDefault(),n=e.emit(`wantsPanGesture`,t.state,t.isFinal),n&&t.preventDefault(),t.defaultPrevented||(e.emit(`gesture`,`pan`,t.pointers,t.isFinal),e.emit(`panGesture`,t.state,t.isFinal))}),e.on(`gesture.tap`,t=>{let n=!1;n=e.emit(`wantsGesture`,`tap`,t.pointers,t.isFinal),n&&t.preventDefault(),n=e.emit(`wantsTapGesture`,t.center.raycaster,t.center.coords,t.isFinal),n&&t.preventDefault(),t.defaultPrevented||(e.emit(`gesture`,`tap`,t.pointers,t.isFinal),e.emit(`tapGesture`,t.center.raycaster,t.center.coords,t.isFinal))}),e.on(`gesture.dbltap`,t=>{let n=!1;n=e.emit(`wantsGesture`,`dbltap`,t.pointers,t.isFinal),n&&t.preventDefault(),n=e.emit(`wantsDblTapGesture`,t.center.raycaster,t.center.coords,t.isFinal),n&&t.preventDefault(),t.defaultPrevented||(e.emit(`gesture`,`dbltap`,t.pointers,t.isFinal),e.emit(`dblTapGesture`,t.center.raycaster,t.center.coords,t.isFinal))}),e.on(`gesture.press`,t=>{let n=!1;n=e.emit(`wantsGesture`,`press`,t.pointers,t.isFinal),n&&t.preventDefault(),n=e.emit(`wantsPressGesture`,t.center.raycaster,t.center.coords,t.center.delta,t.isFinal),n&&t.preventDefault(),t.defaultPrevented||(e.emit(`gesture`,`press`,t.pointers,t.isFinal),e.emit(`pressGesture`,t.center.raycaster,t.center.coords,t.center.delta,t.isFinal))}),e.on(`gesture.pinch`,t=>{let n=!1;n=e.emit(`wantsGesture`,`pinch`,t.pointers,t.isFinal),n&&t.preventDefault(),n=e.emit(`wantsPinchGesture`,t.scale,t.state.fov,t.isFinal),n&&t.preventDefault(),t.defaultPrevented||(e.emit(`gesture`,`pinch`,t.pointers,t.isFinal),e.emit(`pinchGesture`,t.scale,t.state.fov,t.isFinal))}),e.on(`gesture.mousewheel`,t=>{let n=!1;n=e.emit(`wantsGesture`,`mouseWheel`,t.pointers,t.isFinal),n&&t.preventDefault(),n=e.emit(`wantsMouseWheel`,t.center.delta,t.state.fov,t.isFinal),n&&t.preventDefault(),t.defaultPrevented||(e.emit(`gesture`,`mouseWheel`,t.pointers,t.isFinal),e.emit(`mouseWheel`,t.center.delta,t.state.fov,t.isFinal))}),e.on(`gesture.mousemove`,t=>{let n=!1;n=e.emit(`wantsGesture`,`mouseMove`,t.pointers,t.isFinal),n&&t.preventDefault(),t.defaultPrevented||(e.emit(`gesture`,`mouseMove`,t.pointers,t.isFinal),n=e.emit(`wantsChangeCameraFov`,t.state.fov),n&&t.preventDefault())}),e.on(`gesture.momentum`,t=>{let n=!1;n=e.emit(`wantsInteriaPan`,t.state),n&&t.preventDefault(),t.defaultPrevented||e.emit(`interiaPan`,t.state,t.isFinal)}),e.on(`camera.update`,t=>{e.emit(`cameraFovUpdate`,t.state.fov,t.userAction),e.emit(`cameraDirectionUpdate`,t.state,t.userAction);let n=coordinatesToVector(t.state);n.setLength(t.state.distance);let r=t.state.offset.clone().sub(n);e.emit(`cameraPositionUpdate`,r,t.userAction),e.emit(`cameraUpdate`,t.state,t.userAction)}),e.on(`intersect.update`,t=>{if(t.intersection){let n=!1;n=e.emit(`wantsShowIntersectionOnModel`,t.raycaster),n&&t.preventDefault(),t.defaultPrevented||e.emit(`intersectionOnModelUpdate`,t.intersection,t.object)}else e.emit(`intersectionHidden`)}),e.on(`pano.request`,t=>{let n=e.emit(`wantsMoveToPano`,t.state.panoIndex,t.options,t.userAction);n||(n=e.emit(`wantsToMoveToPano`,t.state.panoIndex,t.options,t.userAction)),n&&t.preventDefault(),t.defaultPrevented||e.emit(`panoWillLoad`,t.state.panoIndex)}),e.on(`pano.select`,t=>{e.emit(`panoSelected`,t.state.panoIndex)}),e.on(`pano.moveTo`,t=>{e.emit(`panoLoaded`,t.state.panoIndex),e.emit(`moveToPano`,t.state.panoIndex,t.userAction),e.emit(`panoWillArrive`,t.state.panoIndex,t.state,t.userAction)}),e.on(`pano.moving`,t=>{e.emit(`movingToPano`,t.state.panoIndex,t.prevPano.panoIndex,t.progress)}),e.on(`pano.arrived`,t=>{e.emit(`panoArrived`,t.state.panoIndex,t.state,t.userAction)}),e.on(`pano.cancel`,t=>{e.emit(`moveToPanoCanceled`,t.state.panoIndex)}),e.on(`pano.error`,t=>{e.emit(`panoLoadError`,t.error,t.state.panoIndex)}),e.on(`pano.texture.load`,t=>{e.emit(`textureStartLoad`,t.pano.panoIndex)}),e.on(`pano.texture.success`,t=>{e.emit(`textureLoaded`,t.pano.panoIndex,t.meta)}),e.on(`pano.texture.error`,t=>{e.emit(`textureError`,t.error,t.pano.panoIndex)}),e.on(`pano.texture.abort`,t=>{e.emit(`textureAbort`,t.pano.panoIndex)}),e.on(`pano.texture.progress`,t=>{e.emit(`textureLoading`,t.progress,t.pano.panoIndex)}),e.on(`xr.session.start`,t=>{e.emit(`webXRSessionStart`)}),e.on(`xr.session.end`,t=>{e.emit(`webXRSessionEnd`)}),e.on(`xr.gesture.tap`,t=>{e.emit(`webXRControllerEvent`,`tap`,t.buttons,{raycaster:t.controllers.raycaster})}),e.on(`xr.gesture.press`,t=>{e.emit(`webXRControllerEvent`,`press`,t.buttons,{raycaster:t.controllers.raycaster})}),e.on(`xr.gesture.buttonUp`,t=>{e.emit(`webXRControllerEvent`,`buttonUp`,t.buttons,{raycaster:t.controllers.raycaster})}),e.on(`xr.gesture.buttonDown`,t=>{e.emit(`webXRControllerEvent`,`buttonDown`,t.buttons,{raycaster:t.controllers.raycaster})}),e.on(`xr.controller.update`,t=>{e.emit(`webXRControllerRayUpdate`,{leftRay:t.left?t.left.raycaster:void 0,rightRay:t.right?t.right.raycaster:void 0}),t.left&&e.emit(`webXRAxesUpdate`,`left`,{raycaster:{leftRay:t.left?t.left.raycaster:void 0,rightRay:t.right?t.right.raycaster:void 0},axesState:{up:t.left.axes.up,down:t.left.axes.down,left:t.left.axes.left,right:t.left.axes.right},deltaTime:t.left.deltaTime}),t.right&&e.emit(`webXRAxesUpdate`,`right`,{raycaster:{leftRay:t.left?t.left.raycaster:void 0,rightRay:t.right?t.right.raycaster:void 0},axesState:{up:t.right.axes.up,down:t.right.axes.down,left:t.right.axes.left,right:t.right.axes.right},deltaTime:t.right.deltaTime})}),e.on(`works.request`,t=>{e.emit(`willLoad`,t.input,t.works[0],e.getCurrentState())}),e.on(`works.load`,t=>{e.emit(`load`,t.input,t.works[0],e.getCurrentState())}),e.on(`works.ready`,t=>{e.emit(`loaded`,t.input,t.works[0])}),e.on(`state.change`,t=>{e.emit(`stateChange`,t.state,t.userAction)}),e.on(`currentState.change`,t=>{e.emit(`currentStateChange`,t.state,t.userAction)}),e.on(`state.set`,t=>{e.emit(`setState`,t.state)}),e.on(`state.synced`,t=>{e.emit(`stateSynced`,t.state)}),e.on(`model.request`,t=>{e.emit(`modelWillLoad`,t.work.model)}),e.on(`model.error`,t=>{e.emit(`modelLoadError`,t.error,t.model)}),e.on(`model.load`,t=>{e.emit(`modelLoaded`,t.model)}),e.on(`model.changeShownFloor`,t=>{e.emit(`modelShownFloorChange`,t.model.shownFloor,t.model.floorLength)}),e.on(`render`,t=>{e.emit(`renderFrame`,t.needsRender)}),e.on(`mode.change.request`,t=>{e.emit(`wantsChangeMode`,t.mode,t.prevMode)}),e.on(`mode.change`,t=>{e.emit(`modeChange`,t.mode,t.prevMode,t.state.panoIndex,t.state,t.userAction)}),e.on(`helpers.visible`,t=>{e.emit(`helpersVisibleChange`,t.object.visible)}),e.on(`network.resource`,t=>{e.emit(`network`,t.source,t.requestType,t.requestState,t.detail)})}function generateDefaultVideoElement(){if(typeof window<`u`){let e=document.createElement(`video`);e.loop=!0,e.autoplay=!0,e.playsInline=!0,e.muted=!0,e.crossOrigin=``;let t=()=>{document.removeEventListener(`touchstart`,t,!1),document.removeEventListener(`mousedown`,t,!1),e.muted=!1};return document.addEventListener(`touchstart`,t,!1),document.addEventListener(`mousedown`,t,!1),e}else return{}}function initLights(){let e=new three.Group;e.name=`internalLights`;{let t=new three.DirectionalLight(16777215,.1);t.name=`direction0`,t.position.copy(new three.Vector3(0,1,0)),e.add(t)}{let t=new three.DirectionalLight(16777215,.1);t.name=`direction1`,t.position.copy(new three.Vector3(-1,-1,-1)),e.add(t)}{let t=new three.DirectionalLight(16777215,.3);t.name=`direction2`,t.position.copy(new three.Vector3(1,1,1)),e.add(t)}{let t=new three.AmbientLight(16777215,.6);t.name=`ambient0`,e.add(t)}return e}function parseKeyValue(e){var t,n;let r={},o=e.split(/(\;|\,)/);for(let e of o){let o=e.split(`=`),s=(t=o[0])==null?void 0:t.trim(),c=(n=o[1])==null?void 0:n.trim();s&&c&&(r[s]=c)}return r}function getViewportScale(){var e;if(typeof document<`u`){let t=document.getElementsByTagName(`meta`);for(let n=0;n<t.length;n++){let r=t[n];if(r.getAttribute(`name`)===`viewport`){let t=parseKeyValue((e=r.getAttribute(`content`))==null?``:e),n=Number(t[`initial-scale`]);if(!isNaN(n))return n}}}return 1}var realsee_png_data_url_default=`data:image/png;base64,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`,imageSize=[351,63],imageOffset=[20,20],vertices=new Float32Array([-.5,-.5,0,.5,-.5,0,-.5,.5,0,.5,.5,0]),uvs=new Float32Array([0,0,1,0,0,1,1,1]),index=new Uint8Array([0,1,2,1,3,2]),geometry=new three.BufferGeometry;geometry.setAttribute(`position`,new three.BufferAttribute(vertices,3)),geometry.setAttribute(`uv`,new three.BufferAttribute(uvs,2)),geometry.setIndex(new three.BufferAttribute(index,1));var material=new three.MeshBasicMaterial({transparent:!0,depthTest:!1,depthWrite:!1,stencilWrite:!1,fog:!1}),mesh=new three.Mesh(geometry,material);mesh.matrixAutoUpdate=!1;var scene=new three.Scene;scene.add(mesh),scene.matrixAutoUpdate=!1;var camera=new three.OrthographicCamera(-.5,.5,.5,-.5,.1,1);camera.position.set(0,0,.5),camera.lookAt(0,0,0),camera.updateMatrixWorld(!0),camera.matrixAutoUpdate=!1;var prevViewport=new three.Vector4,prevScissor=new three.Vector4;function renderPoweredByRealsee(e){if(material.map){let t=e.getViewport(prevViewport),n=e.getScissor(prevScissor),r=e.getScissorTest(),o=e.autoClear,s=n.x+imageOffset[0]/3,c=n.y+imageOffset[1]/3,l=imageSize[0]/3,u=imageSize[1]/3;e.setViewport(s,c,l,u),e.setScissor(s,c,l,u),e.setScissorTest(!0),e.autoClear=!1,e.render(scene,camera),e.setViewport(t),e.setScissor(n),e.setScissorTest(r),e.autoClear=o}else{let e=new three.Texture,t=new Image;t.onload=()=>{e.image=t,e.wrapS=three.ClampToEdgeWrapping,e.wrapT=three.ClampToEdgeWrapping,e.minFilter=three.LinearFilter,e.needsUpdate=!0,e.generateMipmaps=!1,material.needsUpdate=!0,t.onload=noop},t.src=realsee_png_data_url_default,material.map=e}}var jsContent$1=`(function(){function e(e,t,n,r){function i(e){return e instanceof n?e:new n(function(t){t(e)})}return new(n||=Promise)(function(n,a){function o(e){try{c(r.next(e))}catch(e){a(e)}}function s(e){try{c(r.throw(e))}catch(e){a(e)}}function c(e){e.done?n(e.value):i(e.value).then(o,s)}c((r=r.apply(e,t||[])).next())})}async function t(e={}){var t,n=e,r=!1,i=!0,a=self.location.href;if(r||i)try{new URL(\`.\`,a).href}catch{}console.log.bind(console),console.error.bind(console);var o=!1;function s(e){for(var t=0,n=e.length,r=new Uint8Array(n),i;t<n;++t)i=e.charCodeAt(t),r[t]=~i>>8&i;return r}var c,l,u=!1;function d(){var e=M.buffer;new Int8Array(e),new Int16Array(e),n.HEAPU8=l=new Uint8Array(e),new Uint16Array(e),new Int32Array(e),n.HEAPU32=new Uint32Array(e),n.HEAPF32=new Float32Array(e),new Float64Array(e),new BigInt64Array(e),new BigUint64Array(e)}function f(){if(n.preRun)for(typeof n.preRun==\`function\`&&(n.preRun=[n.preRun]);n.preRun.length;)T(n.preRun.shift());x(w)}function p(){u=!0,I.c()}function m(){if(n.postRun)for(typeof n.postRun==\`function\`&&(n.postRun=[n.postRun]);n.postRun.length;)C(n.postRun.shift());x(S)}var h;function g(){return s(\`\\0asm\\0\\0\\0&\\\`\\\`}}\\\`}\\\`\\0\\\`\\v\\0\\\`\\0\\0\\x07aa\\0\\0\\b\\x07\\0\\0\\x07\\bA\\v\\x07b\\0c\\0\\x07d\\0e\\0f\\0\\f
|
|
2239
|
+
`},LineMaterial=class extends three.ShaderMaterial{constructor(e){super({uniforms:three.UniformsUtils.clone(lineShader.uniforms),vertexShader:lineShader.vertexShader,fragmentShader:lineShader.fragmentShader,clipping:!0}),this.type=`LineMaterial`,this.dashed=!1,Object.defineProperties(this,{color:{enumerable:!0,get(){return this.uniforms.diffuse.value},set(e){this.uniforms.diffuse.value=e}},linewidth:{enumerable:!0,get(){return this.uniforms.linewidth.value},set(e){this.uniforms.linewidth.value=e}},dashScale:{enumerable:!0,get(){return this.uniforms.dashScale.value},set(e){this.uniforms.dashScale.value=e}},dashSize:{enumerable:!0,get(){return this.uniforms.dashSize.value},set(e){this.uniforms.dashSize.value=e}},gapSize:{enumerable:!0,get(){return this.uniforms.gapSize.value},set(e){this.uniforms.gapSize.value=e}},opacity:{enumerable:!0,get(){return this.uniforms.opacity.value},set(e){this.uniforms.opacity.value=e}},resolution:{enumerable:!0,get(){return this.uniforms.resolution.value},set(e){this.uniforms.resolution.value.copy(e)}}}),this.setValues(e)}};Object.assign(LineMaterial.prototype,{isLineMaterial:!0});var LineSegments2=class extends three.Mesh{constructor(e,t){super(),this.type=`LineSegments2`,this.geometry=e===void 0?new LineSegmentsGeometry:e,this.material=t===void 0?new LineMaterial({color:Math.random()*16777215}):t}computeLineDistances(){let e=this.geometry,t=e.attributes.instanceStart,n=e.attributes.instanceEnd,r=new Float32Array(2*t.count),o=new three.Vector3,s=new three.Vector3;for(var c=0,l=0,u=t.count;c<u;c++,l+=2)o.fromBufferAttribute(t,c),s.fromBufferAttribute(n,c),r[l]=l===0?0:r[l-1],r[l+1]=r[l]+o.distanceTo(s);let d=new three.InstancedInterleavedBuffer(r,2,1);return e.setAttribute(`instanceDistanceStart`,new three.InterleavedBufferAttribute(d,1,0)),e.setAttribute(`instanceDistanceEnd`,new three.InterleavedBufferAttribute(d,1,1)),this}raycast(e,t){e.camera===null&&console.error(`LineSegments2: "Raycaster.camera" needs to be set in order to raycast against LineSegments2.`);let n=e.ray,r=e.camera,o=r.projectionMatrix,s=this.geometry,c=this.material,l=c.resolution,u=c.linewidth,d=s.attributes.instanceStart,f=s.attributes.instanceEnd,p=new three.Vector4,m=new three.Vector4,h=new three.Vector4,g=new three.Vector3,_=new three.Matrix4,v=new three.Line3,y=new three.Vector3;n.at(1,h),h.w=1,h.applyMatrix4(r.matrixWorldInverse),h.applyMatrix4(o),h.multiplyScalar(1/h.w),h.x*=l.x/2,h.y*=l.y/2,h.z=0,g.copy(h);let b=this.matrixWorld;_.multiplyMatrices(r.matrixWorldInverse,b);for(var S=0,C=d.count;S<C;S++){p.fromBufferAttribute(d,S),m.fromBufferAttribute(f,S),p.w=1,m.w=1,p.applyMatrix4(_),m.applyMatrix4(_),p.applyMatrix4(o),m.applyMatrix4(o),p.multiplyScalar(1/p.w),m.multiplyScalar(1/m.w);var w=p.z<-1&&m.z<-1,T=p.z>1&&m.z>1;if(w||T)continue;p.x*=l.x/2,p.y*=l.y/2,m.x*=l.x/2,m.y*=l.y/2,v.start.copy(p),v.start.z=0,v.end.copy(m),v.end.z=0;let e=v.closestPointToPointParameter(g,!0);v.at(e,y);let r=three.MathUtils.lerp(p.z,m.z,e),s=r>=-1&&r<=1;var E=g.distanceTo(y)<u*.5;if(s&&E){v.start.fromBufferAttribute(d,S),v.end.fromBufferAttribute(f,S),v.start.applyMatrix4(b),v.end.applyMatrix4(b);var D=new three.Vector3,O=new three.Vector3;n.distanceSqToSegment(v.start,v.end,O,D),t.push({point:O,pointOnLine:D,distance:n.origin.distanceTo(O),object:this,faceIndex:S})}}}};Object.assign(LineSegments2.prototype,{isLineSegments2:!0});var Line2=class extends LineSegments2{constructor(e,t){super(e,t),this.type=`Line2`}};Object.assign(Line2.prototype,{isLine2:!0});var LineGeometry=class extends LineSegmentsGeometry{constructor(){super(),this.type=`LineGeometry`}setPositions(e){let t=e.length-3,n=new Float32Array(2*t);for(let r=0;r<t;r+=3)n[2*r]=e[r],n[2*r+1]=e[r+1],n[2*r+2]=e[r+2],n[2*r+3]=e[r+3],n[2*r+4]=e[r+4],n[2*r+5]=e[r+5];return super.setPositions(n),this}setColors(e){let t=e.length-3,n=new Float32Array(2*t);for(let r=0;r<t;r+=3)n[2*r]=e[r],n[2*r+1]=e[r+1],n[2*r+2]=e[r+2],n[2*r+3]=e[r+3],n[2*r+4]=e[r+4],n[2*r+5]=e[r+5];return super.setColors(n),this}fromLine(e){let t=e.geometry;if(t instanceof three.Geometry){let e=new three.BufferGeometry().fromGeometry(t);this.setPositions(e.attributes.position.array)}else t instanceof three.BufferGeometry&&this.setPositions(t.attributes.position.array);return this}copy(){return this}};Object.assign(LineGeometry.prototype,{isLineGeometry:!0});var circleImageURL=`data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAAZiS0dEAAAAAAAA+UO7fwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9sHDgwCEMBJZu0AAAAdaVRYdENvbW1lbnQAAAAAAENyZWF0ZWQgd2l0aCBHSU1QZC5lBwAABM5JREFUWMO1V0tPG2cUPZ4Hxh6DazIOrjFNqJs0FIMqWFgWQkatsmvVbtggKlSVRVf5AWz4AWz4AUSKEChll19QJYSXkECuhFxsHjEhxCYm+DWGMZ5HF72DJq4bAzFXurI0M/I5997v3u9cC65vTJVn2lX/xHINQOYSBLTLEuIuCWw4Z3IGAEvf6ASmVHjNzHCXBG4A0AjACsAOwEbO0nsFQBnAGYASAIl+ZRMR7SolMEdsByD09fV5R0ZGgg8ePPjW5/N1iqLYpuu6RZblciKR2I9Go69evnwZnZ+fjwI4IS8AKBIRzeQfJWCANwKwh0KhtrGxsYehUOin1tbW+zzP23ietzY2NnIAoGmaLsuyUiqVyvl8XtrY2NiamZn589mzZxsAUgCOAeQAnFI2tI+VxIjaAeDzoaGh7xYWFuZOTk6OZVk+12uYqqq6JEnn0Wg0OT4+/geAXwGEAdwDIFJQXC1wO4DWR48e/RCPxxclSSroVzRFUbSDg4P848ePFwH8DuAhkWih83TRQWxFOXgAwvDwcOfo6OhvXV1d39tsNtuVBwTDWBwOh1UUxVsMw1hXVlbSdCgNV43uYSvrHg6H24aHh38eHBz85TrgF9FYLHA4HLzH43FvbW2d7u/vG+dANp8FpqIlbd3d3V8Fg8EfBUFw4BONZVmL3+9vHhkZCQL4AoAHgJPK8G+yzC0XDofdoVAo5PP5vkadTBAEtr+/39ff3x8gAp/RPOEqx2qjx+NpvXv3bk9DQ0NDvQgwDIOWlhZrMBj8kgi0UJdxRgYMArzL5XJ7vd57qLPZ7Xamp6fnNgBXtQxcjFuHw+Hyer3t9SYgCAITCAScAJoBNNEY/08GOFVVrfVMv7kMNDntFD1vjIAPrlRN0xjckOm6biFQ3jwNPwDMZrOnqVTqfb3Bi8Wivru7W/VCYkwPlKOjo0IikXh7EwQikYgE4Nw0CfXKDCipVCoTj8df3QABbW1tLUc6oUgkFPMkVACUNjc337148eKvw8PDbJ2jP1taWkoCyNDVXDSECmNSK4qiKNLq6urW8+fPI/UicHx8rD59+jSVy+WOAKSJhKENwFItLtoxk8mwsixzHR0dHe3t7c5PAU+n09rs7OzJkydPYqVSaQfANoDXALIk31S2smU1TWMPDg7K5XKZ7+3t9TudTut1U7+wsFCcmJiIpdPpbQBxADsAknQWymYCOukBHYCuKApisdhpMpnURFEU79y503TVyKenpzOTk5M7e3t7MQKPV0Zv1gNm+awB0MvlshqLxfLb29uyJElWURSbXC4XXyvqxcXFs6mpqeTc3Nzu3t7e3wQcA7BPZ8Cov1pNlJplmQtAG8MwHV6v95tAINA5MDBwPxAIuLu6upr8fr/VAN3c3JQjkcjZ+vp6fnl5+d2bN29SuVzuNYAEpf01CdRChUL+X1VskHACuA3Ay3Fcu9vt7nA6nZ7m5uYWQRCaNE3jVVW15PP580KhIGUymWw2m00DOAJwSP4WwPtq4LX2Ao6USxNlQyS/RcQcdLGwlNIz6vEMAaZpNzCk2Pll94LK/cDYimxERiBwG10sxjgvEZBE0UpE6vxj+0Ct5bTaXthgEhRmja8QWNkkPGsuIpfdjpkK+cZUWTC0KredVmtD/gdlSl6EG4AMvQAAAABJRU5ErkJggg==`,DEFAULT_COLOR=14467195,POINT_SIZE=8,DEFAULT_LINEWIDTH=2,DEFAULT_DASHSCALE=20,sharedCircleTexture=null,FiveLine=class extends three.Object3D{static get version(){return`6.8.0-alpha.23`}constructor(e=new three.Vector3,t=new three.Vector3){super(),this.type=`FiveLine`,this.needsRender=!0,this.line=new Line2(new LineGeometry,new LineMaterial({color:DEFAULT_COLOR,linewidth:DEFAULT_LINEWIDTH,dashScale:DEFAULT_DASHSCALE,dashed:!1}));let n=new three.BufferGeometry,r=new three.PointsMaterial({color:DEFAULT_COLOR,size:POINT_SIZE,map:sharedCircleTexture||(sharedCircleTexture=new three.TextureLoader().load(`data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAAZiS0dEAAAAAAAA+UO7fwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9sHDgwCEMBJZu0AAAAdaVRYdENvbW1lbnQAAAAAAENyZWF0ZWQgd2l0aCBHSU1QZC5lBwAABM5JREFUWMO1V0tPG2cUPZ4Hxh6DazIOrjFNqJs0FIMqWFgWQkatsmvVbtggKlSVRVf5AWz4AWz4AUSKEChll19QJYSXkECuhFxsHjEhxCYm+DWGMZ5HF72DJq4bAzFXurI0M/I5997v3u9cC65vTJVn2lX/xHINQOYSBLTLEuIuCWw4Z3IGAEvf6ASmVHjNzHCXBG4A0AjACsAOwEbO0nsFQBnAGYASAIl+ZRMR7SolMEdsByD09fV5R0ZGgg8ePPjW5/N1iqLYpuu6RZblciKR2I9Go69evnwZnZ+fjwI4IS8AKBIRzeQfJWCANwKwh0KhtrGxsYehUOin1tbW+zzP23ietzY2NnIAoGmaLsuyUiqVyvl8XtrY2NiamZn589mzZxsAUgCOAeQAnFI2tI+VxIjaAeDzoaGh7xYWFuZOTk6OZVk+12uYqqq6JEnn0Wg0OT4+/geAXwGEAdwDIFJQXC1wO4DWR48e/RCPxxclSSroVzRFUbSDg4P848ePFwH8DuAhkWih83TRQWxFOXgAwvDwcOfo6OhvXV1d39tsNtuVBwTDWBwOh1UUxVsMw1hXVlbSdCgNV43uYSvrHg6H24aHh38eHBz85TrgF9FYLHA4HLzH43FvbW2d7u/vG+dANp8FpqIlbd3d3V8Fg8EfBUFw4BONZVmL3+9vHhkZCQL4AoAHgJPK8G+yzC0XDofdoVAo5PP5vkadTBAEtr+/39ff3x8gAp/RPOEqx2qjx+NpvXv3bk9DQ0NDvQgwDIOWlhZrMBj8kgi0UJdxRgYMArzL5XJ7vd57qLPZ7Xamp6fnNgBXtQxcjFuHw+Hyer3t9SYgCAITCAScAJoBNNEY/08GOFVVrfVMv7kMNDntFD1vjIAPrlRN0xjckOm6biFQ3jwNPwDMZrOnqVTqfb3Bi8Wivru7W/VCYkwPlKOjo0IikXh7EwQikYgE4Nw0CfXKDCipVCoTj8df3QABbW1tLUc6oUgkFPMkVACUNjc337148eKvw8PDbJ2jP1taWkoCyNDVXDSECmNSK4qiKNLq6urW8+fPI/UicHx8rD59+jSVy+WOAKSJhKENwFItLtoxk8mwsixzHR0dHe3t7c5PAU+n09rs7OzJkydPYqVSaQfANoDXALIk31S2smU1TWMPDg7K5XKZ7+3t9TudTut1U7+wsFCcmJiIpdPpbQBxADsAknQWymYCOukBHYCuKApisdhpMpnURFEU79y503TVyKenpzOTk5M7e3t7MQKPV0Zv1gNm+awB0MvlshqLxfLb29uyJElWURSbXC4XXyvqxcXFs6mpqeTc3Nzu3t7e3wQcA7BPZ8Cov1pNlJplmQtAG8MwHV6v95tAINA5MDBwPxAIuLu6upr8fr/VAN3c3JQjkcjZ+vp6fnl5+d2bN29SuVzuNYAEpf01CdRChUL+X1VskHACuA3Ay3Fcu9vt7nA6nZ7m5uYWQRCaNE3jVVW15PP580KhIGUymWw2m00DOAJwSP4WwPtq4LX2Ao6USxNlQyS/RcQcdLGwlNIz6vEMAaZpNzCk2Pll94LK/cDYimxERiBwG10sxjgvEZBE0UpE6vxj+0Ct5bTaXthgEhRmja8QWNkkPGsuIpfdjpkK+cZUWTC0KredVmtD/gdlSl6EG4AMvQAAAABJRU5ErkJggg==`)),sizeAttenuation:!1,transparent:!0});this.points=new three.Points(n,r),this.points.renderOrder=11,this.points.frustumCulled=!1,this.setPoints(e,t),this.add(this.line,this.points)}setPoints(e,t){let n=[].concat(e.toArray(),t.toArray());this.points.geometry.setAttribute(`position`,new three.BufferAttribute(new Float32Array(n),3)),this.line.geometry.setPositions(n),this.line.computeLineDistances(),this.needsRender=!0}getPoints(){let e=this.points.geometry.attributes.position.array;return[new three.Vector3(e[0],e[1],e[2]),new three.Vector3(e[3],e[4],e[5])]}setMaterial(e){let t=this.line.material;for(let n in e){if(!e.hasOwnProperty(n))continue;let r=e[n];n===`dashed`?(t.dashed=r,r?t.defines.USE_DASH=``:delete t.defines.USE_DASH,t.needsUpdate=!0):t[n]=e[n]}this.needsRender=!0}setResolution(e,t){let n=this.line.material.resolution;(n.x!==e||n.y!==t)&&(n.set(e,t),this.needsRender=!0)}};Object.assign(FiveLine.prototype,{isFiveLine:!0});var Constants={Handedness:Object.freeze({NONE:`none`,LEFT:`left`,RIGHT:`right`}),ComponentState:Object.freeze({DEFAULT:`default`,TOUCHED:`touched`,PRESSED:`pressed`}),ComponentProperty:Object.freeze({BUTTON:`button`,X_AXIS:`xAxis`,Y_AXIS:`yAxis`,STATE:`state`}),ComponentType:Object.freeze({TRIGGER:`trigger`,SQUEEZE:`squeeze`,TOUCHPAD:`touchpad`,THUMBSTICK:`thumbstick`,BUTTON:`button`}),ButtonTouchThreshold:.05,AxisTouchThreshold:.1,VisualResponseProperty:Object.freeze({TRANSFORM:`transform`,VISIBILITY:`visibility`})};function fetchJsonFile(e){return __awaiter(this,void 0,void 0,function*(){let t=yield fetch(e);if(t.ok)return t.json();throw Error(t.statusText)})}function fetchProfilesList(e){return __awaiter(this,void 0,void 0,function*(){if(!e)throw Error(`No basePath supplied`);return yield fetchJsonFile(`${e}/profilesList.json`)})}function fetchProfile(e,t){return __awaiter(this,arguments,void 0,function*(e,t,n=null,r=!0){if(!e)throw Error(`No xrInputSource supplied`);if(!t)throw Error(`No basePath supplied`);let o=yield fetchProfilesList(t),s;if(e.profiles.some(e=>{let n=o[e];return n&&(s={profileId:e,profilePath:`${t}/${n.path}`,deprecated:!!n.deprecated}),!!s}),!s){if(!n)throw Error(`No matching profile name found`);let e=o[n];if(!e)throw Error(`No matching profile name found and default profile "${n}" missing.`);s={profileId:n,profilePath:`${t}/${e.path}`,deprecated:!!e.deprecated}}let c=yield fetchJsonFile(s.profilePath),l;if(r){let t;if(t=c.layouts[e.handedness],!t)throw Error(`No matching handedness, ${e.handedness}, in profile ${s.profileId}`);t.assetPath&&(l=s.profilePath.replace(`profile.json`,t.assetPath))}return{profile:c,assetPath:l}})}var defaultComponentValues={xAxis:0,yAxis:0,button:0,state:Constants.ComponentState.DEFAULT};function normalizeAxes(e=0,t=0){let n=e,r=t;if(Math.sqrt(e*e+t*t)>1){let o=Math.atan2(t,e);n=Math.cos(o),r=Math.sin(o)}return{normalizedXAxis:n*.5+.5,normalizedYAxis:r*.5+.5}}var VisualResponse=class{constructor(e){this.componentProperty=e.componentProperty,this.states=e.states,this.valueNodeName=e.valueNodeName,this.valueNodeProperty=e.valueNodeProperty,this.valueNodeProperty===Constants.VisualResponseProperty.TRANSFORM&&(this.minNodeName=e.minNodeName,this.maxNodeName=e.maxNodeName),this.value=0,this.updateFromComponent(defaultComponentValues)}updateFromComponent({xAxis:e,yAxis:t,button:n,state:r}){let{normalizedXAxis:o,normalizedYAxis:s}=normalizeAxes(e,t);switch(this.componentProperty){case Constants.ComponentProperty.X_AXIS:this.value=this.states.includes(r)?o:.5;break;case Constants.ComponentProperty.Y_AXIS:this.value=this.states.includes(r)?s:.5;break;case Constants.ComponentProperty.BUTTON:this.value=this.states.includes(r)?n:0;break;case Constants.ComponentProperty.STATE:this.valueNodeProperty===Constants.VisualResponseProperty.VISIBILITY?this.value=this.states.includes(r):this.value=this.states.includes(r)?1:0;break;default:throw Error(`Unexpected visualResponse componentProperty ${this.componentProperty}`)}}},Component=class{constructor(e,t){if(!e||!t||!t.visualResponses||!t.gamepadIndices||Object.keys(t.gamepadIndices).length===0)throw Error(`Invalid arguments supplied`);this.id=e,this.type=t.type,this.rootNodeName=t.rootNodeName,this.touchPointNodeName=t.touchPointNodeName,this.visualResponses={},Object.keys(t.visualResponses).forEach(e=>{let n=new VisualResponse(t.visualResponses[e]);this.visualResponses[e]=n}),this.gamepadIndices=Object.assign({},t.gamepadIndices),this.values={state:Constants.ComponentState.DEFAULT,button:this.gamepadIndices.button===void 0?void 0:0,xAxis:this.gamepadIndices.xAxis===void 0?void 0:0,yAxis:this.gamepadIndices.yAxis===void 0?void 0:0}}get data(){return Object.assign({id:this.id},this.values)}updateFromGamepad(e){if(this.values.state=Constants.ComponentState.DEFAULT,this.gamepadIndices.button!==void 0&&e.buttons.length>this.gamepadIndices.button){let t=e.buttons[this.gamepadIndices.button];this.values.button=t.value,this.values.button=this.values.button<0?0:this.values.button,this.values.button=this.values.button>1?1:this.values.button,t.pressed||this.values.button===1?this.values.state=Constants.ComponentState.PRESSED:(t.touched||this.values.button>Constants.ButtonTouchThreshold)&&(this.values.state=Constants.ComponentState.TOUCHED)}this.gamepadIndices.xAxis!==void 0&&e.axes.length>this.gamepadIndices.xAxis&&(this.values.xAxis=e.axes[this.gamepadIndices.xAxis],this.values.xAxis=this.values.xAxis<-1?-1:this.values.xAxis,this.values.xAxis=this.values.xAxis>1?1:this.values.xAxis,this.values.state===Constants.ComponentState.DEFAULT&&Math.abs(this.values.xAxis)>Constants.AxisTouchThreshold&&(this.values.state=Constants.ComponentState.TOUCHED)),this.gamepadIndices.yAxis!==void 0&&e.axes.length>this.gamepadIndices.yAxis&&(this.values.yAxis=e.axes[this.gamepadIndices.yAxis],this.values.yAxis=this.values.yAxis<-1?-1:this.values.yAxis,this.values.yAxis=this.values.yAxis>1?1:this.values.yAxis,this.values.state===Constants.ComponentState.DEFAULT&&Math.abs(this.values.yAxis)>Constants.AxisTouchThreshold&&(this.values.state=Constants.ComponentState.TOUCHED)),Object.values(this.visualResponses).forEach(e=>{e.updateFromComponent(this.values)})}},MotionController=class{constructor(e,t,n){if(!e)throw Error(`No xrInputSource supplied`);if(!t)throw Error(`No profile supplied`);this.xrInputSource=e,this.assetUrl=n,this.id=t.profileId,this.layoutDescription=t.layouts[e.handedness],this.components={},Object.keys(this.layoutDescription.components).forEach(e=>{let t=this.layoutDescription.components[e];this.components[e]=new Component(e,t)}),this.updateFromGamepad()}get gripSpace(){return this.xrInputSource.gripSpace}get targetRaySpace(){return this.xrInputSource.targetRaySpace}get data(){let e=[];return Object.values(this.components).forEach(t=>{e.push(t.data)}),e}updateFromGamepad(){Object.values(this.components).forEach(e=>{e.updateFromGamepad(this.xrInputSource.gamepad)})}},DEFAULT_PROFILES_PATH=`https://cdn.jsdelivr.net/npm/@webxr-input-profiles/assets@1.0/dist/profiles`,DEFAULT_PROFILE=`generic-trigger`,XRControllerModel=class extends three.Object3D{constructor(){super(),this.motionController=null,this.envMap=null}setEnvironmentMap(e){return this.envMap==e?this:(this.envMap=e,this.traverse(e=>{e instanceof three.Mesh&&e.isMesh&&(e.material.envMap=this.envMap,e.material.needsUpdate=!0)}),this)}updateMatrixWorld(e){super.updateMatrixWorld(e),this.motionController&&(this.motionController.updateFromGamepad(),Object.values(this.motionController.components).forEach(e=>{Object.values(e.visualResponses).forEach(e=>{let{valueNode:t,minNode:n,maxNode:r,value:o,valueNodeProperty:s}=e;t&&(s===Constants.VisualResponseProperty.VISIBILITY?t.visible=o:s===Constants.VisualResponseProperty.TRANSFORM&&(t.quaternion.copy(n.quaternion).slerp(r.quaternion,o),t.position.lerpVectors(n.position,r.position,o)))})}))}};function findNodes(e,t){Object.values(e.components).forEach(e=>{let{type:n,touchPointNodeName:r,visualResponses:o}=e;if(n===Constants.ComponentType.TOUCHPAD)if(e.touchPointNode=t.getObjectByName(r),e.touchPointNode){let t=new three.Mesh(new three.SphereGeometry(.001),new three.MeshBasicMaterial({color:255}));e.touchPointNode.add(t)}else console.warn(`Could not find touch dot, ${e.touchPointNodeName}, in touchpad component ${e.id}`);Object.values(o).forEach(e=>{let{valueNodeName:n,minNodeName:r,maxNodeName:o,valueNodeProperty:s}=e;if(s===Constants.VisualResponseProperty.TRANSFORM){if(e.minNode=t.getObjectByName(r),e.maxNode=t.getObjectByName(o),!e.minNode){console.warn(`Could not find ${r} in the model`);return}if(!e.maxNode){console.warn(`Could not find ${o} in the model`);return}}e.valueNode=t.getObjectByName(n),e.valueNode||console.warn(`Could not find ${n} in the model`)})})}function addAssetSceneToControllerModel(e,t){findNodes(e.motionController,t),e.envMap&&t.traverse(t=>{t instanceof three.Mesh&&t.isMesh&&(t.material.envMap=e.envMap,t.material.needsUpdate=!0)}),e.add(t)}var XRControllerModelFactory=class{constructor(e=null){this.gltfLoader=e,this.path=DEFAULT_PROFILES_PATH,this._assetCache={}}createControllerModel(e){let t=new XRControllerModel,n=null;return e.addEventListener(`connected`,e=>{let r=e.data;r.targetRayMode!==`tracked-pointer`||!r.gamepad||fetchProfile(r,this.path,DEFAULT_PROFILE).then(({profile:e,assetPath:o})=>{t.motionController=new MotionController(r,e,o);let s=this._assetCache[t.motionController.assetUrl];if(s)n=s.scene.clone(),addAssetSceneToControllerModel(t,n);else{if(!this.gltfLoader)throw Error(`GLTFLoader not set.`);this.gltfLoader.load(t.motionController.assetUrl,e=>{this._assetCache[t.motionController.assetUrl]=e,n=e.scene.clone(),addAssetSceneToControllerModel(t,n)})}}).catch(e=>{console.warn(e)})}),e.addEventListener(`disconnected`,()=>{t.motionController=null,t.remove(n),n=null}),t}},defaultXRPanoramaControllerInitArgs=Object.assign({},omit(defaultPanoramaControllerCustomInitArgs,[`maxLatitude`,`minLatitude`]));function mapPanoResource(e,t){if(!t)return e;let n=e.match(/\d+_[a-z].png/);return e.substring(0,n.index)+t+`/`+e.substring(n.index)}var CONTROLLER_EVNET_DELTA_TIME=300,scratchRaycaster=new three.Raycaster,scratchVector3=new three.Vector3,XRPanoramaController=class e extends PanoramaController{static parseArgs(t){if(t instanceof e)return t;let n=Object.assign(Object.assign({},t),{maxLatitude:Math.PI/2,minLatitude:-Math.PI/2});return super.parseArgs(n)}static initAnimationEndState(e){let t=this.parseArgs(e),n=super.initAnimationEndState(t);return Object.assign(Object.assign({},n),{mode:`XRPanorama`})}constructor(e){super(e),this.xrManager=new XRManager(this.renderer,this.renderer.getContext(),{onSessionStart:e=>{this.emit(`xr.session.start`,createEvent(`xr.session.start`,{session:e,machineType:this.xrManager.machineType}))},onSessionEnd:()=>{this.emit(`xr.session.end`,createEvent(`xr.session.end`,{session:null,machineType:this.xrManager.machineType}))}}),this.xrControllerRay={left:new three.Raycaster,right:new three.Raycaster},this.xrControllerRay.left.params.Points={threshold:.1},this.xrControllerRay.left.firstHitOnly=!0,this.xrControllerRay.left.floorIndex=-1,this.xrControllerRay.right.params.Points={threshold:.1},this.xrControllerRay.right.firstHitOnly=!0,this.xrControllerRay.right.floorIndex=-1,this.gazeRay=null,this.pointerLines={left:new FiveLine,right:new FiveLine},this.pointerLines.left.visible=!1,this.pointerLines.right.visible=!0,this.pointerLines.left.setMaterial({color:new three.Vector3(1,1,1)}),this.pointerLines.left.points.material.depthTest=!1,this.pointerLines.right.setMaterial({color:new three.Vector3(1,1,1)}),this.pointerLines.right.points.material.depthTest=!1,this.controllerWrappers=[new three.Group,new three.Group];let t=this.xrManager.getController(0);this.controllerWrappers[0].add(t);let n=this.xrManager.getController(1);this.controllerWrappers[1].add(n);let r=new XRControllerModelFactory;r.gltfLoader={load(e,t){internalFetcher.ajax(e,{responseType:`arraybuffer`}).then(t=>{var n;return parseGltf(t.body,{resourcePath:e.slice(0,e.lastIndexOf(`/`)+1),search:(n=e.split(`?`)[1])==null?``:n,fetcher:internalFetcher})}).then(e=>t(e))}},(this.xrManager.machineType===`Oculus`||this.xrManager.machineType===`Pico`)&&this.scene.add(this.pointerLines.left,this.pointerLines.right,this.controllerWrappers[0],this.controllerWrappers[1]),this.panoResources={},this.panoResources[this.locationMotion.keyframes[0].key=this.locationMotion.keyframes[1].key=createUuid()]={panoId:panoStringify(this.currentPano),leftPanoPicture:null,position:this.camera.pose.offset.clone(),effect:`fade`,effectEasing:defaultEffectEase,fixCameraTransform:new three.Matrix4},this.parallaxCameraMatrixs=[];let o=AnimationFrameLoop.shared.getContext();if(!o){console.error(`获取session失败,请退出重试`);return}this.on(`xr.session.end`,()=>{this.scene.remove(this.pointerLines.left,this.pointerLines.right)}),this.xrManager.setSession(o),this.on(`xr.session.start`,()=>{let e=this.xrManager.getControllerGrip(0);e.add(r.createControllerModel(e)),this.controllerWrappers[0].add(e);let t=this.xrManager.getControllerGrip(1);t.add(r.createControllerModel(t)),this.controllerWrappers[1].add(t)}),this.xrHandleState={LeftAxesUp:{touchStartTime:0,touchStart:!1},LeftAxesDown:{touchStartTime:0,touchStart:!1},LeftAxesLeft:{touchStartTime:0,touchStart:!1},LeftAxesRight:{touchStartTime:0,touchStart:!1},LeftTrigger:{touchStartTime:0,touchStart:!1},LeftPinch:{touchStartTime:0,touchStart:!1},RightAxesUp:{touchStartTime:0,touchStart:!1},RightAxesDown:{touchStartTime:0,touchStart:!1},RightAxesLeft:{touchStartTime:0,touchStart:!1},RightAxesRight:{touchStartTime:0,touchStart:!1},RightTrigger:{touchStartTime:0,touchStart:!1},RightPinch:{touchStartTime:0,touchStart:!1},Y:{touchStartTime:0,touchStart:!1},X:{touchStartTime:0,touchStart:!1},A:{touchStartTime:0,touchStart:!1},B:{touchStartTime:0,touchStart:!1}},this.xrManager.machineType===`VP`&&this.initHandEvent()}updateConfiguration(e){return super.updateConfiguration(Object.assign(Object.assign({},e),{maxLatitude:Math.PI/2,minLatitude:-Math.PI/2}))}moveToPano(e,t,n){var r,o,s;let c=(r=t.effect)==null?`fade`:r;this.userAction=n,this.stopMomentumMovement();let l=panoStringify(e),u=this.works.getObserver(e);if(!u)throw Error(`Invalid PanoIndex`);let d=getImageSizeFromURL(u.images.up),f=this.imageOptions.size;f===void 0&&u&&d&&(f=Number(d)),f===void 0&&(f=2048);let p=this.imageOptions.transform,m=(e,t)=>mapPanoResource(applyImageURLOptions(e,p,t)),h=Object.assign({key:`pano.${l}`},pick(this.imageOptions,[`format`,`size`,`quality`])),g={right:u.images.work.getURL(u.images.right),left:u.images.work.getURL(u.images.left),up:u.images.work.getURL(u.images.up),down:u.images.work.getURL(u.images.down),front:u.images.work.getURL(u.images.front),back:u.images.work.getURL(u.images.back)},_=`pano:`+jsonHash([g,h,p]);if(this.pendingTextureTask){if(this.pendingTextureTask.hash===_)return;{let t=this.pendingTextureTask.panoId;(o=this.panoMeshes.get(t))==null||o.setProgress(0),this.emit(`pano.texture.abort`,createEvent(`pano.texture.abort`,{error:null,progress:0,meta:null,pano:e}))}}let{pano0:v,pano1:y}=this.modelScene.parameter.resolveValue(),b;if((v==null?void 0:v.map.name)===_?b=v:(y==null?void 0:y.map.name)===_&&(b=y),b){let n={panoId:l,effect:c,effectEasing:(s=t.effectEasing)==null?defaultEffectEase:s,leftPanoPicture:{panoId:b.panoId,map:b.map,mapHistogram:b.mapHistogram,mapSize:b.mapSize,matrix:u.matrix.clone().premultiply(u.work.transform),zoom:1},position:u.position.clone().applyMatrix4(u.work.transform),fixCameraTransform:new three.Matrix4};this.doMoveToPano(e,n,t);return}let S=`move-to-pano-`+l;this.pending.add(S),this.pendingTextureTask={panoId:l,hash:_,onLoad:n=>{var r,o;let s=n.body;if(this.destroyed)s.dispose();else{s.name=_;let n=Array.isArray(s.image)?s.image[0]:s.image,d=(r=n==null?void 0:n.width)==null?2048:r,f=new Histogram().formPixels(getRgbaDataFromCubeTexture(this.renderer,s,!0,sharedHistogramRgbaData).data),p={panoId:l,effect:c,effectEasing:(o=t.effectEasing)==null?defaultEffectEase:o,leftPanoPicture:{panoId:l,map:s,mapSize:d,mapHistogram:new three.Vector4().fromArray(f.toArray()),matrix:u.matrix.clone(),zoom:1},position:u.position.clone(),fixCameraTransform:new three.Matrix4};this.doMoveToPano(e,p,t)}},onError:n=>{let r=Object.assign(Object.assign(Object.assign({},e),{mode:this.mode}),clonePose(this.camera.pose));this.emit(`pano.error`,createEvent(`pano.error`,{error:n,userAction:this.userAction,options:t,prevPano:this.currentPano,progress:0,state:r})),this.emit(`pano.cancel`,createEvent(`pano.cancel`,{error:null,userAction:this.userAction,options:t,prevPano:this.currentPano,progress:0,state:r})),t.moveCancelCallback&&t.moveCancelCallback()}};let C=this.panoMeshes.get(l);C&&C.tap&&C.tap(),this.textureLoader.loadCubeTexture(g,{imageURL:{transform:m,options:h},format:three.RGBFormat,fetcher:getFetcher(this.fiveId,u.work)},void 0,void 0,t=>{var n,r;((n=this.pendingTextureTask)==null?void 0:n.hash)===_&&((r=this.panoMeshes.get(l))==null||r.setProgress(t)),this.emit(`pano.texture.progress`,createEvent(`pano.texture.progress`,{error:null,progress:t,meta:null,pano:e}))},this.renderer).then(t=>{var n,r;this.pending.delete(S),((n=this.pendingTextureTask)==null?void 0:n.hash)===_?(this.pendingTextureTask.onLoad(t),this.pendingTextureTask=void 0,(r=this.panoMeshes.get(l))==null||r.setProgress(0)):t.body.dispose(),this.emit(`pano.texture.success`,createEvent(`pano.texture.success`,{error:null,progress:1,meta:t.meta,pano:e}))}).then(()=>new Promise(e=>{AnimationFrameLoop.shared.add(()=>e(),!0)})).catch(t=>{var n,r;this.pending.delete(S),((n=this.pendingTextureTask)==null?void 0:n.hash)===_&&(this.pendingTextureTask.onError(t),this.pendingTextureTask=void 0,(r=this.panoMeshes.get(l))==null||r.setProgress(0)),this.emit(`pano.texture.error`,createEvent(`pano.texture.error`,{error:t,progress:0,meta:null,pano:e})),this.emit(`error`,t)}),this.emit(`pano.texture.load`,createEvent(`pano.texture.load`,{error:null,progress:0,meta:null,pano:e}))}doMoveToPano(e,t,n={}){var r,o,s,c,l,u,d,f,p,m;let h=now(),g=createUuid();this.panoResources[g]=t;let _=1,v,y,b;if(this.locationMotion.ended){let[e,n]=this.locationMotion.getKeyFrameSegment(h),r=this.locationMotion.value,o=this.panoResourceFromLocationMotionKeyframe(n).position,s=t.position;v=Math.max(o.distanceTo(s),1),y=[{key:n.key,progress:0,value:Object.assign(Object.assign({},r),{count:0})},{key:g,progress:1,value:{distance:0,count:1}}],b=0}else{let[e,n]=this.locationMotion.getKeyFrameSegment(h),r=this.locationMotion.value,o=this.panoResourceFromLocationMotionKeyframe(e).position,s=this.panoResourceFromLocationMotionKeyframe(n).position,c=t.position,l=n.value.count-r.count,u=Math.max(o.distanceTo(s),1)*l;v=u+Math.max(s.distanceTo(c),1),y=[{key:e.key,progress:0,value:Object.assign({},r)},{key:n.key,progress:u/v,value:n.value},{key:g,progress:1,value:{count:n.value.count+1,distance:0}}];let d=this.locationMotionKeyframesLength(this.locationMotion.keyframes),f=this.locationMotionKeyframesLength(y);b=this.locationMotion.getProgressVelocity(h)*d/f}let S=t.effect===`instant`?0:this.calculateMovingDuration(n.duration,t.effect===`fly`||t.effect===`model`?v:0),C={longitude:n.longitude,latitude:n.latitude,fov:n.fov},w=Object.assign(Object.assign({},e),{mode:this.mode,longitude:(r=C.longitude)==null?this.camera.pose.longitude:r,latitude:(o=C.latitude)==null?this.camera.pose.latitude:o,fov:(s=C.fov)==null?this.camera.pose.fov:s,offset:t.position.clone(),distance:0}),T=this.currentPano;if(this.emit(`pano.moveTo`,createEvent(`pano.moveTo`,{options:n,prevPano:T,progress:0,state:w,userAction:this.userAction,error:null})),n.moveStartCallback&&n.moveStartCallback(w),this.videoTexture&&this.videoTexture.image instanceof HTMLVideoElement&&this.videoTexture.image.getAttribute(`src`)&&(this.videoTexture.image.pause(),this.videoTexture.image.removeAttribute(`uuid`),this.videoTexture.image.removeAttribute(`src`),this.videoTexture.image.oncanplay=noop,this.videoTexture.needsUpdate=!0),this.panoVideo.setMaterial(null),t.effect===`fly`||t.effect===`model`)this.cameraMotion.set(C,S).catch(noop);else{let e=coordinatesToVector({longitude:this.cameraMotion.value.longitude,latitude:this.cameraMotion.value.latitude}),n=coordinatesToVector({longitude:(c=C.longitude)==null?this.cameraMotion.value.longitude:c,latitude:(l=C.latitude)==null?this.cameraMotion.value.latitude:l}),r=new three.Object3D;r.lookAt(e);let o=new three.Matrix4().makeRotationFromQuaternion(r.quaternion);r.lookAt(n);let s=new three.Matrix4().makeRotationFromQuaternion(r.quaternion),h=new three.Matrix4().getInverse(o).premultiply(s),g=this.cameraMotion.value.fov,_=(u=C.fov)==null?this.cameraMotion.value.fov:u,v=1;t.effect===`zoomin`?v=1.5:t.effect===`zoomout`&&(v=.4);let b=_*v;for(let e=0;e<y.length-1;e++){let t=y[e].key;if(t){let e=this.panoResources[t];e&&(e.fixCameraTransform.copy(h),e.leftPanoPicture&&(e.leftPanoPicture.zoom=Math.tan(b/2/180*Math.PI)/Math.tan(g/2/180*Math.PI)))}}this.cameraMotion.setKeyframes([{progress:0,value:{longitude:this.cameraMotion.value.longitude,latitude:this.cameraMotion.value.latitude,fov:this.cameraMotion.value.fov}},{progress:0,value:{longitude:(d=C.longitude)==null?this.cameraMotion.value.longitude:d,latitude:(f=C.latitude)==null?this.cameraMotion.value.latitude:f,fov:b}},{progress:1,value:{longitude:(p=C.longitude)==null?this.cameraMotion.value.longitude:p,latitude:(m=C.latitude)==null?this.cameraMotion.value.latitude:m,fov:_}}],S).catch(noop)}this.locationMotion.setKeyframes(y,S,b).then(()=>{for(let e of this.modelScene.children)e instanceof Model&&e.show();let t=Object.assign(Object.assign({},e),{mode:this.mode,longitude:this.camera.pose.longitude,latitude:this.camera.pose.latitude,fov:this.camera.pose.fov,offset:this.camera.pose.offset.clone(),distance:0});this.emit(`pano.arrived`,createEvent(`pano.arrived`,{options:n,prevPano:T,progress:1,state:t,userAction:this.userAction,error:null})),n.moveEndCallback&&n.moveEndCallback(t);let r=this.works.getObserver(this.currentPano);if(r&&r.images.video&&this.videoTexture&&this.videoTexture.image instanceof HTMLVideoElement){let e={map:this.videoTexture,size:r.images.video.size.clone(),matrix:r.images.video.matrix.clone(),panoMatrix:r.matrix.clone().premultiply(r.work.transform),alpha:1},t=createUuid(),n=this.videoTexture.image;n.setAttribute(`uuid`,t),canplayVideo().then(o=>{o&&r.images.video&&n.getAttribute(`uuid`)===t&&(n.oncanplay=()=>{n.oncanplay=noop,n.play()},n.ontimeupdate=()=>{n.currentTime>.5&&(n.ontimeupdate=noop,this.panoVideo.setMaterial(e))},n.src=r.images.video.source)}).catch((()=>{n.removeAttribute(`uuid`)}))}},()=>{this.emit(`pano.cancel`,createEvent(`pano.cancel`,{options:n,prevPano:T,progress:0,state:w,userAction:this.userAction,error:null})),n.moveCancelCallback&&n.moveCancelCallback()})}checkSelectedPano(e){var t;this.stopMomentumMovement(),this.camera.getDirection(new three.Vector3).setY(0);let n=null,r=this.works.getObserver(this.currentPano);if(!r)return null;let o=r.work.observers,s=r.accessibleNodes.filter(e=>{if(e===this.currentPano.panoIndex&&r.work.workCode===this.currentPano.workCode)return!1;let t=o[e];return!t||scratchVector3.copy(t.position).applyMatrix4(t.work.transform).distanceTo(this.camera.position)>this.maxAccessibleDistance?!1:t.loadable||t.active}),[c]=this.modelScene.intersectRaycaster(e);if(c){let[e,r]=arrayMin(s,e=>{let t=o[e];return t?scratchVector3.copy(t.standingPosition).applyMatrix4(t.work.transform).distanceTo(c.point):1/0},!0);typeof e==`number`&&r<this.panoTapTriggerRadius&&(n=(t=o[e])==null?null:t)}if(isNil(n)){let t=this.getForwardObserverOrNot(this.xrManager.cameraVR,e);t&&(n=t)}for(let e of this.locationMotion.keyframes){let t=this.panoResourceFromLocationMotionKeyframe(e);if(!(e.progress<this.locationMotion.progress)&&n){let e=panoStringify({panoIndex:n.panoIndex,workCode:n.work.workCode});if(t.panoId===e){n=null;break}}}if(isNil(n))return this.locationMotion.ended===!0&&this.cameraBounce(),null;if(!n.active){let e=panoStringify({panoIndex:n.panoIndex,workCode:n.work.workCode}),t=this.panoMeshes.get(e);t&&(t.setDisabled(!1),t.setLoading(!0))}let l={workCode:n.work.workCode,panoIndex:n.panoIndex,mode:this.mode,longitude:this.camera.pose.longitude,latitude:this.camera.pose.latitude,fov:this.camera.pose.fov,distance:0,offset:n?n.position.clone():new three.Vector3};return this.emit(`pano.select`,createEvent(`pano.select`,{prevPano:this.currentPano,state:l,userAction:!0,options:{},progress:0,error:null})),n&&n.active?(this.emit(`pano.request`,createEvent(`pano.request`,{userAction:!0,prevPano:this.currentPano,progress:0,state:l,options:{},error:null})),{workCode:n.work.workCode,panoIndex:n.panoIndex}):null}destroy(){super.destroy()}isReady(){return!1}updateCamera(e,t,n){return Promise.resolve()}updateCameraWithKeyframes(e,t,n){return Promise.resolve()}updateTime(e,t,...n){var r,o,s,c,l,u,d,f,p;this.userAction=!0;let m={},h={},g=this.camera.getDirection(new three.Vector3),_=this.locationMotion.keyframes[0],v=this.locationMotion.keyframes[this.locationMotion.keyframes.length-1],[y,b]=this.locationMotion.getKeyFrameSegment(e),S=this.panoResourceFromLocationMotionKeyframe(y),C=this.panoResourceFromLocationMotionKeyframe(b),w=this.panoResourceFromLocationMotionKeyframe(_),T=this.panoResourceFromLocationMotionKeyframe(v),E=!1;if(this.cameraMotion.ended===!1&&(this.cameraMotion.update(e),h.fov=this.cameraMotion.value.fov),this.modelAlphaMotion.ended===!1&&(this.modelAlphaMotion.update(e),m.modelAlpha=this.modelAlphaMotion.value.modelAlpha),this.perspToOrthoMotion.ended===!1&&(this.perspToOrthoMotion.update(e),this.camera.perspToOrtho.setScalar(clamp$1(this.perspToOrthoMotion.value.perspToOrtho,0,1))),this.locationMotion.ended===!1){this.locationMotion.update(e);let t=this.locationMotion.value.count-b.value.count+1,n=new three.Vector3().copy(S.position),s=new three.Vector3().copy(C.position);if(m.progress=t,t>=.01&&t<=.99&&(m.progress=clamp$1(C.effectEasing(t),.01,.99)),C.leftPanoPicture&&(t<1?S.leftPanoPicture&&(m.pano0=S.leftPanoPicture):m.pano0=C.leftPanoPicture,m.pano1=C.leftPanoPicture),C.effect===`montage`?m.transition=`BLACK`:C.effect===`spread`?m.transition=`SPREAD`:m.transition=`FADE`,C.effect===`zoomin`||C.effect===`zoomout`?m.progress=Math.pow(t,3):C.effect===`model`&&this.camera.pose.distance<.01&&(m.modelAlpha=1-Math.pow(clamp$1(Math.abs(t-.5)*2,0,1),4)),t<1&&C.effect!==`fly`){if(m.pano0&&S.leftPanoPicture){let e={panoId:m.pano0.panoId,map:m.pano0.map,mapHistogram:m.pano0.mapHistogram,mapSize:m.pano0.mapSize,zoom:m.pano0.zoom,matrix:S.leftPanoPicture.matrix.clone().setPosition(C.position)},t=this.panoPictureObserverMap.get(m.pano0);t&&this.panoPictureObserverMap.set(e,t),m.pano0=e}n.copy(s),E=!0}h.distance=this.locationMotion.value.distance,h.offset=new three.Vector3(n.x+(s.x-n.x)*t,n.y+(s.y-n.y)*t,n.z+(s.z-n.z)*t);let c=[],l=[];for(let e of this.locationMotion.keyframes){let{key:t,progress:n}=e;t!==void 0&&(c.push(t),n>this.locationMotion.progress&&l.push(t))}for(let e of Object.keys(this.panoResources)){if(l.indexOf(e)>=0)continue;let t=this.panoResources[e];if(t.leftPanoPicture){let e=t.leftPanoPicture.map;if(e){if(e===((r=m.pano0)==null?void 0:r.map)||e===((o=m.pano1)==null?void 0:o.map))continue;e.dispose(),t.leftPanoPicture=null}}c.indexOf(e)>=0||delete this.panoResources[e]}let u=panoParse(C.panoId);u!==this.currentPano&&(this.currentPano=u,this.accessibleObserverFloorCheckCount=0),this.emit(`pano.moving`,createEvent(`pano.moving`,{userAction:this.userAction,prevPano:panoParse(w.panoId),state:Object.assign(Object.assign(Object.assign(Object.assign({},panoParse(T.panoId)),{mode:this.mode}),clonePose(this.camera.pose)),h),options:{},progress:this.locationMotion.progress,error:null}))}this.camera.setFromPose(h),this.xrManager.cameraVR.projectionMatrix.copy(this.camera.projectionMatrix),this.xrManager.cameraVR.projectionMatrixInverse.copy(this.camera.projectionMatrixInverse),this.xrManager.cameraVR.matrix.copy(this.camera.matrix),this.xrManager.cameraVR.position.copy(this.camera.position),this.xrManager.cameraVR.quaternion.copy(this.camera.quaternion),this.xrManager.cameraVR.scale.copy(this.camera.scale),this.xrManager.cameraVR.matrixAutoUpdate=!1,this.xrManager.cameraVR.matrixWorld.copy(this.camera.matrixWorld);let[D,O]=n,k=new three.Vector3(0,0,0),A=new three.Vector2().copy(this.camera.resolution);if(O&&this.xrManager.session&&this.xrManager.referenceSpace&&this.xrManager.session.renderState.baseLayer){let n=this.xrManager.cameraVR,r=this.xrManager.referenceSpace,o=this.xrManager.session.renderState.baseLayer,u=O.getViewerPose(r),d=(s=u==null?void 0:u.views)==null?[]:s;for(let e=0;e<d.length;e++){let t=d[e],r=n.cameras[e],s=o.getViewport(t);s&&(r.projectionMatrix.fromArray(t.projectionMatrix),r.projectionMatrixInverse.getInverse(r.projectionMatrix),r.matrix.fromArray(t.transform.matrix),r.matrix.setPosition(this.camera.position),r.matrix.decompose(r.position,r.quaternion,r.scale),r.matrixWorld.copy(r.matrix),r.matrixWorldInverse.getInverse(r.matrixWorld),r.matrixAutoUpdate=!1,k.copy(r.position),r.viewport.set(s.x,s.y,s.width,s.height),A.set(s.width,s.height))}if(this.xrManager.setProjectionFromUnion(this.xrManager.cameraVR,this.xrManager.cameraL,this.xrManager.cameraR),this.camera.quaternion.copy(this.xrManager.cameraVR.quaternion),this.camera.scale.copy(this.xrManager.cameraVR.scale),this.camera.matrix.compose(this.camera.position,this.camera.quaternion,this.camera.scale),this.camera.computePose((c=h.distance)==null?this.camera.pose.distance:c),this.xrManager.session.inputSources){for(let e=0;e<this.xrManager.session.inputSources.length;e++)if(this.xrManager.session.inputSources[e]&&this.xrManager.session.inputSources[e].targetRayMode===`transient-pointer`){let t=O.getPose(this.xrManager.session.inputSources[e].targetRaySpace,r);if(t){let e=t.transform.orientation,n=new three.Quaternion(e.x,e.y,e.z,e.w),r=new three.Vector3(0,0,-1).applyQuaternion(n);this.gazeRay=new three.Raycaster(this.camera.position,r)}}}if(this.xrManager.machineType===`Oculus`||this.xrManager.machineType===`Pico`){let n=this.xrManager.session.inputSources;for(let e=0;e<n.length;e++){let t=this.xrManager.controllers[e],o=n[e];if(!o)continue;t&&t.update(o,O,r);let s=this.xrManager.getController(e),c=new three.Vector3(0,1.2,0),u=s.position.clone().add(k).sub(c);o.handedness===`left`?this.xrControllerRay.left.set(u,new three.Vector3(0,0,-1).applyEuler(s.rotation)):o.handedness===`right`&&this.xrControllerRay.right.set(u,new three.Vector3(0,0,-1).applyEuler(s.rotation)),this.controllerWrappers[e].position.copy(new three.Vector3(0,0,0).add(k).sub(c));let d=this.modelScene.intersectRaycaster(this.xrControllerRay.right);if(d.length===0){let e=this.works.getResolvedObserver(this.currentPano);d=this.xrControllerRay.right.intersectObject(this.modelScene.boundingMesh,!0).map(t=>{var n;let r=(n=e==null?void 0:e.floorIndex)==null?0:n;return Object.assign({floorIndex:r,floor:r},t)})}if(d.length>=1&&d[0].face)if(o.handedness===`right`){let e=this.xrControllerRay.right.intersectObject(this.xrCustomObjectsScene,!0),t=d[0].face.normal,n=t.clone(),r=d[0].point.clone();this.intersectMesh.position.copy(r);let o=r.clone().add(n);if(this.intersectMesh.lookAt(o),Math.abs(t.y)>.99){let e=this.camera.position.clone().sub(r);this.intersectMesh.rotation.z=-Math.atan2(e.z,e.x)}this.intersectMesh.visible=!0,this.needsRender=!0,e.length>0?(this.pointerLines.right.setPoints(u,e[0].point),this.pointerLines.right.points.visible=!0,this.intersectMesh.visible=!1):(this.pointerLines.right.points.visible=!1,this.pointerLines.right.setPoints(u,d[0].point));let s=d[0],c=createEvent(`intersect.update`,{raycaster:(l=this.xrControllerRay.right)==null?null:l,intersection:s==null?null:s,object:this.intersectMesh});if(this.emit(`intersect.update`,c),c.defaultPrevented){this.hideIntersectMesh();return}}else this.pointerLines.left.setPoints(u,d[0].point)}this.updateControllerHelper(n,e,t)}}else O||console.error(`xrFrame丢失,请重试`),this.xrManager.session||console.error(`session丢失,请重试`),this.xrManager.session&&!this.xrManager.session.renderState.baseLayer&&console.error(`no layer found`);isEmptyObject(m)===!1&&this.modelScene.parameter.set(m),this.emit(`camera.update`,createEvent(`camera.update`,{userAction:this.userAction,state:Object.assign(Object.assign(Object.assign({},this.currentPano),{mode:this.mode}),clonePose(this.camera.pose))}));let j=this.works.getResolvedObserver(this.currentPano),M=this.locationMotion.ended?this.getForwardObserverOrNot(this.xrManager.cameraVR):null,N=this.works.getObserver(S.panoId),P=this.works.getObserver(C.panoId);if(this.adjustPanoCircleMeshPositionBasedOnModel&&this.helper.visible&&j){let e=[],t=j.work.observers;for(let n of j.accessibleNodes){let r=t[n];r&&e.push(r)}let n=new Map;if(e.sort((e,t)=>{let r=n.get(e);r===void 0&&(r=e.standingPosition.distanceTo(j.standingPosition),n.set(e,r));let o=n.get(e);return o===void 0&&(o=t.standingPosition.distanceTo(j.standingPosition),n.set(t,o)),r-o}),e.length){this.accessibleObserverFloorCheckCount%=e.length;let t=e[this.accessibleObserverFloorCheckCount],n=this.modelScene.models.find(e=>e.work===(t==null?void 0:t.work));if(t&&n&&n.visible){let e=.3,r=.05,o=.005,s=t.standingPosition.clone().applyMatrix4(t.work.transform),c=panoStringify({panoIndex:t.panoIndex,workCode:t.work.workCode}),l=adjustPanoCircleMeshVectors.map(t=>{scratchRaycaster.ray.origin.copy(s),scratchRaycaster.ray.origin.add(scratchVector3.copy(t).setY(e)),scratchRaycaster.ray.direction.set(0,-1,0),scratchRaycaster.firstHitOnly=!0,scratchRaycaster.floorIndex=-1;let[r]=n.intersectRaycaster(scratchRaycaster);return r&&r.distance-o<=e?new three.Vector3().copy(s).setY(r.point.y+o):s});l.sort((e,t)=>t.y-e.y);let u=l[Math.floor(l.length/2)],[d]=l.filter(e=>e.distanceTo(u)<=.05);if(d){let e=new three.Vector4(s.x,s.y,s.z,d.y-s.y),t=this.adjustPanoCircleMeshPositionFix.get(c);t&&!e.equals(t)&&(this.needsRender=!0),this.adjustPanoCircleMeshPositionFix.set(c,e)}}this.accessibleObserverFloorCheckCount++}}let F=new Map;if(N)for(let e of N.accessibleNodes){let t=N.work.observers[e];if(t){let e=panoStringify({panoIndex:t.panoIndex,workCode:t.work.workCode});F.set(e,t)}}if(P)for(let e of P.accessibleNodes){let t=P.work.observers[e];if(t){let e=panoStringify({panoIndex:t.panoIndex,workCode:t.work.workCode});F.set(e,t)}}if(this.panoMeshes.forEach((e,t)=>{F.get(t)?F.delete(t):(this.helper.remove(e),e.dispose(),this.panoMeshes.delete(t))}),F.forEach((e,t)=>{let n=this.panoCircleMeshCreator(e,{aerialObserverMinHeight:this.aerialObserverMinHeight});this.panoMeshes.set(t,n),this.helper.add(n),F.delete(t)}),this.panoMeshes.forEach((e,t)=>{let n=this.works.getObserver(t);if(n){let r=n.position.distanceTo(n.standingPosition)>this.aerialObserverMinHeight;if(r)e.position.copy(n.position).applyMatrix4(n.work.transform),e.scale.setScalar(18);else{e.position.copy(n.standingPosition).applyMatrix4(n.work.transform);let t=this.adjustPanoCircleMeshPositionFix.get(n.panoId);t&&(scratchVector3.set(t.x,t.y,t.z),scratchVector3.equals(e.position)&&(e.position.y+=t.w)),e.scale.setScalar(1.2)}let o=this.camera.position.clone().setY(e.position.y),s=new three.Vector3().copy(e.position).sub(o).normalize();if(t===panoStringify(this.currentPano)){let t=clamp$1((.5-o.distanceTo(e.position))/.5,0,1);s.multiplyScalar(1-t).add(g.clone().multiplyScalar(t))}if(s.length()>0){let t=r?-Math.PI/2:0,n=Math.atan2(s.x,s.z);e.quaternion.setFromEuler(new three.Euler(t,n,0,`YXZ`))}}else e.visible=!1}),this.camera.pose.distance>.1||E)this.panoMeshes.forEach(n=>{n.setOpacity(0),n.setCurrent(!1),n.updateTime&&n.updateTime(e,t),n.visible=!1});else if(j){let n=j.work.observers,[,r]=arrayMin(j.accessibleNodes,e=>{let t=n[e];return!t||!t.active?1/0:j.standingPosition.distanceTo(t.standingPosition)},!0);r=clamp$1(r,2.5,1/0);let o=j.accessibleNodes.concat(j.panoIndex).map(e=>panoStringify({panoIndex:e,workCode:j.work.workCode}));this.panoMeshes.forEach((n,s)=>{let c=this.works.getObserver(s),l=!1,u=1;if(o.indexOf(s)===-1)l=!1,u=0;else if(!c)l=!1,u=0;else if(!c.loadable&&!c.active)l=!1,u=0;else{let e=n.position.clone().project(this.camera);l=Math.abs(e.x)<1&&Math.abs(e.y)<1&&Math.abs(e.z)<1&&!n.loading&&n.progress===0&&M!==null&&panoStringify({panoIndex:M.panoIndex,workCode:M.work.workCode})===s;let t=n.position.clone().setY(this.camera.position.y).distanceTo(this.camera.position);u=t<.01?0:clamp$1(r/t,.1,.85)}c&&c===P&&c.position.distanceTo(c.standingPosition)>this.aerialObserverMinHeight&&n.position.distanceTo(this.camera.position)<35&&(u=0),this.modelScene.parameter.resolveValue().modelAlpha>0&&(u=0),n.setCurrent(l),n.setOpacity(u),n.updateTime&&n.updateTime(e,t)})}{let e=(u=this.modelScene.parameter.progress)==null?1:u,t=Math.round(e),n=this.modelScene.parameter.pano0,r=this.modelScene.parameter.pano1,o=t===0?n:r,s;if(o&&(s=this.works.getObserver(o.panoId),s||(s=this.panoPictureObserverMap.get(o))),this.tiling.appearDuration=this.tileAppearDuration,this.tiling.maxRequest=e<(canUseNativeImageBitmap()?.6:.99)?0:this.tileMaxRequest,this.tiling.imageOptions=this.imageOptions,!s||!o||this.tileLevelForFov===!1||this.camera.perspToOrtho.x>0){this.tiling.setObserver(null);let e={renderer:this.renderer,resolution:A,pixelRatio:1,time:this.camera.time,cameraMatrix:this.xrManager.cameraVR.matrixWorld,cameraProjectionMatrix:this.xrManager.cameraVR.projectionMatrix,panoMap:null,panoMatrix:new three.Matrix4,panoZoom:1,minLevel:0,level:0};this.tiling.update(e),this.modelScene.parameter.set(`refinedScreen`,null)}else{let e=getImageSizeLevel(o.mapSize)+1,c=4;this.tiling.setObserver(s);let l={renderer:this.renderer,resolution:A,pixelRatio:1,time:this.camera.time,cameraMatrix:this.xrManager.cameraVR.matrixWorld,cameraProjectionMatrix:this.xrManager.cameraVR.projectionMatrix,panoMap:o.map,panoMatrix:o.matrix,panoZoom:o.zoom,minLevel:e,level:4},u=this.tiling.update(l),f={map:this.tiling.renderTarget.texture,matrixInverse:this.tiling.camera.matrixWorldInverse,projectionMatrix:this.tiling.camera.projectionMatrix,pano:t,opacity:(n==null?void 0:n.panoId)===(r==null?void 0:r.panoId)?1:easeInQuart(Math.abs(((d=this.modelScene.parameter.progress)==null?0:d)-.5)*2)},p=this.modelScene.parameter.refinedScreen;(u||f.pano!==(p==null?void 0:p.pano)||f.opacity!==(p==null?void 0:p.opacity))&&this.modelScene.parameter.set(`refinedScreen`,f)}}if(this.panoVideo.object.position.copy(this.camera.position),this.panoVideo.updateTime(e),this.intersectMesh&&this.intersectMesh.parent&&j&&j.position.y-j.standingPosition.y>10){let e=clamp$1(this.camera.position.distanceTo(this.intersectMesh.position)*(2*Math.tan(.5*this.camera.fov/180*Math.PI))/5,.5);this.intersectMesh.scale.setScalar(e)}else this.intersectMesh.scale.setScalar(1);{let e=C.effect,{pano0:t,pano1:n}=this.modelScene.parameter;if(t&&n&&t!==n&&(e===`fly`||e===`model`)&&this.flyEffectUseDepthBuffer){if(((f=this.modelScene.parameter.pano0Depth)==null?void 0:f.panoId)!==t.panoId||((p=this.modelScene.parameter.pano1Depth)==null?void 0:p.panoId)!==n.panoId){let e=500,r=512;this.pano0DepthCubeRenderTarget?this.pano0DepthCubeRenderTarget.width!==512&&this.pano0DepthCubeRenderTarget.setSize(512,512):this.pano0DepthCubeRenderTarget=new three.WebGLCubeRenderTarget(512,{minFilter:three.NearestFilter,magFilter:three.NearestFilter,generateMipmaps:!1}),this.pano1DepthCubeRenderTarget?this.pano1DepthCubeRenderTarget.width!==512&&this.pano1DepthCubeRenderTarget.setSize(512,512):this.pano1DepthCubeRenderTarget=new three.WebGLCubeRenderTarget(512,{minFilter:three.NearestFilter,magFilter:three.NearestFilter,generateMipmaps:!1});let o=new three.CubeCamera(this.camera.near,this.camera.far,this.pano0DepthCubeRenderTarget);o.matrix.copy(t.matrix),o.matrixWorld.copy(o.matrix),o.matrixAutoUpdate=!1,renderDepthCube(this.renderer,this.modelScene,o,500);let s=new three.CubeCamera(this.camera.near,this.camera.far,this.pano1DepthCubeRenderTarget);s.matrix.copy(n.matrix),s.matrixWorld.copy(s.matrix),s.matrixAutoUpdate=!1,renderDepthCube(this.renderer,this.modelScene,s,500),this.modelScene.parameter.set({pano0Depth:{panoId:t.panoId,map:this.pano0DepthCubeRenderTarget.texture,mapSize:this.pano0DepthCubeRenderTarget.width,maxDepth:500},pano1Depth:{panoId:n.panoId,map:this.pano1DepthCubeRenderTarget.texture,mapSize:this.pano1DepthCubeRenderTarget.width,maxDepth:500}})}}else this.modelScene.parameter.set({pano0Depth:null,pano1Depth:null}),this.flyEffectUseDepthBuffer||(this.pano0DepthCubeRenderTarget&&(this.pano0DepthCubeRenderTarget.dispose(),this.pano0DepthCubeRenderTarget=void 0),this.pano1DepthCubeRenderTarget&&(this.pano1DepthCubeRenderTarget.dispose(),this.pano1DepthCubeRenderTarget=void 0))}}render(){if(this.xrManager.session&&this.xrManager.session.renderState.baseLayer){let e=this.xrManager.session.renderState.baseLayer;return this.renderer.setRenderTarget(null),this.renderer.setScissorTest(!1),this.renderer.setFramebuffer(e.framebuffer),this.renderer.render(this.scene,this.xrManager.cameraVR),this.renderer.setFramebuffer(null),!0}return!1}onPanGesture(){}onTapGesture(){}onPinchGesture(){}onMouseMove(){}onMouseOut(){}panoResourceFromLocationMotionKeyframe(e){return this.panoResources[e.key]}updateControllerHelper(e,t,n){let r=this.xrControllerRay.left,o=this.xrControllerRay.right;if(!e||e.length===0)return;let s={buttons:{X:!1,Y:!1,LeftTrigger:!1,LeftPinch:!1,A:!1,B:!1,RightTrigger:!1,RightPinch:!1}};for(let c=0;c<e.length;c++){let l=e[c].handedness,u=e[c].gamepad;switch(l){case`left`:u.axes&&(this.emitHandleEvent(u.axes[2]===-1,`LeftAxesLeft`,t),this.emitHandleEvent(u.axes[2]===1,`LeftAxesRight`,t),this.emitHandleEvent(u.axes[3]===-1,`LeftAxesUp`,t),this.emitHandleEvent(u.axes[3]===1,`LeftAxesDown`,t)),u!=null&&u.buttons&&(u.buttons[4]&&this.emitHandleEvent(u.buttons[4].pressed,`X`,t),u.buttons[5]&&this.emitHandleEvent(u.buttons[5].pressed,`Y`,t),u.buttons[0]&&this.emitHandleEvent(u.buttons[0].pressed,`LeftTrigger`,t),u.buttons[1]&&this.emitHandleEvent(u.buttons[1].pressed,`LeftPinch`,t));let e={raycaster:r,axes:{up:u.axes&&u.axes[3]<0?Math.abs(u.axes[3]):0,down:u.axes&&u.axes[3]<0?0:Math.abs(u.axes[3]),left:u.axes&&u.axes[2]<0?Math.abs(u.axes[2]):0,right:u.axes&&u.axes[2]<0?0:Math.abs(u.axes[2])},deltaTime:n};s.buttons.X=u.buttons&&u.buttons[4]?u.buttons[4].pressed:!1,s.buttons.Y=u.buttons&&u.buttons[5]?u==null?void 0:u.buttons[5].pressed:!1,s.buttons.LeftTrigger=u.buttons&&u.buttons[0]?u==null?void 0:u.buttons[0].pressed:!1,s.buttons.LeftPinch=u.buttons&&u.buttons[1]?u==null?void 0:u.buttons[1].pressed:!1,s.left=e;break;case`right`:u.axes&&(this.emitHandleEvent(u.axes[2]===-1,`RightAxesLeft`,t),this.emitHandleEvent(u.axes[2]===1,`RightAxesRight`,t),this.emitHandleEvent(u.axes[3]===-1,`RightAxesUp`,t),this.emitHandleEvent(u.axes[3]===1,`RightAxesDown`,t)),u.buttons&&(u.buttons[4]&&this.emitHandleEvent(u.buttons[4].pressed,`A`,t),u.buttons[5]&&this.emitHandleEvent(u.buttons[5].pressed,`B`,t),u.buttons[0]&&this.emitHandleEvent(u.buttons[0].pressed,`RightTrigger`,t),u.buttons[1]&&this.emitHandleEvent(u.buttons[1].pressed,`RightPinch`,t)),s.right={raycaster:o,axes:{up:u.axes&&u.axes[3]<0?Math.abs(u.axes[3]):0,down:u.axes&&u.axes[3]<0?0:Math.abs(u.axes[3]),left:u.axes&&u.axes[2]<0?Math.abs(u.axes[2]):0,right:u.axes&&u.axes[2]<0?0:Math.abs(u.axes[2])},deltaTime:n},s.buttons.A=u.buttons&&u.buttons[4]?u==null?void 0:u.buttons[4].pressed:!1,s.buttons.B=u.buttons&&u.buttons[5]?u==null?void 0:u.buttons[5].pressed:!1,s.buttons.RightTrigger=u.buttons&&u.buttons[0]?u==null?void 0:u.buttons[0].pressed:!1,s.buttons.RightPinch=u.buttons&&u.buttons[1]?u==null?void 0:u.buttons[1].pressed:!1;break;default:break}}this.emit(`xr.controller.update`,createEvent(`xr.controller.update`,s))}emitHandleEvent(e,t,n){let r=this.xrControllerRay.left,o=this.xrControllerRay.right;if(e)this.xrHandleState[t].touchStart===!1?(this.xrHandleState[t].touchStartTime=n,this.xrHandleState[t].touchStart=!0,this.emit(`xr.gesture.buttonDown`,createEvent(`xr.gesture.buttonDown`,{session:this.xrManager.session,machineType:this.xrManager.machineType,buttons:t,isFinal:!1,isFirst:!0,controllers:{raycaster:{leftRay:r,rightRay:o}}}))):n-this.xrHandleState[t].touchStartTime>CONTROLLER_EVNET_DELTA_TIME&&this.emit(`xr.gesture.press`,createEvent(`xr.gesture.tap`,{session:this.xrManager.session,machineType:this.xrManager.machineType,buttons:t,isFinal:!0,isFirst:!0,controllers:{raycaster:{leftRay:r,rightRay:o}}}));else if(this.xrHandleState[t].touchStart===!0){if(this.emit(`xr.gesture.buttonUp`,createEvent(`xr.gesture.buttonUp`,{session:this.xrManager.session,machineType:this.xrManager.machineType,buttons:t,isFinal:!0,isFirst:!1,controllers:{raycaster:{leftRay:r,rightRay:o}}})),n-this.xrHandleState[t].touchStartTime<=CONTROLLER_EVNET_DELTA_TIME){let e=createEvent(`xr.gesture.tap`,{session:this.xrManager.session,machineType:this.xrManager.machineType,buttons:t,isFinal:!0,isFirst:!1,controllers:{raycaster:{leftRay:r,rightRay:o}}});!this.emit(`xr.gesture.tap`,e)&&!e.defaultPrevented&&t===`RightTrigger`&&this.checkSelectedPano(this.xrControllerRay.right)}this.xrHandleState[t].touchStart=!1,this.xrHandleState[t].touchStartTime=0}}initHandEvent(){if(!this.xrManager.session)throw Error(`初始化失败`);this.xrManager.session.addEventListener(`select`,e=>{this.gazeRay&&this.checkSelectedPano(this.gazeRay)})}},Controllers={Floorplan:FloorplanController,Topview:TopviewController,Panorama:PanoramaController,VRPanorama:VRPanoramaController,Model:ModelController,Mapview:MapviewController,XRPanorama:XRPanoramaController},controllersDefaultInitArgs={Floorplan:defaultFloorplanControllerCustomInitArgs,Topview:defaultTopviewControllerCustomInitArgs,Panorama:defaultPanoramaControllerCustomInitArgs,VRPanorama:defaultVRPanoramaControllerCustomInitArgs,Model:defaultModelControllerCustomInitArgs,Mapview:defaultMapviewControllerCustomInitArgs,XRPanorama:defaultXRPanoramaControllerInitArgs},PROXY_CONTROLLER_EVENT_NAMES=`gesture.pan,gesture.tap,gesture.dbltap,gesture.press,gesture.pinch,gesture.mousewheel,gesture.mousemove,gesture.momentum,gesture.fire,initAnimation.start,initAnimation.end,camera.update,intersect.update,pano.select,pano.moveTo,pano.moving,pano.arrived,pano.cancel,pano.error,pano.texture.load,pano.texture.progress,pano.texture.success,pano.texture.error,pano.texture.abort,xr.session.start,xr.session.end,xr.gesture.tap,xr.gesture.press,xr.gesture.buttonUp,xr.gesture.buttonDown,xr.controller.update`.split(`,`);function initLegacyEvent(e){e.on(`initAnimation.start`,t=>{e.emit(`initAnimationWillStart`,t.state.panoIndex,t.state,t.userAction)}),e.on(`initAnimation.end`,t=>{e.emit(`initAnimationEnded`,t.state.panoIndex,t.state,t.userAction)}),e.on(`gesture.pan`,t=>{let n=!1;n=e.emit(`wantsGesture`,`pan`,t.pointers,t.isFinal),n&&t.preventDefault(),n=e.emit(`wantsPanGesture`,t.state,t.isFinal),n&&t.preventDefault(),t.defaultPrevented||(e.emit(`gesture`,`pan`,t.pointers,t.isFinal),e.emit(`panGesture`,t.state,t.isFinal))}),e.on(`gesture.tap`,t=>{let n=!1;n=e.emit(`wantsGesture`,`tap`,t.pointers,t.isFinal),n&&t.preventDefault(),n=e.emit(`wantsTapGesture`,t.center.raycaster,t.center.coords,t.isFinal),n&&t.preventDefault(),t.defaultPrevented||(e.emit(`gesture`,`tap`,t.pointers,t.isFinal),e.emit(`tapGesture`,t.center.raycaster,t.center.coords,t.isFinal))}),e.on(`gesture.dbltap`,t=>{let n=!1;n=e.emit(`wantsGesture`,`dbltap`,t.pointers,t.isFinal),n&&t.preventDefault(),n=e.emit(`wantsDblTapGesture`,t.center.raycaster,t.center.coords,t.isFinal),n&&t.preventDefault(),t.defaultPrevented||(e.emit(`gesture`,`dbltap`,t.pointers,t.isFinal),e.emit(`dblTapGesture`,t.center.raycaster,t.center.coords,t.isFinal))}),e.on(`gesture.press`,t=>{let n=!1;n=e.emit(`wantsGesture`,`press`,t.pointers,t.isFinal),n&&t.preventDefault(),n=e.emit(`wantsPressGesture`,t.center.raycaster,t.center.coords,t.center.delta,t.isFinal),n&&t.preventDefault(),t.defaultPrevented||(e.emit(`gesture`,`press`,t.pointers,t.isFinal),e.emit(`pressGesture`,t.center.raycaster,t.center.coords,t.center.delta,t.isFinal))}),e.on(`gesture.pinch`,t=>{let n=!1;n=e.emit(`wantsGesture`,`pinch`,t.pointers,t.isFinal),n&&t.preventDefault(),n=e.emit(`wantsPinchGesture`,t.scale,t.state.fov,t.isFinal),n&&t.preventDefault(),t.defaultPrevented||(e.emit(`gesture`,`pinch`,t.pointers,t.isFinal),e.emit(`pinchGesture`,t.scale,t.state.fov,t.isFinal))}),e.on(`gesture.mousewheel`,t=>{let n=!1;n=e.emit(`wantsGesture`,`mouseWheel`,t.pointers,t.isFinal),n&&t.preventDefault(),n=e.emit(`wantsMouseWheel`,t.center.delta,t.state.fov,t.isFinal),n&&t.preventDefault(),t.defaultPrevented||(e.emit(`gesture`,`mouseWheel`,t.pointers,t.isFinal),e.emit(`mouseWheel`,t.center.delta,t.state.fov,t.isFinal))}),e.on(`gesture.mousemove`,t=>{let n=!1;n=e.emit(`wantsGesture`,`mouseMove`,t.pointers,t.isFinal),n&&t.preventDefault(),t.defaultPrevented||(e.emit(`gesture`,`mouseMove`,t.pointers,t.isFinal),n=e.emit(`wantsChangeCameraFov`,t.state.fov),n&&t.preventDefault())}),e.on(`gesture.momentum`,t=>{let n=!1;n=e.emit(`wantsInteriaPan`,t.state),n&&t.preventDefault(),t.defaultPrevented||e.emit(`interiaPan`,t.state,t.isFinal)}),e.on(`camera.update`,t=>{e.emit(`cameraFovUpdate`,t.state.fov,t.userAction),e.emit(`cameraDirectionUpdate`,t.state,t.userAction);let n=coordinatesToVector(t.state);n.setLength(t.state.distance);let r=t.state.offset.clone().sub(n);e.emit(`cameraPositionUpdate`,r,t.userAction),e.emit(`cameraUpdate`,t.state,t.userAction)}),e.on(`intersect.update`,t=>{if(t.intersection){let n=!1;n=e.emit(`wantsShowIntersectionOnModel`,t.raycaster),n&&t.preventDefault(),t.defaultPrevented||e.emit(`intersectionOnModelUpdate`,t.intersection,t.object)}else e.emit(`intersectionHidden`)}),e.on(`pano.request`,t=>{let n=e.emit(`wantsMoveToPano`,t.state.panoIndex,t.options,t.userAction);n||(n=e.emit(`wantsToMoveToPano`,t.state.panoIndex,t.options,t.userAction)),n&&t.preventDefault(),t.defaultPrevented||e.emit(`panoWillLoad`,t.state.panoIndex)}),e.on(`pano.select`,t=>{e.emit(`panoSelected`,t.state.panoIndex)}),e.on(`pano.moveTo`,t=>{e.emit(`panoLoaded`,t.state.panoIndex),e.emit(`moveToPano`,t.state.panoIndex,t.userAction),e.emit(`panoWillArrive`,t.state.panoIndex,t.state,t.userAction)}),e.on(`pano.moving`,t=>{e.emit(`movingToPano`,t.state.panoIndex,t.prevPano.panoIndex,t.progress)}),e.on(`pano.arrived`,t=>{e.emit(`panoArrived`,t.state.panoIndex,t.state,t.userAction)}),e.on(`pano.cancel`,t=>{e.emit(`moveToPanoCanceled`,t.state.panoIndex)}),e.on(`pano.error`,t=>{e.emit(`panoLoadError`,t.error,t.state.panoIndex)}),e.on(`pano.texture.load`,t=>{e.emit(`textureStartLoad`,t.pano.panoIndex)}),e.on(`pano.texture.success`,t=>{e.emit(`textureLoaded`,t.pano.panoIndex,t.meta)}),e.on(`pano.texture.error`,t=>{e.emit(`textureError`,t.error,t.pano.panoIndex)}),e.on(`pano.texture.abort`,t=>{e.emit(`textureAbort`,t.pano.panoIndex)}),e.on(`pano.texture.progress`,t=>{e.emit(`textureLoading`,t.progress,t.pano.panoIndex)}),e.on(`xr.session.start`,t=>{e.emit(`webXRSessionStart`)}),e.on(`xr.session.end`,t=>{e.emit(`webXRSessionEnd`)}),e.on(`xr.gesture.tap`,t=>{e.emit(`webXRControllerEvent`,`tap`,t.buttons,{raycaster:t.controllers.raycaster})}),e.on(`xr.gesture.press`,t=>{e.emit(`webXRControllerEvent`,`press`,t.buttons,{raycaster:t.controllers.raycaster})}),e.on(`xr.gesture.buttonUp`,t=>{e.emit(`webXRControllerEvent`,`buttonUp`,t.buttons,{raycaster:t.controllers.raycaster})}),e.on(`xr.gesture.buttonDown`,t=>{e.emit(`webXRControllerEvent`,`buttonDown`,t.buttons,{raycaster:t.controllers.raycaster})}),e.on(`xr.controller.update`,t=>{e.emit(`webXRControllerRayUpdate`,{leftRay:t.left?t.left.raycaster:void 0,rightRay:t.right?t.right.raycaster:void 0}),t.left&&e.emit(`webXRAxesUpdate`,`left`,{raycaster:{leftRay:t.left?t.left.raycaster:void 0,rightRay:t.right?t.right.raycaster:void 0},axesState:{up:t.left.axes.up,down:t.left.axes.down,left:t.left.axes.left,right:t.left.axes.right},deltaTime:t.left.deltaTime}),t.right&&e.emit(`webXRAxesUpdate`,`right`,{raycaster:{leftRay:t.left?t.left.raycaster:void 0,rightRay:t.right?t.right.raycaster:void 0},axesState:{up:t.right.axes.up,down:t.right.axes.down,left:t.right.axes.left,right:t.right.axes.right},deltaTime:t.right.deltaTime})}),e.on(`works.request`,t=>{e.emit(`willLoad`,t.input,t.works[0],e.getCurrentState())}),e.on(`works.load`,t=>{e.emit(`load`,t.input,t.works[0],e.getCurrentState())}),e.on(`works.ready`,t=>{e.emit(`loaded`,t.input,t.works[0])}),e.on(`state.change`,t=>{e.emit(`stateChange`,t.state,t.userAction)}),e.on(`currentState.change`,t=>{e.emit(`currentStateChange`,t.state,t.userAction)}),e.on(`state.set`,t=>{e.emit(`setState`,t.state)}),e.on(`state.synced`,t=>{e.emit(`stateSynced`,t.state)}),e.on(`model.request`,t=>{e.emit(`modelWillLoad`,t.work.model)}),e.on(`model.error`,t=>{e.emit(`modelLoadError`,t.error,t.model)}),e.on(`model.load`,t=>{e.emit(`modelLoaded`,t.model)}),e.on(`model.changeShownFloor`,t=>{e.emit(`modelShownFloorChange`,t.model.shownFloor,t.model.floorLength)}),e.on(`render`,t=>{e.emit(`renderFrame`,t.needsRender)}),e.on(`mode.change.request`,t=>{e.emit(`wantsChangeMode`,t.mode,t.prevMode)}),e.on(`mode.change`,t=>{e.emit(`modeChange`,t.mode,t.prevMode,t.state.panoIndex,t.state,t.userAction)}),e.on(`helpers.visible`,t=>{e.emit(`helpersVisibleChange`,t.object.visible)}),e.on(`network.resource`,t=>{e.emit(`network`,t.source,t.requestType,t.requestState,t.detail)})}function generateDefaultVideoElement(){if(typeof window<`u`){let e=document.createElement(`video`);e.loop=!0,e.autoplay=!0,e.playsInline=!0,e.muted=!0,e.crossOrigin=``;let t=()=>{document.removeEventListener(`touchstart`,t,!1),document.removeEventListener(`mousedown`,t,!1),e.muted=!1};return document.addEventListener(`touchstart`,t,!1),document.addEventListener(`mousedown`,t,!1),e}else return{}}function initLights(){let e=new three.Group;e.name=`internalLights`;{let t=new three.DirectionalLight(16777215,.1);t.name=`direction0`,t.position.copy(new three.Vector3(0,1,0)),e.add(t)}{let t=new three.DirectionalLight(16777215,.1);t.name=`direction1`,t.position.copy(new three.Vector3(-1,-1,-1)),e.add(t)}{let t=new three.DirectionalLight(16777215,.3);t.name=`direction2`,t.position.copy(new three.Vector3(1,1,1)),e.add(t)}{let t=new three.AmbientLight(16777215,.6);t.name=`ambient0`,e.add(t)}return e}function parseKeyValue(e){var t,n;let r={},o=e.split(/(\;|\,)/);for(let e of o){let o=e.split(`=`),s=(t=o[0])==null?void 0:t.trim(),c=(n=o[1])==null?void 0:n.trim();s&&c&&(r[s]=c)}return r}function getViewportScale(){var e;if(typeof document<`u`){let t=document.getElementsByTagName(`meta`);for(let n=0;n<t.length;n++){let r=t[n];if(r.getAttribute(`name`)===`viewport`){let t=parseKeyValue((e=r.getAttribute(`content`))==null?``:e),n=Number(t[`initial-scale`]);if(!isNaN(n))return n}}}return 1}var realsee_png_data_url_default=`data:image/png;base64,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`,imageSize=[351,63],imageOffset=[20,20],vertices=new Float32Array([-.5,-.5,0,.5,-.5,0,-.5,.5,0,.5,.5,0]),uvs=new Float32Array([0,0,1,0,0,1,1,1]),index=new Uint8Array([0,1,2,1,3,2]),geometry=new three.BufferGeometry;geometry.setAttribute(`position`,new three.BufferAttribute(vertices,3)),geometry.setAttribute(`uv`,new three.BufferAttribute(uvs,2)),geometry.setIndex(new three.BufferAttribute(index,1));var material=new three.MeshBasicMaterial({transparent:!0,depthTest:!1,depthWrite:!1,stencilWrite:!1,fog:!1}),mesh=new three.Mesh(geometry,material);mesh.matrixAutoUpdate=!1;var scene=new three.Scene;scene.add(mesh),scene.matrixAutoUpdate=!1;var camera=new three.OrthographicCamera(-.5,.5,.5,-.5,.1,1);camera.position.set(0,0,.5),camera.lookAt(0,0,0),camera.updateMatrixWorld(!0),camera.matrixAutoUpdate=!1;var prevViewport=new three.Vector4,prevScissor=new three.Vector4;function renderPoweredByRealsee(e){if(material.map){let t=e.getViewport(prevViewport),n=e.getScissor(prevScissor),r=e.getScissorTest(),o=e.autoClear,s=n.x+imageOffset[0]/3,c=n.y+imageOffset[1]/3,l=imageSize[0]/3,u=imageSize[1]/3;e.setViewport(s,c,l,u),e.setScissor(s,c,l,u),e.setScissorTest(!0),e.autoClear=!1,e.render(scene,camera),e.setViewport(t),e.setScissor(n),e.setScissorTest(r),e.autoClear=o}else{let e=new three.Texture,t=new Image;t.onload=()=>{e.image=t,e.wrapS=three.ClampToEdgeWrapping,e.wrapT=three.ClampToEdgeWrapping,e.minFilter=three.LinearFilter,e.needsUpdate=!0,e.generateMipmaps=!1,material.needsUpdate=!0,t.onload=noop},t.src=realsee_png_data_url_default,material.map=e}}var jsContent$1=`(function(){function e(e,t,n,r){function i(e){return e instanceof n?e:new n(function(t){t(e)})}return new(n||=Promise)(function(n,a){function o(e){try{c(r.next(e))}catch(e){a(e)}}function s(e){try{c(r.throw(e))}catch(e){a(e)}}function c(e){e.done?n(e.value):i(e.value).then(o,s)}c((r=r.apply(e,t||[])).next())})}async function t(e={}){var t,n=e,r=!1,i=!0,a=self.location.href;if(r||i)try{new URL(\`.\`,a).href}catch{}console.log.bind(console),console.error.bind(console);var o=!1;function s(e){for(var t=0,n=e.length,r=new Uint8Array(n),i;t<n;++t)i=e.charCodeAt(t),r[t]=~i>>8&i;return r}var c,l,u=!1;function d(){var e=M.buffer;new Int8Array(e),new Int16Array(e),n.HEAPU8=l=new Uint8Array(e),new Uint16Array(e),new Int32Array(e),n.HEAPU32=new Uint32Array(e),n.HEAPF32=new Float32Array(e),new Float64Array(e),new BigInt64Array(e),new BigUint64Array(e)}function f(){if(n.preRun)for(typeof n.preRun==\`function\`&&(n.preRun=[n.preRun]);n.preRun.length;)T(n.preRun.shift());x(w)}function p(){u=!0,I.c()}function m(){if(n.postRun)for(typeof n.postRun==\`function\`&&(n.postRun=[n.postRun]);n.postRun.length;)C(n.postRun.shift());x(S)}var h;function g(){return s(\`\\0asm\\0\\0\\0&\\\`\\\`}}\\\`}\\\`\\0\\\`\\v\\0\\\`\\0\\0\\x07aa\\0\\0\\b\\x07\\0\\0\\x07\\bA\\v\\x07b\\0c\\0\\x07d\\0e\\0f\\0\\f
|
|
2240
2240
|
@\\x07T~@A\\b(\\0" \\0B\\x07|Bøÿÿÿ|"BÿÿÿÿX@ §"\\0?\\0AtM\\r \\0\\0\\r\\vA\\bA06\\0A\\vA\\b \\x006\\0 \\v\\0 \\0 Atr\\vr \\0¼"Aÿÿÿq!@ AvAÿq"E\\r\\0 Að\\0M@ ArAñ\\0 kv!\\f\\v AK@Aø!A\\0!\\f\\v A
|
|
2241
2241
|
tA\\x07k!\\v AvAqr A\\rvr\\vß\\v\\b@ \\0E\\r\\0 \\0A\\bk" \\0Ak(\\0"Axq"\\0j!@ Aq\\r\\0 AqE\\r (\\0"k"A\\b(\\0I\\r \\0 j!\\0@@@A\\b(\\0 G@ (\\f! AÿM@ (\\b"G\\rA\\bA\\b(\\0A~ Avwq6\\0\\f\\v (!\\x07 G@ (\\b" 6\\f 6\\b\\f\\v (" Aj ("E\\r Aj\\v!@ ! "Aj! ("\\r\\0 Aj! ("\\r\\0\\v A\\x006\\0\\f\\v ("AqAG\\rA\\b \\x006\\0 A~q6 \\0Ar6 \\x006\\0\\v 6\\f 6\\b\\f\\vA\\0!\\v \\x07E\\r\\0@ ("At"(¸
|
|
2242
2242
|
F@ A¸
|
|
@@ -2322,4 +2322,4 @@ A\\0H@@@ \\0 F\\r\\0 \\x07 \\0Atj(\\0Atj" (\\0"Aj6\\0 Atj \\x
|
|
|
2322
2322
|
At"j \\b Aj"j(\\0 \\x07j(\\0j6\\0
|
|
2323
2323
|
Ak!
|
|
2324
2324
|
\\f\\v\\v\\v\\0\\v\\v \\0A\\b\\v\`)}function _(e){return e}function v(e,t){var n,r=_(e);return n=new WebAssembly.Module(r),[new WebAssembly.Instance(n,t),n]}function y(){return{a:P}}function b(){function e(e,t){return I=e.exports,N(I),d(),I}var t=y();return n.instantiateWasm?new Promise((r,i)=>{n.instantiateWasm(t,(t,n)=>{r(e(t,n))})}):(h??=g(),e(v(h,t)[0]))}for(var x=e=>{for(;e.length>0;)e.shift()(n)},S=[],C=e=>S.push(e),w=[],T=e=>w.push(e),E=()=>2147483648,D=(e,t)=>Math.ceil(e/t)*t,O=e=>{var t=(e-M.buffer.byteLength+65535)/65536|0;try{return M.grow(t),d(),1}catch{}},k=e=>{var t=l.length;e>>>=0;var n=E();if(e>n)return!1;for(var r=1;r<=4;r*=2){var i=t*(1+.2/r);if(i=Math.min(i,e+100663296),O(Math.min(n,D(Math.max(e,i),65536))))return!0}return!1},A=new Uint8Array(123),j=25;j>=0;--j)A[48+j]=52+j,A[65+j]=j,A[97+j]=26+j;if(A[43]=62,A[47]=63,n.noExitRuntime&&n.noExitRuntime,n.print&&n.print,n.printErr&&n.printErr,n.wasmBinary&&n.wasmBinary,n.arguments&&n.arguments,n.thisProgram&&n.thisProgram,n.preInit)for(typeof n.preInit==\`function\`&&(n.preInit=[n.preInit]);n.preInit.length>0;)n.preInit.shift()();var M;function N(e){n._sort=e.d,n._malloc=e.e,n._free=e.f,M=e.b,e.__indirect_function_table}var P={a:k};function F(){f();function e(){n.calledRun=!0,!o&&(p(),c?.(n),n.onRuntimeInitialized?.(),m())}n.setStatus?(n.setStatus(\`Running...\`),setTimeout(()=>{setTimeout(()=>n.setStatus(\`\`),1),e()},1)):e()}var I=b();return F(),t=u?n:new Promise((e,t)=>{c=e}),t}let n;function r(){return e(this,void 0,void 0,function*(){n=yield t()})}let i,a,o,s,c,l,u,d,f,p=0,m=0,h=[],g=!0,_=!1,v=!1,y=!1,b=()=>e(void 0,void 0,void 0,function*(){if(_){v=!0;return}_=!0,v=!1,n||(yield r());let e=2**Math.ceil(Math.log2(i.vertexCount));p<e&&(p>0&&(n._free(a),n._free(s),n._free(c),n._free(l),n._free(u),n._free(d),n._free(f)),p=e,a=n._malloc(64),s=n._malloc(p*4),c=n._malloc(3*p*4),l=n._malloc(p*4),u=n._malloc(p*4),d=n._malloc(p*4),f=n._malloc(p*4)),m<i.transforms.length&&(m>0&&n._free(o),m=i.transforms.length,o=n._malloc(m*4)),_=!1,v&&(v=!1,yield b())}),x=()=>{if(_||v||!n)return;_=!0,n.HEAPF32.set(i.positions,c/4),n.HEAPF32.set(i.transforms,o/4),n.HEAPU32.set(i.transformIndices,s/4),n.HEAPF32.set(new Float32Array(h),a/4),n._sort(a,o,s,i.vertexCount,c,l,u,d,f);let e=new Uint32Array(n.HEAPU32.buffer,u,i.vertexCount),t=new Uint32Array(e.slice().buffer);self.postMessage({depthIndex:t,generation:i.generation},[t.buffer]),_=!1,g=!1},S=()=>{y||(y=!0,g&&x(),setTimeout(()=>{y=!1,S()}))};self.onmessage=e=>new Promise(t=>{if(e.data.warmup){r().finally(()=>t(!0));return}e.data.sortData&&(i={positions:new Float32Array(e.data.sortData.positions),transforms:new Float32Array(e.data.sortData.transforms),transformIndices:new Uint32Array(e.data.sortData.transformIndices),vertexCount:e.data.sortData.vertexCount,generation:e.data.sortData.generation??0},g=!0,b()),e.data.viewProj?(e.data.viewProj.every(e=>h.includes(e))===!1&&(h=e.data.viewProj,g=!0),S(),t(!0)):t(!0)})})();`,blob=typeof self<`u`&&self.Blob&&new Blob([`(self.URL || self.webkitURL).revokeObjectURL(self.location.href);`,jsContent],{type:`text/javascript;charset=utf-8`});function WorkerWrapper(e){let t;try{if(t=blob&&(self.URL||self.webkitURL).createObjectURL(blob),!t)throw``;let n=new Worker(t,{name:e==null?void 0:e.name});return n.addEventListener(`error`,()=>{(self.URL||self.webkitURL).revokeObjectURL(t)}),n}catch(t){return new Worker(`data:text/javascript;charset=utf-8,`+encodeURIComponent(jsContent),{name:e==null?void 0:e.name})}}var vertex_default=function(...e){let t=113,n=126,r=0,o=``;return e[0].split(``).map(e=>e.charCodeAt(0)>126?e:String.fromCharCode((e.charCodeAt(0)+113)%126)).join(``)}("}rpvv|{-uvtu}-sy|nH}rpvv|{-uvtu}-v{Hnvor-sy|n-}ynV{qr\x07H{vs|z-uvtu}-nz}yr?Q-lr\x07rH{vs|z-uvtu}-nz}yr?Q-ln{s|zH{vs|z-uvtu}-nz}yr?Q-ln{s|zV{qvprH{vs|z-uvtu}-nz}yr?Q-lyn\brV{qvprH{vs|z-uvtu}-nz}yr?Q-luar\x07rH{vs|z-rp?-luar\x07r`v rH{vs|z-v{-lzn\x07`uQrtrrH0vs-[bZlT`lPYV]]R_`-K-=----{vs|z-rp?-lyn\brPyv}}r_n{trh[bZlT`lYNfR_`jH----{vs|z-znA-lpyv}}rZnvprV{rrh[bZlT`lPYV]]R_`jH0r{qvs{vs|z-rp?-r|yv|{Hn\bv{t-rpA-P|y|Hn\bv{t-rp?-]|vv|{Hn\bv{t-rp?-bH<<参考Tnvn{`}yn@qp|{-sy|n-\0E-J-\05E;=6H<<原版的固定xr{ry`v r,不要轻易调整这个数p|{-sy|n-xr{ry?Q`v r-J-=;@Hp|{-sy|n-zn\x07`prr{`}npr`}yn`v r-J-?=AE;=H<<固定的u相关系数p|{-sy|n-`UlP>-J-=;AEEC=?B>>F=?F>FFHp|{-sy|n-`UlP?l=-J->;=F?BAEAHp|{-sy|n-`UlP?l>-J-:>;=F?BAEAHp|{-sy|n-`UlP?l?-J-=;@>B@F>CHp|{-sy|n-`UlP?l@-J-:>;=F?BAEAHp|{-sy|n-`UlP?lA-J-=;BAC?DA?Hrp?-tr`UQnnbc5v{-}ynVq\x079-v{-p|z}|{r{\\ssr9-rp?-r\x07r`v r6-\n----v{-uP|z}|{r{P|{-J-=H----vs-5lzn\x07`uQrtrr-KJ->6-uP|z}|{r{P|{-8J-FH----vs-5lzn\x07`uQrtrr-KJ-?6-uP|z}|{r{P|{-8J->BH----vs-5lzn\x07`uQrtrr-KJ-@6-uP|z}|{r{P|{-8J-?>H--------v{-}nqqrqP|z}|{r{P|{-J-uP|z}|{r{P|{H----vs-5}nqqrqP|z}|{r{P|{-2-A-.J-=6-\n--------}nqqrqP|z}|{r{P|{-J-55}nqqrqP|z}|{r{P|{-<-A6-8->6-7-AH----\f--------sy|n-yv{rnP|z}|{r{V{qr\x07-J-sy|n5}ynVq\x07-7-}nqqrqP|z}|{r{P|{-8-p|z}|{r{\\ssr6H----sy|n-r\x07ryV{qr\x07-J-yv{rnP|z}|{r{V{qr\x07-<-A;=H------sy|n-q-J-r\x07ryV{qr\x07-<-r\x07r`v r;\x07H----sy|n-\b-J-sy||5q6-<-r\x07r`v r;\bH----sy|n-\x07-J-snp5q6H----r{-rp?5\x079-\b6H\f|vq-znv{-56-\n----v{-}ynV{qr\x07b-J-v{5}ynV{qr\x07-8-=;B6H----v{-}ynV{qr\x07V-J-v{5}ynV{qr\x07b6H----rpA-pr{-J-r\x07rySrpu5lr\x07r9-vrp?55}ynV{qr\x07b-3-=\x07@ss6-II->9-}ynV{qr\x07b-KK->=69-=6H--------v{-n{s|zV{qr\x07-J-r\x07rySrpu5ln{s|zV{qvpr9-vrp?5}ynV{qr\x07b-3-=\x07@ss9-}ynV{qr\x07b-KK->=69-=6;\x07H----znA-n{s|z-J-znA5--------r\x07rySrpu5ln{s|z9-vrp?5=9-n{s|zV{qr\x0769-=69--------r\x07rySrpu5ln{s|z9-vrp?5>9-n{s|zV{qr\x0769-=69--------r\x07rySrpu5ln{s|z9-vrp?5?9-n{s|zV{qr\x0769-=69--------r\x07rySrpu5ln{s|z9-vrp?5@9-n{s|zV{qr\x0769-=6----6H----znA-n{s|zZ|qrycvrZnv\x07-J-vrZnv\x07-7-n{s|zH----rp@-}ynPr{r-J-v{Ova|Sy|n5pr{;\x07\b 6H----rpA-|yqPr{r-J-n{s|z-7-rpA5}ynPr{r9->;=6H----0vs-[bZlT`lPYV]]R_`-K-=----v{-yn\brV{qr\x07-J-v{5r\x07rySrpu5lyn\brV{qvpr9-vrp?5}ynV{qr\x07b-3-=\x07@ss9-}ynV{qr\x07b-KK->=69-=6;\x076H----vs-5yn\brV{qr\x07-KJ-=-33-yn\brV{qr\x07-I-[bZlT`lYNfR_`6-\n--------rp?-pyv}_n{tr-J-lyn\brPyv}}r_n{trhyn\brV{qr\x07jH--------v{-pyv}`n-J-v{5pyv}_n{tr;\x07-8-=;B6H--------v{-pyv}P|{-J-v{5pyv}_n{tr;\b-8-=;B6H--------v{-pyv}R{q-J-pyv}`n-8-pyv}P|{H--------s|-5v{-v-J-=H-v-I-[bZlT`lPYV]]R_`H-v886-\n----------------vs-5v-I-pyv}`n-\v\v-v-KJ-pyv}R{q6-\n--------------------p|{v{rH----------------\f----------------rpA-pyv}}r]|vv|{-J-lpyv}}rZnvprV{rrhvj-7-|yqPr{rH----------------o||y-pyv}}rq-J-pyv}}r]|vv|{;\x07-K-:=;B-33-pyv}}r]|vv|{;\x07-I-=;BH----------------pyv}}rq-J-pyv}}rq-33-pyv}}r]|vv|{;\b-K-:=;B-33-pyv}}r]|vv|{;\b-I-=;BH----------------pyv}}rq-J-pyv}}rq-33-pyv}}r]|vv|{; -K-:=;B-33-pyv}}r]|vv|{; -I-=;BH----------------vs-5pyv}}rq6-\n--------------------tyl]|vv|{-J-rpA5=;=9-=;=9-?;=9->;=6H--------------------r{H----------------\f--------\f----\f----0r{qvs----rpA-vrPr{r-J-n{s|zZ|qrycvrZnv\x07-7-rpA5}ynPr{r9->;=6H----rpA-pyv}Pr{r-J-}|wrpv|{Znv\x07-7-vrPr{rH----<<剔除超出视锥体的}yn----sy|n-pyv}-J->;?-7-pyv}Pr{r;H----vs-5pyv}Pr{r; -I-:pyv}Pr{r;-\v\v-pyv}Pr{r; -K-pyv}Pr{r;-\v\v---------pyv}Pr{r;\x07-I-:pyv}-\v\v-pyv}Pr{r;\x07-K-pyv}-\v\v---------pyv}Pr{r;\b-I-:pyv}-\v\v-pyv}Pr{r;\b-K-pyv}6-\n--------tyl]|vv|{-J-rpA5=;=9-=;=9-?;=9->;=6H--------r{H----\f----rp@-{qpPr{r-J-pyv}Pr{r;\x07\b -<-pyv}Pr{r;H----rp?-s|pny-J-rp?5--------}|wrpv|{Znv\x07h=jh=j-7-r|yv|{;\x07-7-=;B9--------}|wrpv|{Znv\x07h>jh>j-7-r|yv|{;\b-7-=;B----6H--------]|vv|{-J-}|vv|{;\x07\bH----<<-读取协方差数据(使用-unys?\x07>C-打包)----rpA-p|-J-r\x07rySrpu5lr\x07r9-vrp?555}ynV{qr\x07b-3-=\x07@ss6-II->6-\v->9-}ynV{qr\x07b-KK->=69-=6H----rp?->-J-{}npxUnys?\x07>C5p|;\x076H-----rp?-?-J-{}npxUnys?\x07>C5p|;\b6H------rp?-@-J-{}npxUnys?\x07>C5p|; 6H----------sy|n-Z>>-J->;\x07-<-A;=H----sy|n-Z>?-J->;\b-<-A;=H----sy|n-Z>@-J-?;\x07-<-A;=H----sy|n-Z??-J-?;\b-<-A;=H----sy|n-Z?@-J-@;\x07-<-A;=H----sy|n-Z@@-J-@;\b-<-A;=H--------zn@-cx-J-zn@5--------Z>>9-Z>?9-Z>@9--------Z>?9-Z??9-Z?@9----------Z>@9-Z?@9-Z@@-------6H----<<-判断是否是正交模式:透视时-}|wrpv|{Znv\x07h@jh@j-J-=,正交时-J->----o||y-v\\u|tn}uvp-J-}|wrpv|{Znv\x07h@jh@j-K-=;DH----sy|n-n{vznv|{]|tr-J--}|wrpv|{Znv\x07h@jh@jH----zn@-WH----vs-5v\\u|tn}uvp6-\n--------<<-正交模式的雅可比矩阵--------W-J-n{}|r5zn@5------------s|pny;\x079-=;=9-=;=9------------=;=9-s|pny;\b9-=;=9------------=;=9-=;=9-=;=--------66H----\f-ryr-\n--------<<-透视模式的雅可比矩阵--------sy|n--J->;=-<-5vrPr{r; -7-vrPr{r; 6H--------W-J-zn@5------------s|pny;\x07-<-vrPr{r; 9-=;=9-:5s|pny;\x07-7-vrPr{r;\x076-7-9------------=;=9-s|pny;\b-<-vrPr{r; 9-:5s|pny;\b-7-vrPr{r;\b6-7-9------------=;=9-=;=9-=;=--------6H----\f----zn@-d-J-n{}|r5zn@5n{s|zZ|qrycvrZnv\x0766H----zn@-a-J-d-7-WH----<<-将-@Q-协方差矩阵变换为-?Q-协方差矩阵----zn@-p|?Qz-J-n{}|r5a6-7-cx-7-aH----p|?Qzh=jh=j-8J-xr{ry?Q`v rH----p|?Qzh>jh>j-8J-xr{ry?Q`v rH----rp@-p|?Q-J-rp@5p|?Qzh=jh=j9-p|?Qzh=jh>j9-p|?Qzh>jh>j6H----sy|n-n-J-p|?Q;\x07H----sy|n-q-J-p|?Q; H----sy|n-o-J-p|?Q;\bH----sy|n-Q-J-n-7-q-:-o-7-oH----sy|n-npr-J-n-8-qH----sy|n-npr\\r?-J-=;B-7-nprH----sy|n-rz?-J-\05zn\x075=;>9-npr\\r?-7-npr\\r?-:-Q66H----sy|n-rvtr{cnyr>-J-npr\\r?-8-rz?H----sy|n-rvtr{cnyr?-J-npr\\r?-:-rz?H----vs-5rvtr{cnyr?-IJ-=;=6-\n--------r{H----\f----rp?-rvtr{crp|>-J-{|znyv r5rp?5o9-rvtr{cnyr>-:-n66H----rp?-rvtr{crp|?-J-rp?5rvtr{crp|>;\b9-:rvtr{crp|>;\x076H----rp?-onvcrp|>-J-rvtr{crp|>--7-zv{5\0E-7-\05rvtr{cnyr>69-zn\x07`prr{`}npr`}yn`v r6H----rp?-onvcrp|?-J-rvtr{crp|?--7-zv{5\0E-7-\05rvtr{cnyr?69-zn\x07`prr{`}npr`}yn`v r6H----rp?-onvcvr}|-J-rp?5>;=-<-r|yv|{;\x079->;=-<-r|yv|{;\b6H----rp?-{qp\\ssr-J-rp?5]|vv|{;\x07-7-onvcrp|>-8-]|vv|{;\b-7-onvcrp|?6-7---------------------onvcvr}|-7-?;=H----rpA-\0nq]|-J-rpA5{qpPr{r;\x07\b-8-{qp\\ssr9-{qpPr{r; 9->;=6H----tyl]|vv|{-J-\0nq]|H----<<-读取颜色----rpA-p|y|-J-rpA5--------5p|;6-3-=\x07ss9--------5p|;-KK-E6-3-=\x07ss9--------5p|;-KK->C6-3-=\x07ss9--------5p|;-KK-?A6-3-=\x07ss----6-<-?BB;=H----<<应用球谐光照,目前只兼容=>?----vs-5lzn\x07`uQrtrr-KJ->6-\n--------rp@-pnzrn]|V{\\owrp-J-rp@5v{rr5n{s|z6-7-rpA5pnzrn]|vv|{9->;=66H--------rp@-|owrpcvrQv-J-{|znyv r5}ynPr{r-:-pnzrn]|V{\\owrp6H----------------rpA-u=>?@-J-r\x07r5luar\x07r9-tr`UQnnbc5}ynV{qr\x07V9-=9-luar\x07r`v r66H----------rpA-uABCD-J-r\x07r5luar\x07r9-tr`UQnnbc5}ynV{qr\x07V9-A9-luar\x07r`v r66H----------rpA-uEF>=>>-J-r\x07r5luar\x07r9-tr`UQnnbc5}ynV{qr\x07V9-E9-luar\x07r`v r66H-----------------rp@-u>-J-u=>?@;toH-----------------------------------rp@-u?-J-rp@5u=>?@;n9-uABCD;t6H---------------------rp@-u@-J-rp@5uABCD;on9-uEF>=>>;6H-----------------------------sy|n-\x07-J-|owrpcvrQv;\x07H--------sy|n-\b-J-|owrpcvrQv;\bH--------sy|n- -J-|owrpcvrQv; H--------rp@-uP|y|-J-u>-7-5:=;AEEC=?B-7-\b6-8-u?-7-5=;AEEC=?B-7- 6-8-u@-7-5:=;AEEC=?B-7-\x076H--------p|y|;to-8J-uP|y|H----------------vs-5lzn\x07`uQrtrr-KJ-?6-\n----------------------rpA-u>?>@>A>B-J-r\x07r5luar\x07r9-tr`UQnnbc5}ynV{qr\x07V9->?9-luar\x07r`v r66H------------rpA-u>C>D>E>F-J-r\x07r5luar\x07r9-tr`UQnnbc5}ynV{qr\x07V9->C9-luar\x07r`v r66H-------------rpA-u?=?>???@-J-r\x07r5luar\x07r9-tr`UQnnbc5}ynV{qr\x07V9-?=9-luar\x07r`v r66H-------------------------rp@-uA-J-uEF>=>>;tonH------------------------------------rp@-uB-J-u>?>@>A>B;toH----------------------------------rp@-uC-J-rp@5u>?>@>A>B;n9-u>C>D>E>F;t6H---------------rp@-uD-J-rp@5u>C>D>E>F;on9-u?=?>???@;6H---------------rp@-uElqrt?-J-u?=?>???@;tonH-----------------------------------------sy|n-\x07\x07-J-\x07-7-\x07H------------sy|n-\b\b-J-\b-7-\bH------------sy|n- -J- -7- H------------sy|n-\x07\b-J-\x07-7-\bH------------sy|n-\b -J-\b-7- H------------sy|n-\x07 -J-\x07-7- H------------------------p|y|;to-8J----------------5`UlP?l=-7-\x07\b6-7-uA-8----------------5`UlP?l>-7-\b 6-7-uB-8----------------5`UlP?l?-7-5?;=-7- -:-\x07\x07-:-\b\b66-7-uC-8----------------5`UlP?l@-7-\x07 6-7-uD-8----------------5`UlP?lA-7-5\x07\x07-:-\b\b66-7-uElqrt?H--------\f----\f--------p|y|;to-J-pynz}5p|y|;to9-rp@5=;=69-rp@5>;=66H----P|y|-J-p|y|H----]|vv|{-7J-\0EH----b-J-}|vv|{;\x07\bH\f"),fragment_default=function(...e){let t=113,n=126,r=0,o=``;return e[0].split(``).map(e=>e.charCodeAt(0)>126?e:String.fromCharCode((e.charCodeAt(0)+113)%126)).join(``)}(`}rpvv|{-uvtu}-sy|nH0v{pyqr-Ip|zz|{Kn\bv{t-rpA-P|y|Hn\bv{t-rp?-]|vv|{Hn\bv{t-rp?-bH|vq-znv{-56-
|
|
2325
|
-
----<<-计算从-}yn-中心到当前片段的平方距离----<<-由于-]|vv|{-已经按-\05E6-缩放,平方结果会被缩放-E-倍----<<-如果平方结果大于-E,说明在椭圆外,距离均值超过-\05E6-个标准差----sy|n-N-J-q|5]|vv|{9-]|vv|{6H----vs-5N-K-E;=6-qvpnqH--------rp@-p|y|-J-P|y|;toH--------<<-由于渲染的-}yn-按-\05E6-缩放,高斯公式中的逆协方差矩阵部分变成单位矩阵----<<-因此只剩下-5e-:-zrn{6-7-5e-:-zrn{6,而-zrn{-为零,所以是-e-7-e,即-N----sy|n-|}npv\b-J-r\x07}5:=;B-7-N6-7-P|y|;nH--------tylSntP|y|-J-rpA5p|y|;to9-|}npv\b6H\f`),PBMGaussianSplattingRenderMesh=class extends three.Mesh{constructor(){super(),this.renderData=null,this.needsRender=!1,this.sortWorker=null,this.depthIndex=new Uint32Array,this.splatIndexCapacity=0,this.activeSlot=null,this.pendingSlot=null,this.rebuildGeneration=0,this.forceClipperUniformRefresh=!1,this.incrementalUpdateInFlight=!1,this.dataTexture=null,this.transformsTexture=null,this.transformIndicesTexture=null,this.layerIndicesTexture=null,this.shTexture=null,this.usedSHDegree=0,this.onBeforeRender=(e,t,n)=>{let r=n,o=this.collectObjects(t);if(o.length===0){this.geometry.instanceCount=0;return}let s=0;o.forEach(e=>{e.usedSHDegree>s&&(s=e.usedSHDegree)}),this.setMaxShDegree(s),this.isSceneNeedsRebuild(o)&&(this.tryStartIncrementalUpdate(o)||(this.startPendingRebuild(o),this.gsSceneState.lastClipperHash=``));let c=o.filter(e=>e.transformChanged);c.length>0&&(this.syncTransformsForSlot(this.activeSlot,c),this.syncTransformsForSlot(this.pendingSlot,c),c.forEach(e=>{e.transformChanged=!1,e.selectedChanged=!1})),this.activeSlot&&this.updateSlotTextures(this.activeSlot),this.pendingSlot&&this.updateSlotTextures(this.pendingSlot);let l=new three.Matrix4().multiplyMatrices(r.perspectiveProjectionMatrix,r.matrixWorldInverse).elements;this.pendingSlot&&this.pendingSlot.renderData.initialBuildComplete&&this.pendingSlot.awaitingFirstSort?this.requestSort(this.pendingSlot,l):this.activeSlot&&this.requestSort(this.activeSlot,l);let u=this.getClipperHash(o);if((this.forceClipperUniformRefresh||u!==this.gsSceneState.lastClipperHash)&&(this.updateClipperUniforms(o),this.gsSceneState.lastClipperHash=u,this.forceClipperUniformRefresh=!1,this.needsRender=!0),this.activeSlot){let e=Math.min(this.usedSHDegree,this.activeSlot.renderData.maxShDegree);this.material.uniforms.u_maxShDegree.value=e,e>0&&!this.activeSlot.textures.shTexture?this.createSHTexture(this.activeSlot):e===0&&this.activeSlot.textures.shTexture&&(this.activeSlot.textures.shTexture.dispose(),this.activeSlot.textures.shTexture=null),this.material.uniforms.u_shTexture.value=this.activeSlot.textures.shTexture,this.renderData=this.activeSlot.renderData}else this.pendingSlot||(this.bindSlotTextures(null),this.material.uniforms.u_maxShDegree.value=0,this.geometry.instanceCount=0);this.material.uniforms.resolution.value.set(r.resolution.x,r.resolution.y)};let e=this.createGeometry(),t=this.createMaterial();this.geometry=e,this.material=t,this.frustumCulled=!1,this.renderOrder=-99999999999,this.gsSceneState={lastObjectsHash:``,lastClipperHash:``},this.sortWorker=new WorkerWrapper,this.sortWorker.postMessage({warmup:!0}),RenderData.warmupWasm(),this.sortWorker.onmessage=e=>{if(e.data.depthIndex){let t=e.data.generation;if(this.pendingSlot&&t===this.pendingSlot.generation){this.pendingSlot.awaitingFirstSort=!1,this.swapPendingToActive(e.data.depthIndex);return}this.activeSlot&&t===this.activeSlot.generation&&(this.activeSlot.awaitingFirstSort=!1,this.applyDepthIndex(e.data.depthIndex))}}}ensureSplatIndexCapacity(e){let t=this.geometry.getAttribute(`splatIndex`);if(e<=this.splatIndexCapacity)return t;let n=this.getExpandedCapacity(e),r=t.array,o=new Float32Array(n);o.set(r.subarray(0,Math.min(r.length,n)));let s=new three.InstancedBufferAttribute(o,1,!1,1);return s.setUsage(three.DynamicDrawUsage),this.geometry.setAttribute(`splatIndex`,s),this.splatIndexCapacity=n,this.geometry._maxInstanceCount=n,s}getExpandedCapacity(e){let t=Math.max(this.splatIndexCapacity,1);for(;t<e;)t*=2;return t}createGeometry(){let e=new three.InstancedBufferGeometry,t=new Float32Array([-1,-1,0,1,-1,0,1,1,0,-1,1,0]);e.setAttribute(`position`,new three.BufferAttribute(t,3));let n=new Uint16Array([0,1,2,0,2,3]);e.setIndex(new three.BufferAttribute(n,1)),this.splatIndexCapacity=1;let r=new Float32Array(this.splatIndexCapacity);for(let e=0;e<r.length;e++)r[e]=e;let o=new three.InstancedBufferAttribute(r,1,!1,1);return o.setUsage(three.DynamicDrawUsage),e.setAttribute(`splatIndex`,o),e._maxInstanceCount=this.splatIndexCapacity,e.instanceCount=0,e}createMaterial(){return new three.ShaderMaterial({vertexShader:vertex_default,fragmentShader:fragment_default,defines:{NUM_GS_LAYERS:0,NUM_GS_CLIPPERS:0},uniforms:{u_texture:{value:null},u_transforms:{value:null},u_transformIndices:{value:null},u_layerIndices:{value:null},u_numGsLayers:{value:0},u_numGsClippers:{value:0},u_layerClipperRanges:{value:[]},u_clipperMatricesInverse:{value:[]},u_shTexture:{value:null},u_shTextureSize:{value:new three.Vector2},u_maxShDegree:{value:0},resolution:{value:new three.Vector2}},side:three.DoubleSide,transparent:!0,blending:three.NormalBlending,depthTest:!0,depthWrite:!1})}createDefaultLayerClipperRanges(e){return Array.from({length:e},()=>new three.Vector2(-1,0))}createDefaultClipperMatrices(e){return Array.from({length:e},()=>new three.Matrix4)}createTextures(e){let t=new three.DataTexture(e.data,e.width,e.height,three.RGBAIntegerFormat,three.UnsignedIntType);t.internalFormat=`RGBA32UI`,t.minFilter=three.NearestFilter,t.magFilter=three.NearestFilter,t.needsUpdate=!0;let n=new three.DataTexture(e.transforms,e.transformsWidth,e.transformsHeight,three.RGBAFormat,three.FloatType);n.internalFormat=`RGBA32F`,n.minFilter=three.NearestFilter,n.magFilter=three.NearestFilter,n.needsUpdate=!0;let r=new three.DataTexture(e.transformIndices,e.transformIndicesWidth,e.transformIndicesHeight,three.RedIntegerFormat,three.UnsignedIntType);r.internalFormat=`R32UI`,r.minFilter=three.NearestFilter,r.magFilter=three.NearestFilter,r.needsUpdate=!0;let o=new three.DataTexture(e.layerIndices,e.layerIndicesWidth,e.layerIndicesHeight,three.RedIntegerFormat,three.UnsignedIntType);return o.internalFormat=`R32UI`,o.minFilter=three.NearestFilter,o.magFilter=three.NearestFilter,o.needsUpdate=!0,{dataTexture:t,transformsTexture:n,transformIndicesTexture:r,layerIndicesTexture:o,shTexture:null}}createSHTexture(e){let{renderData:t,textures:n}=e;n.shTexture&&(n.shTexture.dispose(),n.shTexture=null);let r=Math.min(this.usedSHDegree,t.maxShDegree),o=0;if(r>=1&&(o+=9),r>=2&&(o+=15),r>=3&&(o+=21),o===0)return;let s=4,c=o;c%4!=0&&(c=Math.ceil(c/4)*4);let l=t.numPoints*c/4,u=2048,d=Math.ceil(l/u),f=new Float32Array(u*d*4);for(let e=0;e<t.numPoints;e++){let n=c/4*e,o=0;if(t.sh1&&r>=1)for(let r=0;r<9;r++){let s=n+Math.floor(o/4),c=o%4,l=s*4+c;f[l]=t.sh1[e*9+r],o++}if(t.sh2&&r>=2)for(let r=0;r<15;r++){let s=n+Math.floor(o/4),c=o%4,l=s*4+c;f[l]=t.sh2[e*15+r],o++}if(t.sh3&&r>=3)for(let r=0;r<21;r++){let s=n+Math.floor(o/4),c=o%4,l=s*4+c;f[l]=t.sh3[e*21+r],o++}}n.shTexture=new three.DataTexture(f,u,d,three.RGBAFormat,three.FloatType),n.shTexture.internalFormat=`RGBA32F`,n.shTexture.minFilter=three.NearestFilter,n.shTexture.magFilter=three.NearestFilter,n.shTexture.needsUpdate=!0,this.material.uniforms.u_shTextureSize.value.set(u,d),this.material.uniforms.u_maxShDegree.value=r}setMaxShDegree(e){var t,n;if(e<0||e>2){console.warn(`现在只支持012三种阶数,你输入的是${e}`);return}let r=this.usedSHDegree;this.usedSHDegree=e,r!==e&&((t=this.activeSlot)!=null&&t.textures.shTexture&&(this.activeSlot.textures.shTexture.dispose(),this.activeSlot.textures.shTexture=null),(n=this.pendingSlot)!=null&&n.textures.shTexture&&(this.pendingSlot.textures.shTexture.dispose(),this.pendingSlot.textures.shTexture=null),this.material.uniforms.u_maxShDegree.value=e,e===0?this.material.uniforms.u_shTexture.value=null:this.activeSlot&&this.activeSlot.renderData.maxShDegree>0&&(this.createSHTexture(this.activeSlot),this.material.uniforms.u_shTexture.value=this.activeSlot.textures.shTexture))}bindSlotTextures(e){if(!e){this.dataTexture=null,this.transformsTexture=null,this.transformIndicesTexture=null,this.layerIndicesTexture=null,this.shTexture=null,this.material.uniforms.u_texture.value=null,this.material.uniforms.u_transforms.value=null,this.material.uniforms.u_transformIndices.value=null,this.material.uniforms.u_layerIndices.value=null,this.material.uniforms.u_shTexture.value=null;return}this.dataTexture=e.textures.dataTexture,this.transformsTexture=e.textures.transformsTexture,this.transformIndicesTexture=e.textures.transformIndicesTexture,this.layerIndicesTexture=e.textures.layerIndicesTexture,this.shTexture=e.textures.shTexture,this.material.uniforms.u_texture.value=this.dataTexture,this.material.uniforms.u_transforms.value=this.transformsTexture,this.material.uniforms.u_transformIndices.value=this.transformIndicesTexture,this.material.uniforms.u_layerIndices.value=this.layerIndicesTexture,this.material.uniforms.u_shTexture.value=this.shTexture}disposeSlot(e){e&&(e.renderData.dispose(),this.disposeTextures(e.textures))}disposeTextures(e){e.dataTexture.dispose(),e.transformsTexture.dispose(),e.transformIndicesTexture.dispose(),e.layerIndicesTexture.dispose(),e.shTexture&&(e.shTexture.dispose(),e.shTexture=null)}applyDepthIndex(e){this.depthIndex=e;let t=this.depthIndex.length,n=this.ensureSplatIndexCapacity(t);n.array.set(this.depthIndex,0),n.count=this.depthIndex.length,n.updateRange.offset=0,n.updateRange.count=t,n.needsUpdate=!0,this.geometry.instanceCount=this.depthIndex.length,this.needsRender=!0}swapPendingToActive(e){if(!this.pendingSlot)return;let t=this.activeSlot;this.activeSlot=this.pendingSlot,this.pendingSlot=null,this.renderData=this.activeSlot.renderData,this.ensureSplatIndexCapacity(this.activeSlot.renderData.numPoints),this.bindSlotTextures(this.activeSlot),this.activeSlot.sortDataUploaded=!0,this.forceClipperUniformRefresh=!0,this.applyDepthIndex(e),t&&this.disposeSlot(t)}createSlot(e){let t={generation:e.generation,renderData:e,textures:this.createTextures(e),awaitingFirstSort:!0,sortDataUploaded:!1};return this.usedSHDegree>0&&e.maxShDegree>0&&this.createSHTexture(t),t}updateSlotTextures(e){e.renderData.dataChanged&&(e.textures.dataTexture.needsUpdate=!0,e.renderData.dataChanged=!1),e.renderData.transformsChanged&&(e.textures.transformsTexture.needsUpdate=!0,e.textures.transformIndicesTexture.needsUpdate=!0,e.renderData.transformsChanged=!1)}postSortData(e){var t;let n=new Float32Array(e.renderData.positions.slice().buffer),r=new Float32Array(e.renderData.transforms.slice().buffer),o=new Uint32Array(e.renderData.transformIndices.slice().buffer);(t=this.sortWorker)==null||t.postMessage({sortData:{positions:n,transforms:r,transformIndices:o,vertexCount:e.renderData.numPoints,generation:e.generation}},[n.buffer,r.buffer,o.buffer]),e.sortDataUploaded=!0}requestSort(e,t){var n;e.renderData.initialBuildComplete&&((e.renderData.dataChanged||e.renderData.transformsChanged||!e.sortDataUploaded)&&this.postSortData(e),(n=this.sortWorker)==null||n.postMessage({viewProj:t}))}syncTransformsForSlot(e,t){e&&t.forEach(t=>{e.renderData.splatIndices.has(t)&&e.renderData.updateTransform(t)})}collectObjects(e){let t=[];return e.traverse(e=>{e instanceof PBMGaussianSplattingObject&&e.visible&&t.push(e)}),t.sort((e,t)=>{let n=e.uuid+e.gsViewLayerKey,r=t.uuid+t.gsViewLayerKey;return n<r?-1:n>r?1:0}),t}isSceneNeedsRebuild(e){let t=e.map(e=>`${e.uuid}:${e.gsViewLayerKey}`).join(`|`),n=t!==this.gsSceneState.lastObjectsHash;return this.gsSceneState.lastObjectsHash=t,n}getClipperHash(e){return e.map(e=>{let t=e.gsClippers.map(e=>{var t;return`${(t=e.floorIndex)==null?-1:t}:${e.clippingBoxMatrix.elements.join(`,`)}`}).join(`;`);return`${e.gsViewLayerKey}:${t}`}).join(`|`)}updateClipperCounts(e,t){let n=Math.max(0,e|0),r=Math.max(0,t|0),o=this.material.defines;(o.NUM_GS_LAYERS!==n||o.NUM_GS_CLIPPERS!==r)&&(o.NUM_GS_LAYERS=n,o.NUM_GS_CLIPPERS=r,this.material.needsUpdate=!0),this.material.uniforms.u_numGsLayers.value=e,this.material.uniforms.u_numGsClippers.value=t}updateClipperUniforms(e){var t,n,r,o;let s=(n=(t=this.activeSlot)==null?void 0:t.renderData)==null?null:n;if(!s){this.material.uniforms.u_layerClipperRanges.value=[],this.material.uniforms.u_clipperMatricesInverse.value=[],this.updateClipperCounts(0,0);return}let c=new Map;for(let t of e)c.has(t.gsViewLayerKey)||c.set(t.gsViewLayerKey,t.gsClippers);let l=s.layerKeys.length,u=0;for(let e of s.layerKeys)u+=((r=c.get(e))==null?[]:r).length;let d=this.createDefaultLayerClipperRanges(l),f=this.createDefaultClipperMatrices(u),p=0;for(let e of s.layerKeys){let t=s.layerKeyToIndex.get(e);if(t===void 0)continue;let n=(o=c.get(e))==null?[]:o,r=p,l=0;for(let e of n)f[p].getInverse(e.clippingBoxMatrix),p++,l++;l>0&&d[t].set(r,l)}this.material.uniforms.u_layerClipperRanges.value=d,this.material.uniforms.u_clipperMatricesInverse.value=f,this.updateClipperCounts(l,p)}startPendingRebuild(e){this.pendingSlot&&(this.disposeSlot(this.pendingSlot),this.pendingSlot=null),this.rebuildGeneration+=1;let t=new RenderData(e,this.rebuildGeneration);this.pendingSlot=this.createSlot(t)}tryStartIncrementalUpdate(e){if(!this.activeSlot||this.pendingSlot||this.incrementalUpdateInFlight)return!1;let t=this.activeSlot.renderData.getObjectsInOrder();if(!this.activeSlot.renderData.canIncrementalAppend(e))return!1;let n=e.slice(t.length);if(n.length===0)return!1;this.incrementalUpdateInFlight=!0;let r=this.activeSlot;return r.renderData.appendObjects(n).then(e=>{if(!e||this.activeSlot!==r||r.renderData.disposed)return;let t=r.textures;r.textures=this.createTextures(r.renderData),this.usedSHDegree>0&&r.renderData.maxShDegree>0&&this.createSHTexture(r),this.bindSlotTextures(r),this.ensureSplatIndexCapacity(r.renderData.numPoints),r.sortDataUploaded=!1,r.awaitingFirstSort=!0,this.disposeTextures(t),this.forceClipperUniformRefresh=!0,this.gsSceneState.lastClipperHash=``,this.needsRender=!0}).catch(e=>{console.warn(`Incremental append failed, fallback to rebuild:`,e)}).finally(()=>{this.incrementalUpdateInFlight=!1}),!0}dispose(){this.disposeSlot(this.pendingSlot),this.pendingSlot=null,this.disposeSlot(this.activeSlot),this.activeSlot=null,this.renderData=null,this.sortWorker&&this.sortWorker.terminate(),this.bindSlotTextures(null),this.geometry.dispose(),this.material.dispose()}},PBMGaussianSplattingTestMesh=class extends three.Mesh{constructor(){super(),this.onBeforeRender=(e,t,n)=>{this.collectObjects(t).length>0&&console.warn(`未开启webgl2, 3dgs仅支持在开启webgl2模式后使用`)}}collectObjects(e){let t=[];return e.traverse(e=>{e instanceof PBMGaussianSplattingObject&&e.visible&&t.push(e)}),t}},DEFAULT_MODE_CHANGE_DURATION=1e3,DEFAULT_CAMERA_FOV=90,DEFAULT_REQUEST_PROXY=e=>e.replace(`//vrlab-public.ljcdn.com/`,`//vr-public.realsee-cdn.cn/`).replace(`//vrlab-image4.ljcdn.com/`,`//vr-image-4.realsee-cdn.cn/`).replace(`//vrlab-image3.ljcdn.com/`,`//vr-image-3.realsee-cdn.cn/`).replace(`//vrlab-image2.ljcdn.com/`,`//vr-image-2.realsee-cdn.cn/`).replace(`//vrlab-image1.ljcdn.com/`,`//vr-image-1.realsee-cdn.cn/`),scratchSphere=new three.Sphere,scratchBox3=new three.Box3,scratchViewport=new three.Vector4,scratchScissor=new three.Vector4,scratchClearColor=new three.Color,scratchRenderSize=new three.Vector2,worksMap=new WeakMap,emptyWorks=createWorks([parseWork(null)]),Five_Instances={},Five=class e extends Subscribe{static get version(){return`6.8.0-alpha.21`}static get dracoPath(){return draco.decoderPath}static set dracoPath(e){draco.setDecoderPath(e)}static get ktx2Path(){return ktx2.transcoderPath}static set ktx2Path(e){ktx2.setTranscoderPath(e)}static get useNativeImageBitmap(){return canUseNativeImageBitmap()}static set useNativeImageBitmap(e){useNativeImageBitmap(e)}constructor(e={}){var t,n,r,o,s,c,l,u,d,f,p;if(super(),this.pbmGaussianSplattingRenderMesh=null,this.fiveId=createUuid(),Five_Instances[this.fiveId]=this,this.currentUpdateArgs={time:now(),args:[]},this.currentMode=`Panorama`,this.pano={workCode:``,panoIndex:0},this.needsRender=!1,this.onlyRenderIfNeeds=(t=e.onlyRenderIfNeeds)==null?!0:t,this.imageOptions=Object.assign({},(n=e.imageOptions)==null?{}:n),this.textureOptions=Object.assign({},(r=e.textureOptions)==null?{}:r),this.poweredByRealsee=(o=e.poweredByRealsee)==null?!0:o,this.backgroundColor=new three.Color((s=e.backgroundColor)==null?1579548:s),this.backgroundAlpha=(c=e.backgroundAlpha)==null?1:c,this.extraElements=[],this.controllerInits={Panorama:Object.assign({},e.panorama),Model:Object.assign({},e.model),Floorplan:Object.assign({},e.floorplan),Topview:Object.assign({},e.topview),Mapview:Object.assign({},e.mapview),VRPanorama:Object.assign({},e.vrPanorama),XRPanorama:Object.assign({},e.xrPanorama)},this.fps={testCount:0,testTime:now()},this.modeChangeDuration=(l=e.modeChangeDuration)==null?DEFAULT_MODE_CHANGE_DURATION:l,this.enableWheel=(u=e.enableWheel)==null?!0:u,typeof window<`u`)if(`renderer`in e)e.renderer instanceof InternalWebGLRenderer&&this.throwError(Error(`cannot render a internal renderer`)),this.renderer=e.renderer;else try{this.renderer=new InternalWebGLRenderer({preserveDrawingBuffer:e.preserveDrawingBuffer,antialias:e.antialias,webgl2:e.webgl2,logarithmicDepthBuffer:e.logarithmicDepthBuffer,precision:e.precision,powerPreference:e.powerPreference});let t=getViewportScale();this.renderer.setPixelRatio(t===1?window.devicePixelRatio:1),this.renderer.setSize(512,512),this.renderer.setClearColor(this.backgroundColor,this.backgroundAlpha)}catch(e){let t=e instanceof Error?e:Error(String(e));this.throwError(t)}this.getPixelsRenderTarget=new three.WebGLRenderTarget(1,1,{encoding:(f=(d=this.renderer)==null?void 0:d.outputEncoding)==null?three.sRGBEncoding:f,generateMipmaps:!1}),this.viewport=Object.assign({left:0,bottom:0,width:1,height:1},e.viewport),this.camera=new Camera(DEFAULT_CAMERA_FOV),this.scene=new Scene,this.xrCustomObjectsScene=new three.Scene,this.scene.add(this.xrCustomObjectsScene),this.scene.matrixAutoUpdate=!1,this.loadWorkTask=Promise.resolve(),this.requestProxy=(p=e.requestProxy)==null?DEFAULT_REQUEST_PROXY:p,this.networkSubscribe=new NetworkSubscribe,this.networkSubscribe.on(`network`,(e,t,n,r)=>{var o;this.emit(`network.resource`,createEvent(`network.resource`,{source:e,requestType:t,requestState:n,detail:r})),(o=this.analysis)==null||o.network(this.works,e,t,n,r)}),this.readyCallbacks=[],this.syncingState=!1,this.helperGroup=new three.Group,this.helperGroup.name=`helper`,this.helperGroup.matrixAutoUpdate=!1,this.scene.add(this.helperGroup),worksMap.set(this,emptyWorks),this.modelScene=new ModelScene({fiveId:this.fiveId}),this.modelScene.addEventListener(`model.create`,e=>{this.bindModel(e.model)}),this.scene.add(this.modelScene);let[m]=this.modelScene.setModels(emptyWorks,{forceReplaceImmediately:!0});defineProperty(m,`loaded`,{get(){return!1},set(e){}}),this.videoTexture=new three.VideoTexture(e.videoInstance||generateDefaultVideoElement());let h=initLights();this.scene.add(h),this.state={mode:this.currentMode,workCode:this.pano.workCode,panoIndex:this.pano.panoIndex,longitude:this.camera.pose.longitude,latitude:this.camera.pose.latitude,fov:this.camera.pose.fov,offset:this.camera.pose.offset.clone(),distance:this.camera.pose.distance},this.stateSynced=!1,this.destroyed=!1,this.paused=!0,typeof window<`u`&&(e.play!==!1&&this.play(),this.stopAnimationLoop=AnimationFrameLoop.shared.add((e,t,...n)=>{this.updateTime(e,t,...n)},!1,0,10));let g=()=>{typeof document<`u`&&document.fullscreenElement===null&&this.currentMode===`VRPanorama`&&this.controller.emit(`vr.requestExit`,createEvent(`vr.requestExit`,{}))},_=()=>{this.needsRender=!0};if(typeof document<`u`&&document.addEventListener(`fullscreenchange`,g,!1),this.renderer&&this.renderer.domElement.addEventListener(`webglcontextrestored`,_,!1),this.removeEventListeners=()=>{typeof document<`u`&&document.removeEventListener(`fullscreenchange`,g,!1),this.renderer&&this.renderer.domElement.removeEventListener(`webglcontextrestored`,_,!1)},this.plugins={},e.plugins&&e.plugins.length){for(let t of e.plugins)if(typeof t==`function`)t(this);else if(Array.isArray(t)){let[e,n,r]=t;if(typeof e==`function`){let t=e(this,r);typeof n==`string`&&(this.plugins[n]?this.throwError(Error(`plugin name ${n} is exists.`)):this.plugins[n]=t)}}}initLegacyEvent(this),this.fiveRenderer=new FiveRenderer,this.adaptiveLuminancePass=new AdaptiveLuminancePass,this.adaptiveLuminancePass.enabled=!1,this.fiveRenderer.composer.addPass(this.adaptiveLuminancePass),this.eyeDomeLightingPass=new EyeDomeLightingPass(this.camera),this.eyeDomeLightingPass.enabled=!1,this.fiveRenderer.composer.addPass(this.eyeDomeLightingPass),e.webgl2?(this.pbmGaussianSplattingRenderMesh=new PBMGaussianSplattingRenderMesh,this.scene.add(this.pbmGaussianSplattingRenderMesh)):this.scene.add(new PBMGaussianSplattingTestMesh)}get ident(){return this.fiveId}get panoIndex(){return this.pano.panoIndex}get panoId(){return panoStringify(this.pano)}dispose(){var e;if(this.destroyed===!0)return;delete Five_Instances[this.fiveId],this.emit(`dispose`),this.destroyed=!0,this.pause(),this.stopAnimationLoop&&(this.stopAnimationLoop(),this.stopAnimationLoop=void 0),this.off(),this.networkSubscribe.off(),this.controller&&(this.controller.destroy(),this.controller=void 0);let t=this.getElement();t&&t.parentNode&&t.parentNode.removeChild(t);let n=this.modelScene.parameter;n.pano0&&n.pano0.map.dispose(),n.pano1&&n.pano1.map!==((e=n.pano0)==null?void 0:e.map)&&n.pano1.map.dispose(),n.reset(`pano0`,`pano1`),this.modelScene.dispose(),this.scene.dispose(),this.xrCustomObjectsScene.dispose(),worksMap.set(this,emptyWorks),this.renderer&&this.renderer.render(new three.Scene,new three.Camera),this.fiveRenderer.dispose(),this.renderer instanceof InternalWebGLRenderer&&(this.renderer.forceContextLoss&&this.renderer.forceContextLoss(),this.renderer.dispose())}setViewport(e){Object.assign(this.viewport,e),this.needsRender=!0}get boundingMesh(){return this.modelScene.boundingMesh}get helperVisible(){return this.helperGroup.visible}set helperVisible(e){this.helperGroup.visible!==e&&(this.helperGroup.visible=e,this.emit(`helpers.visible`,createEvent(`helpers.visible`,{object:this.helperGroup})),this.needsRender=!0)}updateConfiguration(e,t=!0){let n=!1,r=!1;e.panorama&&(Object.assign(this.controllerInits.Panorama,omitUndefinedFields(e.panorama)),this.currentMode===`Panorama`&&(n=!0)),e.model&&(Object.assign(this.controllerInits.Model,omitUndefinedFields(e.model)),this.currentMode===`Model`&&(n=!0)),e.floorplan&&(Object.assign(this.controllerInits.Floorplan,omitUndefinedFields(e.floorplan)),this.currentMode===`Floorplan`&&(n=!0)),e.topview&&(Object.assign(this.controllerInits.Topview,omitUndefinedFields(e.topview)),this.currentMode===`Topview`&&(n=!0)),e.mapview&&(Object.assign(this.controllerInits.Mapview,omitUndefinedFields(e.mapview)),this.currentMode===`Mapview`&&(n=!0)),e.vrPanorama&&(Object.assign(this.controllerInits.VRPanorama,omitUndefinedFields(e.vrPanorama)),this.currentMode===`VRPanorama`&&(n=!0)),e.imageOptions&&(Object.assign(this.imageOptions,e.imageOptions),(this.currentMode===`Panorama`||this.currentMode===`VRPanorama`)&&(r=!0,n=!0)),e.textureOptions&&Object.assign(this.textureOptions,e.textureOptions),t&&n&&this.controller&&this.currentMode&&(!this.controller.updateConfiguration(this.controllerInits[this.currentMode])||r)&&this.changeMode(this.currentMode,this.getCurrentState(),0,!1,!0)}appendTo(e,t={}){if(!this.renderer)return;if(!(this.renderer instanceof InternalWebGLRenderer)){this.throwError(Error(`cannot call appendTo method when render a external renderer`));return}let n=this.getElement();if(!n)return;e.appendChild(n),this.refresh(t);let r=window.getComputedStyle(e).position;r!==`relative`&&r!==`absolute`&&r!==`fixed`&&r!==`sticky`&&(e.style.position=`relative`)}refresh(e={},t){var n,r,o;if(!this.renderer)return;let s=this.renderer.domElement.parentNode,{width:c=(n=s==null?void 0:s.offsetWidth)==null?512:n,height:l=(r=s==null?void 0:s.offsetHeight)==null?512:r}=e;if(c=Math.max(1,c),l=Math.max(1,l),!t){let e=getViewportScale(),n=typeof window<`u`?window.devicePixelRatio:1;if(t=(o=e===1?n:1)==null?1:o,t>1){let e=Math.max(c,l)*t,n=Math.min(this.renderer.capabilities.maxTextureSize,4096);e>n&&(t=Math.max(t/e*n,1),t=Math.floor(t*100)/100)}}this.renderer.setPixelRatio(t),this.renderer.setSize(c,l),this.needsRender=!0;let u=now(),d=u-this.currentUpdateArgs.time,f=this.currentUpdateArgs.args;this.updateTime(u,d,...f)}addExtraElement(e){return this.extraElements.indexOf(e)===-1&&(this.extraElements.push(e),this.controller&&this.controller.bindExtraElement(e)),()=>this.removeExtraElement(e)}removeExtraElement(e){let t=this.extraElements.indexOf(e);t!==-1&&(this.extraElements.splice(t,1),this.controller&&this.controller.unbindExtraElement(e))}getSize(e){if(!this.renderer)throw Error(`renderer is not initialized`);return this.renderer.getSize(e),e.x*=this.viewport.width,e.y*=this.viewport.height,e}getDrawingBufferSize(e){if(!this.renderer)throw Error(`renderer is not initialized`);return this.renderer.getDrawingBufferSize(e),e.x*=this.viewport.width,e.y*=this.viewport.height,e}updateCamera(e,t,n=!0){if(!this.controller)throw Error(`controller is not initialized.`);return this.controller.updateCamera(e,t,n)}updateCameraWithKeyframes(e,t,n=!0){if(!this.controller)throw Error(`controller is not initialized.`);return this.controller.updateCameraWithKeyframes(e,t,n)}get works(){return worksMap.get(this)||emptyWorks}get work(){return this.works[0]}get observers(){return this.work.observers}get models(){return this.modelScene.models}get model(){return this.modelScene.models[0]}load(e,t,n,r=!0){if(!this.renderer)throw Error(`renderer is not initialized`);let o=this.loadWorkTask.then(()=>isPromise(e)?e.then(e=>this.load_(e,t,n,r)):this.load_(e,t,n,r));return this.loadWorkTask=o.catch(e=>{this.throwError(e)}),o}load_(t,n,r,o=!0){var s,c,l,u,d,f,p,m,h,g;let _={};typeof r==`number`?_.duration=r:typeof r==`object`&&Object.assign(_,r),this.works===emptyWorks&&(_.duration===void 0&&(_.duration=0),_.effect===void 0&&(_.effect=`instant`));let v={};Object.assign(v,_.model),!v[`3d-tiles`]&&_[`3d-tiles`]&&(v[`3d-tiles`]=_[`3d-tiles`]),!v.textureOptions&&_.textureOptions&&(v.textureOptions=_.textureOptions),!v.textureOptions&&this.textureOptions&&(v.textureOptions=this.textureOptions);let y=[];if(Array.isArray(t))for(let e of t)e instanceof Work?y.push(e):typeof e!=`string`&&`work`in e?y.push(parseWork(e.work,e)):y.push(parseWork(e));else t instanceof Work?y.push(t):y.push(parseWork(t));_.mode===`add`&&(y=[].concat(this.works,y));let b;try{b=createWorks(y)}catch(e){return this.throwError(e),Promise.reject(e)}for(let e of b)this.bindWorkFetcher(e);n===void 0&&(n=`inherit`),n===`inherit`&&this.works===emptyWorks&&(n=`initial`);let S=this.currentMode,C=b.initial,w=C.work.observers[0],T=w?{workCode:w.work.workCode,panoIndex:w.panoIndex}:{workCode:C.work.workCode,panoIndex:0},E=(s=C.mode)==null?w?`Panorama`:`Mapview`:s,D={};if(n===`inherit`){let e=this.getCurrentState(),[t]=b.filter(t=>t.workCode===e.workCode);if(t)T={workCode:e.workCode,panoIndex:e.panoIndex},E=e.mode,D={longitude:e.latitude,latitude:e.latitude,fov:e.fov,distance:e.distance,offset:e.offset.clone()};else{n={mode:S};let e=(l=(c=b[0])==null?void 0:c.observers)==null?void 0:l[this.panoIndex];e?(n.workCode=e.work.workCode,n.panoIndex=e.panoIndex):typeof b.initial.panoIndex==`number`?(n.workCode=b.initial.work.workCode,n.panoIndex=b.initial.panoIndex):(n.mode===`Panorama`||n.mode===`VRPanorama`||n.mode===`XRPanorama`)&&(n.mode=`Mapview`),n.mode===S&&(n.longitude=this.camera.pose.longitude,n.latitude=this.camera.pose.latitude,n.fov=this.camera.pose.fov)}}if(n===`initial`&&(typeof C.panoIndex==`number`&&(T={workCode:C.work.workCode,panoIndex:C.panoIndex}),C.mode&&(E=C.mode),D={longitude:C.longitude,latitude:C.latitude,fov:C.fov,distance:C.distance,offset:(u=C.offset)==null?void 0:u.clone()}),typeof n==`object`){if(E=(d=n.mode)==null?S:d,typeof n.panoIndex==`number`){let e=b.getObserver({workCode:(p=(f=n.workCode)==null?C.work.workCode:f)==null?``:p,panoIndex:n.panoIndex});e&&(T={workCode:e.work.workCode,panoIndex:e.panoIndex})}D={longitude:n.longitude,latitude:n.latitude,fov:n.fov,distance:n.distance,offset:n.offset?new three.Vector3().copy(n.offset):void 0}}let O=(m=_.duration)==null?this.modeChangeDuration:m;(E===`Floorplan`||E===`Topview`||E===`Mapview`)&&S===E&&(O=0);let k=`fly`;(E===`Panorama`||E===`VRPanorama`||E===`XRPanorama`)&&S===E&&(k=(h=_.effect)==null?`fade`:h),this.emit(`works.request`,createEvent(`works.request`,{input:t,works:b,userAction:o}));let A=(e,t,r)=>{let s=this.getCurrentState(),c=Object.assign(Object.assign({mode:e},t),r);n===`inherit`&&(c=this.getCurrentState()),this.pano=t;let l=Object.assign(Object.assign({initial:{state:c,currentState:s,duration:O,effect:k,userAction:o}},this.commonParams()),this.controllerInits[e]),u=Controllers[c.mode].initAnimationEndState(l);if(this.controller&&S===e)this.controller.updateWork(b,u,{effect:k,duration:O},o)===!1&&(this.controller.destroy(),this.controller=this.applyController(e,l));else{if(this.controller)this.controller.destroy();else{let t=Controllers[e].initAnimationEndState(l);this.camera.setFromPose(t),this.emit(`camera.update`,createEvent(`camera.update`,{state:this.getCurrentState(),userAction:o}))}this.controller=this.applyController(e,l);let t=createEvent(`mode.change`,{prevMode:S,mode:e,state:u,userAction:o});try{this.emit(`mode.change`,t)}catch(e){console.error(e)}}this.updateTime(this.currentUpdateArgs.time,0,...this.currentUpdateArgs.args)};worksMap.set(this,b);let j=Promise.resolve();if(E===e.Mode.Floorplan||E===e.Mode.Topview||E===e.Mode.Mapview||E===e.Mode.Model){this.modelScene.loaded===!1&&(this.camera.setFromPose(D),assignPose(this.state,this.camera.pose));let e=this.modelScene.setModels(b,v);j=Promise.all(e.map(e=>e.loadedReady)).then(()=>{this.needsRender=!0,A(E,T,D),this.emit(`camera.update`,createEvent(`camera.update`,{state:this.getCurrentState(),userAction:o}))})}else{A(E,T,D);let e=this.controller,t=!1;this.modelScene.autoRefine=!1;let n=()=>{this.works===b&&t===!1&&(this.needsRender=!0,this.emit(`camera.update`,createEvent(`camera.update`,{state:this.getCurrentState(),userAction:o})),t=!0,this.modelScene.autoRefine=!0),e.off(`pano.arrived`,n),e.off(`pano.cancel`,n)},r=this.modelScene.setModels(b,v);j=Promise.all(r.map(e=>e.initReady)).then(noop),e.once(`pano.arrived`,n),e.once(`pano.cancel`,n),setTimeout(n,((g=_.duration)==null?this.modeChangeDuration:g)+1e3)}return this.emit(`works.load`,createEvent(`works.load`,{input:t,userAction:o,works:b})),j.then(()=>this.ready()).then(()=>{var e;this.emit(`works.ready`,createEvent(`works.ready`,{input:t,userAction:o,works:b})),(e=this.analysis)==null||e.work(b)})}reset(){let e=this.loadWorkTask.then(()=>this.reset_());return this.loadWorkTask=e.catch(e=>{this.throwError(e)}),e}reset_(){return new Promise(e=>{var t;this.controller&&(this.controller.destroy(),this.controller=void 0);let n=this.modelScene.parameter;n.pano0&&n.pano0.map.dispose(),n.pano1&&n.pano1.map!==((t=n.pano0)==null?void 0:t.map)&&n.pano1.map.dispose(),n.set({pano0:null,pano1:null,modelAlpha:1}),worksMap.set(this,emptyWorks),this.modelScene.setModels(emptyWorks,{forceReplaceImmediately:!0}),this.renderer&&this.modelScene.update(this.renderer,this.camera),this.needsRender=!0,this.currentMode=`Panorama`,this.pano={workCode:``,panoIndex:0},this.camera.setFromPose({distance:0,fov:DEFAULT_CAMERA_FOV,longitude:0,latitude:0,offset:new three.Vector3(0,0,0)}),this.state={mode:this.currentMode,workCode:this.pano.workCode,panoIndex:this.pano.panoIndex,longitude:this.camera.pose.longitude,latitude:this.camera.pose.latitude,fov:this.camera.pose.fov,offset:this.camera.pose.offset.clone(),distance:this.camera.pose.distance},this.camera.needsRender=!1,this.needsRender=!1,e()})}changeMode(t,n={},r,o=!0,s=!1){return new Promise((c,l)=>{var u,d,f,p;if(!this.renderer)throw Error(`renderer is not initialized.`);n=Object.assign({},n);let m=0;this.controller&&(m=typeof r==`number`?r:(u=r==null?void 0:r.duration)==null?this.modeChangeDuration:u);let h=`fly`;this.controller&&typeof r==`object`&&r.effect&&(h=r.effect);let g=typeof n.panoIndex==`number`?{workCode:(p=(d=n.workCode)==null?(f=this.work)==null?void 0:f.workCode:d)==null?``:p,panoIndex:n.panoIndex}:this.pano;if(!e.Mode.hasOwnProperty(t)){let e=Error(`mode "${t}" is not existed`);this.throwError(e),l(e);return}if((t===e.Mode.Panorama||t===e.Mode.VRPanorama||t===e.Mode.XRPanorama)&&!this.works.getObserver(g)){let e=Error(`PanoId ${panoStringify(g)} not existed.`);this.throwError(e),l(e);return}(t===e.Mode.Floorplan||t===e.Mode.Topview||t===e.Mode.Mapview||t===e.Mode.Model)&&this.modelScene.empty&&(m=0);let _=this.controller,v=this.currentMode,y=()=>{if(this.controller&&this.controller.stopMomentumMovement(),this.controller&&s===!1&&v===t)t===e.Mode.Panorama||t===e.Mode.Model||t===e.Mode.VRPanorama||t===e.Mode.XRPanorama?!panoEqual(this.pano,g)&&`moveToPano`in this.controller&&typeof this.controller.moveToPano==`function`?this.controller.moveToPano(g,Object.assign({duration:m},n),o):this.controller.updateCamera(n,m,o).catch(noop):(panoEqual(this.pano,g)||(this.pano=g),this.controller.updateCamera(n,m,o).catch(noop));else{let e=Object.assign(Object.assign({},n),g),r=Object.assign(Object.assign({initial:{state:e,currentState:this.getCurrentState(),duration:m,effect:h,userAction:o}},this.commonParams()),this.controllerInits[t]),s=Controllers[t].initAnimationEndState(r),c=createEvent(`mode.change.request`,{prevMode:this.currentMode,mode:t,state:s,userAction:o});if(this.emit(`mode.change.request`,c),!c.defaultPrevented){_&&_.destroy(),this.controller=this.applyController(t,r);let e=createEvent(`mode.change`,{prevMode:this.currentMode,mode:t,state:s,userAction:o});this.emit(`mode.change`,e)}}c()},b=AnimationFrameLoop.shared.getContext();b&&(typeof XRSession<`u`&&b instanceof XRSession&&b.end(),AnimationFrameLoop.shared.setContext(null)),t===e.Mode.VRPanorama?(this.requestFullscreen(),requestDeviceOrientationPermission().then(()=>y()).catch(e=>{let t=e instanceof Error?e:Error(String(e));this.exitFullscreen(),this.throwError(t),l(t)})):t===e.Mode.XRPanorama?requestXRSessionPermission().then(e=>{AnimationFrameLoop.shared.setContext(e),s=!0,y()}).catch(e=>{let t=e instanceof Error?e:Error(String(e));this.throwError(t),l(t)}):y()})}getPixels(e,t,n,r,o,s,c){if(!this.renderer)throw Error(`renderer is not initialized.`);let l=now(),u=this.renderer.getPixelRatio(),d=this.renderer.getRenderTarget(),f=this.getSize(new three.Vector2),p=0,m=0,h=1,g=1,_,v,y,b,S;typeof e==`number`?(p=e,typeof t==`number`&&(m=t),typeof n==`number`&&(h=n),typeof r==`number`&&(g=r),_=o,v=s,S=c):(p=e.x,m=e.y,h=e.width,g=e.height,_=e.pixelRatio,v=e.flipY,y=e.helperVisible,b=e.skipPanorama,S=e.buffer),p=Math.floor(p),m=Math.floor(m),h=Math.floor(h),g=Math.floor(g),_=Math.floor(_==null?u:_),v=v==null?!1:v;let C=this.helperVisible,w=this.modelScene.parameter.modelAlpha;this.helperVisible=y==null?this.helperVisible:y,b&&(this.controller instanceof Controllers.Panorama||this.controller instanceof Controllers.VRPanorama||this.controller instanceof Controllers.XRPanorama)&&b===!0&&this.modelScene.parameter.set(`modelAlpha`,1),this.modelScene.update(this.renderer,this.camera);let T=this.getPixelsRenderTarget;T.setSize(h*_,g*_),this.renderer.setRenderTarget(T),this.camera.pixelRatio=_,this.camera.resolution.set(h,g),this.camera.setViewOffset(f.width,f.height,p,f.height-m-g,h,g),this.camera.aspect=f.width/f.height,this.camera.updateTime(l),this.scene.update(this.renderer,this.camera);let E=this.renderer.autoClear,D=this.renderer.autoClearColor,O=this.renderer.autoClearDepth,k=this.renderer.autoClearStencil,A=scratchClearColor.copy(this.renderer.getClearColor()),j=this.renderer.getClearAlpha(),M=this.renderer.getScissorTest();this.renderer.autoClear=!0,this.renderer.autoClearColor=!0,this.renderer.autoClearDepth=!0,this.renderer.autoClearStencil=!0,this.renderer.setScissorTest(!1);let N=this.scene.background;this.scene.background=this.camera.isOrthographicCamera?null:N,this.renderer.render(this.scene,this.camera),this.scene.background=N,this.renderer.autoClear=E,this.renderer.autoClearColor=D,this.renderer.autoClearDepth=O,this.renderer.autoClearStencil=k,this.renderer.setClearColor(A,j),this.renderer.setScissorTest(M),this.helperVisible=C,w===void 0?this.modelScene.parameter.reset(`modelAlpha`):this.modelScene.parameter.set(`modelAlpha`,w),this.renderer.setRenderTarget(d),this.camera.clearViewOffset(),this.camera.pixelRatio=u,this.camera.resolution.copy(f),this.camera.aspect=this.camera.resolution.width/this.camera.resolution.height,this.camera.updateTime(l),this.modelScene.update(this.renderer,this.camera),this.scene.update(this.renderer,this.camera);let P=h*_,F=g*_,I=P*F,L=I*4;if(S){if(S.length!==L)throw Error(`buffer length is not equals pixels ${L}`)}else S=new Uint8Array(L);if(this.renderer.readRenderTargetPixels(T,0,0,h*_,g*_,S),v){let e=I/2;for(let t=0,n=0,r=0,o=0;n<e;n++)for(o=(F-Math.floor(n/P)-1)*P+n%P,r=0;r<4;r++)t=S[n*4+r],S[n*4+r]=S[o*4+r],S[o*4+r]=t}return S}getElement(){var e;return(e=this.renderer)==null?void 0:e.domElement}render(e){let t=this.renderer;if(!t)return;let n=t.getRenderTarget();t.setRenderTarget(null);let r=t.autoClear,o=t.autoClearColor,s=t.autoClearDepth,c=t.autoClearStencil,l=scratchClearColor.copy(t.getClearColor()),u=t.getClearAlpha(),d=t.getViewport(scratchViewport),f=t.getScissor(scratchScissor),p=t.getScissorTest();t.autoClear=!0,t.autoClearColor=!0,t.autoClearDepth=!0,t.autoClearStencil=!0;let m=t.getSize(scratchRenderSize),h=Math.floor(m.x*this.viewport.left),g=Math.floor(m.y*this.viewport.bottom),_=Math.floor(m.x*this.viewport.width),v=Math.floor(m.y*this.viewport.height);t.setClearColor(this.backgroundColor,this.backgroundAlpha),t.setViewport(h,g,_,v),t.setScissor(h,g,_,v);let y=this.viewport.bottom!==0||this.viewport.left!==0||this.viewport.width!==1||this.viewport.height!==1;t.setScissorTest(y);let b=this.scene.background;this.scene.background=this.camera.isOrthographicCamera?null:b;let S=!0;if(this.controller&&this.controller.render()&&(S=!1),S){let e=this.fiveRenderer.render(t,this.scene,this.modelScene,this.camera,this.needsRender);this.poweredByRealsee&&e&&renderPoweredByRealsee(t)}this.scene.background=b,t.autoClear=r,t.autoClearColor=o,t.autoClearDepth=s,t.autoClearStencil=c,t.setClearColor(l,u),t.setViewport(d),t.setScissor(f),t.setScissorTest(p),t.setRenderTarget(n),e&&AnimationFrameLoop.shared.add(e,!0)}updateTime(e,t,...n){if(this.currentUpdateArgs={time:e,args:n},this.destroyed)return;if(this.renderer&&ktx2.detectSupport(this.renderer),this.syncingState=this.syncState(e,t),this.controller&&this.controller.updateTime(e,t,...n),this.renderer&&(this.camera.pixelRatio=this.renderer.getPixelRatio(),this.getSize(this.camera.resolution),this.camera.aspect=this.camera.resolution.width/this.camera.resolution.height),this.camera.controllerMode=this.currentMode,this.camera.updateTime(e),this.renderer){let e=this.modelScene.loaded,t=this.modelScene.refined;this.modelScene.update(this.renderer,this.camera),e===!1&&this.modelScene.loaded===!0&&(this.controller&&this.controller.updateModel(this.modelScene),AnimationFrameLoop.shared.add(()=>{this.emit(`models.load`,createEvent(`models.load`,{modelScene:this.modelScene}))},!0,0,10)),t===!1&&this.modelScene.refined===!0&&AnimationFrameLoop.shared.add(()=>{this.emit(`models.refined`,createEvent(`models.refined`,{modelScene:this.modelScene}))},!0,0,10)}if(this.camera.autoNearFar){scratchBox3.makeEmpty(),scratchBox3.expandByObject(this.modelScene.boundingMesh);let t=scratchBox3.getBoundingSphere(scratchSphere),n=t.radius*2;t.containsPoint(this.camera.position)||(n=this.camera.position.distanceTo(t.center)+t.radius),n=clamp$1(n,800);let r=n/1e4;r=clamp$1(r,.03,.1),this.camera.near!==r&&(this.camera.near=r),this.camera.far!==n&&(this.camera.far=n),this.camera.updateTime(e)}if(this.renderer){let e=this.modelScene.visible;this.modelScene.visible=!1,this.scene.update(this.renderer,this.camera),this.modelScene.visible=e}if(this.syncingState=!1,this.controller&&this.controller.needsRender===!0&&(this.controller.needsRender=!1,this.needsRender=!0),this.camera.needsRender===!0&&(this.camera.needsRender=!1,this.needsRender=!0),this.modelScene.needsRender===!0&&(this.modelScene.needsRender=!1,this.needsRender=!0),this.scene.needsRender===!0&&(this.scene.needsRender=!1,this.needsRender=!0),this.pbmGaussianSplattingRenderMesh&&this.pbmGaussianSplattingRenderMesh.needsRender===!0&&(this.pbmGaussianSplattingRenderMesh.needsRender=!1,this.needsRender=!0),this.onlyRenderIfNeeds!==!0&&(this.needsRender=!0),this.paused===!0)return;let r=createEvent(`render.prepare`,{needsRender:this.needsRender});this.emit(`render.prepare`,r),r.defaultPrevented&&(this.needsRender=!1);let o=this.needsRender;this.render(),this.needsRender=!1,this.emit(`render`,createEvent(`render`,{needsRender:o})),this.hasListener(`fps`)&&(this.fps.testTime&&e-this.fps.testTime<1e3?this.fps.testCount++:(this.emit(`fps`,this.fps.testCount),this.fps.testTime=e,this.fps.testCount=0))}pause(){this.paused=!0,this.renderer&&this.renderer instanceof InternalWebGLRenderer&&this.renderer.clear(!0,!0,!0)}play(){this.needsRender=!0,this.paused=!1}moveToPano(t,n={},r=!0){let{controller:o,renderer:s}=this;if(!o)return this.throwError(Error(`controller is not initialized.`)),Promise.resolve();if(!s)return this.throwError(Error(`renderer is not initialized.`)),Promise.resolve();typeof t==`number`&&this.pano.workCode&&(t={workCode:this.pano.workCode,panoIndex:t});let c=this.works.getObserver(t);if(!c)return this.throwError(Error(`pano ${JSON.stringify(t)} not existed.`)),Promise.resolve();let l={workCode:c.work.workCode,panoIndex:c.panoIndex};return`moveToPano`in o&&typeof o.moveToPano==`function`?o.moveToPano(l,n,r):c&&(this.pano=l,this.once(`initAnimation.start`,e=>{n.moveStartCallback&&n.moveStartCallback(e.state)}),this.once(`initAnimation.end`,e=>{n.moveEndCallback&&n.moveEndCallback(e.state)}),this.changeMode(e.Mode.Panorama,n,{effect:n.effect},r)),this.ready()}preloadPano(e,t=noop){let n=this.works.getObserver(e);if(!n)return Promise.reject(Error(`Pano ${JSON.stringify(e)} never found`));let r=[`right`,`left`,`up`,`down`,`front`,`back`],o=now();return Promise.all(r.map(e=>{let t=panoStringify({panoIndex:n.panoIndex,workCode:n.work.workCode}),r=Object.assign({key:`pano.${t}.${e}`},pick(this.imageOptions,[`size`,`format`,`quality`,`forceUseExifOrientation`,`mappings`])),o=n.work.getURL(n.images[e]),s=this.imageOptions.transform?this.imageOptions.transform(o,r):imageURL(o,r);return getFetcher(this.fiveId,n.work).preload(s)})).then(()=>{let e=now()-o;return t(e),e})}project2d(e,t=!1){if(!this.renderer)return null;if(t){let t=this.camera.position,n=e.clone().sub(t),r=new three.Raycaster(t,n.clone().normalize());r.params.Points={threshold:.1};let[o]=this.modelScene.intersectRaycaster(r);if(o&&o.distance+.01<n.length())return null}let n=e.clone().project(this.camera);if(Math.abs(n.z)>1)return null;let r=this.renderer.getSize(new three.Vector2),o=r.x*this.viewport.width,s=r.y*this.viewport.height,c=r.x*this.viewport.left+(n.x+1)/2*o,l=r.y*(1-this.viewport.bottom-this.viewport.height)+(-n.y+1)/2*s;return new three.Vector2(c,l)}getCurrentState(){return Object.assign(Object.assign({},this.camera.copyPose()),{mode:this.currentMode,workCode:this.pano.workCode,panoIndex:this.pano.panoIndex})}setState(e,t=!1,n=!0){var r,o,s,c,l,u,d,f,p,m;e=pick(e,[`mode`,`workCode`,`panoIndex`,`longitude`,`latitude`,`fov`,`offset`,`distance`]),e.offset&&!(e instanceof three.Vector3)&&(e.offset=new three.Vector3(e.offset.x,e.offset.y,e.offset.z));let h;if(typeof e.panoIndex==`number`)if(e.workCode)h={workCode:e.workCode,panoIndex:e.panoIndex};else{let t=(o=(r=this.work)==null?void 0:r.workCode)==null?``:o,n=this.state.workCode;this.works.filter(e=>e.workCode===n).length>0&&(t=n),h={workCode:t,panoIndex:e.panoIndex}}let g=(s=e.mode)==null?this.state.mode:s,_,v,y,b,S;if(this.controller&&this.controller.stopMomentumMovement(),this.state.mode!==g){if(g===`VRPanorama`){this.changeMode(`VRPanorama`,void 0,void 0,!0);return}let t={workCode:h==null?void 0:h.workCode,panoIndex:h==null?void 0:h.panoIndex};typeof e.longitude==`number`&&(t.longitude=e.longitude),typeof e.latitude==`number`&&(t.latitude=e.latitude),typeof e.fov==`number`&&(t.fov=e.fov),typeof e.distance==`number`&&(t.distance=e.distance),e.offset instanceof three.Vector3&&(t.offset=e.offset);let n=Object.assign(Object.assign({initial:{state:t,currentState:this.getCurrentState(),duration:this.modeChangeDuration,effect:`fly`,userAction:!1}},this.commonParams()),this.controllerInits[g]),r=Controllers[g].initAnimationEndState(n);_=r.longitude,v=r.latitude,y=r.fov,b=r.offset,S=r.distance}else _=(c=e.longitude)==null?this.state.longitude:c,v=(l=e.latitude)==null?this.state.latitude:l,y=(u=e.fov)==null?this.state.fov:u,b=(d=e.offset)==null?this.state.offset:d,S=(f=e.distance)==null?this.state.distance:f;let C={workCode:(h==null?this.pano:h).workCode,panoIndex:(h==null?this.pano:h).panoIndex,mode:g,longitude:_,latitude:v,fov:y,offset:b,distance:S};this.emit(`state.set`,createEvent(`state.set`,{userAction:n,state:C})),stateEqual(this.state,C)||(this.controller&&C.mode===`VRPanorama`&&C.mode!==this.state.mode?(assignState(this.state,C),this.changeMode(`VRPanorama`)):this.controller&&C.mode===`XRPanorama`&&C.mode!==this.state.mode?(assignState(this.state,C),this.changeMode(`XRPanorama`)):(assignState(this.state,C),this.controller&&n&&(this.controller.userAction=!1),t&&this.state.mode===C.mode&&(this.syncingState=this.syncState(now(),0,t),this.syncingState&&((p=this.controller)==null||p.updateTime(now(),0),this.syncingState=!1)),this.emit(`state.change`,createEvent(`state.change`,{userAction:n,state:this.state})),(m=this.analysis)==null||m.state(this.works,this.state)))}syncState(t,n,r=!1){let o=this.stateSynced;if(this.stateSynced=!1,!this.controller)return!1;if(this.state.mode!==this.currentMode){let e={mode:this.state.mode,workCode:this.state.workCode,panoIndex:this.state.panoIndex,longitude:this.state.longitude,latitude:this.state.latitude,fov:this.state.fov,offset:this.state.offset,distance:this.state.distance};return this.changeMode(this.state.mode,e,this.modeChangeDuration,this.controller.userAction),!0}if(!this.controller.isReady())return!1;if(this.controller instanceof Controllers.Model){if(notSimilarVector3(this.camera.pose.offset,this.state.offset)){let e={longitude:this.state.longitude,latitude:this.state.latitude,fov:this.state.fov,offset:this.state.offset};return this.controller.moveToPosition(this.state.offset,Object.assign(Object.assign({},e),{duration:r?0:void 0}),!1),!0}}else{let e={workCode:this.state.workCode,panoIndex:this.state.panoIndex};if(!panoEqual(e,this.pano)&&`moveToPano`in this.controller&&typeof this.controller.moveToPano==`function`){let t={longitude:this.state.longitude,latitude:this.state.latitude,fov:this.state.fov,offset:this.state.offset,distance:this.state.distance};return this.controller.moveToPano(e,t,!1),!0}}if(this.controller instanceof Controllers.Floorplan||this.controller instanceof Controllers.Topview||this.controller instanceof Controllers.Mapview){let e=1,t=.2,n=.2,o=Math.PI/45,s=r?this.state.fov:stepNumber(this.camera.pose.fov,this.state.fov,1),c=Math.abs(this.camera.pose.distance-this.state.distance),l=c>n*15?c/15:.2,u=r?this.state.distance:stepNumber(this.camera.pose.distance,this.state.distance,l),d=this.camera.pose.offset.distanceTo(this.state.offset),f=d>n*15?d/15:n,p=r?new three.Vector3().copy(this.state.offset):stepVector(this.camera.pose.offset,this.state.offset,f),{longitude:m,latitude:h}=r?{longitude:this.state.longitude,latitude:this.state.latitude}:stepCoordinates({longitude:this.camera.pose.longitude,latitude:this.camera.pose.latitude},{longitude:this.state.longitude,latitude:this.state.latitude},o);if(notSimilarValue(s,this.camera.pose.fov)||notSimilarVector3(p,this.camera.pose.offset)||notSimilarValue(u,this.camera.pose.distance)||notSimilarValue(m,this.camera.pose.longitude,Math.PI*2)||notSimilarValue(h,this.camera.pose.latitude)){let e={x:p.x,y:p.y,z:p.z},t={fov:s};return Object.assign(e,{distance:u}),Object.assign(t,{longitude:m,latitude:h}),this.controller.stopMomentumMovement(),this.controller.cameraMotion.set(t,0).catch(noop),this.controller.locationMotion.set(e,0).catch(noop),!0}}else{let e=1,t=Math.PI/45,n=r?this.state.fov:stepNumber(this.camera.pose.fov,this.state.fov,1),{longitude:o,latitude:s}=r?{longitude:this.state.longitude,latitude:this.state.latitude}:stepCoordinates({longitude:this.camera.pose.longitude,latitude:this.camera.pose.latitude},{longitude:this.state.longitude,latitude:this.state.latitude},t),c=this.state.distance,l=new three.Vector3().copy(this.state.offset);if(notSimilarValue(c,this.camera.pose.distance)&&(this.state.distance=this.camera.pose.distance),notSimilarVector3(l,this.camera.pose.offset)&&(this.state.offset=this.camera.pose.offset.clone()),notSimilarValue(o,this.camera.pose.longitude,Math.PI*2)||notSimilarValue(s,this.camera.pose.latitude)||notSimilarValue(n,this.camera.pose.fov))return this.controller.stopMomentumMovement(),this.controller.cameraMotion.set({longitude:o,latitude:s,fov:n},0).catch(noop),!0}if(this.stateSynced=!0,o===!1&&this.emit(`state.synced`,createEvent(`state.synced`,{userAction:!1,state:this.state})),this.readyCallbacks.length&&this.stateSynced){let t=this.currentMode;if(!(t===e.Mode.Floorplan||t===e.Mode.Topview||t===e.Mode.Mapview||t===e.Mode.Model)||this.modelScene.loaded){let e=this.readyCallbacks.slice();this.readyCallbacks.length=0;for(let t of e)this.controller instanceof Controllers.Panorama&&t.tile===!0&&!this.controller.isTileReady()?this.readyCallbacks.push(t):t()}}return!1}ready(e={}){return new Promise(t=>{var n;this.readyCallbacks.push(Object.assign(t,{tile:(n=e.tile)==null?!1:n}))}).then(()=>this.model.initReady).then(noop)}requestFullscreen(){var e;if(!isMobile)return;let t=(e=this.getElement())==null?void 0:e.parentNode;t&&`requestFullscreen`in t&&typeof document<`u`&&document.fullscreenElement===null&&t.requestFullscreen()}exitFullscreen(){typeof document<`u`&&document.fullscreenElement&&`exitFullscreen`in document&&document.exitFullscreen()}throwError(e){this.hasListener(`error`)?this.emit(`error`,e):console.error(e)}bindModel(e){let t=()=>{AnimationFrameLoop.shared.add(()=>{this.emit(`model.load`,createEvent(`model.load`,{work:e.work,model:e,error:null}))},!0)},n=t=>{let{error:n}=t;this.emit(`model.error`,createEvent(`model.error`,{work:e.work,model:e,error:n})),this.throwError(n)},r=()=>{this.emit(`model.changeShownFloor`,createEvent(`model.changeShownFloor`,{work:e.work,model:e,error:null}))},o=t=>{this.emit(`models.tileLoad`,createEvent(`model.tileLoad`,{work:e.work,model:e,tile:t.tile}))},s=t=>{this.emit(`models.tileUnload`,createEvent(`model.tileUnload`,{work:e.work,model:e,tile:t.tile}))},c=()=>{e.removeEventListener(`load`,t),e.removeEventListener(`error`,n),e.removeEventListener(`changeShownFloor`,r),e.removeEventListener(`tileLoad`,o),e.removeEventListener(`tileUnload`,s),e.removeEventListener(`dispose`,c)};e.addEventListener(`load`,t),e.addEventListener(`error`,n),e.addEventListener(`changeShownFloor`,r),e.addEventListener(`tileLoad`,o),e.addEventListener(`tileUnload`,s),e.addEventListener(`dispose`,c),this.emit(`model.request`,createEvent(`model.request`,{work:e.work,model:e,error:null}))}bindWorkFetcher(e){let t=this,n=e.workCode,r=e.allowHosts,o=new Fetcher({get networkSubscribe(){return t.networkSubscribe},requestProxy(e){return Promise.resolve(e).then(e=>t.requestProxy(e,n)).then(e=>{let t=verifyURL(e,r);return t instanceof Error?Promise.reject(t):t})}});registerFetcher(this.fiveId,e,o)}commonParams(){return{fiveId:this.fiveId,scene:this.scene,xrCustomObjectsScene:this.xrCustomObjectsScene,helper:this.helperGroup,camera:this.camera,renderer:this.renderer,viewport:this.viewport,element:this.getElement(),works:this.works,imageOptions:this.imageOptions,enableWheel:this.enableWheel,extraElements:this.extraElements,videoTexture:this.videoTexture,modelScene:this.modelScene}}applyController(t,n){if(!this.renderer)throw Error(`renderer is not initialized.`);let r=Controllers[t];this.currentMode=t;let o=new r(n);for(let e of PROXY_CONTROLLER_EVENT_NAMES)o.on(e,(...t)=>{if(this.emit(e,...t))return!1});{let e=Controllers[t].initAnimationEndState(n),r=n.initial.userAction;stateEqual(this.state,e)||(assignState(this.state,e),this.emit(`state.change`,createEvent(`state.change`,{userAction:r,state:this.state}))),this.emit(`currentState.change`,createEvent(`currentState.change`,{userAction:r,state:this.getCurrentState()}))}return o.on(`camera.update`,e=>{var t;if(this.controller){let n=this.controller.getTargetState();e.userAction&&this.syncingState===!1&&this.state.mode===n.mode&&!stateEqual(this.state,n)&&(assignState(this.state,n),this.emit(`state.change`,createEvent(`state.change`,{userAction:e.userAction,state:this.state})),(t=this.analysis)==null||t.state(this.works,this.state))}this.emit(`currentState.change`,createEvent(`currentState.change`,{userAction:e.userAction,state:this.getCurrentState()}))}),o.on(`initAnimation.start`,e=>{var t;let{state:n,userAction:r}=e;r&&this.state.mode===n.mode&&!stateEqual(this.state,n)&&(assignState(this.state,n),this.emit(`state.change`,createEvent(`state.change`,{userAction:r,state:this.state})),(t=this.analysis)==null||t.state(this.works,this.state))}),o.on(`initAnimation.end`,e=>{var t;let{state:n,userAction:r}=e;this.pano={workCode:n.workCode,panoIndex:n.panoIndex},r&&this.state.mode===n.mode&&!stateEqual(this.state,n)&&(assignState(this.state,n),this.emit(`state.change`,createEvent(`state.change`,{userAction:r,state:this.state})),(t=this.analysis)==null||t.state(this.works,this.state))}),o.on(`pano.moveTo`,e=>{var t;let{state:n,userAction:r}=e;this.pano={workCode:n.workCode,panoIndex:n.panoIndex},r&&this.state.mode===n.mode&&!stateEqual(this.state,n)&&(assignState(this.state,n),this.emit(`state.change`,createEvent(`state.change`,{userAction:r,state:this.state})),(t=this.analysis)==null||t.state(this.works,this.state))}),o.on(`pano.arrived`,e=>{var t;let{state:n,userAction:r}=e;this.pano={workCode:n.workCode,panoIndex:n.panoIndex},r&&this.state.mode===n.mode&&!stateEqual(this.state,n)&&(assignState(this.state,n),this.emit(`state.change`,createEvent(`state.change`,{userAction:r,state:this.state})),(t=this.analysis)==null||t.state(this.works,this.state))}),o.on(`pano.cancel`,e=>{var t;let{state:n,userAction:r}=e;r&&this.state.mode===n.mode&&!stateEqual(this.state,n)&&(assignState(this.state,n),this.emit(`state.change`,createEvent(`state.change`,{userAction:r,state:this.state})),(t=this.analysis)==null||t.state(this.works,this.state))}),o.on(`pano.moveTo`,e=>{let{userAction:t}=e;this.emit(`currentState.change`,createEvent(`currentState.change`,{userAction:t,state:this.getCurrentState()}))}),o.on(`pano.request`,e=>{this.emit(`pano.request`,e),e.defaultPrevented||this.moveToPano(e.state,e.options,e.userAction)}),o.on(`vr.requestExit`,()=>{this.currentMode===e.Mode.VRPanorama&&(this.exitFullscreen(),this.changeMode(e.Mode.Panorama))}),o.on(`error`,e=>this.throwError(e)),o}removeEventListeners(){}get internalLightsEnabled(){let e=this.scene.children.find(e=>e.name===`internalLights`);return e?e.visible:!1}set internalLightsEnabled(e){let t=this.scene.children.find(e=>e.name===`internalLights`);t&&(t.visible=e),t=this.modelScene.children.find(e=>e.name===`internalLights`),t&&(t.visible=e)}get scissor(){return this.viewport}setScissor(e){return this.setViewport(e)}getPose(){let{longitude:e,latitude:t,fov:n,offset:r,distance:o}=this.camera.copyPose();return{longitude:e,latitude:t,fov:n,offset:r.clone(),distance:o}}getLongitudeAndLatitude(){let{longitude:e,latitude:t}=this.getPose();return{longitude:e,latitude:t}}getOffset(){return this.getPose().offset}getCameraLocal(){if(this.pano.workCode&&this.controller&&this.works){let e=this.works.getObserver(this.pano);if(e){let t=new three.Object3D;t.matrix.copy(e.matrix).premultiply(e.work.transform),t.matrix.decompose(t.position,t.quaternion,t.scale),t.matrixAutoUpdate=!1;let n=new three.Vector3(0,0,-1);n.applyQuaternion(this.camera.quaternion);let r=t.quaternion.clone().inverse();return n.applyQuaternion(r),{theta:Math.atan2(n.x,-n.z),phi:-Math.asin(n.y),lookAtVector:n}}}return null}addPass(e){this.fiveRenderer.composer.addPass(e)}removePass(e){let t=this.fiveRenderer.composer.passes.indexOf(e);t!==-1&&this.fiveRenderer.composer.passes.splice(t,1)}insertPass(e,t){this.fiveRenderer.composer.insertPass(e,t)}get renderMode(){return this.fiveRenderer.renderMode}set renderMode(e){this.fiveRenderer.renderMode=e}get enableHQ(){return this.fiveRenderer.renderMode===`point-cloud-high-quality`}set enableHQ(e){this.fiveRenderer.renderMode=e?`point-cloud-high-quality`:`default`,this.needsRender=!0}get enableEDL(){return this.eyeDomeLightingPass.enabled}set enableEDL(e){this.eyeDomeLightingPass.enabled=e,this.needsRender=!0}get enableAdaptiveLuminance(){return this.adaptiveLuminancePass.enabled}set enableAdaptiveLuminance(e){this.adaptiveLuminancePass.enabled=e,this.needsRender=!0}get enableIOSEDR(){return!1}set enableIOSEDR(e){}get enablePostProcessing(){return!0}set enablePostProcessing(e){}get modelSceneNeedsRender(){return this.modelScene.needsRender}set modelSceneNeedsRender(e){this.modelScene.needsRender=e}};Five.Mode={Panorama:`Panorama`,Model:`Model`,Floorplan:`Floorplan`,Topview:`Topview`,Mapview:`Mapview`,VRPanorama:`VRPanorama`,XRPanorama:`XRPanorama`},typeof window<`u`&&Object.assign(window,{__FIVE_DEBUG__:{THREE:three,constructor:Five,instances:Five_Instances}});var XRButton=class{static createButton(e){let t=document.createElement(`button`);function n(){t.style.display=``,t.style.cursor=`pointer`,t.style.left=`calc(50% - 50px)`,t.style.width=`100px`,t.textContent=`ENTER VR`,t.onmouseenter=function(){t.style.opacity=`1.0`},t.onmouseleave=function(){t.style.opacity=`0.5`},t.onclick=function(){e&&e()}}function r(){t.style.display=``,t.style.cursor=`auto`,t.style.left=`calc(50% - 75px)`,t.style.width=`150px`,t.onmouseenter=null,t.onmouseleave=null,t.onclick=null}function o(){r(),t.textContent=`VR NOT SUPPORTED`}function s(e){e.style.position=`absolute`,e.style.bottom=`20px`,e.style.padding=`12px 6px`,e.style.border=`1px solid #fff`,e.style.borderRadius=`4px`,e.style.background=`rgba(0,0,0,0.1)`,e.style.color=`#fff`,e.style.font=`normal 13px sans-serif`,e.style.textAlign=`center`,e.style.opacity=`0.5`,e.style.outline=`none`,e.style.zIndex=`999`}if(`xr`in navigator)return t.id=`VRButton`,t.style.display=`none`,s(t),navigator.xr.isSessionSupported(`immersive-vr`).then(function(e){e?n():o()}),t;{let e=document.createElement(`a`);return window.isSecureContext===!1?(e.href=document.location.href.replace(/^http:/,`https:`),e.innerHTML=`WEBXR NEEDS HTTPS`):(e.href=`https://immersiveweb.dev/`,e.innerHTML=`WEBXR NOT AVAILABLE`),e.style.left=`calc(50% - 90px)`,e.style.width=`180px`,e.style.textDecoration=`none`,s(e),e}}};exports.AdaptiveLuminancePass=AdaptiveLuminancePass,exports.AnimationFrameLoop=AnimationFrameLoop,exports.BoundingMesh=BoundingMesh,exports.Camera=Camera,exports.CustomShader=PBMCustomShader,exports.PBMCustomShader=PBMCustomShader,exports.EffectComposer=EffectComposer,exports.EyeDomeLightingPass=EyeDomeLightingPass,exports.Fetcher=Fetcher,exports.Five=Five,exports.FivePass=FivePass,exports.FiveRenderer=FiveRenderer,exports.FullScreenQuad=FullScreenQuad,exports.Histogram=Histogram,exports.InternalWebGLRenderer=InternalWebGLRenderer,exports.Model=Model,exports.ModelScene=ModelScene,exports.Motion=Motion,exports.NetworkSubscribe=NetworkSubscribe,exports.PBMContainer=PBMContainer,exports.PBMGSObject=PBMGaussianSplattingObject,exports.PBMGroup=PBMGroup,exports.PBMMesh=PBMMesh,exports.PBMMeshMaterial=PBMMeshMaterial,exports.PBMPanoFilter=PBMPanoFilter,exports.PBMPointCloud=PBMPointCloud,exports.PBMPointCloudMaterial=PBMPointCloudMaterial,exports.PBMSkinnedMesh=PBMSkinnedMesh,exports.PBMUpdateable=PBMUpdateable,exports.PROXY_CONTROLLER_EVENT_NAMES=PROXY_CONTROLLER_EVENT_NAMES,exports.PanoCircleMesh=PanoCircleMesh,exports.PanoCircleMeshCustom=PanoCircleMeshCustom,exports.PanoCircleMeshSolid=PanoCircleMeshSolid,exports.Parameter=Parameter,exports.Scene=Scene,exports.Subscribe=Subscribe,exports.TextureLoader=TextureLoader,exports.Tile=Tile,exports.Tile3D=Tile3D,exports.Tile3DModel=Tile3D,exports.TileCache=TileCache,exports.TileNode=TileNode,exports.TileRequestScheduler=TileRequestScheduler,exports.Tileset=Tileset,exports.Trajectory=Trajectory,exports.TrajectoryNode=TrajectoryNode,exports.Work=Work,exports.WorkResolvedObserver=WorkResolvedObserver,exports.XRButton=XRButton,exports.controllersDefaultInitArgs=controllersDefaultInitArgs,exports.coordinatesToVector=coordinatesToVector,exports.createDebugBoundingMesh=createDebugBoundingMesh,exports.createWorks=createWorks,exports.defaultImageURLTransform=imageURL,exports.draco=draco,exports.getViewportScale=getViewportScale,exports.headingToLongitude=headingToLongitude,exports.imageSupport=imageSupport,exports.isBoundingVolume=isBoundingVolume,exports.isPanoId=isPanoId,exports.ktx2=ktx2,exports.loadAt3d=loadAt3d,exports.loadB3dm=loadB3dm,exports.loadDome=loadDome,exports.loadDomez=loadDomez,exports.loadFbx=loadFbx,exports.loadGltf=loadGltf,exports.loadPbm=loadPbm,exports.loadPly=loadPly,exports.loadPnts=loadPnts,exports.loadSplat=loadSplat,exports.loadSpz=loadSpz,exports.loadX3p=loadX3p,exports.longitudeToHeading=longitudeToHeading,exports.makeBoundingVolume=makeBoundingVolume,exports.panoEqual=panoEqual,exports.panoParse=panoParse,exports.panoStringify=panoStringify,exports.parseWork=parseWork,exports.vectorToCoordinates=vectorToCoordinates,exports.workToJson=workToJson});
|
|
2325
|
+
----<<-计算从-}yn-中心到当前片段的平方距离----<<-由于-]|vv|{-已经按-\05E6-缩放,平方结果会被缩放-E-倍----<<-如果平方结果大于-E,说明在椭圆外,距离均值超过-\05E6-个标准差----sy|n-N-J-q|5]|vv|{9-]|vv|{6H----vs-5N-K-E;=6-qvpnqH--------rp@-p|y|-J-P|y|;toH--------<<-由于渲染的-}yn-按-\05E6-缩放,高斯公式中的逆协方差矩阵部分变成单位矩阵----<<-因此只剩下-5e-:-zrn{6-7-5e-:-zrn{6,而-zrn{-为零,所以是-e-7-e,即-N----sy|n-|}npv\b-J-r\x07}5:=;B-7-N6-7-P|y|;nH--------tylSntP|y|-J-rpA5p|y|;to9-|}npv\b6H\f`),PBMGaussianSplattingRenderMesh=class extends three.Mesh{constructor(){super(),this.renderData=null,this.needsRender=!1,this.sortWorker=null,this.depthIndex=new Uint32Array,this.splatIndexCapacity=0,this.activeSlot=null,this.pendingSlot=null,this.rebuildGeneration=0,this.forceClipperUniformRefresh=!1,this.incrementalUpdateInFlight=!1,this.dataTexture=null,this.transformsTexture=null,this.transformIndicesTexture=null,this.layerIndicesTexture=null,this.shTexture=null,this.usedSHDegree=0,this.onBeforeRender=(e,t,n)=>{let r=n,o=this.collectObjects(t);if(o.length===0){this.geometry.instanceCount=0;return}let s=0;o.forEach(e=>{e.usedSHDegree>s&&(s=e.usedSHDegree)}),this.setMaxShDegree(s),this.isSceneNeedsRebuild(o)&&(this.tryStartIncrementalUpdate(o)||(this.startPendingRebuild(o),this.gsSceneState.lastClipperHash=``));let c=o.filter(e=>e.transformChanged);c.length>0&&(this.syncTransformsForSlot(this.activeSlot,c),this.syncTransformsForSlot(this.pendingSlot,c),c.forEach(e=>{e.transformChanged=!1,e.selectedChanged=!1})),this.activeSlot&&this.updateSlotTextures(this.activeSlot),this.pendingSlot&&this.updateSlotTextures(this.pendingSlot);let l=new three.Matrix4().multiplyMatrices(r.perspectiveProjectionMatrix,r.matrixWorldInverse).elements;this.pendingSlot&&this.pendingSlot.renderData.initialBuildComplete&&this.pendingSlot.awaitingFirstSort?this.requestSort(this.pendingSlot,l):this.activeSlot&&this.requestSort(this.activeSlot,l);let u=this.getClipperHash(o);if((this.forceClipperUniformRefresh||u!==this.gsSceneState.lastClipperHash)&&(this.updateClipperUniforms(o),this.gsSceneState.lastClipperHash=u,this.forceClipperUniformRefresh=!1,this.needsRender=!0),this.activeSlot){let e=Math.min(this.usedSHDegree,this.activeSlot.renderData.maxShDegree);this.material.uniforms.u_maxShDegree.value=e,e>0&&!this.activeSlot.textures.shTexture?this.createSHTexture(this.activeSlot):e===0&&this.activeSlot.textures.shTexture&&(this.activeSlot.textures.shTexture.dispose(),this.activeSlot.textures.shTexture=null),this.material.uniforms.u_shTexture.value=this.activeSlot.textures.shTexture,this.renderData=this.activeSlot.renderData}else this.pendingSlot||(this.bindSlotTextures(null),this.material.uniforms.u_maxShDegree.value=0,this.geometry.instanceCount=0);this.material.uniforms.resolution.value.set(r.resolution.x,r.resolution.y)};let e=this.createGeometry(),t=this.createMaterial();this.geometry=e,this.material=t,this.frustumCulled=!1,this.renderOrder=-99999999999,this.gsSceneState={lastObjectsHash:``,lastClipperHash:``},this.sortWorker=new WorkerWrapper,this.sortWorker.postMessage({warmup:!0}),RenderData.warmupWasm(),this.sortWorker.onmessage=e=>{if(e.data.depthIndex){let t=e.data.generation;if(this.pendingSlot&&t===this.pendingSlot.generation){this.pendingSlot.awaitingFirstSort=!1,this.swapPendingToActive(e.data.depthIndex);return}this.activeSlot&&t===this.activeSlot.generation&&(this.activeSlot.awaitingFirstSort=!1,this.applyDepthIndex(e.data.depthIndex))}}}ensureSplatIndexCapacity(e){let t=this.geometry.getAttribute(`splatIndex`);if(e<=this.splatIndexCapacity)return t;let n=this.getExpandedCapacity(e),r=t.array,o=new Float32Array(n);o.set(r.subarray(0,Math.min(r.length,n)));let s=new three.InstancedBufferAttribute(o,1,!1,1);return s.setUsage(three.DynamicDrawUsage),this.geometry.setAttribute(`splatIndex`,s),this.splatIndexCapacity=n,this.geometry._maxInstanceCount=n,s}getExpandedCapacity(e){let t=Math.max(this.splatIndexCapacity,1);for(;t<e;)t*=2;return t}createGeometry(){let e=new three.InstancedBufferGeometry,t=new Float32Array([-1,-1,0,1,-1,0,1,1,0,-1,1,0]);e.setAttribute(`position`,new three.BufferAttribute(t,3));let n=new Uint16Array([0,1,2,0,2,3]);e.setIndex(new three.BufferAttribute(n,1)),this.splatIndexCapacity=1;let r=new Float32Array(this.splatIndexCapacity);for(let e=0;e<r.length;e++)r[e]=e;let o=new three.InstancedBufferAttribute(r,1,!1,1);return o.setUsage(three.DynamicDrawUsage),e.setAttribute(`splatIndex`,o),e._maxInstanceCount=this.splatIndexCapacity,e.instanceCount=0,e}createMaterial(){return new three.ShaderMaterial({vertexShader:vertex_default,fragmentShader:fragment_default,defines:{NUM_GS_LAYERS:0,NUM_GS_CLIPPERS:0},uniforms:{u_texture:{value:null},u_transforms:{value:null},u_transformIndices:{value:null},u_layerIndices:{value:null},u_numGsLayers:{value:0},u_numGsClippers:{value:0},u_layerClipperRanges:{value:[]},u_clipperMatricesInverse:{value:[]},u_shTexture:{value:null},u_shTextureSize:{value:new three.Vector2},u_maxShDegree:{value:0},resolution:{value:new three.Vector2}},side:three.DoubleSide,transparent:!0,blending:three.NormalBlending,depthTest:!0,depthWrite:!1})}createDefaultLayerClipperRanges(e){return Array.from({length:e},()=>new three.Vector2(-1,0))}createDefaultClipperMatrices(e){return Array.from({length:e},()=>new three.Matrix4)}createTextures(e){let t=new three.DataTexture(e.data,e.width,e.height,three.RGBAIntegerFormat,three.UnsignedIntType);t.internalFormat=`RGBA32UI`,t.minFilter=three.NearestFilter,t.magFilter=three.NearestFilter,t.needsUpdate=!0;let n=new three.DataTexture(e.transforms,e.transformsWidth,e.transformsHeight,three.RGBAFormat,three.FloatType);n.internalFormat=`RGBA32F`,n.minFilter=three.NearestFilter,n.magFilter=three.NearestFilter,n.needsUpdate=!0;let r=new three.DataTexture(e.transformIndices,e.transformIndicesWidth,e.transformIndicesHeight,three.RedIntegerFormat,three.UnsignedIntType);r.internalFormat=`R32UI`,r.minFilter=three.NearestFilter,r.magFilter=three.NearestFilter,r.needsUpdate=!0;let o=new three.DataTexture(e.layerIndices,e.layerIndicesWidth,e.layerIndicesHeight,three.RedIntegerFormat,three.UnsignedIntType);return o.internalFormat=`R32UI`,o.minFilter=three.NearestFilter,o.magFilter=three.NearestFilter,o.needsUpdate=!0,{dataTexture:t,transformsTexture:n,transformIndicesTexture:r,layerIndicesTexture:o,shTexture:null}}createSHTexture(e){let{renderData:t,textures:n}=e;n.shTexture&&(n.shTexture.dispose(),n.shTexture=null);let r=Math.min(this.usedSHDegree,t.maxShDegree),o=0;if(r>=1&&(o+=9),r>=2&&(o+=15),r>=3&&(o+=21),o===0)return;let s=4,c=o;c%4!=0&&(c=Math.ceil(c/4)*4);let l=t.numPoints*c/4,u=2048,d=Math.ceil(l/u),f=new Float32Array(u*d*4);for(let e=0;e<t.numPoints;e++){let n=c/4*e,o=0;if(t.sh1&&r>=1)for(let r=0;r<9;r++){let s=n+Math.floor(o/4),c=o%4,l=s*4+c;f[l]=t.sh1[e*9+r],o++}if(t.sh2&&r>=2)for(let r=0;r<15;r++){let s=n+Math.floor(o/4),c=o%4,l=s*4+c;f[l]=t.sh2[e*15+r],o++}if(t.sh3&&r>=3)for(let r=0;r<21;r++){let s=n+Math.floor(o/4),c=o%4,l=s*4+c;f[l]=t.sh3[e*21+r],o++}}n.shTexture=new three.DataTexture(f,u,d,three.RGBAFormat,three.FloatType),n.shTexture.internalFormat=`RGBA32F`,n.shTexture.minFilter=three.NearestFilter,n.shTexture.magFilter=three.NearestFilter,n.shTexture.needsUpdate=!0,this.material.uniforms.u_shTextureSize.value.set(u,d),this.material.uniforms.u_maxShDegree.value=r}setMaxShDegree(e){var t,n;if(e<0||e>2){console.warn(`现在只支持012三种阶数,你输入的是${e}`);return}let r=this.usedSHDegree;this.usedSHDegree=e,r!==e&&((t=this.activeSlot)!=null&&t.textures.shTexture&&(this.activeSlot.textures.shTexture.dispose(),this.activeSlot.textures.shTexture=null),(n=this.pendingSlot)!=null&&n.textures.shTexture&&(this.pendingSlot.textures.shTexture.dispose(),this.pendingSlot.textures.shTexture=null),this.material.uniforms.u_maxShDegree.value=e,e===0?this.material.uniforms.u_shTexture.value=null:this.activeSlot&&this.activeSlot.renderData.maxShDegree>0&&(this.createSHTexture(this.activeSlot),this.material.uniforms.u_shTexture.value=this.activeSlot.textures.shTexture))}bindSlotTextures(e){if(!e){this.dataTexture=null,this.transformsTexture=null,this.transformIndicesTexture=null,this.layerIndicesTexture=null,this.shTexture=null,this.material.uniforms.u_texture.value=null,this.material.uniforms.u_transforms.value=null,this.material.uniforms.u_transformIndices.value=null,this.material.uniforms.u_layerIndices.value=null,this.material.uniforms.u_shTexture.value=null;return}this.dataTexture=e.textures.dataTexture,this.transformsTexture=e.textures.transformsTexture,this.transformIndicesTexture=e.textures.transformIndicesTexture,this.layerIndicesTexture=e.textures.layerIndicesTexture,this.shTexture=e.textures.shTexture,this.material.uniforms.u_texture.value=this.dataTexture,this.material.uniforms.u_transforms.value=this.transformsTexture,this.material.uniforms.u_transformIndices.value=this.transformIndicesTexture,this.material.uniforms.u_layerIndices.value=this.layerIndicesTexture,this.material.uniforms.u_shTexture.value=this.shTexture}disposeSlot(e){e&&(e.renderData.dispose(),this.disposeTextures(e.textures))}disposeTextures(e){e.dataTexture.dispose(),e.transformsTexture.dispose(),e.transformIndicesTexture.dispose(),e.layerIndicesTexture.dispose(),e.shTexture&&(e.shTexture.dispose(),e.shTexture=null)}applyDepthIndex(e){this.depthIndex=e;let t=this.depthIndex.length,n=this.ensureSplatIndexCapacity(t);n.array.set(this.depthIndex,0),n.count=this.depthIndex.length,n.updateRange.offset=0,n.updateRange.count=t,n.needsUpdate=!0,this.geometry.instanceCount=this.depthIndex.length,this.needsRender=!0}swapPendingToActive(e){if(!this.pendingSlot)return;let t=this.activeSlot;this.activeSlot=this.pendingSlot,this.pendingSlot=null,this.renderData=this.activeSlot.renderData,this.ensureSplatIndexCapacity(this.activeSlot.renderData.numPoints),this.bindSlotTextures(this.activeSlot),this.activeSlot.sortDataUploaded=!0,this.forceClipperUniformRefresh=!0,this.applyDepthIndex(e),t&&this.disposeSlot(t)}createSlot(e){let t={generation:e.generation,renderData:e,textures:this.createTextures(e),awaitingFirstSort:!0,sortDataUploaded:!1};return this.usedSHDegree>0&&e.maxShDegree>0&&this.createSHTexture(t),t}updateSlotTextures(e){e.renderData.dataChanged&&(e.textures.dataTexture.needsUpdate=!0,e.renderData.dataChanged=!1),e.renderData.transformsChanged&&(e.textures.transformsTexture.needsUpdate=!0,e.textures.transformIndicesTexture.needsUpdate=!0,e.renderData.transformsChanged=!1)}postSortData(e){var t;let n=new Float32Array(e.renderData.positions.slice().buffer),r=new Float32Array(e.renderData.transforms.slice().buffer),o=new Uint32Array(e.renderData.transformIndices.slice().buffer);(t=this.sortWorker)==null||t.postMessage({sortData:{positions:n,transforms:r,transformIndices:o,vertexCount:e.renderData.numPoints,generation:e.generation}},[n.buffer,r.buffer,o.buffer]),e.sortDataUploaded=!0}requestSort(e,t){var n;e.renderData.initialBuildComplete&&((e.renderData.dataChanged||e.renderData.transformsChanged||!e.sortDataUploaded)&&this.postSortData(e),(n=this.sortWorker)==null||n.postMessage({viewProj:t}))}syncTransformsForSlot(e,t){e&&t.forEach(t=>{e.renderData.splatIndices.has(t)&&e.renderData.updateTransform(t)})}collectObjects(e){let t=[];return e.traverse(e=>{e instanceof PBMGaussianSplattingObject&&e.visible&&t.push(e)}),t.sort((e,t)=>{let n=e.uuid+e.gsViewLayerKey,r=t.uuid+t.gsViewLayerKey;return n<r?-1:n>r?1:0}),t}isSceneNeedsRebuild(e){let t=e.map(e=>`${e.uuid}:${e.gsViewLayerKey}`).join(`|`),n=t!==this.gsSceneState.lastObjectsHash;return this.gsSceneState.lastObjectsHash=t,n}getClipperHash(e){return e.map(e=>{let t=e.gsClippers.map(e=>{var t;return`${(t=e.floorIndex)==null?-1:t}:${e.clippingBoxMatrix.elements.join(`,`)}`}).join(`;`);return`${e.gsViewLayerKey}:${t}`}).join(`|`)}updateClipperCounts(e,t){let n=Math.max(0,e|0),r=Math.max(0,t|0),o=this.material.defines;(o.NUM_GS_LAYERS!==n||o.NUM_GS_CLIPPERS!==r)&&(o.NUM_GS_LAYERS=n,o.NUM_GS_CLIPPERS=r,this.material.needsUpdate=!0),this.material.uniforms.u_numGsLayers.value=e,this.material.uniforms.u_numGsClippers.value=t}updateClipperUniforms(e){var t,n,r,o;let s=(n=(t=this.activeSlot)==null?void 0:t.renderData)==null?null:n;if(!s){this.material.uniforms.u_layerClipperRanges.value=[],this.material.uniforms.u_clipperMatricesInverse.value=[],this.updateClipperCounts(0,0);return}let c=new Map;for(let t of e)c.has(t.gsViewLayerKey)||c.set(t.gsViewLayerKey,t.gsClippers);let l=s.layerKeys.length,u=0;for(let e of s.layerKeys)u+=((r=c.get(e))==null?[]:r).length;let d=this.createDefaultLayerClipperRanges(l),f=this.createDefaultClipperMatrices(u),p=0;for(let e of s.layerKeys){let t=s.layerKeyToIndex.get(e);if(t===void 0)continue;let n=(o=c.get(e))==null?[]:o,r=p,l=0;for(let e of n)f[p].getInverse(e.clippingBoxMatrix),p++,l++;l>0&&d[t].set(r,l)}this.material.uniforms.u_layerClipperRanges.value=d,this.material.uniforms.u_clipperMatricesInverse.value=f,this.updateClipperCounts(l,p)}startPendingRebuild(e){this.pendingSlot&&(this.disposeSlot(this.pendingSlot),this.pendingSlot=null),this.rebuildGeneration+=1;let t=new RenderData(e,this.rebuildGeneration);this.pendingSlot=this.createSlot(t)}tryStartIncrementalUpdate(e){if(!this.activeSlot||this.pendingSlot||this.incrementalUpdateInFlight)return!1;let t=this.activeSlot.renderData.getObjectsInOrder();if(!this.activeSlot.renderData.canIncrementalAppend(e))return!1;let n=e.slice(t.length);if(n.length===0)return!1;this.incrementalUpdateInFlight=!0;let r=this.activeSlot;return r.renderData.appendObjects(n).then(e=>{if(!e||this.activeSlot!==r||r.renderData.disposed)return;let t=r.textures;r.textures=this.createTextures(r.renderData),this.usedSHDegree>0&&r.renderData.maxShDegree>0&&this.createSHTexture(r),this.bindSlotTextures(r),this.ensureSplatIndexCapacity(r.renderData.numPoints),r.sortDataUploaded=!1,r.awaitingFirstSort=!0,this.disposeTextures(t),this.forceClipperUniformRefresh=!0,this.gsSceneState.lastClipperHash=``,this.needsRender=!0}).catch(e=>{console.warn(`Incremental append failed, fallback to rebuild:`,e)}).finally(()=>{this.incrementalUpdateInFlight=!1}),!0}dispose(){this.disposeSlot(this.pendingSlot),this.pendingSlot=null,this.disposeSlot(this.activeSlot),this.activeSlot=null,this.renderData=null,this.sortWorker&&this.sortWorker.terminate(),this.bindSlotTextures(null),this.geometry.dispose(),this.material.dispose()}},PBMGaussianSplattingTestMesh=class extends three.Mesh{constructor(){super(),this.onBeforeRender=(e,t,n)=>{this.collectObjects(t).length>0&&console.warn(`未开启webgl2, 3dgs仅支持在开启webgl2模式后使用`)}}collectObjects(e){let t=[];return e.traverse(e=>{e instanceof PBMGaussianSplattingObject&&e.visible&&t.push(e)}),t}},DEFAULT_MODE_CHANGE_DURATION=1e3,DEFAULT_CAMERA_FOV=90,DEFAULT_REQUEST_PROXY=e=>e.replace(`//vrlab-public.ljcdn.com/`,`//vr-public.realsee-cdn.cn/`).replace(`//vrlab-image4.ljcdn.com/`,`//vr-image-4.realsee-cdn.cn/`).replace(`//vrlab-image3.ljcdn.com/`,`//vr-image-3.realsee-cdn.cn/`).replace(`//vrlab-image2.ljcdn.com/`,`//vr-image-2.realsee-cdn.cn/`).replace(`//vrlab-image1.ljcdn.com/`,`//vr-image-1.realsee-cdn.cn/`),scratchSphere=new three.Sphere,scratchBox3=new three.Box3,scratchViewport=new three.Vector4,scratchScissor=new three.Vector4,scratchClearColor=new three.Color,scratchRenderSize=new three.Vector2,worksMap=new WeakMap,emptyWorks=createWorks([parseWork(null)]),Five_Instances={},Five=class e extends Subscribe{static get version(){return`6.8.0-alpha.23`}static get dracoPath(){return draco.decoderPath}static set dracoPath(e){draco.setDecoderPath(e)}static get ktx2Path(){return ktx2.transcoderPath}static set ktx2Path(e){ktx2.setTranscoderPath(e)}static get useNativeImageBitmap(){return canUseNativeImageBitmap()}static set useNativeImageBitmap(e){useNativeImageBitmap(e)}constructor(e={}){var t,n,r,o,s,c,l,u,d,f,p;if(super(),this.pbmGaussianSplattingRenderMesh=null,this.fiveId=createUuid(),Five_Instances[this.fiveId]=this,this.currentUpdateArgs={time:now(),args:[]},this.currentMode=`Panorama`,this.pano={workCode:``,panoIndex:0},this.needsRender=!1,this.onlyRenderIfNeeds=(t=e.onlyRenderIfNeeds)==null?!0:t,this.imageOptions=Object.assign({},(n=e.imageOptions)==null?{}:n),this.textureOptions=Object.assign({},(r=e.textureOptions)==null?{}:r),this.poweredByRealsee=(o=e.poweredByRealsee)==null?!0:o,this.backgroundColor=new three.Color((s=e.backgroundColor)==null?1579548:s),this.backgroundAlpha=(c=e.backgroundAlpha)==null?1:c,this.extraElements=[],this.controllerInits={Panorama:Object.assign({},e.panorama),Model:Object.assign({},e.model),Floorplan:Object.assign({},e.floorplan),Topview:Object.assign({},e.topview),Mapview:Object.assign({},e.mapview),VRPanorama:Object.assign({},e.vrPanorama),XRPanorama:Object.assign({},e.xrPanorama)},this.fps={testCount:0,testTime:now()},this.modeChangeDuration=(l=e.modeChangeDuration)==null?DEFAULT_MODE_CHANGE_DURATION:l,this.enableWheel=(u=e.enableWheel)==null?!0:u,typeof window<`u`)if(`renderer`in e)e.renderer instanceof InternalWebGLRenderer&&this.throwError(Error(`cannot render a internal renderer`)),this.renderer=e.renderer;else try{this.renderer=new InternalWebGLRenderer({preserveDrawingBuffer:e.preserveDrawingBuffer,antialias:e.antialias,webgl2:e.webgl2,logarithmicDepthBuffer:e.logarithmicDepthBuffer,precision:e.precision,powerPreference:e.powerPreference});let t=getViewportScale();this.renderer.setPixelRatio(t===1?window.devicePixelRatio:1),this.renderer.setSize(512,512),this.renderer.setClearColor(this.backgroundColor,this.backgroundAlpha)}catch(e){let t=e instanceof Error?e:Error(String(e));this.throwError(t)}this.getPixelsRenderTarget=new three.WebGLRenderTarget(1,1,{encoding:(f=(d=this.renderer)==null?void 0:d.outputEncoding)==null?three.sRGBEncoding:f,generateMipmaps:!1}),this.viewport=Object.assign({left:0,bottom:0,width:1,height:1},e.viewport),this.camera=new Camera(DEFAULT_CAMERA_FOV),this.scene=new Scene,this.xrCustomObjectsScene=new three.Scene,this.scene.add(this.xrCustomObjectsScene),this.scene.matrixAutoUpdate=!1,this.loadWorkTask=Promise.resolve(),this.requestProxy=(p=e.requestProxy)==null?DEFAULT_REQUEST_PROXY:p,this.networkSubscribe=new NetworkSubscribe,this.networkSubscribe.on(`network`,(e,t,n,r)=>{var o;this.emit(`network.resource`,createEvent(`network.resource`,{source:e,requestType:t,requestState:n,detail:r})),(o=this.analysis)==null||o.network(this.works,e,t,n,r)}),this.readyCallbacks=[],this.syncingState=!1,this.helperGroup=new three.Group,this.helperGroup.name=`helper`,this.helperGroup.matrixAutoUpdate=!1,this.scene.add(this.helperGroup),worksMap.set(this,emptyWorks),this.modelScene=new ModelScene({fiveId:this.fiveId}),this.modelScene.addEventListener(`model.create`,e=>{this.bindModel(e.model)}),this.scene.add(this.modelScene);let[m]=this.modelScene.setModels(emptyWorks,{forceReplaceImmediately:!0});defineProperty(m,`loaded`,{get(){return!1},set(e){}}),this.videoTexture=new three.VideoTexture(e.videoInstance||generateDefaultVideoElement());let h=initLights();this.scene.add(h),this.state={mode:this.currentMode,workCode:this.pano.workCode,panoIndex:this.pano.panoIndex,longitude:this.camera.pose.longitude,latitude:this.camera.pose.latitude,fov:this.camera.pose.fov,offset:this.camera.pose.offset.clone(),distance:this.camera.pose.distance},this.stateSynced=!1,this.destroyed=!1,this.paused=!0,typeof window<`u`&&(e.play!==!1&&this.play(),this.stopAnimationLoop=AnimationFrameLoop.shared.add((e,t,...n)=>{this.updateTime(e,t,...n)},!1,0,10));let g=()=>{typeof document<`u`&&document.fullscreenElement===null&&this.currentMode===`VRPanorama`&&this.controller.emit(`vr.requestExit`,createEvent(`vr.requestExit`,{}))},_=()=>{this.needsRender=!0};if(typeof document<`u`&&document.addEventListener(`fullscreenchange`,g,!1),this.renderer&&this.renderer.domElement.addEventListener(`webglcontextrestored`,_,!1),this.removeEventListeners=()=>{typeof document<`u`&&document.removeEventListener(`fullscreenchange`,g,!1),this.renderer&&this.renderer.domElement.removeEventListener(`webglcontextrestored`,_,!1)},this.plugins={},e.plugins&&e.plugins.length){for(let t of e.plugins)if(typeof t==`function`)t(this);else if(Array.isArray(t)){let[e,n,r]=t;if(typeof e==`function`){let t=e(this,r);typeof n==`string`&&(this.plugins[n]?this.throwError(Error(`plugin name ${n} is exists.`)):this.plugins[n]=t)}}}initLegacyEvent(this),this.fiveRenderer=new FiveRenderer,this.adaptiveLuminancePass=new AdaptiveLuminancePass,this.adaptiveLuminancePass.enabled=!1,this.fiveRenderer.composer.addPass(this.adaptiveLuminancePass),this.eyeDomeLightingPass=new EyeDomeLightingPass(this.camera),this.eyeDomeLightingPass.enabled=!1,this.fiveRenderer.composer.addPass(this.eyeDomeLightingPass),e.webgl2?(this.pbmGaussianSplattingRenderMesh=new PBMGaussianSplattingRenderMesh,this.scene.add(this.pbmGaussianSplattingRenderMesh)):this.scene.add(new PBMGaussianSplattingTestMesh)}get ident(){return this.fiveId}get panoIndex(){return this.pano.panoIndex}get panoId(){return panoStringify(this.pano)}dispose(){var e;if(this.destroyed===!0)return;delete Five_Instances[this.fiveId],this.emit(`dispose`),this.destroyed=!0,this.pause(),this.stopAnimationLoop&&(this.stopAnimationLoop(),this.stopAnimationLoop=void 0),this.off(),this.networkSubscribe.off(),this.controller&&(this.controller.destroy(),this.controller=void 0);let t=this.getElement();t&&t.parentNode&&t.parentNode.removeChild(t);let n=this.modelScene.parameter;n.pano0&&n.pano0.map.dispose(),n.pano1&&n.pano1.map!==((e=n.pano0)==null?void 0:e.map)&&n.pano1.map.dispose(),n.reset(`pano0`,`pano1`),this.modelScene.dispose(),this.scene.dispose(),this.xrCustomObjectsScene.dispose(),worksMap.set(this,emptyWorks),this.renderer&&this.renderer.render(new three.Scene,new three.Camera),this.fiveRenderer.dispose(),this.renderer instanceof InternalWebGLRenderer&&(this.renderer.forceContextLoss&&this.renderer.forceContextLoss(),this.renderer.dispose())}setViewport(e){Object.assign(this.viewport,e),this.needsRender=!0}get boundingMesh(){return this.modelScene.boundingMesh}get helperVisible(){return this.helperGroup.visible}set helperVisible(e){this.helperGroup.visible!==e&&(this.helperGroup.visible=e,this.emit(`helpers.visible`,createEvent(`helpers.visible`,{object:this.helperGroup})),this.needsRender=!0)}updateConfiguration(e,t=!0){let n=!1,r=!1;e.panorama&&(Object.assign(this.controllerInits.Panorama,omitUndefinedFields(e.panorama)),this.currentMode===`Panorama`&&(n=!0)),e.model&&(Object.assign(this.controllerInits.Model,omitUndefinedFields(e.model)),this.currentMode===`Model`&&(n=!0)),e.floorplan&&(Object.assign(this.controllerInits.Floorplan,omitUndefinedFields(e.floorplan)),this.currentMode===`Floorplan`&&(n=!0)),e.topview&&(Object.assign(this.controllerInits.Topview,omitUndefinedFields(e.topview)),this.currentMode===`Topview`&&(n=!0)),e.mapview&&(Object.assign(this.controllerInits.Mapview,omitUndefinedFields(e.mapview)),this.currentMode===`Mapview`&&(n=!0)),e.vrPanorama&&(Object.assign(this.controllerInits.VRPanorama,omitUndefinedFields(e.vrPanorama)),this.currentMode===`VRPanorama`&&(n=!0)),e.imageOptions&&(Object.assign(this.imageOptions,e.imageOptions),(this.currentMode===`Panorama`||this.currentMode===`VRPanorama`)&&(r=!0,n=!0)),e.textureOptions&&Object.assign(this.textureOptions,e.textureOptions),t&&n&&this.controller&&this.currentMode&&(!this.controller.updateConfiguration(this.controllerInits[this.currentMode])||r)&&this.changeMode(this.currentMode,this.getCurrentState(),0,!1,!0)}appendTo(e,t={}){if(!this.renderer)return;if(!(this.renderer instanceof InternalWebGLRenderer)){this.throwError(Error(`cannot call appendTo method when render a external renderer`));return}let n=this.getElement();if(!n)return;e.appendChild(n),this.refresh(t);let r=window.getComputedStyle(e).position;r!==`relative`&&r!==`absolute`&&r!==`fixed`&&r!==`sticky`&&(e.style.position=`relative`)}refresh(e={},t){var n,r,o;if(!this.renderer)return;let s=this.renderer.domElement.parentNode,{width:c=(n=s==null?void 0:s.offsetWidth)==null?512:n,height:l=(r=s==null?void 0:s.offsetHeight)==null?512:r}=e;if(c=Math.max(1,c),l=Math.max(1,l),!t){let e=getViewportScale(),n=typeof window<`u`?window.devicePixelRatio:1;if(t=(o=e===1?n:1)==null?1:o,t>1){let e=Math.max(c,l)*t,n=Math.min(this.renderer.capabilities.maxTextureSize,4096);e>n&&(t=Math.max(t/e*n,1),t=Math.floor(t*100)/100)}}this.renderer.setPixelRatio(t),this.renderer.setSize(c,l),this.needsRender=!0;let u=now(),d=u-this.currentUpdateArgs.time,f=this.currentUpdateArgs.args;this.updateTime(u,d,...f)}addExtraElement(e){return this.extraElements.indexOf(e)===-1&&(this.extraElements.push(e),this.controller&&this.controller.bindExtraElement(e)),()=>this.removeExtraElement(e)}removeExtraElement(e){let t=this.extraElements.indexOf(e);t!==-1&&(this.extraElements.splice(t,1),this.controller&&this.controller.unbindExtraElement(e))}getSize(e){if(!this.renderer)throw Error(`renderer is not initialized`);return this.renderer.getSize(e),e.x*=this.viewport.width,e.y*=this.viewport.height,e}getDrawingBufferSize(e){if(!this.renderer)throw Error(`renderer is not initialized`);return this.renderer.getDrawingBufferSize(e),e.x*=this.viewport.width,e.y*=this.viewport.height,e}updateCamera(e,t,n=!0){if(!this.controller)throw Error(`controller is not initialized.`);return this.controller.updateCamera(e,t,n)}updateCameraWithKeyframes(e,t,n=!0){if(!this.controller)throw Error(`controller is not initialized.`);return this.controller.updateCameraWithKeyframes(e,t,n)}get works(){return worksMap.get(this)||emptyWorks}get work(){return this.works[0]}get observers(){return this.work.observers}get models(){return this.modelScene.models}get model(){return this.modelScene.models[0]}load(e,t,n,r=!0){if(!this.renderer)throw Error(`renderer is not initialized`);let o=this.loadWorkTask.then(()=>isPromise(e)?e.then(e=>this.load_(e,t,n,r)):this.load_(e,t,n,r));return this.loadWorkTask=o.catch(e=>{this.throwError(e)}),o}load_(t,n,r,o=!0){var s,c,l,u,d,f,p,m,h,g;let _={};typeof r==`number`?_.duration=r:typeof r==`object`&&Object.assign(_,r),this.works===emptyWorks&&(_.duration===void 0&&(_.duration=0),_.effect===void 0&&(_.effect=`instant`));let v={};Object.assign(v,_.model),!v[`3d-tiles`]&&_[`3d-tiles`]&&(v[`3d-tiles`]=_[`3d-tiles`]),!v.textureOptions&&_.textureOptions&&(v.textureOptions=_.textureOptions),!v.textureOptions&&this.textureOptions&&(v.textureOptions=this.textureOptions);let y=[];if(Array.isArray(t))for(let e of t)e instanceof Work?y.push(e):typeof e!=`string`&&`work`in e?y.push(parseWork(e.work,e)):y.push(parseWork(e));else t instanceof Work?y.push(t):y.push(parseWork(t));_.mode===`add`&&(y=[].concat(this.works,y));let b;try{b=createWorks(y)}catch(e){return this.throwError(e),Promise.reject(e)}for(let e of b)this.bindWorkFetcher(e);n===void 0&&(n=`inherit`),n===`inherit`&&this.works===emptyWorks&&(n=`initial`);let S=this.currentMode,C=b.initial,w=C.work.observers[0],T=w?{workCode:w.work.workCode,panoIndex:w.panoIndex}:{workCode:C.work.workCode,panoIndex:0},E=(s=C.mode)==null?w?`Panorama`:`Mapview`:s,D={};if(n===`inherit`){let e=this.getCurrentState(),[t]=b.filter(t=>t.workCode===e.workCode);if(t)T={workCode:e.workCode,panoIndex:e.panoIndex},E=e.mode,D={longitude:e.latitude,latitude:e.latitude,fov:e.fov,distance:e.distance,offset:e.offset.clone()};else{n={mode:S};let e=(l=(c=b[0])==null?void 0:c.observers)==null?void 0:l[this.panoIndex];e?(n.workCode=e.work.workCode,n.panoIndex=e.panoIndex):typeof b.initial.panoIndex==`number`?(n.workCode=b.initial.work.workCode,n.panoIndex=b.initial.panoIndex):(n.mode===`Panorama`||n.mode===`VRPanorama`||n.mode===`XRPanorama`)&&(n.mode=`Mapview`),n.mode===S&&(n.longitude=this.camera.pose.longitude,n.latitude=this.camera.pose.latitude,n.fov=this.camera.pose.fov)}}if(n===`initial`&&(typeof C.panoIndex==`number`&&(T={workCode:C.work.workCode,panoIndex:C.panoIndex}),C.mode&&(E=C.mode),D={longitude:C.longitude,latitude:C.latitude,fov:C.fov,distance:C.distance,offset:(u=C.offset)==null?void 0:u.clone()}),typeof n==`object`){if(E=(d=n.mode)==null?S:d,typeof n.panoIndex==`number`){let e=b.getObserver({workCode:(p=(f=n.workCode)==null?C.work.workCode:f)==null?``:p,panoIndex:n.panoIndex});e&&(T={workCode:e.work.workCode,panoIndex:e.panoIndex})}D={longitude:n.longitude,latitude:n.latitude,fov:n.fov,distance:n.distance,offset:n.offset?new three.Vector3().copy(n.offset):void 0}}let O=(m=_.duration)==null?this.modeChangeDuration:m;(E===`Floorplan`||E===`Topview`||E===`Mapview`)&&S===E&&(O=0);let k=`fly`;(E===`Panorama`||E===`VRPanorama`||E===`XRPanorama`)&&S===E&&(k=(h=_.effect)==null?`fade`:h),this.emit(`works.request`,createEvent(`works.request`,{input:t,works:b,userAction:o}));let A=(e,t,r)=>{let s=this.getCurrentState(),c=Object.assign(Object.assign({mode:e},t),r);n===`inherit`&&(c=this.getCurrentState()),this.pano=t;let l=Object.assign(Object.assign({initial:{state:c,currentState:s,duration:O,effect:k,userAction:o}},this.commonParams()),this.controllerInits[e]),u=Controllers[c.mode].initAnimationEndState(l);if(this.controller&&S===e)this.controller.updateWork(b,u,{effect:k,duration:O},o)===!1&&(this.controller.destroy(),this.controller=this.applyController(e,l));else{if(this.controller)this.controller.destroy();else{let t=Controllers[e].initAnimationEndState(l);this.camera.setFromPose(t),this.emit(`camera.update`,createEvent(`camera.update`,{state:this.getCurrentState(),userAction:o}))}this.controller=this.applyController(e,l);let t=createEvent(`mode.change`,{prevMode:S,mode:e,state:u,userAction:o});try{this.emit(`mode.change`,t)}catch(e){console.error(e)}}this.updateTime(this.currentUpdateArgs.time,0,...this.currentUpdateArgs.args)};worksMap.set(this,b);let j=Promise.resolve();if(E===e.Mode.Floorplan||E===e.Mode.Topview||E===e.Mode.Mapview||E===e.Mode.Model){this.modelScene.loaded===!1&&(this.camera.setFromPose(D),assignPose(this.state,this.camera.pose));let e=this.modelScene.setModels(b,v);j=Promise.all(e.map(e=>e.loadedReady)).then(()=>{this.needsRender=!0,A(E,T,D),this.emit(`camera.update`,createEvent(`camera.update`,{state:this.getCurrentState(),userAction:o}))})}else{A(E,T,D);let e=this.controller,t=!1;this.modelScene.autoRefine=!1;let n=()=>{this.works===b&&t===!1&&(this.needsRender=!0,this.emit(`camera.update`,createEvent(`camera.update`,{state:this.getCurrentState(),userAction:o})),t=!0,this.modelScene.autoRefine=!0),e.off(`pano.arrived`,n),e.off(`pano.cancel`,n)},r=this.modelScene.setModels(b,v);j=Promise.all(r.map(e=>e.initReady)).then(noop),e.once(`pano.arrived`,n),e.once(`pano.cancel`,n),setTimeout(n,((g=_.duration)==null?this.modeChangeDuration:g)+1e3)}return this.emit(`works.load`,createEvent(`works.load`,{input:t,userAction:o,works:b})),j.then(()=>this.ready()).then(()=>{var e;this.emit(`works.ready`,createEvent(`works.ready`,{input:t,userAction:o,works:b})),(e=this.analysis)==null||e.work(b)})}reset(){let e=this.loadWorkTask.then(()=>this.reset_());return this.loadWorkTask=e.catch(e=>{this.throwError(e)}),e}reset_(){return new Promise(e=>{var t;this.controller&&(this.controller.destroy(),this.controller=void 0);let n=this.modelScene.parameter;n.pano0&&n.pano0.map.dispose(),n.pano1&&n.pano1.map!==((t=n.pano0)==null?void 0:t.map)&&n.pano1.map.dispose(),n.set({pano0:null,pano1:null,modelAlpha:1}),worksMap.set(this,emptyWorks),this.modelScene.setModels(emptyWorks,{forceReplaceImmediately:!0}),this.renderer&&this.modelScene.update(this.renderer,this.camera),this.needsRender=!0,this.currentMode=`Panorama`,this.pano={workCode:``,panoIndex:0},this.camera.setFromPose({distance:0,fov:DEFAULT_CAMERA_FOV,longitude:0,latitude:0,offset:new three.Vector3(0,0,0)}),this.state={mode:this.currentMode,workCode:this.pano.workCode,panoIndex:this.pano.panoIndex,longitude:this.camera.pose.longitude,latitude:this.camera.pose.latitude,fov:this.camera.pose.fov,offset:this.camera.pose.offset.clone(),distance:this.camera.pose.distance},this.camera.needsRender=!1,this.needsRender=!1,e()})}changeMode(t,n={},r,o=!0,s=!1){return new Promise((c,l)=>{var u,d,f,p;if(!this.renderer)throw Error(`renderer is not initialized.`);n=Object.assign({},n);let m=0;this.controller&&(m=typeof r==`number`?r:(u=r==null?void 0:r.duration)==null?this.modeChangeDuration:u);let h=`fly`;this.controller&&typeof r==`object`&&r.effect&&(h=r.effect);let g=typeof n.panoIndex==`number`?{workCode:(p=(d=n.workCode)==null?(f=this.work)==null?void 0:f.workCode:d)==null?``:p,panoIndex:n.panoIndex}:this.pano;if(!e.Mode.hasOwnProperty(t)){let e=Error(`mode "${t}" is not existed`);this.throwError(e),l(e);return}if((t===e.Mode.Panorama||t===e.Mode.VRPanorama||t===e.Mode.XRPanorama)&&!this.works.getObserver(g)){let e=Error(`PanoId ${panoStringify(g)} not existed.`);this.throwError(e),l(e);return}(t===e.Mode.Floorplan||t===e.Mode.Topview||t===e.Mode.Mapview||t===e.Mode.Model)&&this.modelScene.empty&&(m=0);let _=this.controller,v=this.currentMode,y=()=>{if(this.controller&&this.controller.stopMomentumMovement(),this.controller&&s===!1&&v===t)t===e.Mode.Panorama||t===e.Mode.Model||t===e.Mode.VRPanorama||t===e.Mode.XRPanorama?!panoEqual(this.pano,g)&&`moveToPano`in this.controller&&typeof this.controller.moveToPano==`function`?this.controller.moveToPano(g,Object.assign({duration:m},n),o):this.controller.updateCamera(n,m,o).catch(noop):(panoEqual(this.pano,g)||(this.pano=g),this.controller.updateCamera(n,m,o).catch(noop));else{let e=Object.assign(Object.assign({},n),g),r=Object.assign(Object.assign({initial:{state:e,currentState:this.getCurrentState(),duration:m,effect:h,userAction:o}},this.commonParams()),this.controllerInits[t]),s=Controllers[t].initAnimationEndState(r),c=createEvent(`mode.change.request`,{prevMode:this.currentMode,mode:t,state:s,userAction:o});if(this.emit(`mode.change.request`,c),!c.defaultPrevented){_&&_.destroy(),this.controller=this.applyController(t,r);let e=createEvent(`mode.change`,{prevMode:this.currentMode,mode:t,state:s,userAction:o});this.emit(`mode.change`,e)}}c()},b=AnimationFrameLoop.shared.getContext();b&&(typeof XRSession<`u`&&b instanceof XRSession&&b.end(),AnimationFrameLoop.shared.setContext(null)),t===e.Mode.VRPanorama?(this.requestFullscreen(),requestDeviceOrientationPermission().then(()=>y()).catch(e=>{let t=e instanceof Error?e:Error(String(e));this.exitFullscreen(),this.throwError(t),l(t)})):t===e.Mode.XRPanorama?requestXRSessionPermission().then(e=>{AnimationFrameLoop.shared.setContext(e),s=!0,y()}).catch(e=>{let t=e instanceof Error?e:Error(String(e));this.throwError(t),l(t)}):y()})}getPixels(e,t,n,r,o,s,c){if(!this.renderer)throw Error(`renderer is not initialized.`);let l=now(),u=this.renderer.getPixelRatio(),d=this.renderer.getRenderTarget(),f=this.getSize(new three.Vector2),p=0,m=0,h=1,g=1,_,v,y,b,S;typeof e==`number`?(p=e,typeof t==`number`&&(m=t),typeof n==`number`&&(h=n),typeof r==`number`&&(g=r),_=o,v=s,S=c):(p=e.x,m=e.y,h=e.width,g=e.height,_=e.pixelRatio,v=e.flipY,y=e.helperVisible,b=e.skipPanorama,S=e.buffer),p=Math.floor(p),m=Math.floor(m),h=Math.floor(h),g=Math.floor(g),_=Math.floor(_==null?u:_),v=v==null?!1:v;let C=this.helperVisible,w=this.modelScene.parameter.modelAlpha;this.helperVisible=y==null?this.helperVisible:y,b&&(this.controller instanceof Controllers.Panorama||this.controller instanceof Controllers.VRPanorama||this.controller instanceof Controllers.XRPanorama)&&b===!0&&this.modelScene.parameter.set(`modelAlpha`,1),this.modelScene.update(this.renderer,this.camera);let T=this.getPixelsRenderTarget;T.setSize(h*_,g*_),this.renderer.setRenderTarget(T),this.camera.pixelRatio=_,this.camera.resolution.set(h,g),this.camera.setViewOffset(f.width,f.height,p,f.height-m-g,h,g),this.camera.aspect=f.width/f.height,this.camera.updateTime(l),this.scene.update(this.renderer,this.camera);let E=this.renderer.autoClear,D=this.renderer.autoClearColor,O=this.renderer.autoClearDepth,k=this.renderer.autoClearStencil,A=scratchClearColor.copy(this.renderer.getClearColor()),j=this.renderer.getClearAlpha(),M=this.renderer.getScissorTest();this.renderer.autoClear=!0,this.renderer.autoClearColor=!0,this.renderer.autoClearDepth=!0,this.renderer.autoClearStencil=!0,this.renderer.setScissorTest(!1);let N=this.scene.background;this.scene.background=this.camera.isOrthographicCamera?null:N,this.renderer.render(this.scene,this.camera),this.scene.background=N,this.renderer.autoClear=E,this.renderer.autoClearColor=D,this.renderer.autoClearDepth=O,this.renderer.autoClearStencil=k,this.renderer.setClearColor(A,j),this.renderer.setScissorTest(M),this.helperVisible=C,w===void 0?this.modelScene.parameter.reset(`modelAlpha`):this.modelScene.parameter.set(`modelAlpha`,w),this.renderer.setRenderTarget(d),this.camera.clearViewOffset(),this.camera.pixelRatio=u,this.camera.resolution.copy(f),this.camera.aspect=this.camera.resolution.width/this.camera.resolution.height,this.camera.updateTime(l),this.modelScene.update(this.renderer,this.camera),this.scene.update(this.renderer,this.camera);let P=h*_,F=g*_,I=P*F,L=I*4;if(S){if(S.length!==L)throw Error(`buffer length is not equals pixels ${L}`)}else S=new Uint8Array(L);if(this.renderer.readRenderTargetPixels(T,0,0,h*_,g*_,S),v){let e=I/2;for(let t=0,n=0,r=0,o=0;n<e;n++)for(o=(F-Math.floor(n/P)-1)*P+n%P,r=0;r<4;r++)t=S[n*4+r],S[n*4+r]=S[o*4+r],S[o*4+r]=t}return S}getElement(){var e;return(e=this.renderer)==null?void 0:e.domElement}render(e){let t=this.renderer;if(!t)return;let n=t.getRenderTarget();t.setRenderTarget(null);let r=t.autoClear,o=t.autoClearColor,s=t.autoClearDepth,c=t.autoClearStencil,l=scratchClearColor.copy(t.getClearColor()),u=t.getClearAlpha(),d=t.getViewport(scratchViewport),f=t.getScissor(scratchScissor),p=t.getScissorTest();t.autoClear=!0,t.autoClearColor=!0,t.autoClearDepth=!0,t.autoClearStencil=!0;let m=t.getSize(scratchRenderSize),h=Math.floor(m.x*this.viewport.left),g=Math.floor(m.y*this.viewport.bottom),_=Math.floor(m.x*this.viewport.width),v=Math.floor(m.y*this.viewport.height);t.setClearColor(this.backgroundColor,this.backgroundAlpha),t.setViewport(h,g,_,v),t.setScissor(h,g,_,v);let y=this.viewport.bottom!==0||this.viewport.left!==0||this.viewport.width!==1||this.viewport.height!==1;t.setScissorTest(y);let b=this.scene.background;this.scene.background=this.camera.isOrthographicCamera?null:b;let S=!0;if(this.controller&&this.controller.render()&&(S=!1),S){let e=this.fiveRenderer.render(t,this.scene,this.modelScene,this.camera,this.needsRender);this.poweredByRealsee&&e&&renderPoweredByRealsee(t)}this.scene.background=b,t.autoClear=r,t.autoClearColor=o,t.autoClearDepth=s,t.autoClearStencil=c,t.setClearColor(l,u),t.setViewport(d),t.setScissor(f),t.setScissorTest(p),t.setRenderTarget(n),e&&AnimationFrameLoop.shared.add(e,!0)}updateTime(e,t,...n){if(this.currentUpdateArgs={time:e,args:n},this.destroyed)return;if(this.renderer&&ktx2.detectSupport(this.renderer),this.syncingState=this.syncState(e,t),this.controller&&this.controller.updateTime(e,t,...n),this.renderer&&(this.camera.pixelRatio=this.renderer.getPixelRatio(),this.getSize(this.camera.resolution),this.camera.aspect=this.camera.resolution.width/this.camera.resolution.height),this.camera.controllerMode=this.currentMode,this.camera.updateTime(e),this.renderer){let e=this.modelScene.loaded,t=this.modelScene.refined;this.modelScene.update(this.renderer,this.camera),e===!1&&this.modelScene.loaded===!0&&(this.controller&&this.controller.updateModel(this.modelScene),AnimationFrameLoop.shared.add(()=>{this.emit(`models.load`,createEvent(`models.load`,{modelScene:this.modelScene}))},!0,0,10)),t===!1&&this.modelScene.refined===!0&&AnimationFrameLoop.shared.add(()=>{this.emit(`models.refined`,createEvent(`models.refined`,{modelScene:this.modelScene}))},!0,0,10)}if(this.camera.autoNearFar){scratchBox3.makeEmpty(),scratchBox3.expandByObject(this.modelScene.boundingMesh);let t=scratchBox3.getBoundingSphere(scratchSphere),n=t.radius*2;t.containsPoint(this.camera.position)||(n=this.camera.position.distanceTo(t.center)+t.radius),n=clamp$1(n,800);let r=n/1e4;r=clamp$1(r,.03,.1),this.camera.near!==r&&(this.camera.near=r),this.camera.far!==n&&(this.camera.far=n),this.camera.updateTime(e)}if(this.renderer){let e=this.modelScene.visible;this.modelScene.visible=!1,this.scene.update(this.renderer,this.camera),this.modelScene.visible=e}if(this.syncingState=!1,this.controller&&this.controller.needsRender===!0&&(this.controller.needsRender=!1,this.needsRender=!0),this.camera.needsRender===!0&&(this.camera.needsRender=!1,this.needsRender=!0),this.modelScene.needsRender===!0&&(this.modelScene.needsRender=!1,this.needsRender=!0),this.scene.needsRender===!0&&(this.scene.needsRender=!1,this.needsRender=!0),this.pbmGaussianSplattingRenderMesh&&this.pbmGaussianSplattingRenderMesh.needsRender===!0&&(this.pbmGaussianSplattingRenderMesh.needsRender=!1,this.needsRender=!0),this.onlyRenderIfNeeds!==!0&&(this.needsRender=!0),this.paused===!0)return;let r=createEvent(`render.prepare`,{needsRender:this.needsRender});this.emit(`render.prepare`,r),r.defaultPrevented&&(this.needsRender=!1);let o=this.needsRender;this.render(),this.needsRender=!1,this.emit(`render`,createEvent(`render`,{needsRender:o})),this.hasListener(`fps`)&&(this.fps.testTime&&e-this.fps.testTime<1e3?this.fps.testCount++:(this.emit(`fps`,this.fps.testCount),this.fps.testTime=e,this.fps.testCount=0))}pause(){this.paused=!0,this.renderer&&this.renderer instanceof InternalWebGLRenderer&&this.renderer.clear(!0,!0,!0)}play(){this.needsRender=!0,this.paused=!1}moveToPano(t,n={},r=!0){let{controller:o,renderer:s}=this;if(!o)return this.throwError(Error(`controller is not initialized.`)),Promise.resolve();if(!s)return this.throwError(Error(`renderer is not initialized.`)),Promise.resolve();typeof t==`number`&&this.pano.workCode&&(t={workCode:this.pano.workCode,panoIndex:t});let c=this.works.getObserver(t);if(!c)return this.throwError(Error(`pano ${JSON.stringify(t)} not existed.`)),Promise.resolve();let l={workCode:c.work.workCode,panoIndex:c.panoIndex};return`moveToPano`in o&&typeof o.moveToPano==`function`?o.moveToPano(l,n,r):c&&(this.pano=l,this.once(`initAnimation.start`,e=>{n.moveStartCallback&&n.moveStartCallback(e.state)}),this.once(`initAnimation.end`,e=>{n.moveEndCallback&&n.moveEndCallback(e.state)}),this.changeMode(e.Mode.Panorama,n,{effect:n.effect},r)),this.ready()}preloadPano(e,t=noop){let n=this.works.getObserver(e);if(!n)return Promise.reject(Error(`Pano ${JSON.stringify(e)} never found`));let r=[`right`,`left`,`up`,`down`,`front`,`back`],o=now();return Promise.all(r.map(e=>{let t=panoStringify({panoIndex:n.panoIndex,workCode:n.work.workCode}),r=Object.assign({key:`pano.${t}.${e}`},pick(this.imageOptions,[`size`,`format`,`quality`,`forceUseExifOrientation`,`mappings`])),o=n.work.getURL(n.images[e]),s=this.imageOptions.transform?this.imageOptions.transform(o,r):imageURL(o,r);return getFetcher(this.fiveId,n.work).preload(s)})).then(()=>{let e=now()-o;return t(e),e})}project2d(e,t=!1){if(!this.renderer)return null;if(t){let t=this.camera.position,n=e.clone().sub(t),r=new three.Raycaster(t,n.clone().normalize());r.params.Points={threshold:.1};let[o]=this.modelScene.intersectRaycaster(r);if(o&&o.distance+.01<n.length())return null}let n=e.clone().project(this.camera);if(Math.abs(n.z)>1)return null;let r=this.renderer.getSize(new three.Vector2),o=r.x*this.viewport.width,s=r.y*this.viewport.height,c=r.x*this.viewport.left+(n.x+1)/2*o,l=r.y*(1-this.viewport.bottom-this.viewport.height)+(-n.y+1)/2*s;return new three.Vector2(c,l)}getCurrentState(){return Object.assign(Object.assign({},this.camera.copyPose()),{mode:this.currentMode,workCode:this.pano.workCode,panoIndex:this.pano.panoIndex})}setState(e,t=!1,n=!0){var r,o,s,c,l,u,d,f,p,m;e=pick(e,[`mode`,`workCode`,`panoIndex`,`longitude`,`latitude`,`fov`,`offset`,`distance`]),e.offset&&!(e instanceof three.Vector3)&&(e.offset=new three.Vector3(e.offset.x,e.offset.y,e.offset.z));let h;if(typeof e.panoIndex==`number`)if(e.workCode)h={workCode:e.workCode,panoIndex:e.panoIndex};else{let t=(o=(r=this.work)==null?void 0:r.workCode)==null?``:o,n=this.state.workCode;this.works.filter(e=>e.workCode===n).length>0&&(t=n),h={workCode:t,panoIndex:e.panoIndex}}let g=(s=e.mode)==null?this.state.mode:s,_,v,y,b,S;if(this.controller&&this.controller.stopMomentumMovement(),this.state.mode!==g){if(g===`VRPanorama`){this.changeMode(`VRPanorama`,void 0,void 0,!0);return}let t={workCode:h==null?void 0:h.workCode,panoIndex:h==null?void 0:h.panoIndex};typeof e.longitude==`number`&&(t.longitude=e.longitude),typeof e.latitude==`number`&&(t.latitude=e.latitude),typeof e.fov==`number`&&(t.fov=e.fov),typeof e.distance==`number`&&(t.distance=e.distance),e.offset instanceof three.Vector3&&(t.offset=e.offset);let n=Object.assign(Object.assign({initial:{state:t,currentState:this.getCurrentState(),duration:this.modeChangeDuration,effect:`fly`,userAction:!1}},this.commonParams()),this.controllerInits[g]),r=Controllers[g].initAnimationEndState(n);_=r.longitude,v=r.latitude,y=r.fov,b=r.offset,S=r.distance}else _=(c=e.longitude)==null?this.state.longitude:c,v=(l=e.latitude)==null?this.state.latitude:l,y=(u=e.fov)==null?this.state.fov:u,b=(d=e.offset)==null?this.state.offset:d,S=(f=e.distance)==null?this.state.distance:f;let C={workCode:(h==null?this.pano:h).workCode,panoIndex:(h==null?this.pano:h).panoIndex,mode:g,longitude:_,latitude:v,fov:y,offset:b,distance:S};this.emit(`state.set`,createEvent(`state.set`,{userAction:n,state:C})),stateEqual(this.state,C)||(this.controller&&C.mode===`VRPanorama`&&C.mode!==this.state.mode?(assignState(this.state,C),this.changeMode(`VRPanorama`)):this.controller&&C.mode===`XRPanorama`&&C.mode!==this.state.mode?(assignState(this.state,C),this.changeMode(`XRPanorama`)):(assignState(this.state,C),this.controller&&n&&(this.controller.userAction=!1),t&&this.state.mode===C.mode&&(this.syncingState=this.syncState(now(),0,t),this.syncingState&&((p=this.controller)==null||p.updateTime(now(),0),this.syncingState=!1)),this.emit(`state.change`,createEvent(`state.change`,{userAction:n,state:this.state})),(m=this.analysis)==null||m.state(this.works,this.state)))}syncState(t,n,r=!1){let o=this.stateSynced;if(this.stateSynced=!1,!this.controller)return!1;if(this.state.mode!==this.currentMode){let e={mode:this.state.mode,workCode:this.state.workCode,panoIndex:this.state.panoIndex,longitude:this.state.longitude,latitude:this.state.latitude,fov:this.state.fov,offset:this.state.offset,distance:this.state.distance};return this.changeMode(this.state.mode,e,this.modeChangeDuration,this.controller.userAction),!0}if(!this.controller.isReady())return!1;if(this.controller instanceof Controllers.Model){if(notSimilarVector3(this.camera.pose.offset,this.state.offset)){let e={longitude:this.state.longitude,latitude:this.state.latitude,fov:this.state.fov,offset:this.state.offset};return this.controller.moveToPosition(this.state.offset,Object.assign(Object.assign({},e),{duration:r?0:void 0}),!1),!0}}else{let e={workCode:this.state.workCode,panoIndex:this.state.panoIndex};if(!panoEqual(e,this.pano)&&`moveToPano`in this.controller&&typeof this.controller.moveToPano==`function`){let t={longitude:this.state.longitude,latitude:this.state.latitude,fov:this.state.fov,offset:this.state.offset,distance:this.state.distance};return this.controller.moveToPano(e,t,!1),!0}}if(this.controller instanceof Controllers.Floorplan||this.controller instanceof Controllers.Topview||this.controller instanceof Controllers.Mapview){let e=1,t=.2,n=.2,o=Math.PI/45,s=r?this.state.fov:stepNumber(this.camera.pose.fov,this.state.fov,1),c=Math.abs(this.camera.pose.distance-this.state.distance),l=c>n*15?c/15:.2,u=r?this.state.distance:stepNumber(this.camera.pose.distance,this.state.distance,l),d=this.camera.pose.offset.distanceTo(this.state.offset),f=d>n*15?d/15:n,p=r?new three.Vector3().copy(this.state.offset):stepVector(this.camera.pose.offset,this.state.offset,f),{longitude:m,latitude:h}=r?{longitude:this.state.longitude,latitude:this.state.latitude}:stepCoordinates({longitude:this.camera.pose.longitude,latitude:this.camera.pose.latitude},{longitude:this.state.longitude,latitude:this.state.latitude},o);if(notSimilarValue(s,this.camera.pose.fov)||notSimilarVector3(p,this.camera.pose.offset)||notSimilarValue(u,this.camera.pose.distance)||notSimilarValue(m,this.camera.pose.longitude,Math.PI*2)||notSimilarValue(h,this.camera.pose.latitude)){let e={x:p.x,y:p.y,z:p.z},t={fov:s};return Object.assign(e,{distance:u}),Object.assign(t,{longitude:m,latitude:h}),this.controller.stopMomentumMovement(),this.controller.cameraMotion.set(t,0).catch(noop),this.controller.locationMotion.set(e,0).catch(noop),!0}}else{let e=1,t=Math.PI/45,n=r?this.state.fov:stepNumber(this.camera.pose.fov,this.state.fov,1),{longitude:o,latitude:s}=r?{longitude:this.state.longitude,latitude:this.state.latitude}:stepCoordinates({longitude:this.camera.pose.longitude,latitude:this.camera.pose.latitude},{longitude:this.state.longitude,latitude:this.state.latitude},t),c=this.state.distance,l=new three.Vector3().copy(this.state.offset);if(notSimilarValue(c,this.camera.pose.distance)&&(this.state.distance=this.camera.pose.distance),notSimilarVector3(l,this.camera.pose.offset)&&(this.state.offset=this.camera.pose.offset.clone()),notSimilarValue(o,this.camera.pose.longitude,Math.PI*2)||notSimilarValue(s,this.camera.pose.latitude)||notSimilarValue(n,this.camera.pose.fov))return this.controller.stopMomentumMovement(),this.controller.cameraMotion.set({longitude:o,latitude:s,fov:n},0).catch(noop),!0}if(this.stateSynced=!0,o===!1&&this.emit(`state.synced`,createEvent(`state.synced`,{userAction:!1,state:this.state})),this.readyCallbacks.length&&this.stateSynced){let t=this.currentMode;if(!(t===e.Mode.Floorplan||t===e.Mode.Topview||t===e.Mode.Mapview||t===e.Mode.Model)||this.modelScene.loaded){let e=this.readyCallbacks.slice();this.readyCallbacks.length=0;for(let t of e)this.controller instanceof Controllers.Panorama&&t.tile===!0&&!this.controller.isTileReady()?this.readyCallbacks.push(t):t()}}return!1}ready(e={}){return new Promise(t=>{var n;this.readyCallbacks.push(Object.assign(t,{tile:(n=e.tile)==null?!1:n}))}).then(()=>this.model.initReady).then(noop)}requestFullscreen(){var e;if(!isMobile)return;let t=(e=this.getElement())==null?void 0:e.parentNode;t&&`requestFullscreen`in t&&typeof document<`u`&&document.fullscreenElement===null&&t.requestFullscreen()}exitFullscreen(){typeof document<`u`&&document.fullscreenElement&&`exitFullscreen`in document&&document.exitFullscreen()}throwError(e){this.hasListener(`error`)?this.emit(`error`,e):console.error(e)}bindModel(e){let t=()=>{AnimationFrameLoop.shared.add(()=>{this.emit(`model.load`,createEvent(`model.load`,{work:e.work,model:e,error:null}))},!0)},n=t=>{let{error:n}=t;this.emit(`model.error`,createEvent(`model.error`,{work:e.work,model:e,error:n})),this.throwError(n)},r=()=>{this.emit(`model.changeShownFloor`,createEvent(`model.changeShownFloor`,{work:e.work,model:e,error:null}))},o=t=>{this.emit(`models.tileLoad`,createEvent(`model.tileLoad`,{work:e.work,model:e,tile:t.tile}))},s=t=>{this.emit(`models.tileUnload`,createEvent(`model.tileUnload`,{work:e.work,model:e,tile:t.tile}))},c=()=>{e.removeEventListener(`load`,t),e.removeEventListener(`error`,n),e.removeEventListener(`changeShownFloor`,r),e.removeEventListener(`tileLoad`,o),e.removeEventListener(`tileUnload`,s),e.removeEventListener(`dispose`,c)};e.addEventListener(`load`,t),e.addEventListener(`error`,n),e.addEventListener(`changeShownFloor`,r),e.addEventListener(`tileLoad`,o),e.addEventListener(`tileUnload`,s),e.addEventListener(`dispose`,c),this.emit(`model.request`,createEvent(`model.request`,{work:e.work,model:e,error:null}))}bindWorkFetcher(e){let t=this,n=e.workCode,r=e.allowHosts,o=new Fetcher({get networkSubscribe(){return t.networkSubscribe},requestProxy(e){return Promise.resolve(e).then(e=>t.requestProxy(e,n)).then(e=>{let t=verifyURL(e,r);return t instanceof Error?Promise.reject(t):t})}});registerFetcher(this.fiveId,e,o)}commonParams(){return{fiveId:this.fiveId,scene:this.scene,xrCustomObjectsScene:this.xrCustomObjectsScene,helper:this.helperGroup,camera:this.camera,renderer:this.renderer,viewport:this.viewport,element:this.getElement(),works:this.works,imageOptions:this.imageOptions,enableWheel:this.enableWheel,extraElements:this.extraElements,videoTexture:this.videoTexture,modelScene:this.modelScene}}applyController(t,n){if(!this.renderer)throw Error(`renderer is not initialized.`);let r=Controllers[t];this.currentMode=t;let o=new r(n);for(let e of PROXY_CONTROLLER_EVENT_NAMES)o.on(e,(...t)=>{if(this.emit(e,...t))return!1});{let e=Controllers[t].initAnimationEndState(n),r=n.initial.userAction;stateEqual(this.state,e)||(assignState(this.state,e),this.emit(`state.change`,createEvent(`state.change`,{userAction:r,state:this.state}))),this.emit(`currentState.change`,createEvent(`currentState.change`,{userAction:r,state:this.getCurrentState()}))}return o.on(`camera.update`,e=>{var t;if(this.controller){let n=this.controller.getTargetState();e.userAction&&this.syncingState===!1&&this.state.mode===n.mode&&!stateEqual(this.state,n)&&(assignState(this.state,n),this.emit(`state.change`,createEvent(`state.change`,{userAction:e.userAction,state:this.state})),(t=this.analysis)==null||t.state(this.works,this.state))}this.emit(`currentState.change`,createEvent(`currentState.change`,{userAction:e.userAction,state:this.getCurrentState()}))}),o.on(`initAnimation.start`,e=>{var t;let{state:n,userAction:r}=e;r&&this.state.mode===n.mode&&!stateEqual(this.state,n)&&(assignState(this.state,n),this.emit(`state.change`,createEvent(`state.change`,{userAction:r,state:this.state})),(t=this.analysis)==null||t.state(this.works,this.state))}),o.on(`initAnimation.end`,e=>{var t;let{state:n,userAction:r}=e;this.pano={workCode:n.workCode,panoIndex:n.panoIndex},r&&this.state.mode===n.mode&&!stateEqual(this.state,n)&&(assignState(this.state,n),this.emit(`state.change`,createEvent(`state.change`,{userAction:r,state:this.state})),(t=this.analysis)==null||t.state(this.works,this.state))}),o.on(`pano.moveTo`,e=>{var t;let{state:n,userAction:r}=e;this.pano={workCode:n.workCode,panoIndex:n.panoIndex},r&&this.state.mode===n.mode&&!stateEqual(this.state,n)&&(assignState(this.state,n),this.emit(`state.change`,createEvent(`state.change`,{userAction:r,state:this.state})),(t=this.analysis)==null||t.state(this.works,this.state))}),o.on(`pano.arrived`,e=>{var t;let{state:n,userAction:r}=e;this.pano={workCode:n.workCode,panoIndex:n.panoIndex},r&&this.state.mode===n.mode&&!stateEqual(this.state,n)&&(assignState(this.state,n),this.emit(`state.change`,createEvent(`state.change`,{userAction:r,state:this.state})),(t=this.analysis)==null||t.state(this.works,this.state))}),o.on(`pano.cancel`,e=>{var t;let{state:n,userAction:r}=e;r&&this.state.mode===n.mode&&!stateEqual(this.state,n)&&(assignState(this.state,n),this.emit(`state.change`,createEvent(`state.change`,{userAction:r,state:this.state})),(t=this.analysis)==null||t.state(this.works,this.state))}),o.on(`pano.moveTo`,e=>{let{userAction:t}=e;this.emit(`currentState.change`,createEvent(`currentState.change`,{userAction:t,state:this.getCurrentState()}))}),o.on(`pano.request`,e=>{this.emit(`pano.request`,e),e.defaultPrevented||this.moveToPano(e.state,e.options,e.userAction)}),o.on(`vr.requestExit`,()=>{this.currentMode===e.Mode.VRPanorama&&(this.exitFullscreen(),this.changeMode(e.Mode.Panorama))}),o.on(`error`,e=>this.throwError(e)),o}removeEventListeners(){}get internalLightsEnabled(){let e=this.scene.children.find(e=>e.name===`internalLights`);return e?e.visible:!1}set internalLightsEnabled(e){let t=this.scene.children.find(e=>e.name===`internalLights`);t&&(t.visible=e),t=this.modelScene.children.find(e=>e.name===`internalLights`),t&&(t.visible=e)}get scissor(){return this.viewport}setScissor(e){return this.setViewport(e)}getPose(){let{longitude:e,latitude:t,fov:n,offset:r,distance:o}=this.camera.copyPose();return{longitude:e,latitude:t,fov:n,offset:r.clone(),distance:o}}getLongitudeAndLatitude(){let{longitude:e,latitude:t}=this.getPose();return{longitude:e,latitude:t}}getOffset(){return this.getPose().offset}getCameraLocal(){if(this.pano.workCode&&this.controller&&this.works){let e=this.works.getObserver(this.pano);if(e){let t=new three.Object3D;t.matrix.copy(e.matrix).premultiply(e.work.transform),t.matrix.decompose(t.position,t.quaternion,t.scale),t.matrixAutoUpdate=!1;let n=new three.Vector3(0,0,-1);n.applyQuaternion(this.camera.quaternion);let r=t.quaternion.clone().inverse();return n.applyQuaternion(r),{theta:Math.atan2(n.x,-n.z),phi:-Math.asin(n.y),lookAtVector:n}}}return null}addPass(e){this.fiveRenderer.composer.addPass(e)}removePass(e){let t=this.fiveRenderer.composer.passes.indexOf(e);t!==-1&&this.fiveRenderer.composer.passes.splice(t,1)}insertPass(e,t){this.fiveRenderer.composer.insertPass(e,t)}get renderMode(){return this.fiveRenderer.renderMode}set renderMode(e){this.fiveRenderer.renderMode=e}get enableHQ(){return this.fiveRenderer.renderMode===`point-cloud-high-quality`}set enableHQ(e){this.fiveRenderer.renderMode=e?`point-cloud-high-quality`:`default`,this.needsRender=!0}get enableEDL(){return this.eyeDomeLightingPass.enabled}set enableEDL(e){this.eyeDomeLightingPass.enabled=e,this.needsRender=!0}get enableAdaptiveLuminance(){return this.adaptiveLuminancePass.enabled}set enableAdaptiveLuminance(e){this.adaptiveLuminancePass.enabled=e,this.needsRender=!0}get enableIOSEDR(){return!1}set enableIOSEDR(e){}get enablePostProcessing(){return!0}set enablePostProcessing(e){}get modelSceneNeedsRender(){return this.modelScene.needsRender}set modelSceneNeedsRender(e){this.modelScene.needsRender=e}};Five.Mode={Panorama:`Panorama`,Model:`Model`,Floorplan:`Floorplan`,Topview:`Topview`,Mapview:`Mapview`,VRPanorama:`VRPanorama`,XRPanorama:`XRPanorama`},typeof window<`u`&&Object.assign(window,{__FIVE_DEBUG__:{THREE:three,constructor:Five,instances:Five_Instances}});var XRButton=class{static createButton(e){let t=document.createElement(`button`);function n(){t.style.display=``,t.style.cursor=`pointer`,t.style.left=`calc(50% - 50px)`,t.style.width=`100px`,t.textContent=`ENTER VR`,t.onmouseenter=function(){t.style.opacity=`1.0`},t.onmouseleave=function(){t.style.opacity=`0.5`},t.onclick=function(){e&&e()}}function r(){t.style.display=``,t.style.cursor=`auto`,t.style.left=`calc(50% - 75px)`,t.style.width=`150px`,t.onmouseenter=null,t.onmouseleave=null,t.onclick=null}function o(){r(),t.textContent=`VR NOT SUPPORTED`}function s(e){e.style.position=`absolute`,e.style.bottom=`20px`,e.style.padding=`12px 6px`,e.style.border=`1px solid #fff`,e.style.borderRadius=`4px`,e.style.background=`rgba(0,0,0,0.1)`,e.style.color=`#fff`,e.style.font=`normal 13px sans-serif`,e.style.textAlign=`center`,e.style.opacity=`0.5`,e.style.outline=`none`,e.style.zIndex=`999`}if(`xr`in navigator)return t.id=`VRButton`,t.style.display=`none`,s(t),navigator.xr.isSessionSupported(`immersive-vr`).then(function(e){e?n():o()}),t;{let e=document.createElement(`a`);return window.isSecureContext===!1?(e.href=document.location.href.replace(/^http:/,`https:`),e.innerHTML=`WEBXR NEEDS HTTPS`):(e.href=`https://immersiveweb.dev/`,e.innerHTML=`WEBXR NOT AVAILABLE`),e.style.left=`calc(50% - 90px)`,e.style.width=`180px`,e.style.textDecoration=`none`,s(e),e}}};exports.AdaptiveLuminancePass=AdaptiveLuminancePass,exports.AnimationFrameLoop=AnimationFrameLoop,exports.BoundingMesh=BoundingMesh,exports.Camera=Camera,exports.CustomShader=PBMCustomShader,exports.PBMCustomShader=PBMCustomShader,exports.EffectComposer=EffectComposer,exports.EyeDomeLightingPass=EyeDomeLightingPass,exports.Fetcher=Fetcher,exports.Five=Five,exports.FivePass=FivePass,exports.FiveRenderer=FiveRenderer,exports.FullScreenQuad=FullScreenQuad,exports.Histogram=Histogram,exports.InternalWebGLRenderer=InternalWebGLRenderer,exports.Model=Model,exports.ModelScene=ModelScene,exports.Motion=Motion,exports.NetworkSubscribe=NetworkSubscribe,exports.PBMContainer=PBMContainer,exports.PBMGSObject=PBMGaussianSplattingObject,exports.PBMGroup=PBMGroup,exports.PBMMesh=PBMMesh,exports.PBMMeshMaterial=PBMMeshMaterial,exports.PBMPanoFilter=PBMPanoFilter,exports.PBMPointCloud=PBMPointCloud,exports.PBMPointCloudMaterial=PBMPointCloudMaterial,exports.PBMSkinnedMesh=PBMSkinnedMesh,exports.PBMUpdateable=PBMUpdateable,exports.PROXY_CONTROLLER_EVENT_NAMES=PROXY_CONTROLLER_EVENT_NAMES,exports.PanoCircleMesh=PanoCircleMesh,exports.PanoCircleMeshCustom=PanoCircleMeshCustom,exports.PanoCircleMeshSolid=PanoCircleMeshSolid,exports.Parameter=Parameter,exports.Scene=Scene,exports.Subscribe=Subscribe,exports.TextureLoader=TextureLoader,exports.Tile=Tile,exports.Tile3D=Tile3D,exports.Tile3DModel=Tile3D,exports.TileCache=TileCache,exports.TileNode=TileNode,exports.TileRequestScheduler=TileRequestScheduler,exports.Tileset=Tileset,exports.Trajectory=Trajectory,exports.TrajectoryNode=TrajectoryNode,exports.Work=Work,exports.WorkResolvedObserver=WorkResolvedObserver,exports.XRButton=XRButton,exports.controllersDefaultInitArgs=controllersDefaultInitArgs,exports.coordinatesToVector=coordinatesToVector,exports.createDebugBoundingMesh=createDebugBoundingMesh,exports.createWorks=createWorks,exports.defaultImageURLTransform=imageURL,exports.draco=draco,exports.getViewportScale=getViewportScale,exports.headingToLongitude=headingToLongitude,exports.imageSupport=imageSupport,exports.isBoundingVolume=isBoundingVolume,exports.isPanoId=isPanoId,exports.ktx2=ktx2,exports.loadAt3d=loadAt3d,exports.loadB3dm=loadB3dm,exports.loadDome=loadDome,exports.loadDomez=loadDomez,exports.loadFbx=loadFbx,exports.loadGltf=loadGltf,exports.loadPbm=loadPbm,exports.loadPly=loadPly,exports.loadPnts=loadPnts,exports.loadSplat=loadSplat,exports.loadSpz=loadSpz,exports.loadX3p=loadX3p,exports.longitudeToHeading=longitudeToHeading,exports.makeBoundingVolume=makeBoundingVolume,exports.panoEqual=panoEqual,exports.panoParse=panoParse,exports.panoStringify=panoStringify,exports.parseWork=parseWork,exports.vectorToCoordinates=vectorToCoordinates,exports.workToJson=workToJson});
|