@realsee/dnalogel 4.0.0-webgpu.19 → 4.0.0-webgpu.20

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.
Files changed (66) hide show
  1. package/CHANGELOG.md +5 -0
  2. package/dist/floorplan.js +1 -1
  3. package/dist/index.js +16 -16
  4. package/dist/internal/{BasePlugin-AYcNjiyG.js → BasePlugin-hxM1EHtV.js} +2 -2
  5. package/dist/internal/{BasePlugin-AYcNjiyG.js.map → BasePlugin-hxM1EHtV.js.map} +1 -1
  6. package/dist/internal/BasePluginWithData-BS2O9hNu.js +7 -0
  7. package/dist/internal/{BasePluginWithData-CWgZY4u8.js.map → BasePluginWithData-BS2O9hNu.js.map} +1 -1
  8. package/dist/internal/{Controller-DPpDpYsR.js → Controller-CDLmWyXz.js} +2 -2
  9. package/dist/internal/{Controller-DPpDpYsR.js.map → Controller-CDLmWyXz.js.map} +1 -1
  10. package/dist/internal/{Controller-DZwww-c4.js → Controller-CxAUW5kD.js} +2 -2
  11. package/dist/internal/{Controller-DZwww-c4.js.map → Controller-CxAUW5kD.js.map} +1 -1
  12. package/dist/internal/{Rectangle-DSOdWXl_.js → Rectangle-HB8jF_bX.js} +2 -2
  13. package/dist/internal/{Rectangle-DSOdWXl_.js.map → Rectangle-HB8jF_bX.js.map} +1 -1
  14. package/dist/internal/{Work-HQHipxJj.js → Work-6uuml2Ft.js} +4 -4
  15. package/dist/internal/{Work-HQHipxJj.js.map → Work-6uuml2Ft.js.map} +1 -1
  16. package/dist/internal/{area-maker-Diy_UkTD.js → area-maker-D2ZIYsTG.js} +2 -2
  17. package/dist/internal/{area-maker-Diy_UkTD.js.map → area-maker-D2ZIYsTG.js.map} +1 -1
  18. package/dist/internal/{controller-DZUdbdd8.js → controller-DjCi781H.js} +3 -3
  19. package/dist/internal/{controller-DZUdbdd8.js.map → controller-DjCi781H.js.map} +1 -1
  20. package/dist/internal/{cruise-Bo8CD4vF.js → cruise-DWxq9GTd.js} +2 -2
  21. package/dist/internal/{cruise-Bo8CD4vF.js.map → cruise-DWxq9GTd.js.map} +1 -1
  22. package/dist/internal/{current-pano-image-Cqq4DRPh.js → current-pano-image-DPLm0-o2.js} +2 -2
  23. package/dist/internal/{current-pano-image-Cqq4DRPh.js.map → current-pano-image-DPLm0-o2.js.map} +1 -1
  24. package/dist/internal/{floorplan-DwcrbASA.js → floorplan-B6Y-8xjB.js} +2 -2
  25. package/dist/internal/{floorplan-DwcrbASA.js.map → floorplan-B6Y-8xjB.js.map} +1 -1
  26. package/dist/internal/{model-maker-pQcaAh5M.js → model-maker-Cea52AmN.js} +2 -2
  27. package/dist/internal/{model-maker-pQcaAh5M.js.map → model-maker-Cea52AmN.js.map} +1 -1
  28. package/dist/internal/{model-view-BWUU0-uq.js → model-view-DSRXOhPg.js} +12 -2
  29. package/dist/internal/model-view-DSRXOhPg.js.map +1 -0
  30. package/dist/internal/object3d-helper-JrdReT4Y.js +7 -0
  31. package/dist/internal/{object3d-helper-zRXHAcbm.js.map → object3d-helper-JrdReT4Y.js.map} +1 -1
  32. package/dist/internal/{pano-compass-CMIljzhC.js → pano-compass-DENjS-F-.js} +2 -2
  33. package/dist/internal/{pano-compass-CMIljzhC.js.map → pano-compass-DENjS-F-.js.map} +1 -1
  34. package/dist/internal/{pano-door-label-B4nqTTzN.js → pano-door-label-DFcBreFx.js} +2 -2
  35. package/dist/internal/{pano-door-label-B4nqTTzN.js.map → pano-door-label-DFcBreFx.js.map} +1 -1
  36. package/dist/internal/{pano-measure-C2r0ecHk.js → pano-measure-bIqtdQ8N.js} +2 -2
  37. package/dist/internal/{pano-measure-C2r0ecHk.js.map → pano-measure-bIqtdQ8N.js.map} +1 -1
  38. package/dist/internal/{pano-measure-v2-BfSAjO-I.js → pano-measure-v2-BRr9Jses.js} +2 -2
  39. package/dist/internal/{pano-measure-v2-BfSAjO-I.js.map → pano-measure-v2-BRr9Jses.js.map} +1 -1
  40. package/dist/internal/{pano-tag-BXo_4I6D.js → pano-tag-BI_eOX_D.js} +2 -2
  41. package/dist/internal/{pano-tag-BXo_4I6D.js.map → pano-tag-BI_eOX_D.js.map} +1 -1
  42. package/dist/internal/{pano-video-CS6-eXci.js → pano-video-D0dQTeX6.js} +2 -2
  43. package/dist/internal/{pano-video-CS6-eXci.js.map → pano-video-D0dQTeX6.js.map} +1 -1
  44. package/dist/internal/{pipeline-BN9A4lPZ.js → pipeline-CyleoezT.js} +2 -2
  45. package/dist/internal/{pipeline-BN9A4lPZ.js.map → pipeline-CyleoezT.js.map} +1 -1
  46. package/dist/internal/{sculpt-e0IRMtjB.js → sculpt-BGx4Dudb.js} +2 -2
  47. package/dist/internal/{sculpt-e0IRMtjB.js.map → sculpt-BGx4Dudb.js.map} +1 -1
  48. package/dist/plugins/area-maker.js +1 -1
  49. package/dist/plugins/cruise.js +2 -2
  50. package/dist/plugins/current-pano-image.js +1 -1
  51. package/dist/plugins/guide-line.js +1 -1
  52. package/dist/plugins/model-maker.js +1 -1
  53. package/dist/plugins/model-view.js +1 -1
  54. package/dist/plugins/object3d-helper.js +2 -2
  55. package/dist/plugins/pano-compass.js +1 -1
  56. package/dist/plugins/pano-door-label.js +1 -1
  57. package/dist/plugins/pano-measure-v2.js +1 -1
  58. package/dist/plugins/pano-measure.js +1 -1
  59. package/dist/plugins/pano-tag.js +2 -2
  60. package/dist/plugins/pano-video.js +1 -1
  61. package/dist/plugins/pipeline.js +1 -1
  62. package/dist/plugins/sculpt.js +2 -2
  63. package/package.json +1 -1
  64. package/dist/internal/BasePluginWithData-CWgZY4u8.js +0 -7
  65. package/dist/internal/model-view-BWUU0-uq.js.map +0 -1
  66. package/dist/internal/object3d-helper-zRXHAcbm.js +0 -7
