@anov/3d 0.0.25-alpha1 → 0.0.28
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/dist/factory/3d.d.ts +1 -1
- package/dist/factory/3d.js +1 -1
- package/dist/factory/3d.js.map +1 -1
- package/dist/factory/unit/CameraPoi.js +15 -7
- package/dist/factory/unit/CameraPoi.js.map +1 -1
- package/dist/factory/unit/handle.js +1 -1
- package/dist/factory/unit/handle.js.map +1 -1
- package/dist/factory/unit/index.d.ts +2 -2
- package/dist/factory/unit/poi.js +2 -1
- package/dist/factory/unit/poi.js.map +1 -1
- package/package.json +1 -1
package/dist/factory/3d.d.ts
CHANGED
|
@@ -13,7 +13,7 @@ declare type factory3dOption = {
|
|
|
13
13
|
model: string;
|
|
14
14
|
environment: string;
|
|
15
15
|
};
|
|
16
|
-
export declare const usePath = "
|
|
16
|
+
export declare const usePath = "http://172.16.223.163:9000/anov-prod/anov-3d/factory/example/";
|
|
17
17
|
declare class Factory3D {
|
|
18
18
|
position: Vector3;
|
|
19
19
|
scene: SceneControl;
|
package/dist/factory/3d.js
CHANGED
|
@@ -19,7 +19,7 @@ var rgbeLoader = new lib.RGBELoader();
|
|
|
19
19
|
var emitter = utils.emitter;
|
|
20
20
|
var resourcePath = './';
|
|
21
21
|
var resourcePath2 = 'http://172.16.223.163:9000/anov-prod/anov-3d/factory/example/';
|
|
22
|
-
export var usePath =
|
|
22
|
+
export var usePath = resourcePath2;
|
|
23
23
|
var Factory3D = /*#__PURE__*/function () {
|
|
24
24
|
function Factory3D(option) {
|
|
25
25
|
_classCallCheck(this, Factory3D);
|
package/dist/factory/3d.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["Color","EquirectangularReflectionMapping","InteractionManager","ModelLoader","ShaderMaterial","TextureLoader","Vector2","Vector3","lib","use","utils","Camera","initPostEffects","finirMaterialV1","handleUnit","toggleTag","globalEvents","SceneStyle","SceneTag","factoryGlobalObject","frag","vert","load","rgbeLoader","RGBELoader","emitter","resourcePath","resourcePath2","usePath","Factory3D","option","overview","real","Map","globalEventsAgent","setFactory","scene","cameraUtil","camera","controls","control","layers","set","loadGLTF","gltf","realTreeModel","add","interactionManager","renderer","domElement","storeManagement","useframe","update","loadModel","toneMappingExposure","visible","style","realModl","call","group","traverse","child","type","material","tech","techModel","vertexShader","fragmentShader","uniforms","texture1","value","texture2","uvScale","depthTest","depthWrite","thermaLimaging","pipeline","realGroundModel","setPath","texture","mapping","boxSkeyTexture","environment","background","params","tag","apply","forEach","eventKey","on","args","eventHandleFn","get","fn","cutoutCamera","inspection","minCamera","mainCamera","eventName","handleFn","push"],"sources":["../../src/factory/3d.ts"],"sourcesContent":["import type { DataTexture, Group, OrbitControls, SceneControl } from '@anov/3d-core'\nimport { BoxGeometry, Color, EquirectangularReflectionMapping, InteractionManager, Mesh, MeshBasicMaterial, ModelLoader, ShaderMaterial, TextureLoader, Vector2, Vector3, lib, use, utils } from '@anov/3d-core'\nimport { Camera, initPostEffects } from '@anov/3d-ability'\nimport { finirMaterialV1 } from './utils/finirMaterial'\nimport handleUnit, { toggleTag } from './unit'\nimport type WallManage from './unit/wall'\nimport type LineManage from './unit/line'\nimport type CylinderManage from './unit/cylinder'\nimport type PoiManage from './unit/poi'\nimport type CircleManage from './unit/circle'\nimport type AreaBoundingBoxManage from './unit/areaBoundingBox'\nimport type Inspection from './unit/inspection'\nimport { globalEvents } from './globalData'\nimport { SceneStyle, SceneTag } from './utils/constant'\nimport switchMaterial from './utils/switchMaterial'\nimport factoryGlobalObject from './globalControl'\nimport { debounce } from './utils'\n\nimport frag from './unit/glsl/heat/frag'\nimport vert from './unit/glsl/heat/ver'\n\ntype factory3dOption = {\n model: string\n environment: string\n}\n\nconst load = new ModelLoader()\nconst rgbeLoader = new lib.RGBELoader()\nconst { emitter } = utils\n\nconst resourcePath = './'\nconst resourcePath2 = 'http://172.16.223.163:9000/anov-prod/anov-3d/factory/example/'\n\nexport const usePath = resourcePath\n\nclass Factory3D {\n position: Vector3 = new Vector3(0, 0, 0)\n scene: SceneControl\n control: OrbitControls\n cameraUtil: Camera\n\n public tag = SceneTag.overview\n public style: SceneStyle = SceneStyle.real\n private option: factory3dOption\n wall: WallManage\n line: LineManage\n cylinder: CylinderManage\n poi: PoiManage\n circle: CircleManage\n areaBoundingBox: AreaBoundingBoxManage\n inspection: Inspection\n\n usePath = usePath\n\n private pipeline: Group\n private realModl: Group\n private techModel: Group\n private realGroundModel: Group\n private realTreeModel: Group\n private thermaLimaging: Group\n private eventHandleFn: Map<string, ((args?: any) => void)[]> = new Map()\n private boxSkeyTexture: DataTexture\n\n interactionManager: InteractionManager\n\n constructor(option: factory3dOption) {\n this.option = option\n this.globalEventsAgent()\n factoryGlobalObject.setFactory(this)\n }\n\n /**\n * render factory 3d scene\n */\n renderScene(scene: SceneControl) {\n this.scene = scene\n\n this.cameraUtil = new Camera(scene.camera!, scene.controls!, scene)\n this.control = scene.controls!\n scene.camera.layers.set(0)\n\n load.loadGLTF(`${this.usePath}landScap3.glb`, false, true, './draco/', (gltf) => {\n this.realTreeModel = (gltf.scene) as Group\n\n // this.interactionManager.add(gltf.scene)\n\n // gltf.scene.addEventListener('click', (value) => {\n // this.position = value.point\n // })\n scene.add(this.realTreeModel)\n\n return gltf\n })\n\n const interactionManager = new InteractionManager(\n this.scene.renderer,\n this.scene.camera,\n this.scene.renderer.domElement, // Modified By LM this.scene.cssRenderer.cssRenderer.domElement,\n )\n\n this.interactionManager = interactionManager\n\n utils.storeManagement.set('interactionManager', interactionManager)\n\n use.useframe(() => {\n interactionManager.update()\n })\n\n this.loadModel()\n scene.renderer.toneMappingExposure = 0.4\n }\n\n private loadModel() {\n // real model\n load.loadGLTF(`${this.usePath}222.glb`, false, true, './draco/', (gltf) => {\n this.scene.add(gltf.scene)\n\n gltf.scene.visible = SceneStyle.real === this.style\n\n this.realModl = gltf.scene as Group\n\n // this.interactionManager.add(gltf.scene)\n\n // gltf.scene.addEventListener('click', (value) => {\n // this.position = value.point\n // })\n\n handleUnit.call(this)\n return gltf\n })\n\n // tech model\n load.loadGLTF(`${this.usePath}2222.glb`, false, true, './draco/', (gltf) => {\n const group = gltf.scene\n group.traverse((child) => {\n // @ts-ignore\n if (child.type === 'Mesh') {\n // @ts-ignore\n child.material = finirMaterialV1\n }\n })\n\n this.scene.add(group)\n\n group.visible = SceneStyle.tech === this.style\n this.techModel = group as Group\n\n return gltf\n })\n\n // thermaLimaging model\n load.loadGLTF(`${this.usePath}2222.glb`, false, true, './draco/', (gltf) => {\n const group = gltf.scene\n group.traverse((child) => {\n if (child.type === 'Mesh') {\n // @ts-ignore\n child.material = new ShaderMaterial({\n vertexShader: vert,\n fragmentShader: frag,\n uniforms: {\n texture1: { value: new TextureLoader().load('./test01.jpg') },\n texture2: { value: new TextureLoader().load('./test02.jpg') },\n uvScale: { value: new Vector2(1, 1) },\n },\n depthTest: false,\n depthWrite: false,\n })\n\n child.layers.set(2)\n }\n })\n\n this.scene.add(group)\n\n this.thermaLimaging = group as Group\n\n return gltf\n })\n\n load.loadGLTF(`${this.usePath}guandao.glb`, false, true, './draco/', (gltf) => {\n this.scene.add(gltf.scene)\n\n this.pipeline = gltf.scene as Group\n return gltf\n })\n\n // ground\n load.loadGLTF(`${this.usePath}landScap.glb`, false, true, './draco/', (gltf) => {\n this.scene.add(gltf.scene)\n\n // this.interactionManager.add(gltf.scene)\n\n // gltf.scene.addEventListener('click', (value) => {\n // this.position = value.point\n // })\n\n this.realGroundModel = gltf.scene as Group\n return gltf\n })\n\n rgbeLoader.setPath(`${this.usePath}`).load('demo.hdr', (texture) => {\n texture.mapping = EquirectangularReflectionMapping\n\n this.boxSkeyTexture = texture\n this.scene.scene.environment = texture\n this.scene.scene.background = new Color('#ccc')\n })\n }\n\n /**\n * toggle SceneStyle\n * @param params\n */\n toggleSceneStyle(params: SceneStyle) {\n if (this.style === params)\n return\n\n this.style = params\n\n if (this.style === SceneStyle.tech) {\n this.pipeline.visible = false\n this.techModel.visible = true\n this.realModl.visible = false\n this.realTreeModel.visible = false\n this.scene.scene.background = null\n this.realGroundModel && (this.realGroundModel.visible = false)\n\n this.scene.renderer.toneMappingExposure = 0.6\n }\n\n if (params === SceneStyle.real) {\n this.pipeline.visible = true\n this.techModel.visible = false\n this.realModl.visible = true\n this.realGroundModel && (this.realGroundModel.visible = true)\n this.realTreeModel && (this.realTreeModel.visible = true)\n this.scene.scene.background = new Color('#ccc')\n this.scene.scene.environment = this.boxSkeyTexture\n\n this.scene.renderer.toneMappingExposure = 0.4\n }\n }\n\n public toggleTag(tag: SceneTag) {\n if (this.tag === tag)\n return\n toggleTag[tag].apply(this, [this])\n }\n\n private globalEventsAgent() {\n globalEvents.forEach((eventKey) => {\n emitter.on(eventKey, (args) => {\n this.eventHandleFn.get(eventKey)?.forEach((fn) => {\n fn(args)\n })\n })\n })\n }\n\n /**\n * toggle view\n */\n toggleView() {\n if (this.scene.cutoutCamera === this.inspection.minCamera) {\n const cutoutCamera = this.inspection.minCamera\n this.scene.cutoutCamera = this.scene.camera\n this.scene.camera = cutoutCamera\n initPostEffects(this.scene.scene, this.scene.renderer, cutoutCamera)\n }\n else {\n const mainCamera = this.scene.cutoutCamera\n const cutoutCamera = this.inspection.minCamera\n\n this.scene.camera = mainCamera\n this.scene.cutoutCamera = cutoutCamera\n\n initPostEffects(this.scene.scene, this.scene.renderer, cutoutCamera, {\n type: 'sub',\n })\n }\n }\n\n addEventListener(eventName: string, handleFn: (args?: any) => void) {\n if (this.eventHandleFn.get(eventName))\n this.eventHandleFn.get(eventName).push(handleFn)\n\n else\n this.eventHandleFn.set(eventName, [handleFn])\n }\n}\n\nexport default Factory3D"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["Color","EquirectangularReflectionMapping","InteractionManager","ModelLoader","ShaderMaterial","TextureLoader","Vector2","Vector3","lib","use","utils","Camera","initPostEffects","finirMaterialV1","handleUnit","toggleTag","globalEvents","SceneStyle","SceneTag","factoryGlobalObject","frag","vert","load","rgbeLoader","RGBELoader","emitter","resourcePath","resourcePath2","usePath","Factory3D","option","overview","real","Map","globalEventsAgent","setFactory","scene","cameraUtil","camera","controls","control","layers","set","loadGLTF","gltf","realTreeModel","add","interactionManager","renderer","domElement","storeManagement","useframe","update","loadModel","toneMappingExposure","visible","style","realModl","call","group","traverse","child","type","material","tech","techModel","vertexShader","fragmentShader","uniforms","texture1","value","texture2","uvScale","depthTest","depthWrite","thermaLimaging","pipeline","realGroundModel","setPath","texture","mapping","boxSkeyTexture","environment","background","params","tag","apply","forEach","eventKey","on","args","eventHandleFn","get","fn","cutoutCamera","inspection","minCamera","mainCamera","eventName","handleFn","push"],"sources":["../../src/factory/3d.ts"],"sourcesContent":["import type { DataTexture, Group, OrbitControls, SceneControl } from '@anov/3d-core'\nimport { BoxGeometry, Color, EquirectangularReflectionMapping, InteractionManager, Mesh, MeshBasicMaterial, ModelLoader, ShaderMaterial, TextureLoader, Vector2, Vector3, lib, use, utils } from '@anov/3d-core'\nimport { Camera, initPostEffects } from '@anov/3d-ability'\nimport { finirMaterialV1 } from './utils/finirMaterial'\nimport handleUnit, { toggleTag } from './unit'\nimport type WallManage from './unit/wall'\nimport type LineManage from './unit/line'\nimport type CylinderManage from './unit/cylinder'\nimport type PoiManage from './unit/poi'\nimport type CircleManage from './unit/circle'\nimport type AreaBoundingBoxManage from './unit/areaBoundingBox'\nimport type Inspection from './unit/inspection'\nimport { globalEvents } from './globalData'\nimport { SceneStyle, SceneTag } from './utils/constant'\nimport switchMaterial from './utils/switchMaterial'\nimport factoryGlobalObject from './globalControl'\nimport { debounce } from './utils'\n\nimport frag from './unit/glsl/heat/frag'\nimport vert from './unit/glsl/heat/ver'\n\ntype factory3dOption = {\n model: string\n environment: string\n}\n\nconst load = new ModelLoader()\nconst rgbeLoader = new lib.RGBELoader()\nconst { emitter } = utils\n\nconst resourcePath = './'\nconst resourcePath2 = 'http://172.16.223.163:9000/anov-prod/anov-3d/factory/example/'\n\nexport const usePath = resourcePath2\n\nclass Factory3D {\n position: Vector3 = new Vector3(0, 0, 0)\n scene: SceneControl\n control: OrbitControls\n cameraUtil: Camera\n\n public tag = SceneTag.overview\n public style: SceneStyle = SceneStyle.real\n private option: factory3dOption\n wall: WallManage\n line: LineManage\n cylinder: CylinderManage\n poi: PoiManage\n circle: CircleManage\n areaBoundingBox: AreaBoundingBoxManage\n inspection: Inspection\n\n usePath = usePath\n\n private pipeline: Group\n private realModl: Group\n private techModel: Group\n private realGroundModel: Group\n private realTreeModel: Group\n private thermaLimaging: Group\n private eventHandleFn: Map<string, ((args?: any) => void)[]> = new Map()\n private boxSkeyTexture: DataTexture\n\n interactionManager: InteractionManager\n\n constructor(option: factory3dOption) {\n this.option = option\n this.globalEventsAgent()\n factoryGlobalObject.setFactory(this)\n }\n\n /**\n * render factory 3d scene\n */\n renderScene(scene: SceneControl) {\n this.scene = scene\n\n this.cameraUtil = new Camera(scene.camera!, scene.controls!, scene)\n this.control = scene.controls!\n scene.camera.layers.set(0)\n\n load.loadGLTF(`${this.usePath}landScap3.glb`, false, true, './draco/', (gltf) => {\n this.realTreeModel = (gltf.scene) as Group\n\n // this.interactionManager.add(gltf.scene)\n\n // gltf.scene.addEventListener('click', (value) => {\n // this.position = value.point\n // })\n scene.add(this.realTreeModel)\n\n return gltf\n })\n\n const interactionManager = new InteractionManager(\n this.scene.renderer,\n this.scene.camera,\n this.scene.renderer.domElement, // Modified By LM this.scene.cssRenderer.cssRenderer.domElement,\n )\n\n this.interactionManager = interactionManager\n\n utils.storeManagement.set('interactionManager', interactionManager)\n\n use.useframe(() => {\n interactionManager.update()\n })\n\n this.loadModel()\n scene.renderer.toneMappingExposure = 0.4\n }\n\n private loadModel() {\n // real model\n load.loadGLTF(`${this.usePath}222.glb`, false, true, './draco/', (gltf) => {\n this.scene.add(gltf.scene)\n\n gltf.scene.visible = SceneStyle.real === this.style\n\n this.realModl = gltf.scene as Group\n\n // this.interactionManager.add(gltf.scene)\n\n // gltf.scene.addEventListener('click', (value) => {\n // this.position = value.point\n // })\n\n handleUnit.call(this)\n return gltf\n })\n\n // tech model\n load.loadGLTF(`${this.usePath}2222.glb`, false, true, './draco/', (gltf) => {\n const group = gltf.scene\n group.traverse((child) => {\n // @ts-ignore\n if (child.type === 'Mesh') {\n // @ts-ignore\n child.material = finirMaterialV1\n }\n })\n\n this.scene.add(group)\n\n group.visible = SceneStyle.tech === this.style\n this.techModel = group as Group\n\n return gltf\n })\n\n // thermaLimaging model\n load.loadGLTF(`${this.usePath}2222.glb`, false, true, './draco/', (gltf) => {\n const group = gltf.scene\n group.traverse((child) => {\n if (child.type === 'Mesh') {\n // @ts-ignore\n child.material = new ShaderMaterial({\n vertexShader: vert,\n fragmentShader: frag,\n uniforms: {\n texture1: { value: new TextureLoader().load('./test01.jpg') },\n texture2: { value: new TextureLoader().load('./test02.jpg') },\n uvScale: { value: new Vector2(1, 1) },\n },\n depthTest: false,\n depthWrite: false,\n })\n\n child.layers.set(2)\n }\n })\n\n this.scene.add(group)\n\n this.thermaLimaging = group as Group\n\n return gltf\n })\n\n load.loadGLTF(`${this.usePath}guandao.glb`, false, true, './draco/', (gltf) => {\n this.scene.add(gltf.scene)\n\n this.pipeline = gltf.scene as Group\n return gltf\n })\n\n // ground\n load.loadGLTF(`${this.usePath}landScap.glb`, false, true, './draco/', (gltf) => {\n this.scene.add(gltf.scene)\n\n // this.interactionManager.add(gltf.scene)\n\n // gltf.scene.addEventListener('click', (value) => {\n // this.position = value.point\n // })\n\n this.realGroundModel = gltf.scene as Group\n return gltf\n })\n\n rgbeLoader.setPath(`${this.usePath}`).load('demo.hdr', (texture) => {\n texture.mapping = EquirectangularReflectionMapping\n\n this.boxSkeyTexture = texture\n this.scene.scene.environment = texture\n this.scene.scene.background = new Color('#ccc')\n })\n }\n\n /**\n * toggle SceneStyle\n * @param params\n */\n toggleSceneStyle(params: SceneStyle) {\n if (this.style === params)\n return\n\n this.style = params\n\n if (this.style === SceneStyle.tech) {\n this.pipeline.visible = false\n this.techModel.visible = true\n this.realModl.visible = false\n this.realTreeModel.visible = false\n this.scene.scene.background = null\n this.realGroundModel && (this.realGroundModel.visible = false)\n\n this.scene.renderer.toneMappingExposure = 0.6\n }\n\n if (params === SceneStyle.real) {\n this.pipeline.visible = true\n this.techModel.visible = false\n this.realModl.visible = true\n this.realGroundModel && (this.realGroundModel.visible = true)\n this.realTreeModel && (this.realTreeModel.visible = true)\n this.scene.scene.background = new Color('#ccc')\n this.scene.scene.environment = this.boxSkeyTexture\n\n this.scene.renderer.toneMappingExposure = 0.4\n }\n }\n\n public toggleTag(tag: SceneTag) {\n if (this.tag === tag)\n return\n toggleTag[tag].apply(this, [this])\n }\n\n private globalEventsAgent() {\n globalEvents.forEach((eventKey) => {\n emitter.on(eventKey, (args) => {\n this.eventHandleFn.get(eventKey)?.forEach((fn) => {\n fn(args)\n })\n })\n })\n }\n\n /**\n * toggle view\n */\n toggleView() {\n if (this.scene.cutoutCamera === this.inspection.minCamera) {\n const cutoutCamera = this.inspection.minCamera\n this.scene.cutoutCamera = this.scene.camera\n this.scene.camera = cutoutCamera\n initPostEffects(this.scene.scene, this.scene.renderer, cutoutCamera)\n }\n else {\n const mainCamera = this.scene.cutoutCamera\n const cutoutCamera = this.inspection.minCamera\n\n this.scene.camera = mainCamera\n this.scene.cutoutCamera = cutoutCamera\n\n initPostEffects(this.scene.scene, this.scene.renderer, cutoutCamera, {\n type: 'sub',\n })\n }\n }\n\n addEventListener(eventName: string, handleFn: (args?: any) => void) {\n if (this.eventHandleFn.get(eventName))\n this.eventHandleFn.get(eventName).push(handleFn)\n\n else\n this.eventHandleFn.set(eventName, [handleFn])\n }\n}\n\nexport default Factory3D"],"mappings":"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"}
|
|
@@ -61,7 +61,7 @@ var CameraPoi = /*#__PURE__*/function () {
|
|
|
61
61
|
// 摄像机
|
|
62
62
|
region = regionMap[key];
|
|
63
63
|
group = new Group();
|
|
64
|
-
group.name = region.camera.
|
|
64
|
+
group.name = region.camera.id;
|
|
65
65
|
sprite = new SpritePoi("".concat(usePath, "camera.png"), {
|
|
66
66
|
scale: [10, 10, 1]
|
|
67
67
|
});
|
|
@@ -441,10 +441,18 @@ var Dialog = /*#__PURE__*/function () {
|
|
|
441
441
|
// 将边界框的最小和最大顶点转换为屏幕坐标
|
|
442
442
|
var min = bbox.min.project(camera);
|
|
443
443
|
var max = bbox.max.project(camera);
|
|
444
|
+
var _ref4 = [window.innerWidth, window.innerHeight],
|
|
445
|
+
w = _ref4[0],
|
|
446
|
+
h = _ref4[1];
|
|
447
|
+
var dom = document.querySelector('#app');
|
|
448
|
+
if (dom) {
|
|
449
|
+
w = dom.clientWidth;
|
|
450
|
+
h = dom.clientHeight;
|
|
451
|
+
}
|
|
444
452
|
|
|
445
453
|
// 计算精灵在屏幕中的宽度和高度像素值
|
|
446
|
-
var width = (max.x - min.x) *
|
|
447
|
-
var height = (max.y - min.y) *
|
|
454
|
+
var width = (max.x - min.x) * w / devicePixelRatio * 0.977;
|
|
455
|
+
var height = (max.y - min.y) * h / devicePixelRatio * 1.089;
|
|
448
456
|
|
|
449
457
|
// 定义设备像素比和对应的缩放系数的映射关系
|
|
450
458
|
var scaleFactors = {
|
|
@@ -480,7 +488,7 @@ var Dialog = /*#__PURE__*/function () {
|
|
|
480
488
|
var clampedDistance = Math.max(minDistance, Math.min(maxDistance, distance));
|
|
481
489
|
// console.log('clampedDistance:',clampedDistance)
|
|
482
490
|
// 按照缩放系数和距离进行缩放,缩放系数应该约定好一个固定值
|
|
483
|
-
sprite.scale.copy(new Vector3(clampedDistance *
|
|
491
|
+
sprite.scale.copy(new Vector3(clampedDistance * 0.99, 0.693 * clampedDistance, 1));
|
|
484
492
|
}
|
|
485
493
|
}, {
|
|
486
494
|
key: "addEventListener",
|
|
@@ -497,8 +505,8 @@ var Dialog = /*#__PURE__*/function () {
|
|
|
497
505
|
|
|
498
506
|
// 弹窗容器
|
|
499
507
|
var dialogDiv = document.createElement('div');
|
|
500
|
-
width +=
|
|
501
|
-
height +=
|
|
508
|
+
width += 10;
|
|
509
|
+
height += 10;
|
|
502
510
|
Object.assign(dialogDiv.style, {
|
|
503
511
|
'width': "".concat(width, "px"),
|
|
504
512
|
'height': "".concat(height, "px"),
|
|
@@ -603,7 +611,7 @@ var Dialog = /*#__PURE__*/function () {
|
|
|
603
611
|
key: "addStyle",
|
|
604
612
|
value: function addStyle() {
|
|
605
613
|
// 设置 CSS 规则
|
|
606
|
-
var css = "\n .page-mask{\n position: fixed;\n top: 0;\n left: 0;\n bottom:0;\n right:0;\n //width: 100%;\n //height: 100%;\n background-color: rgba(0, 0, 0, 0.5); /* \u534A\u900F\u660E\u80CC\u666F */\n //filter: blur(10px); /* \u6A21\u7CCA\u6548\u679C */\n z-index: 1 !important; /* \u786E\u4FDD\u8499\u7248\u4F4D\u4E8E\u5176\u4ED6\u5143\u7D20\u4E4B\u4E0A */\n }\n .dialog-mask{\n position: absolute;\n top: 8px;\n left: 6px;\n width: calc(100% - 12px);\n height: calc(100% - 16px);\n background: linear-gradient(90deg, rgba(0, 0, 0,.4) 0%,rgba(0, 0, 0,.2) 10%, rgba(0, 0, 0,0) 20%, rgba(0,0,0, 0) 50%, rgba(0, 0, 0,0) 80%, rgba(0, 0, 0,0.2) 90%, rgba(0, 0, 0,.4) 100%);\n pointer-events: auto;\n opacity: 1;\n transform: perspective(100px) rotateX(0deg) rotateY(0deg) rotateZ(0deg);\n transform-origin: center center;\n }\n .hot-back{\n width: 70px;\n height: 25px;\n border-radius: 2px;\n color: #fff;\n font-weight: bold;\n font-size: 14px;\n border:1px solid #d1ae6d;\n background-color: #c8ab75;\n cursor: pointer; /* \u9F20\u6807\u6307\u9488\u6837\u5F0F */\n display: flex;\n justify-content: center;\n align-items: center;\n position: absolute;\n left: 30px;\n top: 30px;\n pointer-events: auto;\n }\n .hot-back:hover{\n background-color:#c8a158;\n }\n .dialog-close{\n width: 20px;\n height: 20px;\n border-radius: 2px;\n color: #fff;\n background-color: #c8ab75;\n cursor: pointer; /* \u9F20\u6807\u6307\u9488\u6837\u5F0F */\n display: flex;\n justify-content: center;\n align-items: center;\n position: absolute;\n right: 20px;\n top: 15px;\n pointer-events: auto;\n }\n\n .dialog-close:hover{\n background-color:#c8a158;\n }\n\n .dialog-close-line{\n width: 14px;\n height: 2px;\n background-color: #fff;\n position: absolute;\n top: 9px;\n display: block;\n }\n\n .dialog-close-h-line{\n transform: rotate(-45deg);\n }\n\n .dialog-close-v-line{\n transform: rotate(45deg);\n }\n\n .dialog-operate{\n width: 120px;\n height: 120px;\n background-image: url(".concat(usePath, "p4/operate.png);\n background-size: 100% 100%;\n background-repeat: no-repeat;\n position: absolute;\n right: 15px;\n bottom: 10px;\n pointer-events: auto;\n }\n\n .dialog-operate-btn{\n width: 0;\n height: 0;\n position: absolute;\n cursor: pointer;\n pointer-events: auto;\n }\n\n .dialog-operate-top{\n border-left: 8px solid transparent; /* \u5DE6\u8FB9\u900F\u660E */\n border-right: 8px solid transparent; /* \u53F3\u8FB9\u900F\u660E */\n border-bottom: 8px solid #f2c67d; /* \u5E95\u8FB9\u5B9E\u5FC3 */\n left: calc(50% - 9px);\n top: 20px;\n }\n .dialog-operate-top:hover{\n border-bottom-color:#fff2dd;\n }\n\n .dialog-operate-bottom{\n border-left: 8px solid transparent; /* \u5DE6\u8FB9\u900F\u660E */\n border-right: 8px solid transparent; /* \u53F3\u8FB9\u900F\u660E */\n border-top: 8px solid #f2c67d; /* \u5E95\u8FB9\u5B9E\u5FC3 */\n left: calc(50% - 9px);\n bottom: 20px;\n }\n\n .dialog-operate-bottom:hover{\n border-top-color:#fff2dd;\n }\n\n .dialog-operate-left{\n border-top: 8px solid transparent; /* \u5DE6\u8FB9\u900F\u660E */\n border-bottom: 8px solid transparent; /* \u53F3\u8FB9\u900F\u660E */\n border-right: 8px solid #f2c67d; /* \u5E95\u8FB9\u5B9E\u5FC3 */\n top: calc(50% - 9px);\n left: 20px;\n }\n .dialog-operate-left:hover{\n border-right-color:#fff2dd;\n }\n\n .dialog-operate-right{\n border-top: 8px solid transparent; /* \u5DE6\u8FB9\u900F\u660E */\n border-bottom: 8px solid transparent; /* \u53F3\u8FB9\u900F\u660E */\n border-left: 8px solid #f2c67d; /* \u5E95\u8FB9\u5B9E\u5FC3 */\n top: calc(50% - 9px);\n right: 20px;\n }\n\n .dialog-operate-right:hover{\n border-left-color:#fff2dd;\n }\n \n .dialog-slider-container {\n width: 13px;\n height:
|
|
614
|
+
var css = "\n .page-mask{\n position: fixed;\n top: 0;\n left: 0;\n bottom:0;\n right:0;\n //width: 100%;\n //height: 100%;\n background-color: rgba(0, 0, 0, 0.5); /* \u534A\u900F\u660E\u80CC\u666F */\n //filter: blur(10px); /* \u6A21\u7CCA\u6548\u679C */\n z-index: 1 !important; /* \u786E\u4FDD\u8499\u7248\u4F4D\u4E8E\u5176\u4ED6\u5143\u7D20\u4E4B\u4E0A */\n }\n .dialog-mask{\n position: absolute;\n top: 8px;\n left: 6px;\n width: calc(100% - 12px);\n height: calc(100% - 16px);\n background: linear-gradient(90deg, rgba(0, 0, 0,.4) 0%,rgba(0, 0, 0,.2) 10%, rgba(0, 0, 0,0) 20%, rgba(0,0,0, 0) 50%, rgba(0, 0, 0,0) 80%, rgba(0, 0, 0,0.2) 90%, rgba(0, 0, 0,.4) 100%);\n pointer-events: auto;\n opacity: 1;\n transform: perspective(100px) rotateX(0deg) rotateY(0deg) rotateZ(0deg);\n transform-origin: center center;\n }\n .hot-back{\n width: 70px;\n height: 25px;\n border-radius: 2px;\n color: #fff;\n font-weight: bold;\n font-size: 14px;\n border:1px solid #d1ae6d;\n background-color: #c8ab75;\n cursor: pointer; /* \u9F20\u6807\u6307\u9488\u6837\u5F0F */\n display: flex;\n justify-content: center;\n align-items: center;\n position: absolute;\n left: 30px;\n top: 30px;\n pointer-events: auto;\n }\n .hot-back:hover{\n background-color:#c8a158;\n }\n .dialog-close{\n width: 20px;\n height: 20px;\n border-radius: 2px;\n color: #fff;\n background-color: #c8ab75;\n cursor: pointer; /* \u9F20\u6807\u6307\u9488\u6837\u5F0F */\n display: flex;\n justify-content: center;\n align-items: center;\n position: absolute;\n right: 20px;\n top: 15px;\n pointer-events: auto;\n }\n\n .dialog-close:hover{\n background-color:#c8a158;\n }\n\n .dialog-close-line{\n width: 14px;\n height: 2px;\n background-color: #fff;\n position: absolute;\n top: 9px;\n display: block;\n }\n\n .dialog-close-h-line{\n transform: rotate(-45deg);\n }\n\n .dialog-close-v-line{\n transform: rotate(45deg);\n }\n\n .dialog-operate{\n width: 120px;\n height: 120px;\n background-image: url(".concat(usePath, "p4/operate.png);\n background-size: 100% 100%;\n background-repeat: no-repeat;\n position: absolute;\n right: 15px;\n bottom: 10px;\n pointer-events: auto;\n }\n\n .dialog-operate-btn{\n width: 0;\n height: 0;\n position: absolute;\n cursor: pointer;\n pointer-events: auto;\n }\n\n .dialog-operate-top{\n border-left: 8px solid transparent; /* \u5DE6\u8FB9\u900F\u660E */\n border-right: 8px solid transparent; /* \u53F3\u8FB9\u900F\u660E */\n border-bottom: 8px solid #f2c67d; /* \u5E95\u8FB9\u5B9E\u5FC3 */\n left: calc(50% - 9px);\n top: 20px;\n }\n .dialog-operate-top:hover{\n border-bottom-color:#fff2dd;\n }\n\n .dialog-operate-bottom{\n border-left: 8px solid transparent; /* \u5DE6\u8FB9\u900F\u660E */\n border-right: 8px solid transparent; /* \u53F3\u8FB9\u900F\u660E */\n border-top: 8px solid #f2c67d; /* \u5E95\u8FB9\u5B9E\u5FC3 */\n left: calc(50% - 9px);\n bottom: 20px;\n }\n\n .dialog-operate-bottom:hover{\n border-top-color:#fff2dd;\n }\n\n .dialog-operate-left{\n border-top: 8px solid transparent; /* \u5DE6\u8FB9\u900F\u660E */\n border-bottom: 8px solid transparent; /* \u53F3\u8FB9\u900F\u660E */\n border-right: 8px solid #f2c67d; /* \u5E95\u8FB9\u5B9E\u5FC3 */\n top: calc(50% - 9px);\n left: 20px;\n }\n .dialog-operate-left:hover{\n border-right-color:#fff2dd;\n }\n\n .dialog-operate-right{\n border-top: 8px solid transparent; /* \u5DE6\u8FB9\u900F\u660E */\n border-bottom: 8px solid transparent; /* \u53F3\u8FB9\u900F\u660E */\n border-left: 8px solid #f2c67d; /* \u5E95\u8FB9\u5B9E\u5FC3 */\n top: calc(50% - 9px);\n right: 20px;\n }\n\n .dialog-operate-right:hover{\n border-left-color:#fff2dd;\n }\n \n .dialog-slider-container {\n width: 13px;\n height: 350px;\n background: url(").concat(usePath, "p4/slider.png);\n background-size: 100% 100%;\n position:absolute;\n right:23px;\n top:50px;\n }\n\n .dialog-slider {\n -webkit-appearance: none;\n width: 300px;\n height: 13px;\n background: transparent;\n outline: none;\n opacity: 0.7;\n -webkit-transition: .2s;\n transition: opacity .2s;\n transform: rotate(-90deg);\n margin-left: -144px;\n margin-top: 144px;\n pointer-events: auto;\n }\n\n .dialog-slider::-webkit-slider-thumb {\n -webkit-appearance: none;\n appearance: none;\n width: 7px;\n height: 20px;\n background: #eebe76;\n cursor: pointer;\n border-radius: 5px;\n }\n\n .dialog-slider::-moz-range-thumb {\n width: 7px;\n height: 20px;\n background: #eebe76;\n cursor: pointer;\n border-radius: 5px;\n }\n");
|
|
607
615
|
// 创建一个 <style> 元素
|
|
608
616
|
var styleElement = document.createElement('style');
|
|
609
617
|
styleElement.appendChild(document.createTextNode(css));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["AdditiveBlending","Box3","CircleGeometry","Color","DoubleSide","Group","MathUtils","Matrix4","Mesh","MeshBasicMaterial","ModelLoader","PerspectiveCamera","PlaneGeometry","ShaderMaterial","Sprite","SpriteMaterial","Texture","TextureLoader","Vector3","use","utils","Css2DPoi","SpritePoi","heatMap","MessageType","sendToMessage","EMessageStatus","regionMap","usePath","emitter","load","CameraPoi","gobal","Map","Set","dialogManage","Dialog","addStyle","loadGLTF","gltf","model","Object","keys","forEach","key","region","group","name","camera","sprite","scale","rotation","y","Math","PI","position","fromArray","copy","add","scan","scene","clone","addScalar","x","cameraMesh","set","title","interactionManager","cameraEvent","point","MethanePoint","probePoint","item","mesh","warn","probeEvent","create","warnMesh","rotatingRight","unFrame","useframe","children","z","abs","eventListener","useScene","unClick","addEventListener","Event","Success","undefined","id","targetPosition","toArray","camaraPosition","startPosition","cameraLookAt","getWorldDirection","cameraUtil","target","getMesh","dialogMesh","visible","togglePoi","then","headMap","HeadMap","distanceTo","closeHotmap","remove","removeFromParent","clear","fn","close","geometry","texture","circle","map","side","transparent","rotateX","material","vertexShader","fragmentShader","blending","depthTest","color","numPoints","i","random","cameraManage","manage","cameraPosition","window","innerWidth","innerHeight","getTarget","lookAt","setCustomPerspective","cuteSprite","depthWrite","center","renderOrder","updateScale","Promise","reslove","setTimeout","getBorderMesh","borderMesh","angleX","degToRad","angleY","angleZ","rotationMatrix","makeRotationX","multiply","makeRotationY","makeRotationZ","cameraDirection","targetDirection","applyMatrix4","devicePixelRatio","bbox","setFromObject","min","project","max","width","height","scaleFactors","scaleFactor","minDistance","maxDistance","objectPosition","distance","clampedDistance","eventName","eventList","has","getBoxSize","dialogDiv","document","createElement","assign","style","maskingDiv","className","appendChild","closeSpan","get","hLine","vLine","op","opList","btnSpan","sliderDiv","sliderBar","type","value","fov","updateProjectionMatrix","css","styleElement","createTextNode","head","heatmap","container","createDom","gradient","TemperatureColorStops","len","points","val","floor","push","setData","data","greymap","heatMapMaterial","uniforms","greyMap","Zscale","u_color","u_opacity","_renderer","canvas","needsUpdate","greyTexture","h","tan","w","aspect","heatMapGeometry","heatMapPlane","backEle","innerHTML","body","zIndex","canvasList","length"],"sources":["../../../src/factory/unit/CameraPoi.ts"],"sourcesContent":["import { AdditiveBlending, Box3, CircleGeometry, Color, DoubleSide, Group, MathUtils, Matrix4, Mesh, MeshBasicMaterial, ModelLoader, PerspectiveCamera, PlaneGeometry, ShaderMaterial, Sprite, SpriteMaterial, Texture, TextureLoader, Vector3, use, utils } from '@anov/3d-core'\nimport { Css2DPoi, SpritePoi } from '@anov/3d-ability'\nimport heatMap from 'anov-heat-map'\nimport { MessageType, sendToMessage } from '../../utils/messageFn'\nimport { EMessageStatus } from '../../messageStatus'\n\n// @ts-ignore\nimport type Factory3D from '../3d'\n\n// @ts-ignore\nimport { regionMap } from '../regionData'\n\nimport { usePath } from '../3d'\n\nconst { emitter } = utils\n\nconst load = new ModelLoader()\nclass CameraPoi {\n gobal: Factory3D\n cameraMesh: Map<string, Group> = new Map()\n warnMesh: Map<string, SpritePoi> = new Map()\n headMap: HeadMap\n dialogManage: Dialog\n eventListener: Set<Function> = new Set()\n\n startPosition: Vector3\n cameraLookAt: Vector3\n\n constructor(gobal: Factory3D) {\n this.gobal = gobal\n this.dialogManage = new Dialog(this)\n this.dialogManage.addStyle()\n }\n\n async generateObject() {\n const model = await load.loadGLTF(`${usePath}shexiang.glb`, false, true, './draco/', (gltf) => {\n return gltf\n })\n\n Object.keys(regionMap).forEach(async (key: string) => {\n // 摄像机\n const region = regionMap[key]\n const group = new Group()\n group.name = region.camera.name\n const sprite = new SpritePoi(`${usePath}camera.png`, { scale: [10, 10, 1] })\n sprite.rotation.y = Math.PI\n const position = new Vector3().fromArray(region.camera.position)\n sprite.position.copy(position)\n group.add(sprite)\n\n const scan = model.scene.clone()\n scan.scale.addScalar(5)\n scan.rotation.x = (-Math.PI / 2) + 0.5\n scan.position.copy(position.clone().add(new Vector3(0, -2, 0)))\n group.add(scan)\n\n this.cameraMesh.set(region.title, group)\n this.gobal.interactionManager.add(group)\n this.cameraEvent(group, region)\n this.gobal.scene.add(group)\n\n // 甲烷检测点\n const point = new MethanePoint()\n region.probePoint?.forEach((item) => {\n let mesh\n if (item.warn) {\n mesh = new SpritePoi(`${usePath}p4/warn.png`, { scale: [10, 10, 1] })\n this.gobal.interactionManager.add(mesh)\n this.probeEvent(mesh, region)\n }\n else {\n mesh = point.create()\n }\n mesh.position.copy(new Vector3().fromArray(item.position))\n this.warnMesh.set(region.title, mesh)\n\n this.gobal.scene.add(mesh)\n })\n })\n // 设置左右旋转的标志位和旋转速度\n let rotatingRight = true // 是否正在向右转动\n\n const unFrame = use.useframe(() => {\n this.cameraMesh.forEach((group) => {\n const scan = group.children[1]\n // 更新相机的旋转角度\n if (rotatingRight) {\n // 向右旋转\n scan.rotation.z += 0.005\n }\n else {\n // 向左旋转\n scan.rotation.z -= 0.005\n }\n\n // 检查是否达到目标旋转角度\n if (Math.abs(scan.rotation.z) >= Math.abs(Math.PI / 4)) {\n // 到达目标角度,切换旋转方向并更新目标角度\n rotatingRight = !rotatingRight\n }\n })\n })\n this.eventListener.add(unFrame)\n }\n\n cameraEvent(sprite: Group, region: any) {\n const { camera } = use.useScene()\n const unClick = sprite.addEventListener('click', async () => {\n sendToMessage(MessageType.Event, 'onCameraStatus', EMessageStatus.Success, undefined, { id: region.camera.id })\n\n const position = new Vector3().fromArray(region.camera.position)\n const targetPosition: [number, number, number] = position.clone().toArray()\n const camaraPosition: [number, number, number] = position.clone().add(new Vector3(0, 40, 80)).toArray()\n\n const startPosition = camera.position.clone()\n // 获取相机朝向\n const cameraLookAt = new Vector3() // 创建一个向量来存储相机朝向\n camera.getWorldDirection(cameraLookAt) // 获取相机朝向并存储在向量中\n this.gobal.cameraUtil.set({\n position: camaraPosition,\n target: targetPosition,\n })\n\n const dialogMesh = await this.dialogManage.getMesh(position, position.clone().add(new Vector3(0, -15, 5)))\n this.dialogManage.addEventListener('close', () => {\n // 初始相机到原始位置\n this.gobal.cameraUtil.set({\n position: startPosition.toArray(),\n target: cameraLookAt.toArray(),\n })\n sendToMessage(MessageType.Event, 'onCancelCameraStatus', EMessageStatus.Success, undefined, { id: region.camera.id })\n })\n this.gobal.scene.add(dialogMesh)\n })\n // this.eventListener.add(unClick)\n }\n\n probeEvent(sprite: SpritePoi, region) {\n const { camera } = use.useScene()\n sprite.addEventListener('click', async () => {\n if (!sprite.visible)\n return\n sprite.visible = false\n sendToMessage(MessageType.Event, 'onGasMonitorStatus', EMessageStatus.Success, undefined, { id: region.probePoint[0].id })\n this.togglePoi(false)\n const position = new Vector3().fromArray(region.probePoint[0].position)\n const camaraPosition = position.clone().add(new Vector3(0, 30, 0))\n\n this.startPosition = camera.position.clone()\n // 获取相机朝向\n this.cameraLookAt = new Vector3() // 创建一个向量来存储相机朝向\n camera.getWorldDirection(this.cameraLookAt) // 获取相机朝向并存储在向量中\n this.gobal.cameraUtil.set({\n position: camaraPosition.toArray(),\n target: position.clone().toArray(),\n }).then(() => {\n this.headMap = new HeadMap()\n const mesh = this.headMap.create(camaraPosition.distanceTo(position))\n mesh.position.copy(sprite.position)\n mesh.position.y = 0.5\n this.gobal.scene.add(mesh)\n\n // this.headMap.addBack()\n this.headMap.addEventListener('close', () => {\n this.closeHotmap()\n // this.togglePoi(true)\n\n // this.gobal.cameraUtil.set({\n // position: this.startPosition.toArray(),\n // target: this.cameraLookAt.toArray(),\n // })\n })\n })\n })\n }\n\n closeHotmap() {\n this.headMap.remove()\n this.togglePoi(true)\n\n this.gobal.cameraUtil.set({\n position: this.startPosition.toArray(),\n target: this.cameraLookAt.toArray(),\n })\n }\n\n togglePoi(visible = true) {\n this.warnMesh.forEach((sprite) => {\n sprite.visible = visible\n })\n this.cameraMesh.forEach((sprite) => {\n sprite.visible = visible\n })\n }\n\n remove() {\n // 删除摄像机POI点\n this.cameraMesh.forEach((sprite) => {\n sprite.removeFromParent()\n sprite.remove()\n })\n this.cameraMesh.clear()\n this.warnMesh.forEach((sprite) => {\n sprite.removeFromParent()\n sprite.remove()\n })\n this.warnMesh.clear()\n this.eventListener.forEach((fn) => {\n fn()\n })\n // 热力图\n if (this.headMap)\n this.headMap.remove()\n this.eventListener.clear()\n\n this.dialogManage.close()\n }\n}\n\nexport default CameraPoi\n\nclass MethanePoint {\n constructor() {\n\n }\n\n create() {\n // 定义Shader的uniform变量\n\n const geometry = new PlaneGeometry(10, 10)\n const texture = new TextureLoader().load(`${usePath}p4/monitor.png`)\n const circle = new Mesh(geometry, new MeshBasicMaterial({\n map: texture,\n side: DoubleSide,\n transparent: true,\n }))\n circle.rotateX(-Math.PI / 3)\n return circle\n }\n\n // 随机多点的方案\n createBack() {\n // 定义Shader的uniform变量\n\n const group = new Group()\n const geometry = new CircleGeometry(2, 32)\n // 创建自定义着色器材质\n const material = new ShaderMaterial({\n vertexShader: `\n void main() {\n gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\n gl_PointSize = 20.0; // 设置点的大小\n }\n `,\n fragmentShader: `\n void main() {\n vec2 center = vec2(0.5, 0.5); // 圆心坐标\n vec2 toCenter = gl_PointCoord - center; // 计算点到圆心的向量\n float distance = length(toCenter); // 计算点到圆心的距离\n if (distance > 0.5) discard; // 超出半径范围的点直接丢弃\n vec3 innerColor = vec3(1.0, .8, 0.0); // 内圈颜色为黄色\n vec3 outerColor = vec3(0.8, 0.4, 0.0); // 外圈颜色为深橘色\n \n vec3 finalColor = mix(innerColor, outerColor, smoothstep(0.1, 0.23, distance)); // 根据距离混合颜色\n if(distance>0.3) finalColor = mix(finalColor, vec3(0.75, 0.4, 0.0), smoothstep(0.25, 0.3, distance)); // 根据距离混合颜色\n gl_FragColor = vec4(finalColor, 1.0); // 设置片段颜色\n }\n `,\n blending: AdditiveBlending,\n depthTest: false,\n transparent: true,\n side: DoubleSide,\n })\n const circle = new Mesh(geometry, new MeshBasicMaterial({ color: '#f7a157' }))\n const numPoints = 100 // 点的数量\n\n for (let i = 0; i < numPoints; i++) {\n const x = Math.random() * 700 - 322 // 随机生成 x 坐标\n const z = Math.random() * 340 - 144 // 随机生成 z 坐标\n const point = circle.clone()\n point.position.copy(new Vector3(x, 20.55, z))\n point.rotateX(-Math.PI / 2)\n group.add(point)\n }\n\n return group\n }\n}\n\nclass Dialog {\n manage: CameraPoi\n\n camera: PerspectiveCamera\n cameraPosition: Vector3\n cameraTargetPosition: Vector3\n\n borderMesh: Css2DPoi\n cuteSprite: Sprite\n eventListener: Set<Function> = new Set()\n eventList: Map<string, Function> = new Map()\n\n constructor(cameraManage) {\n this.manage = cameraManage\n }\n\n async getMesh(position, cameraPosition) {\n this.camera = new PerspectiveCamera(\n 90, window.innerWidth / window.innerHeight, 0.1, 100000000,\n )\n this.camera.position.copy(cameraPosition)\n const target = this.getTarget(cameraPosition)\n this.camera.lookAt(target)\n const { texture, close } = this.manage.gobal.scene.setCustomPerspective(this.camera)\n this.cuteSprite = new Sprite(new SpriteMaterial({ map: texture, depthTest: false, depthWrite: false }))\n this.cuteSprite.center.set(0.5, 0.5)\n this.cuteSprite.renderOrder = 5\n this.cuteSprite.position.copy(position)\n\n const unFrame = use.useframe(() => {\n this.updateScale(this.cuteSprite)\n })\n this.eventListener.add(unFrame)\n\n return new Promise((reslove) => {\n setTimeout(() => {\n this.getBorderMesh(this.camera, this.cuteSprite)\n const group = new Group()\n group.add(this.borderMesh)\n group.add(this.cuteSprite)\n close()\n reslove(group)\n }, 1000)\n })\n }\n\n getTarget(cameraPosition, rotation = [-30, 0, 0]) {\n // 将旋转角度转换为弧度\n const angleX = MathUtils.degToRad(rotation[0])\n const angleY = MathUtils.degToRad(rotation[1])\n const angleZ = MathUtils.degToRad(rotation[2])\n\n // 创建旋转矩阵\n const rotationMatrix = new Matrix4()\n rotationMatrix.makeRotationX(angleX)\n rotationMatrix.multiply(new Matrix4().makeRotationY(angleY))\n rotationMatrix.multiply(new Matrix4().makeRotationZ(angleZ))\n\n // 定义相机的方向向量(例如,相机的方向默认为(0, 0, -1))\n const cameraDirection = new Vector3(0, 0, 1)\n\n // 将相机的方向向量乘以旋转矩阵,得到相机目标位置的向量\n const targetDirection = cameraDirection.clone().applyMatrix4(rotationMatrix)\n\n // 计算相机的目标位置\n return cameraPosition.clone().add(targetDirection)\n }\n\n getBoxSize(sprite: Sprite) {\n const { camera } = use.useScene()\n\n // 获取设备像素比\n const devicePixelRatio = window.devicePixelRatio || 1\n // 获取精灵对象的边界框\n const bbox = new Box3().setFromObject(sprite)\n // 将边界框的最小和最大顶点转换为屏幕坐标\n const min = bbox.min.project(camera)\n const max = bbox.max.project(camera)\n\n // 计算精灵在屏幕中的宽度和高度像素值\n let width = (max.x - min.x) * window.innerWidth / devicePixelRatio * 0.9458\n let height = (max.y - min.y) * window.innerHeight / devicePixelRatio * 1.0617\n\n // 定义设备像素比和对应的缩放系数的映射关系\n const scaleFactors = {\n 1: 0.5,\n 1.5: 0.75,\n 2: 1,\n }\n const scaleFactor = scaleFactors[devicePixelRatio] || 1\n // 应用缩放系数\n width *= scaleFactor\n height *= scaleFactor\n\n return { width, height }\n }\n\n updateScale(sprite: Sprite) {\n const { camera } = use.useScene()\n // 距离限制范围的值,用于计算缩放比例\n const minDistance = 0.1\n const maxDistance = 1000000\n // 获取相机和物体的世界坐标位置\n const cameraPosition = camera?.position\n const objectPosition = sprite.position\n\n // 计算相机和物体之间的距离\n const distance = cameraPosition?.distanceTo(objectPosition) || 0.1\n\n // 使用 Math.min() 和 Math.max() 方法限制 resultDistance 的范围\n const clampedDistance = Math.max(minDistance, Math.min(maxDistance, distance))\n // console.log('clampedDistance:',clampedDistance)\n // 按照缩放系数和距离进行缩放,缩放系数应该约定好一个固定值\n sprite.scale.copy(new Vector3(clampedDistance * 1.5, 1.05 * clampedDistance, 1))\n }\n\n addEventListener(eventName, fn) {\n if (this.eventList.has(eventName))\n this.eventList[eventName] = fn\n else\n this.eventList.set(eventName, fn)\n }\n\n getBorderMesh(camera, sprite: Sprite) {\n let { width, height } = this.getBoxSize(sprite)\n\n // 弹窗容器\n const dialogDiv = document.createElement('div')\n width += 5\n height += 5\n Object.assign(dialogDiv.style, {\n 'width': `${width}px`,\n 'height': `${height}px`,\n 'z-index': '3 !important',\n 'backgroundImage': `url(${usePath}p4/border.png)`,\n 'backgroundSize': '100% 100%',\n 'backgroundRepeat': 'no-repeat',\n 'position': 'relative',\n\n // left: `${(window.innerWidth - width) / 2}px`,\n // top: `${(window.innerHeight - height) / 2}px`,\n })\n\n const maskingDiv = document.createElement('div')\n maskingDiv.className = 'dialog-mask'\n dialogDiv.appendChild(maskingDiv)\n\n // 关闭按钮\n const closeSpan = document.createElement('span')\n closeSpan.className = 'dialog-close'\n closeSpan.addEventListener('click', () => {\n this.eventList.has('close') && this.eventList.get('close')()\n this.close()\n })\n const hLine = document.createElement('span')\n hLine.className = 'dialog-close-line dialog-close-h-line'\n closeSpan.appendChild(hLine)\n const vLine = document.createElement('span')\n vLine.className = 'dialog-close-line dialog-close-v-line'\n closeSpan.appendChild(vLine)\n dialogDiv.appendChild(closeSpan)\n\n // 操作按钮\n const op = document.createElement('div')\n op.className = 'dialog-operate'\n dialogDiv.appendChild(op)\n const opList = ['left', 'right', 'top', 'bottom']\n opList.forEach((key) => {\n const btnSpan = document.createElement('span')\n btnSpan.className = `dialog-operate-btn dialog-operate-${key}`\n btnSpan.addEventListener('click', () => {\n switch (key) {\n case 'top':\n camera.rotation.x -= 0.01\n break\n case 'bottom':\n camera.rotation.x += 0.01\n break\n case 'left':\n camera.rotation.y -= 0.01\n break\n case 'right':\n camera.rotation.y += 0.01\n break\n }\n const { texture, close } = this.manage.gobal.scene.setCustomPerspective(camera)\n sprite.material = new SpriteMaterial({ map: texture, depthTest: false, depthWrite: false })\n setTimeout(() => close(), 800)\n })\n op.appendChild(btnSpan)\n })\n\n // 滑动条\n const sliderDiv = document.createElement('div')\n sliderDiv.className = 'dialog-slider-container'\n const sliderBar = document.createElement('input')\n sliderBar.type = 'range'\n sliderBar.min = '30'\n sliderBar.max = '120'\n sliderBar.value = '90'\n sliderBar.className = 'dialog-slider'\n sliderBar.addEventListener('input', () => {\n camera.fov = sliderBar.value\n camera.updateProjectionMatrix()\n const { texture, close } = this.manage.gobal.scene.setCustomPerspective(camera)\n sprite.material = new SpriteMaterial({ map: texture, depthTest: false, depthWrite: false })\n setTimeout(() => close(), 800)\n })\n sliderDiv.appendChild(sliderBar)\n dialogDiv.appendChild(sliderDiv)\n\n this.borderMesh = new Css2DPoi(dialogDiv)\n this.borderMesh.position.copy(sprite.position)\n return this.borderMesh\n }\n\n addStyle() {\n // 设置 CSS 规则\n const css = `\n .page-mask{\n position: fixed;\n top: 0;\n left: 0;\n bottom:0;\n right:0;\n //width: 100%;\n //height: 100%;\n background-color: rgba(0, 0, 0, 0.5); /* 半透明背景 */\n //filter: blur(10px); /* 模糊效果 */\n z-index: 1 !important; /* 确保蒙版位于其他元素之上 */\n }\n .dialog-mask{\n position: absolute;\n top: 8px;\n left: 6px;\n width: calc(100% - 12px);\n height: calc(100% - 16px);\n background: linear-gradient(90deg, rgba(0, 0, 0,.4) 0%,rgba(0, 0, 0,.2) 10%, rgba(0, 0, 0,0) 20%, rgba(0,0,0, 0) 50%, rgba(0, 0, 0,0) 80%, rgba(0, 0, 0,0.2) 90%, rgba(0, 0, 0,.4) 100%);\n pointer-events: auto;\n opacity: 1;\n transform: perspective(100px) rotateX(0deg) rotateY(0deg) rotateZ(0deg);\n transform-origin: center center;\n }\n .hot-back{\n width: 70px;\n height: 25px;\n border-radius: 2px;\n color: #fff;\n font-weight: bold;\n font-size: 14px;\n border:1px solid #d1ae6d;\n background-color: #c8ab75;\n cursor: pointer; /* 鼠标指针样式 */\n display: flex;\n justify-content: center;\n align-items: center;\n position: absolute;\n left: 30px;\n top: 30px;\n pointer-events: auto;\n }\n .hot-back:hover{\n background-color:#c8a158;\n }\n .dialog-close{\n width: 20px;\n height: 20px;\n border-radius: 2px;\n color: #fff;\n background-color: #c8ab75;\n cursor: pointer; /* 鼠标指针样式 */\n display: flex;\n justify-content: center;\n align-items: center;\n position: absolute;\n right: 20px;\n top: 15px;\n pointer-events: auto;\n }\n\n .dialog-close:hover{\n background-color:#c8a158;\n }\n\n .dialog-close-line{\n width: 14px;\n height: 2px;\n background-color: #fff;\n position: absolute;\n top: 9px;\n display: block;\n }\n\n .dialog-close-h-line{\n transform: rotate(-45deg);\n }\n\n .dialog-close-v-line{\n transform: rotate(45deg);\n }\n\n .dialog-operate{\n width: 120px;\n height: 120px;\n background-image: url(${usePath}p4/operate.png);\n background-size: 100% 100%;\n background-repeat: no-repeat;\n position: absolute;\n right: 15px;\n bottom: 10px;\n pointer-events: auto;\n }\n\n .dialog-operate-btn{\n width: 0;\n height: 0;\n position: absolute;\n cursor: pointer;\n pointer-events: auto;\n }\n\n .dialog-operate-top{\n border-left: 8px solid transparent; /* 左边透明 */\n border-right: 8px solid transparent; /* 右边透明 */\n border-bottom: 8px solid #f2c67d; /* 底边实心 */\n left: calc(50% - 9px);\n top: 20px;\n }\n .dialog-operate-top:hover{\n border-bottom-color:#fff2dd;\n }\n\n .dialog-operate-bottom{\n border-left: 8px solid transparent; /* 左边透明 */\n border-right: 8px solid transparent; /* 右边透明 */\n border-top: 8px solid #f2c67d; /* 底边实心 */\n left: calc(50% - 9px);\n bottom: 20px;\n }\n\n .dialog-operate-bottom:hover{\n border-top-color:#fff2dd;\n }\n\n .dialog-operate-left{\n border-top: 8px solid transparent; /* 左边透明 */\n border-bottom: 8px solid transparent; /* 右边透明 */\n border-right: 8px solid #f2c67d; /* 底边实心 */\n top: calc(50% - 9px);\n left: 20px;\n }\n .dialog-operate-left:hover{\n border-right-color:#fff2dd;\n }\n\n .dialog-operate-right{\n border-top: 8px solid transparent; /* 左边透明 */\n border-bottom: 8px solid transparent; /* 右边透明 */\n border-left: 8px solid #f2c67d; /* 底边实心 */\n top: calc(50% - 9px);\n right: 20px;\n }\n\n .dialog-operate-right:hover{\n border-left-color:#fff2dd;\n }\n \n .dialog-slider-container {\n width: 13px;\n height: 300px;\n background: url(${usePath}p4/slider.png);\n background-size: 100% 100%;\n position:absolute;\n right:23px;\n top:50px;\n }\n\n .dialog-slider {\n -webkit-appearance: none;\n width: 300px;\n height: 13px;\n background: transparent;\n outline: none;\n opacity: 0.7;\n -webkit-transition: .2s;\n transition: opacity .2s;\n transform: rotate(-90deg);\n margin-left: -144px;\n margin-top: 144px;\n pointer-events: auto;\n }\n\n .dialog-slider::-webkit-slider-thumb {\n -webkit-appearance: none;\n appearance: none;\n width: 7px;\n height: 20px;\n background: #eebe76;\n cursor: pointer;\n border-radius: 5px;\n }\n\n .dialog-slider::-moz-range-thumb {\n width: 7px;\n height: 20px;\n background: #eebe76;\n cursor: pointer;\n border-radius: 5px;\n }\n`\n // 创建一个 <style> 元素\n const styleElement = document.createElement('style')\n styleElement.appendChild(document.createTextNode(css))\n // 将 <style> 元素添加到 <head> 中\n document.head.appendChild(styleElement)\n }\n\n close() {\n // 删除弹窗POI\n if (this.borderMesh) {\n this.borderMesh.remove()\n this.borderMesh.removeFromParent()\n }\n if (this.cuteSprite) {\n this.cuteSprite.remove()\n this.cuteSprite.removeFromParent()\n }\n // 移除事件监听\n this.eventListener.forEach((fn) => {\n fn()\n })\n this.eventListener.clear()\n this.eventList.clear()\n }\n}\n\nclass HeadMap {\n TemperatureColorStops = {\n 1.0: '#f00',\n 0.9: '#e2fa00',\n 0.6: '#33f900',\n 0.3: '#0349df',\n 0.0: '#0f00ff',\n }\n\n eventList: Map<string, Function> = new Map()\n backEle: HTMLElement\n heatMapPlane: Mesh\n canvasList = []\n\n constructor() {\n\n }\n\n // 热力图\n create(distance) {\n const heatmap = heatMap.create({\n container: this.createDom(),\n gradient: this.TemperatureColorStops,\n })\n let len = 1200\n const width = window.innerWidth\n const height = window.innerHeight\n const points = []\n let max = 0\n while (len--) {\n const val = Math.floor(Math.random() * 10)\n max = Math.max(max, val)\n const point = {\n x: Math.floor(Math.random() * width),\n y: Math.floor(Math.random() * height),\n value: val,\n }\n points.push(point)\n }\n heatmap.setData({\n max,\n data: points,\n })\n\n // 灰度图\n const greymap = heatMap.create({\n container: this.createDom(),\n gradient: {\n '0': 'black',\n '1.0': 'white',\n },\n })\n\n greymap.setData({\n max,\n data: points,\n })\n const heatMapMaterial = new ShaderMaterial({\n transparent: true,\n depthTest: false,\n side: DoubleSide,\n vertexShader: `varying vec2 vUv;\n uniform float Zscale;\n uniform sampler2D greyMap;\n void main() {\n vUv = uv;\n vec4 frgColor = texture2D(greyMap, uv);//获取灰度图点位信息\n float height = Zscale * frgColor.a;//通过灰度图的rgb*需要设置的高度计算出热力图每个点位最终在z轴高度\n vec3 transformed = vec3( position.x, position.y, height);//重新组装点坐标\n gl_Position = projectionMatrix * modelViewMatrix * vec4(transformed, 1.0);//渲染点位\n \n }\n `,\n fragmentShader: `varying vec2 vUv;\n uniform sampler2D heatMap;//热力图\n uniform vec3 u_color;//基础颜色\n uniform float u_opacity; // 透明度\n void main() {\n //vec4 alphaColor = texture2D(heatMap, vUv);\n // gl_FragColor = alphaColor;\n gl_FragColor = vec4(u_color, u_opacity) * texture2D(heatMap, vUv);//把热力图颜色和透明度进行渲染\n }`,\n uniforms: {\n heatMap: {\n value: { value: undefined },\n },\n greyMap: {\n value: { value: undefined },\n },\n Zscale: { value: 0 }, // 高度参数\n u_color: {\n value: new Color('rgb(255, 255, 255)'),\n },\n u_opacity: {\n value: 0.8,\n },\n },\n })\n\n const texture = new Texture(heatmap._renderer.canvas)\n texture.needsUpdate = true\n const greyTexture = new Texture(greymap._renderer.canvas)\n greyTexture.needsUpdate = true\n\n heatMapMaterial.uniforms.heatMap.value = texture\n heatMapMaterial.uniforms.greyMap.value = greyTexture\n\n const { camera } = use.useScene()\n // 计算平面的尺寸\n const h = 2 * Math.tan(camera.fov * Math.PI / 360) * distance * 2 * 0.85\n const w = h * camera.aspect\n\n const heatMapGeometry = new PlaneGeometry(w, h, 100, 100) // 3d热力图大小,及分块数量\n const heatMapPlane = new Mesh(heatMapGeometry, heatMapMaterial)\n heatMapPlane.rotation.set(-Math.PI / 2, 0, 0)\n\n this.heatMapPlane = heatMapPlane\n return heatMapPlane\n }\n\n addEventListener(eventName, fn) {\n if (this.eventList.has(eventName))\n this.eventList[eventName] = fn\n else\n this.eventList.set(eventName, fn)\n }\n\n addBack() {\n this.backEle = document.createElement('div')\n this.backEle.className = 'hot-back'\n this.backEle.innerHTML = '返回'\n document.body.appendChild(this.backEle)\n this.backEle.addEventListener('click', () => {\n this.eventList.has('close') && this.eventList.get('close')()\n // this.remove()\n })\n }\n\n createDom() {\n // 创建一个新的 canvas 元素\n const canvas = document.createElement('canvas')\n canvas.style.zIndex = '-1'\n // 设置 canvas 元素的宽度和高度\n canvas.width = window.innerWidth\n canvas.height = window.innerHeight\n document.body.appendChild(canvas)\n this.canvasList.push(canvas)\n return canvas\n }\n\n remove() {\n this.canvasList.forEach((canvas) => {\n canvas.remove()\n })\n this.canvasList.length = 0\n this.backEle && this.backEle.remove()\n this.heatMapPlane.removeFromParent()\n this.heatMapPlane.remove()\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["AdditiveBlending","Box3","CircleGeometry","Color","DoubleSide","Group","MathUtils","Matrix4","Mesh","MeshBasicMaterial","ModelLoader","PerspectiveCamera","PlaneGeometry","ShaderMaterial","Sprite","SpriteMaterial","Texture","TextureLoader","Vector3","use","utils","Css2DPoi","SpritePoi","heatMap","MessageType","sendToMessage","EMessageStatus","regionMap","usePath","emitter","load","CameraPoi","gobal","Map","Set","dialogManage","Dialog","addStyle","loadGLTF","gltf","model","Object","keys","forEach","key","region","group","name","camera","id","sprite","scale","rotation","y","Math","PI","position","fromArray","copy","add","scan","scene","clone","addScalar","x","cameraMesh","set","title","interactionManager","cameraEvent","point","MethanePoint","probePoint","item","mesh","warn","probeEvent","create","warnMesh","rotatingRight","unFrame","useframe","children","z","abs","eventListener","useScene","unClick","addEventListener","Event","Success","undefined","targetPosition","toArray","camaraPosition","startPosition","cameraLookAt","getWorldDirection","cameraUtil","target","getMesh","dialogMesh","visible","togglePoi","then","headMap","HeadMap","distanceTo","closeHotmap","remove","removeFromParent","clear","fn","close","geometry","texture","circle","map","side","transparent","rotateX","material","vertexShader","fragmentShader","blending","depthTest","color","numPoints","i","random","cameraManage","manage","cameraPosition","window","innerWidth","innerHeight","getTarget","lookAt","setCustomPerspective","cuteSprite","depthWrite","center","renderOrder","updateScale","Promise","reslove","setTimeout","getBorderMesh","borderMesh","angleX","degToRad","angleY","angleZ","rotationMatrix","makeRotationX","multiply","makeRotationY","makeRotationZ","cameraDirection","targetDirection","applyMatrix4","devicePixelRatio","bbox","setFromObject","min","project","max","w","h","dom","document","querySelector","clientWidth","clientHeight","width","height","scaleFactors","scaleFactor","minDistance","maxDistance","objectPosition","distance","clampedDistance","eventName","eventList","has","getBoxSize","dialogDiv","createElement","assign","style","maskingDiv","className","appendChild","closeSpan","get","hLine","vLine","op","opList","btnSpan","sliderDiv","sliderBar","type","value","fov","updateProjectionMatrix","css","styleElement","createTextNode","head","heatmap","container","createDom","gradient","TemperatureColorStops","len","points","val","floor","push","setData","data","greymap","heatMapMaterial","uniforms","greyMap","Zscale","u_color","u_opacity","_renderer","canvas","needsUpdate","greyTexture","tan","aspect","heatMapGeometry","heatMapPlane","backEle","innerHTML","body","zIndex","canvasList","length"],"sources":["../../../src/factory/unit/CameraPoi.ts"],"sourcesContent":["import { AdditiveBlending, Box3, CircleGeometry, Color, DoubleSide, Group, MathUtils, Matrix4, Mesh, MeshBasicMaterial, ModelLoader, PerspectiveCamera, PlaneGeometry, ShaderMaterial, Sprite, SpriteMaterial, Texture, TextureLoader, Vector3, use, utils } from '@anov/3d-core'\nimport { Css2DPoi, SpritePoi } from '@anov/3d-ability'\nimport heatMap from 'anov-heat-map'\nimport { MessageType, sendToMessage } from '../../utils/messageFn'\nimport { EMessageStatus } from '../../messageStatus'\n\n// @ts-ignore\nimport type Factory3D from '../3d'\n\n// @ts-ignore\nimport { regionMap } from '../regionData'\n\nimport { usePath } from '../3d'\n\nconst { emitter } = utils\n\nconst load = new ModelLoader()\nclass CameraPoi {\n gobal: Factory3D\n cameraMesh: Map<string, Group> = new Map()\n warnMesh: Map<string, SpritePoi> = new Map()\n headMap: HeadMap\n dialogManage: Dialog\n eventListener: Set<Function> = new Set()\n\n startPosition: Vector3\n cameraLookAt: Vector3\n\n constructor(gobal: Factory3D) {\n this.gobal = gobal\n this.dialogManage = new Dialog(this)\n this.dialogManage.addStyle()\n }\n\n async generateObject() {\n const model = await load.loadGLTF(`${usePath}shexiang.glb`, false, true, './draco/', (gltf) => {\n return gltf\n })\n\n Object.keys(regionMap).forEach(async (key: string) => {\n // 摄像机\n const region = regionMap[key]\n const group = new Group()\n group.name = region.camera.id\n const sprite = new SpritePoi(`${usePath}camera.png`, { scale: [10, 10, 1] })\n sprite.rotation.y = Math.PI\n const position = new Vector3().fromArray(region.camera.position)\n sprite.position.copy(position)\n group.add(sprite)\n\n const scan = model.scene.clone()\n scan.scale.addScalar(5)\n scan.rotation.x = (-Math.PI / 2) + 0.5\n scan.position.copy(position.clone().add(new Vector3(0, -2, 0)))\n group.add(scan)\n\n this.cameraMesh.set(region.title, group)\n this.gobal.interactionManager.add(group)\n this.cameraEvent(group, region)\n this.gobal.scene.add(group)\n\n // 甲烷检测点\n const point = new MethanePoint()\n region.probePoint?.forEach((item) => {\n let mesh\n if (item.warn) {\n mesh = new SpritePoi(`${usePath}p4/warn.png`, { scale: [10, 10, 1] })\n this.gobal.interactionManager.add(mesh)\n this.probeEvent(mesh, region)\n }\n else {\n mesh = point.create()\n }\n mesh.position.copy(new Vector3().fromArray(item.position))\n this.warnMesh.set(region.title, mesh)\n\n this.gobal.scene.add(mesh)\n })\n })\n // 设置左右旋转的标志位和旋转速度\n let rotatingRight = true // 是否正在向右转动\n\n const unFrame = use.useframe(() => {\n this.cameraMesh.forEach((group) => {\n const scan = group.children[1]\n // 更新相机的旋转角度\n if (rotatingRight) {\n // 向右旋转\n scan.rotation.z += 0.005\n }\n else {\n // 向左旋转\n scan.rotation.z -= 0.005\n }\n\n // 检查是否达到目标旋转角度\n if (Math.abs(scan.rotation.z) >= Math.abs(Math.PI / 4)) {\n // 到达目标角度,切换旋转方向并更新目标角度\n rotatingRight = !rotatingRight\n }\n })\n })\n this.eventListener.add(unFrame)\n }\n\n cameraEvent(sprite: Group, region: any) {\n const { camera } = use.useScene()\n const unClick = sprite.addEventListener('click', async () => {\n sendToMessage(MessageType.Event, 'onCameraStatus', EMessageStatus.Success, undefined, { id: region.camera.id })\n\n const position = new Vector3().fromArray(region.camera.position)\n const targetPosition: [number, number, number] = position.clone().toArray()\n const camaraPosition: [number, number, number] = position.clone().add(new Vector3(0, 40, 80)).toArray()\n\n const startPosition = camera.position.clone()\n // 获取相机朝向\n const cameraLookAt = new Vector3() // 创建一个向量来存储相机朝向\n camera.getWorldDirection(cameraLookAt) // 获取相机朝向并存储在向量中\n this.gobal.cameraUtil.set({\n position: camaraPosition,\n target: targetPosition,\n })\n\n const dialogMesh = await this.dialogManage.getMesh(position, position.clone().add(new Vector3(0, -15, 5)))\n this.dialogManage.addEventListener('close', () => {\n // 初始相机到原始位置\n this.gobal.cameraUtil.set({\n position: startPosition.toArray(),\n target: cameraLookAt.toArray(),\n })\n sendToMessage(MessageType.Event, 'onCancelCameraStatus', EMessageStatus.Success, undefined, { id: region.camera.id })\n })\n this.gobal.scene.add(dialogMesh)\n })\n // this.eventListener.add(unClick)\n }\n\n probeEvent(sprite: SpritePoi, region) {\n const { camera } = use.useScene()\n sprite.addEventListener('click', async () => {\n if (!sprite.visible)\n return\n sprite.visible = false\n sendToMessage(MessageType.Event, 'onGasMonitorStatus', EMessageStatus.Success, undefined, { id: region.probePoint[0].id })\n this.togglePoi(false)\n const position = new Vector3().fromArray(region.probePoint[0].position)\n const camaraPosition = position.clone().add(new Vector3(0, 30, 0))\n\n this.startPosition = camera.position.clone()\n // 获取相机朝向\n this.cameraLookAt = new Vector3() // 创建一个向量来存储相机朝向\n camera.getWorldDirection(this.cameraLookAt) // 获取相机朝向并存储在向量中\n this.gobal.cameraUtil.set({\n position: camaraPosition.toArray(),\n target: position.clone().toArray(),\n }).then(() => {\n this.headMap = new HeadMap()\n const mesh = this.headMap.create(camaraPosition.distanceTo(position))\n mesh.position.copy(sprite.position)\n mesh.position.y = 0.5\n this.gobal.scene.add(mesh)\n\n // this.headMap.addBack()\n this.headMap.addEventListener('close', () => {\n this.closeHotmap()\n // this.togglePoi(true)\n\n // this.gobal.cameraUtil.set({\n // position: this.startPosition.toArray(),\n // target: this.cameraLookAt.toArray(),\n // })\n })\n })\n })\n }\n\n closeHotmap() {\n this.headMap.remove()\n this.togglePoi(true)\n\n this.gobal.cameraUtil.set({\n position: this.startPosition.toArray(),\n target: this.cameraLookAt.toArray(),\n })\n }\n\n togglePoi(visible = true) {\n this.warnMesh.forEach((sprite) => {\n sprite.visible = visible\n })\n this.cameraMesh.forEach((sprite) => {\n sprite.visible = visible\n })\n }\n\n remove() {\n // 删除摄像机POI点\n this.cameraMesh.forEach((sprite) => {\n sprite.removeFromParent()\n sprite.remove()\n })\n this.cameraMesh.clear()\n this.warnMesh.forEach((sprite) => {\n sprite.removeFromParent()\n sprite.remove()\n })\n this.warnMesh.clear()\n this.eventListener.forEach((fn) => {\n fn()\n })\n // 热力图\n if (this.headMap)\n this.headMap.remove()\n this.eventListener.clear()\n\n this.dialogManage.close()\n }\n}\n\nexport default CameraPoi\n\nclass MethanePoint {\n constructor() {\n\n }\n\n create() {\n // 定义Shader的uniform变量\n\n const geometry = new PlaneGeometry(10, 10)\n const texture = new TextureLoader().load(`${usePath}p4/monitor.png`)\n const circle = new Mesh(geometry, new MeshBasicMaterial({\n map: texture,\n side: DoubleSide,\n transparent: true,\n }))\n circle.rotateX(-Math.PI / 3)\n return circle\n }\n\n // 随机多点的方案\n createBack() {\n // 定义Shader的uniform变量\n\n const group = new Group()\n const geometry = new CircleGeometry(2, 32)\n // 创建自定义着色器材质\n const material = new ShaderMaterial({\n vertexShader: `\n void main() {\n gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\n gl_PointSize = 20.0; // 设置点的大小\n }\n `,\n fragmentShader: `\n void main() {\n vec2 center = vec2(0.5, 0.5); // 圆心坐标\n vec2 toCenter = gl_PointCoord - center; // 计算点到圆心的向量\n float distance = length(toCenter); // 计算点到圆心的距离\n if (distance > 0.5) discard; // 超出半径范围的点直接丢弃\n vec3 innerColor = vec3(1.0, .8, 0.0); // 内圈颜色为黄色\n vec3 outerColor = vec3(0.8, 0.4, 0.0); // 外圈颜色为深橘色\n \n vec3 finalColor = mix(innerColor, outerColor, smoothstep(0.1, 0.23, distance)); // 根据距离混合颜色\n if(distance>0.3) finalColor = mix(finalColor, vec3(0.75, 0.4, 0.0), smoothstep(0.25, 0.3, distance)); // 根据距离混合颜色\n gl_FragColor = vec4(finalColor, 1.0); // 设置片段颜色\n }\n `,\n blending: AdditiveBlending,\n depthTest: false,\n transparent: true,\n side: DoubleSide,\n })\n const circle = new Mesh(geometry, new MeshBasicMaterial({ color: '#f7a157' }))\n const numPoints = 100 // 点的数量\n\n for (let i = 0; i < numPoints; i++) {\n const x = Math.random() * 700 - 322 // 随机生成 x 坐标\n const z = Math.random() * 340 - 144 // 随机生成 z 坐标\n const point = circle.clone()\n point.position.copy(new Vector3(x, 20.55, z))\n point.rotateX(-Math.PI / 2)\n group.add(point)\n }\n\n return group\n }\n}\n\nclass Dialog {\n manage: CameraPoi\n\n camera: PerspectiveCamera\n cameraPosition: Vector3\n cameraTargetPosition: Vector3\n\n borderMesh: Css2DPoi\n cuteSprite: Sprite\n eventListener: Set<Function> = new Set()\n eventList: Map<string, Function> = new Map()\n\n constructor(cameraManage) {\n this.manage = cameraManage\n }\n\n async getMesh(position, cameraPosition) {\n this.camera = new PerspectiveCamera(\n 90, window.innerWidth / window.innerHeight, 0.1, 100000000,\n )\n this.camera.position.copy(cameraPosition)\n const target = this.getTarget(cameraPosition)\n this.camera.lookAt(target)\n const { texture, close } = this.manage.gobal.scene.setCustomPerspective(this.camera)\n this.cuteSprite = new Sprite(new SpriteMaterial({ map: texture, depthTest: false, depthWrite: false }))\n this.cuteSprite.center.set(0.5, 0.5)\n this.cuteSprite.renderOrder = 5\n this.cuteSprite.position.copy(position)\n\n const unFrame = use.useframe(() => {\n this.updateScale(this.cuteSprite)\n })\n this.eventListener.add(unFrame)\n\n return new Promise((reslove) => {\n setTimeout(() => {\n this.getBorderMesh(this.camera, this.cuteSprite)\n const group = new Group()\n group.add(this.borderMesh)\n group.add(this.cuteSprite)\n close()\n reslove(group)\n }, 1000)\n })\n }\n\n getTarget(cameraPosition, rotation = [-30, 0, 0]) {\n // 将旋转角度转换为弧度\n const angleX = MathUtils.degToRad(rotation[0])\n const angleY = MathUtils.degToRad(rotation[1])\n const angleZ = MathUtils.degToRad(rotation[2])\n\n // 创建旋转矩阵\n const rotationMatrix = new Matrix4()\n rotationMatrix.makeRotationX(angleX)\n rotationMatrix.multiply(new Matrix4().makeRotationY(angleY))\n rotationMatrix.multiply(new Matrix4().makeRotationZ(angleZ))\n\n // 定义相机的方向向量(例如,相机的方向默认为(0, 0, -1))\n const cameraDirection = new Vector3(0, 0, 1)\n\n // 将相机的方向向量乘以旋转矩阵,得到相机目标位置的向量\n const targetDirection = cameraDirection.clone().applyMatrix4(rotationMatrix)\n\n // 计算相机的目标位置\n return cameraPosition.clone().add(targetDirection)\n }\n\n getBoxSize(sprite: Sprite) {\n const { camera } = use.useScene()\n\n // 获取设备像素比\n const devicePixelRatio = window.devicePixelRatio || 1\n // 获取精灵对象的边界框\n const bbox = new Box3().setFromObject(sprite)\n // 将边界框的最小和最大顶点转换为屏幕坐标\n const min = bbox.min.project(camera)\n const max = bbox.max.project(camera)\n\n let [w, h] = [window.innerWidth, window.innerHeight]\n const dom = document.querySelector('#app')\n if (dom) {\n w = dom.clientWidth\n h = dom.clientHeight\n }\n\n // 计算精灵在屏幕中的宽度和高度像素值\n let width = (max.x - min.x) * w / devicePixelRatio * 0.977\n let height = (max.y - min.y) * h / devicePixelRatio * 1.089\n\n // 定义设备像素比和对应的缩放系数的映射关系\n const scaleFactors = {\n 1: 0.5,\n 1.5: 0.75,\n 2: 1,\n }\n const scaleFactor = scaleFactors[devicePixelRatio] || 1\n // 应用缩放系数\n width *= scaleFactor\n height *= scaleFactor\n\n return { width, height }\n }\n\n updateScale(sprite: Sprite) {\n const { camera } = use.useScene()\n // 距离限制范围的值,用于计算缩放比例\n const minDistance = 0.1\n const maxDistance = 1000000\n // 获取相机和物体的世界坐标位置\n const cameraPosition = camera?.position\n const objectPosition = sprite.position\n\n // 计算相机和物体之间的距离\n const distance = cameraPosition?.distanceTo(objectPosition) || 0.1\n\n // 使用 Math.min() 和 Math.max() 方法限制 resultDistance 的范围\n const clampedDistance = Math.max(minDistance, Math.min(maxDistance, distance))\n // console.log('clampedDistance:',clampedDistance)\n // 按照缩放系数和距离进行缩放,缩放系数应该约定好一个固定值\n sprite.scale.copy(new Vector3(clampedDistance * 0.99, 0.693 * clampedDistance, 1))\n }\n\n addEventListener(eventName, fn) {\n if (this.eventList.has(eventName))\n this.eventList[eventName] = fn\n else\n this.eventList.set(eventName, fn)\n }\n\n getBorderMesh(camera, sprite: Sprite) {\n let { width, height } = this.getBoxSize(sprite)\n\n // 弹窗容器\n const dialogDiv = document.createElement('div')\n width += 10\n height += 10\n Object.assign(dialogDiv.style, {\n 'width': `${width}px`,\n 'height': `${height}px`,\n 'z-index': '3 !important',\n 'backgroundImage': `url(${usePath}p4/border.png)`,\n 'backgroundSize': '100% 100%',\n 'backgroundRepeat': 'no-repeat',\n 'position': 'relative',\n\n // left: `${(window.innerWidth - width) / 2}px`,\n // top: `${(window.innerHeight - height) / 2}px`,\n })\n\n const maskingDiv = document.createElement('div')\n maskingDiv.className = 'dialog-mask'\n dialogDiv.appendChild(maskingDiv)\n\n // 关闭按钮\n const closeSpan = document.createElement('span')\n closeSpan.className = 'dialog-close'\n closeSpan.addEventListener('click', () => {\n this.eventList.has('close') && this.eventList.get('close')()\n this.close()\n })\n const hLine = document.createElement('span')\n hLine.className = 'dialog-close-line dialog-close-h-line'\n closeSpan.appendChild(hLine)\n const vLine = document.createElement('span')\n vLine.className = 'dialog-close-line dialog-close-v-line'\n closeSpan.appendChild(vLine)\n dialogDiv.appendChild(closeSpan)\n\n // 操作按钮\n const op = document.createElement('div')\n op.className = 'dialog-operate'\n dialogDiv.appendChild(op)\n const opList = ['left', 'right', 'top', 'bottom']\n opList.forEach((key) => {\n const btnSpan = document.createElement('span')\n btnSpan.className = `dialog-operate-btn dialog-operate-${key}`\n btnSpan.addEventListener('click', () => {\n switch (key) {\n case 'top':\n camera.rotation.x -= 0.01\n break\n case 'bottom':\n camera.rotation.x += 0.01\n break\n case 'left':\n camera.rotation.y -= 0.01\n break\n case 'right':\n camera.rotation.y += 0.01\n break\n }\n const { texture, close } = this.manage.gobal.scene.setCustomPerspective(camera)\n sprite.material = new SpriteMaterial({ map: texture, depthTest: false, depthWrite: false })\n setTimeout(() => close(), 800)\n })\n op.appendChild(btnSpan)\n })\n\n // 滑动条\n const sliderDiv = document.createElement('div')\n sliderDiv.className = 'dialog-slider-container'\n const sliderBar = document.createElement('input')\n sliderBar.type = 'range'\n sliderBar.min = '30'\n sliderBar.max = '120'\n sliderBar.value = '90'\n sliderBar.className = 'dialog-slider'\n sliderBar.addEventListener('input', () => {\n camera.fov = sliderBar.value\n camera.updateProjectionMatrix()\n const { texture, close } = this.manage.gobal.scene.setCustomPerspective(camera)\n sprite.material = new SpriteMaterial({ map: texture, depthTest: false, depthWrite: false })\n setTimeout(() => close(), 800)\n })\n sliderDiv.appendChild(sliderBar)\n dialogDiv.appendChild(sliderDiv)\n\n this.borderMesh = new Css2DPoi(dialogDiv)\n this.borderMesh.position.copy(sprite.position)\n return this.borderMesh\n }\n\n addStyle() {\n // 设置 CSS 规则\n const css = `\n .page-mask{\n position: fixed;\n top: 0;\n left: 0;\n bottom:0;\n right:0;\n //width: 100%;\n //height: 100%;\n background-color: rgba(0, 0, 0, 0.5); /* 半透明背景 */\n //filter: blur(10px); /* 模糊效果 */\n z-index: 1 !important; /* 确保蒙版位于其他元素之上 */\n }\n .dialog-mask{\n position: absolute;\n top: 8px;\n left: 6px;\n width: calc(100% - 12px);\n height: calc(100% - 16px);\n background: linear-gradient(90deg, rgba(0, 0, 0,.4) 0%,rgba(0, 0, 0,.2) 10%, rgba(0, 0, 0,0) 20%, rgba(0,0,0, 0) 50%, rgba(0, 0, 0,0) 80%, rgba(0, 0, 0,0.2) 90%, rgba(0, 0, 0,.4) 100%);\n pointer-events: auto;\n opacity: 1;\n transform: perspective(100px) rotateX(0deg) rotateY(0deg) rotateZ(0deg);\n transform-origin: center center;\n }\n .hot-back{\n width: 70px;\n height: 25px;\n border-radius: 2px;\n color: #fff;\n font-weight: bold;\n font-size: 14px;\n border:1px solid #d1ae6d;\n background-color: #c8ab75;\n cursor: pointer; /* 鼠标指针样式 */\n display: flex;\n justify-content: center;\n align-items: center;\n position: absolute;\n left: 30px;\n top: 30px;\n pointer-events: auto;\n }\n .hot-back:hover{\n background-color:#c8a158;\n }\n .dialog-close{\n width: 20px;\n height: 20px;\n border-radius: 2px;\n color: #fff;\n background-color: #c8ab75;\n cursor: pointer; /* 鼠标指针样式 */\n display: flex;\n justify-content: center;\n align-items: center;\n position: absolute;\n right: 20px;\n top: 15px;\n pointer-events: auto;\n }\n\n .dialog-close:hover{\n background-color:#c8a158;\n }\n\n .dialog-close-line{\n width: 14px;\n height: 2px;\n background-color: #fff;\n position: absolute;\n top: 9px;\n display: block;\n }\n\n .dialog-close-h-line{\n transform: rotate(-45deg);\n }\n\n .dialog-close-v-line{\n transform: rotate(45deg);\n }\n\n .dialog-operate{\n width: 120px;\n height: 120px;\n background-image: url(${usePath}p4/operate.png);\n background-size: 100% 100%;\n background-repeat: no-repeat;\n position: absolute;\n right: 15px;\n bottom: 10px;\n pointer-events: auto;\n }\n\n .dialog-operate-btn{\n width: 0;\n height: 0;\n position: absolute;\n cursor: pointer;\n pointer-events: auto;\n }\n\n .dialog-operate-top{\n border-left: 8px solid transparent; /* 左边透明 */\n border-right: 8px solid transparent; /* 右边透明 */\n border-bottom: 8px solid #f2c67d; /* 底边实心 */\n left: calc(50% - 9px);\n top: 20px;\n }\n .dialog-operate-top:hover{\n border-bottom-color:#fff2dd;\n }\n\n .dialog-operate-bottom{\n border-left: 8px solid transparent; /* 左边透明 */\n border-right: 8px solid transparent; /* 右边透明 */\n border-top: 8px solid #f2c67d; /* 底边实心 */\n left: calc(50% - 9px);\n bottom: 20px;\n }\n\n .dialog-operate-bottom:hover{\n border-top-color:#fff2dd;\n }\n\n .dialog-operate-left{\n border-top: 8px solid transparent; /* 左边透明 */\n border-bottom: 8px solid transparent; /* 右边透明 */\n border-right: 8px solid #f2c67d; /* 底边实心 */\n top: calc(50% - 9px);\n left: 20px;\n }\n .dialog-operate-left:hover{\n border-right-color:#fff2dd;\n }\n\n .dialog-operate-right{\n border-top: 8px solid transparent; /* 左边透明 */\n border-bottom: 8px solid transparent; /* 右边透明 */\n border-left: 8px solid #f2c67d; /* 底边实心 */\n top: calc(50% - 9px);\n right: 20px;\n }\n\n .dialog-operate-right:hover{\n border-left-color:#fff2dd;\n }\n \n .dialog-slider-container {\n width: 13px;\n height: 350px;\n background: url(${usePath}p4/slider.png);\n background-size: 100% 100%;\n position:absolute;\n right:23px;\n top:50px;\n }\n\n .dialog-slider {\n -webkit-appearance: none;\n width: 300px;\n height: 13px;\n background: transparent;\n outline: none;\n opacity: 0.7;\n -webkit-transition: .2s;\n transition: opacity .2s;\n transform: rotate(-90deg);\n margin-left: -144px;\n margin-top: 144px;\n pointer-events: auto;\n }\n\n .dialog-slider::-webkit-slider-thumb {\n -webkit-appearance: none;\n appearance: none;\n width: 7px;\n height: 20px;\n background: #eebe76;\n cursor: pointer;\n border-radius: 5px;\n }\n\n .dialog-slider::-moz-range-thumb {\n width: 7px;\n height: 20px;\n background: #eebe76;\n cursor: pointer;\n border-radius: 5px;\n }\n`\n // 创建一个 <style> 元素\n const styleElement = document.createElement('style')\n styleElement.appendChild(document.createTextNode(css))\n // 将 <style> 元素添加到 <head> 中\n document.head.appendChild(styleElement)\n }\n\n close() {\n // 删除弹窗POI\n if (this.borderMesh) {\n this.borderMesh.remove()\n this.borderMesh.removeFromParent()\n }\n if (this.cuteSprite) {\n this.cuteSprite.remove()\n this.cuteSprite.removeFromParent()\n }\n // 移除事件监听\n this.eventListener.forEach((fn) => {\n fn()\n })\n this.eventListener.clear()\n this.eventList.clear()\n }\n}\n\nclass HeadMap {\n TemperatureColorStops = {\n 1.0: '#f00',\n 0.9: '#e2fa00',\n 0.6: '#33f900',\n 0.3: '#0349df',\n 0.0: '#0f00ff',\n }\n\n eventList: Map<string, Function> = new Map()\n backEle: HTMLElement\n heatMapPlane: Mesh\n canvasList = []\n\n constructor() {\n\n }\n\n // 热力图\n create(distance) {\n const heatmap = heatMap.create({\n container: this.createDom(),\n gradient: this.TemperatureColorStops,\n })\n let len = 1200\n const width = window.innerWidth\n const height = window.innerHeight\n const points = []\n let max = 0\n while (len--) {\n const val = Math.floor(Math.random() * 10)\n max = Math.max(max, val)\n const point = {\n x: Math.floor(Math.random() * width),\n y: Math.floor(Math.random() * height),\n value: val,\n }\n points.push(point)\n }\n heatmap.setData({\n max,\n data: points,\n })\n\n // 灰度图\n const greymap = heatMap.create({\n container: this.createDom(),\n gradient: {\n '0': 'black',\n '1.0': 'white',\n },\n })\n\n greymap.setData({\n max,\n data: points,\n })\n const heatMapMaterial = new ShaderMaterial({\n transparent: true,\n depthTest: false,\n side: DoubleSide,\n vertexShader: `varying vec2 vUv;\n uniform float Zscale;\n uniform sampler2D greyMap;\n void main() {\n vUv = uv;\n vec4 frgColor = texture2D(greyMap, uv);//获取灰度图点位信息\n float height = Zscale * frgColor.a;//通过灰度图的rgb*需要设置的高度计算出热力图每个点位最终在z轴高度\n vec3 transformed = vec3( position.x, position.y, height);//重新组装点坐标\n gl_Position = projectionMatrix * modelViewMatrix * vec4(transformed, 1.0);//渲染点位\n \n }\n `,\n fragmentShader: `varying vec2 vUv;\n uniform sampler2D heatMap;//热力图\n uniform vec3 u_color;//基础颜色\n uniform float u_opacity; // 透明度\n void main() {\n //vec4 alphaColor = texture2D(heatMap, vUv);\n // gl_FragColor = alphaColor;\n gl_FragColor = vec4(u_color, u_opacity) * texture2D(heatMap, vUv);//把热力图颜色和透明度进行渲染\n }`,\n uniforms: {\n heatMap: {\n value: { value: undefined },\n },\n greyMap: {\n value: { value: undefined },\n },\n Zscale: { value: 0 }, // 高度参数\n u_color: {\n value: new Color('rgb(255, 255, 255)'),\n },\n u_opacity: {\n value: 0.8,\n },\n },\n })\n\n const texture = new Texture(heatmap._renderer.canvas)\n texture.needsUpdate = true\n const greyTexture = new Texture(greymap._renderer.canvas)\n greyTexture.needsUpdate = true\n\n heatMapMaterial.uniforms.heatMap.value = texture\n heatMapMaterial.uniforms.greyMap.value = greyTexture\n\n const { camera } = use.useScene()\n // 计算平面的尺寸\n const h = 2 * Math.tan(camera.fov * Math.PI / 360) * distance * 2 * 0.85\n const w = h * camera.aspect\n\n const heatMapGeometry = new PlaneGeometry(w, h, 100, 100) // 3d热力图大小,及分块数量\n const heatMapPlane = new Mesh(heatMapGeometry, heatMapMaterial)\n heatMapPlane.rotation.set(-Math.PI / 2, 0, 0)\n\n this.heatMapPlane = heatMapPlane\n return heatMapPlane\n }\n\n addEventListener(eventName, fn) {\n if (this.eventList.has(eventName))\n this.eventList[eventName] = fn\n else\n this.eventList.set(eventName, fn)\n }\n\n addBack() {\n this.backEle = document.createElement('div')\n this.backEle.className = 'hot-back'\n this.backEle.innerHTML = '返回'\n document.body.appendChild(this.backEle)\n this.backEle.addEventListener('click', () => {\n this.eventList.has('close') && this.eventList.get('close')()\n // this.remove()\n })\n }\n\n createDom() {\n // 创建一个新的 canvas 元素\n const canvas = document.createElement('canvas')\n canvas.style.zIndex = '-1'\n // 设置 canvas 元素的宽度和高度\n canvas.width = window.innerWidth\n canvas.height = window.innerHeight\n document.body.appendChild(canvas)\n this.canvasList.push(canvas)\n return canvas\n }\n\n remove() {\n this.canvasList.forEach((canvas) => {\n canvas.remove()\n })\n this.canvasList.length = 0\n this.backEle && this.backEle.remove()\n this.heatMapPlane.removeFromParent()\n this.heatMapPlane.remove()\n }\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["map","HF","HPU","LLCV","CMP1","CMP2","invertMap","HandlerManage","app","params","click","id","title","
|
|
1
|
+
{"version":3,"names":["map","HF","HPU","LLCV","CMP1","CMP2","invertMap","HandlerManage","app","params","click","id","title","caseInstance","cameraPoi","closeHotmap","name","object","sceneControl","scene","getObjectByName","console","log","dispatchEvent","type","target","inspection","goToInspectionTarget","inspectionObject","stop","contineMove"],"sources":["../../../src/factory/unit/handle.ts"],"sourcesContent":["import { regionMap } from '../regionData'\nimport type Anov3D from '../../sdkEntry'\nimport type { BaseModule } from '../../utils/abstract'\n\nexport const map = {\n HF: 0.04,\n HPU: 0.15,\n LLCV: 0.24,\n CMP1: 0.40,\n CMP2: 0.68,\n}\n\nexport const invertMap = {\n 0.04: 'HF',\n 0.15: 'HPU',\n 0.24: 'LLCV',\n 0.40: 'CMP1',\n 0.68: 'CMP2',\n}\n\nclass HandlerManage implements BaseModule {\n app: Anov3D\n constructor(app: Anov3D) {\n this.app = app\n }\n\n clickPerson(params: any) {\n this.click(params.id)\n }\n\n clickBar(params: any) {\n this.click(params.title)\n }\n\n clickCamera(params: any) {\n this.click(params.id)\n }\n\n clickGasCancel() {\n // @ts-ignore\n this.app.caseInstance.cameraPoi.closeHotmap()\n }\n\n click(name) {\n // 根据名称动态获取Mesh对象\n const object = this.app.sceneControl.scene!.getObjectByName(name)\n\n // 触发事件\n if (object) {\n console.log('Mesh对象已找到!')\n // 手动调用Mesh对象上的点击事件处理函数\n object.dispatchEvent({ type: 'click' })\n }\n else {\n console.log('未找到Mesh对象!')\n }\n }\n\n setInspectTarget(params: { target: string }) {\n const { target } = params\n\n // @ts-ignore\n return this.app.caseInstance.inspection.goToInspectionTarget(map[target])\n }\n\n stopInspect() {\n // @ts-ignore\n this.app.caseInstance.inspection.inspectionObject.stop()\n }\n\n continueInspect() {\n // @ts-ignore\n this.app.caseInstance.inspection.inspectionObject.contineMove()\n }\n}\n\nexport default HandlerManage\n"],"mappings":";;;;;;;AAIA,OAAO,IAAMA,GAAG,GAAG;EACjBC,EAAE,EAAE,IAAI;EACRC,GAAG,EAAE,IAAI;EACTC,IAAI,EAAE,IAAI;EACVC,IAAI,EAAE,IAAI;EACVC,IAAI,EAAE;AACR,CAAC;AAED,OAAO,IAAMC,SAAS,GAAG;EACvB,IAAI,EAAE,IAAI;EACV,IAAI,EAAE,KAAK;EACX,IAAI,EAAE,MAAM;EACZ,IAAI,EAAE,MAAM;EACZ,IAAI,EAAE;AACR,CAAC;AAAA,IAEKC,aAAa;EAEjB,uBAAYC,GAAW,EAAE;IAAA;IAAA;IACvB,IAAI,CAACA,GAAG,GAAGA,GAAG;EAChB;EAAC;IAAA;IAAA,OAED,qBAAYC,MAAW,EAAE;MACvB,IAAI,CAACC,KAAK,CAACD,MAAM,CAACE,EAAE,CAAC;IACvB;EAAC;IAAA;IAAA,OAED,kBAASF,MAAW,EAAE;MACpB,IAAI,CAACC,KAAK,CAACD,MAAM,CAACG,KAAK,CAAC;IAC1B;EAAC;IAAA;IAAA,OAED,qBAAYH,MAAW,EAAE;MACvB,IAAI,CAACC,KAAK,CAACD,MAAM,CAACE,EAAE,CAAC;IACvB;EAAC;IAAA;IAAA,OAED,0BAAiB;MACf;MACA,IAAI,CAACH,GAAG,CAACK,YAAY,CAACC,SAAS,CAACC,WAAW,EAAE;IAC/C;EAAC;IAAA;IAAA,OAED,eAAMC,IAAI,EAAE;MACV;MACA,IAAMC,MAAM,GAAG,IAAI,CAACT,GAAG,CAACU,YAAY,CAACC,KAAK,CAAEC,eAAe,CAACJ,IAAI,CAAC;;MAEjE;MACA,IAAIC,MAAM,EAAE;QACVI,OAAO,CAACC,GAAG,CAAC,YAAY,CAAC;QACzB;QACAL,MAAM,CAACM,aAAa,CAAC;UAAEC,IAAI,EAAE;QAAQ,CAAC,CAAC;MACzC,CAAC,MACI;QACHH,OAAO,CAACC,GAAG,CAAC,YAAY,CAAC;MAC3B;IACF;EAAC;IAAA;IAAA,OAED,0BAAiBb,MAA0B,EAAE;MAC3C,IAAQgB,MAAM,GAAKhB,MAAM,CAAjBgB,MAAM;;MAEd;MACA,OAAO,IAAI,CAACjB,GAAG,CAACK,YAAY,CAACa,UAAU,CAACC,oBAAoB,CAAC3B,GAAG,CAACyB,MAAM,CAAC,CAAC;IAC3E;EAAC;IAAA;IAAA,OAED,uBAAc;MACZ;MACA,IAAI,CAACjB,GAAG,CAACK,YAAY,CAACa,UAAU,CAACE,gBAAgB,CAACC,IAAI,EAAE;IAC1D;EAAC;IAAA;IAAA,OAED,2BAAkB;MAChB;MACA,IAAI,CAACrB,GAAG,CAACK,YAAY,CAACa,UAAU,CAACE,gBAAgB,CAACE,WAAW,EAAE;IACjE;EAAC;EAAA;AAAA;AAGH,eAAevB,aAAa"}
|
package/dist/factory/unit/poi.js
CHANGED
|
@@ -10,6 +10,7 @@ function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return _ty
|
|
|
10
10
|
function _toPrimitive(input, hint) { if (_typeof(input) !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (_typeof(res) !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
|
|
11
11
|
import { Vector3, utils } from '@anov/3d-core';
|
|
12
12
|
import { Css2DPoi, EAnimationType, SpritePoi } from '@anov/3d-ability';
|
|
13
|
+
import { usePath } from "../3d";
|
|
13
14
|
import { regionMap } from "../regionData";
|
|
14
15
|
var PoiManage = /*#__PURE__*/function () {
|
|
15
16
|
function PoiManage(gobal) {
|
|
@@ -111,7 +112,7 @@ var PoiManage = /*#__PURE__*/function () {
|
|
|
111
112
|
var dom = document.createElement('div');
|
|
112
113
|
Object.assign(dom.style, {
|
|
113
114
|
fontSize: '18px',
|
|
114
|
-
backgroundImage:
|
|
115
|
+
backgroundImage: "url(".concat(usePath, "poi2.png)"),
|
|
115
116
|
backgroundSize: '100% 100%',
|
|
116
117
|
backgroundRepeat: 'no-repeat',
|
|
117
118
|
display: 'flex',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["Vector3","utils","Css2DPoi","EAnimationType","SpritePoi","regionMap","PoiManage","gobal","Map","Set","scene","wallManage","wall","interactionManager","storeManagement","get","Object","keys","forEach","key","region","option","scale","animation","type","grow","duration","fadeIn","sprite","getDom","position","copy","fromArray","poi","add","poiMesh","set","id","changeWallState","show","dialogPoi","visible","wallMesh","addEventListener","unClick","event","reset","addDialogPanel","point","poiEventListener","data","dom","document","createElement","assign","style","fontSize","backgroundImage","backgroundSize","backgroundRepeat","display","justifyContent","alignItems","textAlign","color","pointerEvents","cursor","height","width","title","length","padding","fontWeight","innerText","remove","removeFromParent","f","clear","content","print","clone"],"sources":["../../../src/factory/unit/poi.ts"],"sourcesContent":["import type { InteractionManager, Object3D, Scene } from '@anov/3d-core'\nimport { Vector3, utils } from '@anov/3d-core'\nimport { Css2DPoi, EAnimationType, SpritePoi } from '@anov/3d-ability'\nimport type Factory3D from '../3d'\nimport { regionMap } from '../regionData'\nimport type WallManage from './wall'\n\nclass PoiManage {\n private gobal: Factory3D\n private scene: Scene\n private dialogPoi: Object3D\n readonly poiMesh: Map<string, Object3D> = new Map()\n readonly poiEventListener: Set<Function> = new Set()\n private wallManage: WallManage\n private interactionManager\n\n constructor(gobal) {\n this.gobal = gobal\n this.scene = gobal.scene.scene\n this.wallManage = gobal.wall\n this.interactionManager = utils.storeManagement.get<InteractionManager>('interactionManager')\n }\n\n async generatePoi() {\n Object.keys(regionMap).forEach(async (key: string) => {\n const region = regionMap[key]\n const option = {\n scale: [80, 80, 1],\n animation: [{\n type: EAnimationType.grow,\n duration: 1,\n }, {\n type: EAnimationType.fadeIn,\n duration: 0.2,\n }],\n }\n const sprite = new SpritePoi(this.getDom(region), option)\n sprite.position.copy(new Vector3().fromArray(region.poi.position))\n\n this.scene.add(sprite)\n this.poiMesh.set(region.poi.id, sprite)\n\n // 绑定事件\n this.interactionManager.add(sprite)\n const changeWallState = (show) => {\n if (this.dialogPoi?.visible)\n return\n // 光墙\n const wall = this.wallManage.wallMesh.get(region.id)\n wall.visible = show\n }\n\n sprite.addEventListener('mouseover', () => {\n if (!sprite.visible)\n return\n changeWallState(true)\n })\n sprite.addEventListener('mouseout', () => {\n changeWallState(false)\n })\n const unClick = sprite.addEventListener('click', (event) => {\n if (!sprite.visible)\n return\n this.reset()\n\n // 光墙\n const wall = this.wallManage.wallMesh.get(region.id)\n wall.visible = true\n // 隐藏当前POI点\n sprite.visible = false\n this.addDialogPanel(region, event.point)\n }) as Function\n this.poiEventListener.add(unClick)\n })\n }\n\n getDom(data) {\n const dom = document.createElement('div')\n Object.assign(dom.style, {\n fontSize: '18px',\n backgroundImage: 'url(./poi2.png)',\n backgroundSize: '100% 100%',\n backgroundRepeat: 'no-repeat',\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'flex-start',\n textAlign: 'center',\n color: '#fff',\n pointerEvents: 'auto',\n cursor: 'pointer',\n height: '262px',\n width: `${data.title.length * 36}px`,\n padding: '12px 0 0 25px',\n fontWeight: 'bold',\n })\n dom.innerText = data.title\n return dom\n }\n\n remove() {\n // 控制POI点的隐藏、显示\n this.poiMesh.forEach((poi) => {\n this.interactionManager.remove(poi)\n poi.removeFromParent()\n poi.remove()\n })\n // 取消事件监听\n this.poiEventListener.forEach((f) => {\n f()\n })\n // 移除面板\n if (this.dialogPoi)\n this.dialogPoi.removeFromParent()\n this.poiMesh.clear()\n this.poiEventListener.clear()\n }\n\n reset() {\n // 控制POI点的隐藏、显示\n // 控制POI点的隐藏、显示\n this.poiMesh.forEach((poi) => {\n poi.visible = true\n })\n // 移除面板\n if (this.dialogPoi)\n this.dialogPoi.removeFromParent()\n // 控制光墙的隐藏、显示\n this.wallManage?.wallMesh.forEach((wall) => {\n wall.visible = false\n })\n }\n\n private addDialogPanel(data, position) {\n // 添加面板\n this.dialogPoi = new Css2DPoi({ title: data.title, content: data.poi.content }, {\n animation: [{\n type: EAnimationType.grow,\n duration: 1,\n }, {\n type: EAnimationType.fadeIn,\n duration: 0.3,\n }, {\n type: EAnimationType.print,\n duration: 0.02,\n }],\n })\n this.dialogPoi.position.copy(position.clone().add(new Vector3(-30, 30, 0)))\n this.scene.add(this.dialogPoi)\n\n this.interactionManager.add(this.dialogPoi)\n this.dialogPoi.addEventListener('click', () => {\n this.dialogPoi.remove()\n this.dialogPoi.removeFromParent()\n this.dialogPoi = null\n this.reset()\n })\n }\n}\n\nexport default PoiManage"],"mappings":";+CACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAASA,OAAO,EAAEC,KAAK,QAAQ,eAAe;AAC9C,SAASC,QAAQ,EAAEC,cAAc,EAAEC,SAAS,QAAQ,kBAAkB;AAEtE,SAASC,SAAS;AAAuB,IAGnCC,SAAS;EASb,mBAAYC,KAAK,EAAE;IAAA;IAAA;IAAA;IAAA;IAAA,iCALuB,IAAIC,GAAG,EAAE;IAAA,0CACR,IAAIC,GAAG,EAAE;IAAA;IAAA;IAKlD,IAAI,CAACF,KAAK,GAAGA,KAAK;IAClB,IAAI,CAACG,KAAK,GAAGH,KAAK,CAACG,KAAK,CAACA,KAAK;IAC9B,IAAI,CAACC,UAAU,GAAGJ,KAAK,CAACK,IAAI;IAC5B,IAAI,CAACC,kBAAkB,GAAGZ,KAAK,CAACa,eAAe,CAACC,GAAG,CAAqB,oBAAoB,CAAC;EAC/F;EAAC;IAAA;IAAA;MAAA,8EAED;QAAA;QAAA;UAAA;YAAA;cACEC,MAAM,CAACC,IAAI,CAACZ,SAAS,CAAC,CAACa,OAAO;gBAAA,sEAAC,iBAAOC,GAAW;kBAAA;kBAAA;oBAAA;sBAAA;wBACzCC,MAAM,GAAGf,SAAS,CAACc,GAAG,CAAC;wBACvBE,MAAM,GAAG;0BACbC,KAAK,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;0BAClBC,SAAS,EAAE,CAAC;4BACVC,IAAI,EAAErB,cAAc,CAACsB,IAAI;4BACzBC,QAAQ,EAAE;0BACZ,CAAC,EAAE;4BACDF,IAAI,EAAErB,cAAc,CAACwB,MAAM;4BAC3BD,QAAQ,EAAE;0BACZ,CAAC;wBACH,CAAC;wBACKE,MAAM,GAAG,IAAIxB,SAAS,CAAC,KAAI,CAACyB,MAAM,CAACT,MAAM,CAAC,EAAEC,MAAM,CAAC;wBACzDO,MAAM,CAACE,QAAQ,CAACC,IAAI,CAAC,IAAI/B,OAAO,EAAE,CAACgC,SAAS,CAACZ,MAAM,CAACa,GAAG,CAACH,QAAQ,CAAC,CAAC;wBAElE,KAAI,CAACpB,KAAK,CAACwB,GAAG,CAACN,MAAM,CAAC;wBACtB,KAAI,CAACO,OAAO,CAACC,GAAG,CAAChB,MAAM,CAACa,GAAG,CAACI,EAAE,EAAET,MAAM,CAAC;;wBAEvC;wBACA,KAAI,CAACf,kBAAkB,CAACqB,GAAG,CAACN,MAAM,CAAC;wBAC7BU,eAAe,GAAG,SAAlBA,eAAe,CAAIC,IAAI,EAAK;0BAAA;0BAChC,uBAAI,KAAI,CAACC,SAAS,4CAAd,gBAAgBC,OAAO,EACzB;0BACF;0BACA,IAAM7B,IAAI,GAAG,KAAI,CAACD,UAAU,CAAC+B,QAAQ,CAAC3B,GAAG,CAACK,MAAM,CAACiB,EAAE,CAAC;0BACpDzB,IAAI,CAAC6B,OAAO,GAAGF,IAAI;wBACrB,CAAC;wBAEDX,MAAM,CAACe,gBAAgB,CAAC,WAAW,EAAE,YAAM;0BACzC,IAAI,CAACf,MAAM,CAACa,OAAO,EACjB;0BACFH,eAAe,CAAC,IAAI,CAAC;wBACvB,CAAC,CAAC;wBACFV,MAAM,CAACe,gBAAgB,CAAC,UAAU,EAAE,YAAM;0BACxCL,eAAe,CAAC,KAAK,CAAC;wBACxB,CAAC,CAAC;wBACIM,OAAO,GAAGhB,MAAM,CAACe,gBAAgB,CAAC,OAAO,EAAE,UAACE,KAAK,EAAK;0BAC1D,IAAI,CAACjB,MAAM,CAACa,OAAO,EACjB;0BACF,KAAI,CAACK,KAAK,EAAE;;0BAEZ;0BACA,IAAMlC,IAAI,GAAG,KAAI,CAACD,UAAU,CAAC+B,QAAQ,CAAC3B,GAAG,CAACK,MAAM,CAACiB,EAAE,CAAC;0BACpDzB,IAAI,CAAC6B,OAAO,GAAG,IAAI;0BACnB;0BACAb,MAAM,CAACa,OAAO,GAAG,KAAK;0BACtB,KAAI,CAACM,cAAc,CAAC3B,MAAM,EAAEyB,KAAK,CAACG,KAAK,CAAC;wBAC1C,CAAC,CAAC;wBACF,KAAI,CAACC,gBAAgB,CAACf,GAAG,CAACU,OAAO,CAAC;sBAAA;sBAAA;wBAAA;oBAAA;kBAAA;gBAAA,CACnC;gBAAA;kBAAA;gBAAA;cAAA,IAAC;YAAA;YAAA;cAAA;UAAA;QAAA;MAAA,CACH;MAAA;QAAA;MAAA;MAAA;IAAA;EAAA;IAAA;IAAA,OAED,gBAAOM,IAAI,EAAE;MACX,IAAMC,GAAG,GAAGC,QAAQ,CAACC,aAAa,CAAC,KAAK,CAAC;MACzCrC,MAAM,CAACsC,MAAM,CAACH,GAAG,CAACI,KAAK,EAAE;QACvBC,QAAQ,EAAE,MAAM;QAChBC,eAAe,EAAE,iBAAiB;QAClCC,cAAc,EAAE,WAAW;QAC3BC,gBAAgB,EAAE,WAAW;QAC7BC,OAAO,EAAE,MAAM;QACfC,cAAc,EAAE,QAAQ;QACxBC,UAAU,EAAE,YAAY;QACxBC,SAAS,EAAE,QAAQ;QACnBC,KAAK,EAAE,MAAM;QACbC,aAAa,EAAE,MAAM;QACrBC,MAAM,EAAE,SAAS;QACjBC,MAAM,EAAE,OAAO;QACfC,KAAK,YAAKlB,IAAI,CAACmB,KAAK,CAACC,MAAM,GAAG,EAAE,OAAI;QACpCC,OAAO,EAAE,eAAe;QACxBC,UAAU,EAAE;MACd,CAAC,CAAC;MACFrB,GAAG,CAACsB,SAAS,GAAGvB,IAAI,CAACmB,KAAK;MAC1B,OAAOlB,GAAG;IACZ;EAAC;IAAA;IAAA,OAED,kBAAS;MAAA;MACP;MACA,IAAI,CAAChB,OAAO,CAACjB,OAAO,CAAC,UAACe,GAAG,EAAK;QAC5B,MAAI,CAACpB,kBAAkB,CAAC6D,MAAM,CAACzC,GAAG,CAAC;QACnCA,GAAG,CAAC0C,gBAAgB,EAAE;QACtB1C,GAAG,CAACyC,MAAM,EAAE;MACd,CAAC,CAAC;MACF;MACA,IAAI,CAACzB,gBAAgB,CAAC/B,OAAO,CAAC,UAAC0D,CAAC,EAAK;QACnCA,CAAC,EAAE;MACL,CAAC,CAAC;MACF;MACA,IAAI,IAAI,CAACpC,SAAS,EAChB,IAAI,CAACA,SAAS,CAACmC,gBAAgB,EAAE;MACnC,IAAI,CAACxC,OAAO,CAAC0C,KAAK,EAAE;MACpB,IAAI,CAAC5B,gBAAgB,CAAC4B,KAAK,EAAE;IAC/B;EAAC;IAAA;IAAA,OAED,iBAAQ;MAAA;MACN;MACA;MACA,IAAI,CAAC1C,OAAO,CAACjB,OAAO,CAAC,UAACe,GAAG,EAAK;QAC5BA,GAAG,CAACQ,OAAO,GAAG,IAAI;MACpB,CAAC,CAAC;MACF;MACA,IAAI,IAAI,CAACD,SAAS,EAChB,IAAI,CAACA,SAAS,CAACmC,gBAAgB,EAAE;MACnC;MACA,wBAAI,CAAChE,UAAU,qDAAf,iBAAiB+B,QAAQ,CAACxB,OAAO,CAAC,UAACN,IAAI,EAAK;QAC1CA,IAAI,CAAC6B,OAAO,GAAG,KAAK;MACtB,CAAC,CAAC;IACJ;EAAC;IAAA;IAAA,OAED,wBAAuBS,IAAI,EAAEpB,QAAQ,EAAE;MAAA;MACrC;MACA,IAAI,CAACU,SAAS,GAAG,IAAItC,QAAQ,CAAC;QAAEmE,KAAK,EAAEnB,IAAI,CAACmB,KAAK;QAAES,OAAO,EAAE5B,IAAI,CAACjB,GAAG,CAAC6C;MAAQ,CAAC,EAAE;QAC9EvD,SAAS,EAAE,CAAC;UACVC,IAAI,EAAErB,cAAc,CAACsB,IAAI;UACzBC,QAAQ,EAAE;QACZ,CAAC,EAAE;UACDF,IAAI,EAAErB,cAAc,CAACwB,MAAM;UAC3BD,QAAQ,EAAE;QACZ,CAAC,EAAE;UACDF,IAAI,EAAErB,cAAc,CAAC4E,KAAK;UAC1BrD,QAAQ,EAAE;QACZ,CAAC;MACH,CAAC,CAAC;MACF,IAAI,CAACc,SAAS,CAACV,QAAQ,CAACC,IAAI,CAACD,QAAQ,CAACkD,KAAK,EAAE,CAAC9C,GAAG,CAAC,IAAIlC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;MAC3E,IAAI,CAACU,KAAK,CAACwB,GAAG,CAAC,IAAI,CAACM,SAAS,CAAC;MAE9B,IAAI,CAAC3B,kBAAkB,CAACqB,GAAG,CAAC,IAAI,CAACM,SAAS,CAAC;MAC3C,IAAI,CAACA,SAAS,CAACG,gBAAgB,CAAC,OAAO,EAAE,YAAM;QAC7C,MAAI,CAACH,SAAS,CAACkC,MAAM,EAAE;QACvB,MAAI,CAAClC,SAAS,CAACmC,gBAAgB,EAAE;QACjC,MAAI,CAACnC,SAAS,GAAG,IAAI;QACrB,MAAI,CAACM,KAAK,EAAE;MACd,CAAC,CAAC;IACJ;EAAC;EAAA;AAAA;AAGH,eAAexC,SAAS"}
|
|
1
|
+
{"version":3,"names":["Vector3","utils","Css2DPoi","EAnimationType","SpritePoi","usePath","regionMap","PoiManage","gobal","Map","Set","scene","wallManage","wall","interactionManager","storeManagement","get","Object","keys","forEach","key","region","option","scale","animation","type","grow","duration","fadeIn","sprite","getDom","position","copy","fromArray","poi","add","poiMesh","set","id","changeWallState","show","dialogPoi","visible","wallMesh","addEventListener","unClick","event","reset","addDialogPanel","point","poiEventListener","data","dom","document","createElement","assign","style","fontSize","backgroundImage","backgroundSize","backgroundRepeat","display","justifyContent","alignItems","textAlign","color","pointerEvents","cursor","height","width","title","length","padding","fontWeight","innerText","remove","removeFromParent","f","clear","content","print","clone"],"sources":["../../../src/factory/unit/poi.ts"],"sourcesContent":["import type { InteractionManager, Object3D, Scene } from '@anov/3d-core'\nimport { Vector3, utils } from '@anov/3d-core'\nimport { Css2DPoi, EAnimationType, SpritePoi } from '@anov/3d-ability'\nimport type Factory3D from '../3d'\nimport { usePath } from '../3d'\nimport { regionMap } from '../regionData'\nimport type WallManage from './wall'\n\nclass PoiManage {\n private gobal: Factory3D\n private scene: Scene\n private dialogPoi: Object3D\n readonly poiMesh: Map<string, Object3D> = new Map()\n readonly poiEventListener: Set<Function> = new Set()\n private wallManage: WallManage\n private interactionManager\n\n constructor(gobal) {\n this.gobal = gobal\n this.scene = gobal.scene.scene\n this.wallManage = gobal.wall\n this.interactionManager = utils.storeManagement.get<InteractionManager>('interactionManager')\n }\n\n async generatePoi() {\n Object.keys(regionMap).forEach(async (key: string) => {\n const region = regionMap[key]\n const option = {\n scale: [80, 80, 1],\n animation: [{\n type: EAnimationType.grow,\n duration: 1,\n }, {\n type: EAnimationType.fadeIn,\n duration: 0.2,\n }],\n }\n const sprite = new SpritePoi(this.getDom(region), option)\n sprite.position.copy(new Vector3().fromArray(region.poi.position))\n\n this.scene.add(sprite)\n this.poiMesh.set(region.poi.id, sprite)\n\n // 绑定事件\n this.interactionManager.add(sprite)\n const changeWallState = (show) => {\n if (this.dialogPoi?.visible)\n return\n // 光墙\n const wall = this.wallManage.wallMesh.get(region.id)\n wall.visible = show\n }\n\n sprite.addEventListener('mouseover', () => {\n if (!sprite.visible)\n return\n changeWallState(true)\n })\n sprite.addEventListener('mouseout', () => {\n changeWallState(false)\n })\n const unClick = sprite.addEventListener('click', (event) => {\n if (!sprite.visible)\n return\n this.reset()\n\n // 光墙\n const wall = this.wallManage.wallMesh.get(region.id)\n wall.visible = true\n // 隐藏当前POI点\n sprite.visible = false\n this.addDialogPanel(region, event.point)\n }) as Function\n this.poiEventListener.add(unClick)\n })\n }\n\n getDom(data) {\n const dom = document.createElement('div')\n Object.assign(dom.style, {\n fontSize: '18px',\n backgroundImage: `url(${usePath}poi2.png)`,\n backgroundSize: '100% 100%',\n backgroundRepeat: 'no-repeat',\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'flex-start',\n textAlign: 'center',\n color: '#fff',\n pointerEvents: 'auto',\n cursor: 'pointer',\n height: '262px',\n width: `${data.title.length * 36}px`,\n padding: '12px 0 0 25px',\n fontWeight: 'bold',\n })\n dom.innerText = data.title\n return dom\n }\n\n remove() {\n // 控制POI点的隐藏、显示\n this.poiMesh.forEach((poi) => {\n this.interactionManager.remove(poi)\n poi.removeFromParent()\n poi.remove()\n })\n // 取消事件监听\n this.poiEventListener.forEach((f) => {\n f()\n })\n // 移除面板\n if (this.dialogPoi)\n this.dialogPoi.removeFromParent()\n this.poiMesh.clear()\n this.poiEventListener.clear()\n }\n\n reset() {\n // 控制POI点的隐藏、显示\n // 控制POI点的隐藏、显示\n this.poiMesh.forEach((poi) => {\n poi.visible = true\n })\n // 移除面板\n if (this.dialogPoi)\n this.dialogPoi.removeFromParent()\n // 控制光墙的隐藏、显示\n this.wallManage?.wallMesh.forEach((wall) => {\n wall.visible = false\n })\n }\n\n private addDialogPanel(data, position) {\n // 添加面板\n this.dialogPoi = new Css2DPoi({ title: data.title, content: data.poi.content }, {\n animation: [{\n type: EAnimationType.grow,\n duration: 1,\n }, {\n type: EAnimationType.fadeIn,\n duration: 0.3,\n }, {\n type: EAnimationType.print,\n duration: 0.02,\n }],\n })\n this.dialogPoi.position.copy(position.clone().add(new Vector3(-30, 30, 0)))\n this.scene.add(this.dialogPoi)\n\n this.interactionManager.add(this.dialogPoi)\n this.dialogPoi.addEventListener('click', () => {\n this.dialogPoi.remove()\n this.dialogPoi.removeFromParent()\n this.dialogPoi = null\n this.reset()\n })\n }\n}\n\nexport default PoiManage"],"mappings":"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"}
|