@realsee/dnalogel 4.0.0-webgpu.3 → 4.0.0-webgpu.4
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/CHANGELOG.md +6 -0
- package/dist/floorplan.js +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +270 -35
- package/dist/index.js.map +1 -0
- package/dist/internal/{BasePlugin-CT5K8m36.js → BasePlugin-DC5m72La.js} +3 -3
- package/dist/internal/{BasePlugin-CT5K8m36.js.map → BasePlugin-DC5m72La.js.map} +1 -1
- package/dist/internal/BasePluginWithData-D_0W46_q.js +7 -0
- package/dist/internal/{BasePluginWithData-9z4tpAT4.js.map → BasePluginWithData-D_0W46_q.js.map} +1 -1
- package/dist/internal/{BetterTween-BX0aTvP1.js → BetterTween-DmptqE8m.js} +2 -2
- package/dist/internal/{BetterTween-BX0aTvP1.js.map → BetterTween-DmptqE8m.js.map} +1 -1
- package/dist/internal/{CSS3DRenderPlugin-ccSpcvwd.js → CSS3DRenderPlugin-CEatgl0m.js} +3 -3
- package/dist/internal/CSS3DRenderPlugin-CEatgl0m.js.map +1 -0
- package/dist/internal/{Controller-Csut_kcH.js → Controller-D6o4OGWJ.js} +8 -8
- package/dist/internal/{Controller-Csut_kcH.js.map → Controller-D6o4OGWJ.js.map} +1 -1
- package/dist/internal/{FiveDomEvents-3H9NvDOz.js → FiveDomEvents-BUBLFzti.js} +2 -2
- package/dist/internal/{FiveDomEvents-3H9NvDOz.js.map → FiveDomEvents-BUBLFzti.js.map} +1 -1
- package/dist/internal/FivePuppet-C6QmVY70.js +67 -0
- package/dist/internal/FivePuppet-C6QmVY70.js.map +1 -0
- package/dist/internal/{PointHelper-D565h9b_.js → PointHelper-DIhgdjY2.js} +48 -48
- package/dist/internal/{PointHelper-D565h9b_.js.map → PointHelper-DIhgdjY2.js.map} +1 -1
- package/dist/internal/{Polygon-CBGvYUfJ.js → Polygon-D3xIL1Pl.js} +30 -30
- package/dist/internal/{Polygon-CBGvYUfJ.js.map → Polygon-D3xIL1Pl.js.map} +1 -1
- package/dist/internal/{Prism-Dm5ESkgg.js → Prism-CJlyAEAU.js} +13 -13
- package/dist/internal/{Prism-Dm5ESkgg.js.map → Prism-CJlyAEAU.js.map} +1 -1
- package/dist/internal/{Rectangle-D-zkDycu.js → Rectangle-BpL9lNKU.js} +118 -129
- package/dist/internal/Rectangle-BpL9lNKU.js.map +1 -0
- package/dist/internal/{Work-DF8j5GnL.js → Work-BE4AgdwH.js} +9 -9
- package/dist/internal/{Work-DF8j5GnL.js.map → Work-BE4AgdwH.js.map} +1 -1
- package/dist/internal/{animationFrame-XGKHIeQK.js → animationFrame-CacKXN8l.js} +14 -3
- package/dist/internal/animationFrame-CacKXN8l.js.map +1 -0
- package/dist/internal/{area-maker-Bd9l2pIp.js → area-maker-Bnhx4SkH.js} +4 -4
- package/dist/internal/{area-maker-Bd9l2pIp.js.map → area-maker-Bnhx4SkH.js.map} +1 -1
- package/dist/internal/{boundingBox-DvCor5Hd.js → boundingBox-CIqXgNXW.js} +2 -2
- package/dist/internal/{boundingBox-DvCor5Hd.js.map → boundingBox-CIqXgNXW.js.map} +1 -1
- package/dist/internal/{camera-movement-CwI7UqUk.js → camera-movement-C1pwfMk_.js} +2 -2
- package/dist/internal/camera-movement-C1pwfMk_.js.map +1 -0
- package/dist/internal/{changeMode-BVGYCoqu.js → changeMode-D_I2AOjH.js} +2 -2
- package/dist/internal/{changeMode-BVGYCoqu.js.map → changeMode-D_I2AOjH.js.map} +1 -1
- package/dist/internal/{controller-BWkZT0l1.js → controller-DIDtFrBE.js} +1991 -2050
- package/dist/internal/controller-DIDtFrBE.js.map +1 -0
- package/dist/internal/{cruise-C3F0eNQ-.js → cruise-B50Tcq66.js} +2 -2
- package/dist/internal/{cruise-C3F0eNQ-.js.map → cruise-B50Tcq66.js.map} +1 -1
- package/dist/internal/{current-pano-image-DKUWluR-.js → current-pano-image-BCFr6njt.js} +4 -4
- package/dist/internal/{current-pano-image-DKUWluR-.js.map → current-pano-image-BCFr6njt.js.map} +1 -1
- package/dist/internal/{defaultUrls-CjKkS9k9.js → defaultUrls-CfMtGzqM.js} +14 -3
- package/dist/internal/defaultUrls-CfMtGzqM.js.map +1 -0
- package/dist/internal/{fire-scene-CczaBz2_.js → fire-scene-BzZGvyh_.js} +9 -4
- package/dist/internal/fire-scene-BzZGvyh_.js.map +1 -0
- package/dist/internal/{fiveModelLoad-mg-TnpnM.js → fiveModelLoad-BUIBYxzp.js} +2 -2
- package/dist/internal/{fiveModelLoad-mg-TnpnM.js.map → fiveModelLoad-BUIBYxzp.js.map} +1 -1
- package/dist/internal/{floorplan-KWlIsTvO.js → floorplan-C8BGw87S.js} +5 -5
- package/dist/internal/{floorplan-KWlIsTvO.js.map → floorplan-C8BGw87S.js.map} +1 -1
- package/dist/internal/{generatePolygonGeometry-B_5JFq8y.js → generatePolygonGeometry-BOnzdCaG.js} +181 -178
- package/dist/internal/generatePolygonGeometry-BOnzdCaG.js.map +1 -0
- package/dist/internal/{lookObject-wesf8xt6.js → lookObject-DuRab5wf.js} +2 -2
- package/dist/internal/{lookObject-wesf8xt6.js.map → lookObject-DuRab5wf.js.map} +1 -1
- package/dist/internal/{measure-BX6boAC7.js → measure-B4jFwdQ6.js} +5 -5
- package/dist/internal/{measure-BX6boAC7.js.map → measure-B4jFwdQ6.js.map} +1 -1
- package/dist/internal/{model-chassis-compass-InVNmOAQ.js → model-chassis-compass-C6NTVMLo.js} +2 -2
- package/dist/internal/{model-chassis-compass-InVNmOAQ.js.map → model-chassis-compass-C6NTVMLo.js.map} +1 -1
- package/dist/internal/{model-entry-door-guide-wZbyY77a.js → model-entry-door-guide-DnGTLY2s.js} +2 -2
- package/dist/internal/{model-entry-door-guide-wZbyY77a.js.map → model-entry-door-guide-DnGTLY2s.js.map} +1 -1
- package/dist/internal/{model-maker-uO8xlTuO.js → model-maker-B1mnDdKY.js} +15 -15
- package/dist/internal/{model-maker-uO8xlTuO.js.map → model-maker-B1mnDdKY.js.map} +1 -1
- package/dist/internal/{model-tv-video-DzXb2JRf.js → model-tv-video-BP-7HoDC.js} +2 -2
- package/dist/internal/{model-tv-video-DzXb2JRf.js.map → model-tv-video-BP-7HoDC.js.map} +1 -1
- package/dist/internal/{model-view-CBeeMM98.js → model-view-BWUU0-uq.js} +2 -2
- package/dist/internal/{model-view-CBeeMM98.js.map → model-view-BWUU0-uq.js.map} +1 -1
- package/dist/internal/object3d-helper-CbRRhnLV.js +7 -0
- package/dist/internal/{object3d-helper-DDYsVPN6.js.map → object3d-helper-CbRRhnLV.js.map} +1 -1
- package/dist/internal/{pano-compass-jSr629BP.js → pano-compass-BRTM0dCc.js} +7 -7
- package/dist/internal/{pano-compass-jSr629BP.js.map → pano-compass-BRTM0dCc.js.map} +1 -1
- package/dist/internal/{pano-door-label-DKoYIKLa.js → pano-door-label-BLjYGZrr.js} +3 -3
- package/dist/internal/{pano-door-label-DKoYIKLa.js.map → pano-door-label-BLjYGZrr.js.map} +1 -1
- package/dist/internal/{pano-measure-DW9mdx1O.js → pano-measure-BIgCWkVJ.js} +14 -14
- package/dist/internal/{pano-measure-DW9mdx1O.js.map → pano-measure-BIgCWkVJ.js.map} +1 -1
- package/dist/internal/{pano-ruler-pro-D7q0Ob21.js → pano-ruler-pro-D9yTbHJz.js} +2 -2
- package/dist/internal/{pano-ruler-pro-D7q0Ob21.js.map → pano-ruler-pro-D9yTbHJz.js.map} +1 -1
- package/dist/internal/{pano-spatial-tag-D0qn-__S.js → pano-spatial-tag-B7Gxn3BS.js} +3 -3
- package/dist/internal/{pano-spatial-tag-D0qn-__S.js.map → pano-spatial-tag-B7Gxn3BS.js.map} +1 -1
- package/dist/internal/{pano-tag-BW5MXXws.js → pano-tag-Bchz-jED.js} +2 -2
- package/dist/internal/{pano-tag-BW5MXXws.js.map → pano-tag-Bchz-jED.js.map} +1 -1
- package/dist/internal/{pano-video-Bmud_CAn.js → pano-video-BufYQMqo.js} +3 -3
- package/dist/internal/{pano-video-Bmud_CAn.js.map → pano-video-BufYQMqo.js.map} +1 -1
- package/dist/internal/{pipeline-DDqgb1gw.js → pipeline-t_3IMXKB.js} +4 -4
- package/dist/internal/{pipeline-DDqgb1gw.js.map → pipeline-t_3IMXKB.js.map} +1 -1
- package/dist/internal/{sculpt-BNkLJR6p.js → sculpt-BCK4PMwL.js} +64 -63
- package/dist/internal/{sculpt-BNkLJR6p.js.map → sculpt-BCK4PMwL.js.map} +1 -1
- package/dist/internal/tagPosition-DA9YguT8.js +176 -0
- package/dist/internal/tagPosition-DA9YguT8.js.map +1 -0
- package/dist/internal/withResolvers-DVr4bnnk.js +15 -0
- package/dist/internal/withResolvers-DVr4bnnk.js.map +1 -0
- package/dist/plugins/area-maker.js +1 -1
- package/dist/plugins/camera-movement.js +1 -1
- package/dist/plugins/cruise.js +2 -2
- package/dist/plugins/css3d-render.js +1 -1
- package/dist/plugins/current-pano-image.js +1 -1
- package/dist/plugins/digital-performance.d.ts +1 -1
- package/dist/plugins/digital-performance.js +1 -1
- package/dist/plugins/fire-scene.d.ts +1 -1
- package/dist/plugins/fire-scene.js +1 -1
- package/dist/plugins/guide-line.js +1 -1
- package/dist/plugins/measure.js +1 -1
- package/dist/plugins/model-chassis-compass.js +1 -1
- package/dist/plugins/model-entry-door-guide.js +1 -1
- package/dist/plugins/model-maker.d.ts +1 -1
- package/dist/plugins/model-maker.js +1 -1
- package/dist/plugins/model-tv-video.js +1 -1
- package/dist/plugins/model-view.js +1 -1
- package/dist/plugins/object3d-helper.d.ts +1 -1
- package/dist/plugins/object3d-helper.js +3 -1
- package/dist/plugins/pano-compass.js +1 -1
- package/dist/plugins/pano-door-label.js +1 -1
- package/dist/plugins/pano-measure.js +1 -1
- package/dist/plugins/pano-ruler-pro.js +1 -1
- package/dist/plugins/pano-spatial-tag.js +1 -1
- package/dist/plugins/pano-tag.d.ts +1 -1
- package/dist/plugins/pano-tag.js +4 -1
- package/dist/plugins/pano-video.js +1 -1
- package/dist/plugins/pipeline.js +1 -1
- package/dist/plugins/sculpt.d.ts +1 -1
- package/dist/plugins/sculpt.js +7 -1
- package/dist/types/public/index.d.ts +2 -0
- package/dist/types/public/plugins/digital-performance.d.ts +1 -0
- package/dist/types/public/plugins/fire-scene.d.ts +1 -0
- package/dist/types/public/plugins/model-maker.d.ts +1 -0
- package/dist/types/public/plugins/object3d-helper.d.ts +1 -0
- package/dist/types/public/plugins/pano-tag.d.ts +2 -0
- package/dist/types/public/plugins/sculpt.d.ts +8 -0
- package/dist/types/public/utils.d.ts +5 -0
- package/dist/utils.d.ts +1 -1
- package/dist/utils.js +16 -50
- package/package.json +1 -1
- package/dist/internal/BasePluginWithData-9z4tpAT4.js +0 -7
- package/dist/internal/CSS3DRenderPlugin-ccSpcvwd.js.map +0 -1
- package/dist/internal/Rectangle-D-zkDycu.js.map +0 -1
- package/dist/internal/animationFrame-XGKHIeQK.js.map +0 -1
- package/dist/internal/blink-DD_0mH-m.js +0 -113
- package/dist/internal/blink-DD_0mH-m.js.map +0 -1
- package/dist/internal/camera-movement-CwI7UqUk.js.map +0 -1
- package/dist/internal/controller-BWkZT0l1.js.map +0 -1
- package/dist/internal/defaultUrls-CjKkS9k9.js.map +0 -1
- package/dist/internal/fire-scene-CczaBz2_.js.map +0 -1
- package/dist/internal/generatePolygonGeometry-B_5JFq8y.js.map +0 -1
- package/dist/internal/object3d-helper-DDYsVPN6.js +0 -7
- package/dist/utils.js.map +0 -1
package/dist/internal/{model-chassis-compass-InVNmOAQ.js → model-chassis-compass-C6NTVMLo.js}
RENAMED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { c as e } from "./defaultUrls-CfMtGzqM.js";
|
|
2
2
|
import { t } from "./disposeOwnedObject-DsYpFpqh.js";
|
|
3
3
|
import { n, t as r } from "./FBXLoader-Chl2iTDE.js";
|
|
4
4
|
import * as i from "three/webgpu";
|
|
@@ -81,4 +81,4 @@ var a = (e, t, n) => {
|
|
|
81
81
|
//#endregion
|
|
82
82
|
export { s as t };
|
|
83
83
|
|
|
84
|
-
//# sourceMappingURL=model-chassis-compass-
|
|
84
|
+
//# sourceMappingURL=model-chassis-compass-C6NTVMLo.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model-chassis-compass-
|
|
1
|
+
{"version":3,"file":"model-chassis-compass-C6NTVMLo.js","names":["MODEL_CHASSIS_COMPASS_DEFAULT_MODEL","FBXLoader","THREE","genRotationMatrix","matrix","euler","x","y","z","bject3d2LocalMatrix","scale","mesh","rotation","position","ModelChassisCompassPlugin","defaultFbxUrl","params","defaultNorthRad","state","northRad","disposed","generation","enabled","updateObjectMatrix","load","request","fbxUrl","data","object","disposeOwnedObject","transformToMeshBasicMaterial","enable","onCameraUpdate","getPositionY","latitude","ratio","five","disable","bounding","xOffset","zOffset","maxOffset","xMax","zMax","xMin","yMin","zMin","dispose"],"sources":["../../src/shared-utils/object3d2LocalMatrix.ts","../../src/ModelChassisCompassPlugin/Plugin.ts"],"sourcesContent":["import * as THREE from 'three/webgpu'\n\nexport const genRotationMatrix = (x: number, y: number, z: number) => {\n const matrix = new THREE.Matrix4()\n const euler = new THREE.Euler(x, y, z, 'YXZ')\n matrix.makeRotationFromEuler(euler)\n return matrix\n}\n\nconst bject3d2LocalMatrix = (\n mesh: THREE.Object3D,\n {\n scale,\n rotation,\n position,\n }: {\n scale: number\n rotation: number[]\n position: { x: number; y: number; z: number }\n },\n) => {\n if (scale) {\n mesh.scale.set(scale, scale, scale)\n }\n if (rotation) {\n const [x, y, z] = rotation\n if (x) {\n mesh.applyMatrix4(genRotationMatrix(x, 0, 0))\n }\n if (y) {\n mesh.applyMatrix4(genRotationMatrix(0, y, 0))\n }\n if (z) {\n mesh.applyMatrix4(genRotationMatrix(0, 0, z))\n }\n }\n if (position) {\n mesh.position.set(position.x, position.y, position.z)\n }\n return mesh\n}\n\nexport default bject3d2LocalMatrix\n","import type { Five, FivePlugin } from '@realsee/five-webgpu'\nimport * as THREE from 'three/webgpu'\nimport object3d2LocalMatrix from '../shared-utils/object3d2LocalMatrix'\nimport transformToMeshBasicMaterial from '../shared-utils/three/transformToMeshBasicMaterial'\nimport { FBXLoader } from '../shared-utils/three/FBXLoader'\nimport { disposeOwnedObject } from '../shared-utils/three/disposeOwnedObject'\nimport { MODEL_CHASSIS_COMPASS_DEFAULT_MODEL } from '../shared-utils/url/defaultUrls'\n\nexport interface ModelChassisCompassPluginParameterType {\n north_rad?: number\n fbx_url?: string\n}\n\nexport interface ModelChassisCompassPluginData {\n north_rad?: number\n fbx_url?: string\n}\n\ninterface ModelChassisCompassPluginState {\n yBase?: number\n object?: THREE.Object3D\n}\n\nexport interface ModelChassisCompassPluginExportType {\n enable: () => void\n disable: () => void\n load: (data?: ModelChassisCompassPluginData) => Promise<boolean>\n dispose: () => void\n}\n\n/**\n * 模型底盘指南针插件\n */\nexport const ModelChassisCompassPlugin: FivePlugin<ModelChassisCompassPluginParameterType, ModelChassisCompassPluginExportType> = (\n five: Five,\n params,\n) => {\n const defaultFbxUrl = params?.fbx_url || MODEL_CHASSIS_COMPASS_DEFAULT_MODEL\n\n const defaultNorthRad = params?.north_rad ?? undefined\n\n // 局部状态\n const state: ModelChassisCompassPluginState = {}\n\n let position = { x: 0, y: 0, z: 0 }\n let rotation = [0, 0, 0]\n let scale = 1\n let northRad = defaultNorthRad\n let disposed = false, generation = 0, enabled = false\n\n five.on('modelLoaded', updateObjectMatrix)\n\n const load = async (data?: ModelChassisCompassPluginData) => {\n if (disposed) return false\n const request = ++generation\n const fbxUrl = data?.fbx_url || defaultFbxUrl\n northRad = data?.north_rad ?? defaultNorthRad\n\n if (typeof northRad !== 'number') {\n throw new Error('\"northRad\"配置参数缺失:未配置指南针指向!')\n }\n\n const fbxLoader = new FBXLoader()\n const object = (await fbxLoader.loadAsync(fbxUrl)) as THREE.Group\n if (disposed || request !== generation) { disposeOwnedObject(object); return false }\n if (state.object) disposeOwnedObject(state.object)\n transformToMeshBasicMaterial(object, {\n transparent: true,\n side: THREE.DoubleSide,\n blending: THREE.AdditiveBlending,\n })\n\n state.object = object\n\n updateObjectMatrix()\n if (enabled) enable()\n return true\n }\n\n const onCameraUpdate = ({ latitude }: { latitude: number }) => {\n if (!state.object) return\n const y = getPositionY(latitude)\n if (y !== undefined) {\n state.object.position.y = y\n }\n }\n\n const getPositionY = (latitude: number) => {\n if (state.yBase === undefined) return\n const difference = 0.6\n if (latitude >= Math.PI / 4) return state.yBase - (difference + 1.6)\n const ratio = latitude * (4 / Math.PI)\n return state.yBase - (difference * ratio + 1.6)\n }\n\n const enable = () => {\n if (disposed || !state.object) return\n enabled = true\n const y = getPositionY(five.getPose().latitude)\n if (y !== undefined) state.object.position.y = y\n five.scene.add(state.object)\n five.needsRender = true\n five.on('cameraDirectionUpdate', onCameraUpdate)\n }\n\n const disable = () => {\n enabled = false\n if (!state.object) return\n five.scene.remove(state.object)\n five.needsRender = true\n five.off('cameraDirectionUpdate', onCameraUpdate)\n }\n\n function updateObjectMatrix() {\n const object = state.object\n if (!object) return\n const bounding = five.model.bounding\n const xOffset = bounding.max.x - bounding.min.x\n const zOffset = bounding.max.z - bounding.min.z\n const maxOffset = Math.max(xOffset, zOffset)\n const {\n max: { x: xMax, z: zMax },\n min: { x: xMin, y: yMin, z: zMin },\n } = bounding\n\n state.yBase = yMin\n position = { x: (xMax + xMin) / 2, y: yMin - 1.6, z: (zMax + zMin) / 2 }\n rotation = [0, northRad - Math.PI / 2, 0]\n scale = 0.0045 * maxOffset\n object3d2LocalMatrix(object, { position, rotation, scale })\n }\n\n const dispose = () => {\n if (disposed) return\n disposed = true; generation += 1\n disable()\n if (state.object) disposeOwnedObject(state.object)\n state.object = undefined\n five.off('modelLoaded', updateObjectMatrix)\n five.off('dispose', dispose)\n }\n five.once('dispose', dispose)\n return { load, disable, enable, dispose }\n}\n\nexport default ModelChassisCompassPlugin\n"],"mappings":"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"}
|
package/dist/internal/{model-entry-door-guide-wZbyY77a.js → model-entry-door-guide-DnGTLY2s.js}
RENAMED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { l as e } from "./defaultUrls-CfMtGzqM.js";
|
|
2
2
|
import { t } from "./disposeOwnedObject-DsYpFpqh.js";
|
|
3
3
|
import { n, t as r } from "./FBXLoader-Chl2iTDE.js";
|
|
4
4
|
import * as i from "three/webgpu";
|
|
@@ -81,4 +81,4 @@ var u = ({ x: e, y: t, z: n }) => new c(e, t, n), d = (o, c) => {
|
|
|
81
81
|
//#endregion
|
|
82
82
|
export { d as t };
|
|
83
83
|
|
|
84
|
-
//# sourceMappingURL=model-entry-door-guide-
|
|
84
|
+
//# sourceMappingURL=model-entry-door-guide-DnGTLY2s.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model-entry-door-guide-wZbyY77a.js","names":["MODEL_ENTRY_DOOR_GUIDE_PLUGIN_DEFAULT_MODEL","FBXLoader","THREE","createCanvasTextTexture","size","config","fontSize","backgroundColor","fontColor","textAlign","canvas","context","text","CanvasTexture","transformPositionToVector3","Vector3","x","y","z","ModelEntryDoorGuidePlugin","state","defaultAnimationEnable","params","defaultModelPosition","defaultRad","defaultFbxUrl","mixers","disposed","generation","releaseObject","mixer","disposeOwnedObject","load","request","position","data","modelPosition","rad","fbxUrl","object","transformToMeshBasicMaterial","textMesh","name","MeshBasicMaterial","show","initAnimation","AnimationMixer","action","stopAnimation","requestAnimationFrameLoop","index","oldTime","animation","deltaTime","time","five","hide","modeChangeHandler","mode","enable","disable","dispose"],"sources":["../../src/shared-utils/createCanvasTextTexture.ts","../../src/shared-utils/three/transformPositionToVector3.ts","../../src/ModelEntryDoorGuidePlugin/Plugin.ts"],"sourcesContent":["import { CanvasTexture } from 'three/webgpu'\n\nexport default function createCanvasTextTexture(\n text: string,\n config?: {\n size?: number\n fontSize?: number\n backgroundColor?: string\n fontColor?: string\n textAlign?: CanvasTextAlign\n },\n) {\n const size = config?.size ?? 512\n const fontSize = config?.fontSize ?? size * (35 / 256) * 1.2\n const backgroundColor = config?.backgroundColor ?? 'rgba(0,0,0,0)'\n const fontColor = config?.fontColor ?? '#fff'\n const textAlign = config?.textAlign ?? 'center'\n\n const canvas = document.createElement('canvas')\n canvas.setAttribute('width', size + '')\n canvas.setAttribute('height', size + '')\n const context = canvas.getContext('2d')!\n context.fillStyle = backgroundColor\n context.fillRect(0, 0, size, size)\n context.font = `${fontSize}px \"微软雅黑\"`\n context.textAlign = textAlign\n context.fillStyle = fontColor\n context.fillText(text, size / 2, size * 0.7)\n return new CanvasTexture(canvas)\n}\n","import { Vector3 } from 'three/webgpu'\n\nconst transformPositionToVector3 = ({ x, y, z }: { x: number; y: number; z: number }) => new Vector3(x, y, z)\nexport default transformPositionToVector3\n","import type { Five, FivePlugin, Mode } from '@realsee/five-webgpu'\nimport type { Vector3Position } from '../typings/math.type'\nimport { AnimationMixer, MeshBasicMaterial } from 'three/webgpu'\nimport * as THREE from 'three/webgpu'\nimport createCanvasTextTexture from '../shared-utils/createCanvasTextTexture'\nimport transformPositionToVector3 from '../shared-utils/three/transformPositionToVector3'\nimport transformToMeshBasicMaterial from '../shared-utils/three/transformToMeshBasicMaterial'\nimport { FBXLoader } from '../shared-utils/three/FBXLoader'\nimport { disposeOwnedObject } from '../shared-utils/three/disposeOwnedObject'\nimport { MODEL_ENTRY_DOOR_GUIDE_PLUGIN_DEFAULT_MODEL } from '../shared-utils/url/defaultUrls'\n\nexport interface ModelEntryDoorGuidePluginData {\n position?: Vector3Position\n rad?: number\n fbx_url?: string\n}\n\nexport type ModelEntryDoorGuidePluginParameterType = {\n animationEnabled?: boolean\n // 入户门名称\n name?: string\n} & ModelEntryDoorGuidePluginData\n\ninterface ModelEntryDoorGuidePluginPluginState {\n object?: THREE.Object3D\n rad?: number\n animation?: { play: () => void; stop: () => void }\n enabled?: boolean // 记录状态,防止重复enable\n}\n\nexport interface ModelEntryDoorGuidePluginExportType {\n enable: (config?: { animationEnable?: boolean }) => boolean\n disable: () => boolean\n load: (data?: Partial<ModelEntryDoorGuidePluginData>) => Promise<boolean>\n dispose: () => void\n}\n\n/**\n * 模型入户门引导插件\n */\nexport const ModelEntryDoorGuidePlugin: FivePlugin<ModelEntryDoorGuidePluginParameterType, ModelEntryDoorGuidePluginExportType> = (\n five: Five,\n params,\n) => {\n // 局部状态\n const state: ModelEntryDoorGuidePluginPluginState = {}\n\n const defaultAnimationEnable = params?.animationEnabled ?? true\n const defaultModelPosition = params?.position ?? undefined\n const defaultRad = params?.rad ?? undefined\n const defaultFbxUrl = params?.fbx_url || MODEL_ENTRY_DOOR_GUIDE_PLUGIN_DEFAULT_MODEL\n const mixers: AnimationMixer[] = []\n let disposed = false, generation = 0\n const releaseObject = () => {\n state.animation?.stop()\n if (state.object) {\n mixers.forEach(mixer => { mixer.stopAllAction(); mixer.uncacheRoot(state.object!) })\n disposeOwnedObject(state.object)\n }\n mixers.length = 0\n state.object = undefined\n state.animation = undefined\n }\n\n const load = async (data?: Partial<ModelEntryDoorGuidePluginData>) => {\n if (disposed) return false\n const request = ++generation\n const position = data?.position ?? defaultModelPosition\n if (!position) return Promise.reject(new Error(`ModelEntryDoorGuidePlugin.load(): position is undefined`))\n const modelPosition = transformPositionToVector3(position)\n const rad = data?.rad ?? defaultRad\n const fbxUrl = data?.fbx_url ?? defaultFbxUrl\n state.rad = rad\n if (rad === undefined) return Promise.reject(new Error(`ModelEntryDoorGuidePlugin.load(): rad is ${rad}`))\n\n // 加载模型\n const object = (await new FBXLoader().loadAsync(fbxUrl)) as unknown as THREE.Group\n\n if (disposed || request !== generation) { disposeOwnedObject(object); return false }\n\n // 设置位置\n object.position.copy(modelPosition)\n object.rotation.z = rad\n object.scale.set(0.8, 0.8, 0.8)\n\n transformToMeshBasicMaterial(object, { transparent: true, side: THREE.DoubleSide })\n\n const textMesh = (object.children?.[0]?.children?.[3] as THREE.Mesh | undefined)?.clone()\n if (!textMesh) { disposeOwnedObject(object); throw new Error(`ModelEntryDoorGuidePlugin.load(): textMesh is ${textMesh}`) }\n\n const name = params.name ?? '入户门'\n textMesh.material = new MeshBasicMaterial({ transparent: true, map: createCanvasTextTexture(name) })\n textMesh.renderOrder = 3\n object.children[0].add(textMesh)\n releaseObject()\n state.object = object\n if (state.enabled) show()\n return true\n }\n\n const initAnimation = () => {\n if (state.animation) return\n if (!state.object) return console.error('ModelEntryDoorGuidePlugin.initAnimation(): state.object is ', state.object)\n // action\n const animationSpeed = 1\n const mixer = new AnimationMixer(state.object)\n mixers.push(mixer)\n const action = mixer.clipAction((state.object as any).animations[0])\n action.timeScale = animationSpeed\n let stopAnimation: (() => void) | undefined\n\n const requestAnimationFrameLoop = () => {\n let index = 0\n let oldTime = 0\n const minDeltaTime = 1000 / 30\n const animation = (time: number) => {\n index = requestAnimationFrame(animation)\n const deltaTime = time - oldTime\n if (deltaTime < minDeltaTime) return\n oldTime = time\n mixers.forEach((mixer) => mixer.update(deltaTime / 1000))\n five.needsRender = true\n }\n index = requestAnimationFrame(animation)\n return () => {\n cancelAnimationFrame(index)\n }\n }\n\n const play = () => {\n if (stopAnimation) return\n action.play()\n stopAnimation = requestAnimationFrameLoop()\n // 开始播动画时,rotation可能会还原\n requestAnimationFrame(() => {\n if (state.object && state.object.rotation.z !== state.rad) state.object.rotation.z = state.rad!\n })\n }\n const stop = () => {\n action.stop()\n stopAnimation?.()\n stopAnimation = undefined\n }\n const animation = { play, stop }\n state.animation = animation\n }\n\n const show = (config?: { animationEnable?: boolean }) => {\n if (!state.object) return console.error('ModelEntryDoorGuidePlugin.enable(): object is ', state.object)\n const animationEnable = config?.animationEnable ?? defaultAnimationEnable\n if (animationEnable) {\n if (!state.animation) initAnimation()\n state.animation!.play()\n }\n five.scene.add(state.object)\n five.needsRender = true\n }\n const hide = () => {\n if (!state.object) return\n if (state.animation) state.animation.stop()\n five.scene.remove(state.object)\n five.needsRender = true\n }\n\n const modeChangeHandler = (mode?: Mode) => (mode === 'Floorplan' ? show() : hide())\n\n const enable = (config?: { animationEnable?: boolean }) => {\n if (disposed) return false\n if (state.enabled) return true\n state.enabled = true\n modeChangeHandler(five.currentMode)\n five.on('modeChange', modeChangeHandler)\n show(config)\n return true\n }\n const disable = () => {\n if (!state.enabled) return true\n state.enabled = false\n hide()\n five.off('modeChange', modeChangeHandler)\n return true\n }\n\n const dispose = () => {\n if (disposed) return\n disposed = true; generation += 1\n disable(); releaseObject()\n five.off('dispose', dispose)\n }\n five.once('dispose', dispose)\n return { load, enable, disable, dispose }\n}\n\nexport const modelEntryDoorGuidePluginServerParams = {\n name: 'ModelEntryDoorGuidePlugin',\n version: 0,\n}\nexport default ModelEntryDoorGuidePlugin\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"model-entry-door-guide-DnGTLY2s.js","names":["MODEL_ENTRY_DOOR_GUIDE_PLUGIN_DEFAULT_MODEL","FBXLoader","THREE","createCanvasTextTexture","size","config","fontSize","backgroundColor","fontColor","textAlign","canvas","context","text","CanvasTexture","transformPositionToVector3","Vector3","x","y","z","ModelEntryDoorGuidePlugin","state","defaultAnimationEnable","params","defaultModelPosition","defaultRad","defaultFbxUrl","mixers","disposed","generation","releaseObject","mixer","disposeOwnedObject","load","request","position","data","modelPosition","rad","fbxUrl","object","transformToMeshBasicMaterial","textMesh","name","MeshBasicMaterial","show","initAnimation","AnimationMixer","action","stopAnimation","requestAnimationFrameLoop","index","oldTime","animation","deltaTime","time","five","hide","modeChangeHandler","mode","enable","disable","dispose"],"sources":["../../src/shared-utils/createCanvasTextTexture.ts","../../src/shared-utils/three/transformPositionToVector3.ts","../../src/ModelEntryDoorGuidePlugin/Plugin.ts"],"sourcesContent":["import { CanvasTexture } from 'three/webgpu'\n\nexport default function createCanvasTextTexture(\n text: string,\n config?: {\n size?: number\n fontSize?: number\n backgroundColor?: string\n fontColor?: string\n textAlign?: CanvasTextAlign\n },\n) {\n const size = config?.size ?? 512\n const fontSize = config?.fontSize ?? size * (35 / 256) * 1.2\n const backgroundColor = config?.backgroundColor ?? 'rgba(0,0,0,0)'\n const fontColor = config?.fontColor ?? '#fff'\n const textAlign = config?.textAlign ?? 'center'\n\n const canvas = document.createElement('canvas')\n canvas.setAttribute('width', size + '')\n canvas.setAttribute('height', size + '')\n const context = canvas.getContext('2d')!\n context.fillStyle = backgroundColor\n context.fillRect(0, 0, size, size)\n context.font = `${fontSize}px \"微软雅黑\"`\n context.textAlign = textAlign\n context.fillStyle = fontColor\n context.fillText(text, size / 2, size * 0.7)\n return new CanvasTexture(canvas)\n}\n","import { Vector3 } from 'three/webgpu'\n\nconst transformPositionToVector3 = ({ x, y, z }: { x: number; y: number; z: number }) => new Vector3(x, y, z)\nexport default transformPositionToVector3\n","import type { Five, FivePlugin, Mode } from '@realsee/five-webgpu'\nimport type { Vector3Position } from '../typings/math.type'\nimport { AnimationMixer, MeshBasicMaterial } from 'three/webgpu'\nimport * as THREE from 'three/webgpu'\nimport createCanvasTextTexture from '../shared-utils/createCanvasTextTexture'\nimport transformPositionToVector3 from '../shared-utils/three/transformPositionToVector3'\nimport transformToMeshBasicMaterial from '../shared-utils/three/transformToMeshBasicMaterial'\nimport { FBXLoader } from '../shared-utils/three/FBXLoader'\nimport { disposeOwnedObject } from '../shared-utils/three/disposeOwnedObject'\nimport { MODEL_ENTRY_DOOR_GUIDE_PLUGIN_DEFAULT_MODEL } from '../shared-utils/url/defaultUrls'\n\nexport interface ModelEntryDoorGuidePluginData {\n position?: Vector3Position\n rad?: number\n fbx_url?: string\n}\n\nexport type ModelEntryDoorGuidePluginParameterType = {\n animationEnabled?: boolean\n // 入户门名称\n name?: string\n} & ModelEntryDoorGuidePluginData\n\ninterface ModelEntryDoorGuidePluginPluginState {\n object?: THREE.Object3D\n rad?: number\n animation?: { play: () => void; stop: () => void }\n enabled?: boolean // 记录状态,防止重复enable\n}\n\nexport interface ModelEntryDoorGuidePluginExportType {\n enable: (config?: { animationEnable?: boolean }) => boolean\n disable: () => boolean\n load: (data?: Partial<ModelEntryDoorGuidePluginData>) => Promise<boolean>\n dispose: () => void\n}\n\n/**\n * 模型入户门引导插件\n */\nexport const ModelEntryDoorGuidePlugin: FivePlugin<ModelEntryDoorGuidePluginParameterType, ModelEntryDoorGuidePluginExportType> = (\n five: Five,\n params,\n) => {\n // 局部状态\n const state: ModelEntryDoorGuidePluginPluginState = {}\n\n const defaultAnimationEnable = params?.animationEnabled ?? true\n const defaultModelPosition = params?.position ?? undefined\n const defaultRad = params?.rad ?? undefined\n const defaultFbxUrl = params?.fbx_url || MODEL_ENTRY_DOOR_GUIDE_PLUGIN_DEFAULT_MODEL\n const mixers: AnimationMixer[] = []\n let disposed = false, generation = 0\n const releaseObject = () => {\n state.animation?.stop()\n if (state.object) {\n mixers.forEach(mixer => { mixer.stopAllAction(); mixer.uncacheRoot(state.object!) })\n disposeOwnedObject(state.object)\n }\n mixers.length = 0\n state.object = undefined\n state.animation = undefined\n }\n\n const load = async (data?: Partial<ModelEntryDoorGuidePluginData>) => {\n if (disposed) return false\n const request = ++generation\n const position = data?.position ?? defaultModelPosition\n if (!position) return Promise.reject(new Error(`ModelEntryDoorGuidePlugin.load(): position is undefined`))\n const modelPosition = transformPositionToVector3(position)\n const rad = data?.rad ?? defaultRad\n const fbxUrl = data?.fbx_url ?? defaultFbxUrl\n state.rad = rad\n if (rad === undefined) return Promise.reject(new Error(`ModelEntryDoorGuidePlugin.load(): rad is ${rad}`))\n\n // 加载模型\n const object = (await new FBXLoader().loadAsync(fbxUrl)) as unknown as THREE.Group\n\n if (disposed || request !== generation) { disposeOwnedObject(object); return false }\n\n // 设置位置\n object.position.copy(modelPosition)\n object.rotation.z = rad\n object.scale.set(0.8, 0.8, 0.8)\n\n transformToMeshBasicMaterial(object, { transparent: true, side: THREE.DoubleSide })\n\n const textMesh = (object.children?.[0]?.children?.[3] as THREE.Mesh | undefined)?.clone()\n if (!textMesh) { disposeOwnedObject(object); throw new Error(`ModelEntryDoorGuidePlugin.load(): textMesh is ${textMesh}`) }\n\n const name = params.name ?? '入户门'\n textMesh.material = new MeshBasicMaterial({ transparent: true, map: createCanvasTextTexture(name) })\n textMesh.renderOrder = 3\n object.children[0].add(textMesh)\n releaseObject()\n state.object = object\n if (state.enabled) show()\n return true\n }\n\n const initAnimation = () => {\n if (state.animation) return\n if (!state.object) return console.error('ModelEntryDoorGuidePlugin.initAnimation(): state.object is ', state.object)\n // action\n const animationSpeed = 1\n const mixer = new AnimationMixer(state.object)\n mixers.push(mixer)\n const action = mixer.clipAction((state.object as any).animations[0])\n action.timeScale = animationSpeed\n let stopAnimation: (() => void) | undefined\n\n const requestAnimationFrameLoop = () => {\n let index = 0\n let oldTime = 0\n const minDeltaTime = 1000 / 30\n const animation = (time: number) => {\n index = requestAnimationFrame(animation)\n const deltaTime = time - oldTime\n if (deltaTime < minDeltaTime) return\n oldTime = time\n mixers.forEach((mixer) => mixer.update(deltaTime / 1000))\n five.needsRender = true\n }\n index = requestAnimationFrame(animation)\n return () => {\n cancelAnimationFrame(index)\n }\n }\n\n const play = () => {\n if (stopAnimation) return\n action.play()\n stopAnimation = requestAnimationFrameLoop()\n // 开始播动画时,rotation可能会还原\n requestAnimationFrame(() => {\n if (state.object && state.object.rotation.z !== state.rad) state.object.rotation.z = state.rad!\n })\n }\n const stop = () => {\n action.stop()\n stopAnimation?.()\n stopAnimation = undefined\n }\n const animation = { play, stop }\n state.animation = animation\n }\n\n const show = (config?: { animationEnable?: boolean }) => {\n if (!state.object) return console.error('ModelEntryDoorGuidePlugin.enable(): object is ', state.object)\n const animationEnable = config?.animationEnable ?? defaultAnimationEnable\n if (animationEnable) {\n if (!state.animation) initAnimation()\n state.animation!.play()\n }\n five.scene.add(state.object)\n five.needsRender = true\n }\n const hide = () => {\n if (!state.object) return\n if (state.animation) state.animation.stop()\n five.scene.remove(state.object)\n five.needsRender = true\n }\n\n const modeChangeHandler = (mode?: Mode) => (mode === 'Floorplan' ? show() : hide())\n\n const enable = (config?: { animationEnable?: boolean }) => {\n if (disposed) return false\n if (state.enabled) return true\n state.enabled = true\n modeChangeHandler(five.currentMode)\n five.on('modeChange', modeChangeHandler)\n show(config)\n return true\n }\n const disable = () => {\n if (!state.enabled) return true\n state.enabled = false\n hide()\n five.off('modeChange', modeChangeHandler)\n return true\n }\n\n const dispose = () => {\n if (disposed) return\n disposed = true; generation += 1\n disable(); releaseObject()\n five.off('dispose', dispose)\n }\n five.once('dispose', dispose)\n return { load, enable, disable, dispose }\n}\n\nexport const modelEntryDoorGuidePluginServerParams = {\n name: 'ModelEntryDoorGuidePlugin',\n version: 0,\n}\nexport default ModelEntryDoorGuidePlugin\n"],"mappings":"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"}
|
|
@@ -1,21 +1,21 @@
|
|
|
1
1
|
import { t as e } from "./Subscribe-DLlAl88n.js";
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
2
|
+
import { l as t, v as n, y as r } from "./generatePolygonGeometry-BOnzdCaG.js";
|
|
3
|
+
import { n as i } from "./fiveModelLoad-BUIBYxzp.js";
|
|
4
4
|
import { i as a } from "./util-vGeVT4oo.js";
|
|
5
5
|
import { n as o, t as s } from "./isNil-CQNA0Sbe.js";
|
|
6
|
-
import { t as c } from "./FiveDomEvents-
|
|
6
|
+
import { t as c } from "./FiveDomEvents-BUBLFzti.js";
|
|
7
7
|
import { n as l } from "./Line2-CDxLMjGj.js";
|
|
8
|
-
import {
|
|
9
|
-
import { t as f } from "./BasePluginWithData-
|
|
8
|
+
import { i as u, n as d } from "./boundingBox-CIqXgNXW.js";
|
|
9
|
+
import { t as f } from "./BasePluginWithData-D_0W46_q.js";
|
|
10
10
|
import { C as p, G as m, J as h, M as g, N as _, P as ee, j as te, n as v, q as y, t as b } from "./component.svelte-D5LYqt50.js";
|
|
11
11
|
import { t as x } from "./LabelItem-Cnys51gZ.js";
|
|
12
12
|
import { n as S, r as ne } from "./fontSize-DMhRSrtx.js";
|
|
13
13
|
import { t as re } from "./constants-A7EqoECw.js";
|
|
14
|
-
import { n as C, t as w } from "./Prism-
|
|
14
|
+
import { n as C, t as w } from "./Prism-CJlyAEAU.js";
|
|
15
15
|
import { t as ie } from "./sleep-1GNCncUi.js";
|
|
16
16
|
import * as T from "three/webgpu";
|
|
17
17
|
import { Box3 as E, Color as D, Euler as O, Group as k, Quaternion as A, SRGBColorSpace as j, Vector3 as M } from "three/webgpu";
|
|
18
|
-
import { colorSpaceToWorking as
|
|
18
|
+
import { colorSpaceToWorking as N, materialColor as ae, materialOpacity as oe, positionGeometry as se, screenUV as P, texture as F, vec4 as I, workingToColorSpace as L } from "three/tsl";
|
|
19
19
|
import "@realsee/five-webgpu";
|
|
20
20
|
//#region src/shared-utils/three/addIfNotExists.ts
|
|
21
21
|
function R(e, ...t) {
|
|
@@ -55,8 +55,8 @@ var B = class extends e {
|
|
|
55
55
|
disposers = [];
|
|
56
56
|
constructor(e) {
|
|
57
57
|
super(), this.five = e.five, this.model = e.model, this.group = e.group, this.type = e.type, this.rawData = e.rawData, this.fiveDomEvents = e.fiveDomEvents;
|
|
58
|
-
let
|
|
59
|
-
this.tag =
|
|
58
|
+
let t = e.position ?? this.model.center ?? d(this.model).getCenter(new M());
|
|
59
|
+
this.tag = n(this.five, t, {
|
|
60
60
|
wrapper: e.tagWrapper,
|
|
61
61
|
disableOpacityTransition: this.type === "prism"
|
|
62
62
|
}), this.tag.extraObjectsForIntersectCheck.push(...z(e.tagOcclusionScope, this.group, this.model));
|
|
@@ -184,7 +184,7 @@ var W = (e, t) => {
|
|
|
184
184
|
//#endregion
|
|
185
185
|
//#region src/ModelMakerPlugin/utils/setModelSortBounds.ts
|
|
186
186
|
function J(e) {
|
|
187
|
-
|
|
187
|
+
t(e.geometry, [e.meshFont, e.meshBackground]);
|
|
188
188
|
}
|
|
189
189
|
//#endregion
|
|
190
190
|
//#region src/ModelMakerPlugin/utils/ModelMakerPolygonMesh.ts
|
|
@@ -316,8 +316,8 @@ var de = class {
|
|
|
316
316
|
}
|
|
317
317
|
}
|
|
318
318
|
return t.observation.disposed || !t.hasScene(n) ? a() : t.render(n, r, a);
|
|
319
|
-
}, e.render = this.wrappedRender, this.quad.frustumCulled = !1, this.quad.name = "SavedAnnotationColorQuad", this.encode.vertexNode = this.decode.vertexNode = I(
|
|
320
|
-
let n = this.afterNode, r = this.beforeNode, i = I(
|
|
319
|
+
}, e.render = this.wrappedRender, this.quad.frustumCulled = !1, this.quad.name = "SavedAnnotationColorQuad", this.encode.vertexNode = this.decode.vertexNode = I(se.xy, 0, 1), this.encode.fragmentNode = I(I(L(I(this.beforeNode.rgb, 1), T.SRGBColorSpace)).rgb, 0);
|
|
320
|
+
let n = this.afterNode, r = this.beforeNode, i = I(N(I(n.rgb, 1), T.SRGBColorSpace));
|
|
321
321
|
this.decode.fragmentNode = n.a.equal(0).select(r, I(i.rgb, n.a.add(r.a.mul(n.a.oneMinus())))), this.tail.name = "SavedAnnotationColorTail", this.tail.renderOrder = this.sentinel.renderOrder = Infinity, this.sentinel.frustumCulled = !1, this.tail.add(this.sentinel);
|
|
322
322
|
}
|
|
323
323
|
owner(e) {
|
|
@@ -363,7 +363,7 @@ var de = class {
|
|
|
363
363
|
toneMapped: !1,
|
|
364
364
|
fog: !1
|
|
365
365
|
});
|
|
366
|
-
i instanceof Z ? i.copy(n) : i.fragmentNode = I(I(L(I(
|
|
366
|
+
i instanceof Z ? i.copy(n) : i.fragmentNode = I(I(L(I(ae, 1), T.SRGBColorSpace)).rgb, oe), r = {
|
|
367
367
|
original: n,
|
|
368
368
|
material: i
|
|
369
369
|
}, this.replacements.set(e, r);
|
|
@@ -892,6 +892,6 @@ var pe = class extends f {
|
|
|
892
892
|
}
|
|
893
893
|
}, me = (...e) => new pe(...e);
|
|
894
894
|
//#endregion
|
|
895
|
-
export { me as t };
|
|
895
|
+
export { G as n, me as t };
|
|
896
896
|
|
|
897
|
-
//# sourceMappingURL=model-maker-
|
|
897
|
+
//# sourceMappingURL=model-maker-B1mnDdKY.js.map
|