@@ -1,7 +1,7 @@
1
- import { i as e, t } from "./Work-HQHipxJj.js";
1
+ import { i as e, t } from "./Work-6uuml2Ft.js";
2
2
  //#region src/CruisePlugin/index.ts
3
3
  var n = (e, n) => new t(e, n), r = (t, n) => new e(t, n);
4
4
  //#endregion
5
5
  export { r as n, n as t };
6
6
 
7
- //# sourceMappingURL=cruise-Bo8CD4vF.js.map
7
+ //# sourceMappingURL=cruise-DWxq9GTd.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"cruise-Bo8CD4vF.js","names":["MoveController","CruisePlugin","WalkController","five","parameters","MovePlugin"],"sources":["../../src/CruisePlugin/index.ts"],"sourcesContent":["import type { FivePlugin } from '@realsee/five-webgpu'\nimport * as CruisePluginTypes from './typing'\nimport type { Config } from './typing'\nimport type { MoveConfig as MovePluginConfig } from './Move'\nimport WalkController from './Work'\nimport MoveController from './Move'\n\nexport const CruisePlugin: FivePlugin<Config | undefined, InstanceType<typeof WalkController>> = (five, parameters?) =>\n new WalkController(five, parameters)\nexport const MovePlugin: FivePlugin<MovePluginConfig | undefined, InstanceType<typeof MoveController>> = (five, parameters?) =>\n new MoveController(five, parameters)\n\nexport { WalkController, MoveController, WalkController as CruisePluginController }\nexport type { CruisePluginExportType } from './typing'\nexport { CruisePluginTypes }\n\nexport default CruisePlugin\n"],"mappings":";;AAOA,IAAaC,KAAqF,GAAM,MACtG,IAAIC,EAAeC,GAAMC,CAAU,GACxBC,KAA6F,GAAM,MAC9G,IAAIL,EAAeG,GAAMC,CAAU"}
1
+ {"version":3,"file":"cruise-DWxq9GTd.js","names":["MoveController","CruisePlugin","WalkController","five","parameters","MovePlugin"],"sources":["../../src/CruisePlugin/index.ts"],"sourcesContent":["import type { FivePlugin } from '@realsee/five-webgpu'\nimport * as CruisePluginTypes from './typing'\nimport type { Config } from './typing'\nimport type { MoveConfig as MovePluginConfig } from './Move'\nimport WalkController from './Work'\nimport MoveController from './Move'\n\nexport const CruisePlugin: FivePlugin<Config | undefined, InstanceType<typeof WalkController>> = (five, parameters?) =>\n new WalkController(five, parameters)\nexport const MovePlugin: FivePlugin<MovePluginConfig | undefined, InstanceType<typeof MoveController>> = (five, parameters?) =>\n new MoveController(five, parameters)\n\nexport { WalkController, MoveController, WalkController as CruisePluginController }\nexport type { CruisePluginExportType } from './typing'\nexport { CruisePluginTypes }\n\nexport default CruisePlugin\n"],"mappings":";;AAOA,IAAaC,KAAqF,GAAM,MACtG,IAAIC,EAAeC,GAAMC,CAAU,GACxBC,KAA6F,GAAM,MAC9G,IAAIL,EAAeG,GAAMC,CAAU"}
@@ -2,7 +2,7 @@ import { n as e } from "./loadTexture-CyYrJnqG.js";
2
2
  import { t } from "./defaultUrls-CfMtGzqM.js";
3
3
  import { n } from "./BetterTween-DmptqE8m.js";
4
4
  import { t as r } from "./equal-BiDAilPV.js";
5
- import { t as i } from "./BasePlugin-AYcNjiyG.js";
5
+ import { t as i } from "./BasePlugin-hxM1EHtV.js";
6
6
  import * as a from "three/webgpu";
7
7
  //#region src/CurrentPanoImagePlugin/Controller.ts
8
8
  var o = class extends i {
@@ -216,4 +216,4 @@ var o = class extends i {
216
216
  //#endregion
217
217
  export { s as t };
218
218
 
219
- //# sourceMappingURL=current-pano-image-Cqq4DRPh.js.map
219
+ //# sourceMappingURL=current-pano-image-DPLm0-o2.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"current-pano-image-Cqq4DRPh.js","names":["BasePlugin.Controller","loadTexture","equal","Controller","THREE","CurrentPanoImagePluginController","five","defaultState","params","config","CURRENT_PANO_IMAGE_DEFAULT_IMAGE","userAction","options","mergedOptions","prevState","state","prevConfig","newConfig","msg","result","workCode","standingPosition","panoIndex","position","url","textureLoadingPromise","texture","quaternion","rad","visible","tweenProgress","progress","CurrentPanoImagePlugin"],"sources":["../../src/CurrentPanoImagePlugin/Controller.ts","../../src/CurrentPanoImagePlugin/index.ts"],"sourcesContent":["import * as THREE from 'three/webgpu'\nimport type { Five } from '@realsee/five-webgpu'\nimport * as BasePlugin from '../base/BasePlugin'\nimport type { BetterTween } from '../shared-utils/animationFrame/BetterTween'\nimport { tweenProgress } from '../shared-utils/animationFrame/BetterTween'\nimport type * as PluginType from './typings'\nimport { CURRENT_PANO_IMAGE_DEFAULT_IMAGE, equal } from '../shared-utils'\nimport { loadTexture } from '../shared-utils/three/loadTexture'\n\nexport class CurrentPanoImagePluginController extends BasePlugin.Controller<PluginType.State, PluginType.EventMap> {\n // ==================== public properties ====================\n /** 插件当前状态 */\n public state: PluginType.State\n /** 插件配置项 */\n public get config() {\n return { ...this._config }\n }\n /** 是否已经被销毁 */\n public get disposed() {\n return this._disposed\n }\n /** 查询问题使用的调试对象 */\n public checkMsg = {\n /** mesh 隐藏的原因 */\n meshHidden: '',\n /** 插件 enabled 校验信息 */\n pluginDisabled: '',\n /** 插件 visible 校验信息 */\n pluginHidden: '',\n }\n\n // ==================== private properties ====================\n private group = new THREE.Group()\n private mesh: THREE.Mesh<THREE.PlaneGeometry, THREE.MeshBasicMaterial>\n private textureLoadingPromise?: Promise<THREE.Texture> | null\n private opacityAnimeTween?: BetterTween<{ progress: number }>\n /** 是否正在走点动画中 */\n private isInPanoMoveAnime = false\n /** 上一次走点的全景图索引 */\n private lastArrivedPanoIndex = -1\n /** config 的原始值 */\n private _config: PluginType.Config\n /** disposed 的原始值 */\n private _disposed = false\n\n public constructor(five: Five, params?: PluginType.Params) {\n super(five)\n this.five = five\n\n // 处理 initialState\n const defaultState: PluginType.State = {\n enabled: true,\n visible: true,\n }\n this.state = Object.assign(defaultState, params?.initialState)\n\n // 处理 config\n const config: PluginType.Config = {\n width: 1.4,\n yOffset: 0.01,\n yRotate: 0,\n imageURL: CURRENT_PANO_IMAGE_DEFAULT_IMAGE,\n ...params?.config,\n }\n this._config = config\n\n this.group.name = 'current-pano-image-plugin-group'\n this.mesh = new THREE.Mesh(\n new THREE.PlaneGeometry(this.config.width, this.config.width),\n new THREE.MeshBasicMaterial({ transparent: true, opacity: 0, depthTest: false }),\n )\n this.mesh.visible = false\n this.group.add(this.mesh)\n this.updateMeshQuaternion(this.config.yRotate)\n\n if (!this.state.visible) this.checkMsg.pluginHidden = '初始值设置为隐藏'\n if (!this.state.enabled) this.checkMsg.pluginDisabled = '初始值设置为禁用'\n if (this.state.enabled) this._enable({ userAction: false })\n\n this.five.once('dispose', this.dispose)\n }\n\n /**\n * 启用插件,响应用户操作并展示UI\n * @param options\n */\n public enable(options: BasePlugin.BaseOptions = {}): void {\n if (this.disposed) return\n if (this.state.enabled) return\n const userAction = options.userAction ?? true\n this.updateState({ enabled: true }, userAction)\n this.checkMsg.pluginDisabled = ''\n this._enable({ userAction })\n }\n\n /** 禁用插件\n * @param `options` `<Option> | <undefined>`\n * @param `options.userAction` `<boolean> | <undefined>` 是否是用户操作。默认是 true。\n */\n public disable(options: BasePlugin.BaseOptions = {}) {\n if (this.disposed) return\n if (this.state.enabled === false) return\n const userAction = options.userAction ?? true\n this.updateState({ enabled: false }, userAction)\n this.checkMsg.pluginDisabled = '调用 disable 禁用'\n this._disable({ userAction })\n }\n\n /** 插件内容整体展示\n * @param `options` `<Partial<BaseOptions>> | <undefined>`\n * @param `options.userAction` `<boolean> | <undefined>` 是否是用户操作。默认是 true。\n */\n public async show(options?: Partial<PluginType.ShowHideOptions>): Promise<void> {\n if (this.state.visible) return Promise.resolve()\n if (this.disposed) return Promise.reject(new Error('不能在已销毁的插件上调用 show'))\n const mergedOptions = { userAction: true, ...options }\n this.updateState({ visible: true }, mergedOptions.userAction)\n this.checkMsg.pluginHidden = ''\n this._show(mergedOptions)\n }\n\n /** 插件内容整体隐藏\n * @param `options` `<Partial<BaseOptions>> | <undefined>`\n * @param `options.userAction` `<boolean> | <undefined>` 是否是用户操作。默认是 true。\n */\n public async hide(options?: Partial<PluginType.ShowHideOptions>) {\n if (this.state.visible === false) return\n const mergedOptions = { userAction: true, ...options }\n this.updateState({ visible: false }, mergedOptions.userAction)\n this.checkMsg.pluginDisabled = '调用 hide 隐藏'\n this._hide(mergedOptions)\n }\n\n /** 更改插件 State\n * @param `state` `<Partial<Plugin.State>>` 插件属性 `state` 的子集。\n * @param `options` `<Option> | <undefined>`\n * @param `options.userAction` `<boolean> | <undefined>` 是否是用户操作。默认是 true。\n */\n public setState(state: Partial<PluginType.State>, options: BasePlugin.BaseOptions = {}) {\n if (this.disposed) return\n const prevState = this.state\n if (equal(state, prevState, { deep: true })) return\n\n const userAction = options.userAction !== undefined ? options.userAction : true\n this.updateState(state, userAction)\n\n if (state.enabled !== undefined && prevState.enabled !== state.enabled) {\n state.enabled ? (this.checkMsg.pluginDisabled = '') : (this.checkMsg.pluginDisabled = '调用 setState 禁用')\n state.enabled ? this._enable({ userAction }) : this._disable({ userAction })\n }\n\n if (state.visible !== undefined && prevState.visible !== state.visible) {\n const options = { userAction, anime: { duration: 500 } }\n state.visible ? (this.checkMsg.pluginHidden = '') : (this.checkMsg.pluginHidden = '调用 setState 隐藏')\n state.visible ? this._show(options) : this._hide(options)\n }\n }\n\n /** 更改插件 Config\n * @param `config` `<Partial<Plugin.Config>>` 插件属性 `config` 的子集。\n * @param `options` `<Option> | <undefined>`\n */\n public updateConfig(config: Partial<PluginType.Config>, options: BasePlugin.BaseOptions = {}) {\n if (this.disposed) return\n const prevConfig = this.config\n const newConfig = { ...prevConfig, ...config }\n this._config = newConfig\n if (prevConfig.imageURL !== newConfig.imageURL) this.reloadTexture(newConfig.imageURL)\n if (prevConfig.yOffset !== newConfig.yOffset) this.updateMeshPosition(this.five.getCurrentState().panoIndex)\n if (prevConfig.yRotate !== newConfig.yRotate) this.updateMeshQuaternion(newConfig.yRotate)\n if (prevConfig.width !== newConfig.width) this.mesh.geometry = new THREE.PlaneGeometry(newConfig.width, newConfig.width)\n this.hooks.emit('configChange', { prevConfig, config: newConfig, userAction: options.userAction ?? true })\n }\n\n /**\n * 销毁插件\n * @todo 销毁贴图时,最好还是直接销毁贴图吧,this.mesh?.material.map 这种都是很深层的引用了。THREE 的建议我看也是自己去管理和销毁公共贴图。\n */\n public dispose = () => {\n if (this.disposed) return\n this._disposed = true\n this.opacityAnimeTween?.dispose()\n this.opacityAnimeTween = undefined\n this.textureLoadingPromise = null\n this.mesh.visible = false\n this.five.scene.remove(this.group)\n this.group.remove(...this.group.children)\n this.five.off('dispose', this.dispose)\n this.five.off('panoArrived', this.onFivePanoArrived)\n this.five.off('panoWillArrive', this.onFivePanoWillArrive)\n this.five.off('willLoad', this.onFiveWillLoad)\n this.five.off('modeChange', this.onFiveModeChange)\n }\n\n /** 问什么看不到模型 */\n public __whyCantSeeMesh() {\n if (this.disposed) return '插件已销毁'\n if (this.checkMsg.pluginDisabled) return this.checkMsg.pluginDisabled\n if (this.checkMsg.pluginHidden) return this.checkMsg.pluginHidden\n if (this.checkMsg.meshHidden) return this.checkMsg.meshHidden\n }\n\n private updateState(state: Partial<PluginType.State>, userAction: boolean) {\n const prevState = this.state\n this.state = { ...this.state, ...state }\n this.hooks.emit('stateChange', { state: this.state, prevState, userAction })\n }\n\n /** 根据各种条件更新 Mesh 的可见性 */\n private updateMeshVisible() {\n const { result, msg } = this.checkMeshVisible()\n this.checkMsg.meshHidden = msg\n if (result !== this.mesh.visible) this.onMeshVisibleChange(result)\n }\n\n private isCurrentOwnerWork(workCode = this.five.getCurrentState().workCode) {\n return !!this.workCode && workCode === this.workCode && this.five.getCurrentState().workCode === this.workCode\n && this.workUtil.work?.workCode === this.workCode\n }\n\n /** 根据点位更新 Mesh 坐标 */\n private updateMeshPosition(panoIndex: number) {\n if (!this.isCurrentOwnerWork()) return\n const standingPosition = this.workUtil.getObserverStandingPosition(panoIndex)\n if (!standingPosition) {\n console.warn('CurrentPanoImagePlugin: 无法获取到当前点位的 standingPosition')\n return\n }\n const position = standingPosition.clone().setY(standingPosition.y + this.config.yOffset)\n if (position) this.mesh.position.copy(position)\n }\n\n /** 重新加载贴图,调用时会先清除已有的贴图 */\n private async reloadTexture(url: string) {\n this.mesh.material.map = null\n if (url !== '') {\n const textureLoadingPromise = loadTexture(url)\n this.textureLoadingPromise = textureLoadingPromise\n const texture = await textureLoadingPromise\n if (this.disposed) { texture.dispose(); return }\n // texture.minFilter 默认是 THREE.LinearMipmapLinearFilter\n texture.minFilter = THREE.LinearFilter\n // texture.magFilter 不需要改,默认就是 THREE.LinearFilter\n // 需要判断一下 Promise 的一致性,防止在加载过程中,又加载了新的贴图\n if (this.textureLoadingPromise === textureLoadingPromise) {\n this.onTextureLoaded(texture)\n this.textureLoadingPromise = null\n }\n }\n this.updateMeshVisible()\n }\n\n /** north_rad 变化时,需要更新模型的旋转角度 */\n private updateMeshQuaternion(rad: number) {\n const quaternion = new THREE.Quaternion()\n quaternion.multiplyQuaternions(\n // 沿着自身 X 轴旋转 -90 度\n new THREE.Quaternion().setFromAxisAngle(new THREE.Vector3(1, 0, 0), -Math.PI / 2),\n // 沿着自身 Z 轴旋转 rad 弧度\n new THREE.Quaternion().setFromAxisAngle(new THREE.Vector3(0, 0, 1), rad),\n )\n this.mesh.quaternion.copy(quaternion)\n }\n\n private checkMeshVisible = (): { result: boolean; msg: string } => {\n if (this.disposed) return { result: false, msg: '插件已销毁' }\n if (!this.state.visible) return { result: false, msg: '插件隐藏' }\n if (this.config.imageURL === '') return { result: false, msg: '图片不存在' }\n if (!this.mesh.material.map) return { result: false, msg: '指南针贴图未加载' }\n if (!this.five.work) return { result: false, msg: 'Five 数据未加载' }\n if (!this.isCurrentOwnerWork()) return { result: false, msg: '当前 Work 不是插件所属 Work' }\n if (this.five.getCurrentState().mode !== 'Panorama') return { result: false, msg: '非全景模式' }\n if (this.isInPanoMoveAnime) return { result: false, msg: '处于走点动画中' }\n return { result: true, msg: '' }\n }\n\n private _enable(options: { userAction: boolean }) {\n this.hooks.emit('enable', { userAction: options.userAction })\n\n // 插件启用时,再加载贴图\n if (this.config.imageURL && !this.mesh.material.map && !this.textureLoadingPromise) {\n this.reloadTexture(this.config.imageURL)\n }\n\n // resume model effects\n this.five.scene.add(this.group)\n this.five.needsRender = true\n\n if (this.five.work) this.onFiveWillLoad()\n // enable may precede this owner's first Work; normal panoArrived will position it after loading.\n if (this.isCurrentOwnerWork() && this.five.getCurrentState().mode === 'Panorama') {\n this.onFiveModeChange()\n this.onFivePanoArrived(this.five.getCurrentState().panoIndex)\n }\n\n // resume event effects\n this.five.on('willLoad', this.onFiveWillLoad)\n this.five.on('panoArrived', this.onFivePanoArrived)\n this.five.on('panoWillArrive', this.onFivePanoWillArrive)\n this.five.on('modeChange', this.onFiveModeChange)\n }\n\n private _disable(options: { userAction: boolean }) {\n this.hooks.emit('disable', { userAction: options.userAction })\n\n // dispose model effects\n this.five.scene.remove(this.group)\n this.five.needsRender = true\n\n // dispose event effects\n this.five.off('willLoad', this.onFiveWillLoad)\n this.five.off('panoArrived', this.onFivePanoArrived)\n this.five.off('panoWillArrive', this.onFivePanoWillArrive)\n this.five.off('modeChange', this.onFiveModeChange)\n }\n\n private _show(options: PluginType.ShowHideOptions) {\n this.hooks.emit('show', options)\n this.updateMeshVisible()\n this.five.needsRender = true\n }\n\n private _hide(options: PluginType.ShowHideOptions) {\n this.hooks.emit('hide', options)\n this.updateMeshVisible()\n this.five.needsRender = true\n }\n\n /** 贴图加载完成的回调 */\n private onTextureLoaded = (texture: THREE.Texture) => {\n this.mesh.material.map = texture\n this.mesh.material.needsUpdate = true\n this.updateMeshVisible()\n }\n\n /** Five load Work 后 */\n private onFiveWillLoad = () => {\n // 重启插件时,重置 lastArrivedPanoIndex\n this.lastArrivedPanoIndex = -1\n\n this.updateMeshVisible()\n }\n\n /** 走点前 */\n private onFivePanoWillArrive = (panoIndex: number, state?: Partial<Five['state']>) => {\n if (!this.isCurrentOwnerWork(state?.workCode)) {\n this.lastArrivedPanoIndex = -1\n this.isInPanoMoveAnime = true\n this.opacityAnimeTween?.dispose()\n this.updateMeshVisible()\n return\n }\n if (panoIndex === this.five.getCurrentState().panoIndex) return\n this.isInPanoMoveAnime = true\n this.opacityAnimeTween?.dispose()\n this.updateMeshVisible()\n }\n\n /** 走点后 */\n\n private onFivePanoArrived = (panoIndex: number, state?: Partial<Five['state']>) => {\n if (!this.isCurrentOwnerWork(state?.workCode)) {\n // A global arrival may belong to another Work in the same Five.\n // Do not use its pano index for this owner's position or arrival cache.\n if (!this.isCurrentOwnerWork()) this.lastArrivedPanoIndex = -1\n this.updateMeshVisible()\n return\n }\n // 过滤同一个点位重复 arrived\n if (panoIndex === this.lastArrivedPanoIndex) return\n this.lastArrivedPanoIndex = panoIndex\n this.isInPanoMoveAnime = false\n // 根据点位跟新位置\n this.updateMeshPosition(panoIndex)\n this.updateMeshVisible()\n this.five.needsRender = true\n }\n\n private onMeshVisibleChange = (visible: boolean) => {\n this.opacityAnimeTween?.dispose()\n if (!visible) {\n this.mesh.visible = false\n return\n }\n\n this.mesh.material.setValues({ opacity: 0 })\n this.mesh.visible = true\n this.opacityAnimeTween = tweenProgress(1000)\n .onUpdate(({ progress }) => {\n this.mesh?.material.setValues({ opacity: progress })\n this.five.needsRender = true\n })\n .play()\n }\n\n private onFiveModeChange = () => {\n this.updateMeshVisible()\n }\n}\n","import type { FivePlugin } from '@realsee/five-webgpu'\nimport type * as CurrentPanoImagePluginType from './typings'\nimport { CurrentPanoImagePluginController } from './Controller'\n\nexport const CurrentPanoImagePlugin: FivePlugin<CurrentPanoImagePluginType.Params, CurrentPanoImagePluginController> = (five, params) =>\n new CurrentPanoImagePluginController(five, params)\n\nexport default CurrentPanoImagePlugin\nexport type CurrentPanoImagePluginExportType = CurrentPanoImagePluginController\nexport type { CurrentPanoImagePluginType }\n"],"mappings":"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"}
1
+ {"version":3,"file":"current-pano-image-DPLm0-o2.js","names":["BasePlugin.Controller","loadTexture","equal","Controller","THREE","CurrentPanoImagePluginController","five","defaultState","params","config","CURRENT_PANO_IMAGE_DEFAULT_IMAGE","userAction","options","mergedOptions","prevState","state","prevConfig","newConfig","msg","result","workCode","standingPosition","panoIndex","position","url","textureLoadingPromise","texture","quaternion","rad","visible","tweenProgress","progress","CurrentPanoImagePlugin"],"sources":["../../src/CurrentPanoImagePlugin/Controller.ts","../../src/CurrentPanoImagePlugin/index.ts"],"sourcesContent":["import * as THREE from 'three/webgpu'\nimport type { Five } from '@realsee/five-webgpu'\nimport * as BasePlugin from '../base/BasePlugin'\nimport type { BetterTween } from '../shared-utils/animationFrame/BetterTween'\nimport { tweenProgress } from '../shared-utils/animationFrame/BetterTween'\nimport type * as PluginType from './typings'\nimport { CURRENT_PANO_IMAGE_DEFAULT_IMAGE, equal } from '../shared-utils'\nimport { loadTexture } from '../shared-utils/three/loadTexture'\n\nexport class CurrentPanoImagePluginController extends BasePlugin.Controller<PluginType.State, PluginType.EventMap> {\n // ==================== public properties ====================\n /** 插件当前状态 */\n public state: PluginType.State\n /** 插件配置项 */\n public get config() {\n return { ...this._config }\n }\n /** 是否已经被销毁 */\n public get disposed() {\n return this._disposed\n }\n /** 查询问题使用的调试对象 */\n public checkMsg = {\n /** mesh 隐藏的原因 */\n meshHidden: '',\n /** 插件 enabled 校验信息 */\n pluginDisabled: '',\n /** 插件 visible 校验信息 */\n pluginHidden: '',\n }\n\n // ==================== private properties ====================\n private group = new THREE.Group()\n private mesh: THREE.Mesh<THREE.PlaneGeometry, THREE.MeshBasicMaterial>\n private textureLoadingPromise?: Promise<THREE.Texture> | null\n private opacityAnimeTween?: BetterTween<{ progress: number }>\n /** 是否正在走点动画中 */\n private isInPanoMoveAnime = false\n /** 上一次走点的全景图索引 */\n private lastArrivedPanoIndex = -1\n /** config 的原始值 */\n private _config: PluginType.Config\n /** disposed 的原始值 */\n private _disposed = false\n\n public constructor(five: Five, params?: PluginType.Params) {\n super(five)\n this.five = five\n\n // 处理 initialState\n const defaultState: PluginType.State = {\n enabled: true,\n visible: true,\n }\n this.state = Object.assign(defaultState, params?.initialState)\n\n // 处理 config\n const config: PluginType.Config = {\n width: 1.4,\n yOffset: 0.01,\n yRotate: 0,\n imageURL: CURRENT_PANO_IMAGE_DEFAULT_IMAGE,\n ...params?.config,\n }\n this._config = config\n\n this.group.name = 'current-pano-image-plugin-group'\n this.mesh = new THREE.Mesh(\n new THREE.PlaneGeometry(this.config.width, this.config.width),\n new THREE.MeshBasicMaterial({ transparent: true, opacity: 0, depthTest: false }),\n )\n this.mesh.visible = false\n this.group.add(this.mesh)\n this.updateMeshQuaternion(this.config.yRotate)\n\n if (!this.state.visible) this.checkMsg.pluginHidden = '初始值设置为隐藏'\n if (!this.state.enabled) this.checkMsg.pluginDisabled = '初始值设置为禁用'\n if (this.state.enabled) this._enable({ userAction: false })\n\n this.five.once('dispose', this.dispose)\n }\n\n /**\n * 启用插件,响应用户操作并展示UI\n * @param options\n */\n public enable(options: BasePlugin.BaseOptions = {}): void {\n if (this.disposed) return\n if (this.state.enabled) return\n const userAction = options.userAction ?? true\n this.updateState({ enabled: true }, userAction)\n this.checkMsg.pluginDisabled = ''\n this._enable({ userAction })\n }\n\n /** 禁用插件\n * @param `options` `<Option> | <undefined>`\n * @param `options.userAction` `<boolean> | <undefined>` 是否是用户操作。默认是 true。\n */\n public disable(options: BasePlugin.BaseOptions = {}) {\n if (this.disposed) return\n if (this.state.enabled === false) return\n const userAction = options.userAction ?? true\n this.updateState({ enabled: false }, userAction)\n this.checkMsg.pluginDisabled = '调用 disable 禁用'\n this._disable({ userAction })\n }\n\n /** 插件内容整体展示\n * @param `options` `<Partial<BaseOptions>> | <undefined>`\n * @param `options.userAction` `<boolean> | <undefined>` 是否是用户操作。默认是 true。\n */\n public async show(options?: Partial<PluginType.ShowHideOptions>): Promise<void> {\n if (this.state.visible) return Promise.resolve()\n if (this.disposed) return Promise.reject(new Error('不能在已销毁的插件上调用 show'))\n const mergedOptions = { userAction: true, ...options }\n this.updateState({ visible: true }, mergedOptions.userAction)\n this.checkMsg.pluginHidden = ''\n this._show(mergedOptions)\n }\n\n /** 插件内容整体隐藏\n * @param `options` `<Partial<BaseOptions>> | <undefined>`\n * @param `options.userAction` `<boolean> | <undefined>` 是否是用户操作。默认是 true。\n */\n public async hide(options?: Partial<PluginType.ShowHideOptions>) {\n if (this.state.visible === false) return\n const mergedOptions = { userAction: true, ...options }\n this.updateState({ visible: false }, mergedOptions.userAction)\n this.checkMsg.pluginDisabled = '调用 hide 隐藏'\n this._hide(mergedOptions)\n }\n\n /** 更改插件 State\n * @param `state` `<Partial<Plugin.State>>` 插件属性 `state` 的子集。\n * @param `options` `<Option> | <undefined>`\n * @param `options.userAction` `<boolean> | <undefined>` 是否是用户操作。默认是 true。\n */\n public setState(state: Partial<PluginType.State>, options: BasePlugin.BaseOptions = {}) {\n if (this.disposed) return\n const prevState = this.state\n if (equal(state, prevState, { deep: true })) return\n\n const userAction = options.userAction !== undefined ? options.userAction : true\n this.updateState(state, userAction)\n\n if (state.enabled !== undefined && prevState.enabled !== state.enabled) {\n state.enabled ? (this.checkMsg.pluginDisabled = '') : (this.checkMsg.pluginDisabled = '调用 setState 禁用')\n state.enabled ? this._enable({ userAction }) : this._disable({ userAction })\n }\n\n if (state.visible !== undefined && prevState.visible !== state.visible) {\n const options = { userAction, anime: { duration: 500 } }\n state.visible ? (this.checkMsg.pluginHidden = '') : (this.checkMsg.pluginHidden = '调用 setState 隐藏')\n state.visible ? this._show(options) : this._hide(options)\n }\n }\n\n /** 更改插件 Config\n * @param `config` `<Partial<Plugin.Config>>` 插件属性 `config` 的子集。\n * @param `options` `<Option> | <undefined>`\n */\n public updateConfig(config: Partial<PluginType.Config>, options: BasePlugin.BaseOptions = {}) {\n if (this.disposed) return\n const prevConfig = this.config\n const newConfig = { ...prevConfig, ...config }\n this._config = newConfig\n if (prevConfig.imageURL !== newConfig.imageURL) this.reloadTexture(newConfig.imageURL)\n if (prevConfig.yOffset !== newConfig.yOffset) this.updateMeshPosition(this.five.getCurrentState().panoIndex)\n if (prevConfig.yRotate !== newConfig.yRotate) this.updateMeshQuaternion(newConfig.yRotate)\n if (prevConfig.width !== newConfig.width) this.mesh.geometry = new THREE.PlaneGeometry(newConfig.width, newConfig.width)\n this.hooks.emit('configChange', { prevConfig, config: newConfig, userAction: options.userAction ?? true })\n }\n\n /**\n * 销毁插件\n * @todo 销毁贴图时,最好还是直接销毁贴图吧,this.mesh?.material.map 这种都是很深层的引用了。THREE 的建议我看也是自己去管理和销毁公共贴图。\n */\n public dispose = () => {\n if (this.disposed) return\n this._disposed = true\n this.opacityAnimeTween?.dispose()\n this.opacityAnimeTween = undefined\n this.textureLoadingPromise = null\n this.mesh.visible = false\n this.five.scene.remove(this.group)\n this.group.remove(...this.group.children)\n this.five.off('dispose', this.dispose)\n this.five.off('panoArrived', this.onFivePanoArrived)\n this.five.off('panoWillArrive', this.onFivePanoWillArrive)\n this.five.off('willLoad', this.onFiveWillLoad)\n this.five.off('modeChange', this.onFiveModeChange)\n }\n\n /** 问什么看不到模型 */\n public __whyCantSeeMesh() {\n if (this.disposed) return '插件已销毁'\n if (this.checkMsg.pluginDisabled) return this.checkMsg.pluginDisabled\n if (this.checkMsg.pluginHidden) return this.checkMsg.pluginHidden\n if (this.checkMsg.meshHidden) return this.checkMsg.meshHidden\n }\n\n private updateState(state: Partial<PluginType.State>, userAction: boolean) {\n const prevState = this.state\n this.state = { ...this.state, ...state }\n this.hooks.emit('stateChange', { state: this.state, prevState, userAction })\n }\n\n /** 根据各种条件更新 Mesh 的可见性 */\n private updateMeshVisible() {\n const { result, msg } = this.checkMeshVisible()\n this.checkMsg.meshHidden = msg\n if (result !== this.mesh.visible) this.onMeshVisibleChange(result)\n }\n\n private isCurrentOwnerWork(workCode = this.five.getCurrentState().workCode) {\n return !!this.workCode && workCode === this.workCode && this.five.getCurrentState().workCode === this.workCode\n && this.workUtil.work?.workCode === this.workCode\n }\n\n /** 根据点位更新 Mesh 坐标 */\n private updateMeshPosition(panoIndex: number) {\n if (!this.isCurrentOwnerWork()) return\n const standingPosition = this.workUtil.getObserverStandingPosition(panoIndex)\n if (!standingPosition) {\n console.warn('CurrentPanoImagePlugin: 无法获取到当前点位的 standingPosition')\n return\n }\n const position = standingPosition.clone().setY(standingPosition.y + this.config.yOffset)\n if (position) this.mesh.position.copy(position)\n }\n\n /** 重新加载贴图,调用时会先清除已有的贴图 */\n private async reloadTexture(url: string) {\n this.mesh.material.map = null\n if (url !== '') {\n const textureLoadingPromise = loadTexture(url)\n this.textureLoadingPromise = textureLoadingPromise\n const texture = await textureLoadingPromise\n if (this.disposed) { texture.dispose(); return }\n // texture.minFilter 默认是 THREE.LinearMipmapLinearFilter\n texture.minFilter = THREE.LinearFilter\n // texture.magFilter 不需要改,默认就是 THREE.LinearFilter\n // 需要判断一下 Promise 的一致性,防止在加载过程中,又加载了新的贴图\n if (this.textureLoadingPromise === textureLoadingPromise) {\n this.onTextureLoaded(texture)\n this.textureLoadingPromise = null\n }\n }\n this.updateMeshVisible()\n }\n\n /** north_rad 变化时,需要更新模型的旋转角度 */\n private updateMeshQuaternion(rad: number) {\n const quaternion = new THREE.Quaternion()\n quaternion.multiplyQuaternions(\n // 沿着自身 X 轴旋转 -90 度\n new THREE.Quaternion().setFromAxisAngle(new THREE.Vector3(1, 0, 0), -Math.PI / 2),\n // 沿着自身 Z 轴旋转 rad 弧度\n new THREE.Quaternion().setFromAxisAngle(new THREE.Vector3(0, 0, 1), rad),\n )\n this.mesh.quaternion.copy(quaternion)\n }\n\n private checkMeshVisible = (): { result: boolean; msg: string } => {\n if (this.disposed) return { result: false, msg: '插件已销毁' }\n if (!this.state.visible) return { result: false, msg: '插件隐藏' }\n if (this.config.imageURL === '') return { result: false, msg: '图片不存在' }\n if (!this.mesh.material.map) return { result: false, msg: '指南针贴图未加载' }\n if (!this.five.work) return { result: false, msg: 'Five 数据未加载' }\n if (!this.isCurrentOwnerWork()) return { result: false, msg: '当前 Work 不是插件所属 Work' }\n if (this.five.getCurrentState().mode !== 'Panorama') return { result: false, msg: '非全景模式' }\n if (this.isInPanoMoveAnime) return { result: false, msg: '处于走点动画中' }\n return { result: true, msg: '' }\n }\n\n private _enable(options: { userAction: boolean }) {\n this.hooks.emit('enable', { userAction: options.userAction })\n\n // 插件启用时,再加载贴图\n if (this.config.imageURL && !this.mesh.material.map && !this.textureLoadingPromise) {\n this.reloadTexture(this.config.imageURL)\n }\n\n // resume model effects\n this.five.scene.add(this.group)\n this.five.needsRender = true\n\n if (this.five.work) this.onFiveWillLoad()\n // enable may precede this owner's first Work; normal panoArrived will position it after loading.\n if (this.isCurrentOwnerWork() && this.five.getCurrentState().mode === 'Panorama') {\n this.onFiveModeChange()\n this.onFivePanoArrived(this.five.getCurrentState().panoIndex)\n }\n\n // resume event effects\n this.five.on('willLoad', this.onFiveWillLoad)\n this.five.on('panoArrived', this.onFivePanoArrived)\n this.five.on('panoWillArrive', this.onFivePanoWillArrive)\n this.five.on('modeChange', this.onFiveModeChange)\n }\n\n private _disable(options: { userAction: boolean }) {\n this.hooks.emit('disable', { userAction: options.userAction })\n\n // dispose model effects\n this.five.scene.remove(this.group)\n this.five.needsRender = true\n\n // dispose event effects\n this.five.off('willLoad', this.onFiveWillLoad)\n this.five.off('panoArrived', this.onFivePanoArrived)\n this.five.off('panoWillArrive', this.onFivePanoWillArrive)\n this.five.off('modeChange', this.onFiveModeChange)\n }\n\n private _show(options: PluginType.ShowHideOptions) {\n this.hooks.emit('show', options)\n this.updateMeshVisible()\n this.five.needsRender = true\n }\n\n private _hide(options: PluginType.ShowHideOptions) {\n this.hooks.emit('hide', options)\n this.updateMeshVisible()\n this.five.needsRender = true\n }\n\n /** 贴图加载完成的回调 */\n private onTextureLoaded = (texture: THREE.Texture) => {\n this.mesh.material.map = texture\n this.mesh.material.needsUpdate = true\n this.updateMeshVisible()\n }\n\n /** Five load Work 后 */\n private onFiveWillLoad = () => {\n // 重启插件时,重置 lastArrivedPanoIndex\n this.lastArrivedPanoIndex = -1\n\n this.updateMeshVisible()\n }\n\n /** 走点前 */\n private onFivePanoWillArrive = (panoIndex: number, state?: Partial<Five['state']>) => {\n if (!this.isCurrentOwnerWork(state?.workCode)) {\n this.lastArrivedPanoIndex = -1\n this.isInPanoMoveAnime = true\n this.opacityAnimeTween?.dispose()\n this.updateMeshVisible()\n return\n }\n if (panoIndex === this.five.getCurrentState().panoIndex) return\n this.isInPanoMoveAnime = true\n this.opacityAnimeTween?.dispose()\n this.updateMeshVisible()\n }\n\n /** 走点后 */\n\n private onFivePanoArrived = (panoIndex: number, state?: Partial<Five['state']>) => {\n if (!this.isCurrentOwnerWork(state?.workCode)) {\n // A global arrival may belong to another Work in the same Five.\n // Do not use its pano index for this owner's position or arrival cache.\n if (!this.isCurrentOwnerWork()) this.lastArrivedPanoIndex = -1\n this.updateMeshVisible()\n return\n }\n // 过滤同一个点位重复 arrived\n if (panoIndex === this.lastArrivedPanoIndex) return\n this.lastArrivedPanoIndex = panoIndex\n this.isInPanoMoveAnime = false\n // 根据点位跟新位置\n this.updateMeshPosition(panoIndex)\n this.updateMeshVisible()\n this.five.needsRender = true\n }\n\n private onMeshVisibleChange = (visible: boolean) => {\n this.opacityAnimeTween?.dispose()\n if (!visible) {\n this.mesh.visible = false\n return\n }\n\n this.mesh.material.setValues({ opacity: 0 })\n this.mesh.visible = true\n this.opacityAnimeTween = tweenProgress(1000)\n .onUpdate(({ progress }) => {\n this.mesh?.material.setValues({ opacity: progress })\n this.five.needsRender = true\n })\n .play()\n }\n\n private onFiveModeChange = () => {\n this.updateMeshVisible()\n }\n}\n","import type { FivePlugin } from '@realsee/five-webgpu'\nimport type * as CurrentPanoImagePluginType from './typings'\nimport { CurrentPanoImagePluginController } from './Controller'\n\nexport const CurrentPanoImagePlugin: FivePlugin<CurrentPanoImagePluginType.Params, CurrentPanoImagePluginController> = (five, params) =>\n new CurrentPanoImagePluginController(five, params)\n\nexport default CurrentPanoImagePlugin\nexport type CurrentPanoImagePluginExportType = CurrentPanoImagePluginController\nexport type { CurrentPanoImagePluginType }\n"],"mappings":"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"}
@@ -3,7 +3,7 @@ import { t } from "./throttle-YRIkRKaX.js";
3
3
  import { a as n } from "./defaultUrls-CfMtGzqM.js";
4
4
  import { i as r, n as i, r as a, t as o } from "./changeMode-D_I2AOjH.js";
5
5
  import { t as s } from "./equal-BiDAilPV.js";
6
- import { t as c } from "./BasePluginWithData-CWgZY4u8.js";
6
+ import { t as c } from "./BasePluginWithData-BS2O9hNu.js";
7
7
  import { C as l, D as u, F as d, G as f, H as p, J as m, K as h, L as g, M as _, N as v, P as y, Q as b, R as x, U as S, V as C, W as w, X as T, Y as E, _ as D, b as O, ct as k, et as A, f as j, g as M, i as N, it as P, j as F, k as I, m as L, n as R, o as z, p as B, q as V, r as H, rt as U, st as W, t as G, tt as K, x as q, y as ee, z as J } from "./component.svelte-D5LYqt50.js";
8
8
  import { t as Y } from "./rad2Deg-DutG55Wb.js";
9
9
  import { i as te, n as ne, r as re, t as ie } from "./fontSize-DMhRSrtx.js";
@@ -6056,4 +6056,4 @@ var kn = class extends c {
6056
6056
  //#endregion
6057
6057
  export { an as a, Mt as c, An as i, Q as l, jn as n, Bt as o, Nn as r, Rt as s, Mn as t };
6058
6058
 
6059
- //# sourceMappingURL=floorplan-DwcrbASA.js.map
6059
+ //# sourceMappingURL=floorplan-B6Y-8xjB.js.map