@aibee/crc-bmap 0.0.19 → 0.0.20

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../src/bmap.ts", "../src/utils/timer.ts", "../src/utils/init-helper.ts", "../src/utils/dispose.ts", "../src/utils/rules.ts", "../src/utils/texture.ts", "../src/utils/coordinate.ts", "../src/utils/proxy.ts", "../src/utils/promise.ts", "../src/utils/svg.ts", "../src/context.ts", "../src/operations/selection/selection.ts", "../src/elements/graphic.ts", "../src/elements/shadow.ts", "../src/elements/poi.ts", "../src/elements/overlay.ts", "../src/elements/floor.ts", "../src/layer/graphic-layer.ts", "../src/layer/layer.ts", "../src/layer/poi-layer.ts", "../src/elements/heatmap.ts", "../src/elements/base-svg.ts", "../src/elements/svg-line.ts", "../src/elements/svg-polygon.ts", "../src/operations/selection/box-selection.ts", "../src/operations/hover/hover-helper.ts", "../src/config.ts"],
4
- "sourcesContent": ["import { EventDispatcher, Object3D } from \"three\";\nimport { Context } from \"./context\";\nimport { clearTextTexture, clearCanvas, vector3ToDevice, getCenter } from \"./utils\";\nimport { Config, getConfig } from './config'\nimport {Floor, Graphic, HeatmapDataParam, PoiOptionsParam} from \"./elements\";\nimport { SvgLine, SvgPolygon } from \"./elements\";\nimport { GraphicInfo, GraphicOptions, PolygonGeometry, ResGraphicInfo } from \"./types\";\n\nexport interface LoadQuery {\n brand: string;\n project: string;\n phase: string;\n building: string;\n floor: string;\n ts: string;\n resource_type_list: string;\n}\n\nexport class BMap extends EventDispatcher {\n config: Config;\n\n public context: Context;\n\n private polarKeys: string[] = [];\n\n private azimuthalKeys: string[] = [];\n\n private svgLine?: SvgLine;\n\n private svgPolygon?: SvgPolygon;\n\n public basicZoom = 1;\n\n floorDataMap: Map<string, GraphicInfo[]> = new Map()\n\n buildingGroundMap = new Map<string, GraphicInfo | null>()\n\n currentBuildGround: GraphicInfo | null = null\n\n constructor(private container: HTMLElement, config: Partial<Config> = {}) {\n super();\n this.config = getConfig(config)\n this.context = new Context(container, this.config);\n this.registryEvent();\n this.context.render();\n }\n\n private async loadGraphics({ brand, project, phase, building, floor, ts, resource_type_list }: LoadQuery): Promise<GraphicInfo[]> {\n const { apiDomain, apiPath: { floorGraphic }, apiInfo } = this.config\n const url = `${apiDomain}${floorGraphic}?brand=${brand}&project=${project}&phase=${phase}&building=${building}&floor=${floor}&ts=${ts}&resource_type_list=${resource_type_list}`\n const data = await fetch(url, apiInfo)\n .then((res) => res.json())\n .then(res => res.data)\n .then((res: ResGraphicInfo[]): GraphicInfo[] => {\n (res || []).map(item => item.info = (JSON.parse(item.info)))\n return (res || []) as unknown as GraphicInfo[]\n })\n return data\n }\n\n getBuildingKey({ brand, project, phase, building }: Omit<LoadQuery, \"floor\" | \"ts\" | \"resource_type_list\">) {\n const key = `${brand}-${project}-${phase}-${building}`\n return key\n }\n\n private async loadBuildingGround({ brand, project, phase, building }: Omit<LoadQuery, \"floor\" | \"ts\" | \"resource_type_list\">): Promise<GraphicInfo | null>{ \n const key = this.getBuildingKey({ brand, project, phase, building })\n if (this.buildingGroundMap.get(key)) { \n return this.buildingGroundMap.get(key) || null\n }\n const { apiDomain, apiPath: { floorRange }, apiInfo } = this.config\n const url = `${apiDomain}${floorRange}?brand=${brand}&project=${project}&phase=${phase}&building=${building}`\n const data = await fetch(url, apiInfo)\n .then((res) => res.json())\n .then(res => res.data)\n .then((res: ResGraphicInfo[]): GraphicInfo | null => {\n const data = (res || [])[0]\n if (data) {\n data.info = JSON.parse(data.info)\n }\n return data as unknown as GraphicInfo | null\n })\n this.buildingGroundMap.set(key, data)\n return data\n }\n \n getFloorKey({ brand, project, phase, building, floor, ts, resource_type_list }: LoadQuery) { \n const floorKey = `${brand}-${project}-${phase}-${building}-${floor}-${ts}-${resource_type_list}`\n return floorKey\n }\n\n async load({ brand, project, phase, building, floor, ts, resource_type_list }: LoadQuery) {\n const floorKey = this.getFloorKey({ brand, project, phase, building, floor, ts, resource_type_list })\n if (this.floorDataMap.get(floorKey)) { return }\n const [data, buildGround] = await Promise.all([\n this.loadGraphics({ brand, project, phase, building, floor, ts, resource_type_list }),\n this.loadBuildingGround({ brand, project, phase, building })\n ])\n if (buildGround) {\n const center = getCenter((buildGround.info.geometry as PolygonGeometry).cds[0])\n data.forEach(item => {\n if (item.info.geometry.type === \"polygon\") { \n item.info.geometry.cds.map(cds => {\n if (Array.isArray(cds)) {\n cds.forEach(coord => {\n coord[0] -= center[0]\n coord[1] -= center[1]\n })\n }\n })\n } else {\n // point\n const [x, y] = item.info.geometry.cds\n item.info.geometry.cds = [x - center[0], y - center[1]]\n }\n })\n }\n if (!this.config.useFloorCache) {\n this.floorDataMap.clear()\n }\n this.floorDataMap.set(floorKey, data)\n return data\n }\n\n private createFloor(data: GraphicInfo[]) { \n const curFloor = new Floor(this.context)\n if (!data.length) { return {curFloor, graphics: []} }\n // \u627E\u51FA\u5730\u9762\u56FE\u5143\n const grounds = data.filter(item => item.info.group === \"ground\")\n const groundGraphics = grounds.map(ground => new Graphic(this.context, ground.info))\n curFloor.addGrounds(groundGraphics)\n const graphicData = data.filter(item => item.info.group !== \"ground\")\n const legacyToGraphicMap = new Map<string, Graphic>()\n const graphics = graphicData.map(item => { \n const graphic = curFloor.addGraphic(item.info)\n graphic.userData.data = item\n legacyToGraphicMap.set(item.legacy_id, graphic)\n return graphic\n })\n curFloor.addShadow()\n curFloor.userData.legacyToGraphicMap = legacyToGraphicMap\n return { curFloor, graphics }\n }\n\n async switchFloor({ brand, project, phase, building, floor, ts, resource_type_list }: LoadQuery) {\n const floorKey = this.getFloorKey({ brand, project, phase, building, floor, ts, resource_type_list })\n const curFloorData = this.floorDataMap.get(floorKey)\n if (curFloorData) {\n const buildingKey = this.getBuildingKey({ brand, project, phase, building })\n this.currentBuildGround = this.buildingGroundMap.get(buildingKey) || null\n const createdFloor = this.createFloor(curFloorData)\n if (createdFloor) {\n this.context.switchFloor(createdFloor.curFloor)\n // \u8BBE\u7F6Ezoom\n this.context.control.minZoom = 0;\n this.context.control.maxZoom = Infinity;\n await this.context.fitCameraToGround(undefined, 0);\n this.basicZoom = this.context.camera.zoom;\n // \u8BBE\u7F6Ezoom\n this.context.control.minZoom = this.basicZoom;\n this.context.control.maxZoom = this.basicZoom * 25;\n } else {\n console.warn(\"[switchFloor error] [\"+ floor +\"] \u697C\u5C42\u6CA1\u6709\u6570\u636E\")\n }\n } else {\n console.warn(\"[switchFloor error] \u6CA1\u6709\u8FD9\u4E2A\u697C\u5C42\uFF0C\u8BF7\u5148\u8C03\u7528load\u65B9\u6CD5\u52A0\u8F7D\u697C\u5C42\")\n }\n }\n\n addHeatmap(data: HeatmapDataParam) {\n return this.context.currentFloor?.addHeatmap(data)\n }\n\n getLegacyToGraphicMap() {\n return this.context.currentFloor?.userData.legacyToGraphicMap || new Map()\n }\n\n /**\n * \u83B7\u53D6\u5F53\u524D\u697C\u5C42\u5168\u90E8\u7684graphic\n * @returns \n */\n getFloorAllGraphics(): Graphic[] {\n return this.context.currentFloor?.graphicLayer.children.filter(item => item instanceof Graphic) as Graphic[] || []\n }\n\n createGraphicPoi(graphic: Graphic, options: PoiOptionsParam) { \n if (this.context.currentFloor) {\n const poi = this.context.currentFloor.addPoi(options)\n // \u8BA9poi\u663E\u793A\u5728\u56FE\u5143\u7684\u4E0A\u9762\n const position = graphic.getCenter()\n position.z += graphic.options.height / 2\n poi.position.copy(position)\n poi.position.z = poi.position.z + graphic.options.height / 2\n return poi\n }\n return null\n }\n\n removeHeatMap() {\n this.context.currentFloor?.removeHeatMap()\n }\n\n /**\n * \u79FB\u52A8\u76F8\u673A\u4F4D\u7F6E\u8BA9\u9009\u4E2D\u7684\u5143\u7D20\u5C45\u4E2D\u663E\u793A\n * @param ele { Graphic | Poi }\n * @param duration\n */\n translateElementToCenter(ele: Object3D, duration: number = 500) {\n const position = ele.position\n .clone()\n .setFromMatrixPosition(ele.matrixWorld);\n return this.context.setCameraPosition(position, duration);\n }\n\n /**\n * \u83B7\u53D6\u7269\u4F53\u7684\u5C4F\u5E55\u5750\u6807\n */\n getElementDeviceCoordinate(ele: Object3D) {\n const vector = ele.position.clone();\n const { clientWidth, clientHeight } = this.container;\n return vector3ToDevice(\n vector,\n this.context.camera,\n clientWidth,\n clientHeight\n );\n }\n\n /**\n * \u5207\u63622d\u30013d\u89C6\u89D2\n * @param type\n * @param duration\n */\n changeMapType(type: \"2d\" | \"3d\", duration = 500) {\n if (type === \"2d\") {\n this.context.setPolarAngle(0);\n } else {\n this.context.setPolarAngle(1.2);\n }\n }\n\n /**\n * \u7F29\u5C0F\u5730\u56FE\n * @param zoom\n * @param duration\n * @returns\n */\n reduceMap(zoom = 0.5, duration = 500) {\n const cameraZoom = this.context.camera.zoom;\n return this.context.setZoom(\n cameraZoom - zoom,\n this.context.control.target,\n duration\n );\n }\n\n /**\n * \u653E\u5927\u5730\u56FE\n * @param zoom\n * @param duration\n * @returns\n */\n enlargeMap(zoom = 0.5, duration = 500) {\n const cameraZoom = this.context.camera.zoom;\n return this.context.setZoom(\n cameraZoom + zoom,\n this.context.control.target,\n duration\n );\n }\n\n onKeydown = (e: KeyboardEvent) => {\n if (this.polarKeys.includes(e.code)) {\n this.context.control.maxPolarAngle = this.config.control.maxPolar;\n this.context.control.minPolarAngle = 0;\n }\n if (this.azimuthalKeys.includes(e.code)) {\n this.context.control.maxAzimuthAngle = Infinity;\n this.context.control.minAzimuthAngle = Infinity;\n }\n };\n\n onKeyUp = (e: KeyboardEvent) => {\n if (this.polarKeys.includes(e.code)) {\n const polar = this.context.control.getPolarAngle();\n this.context.control.maxPolarAngle = polar;\n this.context.control.minPolarAngle = polar;\n }\n if (this.azimuthalKeys.includes(e.code)) {\n const azimuthal = this.context.control.getAzimuthalAngle();\n this.context.control.maxAzimuthAngle = azimuthal;\n this.context.control.minAzimuthAngle = azimuthal;\n }\n };\n\n registryEvent() {\n window.addEventListener(\"keydown\", this.onKeydown);\n window.addEventListener(\"keyup\", this.onKeyUp);\n }\n\n unRegistryEvent() {\n window.removeEventListener(\"keydown\", this.onKeydown);\n window.removeEventListener(\"keyup\", this.onKeyUp);\n }\n\n /**\n * \u914D\u7F6E\u5750\u6807\u5B9A\u70B9 2D/3D\u7EBF\u6027\u5207\u6362\u7684\u5FEB\u6377\u952E\n * @param key\n */\n configurePolarShortcutKeys(keys: string[]) {\n this.polarKeys = keys;\n }\n\n configureAzimuthalShortcutKeys(keys: string[]) {\n this.azimuthalKeys = keys;\n }\n\n rotateMap(radius = 0.1) {\n const azimuthal = this.context.control.getAzimuthalAngle();\n this.context.control.maxAzimuthAngle = azimuthal + radius;\n this.context.control.minAzimuthAngle = azimuthal + radius;\n this.context.control.update()\n }\n\n /**\n * \u6D4B\u91CF\u8DDD\u79BB\n * @returns \n */\n async measureDistance() { \n this.cancelDistance()\n return new Promise((resolve, reject) => { \n this.changeMapType('2d', 0)\n this.context.control.enableRotate = false; // \u6D4B\u91CF\u53EA\u80FD\u57282d\u4E2D\u8FDB\u884C\n this.svgLine = new SvgLine(this.context)\n const dispose = this.svgLine.dispose.bind(this.svgLine)\n this.svgLine.dispose = function () {\n dispose();\n reject(\"cancel\")\n }\n this.svgLine.addEventListener(\"distance\", ({ distance }) => {\n resolve(distance)\n })\n }) \n }\n\n /**\n * \u53D6\u6D88\u6D4B\u91CF\u957F\u5EA6\n */\n cancelDistance() {\n if (this.svgLine) {\n this.svgLine.dispose()\n this.svgLine = undefined;\n this.context.control.enableRotate = true;\n }\n }\n\n /**\n * \u6D4B\u91CF\u9762\u79EF\n */\n measureArea() { \n this.cancelArea()\n return new Promise((resolve, reject) => {\n this.changeMapType('2d', 0)\n this.context.control.enableRotate = false; // \u6D4B\u91CF\u53EA\u80FD\u57282d\u4E2D\u8FDB\u884C\n this.svgPolygon = new SvgPolygon(this.context)\n const dispose = this.svgPolygon.dispose.bind(this.svgPolygon)\n this.svgPolygon.dispose = function () {\n dispose();\n reject(\"cancel\")\n }\n this.svgPolygon.addEventListener(\"area\", ({ area }) => {\n resolve(area)\n })\n })\n }\n\n /**\n * \u53D6\u6D88\u6D4B\u91CF\u9762\u79EF\n */\n cancelArea() {\n if (this.svgPolygon) {\n this.svgPolygon.dispose()\n this.svgPolygon = undefined\n this.context.control.enableRotate = true;\n }\n }\n\n /**\n * \u6839\u636EnodeId \u83B7\u53D6graphic\n */\n getGraphicByNodeId(nodeId: string) {\n if (this.context.currentFloor) {\n return this.context.currentFloor.graphicLayer.graphicMap.get(nodeId) || null\n }\n return null\n }\n\n deleteGraphic(graphic: Graphic) {\n if (this.context.currentFloor) {\n this.context.currentFloor.graphicLayer.remove(graphic)\n graphic.dispose()\n this.context.currentFloor.graphicLayer.graphicMap.delete(graphic.options.id)\n }\n }\n\n createGraphicByOptions(options: GraphicOptions) {\n if (this.currentBuildGround) {\n const center = getCenter((this.currentBuildGround.info.geometry as PolygonGeometry).cds[0])\n if (options.geometry.type === \"polygon\") {\n options.geometry.cds.map(cds => {\n if (Array.isArray(cds)) {\n cds.forEach(coord => {\n coord[0] -= center[0]\n coord[1] -= center[1]\n })\n }\n })\n } else {\n // point\n const [x, y] = options.geometry.cds\n options.geometry.cds = [x - center[0], y - center[1]]\n }\n }\n return this.context.currentFloor?.graphicLayer.createGraphic(options)\n }\n\n dispose() {\n this.context.dispose();\n clearTextTexture();\n clearCanvas();\n this.unRegistryEvent();\n }\n}\n", "type Fn = (...arg: any) => any\n\n/**\n * \u4EFB\u52A1\u7BA1\u7406\u5668\n * \u5728\u7C7B\u9500\u6BC1\u7684\u65F6\u5019\uFF0C\u8981\u6E05\u9664\u6240\u6709\u7684\u5F02\u6B65\u5B9A\u65F6\u5668\n */\nexport class Timer { \n tasks = {\n requestAnimation: new Set<number>(),\n timeout: new Set<number>(),\n interval: new Set<number>()\n }\n\n requestAnimationFrame(fn: Fn): number { \n const timer = window.requestAnimationFrame(() => {\n this.tasks.requestAnimation.delete(timer)\n fn()\n })\n this.tasks.requestAnimation.add(timer)\n return timer\n }\n\n cancelAnimationFrame(timer: number) { \n this.tasks.requestAnimation.delete(timer)\n window.cancelAnimationFrame(timer)\n }\n\n setTimeout(fn: Fn, wait: number): number { \n const timer = window.setTimeout(() => {\n this.tasks.timeout.delete(timer)\n fn()\n }, wait)\n this.tasks.timeout.add(timer)\n return timer\n }\n\n clearTimeout(timer: number) {\n this.tasks.timeout.delete(timer)\n window.clearTimeout(timer)\n }\n\n setInterval(fn: Fn, wait: number): number { \n const timer = window.setInterval(() => {\n this.tasks.interval.delete(timer)\n fn()\n }, wait)\n this.tasks.interval.add(timer)\n return timer\n }\n\n clearInterval(timer: number) {\n this.tasks.interval.delete(timer)\n window.clearInterval(timer)\n }\n\n dispose() { \n this.tasks.requestAnimation.forEach(timer => {\n window.cancelAnimationFrame(timer)\n })\n this.tasks.requestAnimation.clear()\n this.tasks.timeout.forEach(timer => {\n window.clearTimeout(timer)\n })\n this.tasks.timeout.clear()\n this.tasks.interval.forEach(timer => {\n window.clearInterval(timer)\n }) \n this.tasks.interval.clear()\n }\n}", "import { Coordinate } from 'src/types'\nimport {\n Scene, WebGLRenderer, OrthographicCamera, HemisphereLight, Shape, \n PCFSoftShadowMap, Group, Color, DirectionalLight, AmbientLight, Path, Vector2\n} from 'three'\nimport { MapControls } from 'three/examples/jsm/controls/MapControls'\n\nexport function initScene() {\n const scene = new Scene()\n scene.background = new Color(0xffffff)\n return scene\n}\n\nexport function initRenderer() {\n const renderer = new WebGLRenderer({antialias: true})\n renderer.setClearColor(0xffffff);\n renderer.setPixelRatio(window.devicePixelRatio);\n renderer.shadowMap.enabled = true;\n renderer.shadowMap.autoUpdate = true;\n renderer.shadowMap.type = PCFSoftShadowMap;\n return renderer\n}\n\nexport function initCamera(width: number, height: number): OrthographicCamera {\n const camera = new OrthographicCamera(-width / 2, width / 2, height / 2, -height / 2, -1000, 5000)\n camera.up.set(0, 0, 1);\n camera.position.set(0, 0, 100);\n camera.lookAt(0, 0, 0);\n return camera\n}\n\nexport function initLight() {\n const lights = new Group()\n // \u534A\u7403\u5149\n const hemisphereLight = new HemisphereLight(0xffffff, 0xeeeeee, 1);\n hemisphereLight.intensity = 1;\n hemisphereLight.position.set(0, 0, 10);\n hemisphereLight.up.set(0, 0, 1);\n lights.add(hemisphereLight)\n const ambientLight = new AmbientLight( 0xffffff );\n lights.add(ambientLight)\n return lights\n}\n\nexport function initControl(camera: OrthographicCamera, domElement: HTMLCanvasElement) {\n const control = new MapControls(camera, domElement)\n // \u7981\u7528\u963B\u5C3C\n control.enableDamping = false\n // \u8BBE\u7F6E2.5D\n control.maxPolarAngle = 0\n control.minPolarAngle = 0\n // \u7981\u7528\u6C34\u5E73\u65CB\u8F6C\n control.maxAzimuthAngle = 0\n control.minAzimuthAngle = 0\n return control\n}\n\nexport function initShape(path: Coordinate[], holePath: Coordinate[][] = []) { \n const shape = new Shape(path.map(item => new Vector2(...item)));\n if (holePath.length) {\n holePath.forEach(cur => {\n var hole = new Path(cur.map(item => new Vector2(...item)));\n shape.holes.push(hole);\n })\n }\n return shape\n}\n\nexport function initDirectionalLight(color = 0xffffff, intensity = 1) {\n const directionalLight = new DirectionalLight(color, intensity);\n directionalLight.castShadow = true;\n directionalLight.shadow.radius = 8;\n directionalLight.shadow.bias = -0.001;\n directionalLight.shadow.mapSize.set(256, 256);\n directionalLight.shadow.camera.left = -200;\n directionalLight.shadow.camera.right = 200;\n directionalLight.shadow.camera.top = 200;\n directionalLight.shadow.camera.bottom = -200;\n return directionalLight\n}", "import { Object3D, Mesh, Light } from 'three'\n\nexport function dispose(o: Object3D, recursive?: boolean): void {\n if (recursive && o.children && o.children.length) {\n o.children.forEach((child) => {\n dispose(child, recursive);\n });\n }\n if ((o as Mesh).isMesh) {\n const m = o as Mesh;\n if (m.geometry) m.geometry.dispose();\n if (m.material) {\n if (Array.isArray(m.material)) {\n m.material.forEach((mat) => {\n mat.dispose();\n });\n } else {\n m.material.dispose();\n }\n }\n }\n if ((o as Light).isLight) {\n (o as Light).dispose?.()\n }\n}", "export function hasChinese(str:string) {\n return /[\\u4E00-\\u9FA5]+/g.test(str);\n}", "import { hasChinese } from './rules'\nimport { DataTexture, RGBAFormat, LinearFilter } from 'three'\n\nconst urlTextureMap = new Map()\nconst textTextureMap = new Map<string, DataTexture>()\n\nexport function initCanvas() {\n const canvas = document.createElement('canvas');\n canvas.width = 1024;\n canvas.height = 64;\n const ctx = canvas.getContext('2d', {\n willReadFrequently: true,\n }) as CanvasRenderingContext2D;\n ctx.font = '54px sans-serif';\n ctx.textBaseline = 'hanging';\n ctx.lineWidth = 12;\n ctx.fillStyle = 'rgba(0,0,0,1)';\n ctx.strokeStyle = 'white';\n return { canvas, ctx }\n}\n\nlet canvas: HTMLCanvasElement;\nlet ctx: CanvasRenderingContext2D;\n\nexport function createCanvas() {\n if (!canvas) {\n const { canvas: c, ctx: t } = initCanvas()\n canvas = c;\n ctx = t;\n }\n}\n\nexport function getTextureByText(text: string): DataTexture {\n if (textTextureMap.has(text)) {\n return textTextureMap.get(text)!\n }\n createCanvas()\n\n ctx.clearRect(0, 0, 1024, 64);\n const y = hasChinese(text) ? 4 : 8;\n ctx.strokeText(text, 2, y);\n ctx.fillText(text, 2, y);\n\n let width = Math.ceil(ctx.measureText(text).width);\n width = width % 2 === 0 ? width : width + 1;\n width += 2;\n const imageData = ctx.getImageData(0, 0, width, 64);\n const texture = new DataTexture(\n Uint8Array.from(imageData.data),\n width,\n 64,\n RGBAFormat,\n );\n texture.flipY = true;\n texture.minFilter = LinearFilter;\n texture.magFilter = LinearFilter;\n\n textTextureMap.set(text, texture);\n return texture;\n}\n\nexport function clearTextTexture() {\n textTextureMap.clear()\n}\n\nexport function clearCanvas() {\n ctx = null as unknown as CanvasRenderingContext2D;\n canvas = null as unknown as HTMLCanvasElement;\n}", "import { Coordinate } from 'src/types';\nimport { Vector3, Camera } from 'three';\nimport { point, featureCollection, center } from '@turf/turf'\n\n/**\n * 3D\u5750\u6807\u8F6C\u5C4F\u5E55\u5750\u6807\n * @param vector \n * @param camera \n * @param w container\u7684\u5BBD\n * @param h container\u7684\u9AD8\n * @returns \n */\nexport function vector3ToDevice(vector: Vector3, camera: Camera, w: number, h: number) {\n const _vector = vector.clone().project(camera);//\u901A\u8FC7\u4E16\u754C\u5750\u6807\u83B7\u53D6\u8F6C\u6807\u51C6\u8BBE\u5907\u5750\u6807\n const _w = w / 2;\n const _h = h / 2;\n const x = Math.round(_vector.x * _w + _w);//\u6807\u51C6\u8BBE\u5907\u5750\u6807\u8F6C\u5C4F\u5E55\u5750\u6807\n const y = Math.round(-_vector.y * _h + _h);\n return { x, y }\n}\n\n\n/**\n * \u83B7\u53D6\u591A\u53D8\u5F62\u7684\u4E2D\u5FC3\u70B9\n * @param coordinates \n */\nexport function getCenter(coordinates: Coordinate[]) {\n const features = featureCollection(coordinates.map(item => point(item)))\n const cent = center(features)\n return cent.geometry.coordinates\n}\n\ntype Position = {\n x: number,\n y: number\n}\nexport function isContain(point: Position, start: Position, end: Position) {\n // \u5224\u65AD point\u662F\u5426\u5728 start \u548Cend\u5F62\u6210\u7684\u77E9\u5F62\u4E2D\n return point.x >= start.x &&\n point.x <= end.x &&\n point.y >= start.y &&\n point.y <= end.y \n}", "import { EventDispatcher } from 'three'\n\nexport function proxyOptions\n <T extends Record<string, any>, M extends { [K in keyof T as `change-${Extract<K, string>}`]: { value: T[K] } }>\n (target: T, master: EventDispatcher<M>): T\n{ \n return new Proxy<T>(target, {\n get: (target, p, receiver) => {\n return Reflect.get(target, p, receiver)\n },\n set: (target, p, newValue, receiver) => {\n const res = Reflect.set(target, p, newValue, receiver)\n master.dispatchEvent({ type: `change-${p as Extract<keyof T, string>}`, value: newValue } as any)\n return res\n }\n })\n}", "/**\n * \u53EF\u4EE5\u8BBE\u7F6E\u8D85\u65F6\u65F6\u95F4\u7684promise\n * @param promise \n * @param timeout \n * @returns \n */\nexport function timeoutPromise<T>(promise: Promise<T>, timeout: number): Promise<T> {\n return Promise.race([\n promise,\n new Promise<T>((resolve, reject) => {\n setTimeout(() => reject(new Error(\"Promise timeout\")), timeout);\n })\n ]);\n}", "export function createSvgElement(tag: string) {\n return document.createElementNS('http://www.w3.org/2000/svg', tag); \n}\n\n/**\n * \u521B\u5EFAsvg\n */\nexport function createSvg(w: string, h: string) {\n const svg = createSvgElement(\"svg\");\n svg.setAttribute(\"width\", w)\n svg.setAttribute(\"height\", h)\n svg.style.cssText = \"position: absolute; left: 0; top: 0; pointer-events: none;\"\n return svg;\n}\n\n/**\n * \u521B\u5EFA\u5706\u70B9\n * @param radius \n */\nexport function createCircle(radius = \"2\", fill: string) {\n const circle = createSvgElement(\"circle\");\n circle.setAttribute(\"r\", radius)\n circle.setAttribute(\"fill\", fill)\n return circle\n}\n\n/**\n * \u521B\u5EFA\u7EBF\n * @param stroke \n */\nexport function createLine(stroke: string) {\n const line = createSvgElement(\"line\")\n line.setAttribute(\"stroke\", stroke)\n return line\n}\n\n/**\n * \u521B\u5EFA\u77E9\u5F62\n * @param stroke \n * @returns \n */\nexport function createRect(stroke: string, fill: string) {\n const rect = createSvgElement(\"rect\")\n rect.setAttribute(\"stroke\", stroke)\n rect.setAttribute(\"fill\", fill)\n return rect\n}\n\nexport function setCirclePosition(circle: SVGElement, x: number, y: number) {\n circle.setAttribute('cx', `${x}`)\n circle.setAttribute('cy', `${y}`)\n}\n\ntype Position = { x: number; y: number }\n\nexport function setLineStartEnd(line: SVGElement, start?: Position, end?: Position) {\n if (start) { \n line.setAttribute(\"x1\", `${start.x}`)\n line.setAttribute(\"y1\", `${start.y}`)\n }\n if (end) {\n line.setAttribute(\"x2\", `${end.x}`)\n line.setAttribute(\"y2\", `${end.y}`)\n }\n}\n\nexport function setRectPosition(rect: SVGElement, x: number, y: number, w: number, h: number) {\n rect.setAttribute('x', `${x}`)\n rect.setAttribute('y', `${y}`)\n rect.setAttribute('width', `${w}`)\n rect.setAttribute('height', `${h}`)\n}", "import { MapControls } from \"three/examples/jsm/controls/MapControls\";\nimport {\n Timer,\n initCamera,\n initRenderer,\n initScene,\n initLight,\n initControl,\n dispose,\n vector3ToDevice,\n timeoutPromise,\n} from \"./utils\";\nimport {\n EventDispatcher,\n OrthographicCamera,\n Light,\n Box2,\n Vector3,\n Vector2,\n Raycaster,\n Object3D,\n Box3,\n Color,\n AmbientLight,\n} from \"three\";\nimport { Graphic, Poi, Floor } from \"./elements\";\nimport { Group as TweenGroup, Tween } from \"@tweenjs/tween.js\";\nimport { Config } from \"./config\";\nimport { Selection } from \"./operations/selection/selection\";\nimport { HoverHelper } from \"./operations\";\n\nexport interface ContextEventMap {\n update: {};\n \"graphic-click\": {\n graphics: Graphic[];\n position: Vector3 | null\n };\n \"poi-click\": {\n pois: Poi[];\n };\n 'pointer-level': {};\n 'pointer-over': {\n graphics: Graphic[];\n pois: Poi[];\n position: Vector3 | null;\n };\n 'pointer-move': {\n graphics: Graphic[];\n pois: Poi[];\n position: Vector3 | null;\n },\n 'change-ratio': {\n px: number;\n },\n \"select-graphic\": {\n graphics: Graphic[]\n },\n \"hover\": {\n graphics: Graphic[];\n }\n}\n\nexport class Context extends EventDispatcher<ContextEventMap> {\n scene = initScene();\n\n renderer = initRenderer();\n\n camera!: OrthographicCamera;\n\n control!: MapControls;\n\n lights = initLight();\n\n // \u7BA1\u7406\u4EFB\u52A1\uFF0C\u9632\u6B62\u5185\u5B58\u6CC4\u6F0F\n timer = new Timer();\n \n tweenGroup = new TweenGroup();\n \n currentFloor?: Floor;\n\n selection: Selection;\n\n hoverHelper: HoverHelper;\n \n private basicRatio?: number; // zoom=1\u7684\u65F6\u5019\uFF0C100M\u5BF9\u5E94\u7684\u50CF\u7D20\u4E2A\u6570\n\n constructor(public container: HTMLElement, public config: Config) {\n super();\n this.container.style.position = \"relative\";\n this.container.style.overflow = \"hidden\";\n this.init();\n this.selection = new Selection(this);\n this.hoverHelper = new HoverHelper(this);\n\n this.registryEvent();\n }\n\n init() {\n const { clientWidth: w, clientHeight: h } = this.container;\n this.camera = initCamera(w, h);\n this.renderer.setSize(w, h);\n this.control = initControl(this.camera, this.renderer.domElement);\n this.container.appendChild(this.renderer.domElement);\n this.scene.add(this.lights);\n this.basicRatio = this.getRatio()\n // \u65CB\u8F6C\u89C6\u89D2\u7684\u65F6\u5019\uFF0C\u9690\u85CF\u548C\u663E\u793A\u9634\u5F71\n this.control.addEventListener(\"change\", () => {\n const polarAngle = this.control.getPolarAngle();\n this.currentFloor?.setShadowOpacity(polarAngle / this.config.control.maxPolar)\n this.dispatchEvent({ type: 'change-ratio', px: (this.basicRatio || 0) * this.camera.zoom })\n });\n }\n\n /**\n * \u83B7\u53D6\u4E24\u4E2A\u70B9\u4E4B\u95F4\u7684\u50CF\u7D20\u6570\n */\n getRatio(point1 = new Vector3(0, 0, 0), point2 = new Vector3(100, 0, 0)) {\n const { clientWidth, clientHeight } = this.container\n const device1 = vector3ToDevice(point1, this.camera, clientWidth, clientHeight)\n const device2 = vector3ToDevice(point2, this.camera, clientWidth, clientHeight)\n return Math.ceil(Math.sqrt((device2.x - device1.x) ** 2 + (device2.y - device1.y) ** 2))\n }\n\n changeAmbientLightColor(color: string | number) {\n this.lights.children.forEach((item) => {\n if (item instanceof AmbientLight) {\n item.color = new Color(color);\n }\n });\n }\n\n switchFloor(floor: Floor) {\n if (this.currentFloor) {\n this.scene.remove(this.currentFloor)\n this.currentFloor.dispose()\n }\n this.currentFloor = floor\n this.scene.add(floor)\n // \u4FEE\u6539\u706F\u5149\u7684\u4F4D\u7F6E\n const position = floor.getCenter()\n if (position) {\n this.lights.position.x = position.x\n this.lights.position.y = position.y\n }\n }\n\n onWindowResize = () => {\n const { container, camera, renderer } = this;\n const { clientWidth: w, clientHeight: h } = container;\n camera.left = -w / 2;\n camera.right = w / 2;\n camera.top = h / 2;\n camera.bottom = -h / 2;\n camera.updateProjectionMatrix();\n renderer.setSize(w, h);\n };\n\n onClick = (e: MouseEvent) => {\n const { graphics, position } = this.getGraphicsByDeviceXy(e.offsetX, e.offsetY);\n if (graphics.length) {\n this.dispatchEvent({\n type: \"graphic-click\",\n graphics: graphics,\n position\n });\n }\n const pois = this.getPoisByDeviceXy(e.clientX, e.clientY);\n if (pois.length) {\n this.dispatchEvent({ type: \"poi-click\", pois: pois as Poi[] });\n }\n };\n\n /**\n * \u83B7\u53D6\u5C4F\u5E55\u5750\u6807\u5BF9\u5E94\u7684graphic\n * @param x\n * @param y\n * @returns\n */\n getGraphicsByDeviceXy(x: number, y: number): { graphics: Graphic[], position: Vector3 | null } {\n const point = new Vector2();\n point.x = (x / this.container.clientWidth) * 2 - 1;\n point.y = (y / this.container.clientHeight) * -2 + 1;\n const raycaster = new Raycaster();\n raycaster.setFromCamera(point, this.camera);\n const res = this.currentFloor?.graphicLayer.getGraphicByRaycaster(raycaster)\n return res || { graphics: [], position: null }\n }\n\n /**\n * \u83B7\u53D6\u5C4F\u5E55\u5750\u6807\u5BF9\u5E94\u7684poi\n * @param x\n * @param y\n * @returns\n */\n getPoisByDeviceXy(x: number, y: number) {\n const pois = this.currentFloor?.poiLayer.getPoiByDeviceXy(x, y)\n return pois || [];\n }\n\n onPointerover = (e: PointerEvent) => { \n const { graphics, position } = this.getGraphicsByDeviceXy(e.offsetX, e.offsetY);\n const pois = this.getPoisByDeviceXy(e.clientX, e.clientY) as Poi[];\n this.dispatchEvent({ type: 'pointer-over', graphics, pois, position })\n }\n\n onPointermove = (e: PointerEvent) => { \n const { graphics, position } = this.getGraphicsByDeviceXy(e.offsetX, e.offsetY)\n const pois = this.getPoisByDeviceXy(e.clientX, e.clientY) as Poi[];\n this.dispatchEvent({ type: 'pointer-move', graphics, pois, position })\n }\n\n onPointerleave = () => { \n this.dispatchEvent({ type: \"pointer-level\" })\n }\n\n onSelectionSelect = ({ graphics }: {graphics: Graphic[]}) => { \n this.dispatchEvent({ type: \"select-graphic\", graphics })\n }\n\n onHoverChange = ({ graphics }: { graphics: Graphic[] }) => { \n this.dispatchEvent({ type: \"hover\", graphics })\n }\n\n registryEvent() {\n window.addEventListener(\"resize\", this.onWindowResize);\n this.container.addEventListener(\"click\", this.onClick);\n this.container.addEventListener(\"pointerover\", this.onPointerover)\n this.container.addEventListener(\"pointermove\", this.onPointermove)\n this.container.addEventListener(\"pointerleave\", this.onPointerleave)\n this.selection.addEventListener(\"select\", this.onSelectionSelect)\n this.hoverHelper.addEventListener(\"hover-change\", this.onHoverChange)\n }\n\n unRegistryEvent() {\n window.removeEventListener(\"resize\", this.onWindowResize);\n this.container.removeEventListener(\"click\", this.onClick);\n this.container.removeEventListener(\"pointerover\", this.onPointerover)\n this.container.removeEventListener(\"pointermove\", this.onPointermove)\n this.container.removeEventListener(\"pointerleave\", this.onPointerleave)\n this.selection.removeEventListener(\"select\", this.onSelectionSelect)\n this.hoverHelper.removeEventListener(\"hover-change\", this.onHoverChange)\n }\n\n /**\n * \u8BBE\u7F6E\u7EB5\u5411\u65CB\u8F6C\u89D2\u5EA6\n * @param polar \u5F27\u5EA6\n */\n public setPolarAngle(polar: number, duration = 500) {\n return timeoutPromise(\n new Promise((resolve) => {\n const start = { polar: this.control.getPolarAngle() };\n const end = { polar };\n const tween = new Tween(start, this.tweenGroup)\n .to(end, duration)\n .onUpdate(() => {\n this.control.maxPolarAngle = start.polar;\n this.control.minPolarAngle = start.polar;\n this.control.update();\n })\n .onComplete(() => {\n this.control.enabled = true;\n this.tweenGroup.remove(tween);\n resolve(true);\n })\n .onStart(() => {\n this.control.enabled = false;\n })\n .start();\n }),\n duration + 500\n );\n }\n\n getCameraLookAt() {\n return new Vector3().subVectors(this.control.target, this.camera.position);\n }\n\n /**\n * \u6309\u7167\u4E00\u4E2A\u4E2D\u5FC3\u70B9\u8BBE\u7F6E\u76F8\u673A\u7684\u653E\u5927\u7F29\u5C0F\n * @param zoom\n * @param center\n * @returns\n */\n public setZoom(zoom: number, center: Vector3, duration = 500) {\n return timeoutPromise(\n new Promise((resolve) => {\n const start = {\n zoom: this.camera.zoom,\n target: this.control.target.clone(),\n };\n const lookAtVector = this.getCameraLookAt();\n const tween = new Tween(start, this.tweenGroup)\n .to(\n {\n zoom,\n target: center,\n },\n duration\n )\n .onUpdate(() => {\n this.camera.position.copy(start.target.clone().sub(lookAtVector));\n this.control.target.copy(start.target);\n this.camera.zoom = start.zoom;\n this.control.update();\n })\n .onComplete(() => {\n this.tweenGroup.remove(tween);\n this.control.enabled = true;\n resolve(true)\n })\n .onStart(() => {\n this.control.enabled = false;\n })\n .start();\n }),\n duration + 500\n );\n }\n\n /**\n * \u653E\u5927\u76F8\u673A\u5230\u7269\u4F53\u5360\u5168\u5C4F\n * @param object\n * @param padding\n * @param duration\n * @returns\n */\n fitCameraToObject(\n object: Object3D,\n padding: [number, number, number, number] = [20, 20, 20, 20],\n duration = 500\n ) {\n const [top, right, bottom, left] = padding;\n const { clientWidth, clientHeight } = this.container;\n // \u83B7\u53D6\u7269\u4F53\u7684\u4E09\u7EF4\u76D2\u5B50\u5750\u6807\n const boundingBox = new Box3().setFromObject(object);\n const { max, min } = boundingBox;\n // \u5750\u6807\u8F6C\u6210\u5C4F\u5E55\u5750\u6807\u5E76\u8BA1\u7B97\u51FA\u5360\u7528\u5C4F\u5E55\u5750\u6807\u7684\u5927\u5C0F\n const max2d = vector3ToDevice(max, this.camera, clientWidth, clientHeight);\n const min2d = vector3ToDevice(min, this.camera, clientWidth, clientHeight);\n const boundingBox2d = new Box2().setFromPoints([\n new Vector2(max2d.x, max2d.y),\n new Vector2(min2d.x, min2d.y),\n ]);\n const size = boundingBox2d.getSize(new Vector2());\n // \u8BA1\u7B97\u5728\u5C4F\u5E55\u4E0Ax,y\u65B9\u5411\u4E0A\u9700\u8981\u8C03\u6574\u7684\u500D\u6570\n const xScale = (clientWidth - right - left) / size.x;\n const yScale = (clientHeight - top - bottom) / size.y;\n const scale = Math.min(xScale, yScale);\n const center = new Vector3((max.x + min.x) / 2, (max.y + min.y) / 2, max.z);\n return this.setZoom(scale * this.camera.zoom, center, duration);\n }\n\n fitCameraToGround(padding: [number, number, number, number] = [20, 20, 20, 20], duration = 500) { \n if (this.currentFloor && this.currentFloor.hasElement) {\n return this.fitCameraToObject(this.currentFloor.groundUpper, padding, duration);\n } else {\n return Promise.resolve(false);\n }\n }\n\n /**\n * \u4FEE\u6539\u76F8\u673A\u4F4D\u7F6E\n * @param position \u4FEE\u6539\u540E\u7684\u76F8\u673A\u7684\u4F4D\u7F6E\n * @param duration \u52A8\u753B\u6301\u7EED\u65F6\u95F4\n */\n public setCameraPosition(position: Vector3, duration: number) {\n return timeoutPromise(\n new Promise((resolve) => {\n const start = this.camera.position.clone();\n const lookAtVector = this.getCameraLookAt();\n const tween = new Tween(start, this.tweenGroup)\n .to(position, duration)\n .onUpdate(() => {\n this.camera.position.copy(start);\n this.control.target.copy(position.clone().add(lookAtVector));\n })\n .onComplete(() => {\n this.tweenGroup.remove(tween);\n this.control.update();\n this.control.enabled = true;\n resolve(true);\n })\n .onStart(() => {\n this.control.enabled = false;\n })\n .start();\n }),\n duration + 500\n );\n }\n\n render() {\n this.renderer.render(this.scene, this.camera);\n this.dispatchEvent({ type: \"update\" });\n this.timer.requestAnimationFrame(() => {\n this.render();\n });\n this.tweenGroup.update();\n }\n\n dispose() {\n this.selection.dispose()\n this.hoverHelper.dispose()\n this.tweenGroup.getAll().forEach((item) => item.stop());\n this.tweenGroup.removeAll();\n this.unRegistryEvent();\n this.container.removeChild(this.renderer.domElement);\n this.timer.dispose();\n this.renderer.dispose();\n (this.lights.children as Light[]).forEach((light: Light) =>\n light.dispose()\n );\n dispose(this.scene);\n }\n}\n", "import { EventDispatcher } from \"three\";\nimport { Context } from \"../../context\";\nimport { Graphic } from \"../../elements\";\nimport hotkeys from 'hotkeys-js'\nimport { BoxSelection } from \"./box-selection\";\n\ninterface SelectionEventMap {\n \"select\": {\n graphics: Graphic[]\n }\n}\n\nexport class Selection extends EventDispatcher<SelectionEventMap> {\n private _list = new Set<Graphic>()\n\n private boxSelection: BoxSelection;\n private prevPanStatus?: boolean;\n\n constructor(private context: Context) {\n super()\n this.boxSelection = new BoxSelection(context)\n this.boxSelection.setEnable(false)\n this.registryEvent()\n }\n\n get list() {\n return this._list\n }\n\n onPointerDown = (e: PointerEvent) => {\n const { graphics } = this.context.getGraphicsByDeviceXy(e.offsetX, e.offsetY)\n if (!e.ctrlKey) {\n this._list.clear()\n }\n graphics.forEach(item => this._list.add(item))\n this.selectEnd()\n }\n\n onKeyDown = (e: KeyboardEvent) => {\n if (e.key === \"Control\") {\n this.boxSelection.setEnable(true)\n this.prevPanStatus = this.context.control.enablePan\n this.context.control.enablePan = false\n }\n }\n\n onKeyUp = (e: KeyboardEvent) => {\n if (e.key === \"Control\") {\n this.boxSelection.setEnable(false)\n this.context.control.enablePan = !!this.prevPanStatus\n }\n }\n\n onBoxSelected = ({ list }: { list: Graphic[] }) => { \n this._list.clear()\n list.forEach(item => {\n this._list.add(item)\n })\n this.selectEnd()\n }\n\n selectEnd() {\n this.dispatchEvent({type: \"select\", graphics: [...this._list]})\n }\n\n registryEvent() {\n this.context.container.addEventListener(\"pointerdown\", this.onPointerDown)\n window.addEventListener(\"keydown\", this.onKeyDown)\n window.addEventListener(\"keyup\", this.onKeyUp)\n this.boxSelection.addEventListener(\"selected\", this.onBoxSelected)\n }\n\n unRegistryEvent() {\n this.context.container.removeEventListener(\"pointerdown\", this.onPointerDown)\n window.removeEventListener(\"keydown\", this.onKeyDown)\n window.removeEventListener(\"keyup\", this.onKeyUp)\n this.boxSelection.removeEventListener(\"selected\", this.onBoxSelected)\n }\n\n dispose() {\n this.unRegistryEvent()\n }\n}", "import {\n Object3D, ExtrudeGeometry, MeshStandardMaterial, Mesh, Color, Box3,\n LineSegments, EdgesGeometry, LineBasicMaterial, Raycaster, Object3DEventMap, Vector3\n} from 'three';\nimport { initShape, dispose, proxyOptions } from '../utils'\nimport { GraphicOptions, PolygonGeometry } from 'src/types';\nimport { merge } from 'lodash'\nimport { Context } from '../context'\n\n// \u95E8\u7684\u7C7B\u578B\nconst DoorType = {\n single: \"\u5355\u5F00\u95E8\",\n double: \"\u53CC\u5F00\u95E8\",\n move: \"\u79FB\u52A8\u95E8\",\n};\n\n// \u95E8\u7684\u6750\u8D28\nconst DoorMaterial = {\n wood: \"\u6728\u95E8\",\n glass: \"\u73BB\u7483\u95E8\",\n aluminum: \"\u94DD\u5408\u91D1\u95E8\",\n}\n\n// \u5355\u4E2A\u95E8\u7684\u914D\u7F6E\nexport interface Door {\n // \u540D\u79F0\n name: string;\n id: string;\n width: number;\n // \u5185\u5F00/\u5916\u5F00\n open: boolean;\n // \u7C7B\u578B \u5355\u5F00\u95E8 \u53CC\u5F00\u95E8 \u79FB\u52A8\u95E8\n type: keyof typeof DoorType;\n // \u6750\u8D28\n material: keyof typeof DoorMaterial;\n}\n\nexport type GraphicOptionsParam = Partial<GraphicOptions>\n\ntype GraphicEventMap = {\n [K in keyof GraphicOptions as `change-${K}`]: { value: GraphicOptions[K] };\n} & Object3DEventMap;\n\n\nconst defaultOptions: GraphicOptions = {\n id: \"\", // \u56FE\u5F62id\n height: 0.1, // \u56FE\u5F62\u9AD8\u5EA6\n airHeight: 0, // \u60AC\u7A7A\u9AD8\u5EA6\n area: 0, // \u9762\u79EF\n group: \"\", // \u5206\u7EC4\n fillColor: \"#EFF4FB\", // \u989C\u8272\n strokeColor: \"#ffffff\", // \u8FB9\u6846\n fillOpacity: 1, // \u900F\u660E\u5EA6\n strokeOpacity: 1, // \u63CF\u8FB9\u900F\u660E\u5EA6\n doors: [], // \u95E8\u914D\u7F6E\n locked: false,\n visible: true,\n geometry: {\n type: 'polygon',\n cds: [],\n curveCpt: [],\n curveIndex: []\n },\n layerType: \"\",\n zIndex: 0,\n}\n\nexport class Graphic extends Object3D<GraphicEventMap> {\n\n private geometry!: ExtrudeGeometry;\n\n private material!: MeshStandardMaterial;\n\n public mesh!: Mesh;\n\n private line!: LineSegments;\n \n public options: GraphicOptions\n \n constructor(private context: Context, options: GraphicOptionsParam) {\n super()\n this.options = proxyOptions<GraphicOptions, GraphicEventMap>(merge({}, defaultOptions, options), this)\n if (this.options.geometry.type === \"point\") { \n const [x, y] = this.options.geometry.cds\n this.position.set(x, y, this.options.height + this.options.airHeight)\n return this\n }\n this.init()\n this.visible = this.options.visible\n this.addEventListener('change-fillColor', ({ value }) => {\n this.material.color = new Color(value);\n })\n this.addEventListener('change-fillOpacity', ({ value }) => {\n this.material.opacity = value;\n })\n this.addEventListener('change-height', ({ value }) => {\n this.dispose()\n this.init()\n })\n this.addEventListener('change-strokeColor', ({ value }) => {\n (this.line.material as LineBasicMaterial).color = new Color(value)\n })\n this.addEventListener('change-strokeOpacity', ({ value }) => {\n (this.line.material as LineBasicMaterial).opacity = value\n })\n this.addEventListener('change-airHeight', ({ value }) => {\n this.position.z = value\n })\n this.addEventListener('change-visible', ({ value }) => {\n this.visible = value\n })\n }\n\n getCenter() { \n if (this.options.geometry.type === \"point\") { \n return this.position\n }\n const center = new Vector3()\n const box = new Box3()\n box.setFromObject(this)\n box.getCenter(center)\n return center\n }\n\n getSize() {\n if (this.options.geometry.type === \"point\") { \n return new Vector3(0, 0, 0)\n }\n const box = new Box3()\n const size = new Vector3()\n box.setFromObject(this)\n box.getSize(size)\n return size\n }\n\n getPosition() {\n return this.getCenter()\n }\n\n init() {\n this.geometry = this.initGeometry()\n this.material = this.initMaterial()\n this.mesh = this.initMesh()\n this.mesh.position.z = this.options.airHeight + this.options.height / 2\n this.mesh.castShadow = true\n this.add(this.mesh)\n // \u521B\u5EFA\u8FB9\u6846\n this.line = this.createBorder()\n this.add(this.line)\n }\n\n initGeometry() {\n const shape = initShape(\n (this.options.geometry as PolygonGeometry).cds[0],\n (this.options.geometry as PolygonGeometry).cds.slice(1)\n )\n const geometry = new ExtrudeGeometry(shape, {\n steps: 1,\n bevelEnabled: false,\n depth: this.options.height,\n curveSegments: 4,\n });\n return geometry\n }\n\n initMaterial() {\n const material = new MeshStandardMaterial({\n color: this.options.fillColor,\n roughness: 1,\n transparent: true,\n opacity: this.options.fillOpacity,\n depthWrite: true,\n });\n return material\n }\n\n initLineMaterial() { \n const lineMaterial = new LineBasicMaterial({\n color: this.options.strokeColor,\n opacity: this.options.strokeOpacity,\n transparent: true,\n depthWrite: true,\n });\n return lineMaterial\n }\n\n initMesh() {\n return new Mesh(this.geometry, this.material)\n }\n\n createBorder() {\n const material = this.initLineMaterial()\n const geometry = new EdgesGeometry( this.geometry );\n const line = new LineSegments(geometry, material)\n line.position.z = this.options.airHeight + this.options.height / 2\n return line\n }\n\n raycast(raycaster: Raycaster) {\n if (!this.visible) { return false }\n if (this.options.geometry.type === \"point\") { return false }\n const intersects = raycaster.intersectObject(this.mesh)\n if (intersects[0]) {\n const {point: position, distance} = intersects[0]\n return { position, distance }\n }\n return false\n }\n \n dispose() {\n dispose(this)\n this.clear()\n }\n\n}", "import {\n Object3D, PlaneGeometry, DirectionalLight,\n Mesh, MeshStandardMaterial, ShadowMaterial, Color, Vector3, DoubleSide\n} from 'three';\nimport { dispose, initDirectionalLight } from '../utils'\nimport { Graphic } from './graphic';\n\nexport class Shadow extends Object3D {\n\n private directionalLight: DirectionalLight\n\n private plane!: Mesh\n\n public basicOpacity = 0.39\n\n constructor() {\n super()\n this.directionalLight = this.initLight()\n this.initPlane()\n }\n\n // \u521B\u5EFA\u5149\u6E90\n initLight() { \n const directionalLight = initDirectionalLight(0xffffff, 1)\n directionalLight.position.set(0, 0, 100);\n this.add(directionalLight);\n return directionalLight\n }\n \n changeLightCamera(size: Vector3) {\n const x = size.x\n const y = size.y\n this.directionalLight.shadow.camera.left = -x;\n this.directionalLight.shadow.camera.right = x;\n this.directionalLight.shadow.camera.top = y;\n this.directionalLight.shadow.camera.bottom = -y;\n this.directionalLight.shadow.camera.near = 0.5;\n this.directionalLight.shadow.camera.far = Math.max(x, y);\n }\n\n changeLightColor(color: number | string) {\n this.directionalLight.color = new Color(color)\n }\n\n setPosition(position: Vector3) {\n this.position.copy(position)\n this.directionalLight.position.set(-position.x / 2, -position.y / 2, 100)\n }\n\n // \u521B\u5EFA\u5E73\u9762\u767D\u8272\n initPlane(width = 1000, height = 1000) { \n const geometry = new PlaneGeometry(width, height)\n const material = new ShadowMaterial({\n transparent: true,\n opacity: 0,\n side: DoubleSide\n })\n const mesh = new Mesh(geometry, material)\n mesh.receiveShadow = true\n mesh.position.z = -5\n this.add(mesh)\n this.plane = mesh\n return mesh\n }\n\n setTarget(target: Object3D) {\n this.directionalLight.target = target\n }\n\n transformOpacity(opacity: number): number {\n return opacity * this.basicOpacity\n }\n\n setOpacity(opacity: number) { \n (this.plane.material as MeshStandardMaterial).opacity = this.transformOpacity(opacity);\n }\n \n dispose() {\n dispose(this, true)\n }\n\n}", "import { proxyOptions } from '../utils';\nimport { Object3D, Object3DEventMap } from 'three';\nimport { Context } from '../context'\nimport { merge } from 'lodash'\nimport { Overlay } from './overlay';\n\nexport interface PoiOptions {\n text: string;\n icon?: string;\n icon_size?: [number, number]; // \u5BBD \u9AD8\n level: number; // \u6E32\u67D3\u4F18\u5148\u7EA7\n collision_enable: boolean; // \u662F\u5426\u53C2\u4E0E\u78B0\u649E\u68C0\u6D4B\n opacity: number;\n}\n\ntype PoiEventMap = {\n [K in keyof PoiOptions as `change-${K}`]: { value: PoiOptions[K] };\n} & Object3DEventMap;\n\nconst defaultOptions: PoiOptions = {\n text: \"\",\n level: 1,\n collision_enable: true,\n opacity: 1\n}\n\nexport type PoiOptionsParam = Partial<PoiOptions>\n\nexport class Poi extends Object3D<PoiEventMap> {\n\n private textDiv!: HTMLDivElement\n\n private img?: HTMLImageElement\n\n private overlay: Overlay\n\n public options: PoiOptions\n\n constructor(private context: Context, options: PoiOptionsParam) {\n super()\n this.options = proxyOptions<PoiOptions, PoiEventMap>(merge({}, defaultOptions, options), this)\n this.overlay = new Overlay(this.context)\n this.overlay.bindElement(this)\n this._changePosition()\n this.registryEvent()\n this.initDiv()\n this.addEventListener(\"change-icon\", ({ value }) => {\n if (value) {\n if (!this.img) {\n this.overlay.div.appendChild(this.initIcon())\n } else {\n this.img.setAttribute('src', value)\n }\n } else {\n this.img && this.overlay.div.removeChild(this.img)\n this.img = undefined\n }\n })\n this.addEventListener(\"change-text\", ({ value }) => {\n this.overlay.div.removeChild(this.textDiv)\n this.overlay.div.appendChild(this.initText())\n })\n this.addEventListener(\"change-opacity\", ({ value }) => {\n this.overlay.setOpacity(value)\n })\n }\n\n initDiv() {\n const div = this.overlay.div;\n div.appendChild(this.initText())\n if (this.options.icon) { \n div.appendChild(this.initIcon())\n }\n div.style.fontSize = `12px`;\n div.style.display = `flex`;\n div.style.flexDirection = `column`;\n div.style.justifyContent = `center`;\n div.style.alignItems = `center`;\n div.style.pointerEvents = `none`;\n return div\n }\n\n getPosition() {\n return this.position\n }\n\n initText() {\n const textDiv = document.createElement(\"div\")\n textDiv.appendChild(this.createTextFragment())\n textDiv.style.background = \"rgba(255, 255, 255, .7)\"\n textDiv.style.padding = \"2px\"\n textDiv.style.borderRadius = \"4px\"\n this.textDiv = textDiv\n return textDiv\n }\n\n createTextFragment() { \n const f = document.createDocumentFragment()\n this.options.text.split(\"\\r\\n\").forEach(item => { \n const div = document.createElement(\"div\")\n div.style.whiteSpace = 'nowrap';\n div.textContent = item\n f.appendChild(div)\n })\n return f\n }\n\n initIcon() {\n const img = document.createElement(\"img\")\n img.setAttribute(\"src\", this.options.icon!)\n img.style.width = `${this.options.icon_size?.[0] || 32}px`\n img.style.height = `${this.options.icon_size?.[1] || 32}px`\n this.img = img\n return img\n }\n\n private _changePosition = () => {\n this.overlay.div.style.transform = `translate3d(-50%, ${this.options.icon ? '-100%' : '-50%'}, 0)`;\n }\n\n registryEvent() {\n this.context.addEventListener('update', this._changePosition)\n }\n\n unRegistryEvent() {\n this.context.removeEventListener('update', this._changePosition)\n }\n\n setVisible(visible: boolean) {\n this.overlay.setVisible(visible, 'flex')\n }\n\n getBox() {\n return this.overlay.div.getBoundingClientRect()\n }\n\n isContain(x: number, y: number) {\n const box = this.getBox()\n return x >= box.left && x <= box.right && y >= box.top && y <= box.bottom\n }\n\n dispose() {\n this.unRegistryEvent();\n this.textDiv = null as unknown as HTMLDivElement;\n this.img = undefined\n this.overlay.dispose();\n }\n}", "import { Context } from \"../context\";\nimport { Box3, EventDispatcher, Object3D, Vector3 } from \"three\";\nimport { vector3ToDevice } from '../utils'\n\nexport class Overlay extends EventDispatcher {\n\n public div: HTMLDivElement\n\n private element?: Object3D & { getPosition?: () => Vector3 }\n\n public position = new Vector3()\n\n constructor(private context: Context) {\n super()\n this.registryEvent()\n this.div = this.initDiv()\n this.context.container.appendChild(this.div)\n }\n\n initDiv() {\n const div = document.createElement(\"div\")\n div.style.position = \"absolute\";\n return div\n }\n\n bindElement(element: Object3D) {\n this.element = element\n }\n\n unBindElement() {\n this.element = undefined;\n }\n\n setVisible(visible: boolean, display = 'block') {\n this.div.style.display = visible ? display : 'none'\n }\n\n setOpacity(opacity: number) {\n this.div.style.opacity = `${opacity}`\n }\n\n getPosition() {\n if (this.element) {\n if (typeof this.element.getPosition === \"function\") {\n return this.element.getPosition()\n }\n const box = new Box3().setFromObject(this.element)\n const center = box.getCenter(new Vector3())\n return center\n } else {\n return this.position\n }\n }\n\n onUpdate = () => {\n const vector = this.getPosition()\n const { clientWidth, clientHeight } = this.context.container\n const { x, y } = vector3ToDevice(vector, this.context.camera, clientWidth, clientHeight)\n this.div.style.left = `${x}px`;\n this.div.style.top = `${y}px`;\n }\n\n registryEvent() {\n this.context.addEventListener('update', this.onUpdate)\n }\n\n unRegistryEvent() {\n this.context.removeEventListener('update', this.onUpdate)\n }\n\n dispose() {\n this.unRegistryEvent()\n this.unBindElement()\n this.context.container.removeChild(this.div)\n this.div = null as unknown as HTMLDivElement\n }\n}", "import { Context } from \"../context\";\nimport { Box3, Object3D, Vector3 } from \"three\";\nimport { GraphicLayer } from '../layer/graphic-layer'\nimport { PoiLayer } from '../layer/poi-layer'\nimport { Graphic, GraphicOptionsParam } from \"./graphic\";\nimport { Shadow } from \"./shadow\";\nimport { PoiOptionsParam } from \"./poi\";\nimport { HeatmapDataParam, HeatmapElement } from './heatmap'\n\nexport class Floor extends Object3D {\n \n graphicLayer: GraphicLayer;\n\n poiLayer: PoiLayer;\n\n grounds: Set<Graphic> = new Set();\n\n shadow = new Shadow();\n\n heatmap?: HeatmapElement;\n\n groundUpper = new Object3D();\n\n constructor(public context: Context) {\n super()\n this.graphicLayer = new GraphicLayer(this.context);\n this.poiLayer = new PoiLayer(this.context);\n this.groundUpper.add(this.graphicLayer)\n this.groundUpper.add(this.poiLayer)\n this.add(this.groundUpper)\n }\n\n addGrounds(grounds: Graphic[]) {\n grounds.forEach(ground => { \n if (!this.grounds.has(ground)) {\n this.grounds.add(ground)\n this.groundUpper.add(ground)\n }\n })\n }\n\n get hasElement() { \n return !!(this.grounds.size || this.graphicLayer.children.length)\n }\n\n getCenter() { \n return new Box3().setFromObject(this.groundUpper).getCenter(new Vector3())\n }\n\n addShadow() { \n const box = new Box3().setFromObject(this.groundUpper)\n const center = box.getCenter(new Vector3())\n const size = box.getSize(new Vector3())\n this.shadow.setPosition(center)\n this.shadow.changeLightCamera(size)\n this.add(this.shadow)\n }\n\n addGraphic(graphicOptions: GraphicOptionsParam) {\n return this.graphicLayer.createGraphic(graphicOptions)\n }\n\n addPoi(poiOptions: PoiOptionsParam) {\n return this.poiLayer.createPoi(poiOptions)\n }\n\n addHeatmap(data: HeatmapDataParam) {\n if (!this.heatmap) {\n this.heatmap = new HeatmapElement(this.context)\n this.add(this.heatmap)\n }\n this.heatmap.loadData(data)\n const box = new Box3().setFromObject(this.graphicLayer)\n this.heatmap.position.setZ(box.max.z)\n return this.heatmap\n }\n\n removeHeatMap() {\n if (this.heatmap) {\n this.remove(this.heatmap)\n this.heatmap.dispose()\n this.heatmap = undefined\n }\n }\n\n setShadowOpacity(opacity: number) {\n this.shadow.setOpacity(opacity)\n }\n\n setShadowVisible(visible: boolean) {\n this.shadow.visible = visible;\n }\n\n dispose() {\n this.shadow.dispose();\n this.graphicLayer.dispose()\n this.poiLayer.dispose()\n this.grounds.forEach(ground => ground.dispose())\n this.heatmap?.dispose()\n this.groundUpper.clear()\n this.clear()\n }\n\n}", "import { Graphic, GraphicOptionsParam } from \"../elements\";\nimport { Box3, Raycaster, Vector3 } from \"three\";\nimport { Layer } from \"./layer\";\nimport { Context } from \"../context\";\n\nexport class GraphicLayer extends Layer {\n\n graphicMap = new Map<string, Graphic>()\n\n constructor(context: Context) {\n super(context)\n }\n\n getCenter(): Vector3 { \n const box = new Box3().setFromObject(this)\n return box.getCenter(new Vector3())\n }\n\n createGraphic(options: GraphicOptionsParam) {\n const graphic = new Graphic(this.context, options)\n this.add(graphic)\n this.graphicMap.set(options.id!, graphic)\n return graphic\n }\n\n /**\n * \u83B7\u53D6\u5C04\u7EBF\u76F8\u4EA4\u7684\u5143\u7D20\n * @param raycaster \n */\n getGraphicByRaycaster(raycaster: Raycaster): { graphics: Graphic[], position: Vector3 | null } {\n const initData: {\n position: Vector3 | null,\n graphic: Graphic | null,\n distance: number\n } = { distance: 10000, graphic: null, position: null }\n const data = this.children.reduce((res, item) => {\n if (item instanceof Graphic) {\n const pos = item.raycast(raycaster)\n if (pos) {\n const { distance } = pos\n if (distance < res.distance) {\n return {\n distance: res.distance,\n position: res.position,\n graphic: item\n }\n }\n }\n return res\n } else {\n return res\n }\n }, initData)\n if (data === initData) {\n return { graphics: [], position: null }\n }\n return { graphics: [data.graphic!], position: data.position }\n }\n}", "import { Context } from \"../context\";\nimport { Object3D } from \"three\";\nimport { dispose } from '../utils'\n\nexport class Layer extends Object3D {\n constructor(public context: Context) {\n super();\n }\n\n dispose() {\n dispose(this)\n this.clear()\n }\n}", "import { Poi, PoiOptionsParam } from \"../elements\";\nimport { Layer } from \"./layer\";\nimport { Context } from '../context'\n\nexport class PoiLayer extends Layer {\n pois: Poi[] = []\n \n constructor(context: Context) {\n super(context)\n this.registryEvent()\n }\n\n createPoi(options: PoiOptionsParam) {\n const poi = new Poi(this.context, options)\n this.add(poi)\n this.pushPoi(poi)\n poi.addEventListener(\"change-level\", () => this.changePoiLevelOrCollisionEnable(poi))\n poi.addEventListener(\"change-collision_enable\", () => this.changePoiLevelOrCollisionEnable(poi))\n return poi\n }\n\n changePoiLevelOrCollisionEnable(poi: Poi) {\n const index = this.pois.findIndex(item => item === poi)\n if (index === -1) { return }\n this.pois.splice(index, 1)\n this.pushPoi(poi)\n }\n\n removePoi(poi: Poi) {\n const index = this.pois.findIndex(item => item === poi)\n if (index === -1) { return }\n this.pois.splice(index, 1)\n this.remove(poi)\n poi.dispose()\n }\n\n /**\n * \u4FDD\u5B58poi\u6309\u7167level\u6392\u5E8F\n * @param poi \n */\n pushPoi(poi: Poi) {\n // \u4E0D\u53C2\u4E0E\u78B0\u649E\u68C0\u6D4B\u7684\u5728\u6700\u524D\u9762\n if (!poi.options.collision_enable) {\n this.pois.unshift(poi)\n return\n }\n // level\u6700\u5C0F\u7684\u5728\u6700\u540E\u9762\n if (poi.options.level === 1) {\n this.pois.push(poi)\n return\n }\n for (let i = 0; i < this.pois.length; i++) {\n const item = this.pois[i]\n // \u4E0D\u53C2\u4E0E\u78B0\u649E\u68C0\u6D4B\u7684\u5728\u524D\u9762\n if (!item.options.collision_enable) { \n continue\n }\n if (item.options.level <= poi.options.level) {\n this.pois.splice(i, 0, poi)\n return\n }\n }\n // \u63D2\u5165\u5230\u6700\u540E\n this.pois.push(poi) \n }\n\n getPoiByDeviceXy(x: number, y: number) {\n const pois = this.children.filter(item => {\n return (item instanceof Poi) && item.isContain(x, y)\n })\n return pois\n }\n\n onUpdate = () => { \n this.collisionDetection()\n }\n\n /**\n * \u78B0\u649E\u68C0\u6D4B\n */\n collisionDetection() {\n const range: { left: number; right: number; top: number; bottom: number; }[] = []\n this.pois.forEach((item, index) => {\n item.setVisible(true)\n const { left, right, top, bottom } = item.getBox()\n if (index === 0) {\n range.push({ left, right, top, bottom })\n return\n }\n const valid = range.some((box) => { \n const xIntersect = right < box.left || left > box.right; // x\u65B9\u5411\u91CD\u53E0\n const yIntersect = top > box.bottom || bottom < box.top; // y \u65B9\u5411\u91CD\u53E0\n return xIntersect || yIntersect;\n })\n item.setVisible(valid)\n })\n }\n\n registryEvent() {\n this.context.addEventListener('update', this.onUpdate)\n }\n\n unRegistryEvent() { \n this.context.removeEventListener('update', this.onUpdate)\n }\n \n dispose() {\n super.dispose()\n this.unRegistryEvent()\n this.pois.forEach(item => item.dispose())\n this.pois.length = 0;\n }\n}", "import { Context } from \"../context\";\nimport {\n MeshBasicMaterial, Object3D, PlaneGeometry,\n Texture, DoubleSide, Mesh, Matrix3, Vector2\n} from \"three\";\nimport { create, Heatmap, HeatmapData, DataPoint } from '@mars3d/heatmap.js'\nimport { featureCollection, point, bbox, center as getCenter } from '@turf/turf'\n\ntype V = 'value'\ntype X = 'x'\ntype Y = 'y'\n\nexport type HeatmapDataParam = HeatmapData<DataPoint<V, X, Y>>\n\nexport class HeatmapElement extends Object3D {\n\n private heatmap?: Heatmap<V, X, Y>;\n\n private div: HTMLDivElement\n\n private plane?: Mesh;\n\n constructor(private context: Context) {\n super()\n this.div = document.createElement(\"div\")\n }\n\n clearHeatmap() {\n if (this.div.firstChild) {\n this.div.removeChild(this.div.firstChild)\n }\n this.heatmap = undefined;\n }\n\n loadData(data: HeatmapDataParam) {\n this.clearHeatmap()\n const { width, height, leftTop, center } = this.getBox(data)\n this.heatmap = create({\n width: width,\n height: height,\n container: this.div,\n ...this.context.config.heatMap,\n } as any);\n this.heatmap.setData(this.transformData(data, leftTop))\n this.initPlane(width, height)\n this.position.set(center[0], center[1], this.position.z)\n }\n\n initPlane(width: number, height: number) {\n if (this.plane) { this.remove(this.plane) }\n const geometry = new PlaneGeometry(width, height)\n const texture = new Texture(this.div.firstChild as HTMLCanvasElement);\n texture.needsUpdate = true;\n const material = new MeshBasicMaterial({\n transparent: true,\n side: DoubleSide,\n map: texture,\n });\n material.needsUpdate = true;\n this.plane = new Mesh(geometry, material)\n this.add(this.plane)\n }\n\n getTransMatrix({ x, y }: { x: number, y: number }) {\n // \u5148\u628A\u5DE6\u4E0A\u89D2\u5E73\u79FB\u523000\u70B9\uFF0C\u7136\u540E\u5BF9y\u8F74\u53D6\u53CD\n return new Matrix3().makeScale(1, -1).multiply(new Matrix3().makeTranslation(0 - x, 0 - y))\n }\n\n /**\n * \u6240\u6709\u70B9\u7684\u5750\u6807\u51CF\u53BB\u5DE6\u4E0A\u89D2\u4ECE00\u70B9\u5F00\u59CB\u753Bcanvas\n * @param data \n * @param leftTop \n * @returns \n */\n transformData(data: HeatmapDataParam, leftTop: { x: number, y: number }): HeatmapDataParam {\n const matrix = this.getTransMatrix(leftTop)\n const $data = data.data.map(item => { \n const vector = new Vector2(item.x, item.y).applyMatrix3(matrix)\n return {\n x: vector.x,\n y: vector.y,\n value: item.value\n }\n })\n return {\n data: $data,\n max: data.max,\n min: data.min\n }\n }\n\n getBox(data: HeatmapDataParam) {\n const features = featureCollection(data.data.map(item => point([item.x, item.y])))\n // \u8FD4\u56DE\u4E00\u4E2A\u77E9\u5F62\u8FB9\u6846\u5750\u6807\n const box = bbox(features);\n const width = box[2] - box[0]\n const height = box[3] - box[1]\n const leftTop = { x: box[0], y: box[3] }\n const center = getCenter(features)\n return { width, height, leftTop, center: center.geometry.coordinates }\n }\n\n dispose() {\n this.div = null as unknown as HTMLDivElement\n this.heatmap = undefined\n }\n}", "import { Context } from \"../context\";\nimport { EventDispatcher, Vector3 } from \"three\";\nimport { createSvg, vector3ToDevice } from '../utils'\n\nexport class BaseSvg<T extends {} = {}> extends EventDispatcher<T> {\n protected points: Vector3[] = [];\n\n protected svg: SVGElement;\n\n protected enable = true;\n\n constructor(public context: Context) {\n super()\n this.svg = createSvg(`${context.container.clientWidth}`, `${context.container.clientHeight}`)\n context.container.appendChild(this.svg)\n }\n\n setEnable(enable: boolean) {\n this.enable = enable;\n if (enable) {\n this.svg.style.display = 'block';\n } else {\n this.svg.style.display = 'none';\n }\n }\n\n getIntersectByPointerEvent(e: PointerEvent) {\n const { camera, renderer } = this.context\n const { offsetX: x, offsetY: y } = e\n const { clientWidth, clientHeight } = renderer.domElement;\n const nx = x / clientWidth * 2 - 1;\n const ny = 1 - y / clientHeight * 2;\n\n const v = new Vector3(nx, ny, 0);\n\n return v.unproject(camera);\n }\n\n getSvgCoordinate(vector: Vector3) {\n const { camera, container } = this.context\n const coord = vector3ToDevice(vector, camera, container.clientWidth, container.clientHeight)\n return coord\n }\n \n dispose() {\n this.context.container.removeChild(this.svg)\n this.svg = null as unknown as SVGElement\n }\n}", "import { Context } from \"../context\";\nimport { Vector3 } from \"three\";\nimport { setCirclePosition, createCircle, createLine, setLineStartEnd } from '../utils'\nimport { BaseSvg } from './base-svg'\n\ninterface SvgLineEventMap {\n 'distance': { distance: number }\n}\n\nexport class SvgLine extends BaseSvg<SvgLineEventMap> {\n\n private circles: SVGElement[] \n \n private line: SVGElement\n\n constructor(public context: Context) {\n super(context)\n const { config: { svg: { circle, line } } } = context\n this.circles = [createCircle(circle.radius, circle.fill), createCircle(circle.radius, circle.fill)]\n this.line = createLine(line.stroke)\n this.svg.appendChild(this.circles[0]);\n this.svg.appendChild(this.circles[1]);\n this.svg.appendChild(this.line);\n this.registryEvent()\n }\n\n setEnable(enable: boolean) {\n super.setEnable(enable)\n if (enable) {\n this.registryEvent()\n } else {\n this.unRegistryEvent()\n }\n }\n\n registryEvent() { \n this.context.container.addEventListener(\"pointerenter\", this.onPointermove)\n this.context.container.addEventListener(\"pointermove\", this.onPointermove)\n this.context.container.addEventListener(\"pointerleave\", this.onPointerleave)\n this.context.container.addEventListener(\"pointerdown\", this.onPointerdown)\n this.context.addEventListener(\"update\", this.onUpdate)\n }\n \n unRegistryEvent() { \n this.context.container.removeEventListener(\"pointerenter\", this.onPointermove)\n this.context.container.removeEventListener(\"pointermove\", this.onPointermove)\n this.context.container.removeEventListener(\"pointerleave\", this.onPointerleave)\n this.context.container.removeEventListener(\"pointerdown\", this.onPointerdown)\n this.context.removeEventListener(\"update\", this.onUpdate)\n }\n\n onUpdate = () => {\n if (this.points[0]) {\n const point1 = this.getSvgCoordinate(this.points[0])\n setCirclePosition(this.circles[0], point1.x, point1.y)\n setLineStartEnd(this.line, point1)\n }\n if (this.points[1]) {\n const point2 = this.getSvgCoordinate(this.points[1])\n setCirclePosition(this.circles[1], point2.x, point2.y)\n setLineStartEnd(this.line, undefined, point2)\n }\n }\n \n \n onPointermove = (e: PointerEvent) => { \n // \u53EA\u5728\u6709\u7B2C\u4E00\u4E2A\u70B9\u7684\u65F6\u5019\u9700\u8981\n if (this.points.length !== 1) { return }\n this.line.style.display = \"block\";\n setLineStartEnd(this.line, undefined, { x: e.offsetX, y: e.offsetY })\n }\n \n onPointerleave = () => { \n if (this.points[1]) { return } // \u5982\u679C\u5DF2\u7ECF\u6709\u4E24\u4E2A\u70B9\u4E86\u5C31\u4E0D\u505A\u5904\u7406\n this.line.style.display = \"none\";\n }\n \n onPointerdown = (e: PointerEvent) => {\n if (this.points[1]) { return } // \u5982\u679C\u5DF2\u7ECF\u6709\u4E24\u4E2A\u70B9\u4E86\u5C31\u4E0D\u505A\u5904\u7406\n const point = this.getIntersectByPointerEvent(e)\n if (point) {\n const { offsetX: x, offsetY: y } = e\n // \u4FEE\u6539\u70B9\n const circle = this.circles[this.points.length]\n setCirclePosition(circle, x, y)\n if (!this.points.length) { \n // \u8BBE\u7F6E\u7EBF\u7684\u8D77\u59CB\u70B9\n setLineStartEnd(this.line, { x, y }, { x, y })\n }\n this.addPoint(point)\n }\n }\n\n addPoint(vector: Vector3) {\n this.points.push(vector)\n if (this.points.length >= 2) {\n const distance = this.calculatedDistance()\n this.dispatchEvent({ type: 'distance', distance })\n }\n }\n\n /**\n * \u8BA1\u7B97\u4E24\u4E2A\u70B9\u4E4B\u95F4\u7684\u8DDD\u79BB\n */\n calculatedDistance() { \n const [{ x: x1, y: y1 }, { x: x2, y: y2 }] = this.points\n return Math.sqrt((x2 - x1) ** 2 + (y2 - y1) ** 2)\n }\n \n dispose() {\n super.dispose()\n this.unRegistryEvent()\n this.line = null as unknown as SVGElement\n this.circles = []\n }\n}", "import { Context } from \"../context\";\nimport { BaseSvg } from \"./base-svg\";\nimport { setCirclePosition, setLineStartEnd, createLine, createCircle } from '../utils'\nimport { Vector3 } from \"three\";\n\ninterface SvgPolygonEventMap {\n 'area': { area: number }\n}\n\nexport class SvgPolygon extends BaseSvg<SvgPolygonEventMap> {\n\n private circles: SVGElement[] = []\n\n private lines: SVGElement[] = []\n\n private isClose = false\n\n constructor(context: Context) {\n super(context)\n this.registryEvent()\n }\n\n setEnable(enable: boolean) {\n super.setEnable(enable)\n if (enable) {\n this.registryEvent()\n } else {\n this.unRegistryEvent()\n }\n }\n\n private get lastLine() {\n return this.lines.slice(-1)[0]\n }\n\n private addCircle(circle: SVGElement) {\n this.circles.push(circle)\n this.svg.appendChild(circle)\n }\n\n private addLine(line: SVGElement) {\n this.lines.push(line)\n this.svg.appendChild(line)\n }\n\n registryEvent() { \n this.context.container.addEventListener(\"pointerenter\", this.onPointermove)\n this.context.container.addEventListener(\"pointermove\", this.onPointermove)\n this.context.container.addEventListener(\"pointerleave\", this.onPointerleave)\n this.context.container.addEventListener(\"pointerdown\", this.onPointerdown)\n this.context.addEventListener(\"update\", this.onUpdate)\n }\n \n unRegistryEvent() { \n this.context.container.removeEventListener(\"pointerenter\", this.onPointermove)\n this.context.container.removeEventListener(\"pointermove\", this.onPointermove)\n this.context.container.removeEventListener(\"pointerleave\", this.onPointerleave)\n this.context.container.removeEventListener(\"pointerdown\", this.onPointerdown)\n this.context.removeEventListener(\"update\", this.onUpdate)\n }\n\n onUpdate = () => {\n if (this.points.length) {\n this.points.forEach((point, index) => {\n const devicePoint = this.getSvgCoordinate(point)\n if (this.circles[index]) {\n setCirclePosition(this.circles[index], devicePoint.x, devicePoint.y)\n }\n if (index !== 0) {\n setLineStartEnd(this.lines[index - 1], undefined, devicePoint)\n }\n if (this.lines[index]) {\n setLineStartEnd(this.lines[index], devicePoint)\n }\n }) \n }\n }\n \n \n onPointermove = (e: PointerEvent) => { \n // \u5FC5\u987B\u8981\u6709\u4E00\u4E2A\u70B9\u5E76\u4E14\u8FD8\u6CA1\u6709\u95ED\u5408\u624D\u9700\u8981\u5904\u7406\n if (!this.lastLine || this.isClose) { return }\n this.lastLine.style.display = \"block\";\n setLineStartEnd(this.lastLine, undefined, { x: e.offsetX, y: e.offsetY })\n }\n \n onPointerleave = () => { \n // \u5982\u679C\u5DF2\u7ECF\u95ED\u5408\u4E86\u5C31\u4E0D\u9700\u8981\u5904\u7406\u4E86\n if (this.isClose) { return } \n this.lastLine.style.display = \"none\";\n }\n \n onPointerdown = (e: PointerEvent) => {\n // \u5982\u679C\u5DF2\u7ECF\u95ED\u5408\u4E86\n if (this.isClose) { return }\n const point = this.getIntersectByPointerEvent(e)\n if (point) {\n const { offsetX: x, offsetY: y } = e\n if (this.checkAdsorb(x, y)) {\n this.isClose = true\n this.addPoint(this.points[0])\n } else {\n this.addPoint(point)\n }\n const { circle: { fill, radius }, line: { stroke } } = this.context.config.svg\n if (!this.isClose) {\n // \u521B\u5EFA\u4E00\u4E2A\u65B0\u7684\u70B9\n const circle = createCircle(radius, fill)\n setCirclePosition(circle, x, y)\n this.addCircle(circle)\n }\n if (this.lines.length) {\n // \u5982\u679C\u5DF2\u7ECF\u6709\u4E00\u6761\u7EBF\u4E86 \u8981\u95ED\u5408\u8FD9\u6761\u7EBF\n setLineStartEnd(this.lastLine, undefined, { x, y })\n }\n // \u5982\u679C\u8FD9\u4E2A\u591A\u8FB9\u5F62\u8FD8\u6CA1\u6709\u95ED\u5408 \u5C31\u521B\u5EFA\u4E00\u4E2A\u65B0\u7684\u7EBF \u5305\u62EC\u521B\u5EFA\u7B2C\u4E00\u6761\u7EBF\n if (!this.isClose) {\n const line = createLine(stroke)\n // \u8BBE\u7F6E\u7EBF\u7684\u8D77\u59CB\u70B9\n setLineStartEnd(line, { x, y }, { x, y })\n this.addLine(line)\n }\n }\n }\n\n /**\n * \u68C0\u6D4B\u662F\u5426\u53EF\u4EE5\u5438\u9644\n * \u5750\u6807\u70B9\u6700\u5C113\u4E2A \u4F20\u5165\u7684\u5750\u6807\u70B9\u548C\u7B2C\u4E00\u4E2A\u5750\u6807\u7684\u50CF\u7D20\u76F8\u5DEE\u4E0D\u8D85\u8FC75\u4E2A\u50CF\u7D20\n */\n checkAdsorb(x: number, y: number) {\n if (this.points.length < 3) { return false }\n const circle = this.circles[0]\n const cx = +circle.getAttribute(\"cx\")!\n const cy = +circle.getAttribute(\"cy\")!\n return Math.sqrt((x - cx) ** 2 + (y - cy) ** 2) <= 5\n }\n\n addPoint(vector: Vector3) {\n this.points.push(vector)\n if (this.isClose) {\n const area = this.calculatedArea()\n this.dispatchEvent({ type: 'area', area })\n }\n }\n // \u8BA1\u7B97\u9762\u79EF\n calculatedArea() {\n const cds = this.points.map(item => [item.x, item.y])\n let area = 0\n const numPoints = cds.length\n for (let i = 0; i < numPoints; i++) {\n const j = (i + 1) % numPoints\n area += (cds[i][0] * cds[j][1] - cds[j][0] * cds[i][1])\n }\n return Math.abs(area / 2)\n }\n\n dispose() {\n super.dispose()\n this.unRegistryEvent()\n this.lines = []\n this.circles = []\n }\n}", "import { createRect, isContain, setRectPosition, vector3ToDevice } from \"../../utils\";\nimport { Context } from \"../../context\";\nimport { BaseSvg, Graphic } from \"../../elements\";\nimport { Frustum, Vector3 } from \"three\";\n\ninterface BoxSelectionEventMap { \n \"selected\": {\n list: Graphic[]\n }\n}\n\nexport class BoxSelection extends BaseSvg<BoxSelectionEventMap> {\n\n private startPoint?: Vector3;\n\n private endPoint?: Vector3;\n\n rect: SVGElement;\n\n frustum = new Frustum();\n\n constructor(context: Context) { \n super(context);\n const { config: { selectBox: { fill, stroke } } } = context\n this.rect = createRect(stroke, fill)\n this.svg.appendChild(this.rect)\n this.registryEvent()\n }\n\n setEnable(enable: boolean): void {\n super.setEnable(enable)\n setRectPosition(this.rect, 0, 0, 0, 0)\n }\n\n onPointerDown = (e: PointerEvent) => { \n if (!this.enable) { return }\n const point = this.getIntersectByPointerEvent(e)\n if (point) { \n this.startPoint = point\n }\n this.endPoint = undefined;\n }\n\n onPointerMove = (e: PointerEvent) => { \n if (!this.enable || !this.startPoint) { return }\n const point = this.getIntersectByPointerEvent(e)\n if (point) { \n this.endPoint = point\n }\n }\n\n onPointerUp = (e: PointerEvent) => { \n if (!this.enable) { return }\n const point = this.getIntersectByPointerEvent(e)\n if (point) { \n this.endPoint = point\n }\n this.doSelect()\n this.startPoint = undefined\n }\n\n onUpdate = () => {\n if (this.startPoint) {\n const startPoint = this.getSvgCoordinate(this.startPoint)\n let endPoint = { ...startPoint }\n if (this.endPoint) {\n endPoint = this.getSvgCoordinate(this.endPoint)\n }\n const leftTop = { x: Math.min(startPoint.x, endPoint.x), y: Math.min(startPoint.y, endPoint.y) }\n const width = Math.abs(endPoint.x - startPoint.x)\n const height = Math.abs(endPoint.y - startPoint.y)\n setRectPosition(this.rect, leftTop.x, leftTop.y, width, height)\n }\n \n }\n\n registryEvent() { \n this.context.container.addEventListener(\"pointerdown\", this.onPointerDown)\n this.context.container.addEventListener(\"pointermove\", this.onPointerMove)\n this.context.container.addEventListener(\"pointerup\", this.onPointerUp)\n this.context.addEventListener(\"update\", this.onUpdate)\n }\n \n unRegistryEvent() { \n this.context.container.removeEventListener(\"pointerdown\", this.onPointerDown)\n this.context.container.removeEventListener(\"pointermove\", this.onPointerMove)\n this.context.container.removeEventListener(\"pointerup\", this.onPointerUp)\n this.context.removeEventListener(\"update\", this.onUpdate)\n }\n\n doSelect() { \n if (this.startPoint && this.endPoint) {\n const dis = this.startPoint.distanceTo(this.endPoint);\n if (dis < 0.1) { return }\n const { context: { camera, container: { clientWidth: w, clientHeight: h } } } = this\n const startDevice = vector3ToDevice(this.startPoint!, camera, w, h)\n const endDevice = vector3ToDevice(this.endPoint!, camera, w, h)\n const leftTop = { x: Math.min(startDevice.x, endDevice.x), y: Math.min(startDevice.y, endDevice.y) }\n const rightBottom = { x: Math.max(startDevice.x, endDevice.x), y: Math.max(startDevice.y, endDevice.y) }\n const list = this.searchMapInFrustum(leftTop, rightBottom);\n this.dispatchEvent({ type: \"selected\", list })\n }\n }\n\n searchMapInFrustum(leftTop: { x: number, y: number }, rightBottom: { x: number, y: number }): Graphic[] {\n const { context } = this\n return context.currentFloor?.graphicLayer.children.filter(item => {\n return item instanceof Graphic && this.searchChildInFrustum(item, leftTop, rightBottom)\n }) as Graphic[] || []\n }\n\n searchChildInFrustum(object: Graphic, leftTop: { x: number, y: number }, rightBottom: { x: number, y: number }): boolean {\n const { context: { camera, container: { clientWidth: w, clientHeight: h } } } = this\n if (!object) return false;\n if (!object.mesh.geometry.boundingBox) {\n object.mesh.geometry.computeBoundingBox();\n }\n const box = object.mesh.geometry.boundingBox;\n if (!box) { return false }\n const { min, max } = box\n const minDevice = vector3ToDevice(min, camera, w, h)\n const maxDevice = vector3ToDevice(max, camera, w, h)\n \n if (!isContain(minDevice, leftTop, rightBottom)) { return false }\n if (!isContain(maxDevice, leftTop, rightBottom)) { return false; }\n return true;\n }\n\n dispose() {\n this.unRegistryEvent()\n }\n}\n\n", "import { Graphic } from \"../../elements\";\nimport { Context } from \"../../context\";\nimport { EventDispatcher } from \"three\";\nimport { Timer } from \"../../utils\";\n\ninterface HoverHelperEventMap {\n \"hover-change\": {\n graphics: Graphic[]\n },\n}\n\nexport class HoverHelper extends EventDispatcher<HoverHelperEventMap> { \n\n curGraphics = new Set<Graphic>()\n\n timer = new Timer()\n\n graphicTimerMap = new Map<Graphic, number>()\n \n constructor(private context: Context) {\n super()\n this.registryEvent()\n }\n\n onPointerMove = ({ graphics }: { graphics: Graphic[] }) => {\n if (!graphics.length && this.curGraphics.size) {\n this.curGraphics.clear()\n this.handleHoverGraphicsChange()\n return\n }\n const { time } = this.context.config.hover\n graphics.forEach((graphic) => {\n // \u5982\u679C\u5DF2\u7ECF\u6709hover\u7684\u5B9A\u65F6\u5668\u5728\u6267\u884C\u4E86\u5C31\u8FD4\u56DE\n if (this.graphicTimerMap.get(graphic)) { \n return\n }\n // \u5982\u679C\u8FD9\u4E2A\u5143\u7D20\u7684hover\u5DF2\u7ECF\u89E6\u53D1\u8FC7\u4E86\u5C31\u8FD4\u56DE\n if (this.curGraphics.has(graphic)) { \n return\n }\n // \u8FD9\u4E2A\u5143\u7D20\u6CA1\u6709\u89E6\u53D1\u8FC7\u4E5F\u6CA1\u6709\u5B9A\u65F6\u5668\u5C31\u6DFB\u52A0\u4E00\u4E2A\u5B9A\u65F6\u5668\n const timer = this.timer.setTimeout(() => {\n this.curGraphics.add(graphic)\n this.handleHoverGraphicsChange()\n }, time)\n this.graphicTimerMap.set(graphic, timer)\n })\n // \u5982\u679C\u5B9A\u65F6\u5668\u7684\u5143\u7D20\u4E0D\u5B58\u5728\u5728\u5F53\u524Dgraphics\u4E2D\u4E86\u5C31\u5220\u9664\n this.graphicTimerMap.forEach((timer, graphic) => { \n if (!graphics.includes(graphic)) { \n this.timer.clearTimeout(timer)\n this.graphicTimerMap.delete(graphic)\n }\n })\n // \u5982\u679C\u5DF2\u7ECFhover\u7684\u5143\u7D20\u4E0D\u5B58\u5728\u5728\u5F53\u524D\u7684graphics\u4E86\u5C31\u5220\u9664\n const size = this.curGraphics.size\n this.curGraphics.forEach((graphic) => { \n if (!graphics.includes(graphic)) { \n this.curGraphics.delete(graphic)\n }\n })\n // \u5982\u679C\u6709\u5220\u9664\u5C31\u89E6\u53D1\u4E8B\u4EF6\n if (size !== this.curGraphics.size) {\n this.handleHoverGraphicsChange()\n }\n }\n\n onPointerLevel = () => {\n this.curGraphics.clear()\n this.handleHoverGraphicsChange()\n }\n\n handleHoverGraphicsChange(graphics = this.curGraphics) { \n this.dispatchEvent({ type: 'hover-change', graphics: Array.from(this.curGraphics) })\n }\n\n registryEvent() {\n this.context.addEventListener(\"pointer-over\", this.onPointerMove)\n this.context.addEventListener(\"pointer-move\", this.onPointerMove)\n this.context.addEventListener(\"pointer-level\", this.onPointerLevel)\n }\n\n unRegistryEvent() {\n this.context.removeEventListener(\"pointer-over\", this.onPointerMove)\n this.context.removeEventListener(\"pointer-move\", this.onPointerMove)\n this.context.removeEventListener(\"pointer-level\", this.onPointerLevel)\n }\n\n dispose() {\n this.unRegistryEvent()\n this.timer.dispose()\n }\n}", "import { merge } from 'lodash'\nimport { HeatmapConfiguration } from '@mars3d/heatmap.js'\n\nexport interface Config {\n apiDomain: string,\n apiInfo: RequestInit,\n apiPath: {\n floorGraphic: string,\n floorRange: string\n },\n heatMap: Partial<HeatmapConfiguration>,\n useFloorCache: boolean;\n control: {\n maxPolar: number\n },\n svg: {\n circle: {\n radius: string;\n fill: string;\n },\n line: {\n stroke: string;\n }\n },\n selectBox: {\n stroke: string;\n fill: string;\n },\n hover: {\n time: number;\n }\n}\n\nexport const defaultConfig: Config = {\n apiDomain: \"\",\n apiInfo: {},\n apiPath: {\n floorGraphic: \"/api/inception-map/floor/get\",\n floorRange: \"/api/inception-map/range/get\"\n },\n heatMap: {\n radius: 50,\n gradient: {\n 0: '#8F9FCD',\n 0.5: '#6284FF',\n 1: '#F95D5D',\n },\n },\n useFloorCache: true,\n control: {\n maxPolar: 1.2\n },\n svg: {\n circle: {\n radius: \"2\",\n fill: \"#1CADFF\"\n },\n line: {\n stroke: \"#1CADFF\"\n }\n },\n selectBox: {\n stroke: \"#1CADFF\",\n fill: \"rgba(28, 173, 255, 0.3)\"\n },\n hover: {\n time: 500\n }\n}\n\nexport function getConfig(config: Partial<Config>): Config {\n return merge({}, defaultConfig, config);\n}"],
5
- "mappings": "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",
6
- "names": ["EventDispatcher", "Timer", "__publicField", "fn", "timer", "wait", "Scene", "WebGLRenderer", "OrthographicCamera", "HemisphereLight", "Shape", "PCFSoftShadowMap", "Group", "Color", "DirectionalLight", "AmbientLight", "Path", "Vector2", "MapControls", "initScene", "scene", "initRenderer", "renderer", "initCamera", "width", "height", "camera", "initLight", "lights", "hemisphereLight", "ambientLight", "initControl", "domElement", "control", "initShape", "path", "holePath", "shape", "item", "cur", "hole", "initDirectionalLight", "color", "intensity", "directionalLight", "dispose", "recursive", "_a", "child", "m", "mat", "hasChinese", "str", "DataTexture", "RGBAFormat", "LinearFilter", "textTextureMap", "initCanvas", "canvas", "ctx", "createCanvas", "c", "t", "getTextureByText", "text", "y", "hasChinese", "width", "imageData", "texture", "DataTexture", "RGBAFormat", "LinearFilter", "clearTextTexture", "clearCanvas", "point", "featureCollection", "center", "vector3ToDevice", "vector", "camera", "w", "h", "_vector", "_w", "_h", "x", "y", "getCenter", "coordinates", "features", "item", "isContain", "start", "end", "proxyOptions", "target", "master", "p", "receiver", "newValue", "res", "timeoutPromise", "promise", "timeout", "resolve", "reject", "createSvgElement", "tag", "createSvg", "w", "h", "svg", "createCircle", "radius", "fill", "circle", "createLine", "stroke", "line", "createRect", "rect", "setCirclePosition", "x", "y", "setLineStartEnd", "start", "end", "setRectPosition", "EventDispatcher", "Box2", "Vector3", "Vector2", "Raycaster", "Box3", "Color", "AmbientLight", "TweenGroup", "Tween", "EventDispatcher", "Object3D", "ExtrudeGeometry", "MeshStandardMaterial", "Mesh", "Color", "Box3", "LineSegments", "EdgesGeometry", "LineBasicMaterial", "Vector3", "merge", "defaultOptions", "Graphic", "Object3D", "context", "options", "__publicField", "proxyOptions", "merge", "x", "y", "value", "Color", "center", "Vector3", "box", "Box3", "size", "shape", "initShape", "ExtrudeGeometry", "MeshStandardMaterial", "LineBasicMaterial", "Mesh", "material", "geometry", "EdgesGeometry", "line", "LineSegments", "raycaster", "intersects", "position", "distance", "dispose", "Object3D", "PlaneGeometry", "Mesh", "ShadowMaterial", "Color", "DoubleSide", "Shadow", "Object3D", "__publicField", "directionalLight", "initDirectionalLight", "size", "x", "y", "color", "Color", "position", "width", "height", "geometry", "PlaneGeometry", "material", "ShadowMaterial", "DoubleSide", "mesh", "Mesh", "target", "opacity", "dispose", "Object3D", "merge", "Box3", "EventDispatcher", "Vector3", "Overlay", "EventDispatcher", "context", "__publicField", "Vector3", "vector", "clientWidth", "clientHeight", "x", "y", "vector3ToDevice", "div", "element", "visible", "display", "opacity", "Box3", "defaultOptions", "Poi", "Object3D", "context", "options", "__publicField", "proxyOptions", "merge", "Overlay", "value", "div", "textDiv", "f", "item", "_a", "_b", "img", "visible", "x", "y", "box", "Box3", "Object3D", "Vector3", "Box3", "Vector3", "Object3D", "Layer", "Object3D", "context", "dispose", "GraphicLayer", "Layer", "context", "__publicField", "Box3", "Vector3", "options", "graphic", "Graphic", "raycaster", "initData", "data", "res", "item", "pos", "distance", "PoiLayer", "Layer", "context", "__publicField", "options", "poi", "Poi", "index", "item", "i", "x", "y", "range", "left", "right", "top", "bottom", "valid", "box", "xIntersect", "yIntersect", "MeshBasicMaterial", "Object3D", "PlaneGeometry", "Texture", "DoubleSide", "Mesh", "Matrix3", "Vector2", "create", "featureCollection", "point", "bbox", "getCenter", "HeatmapElement", "Object3D", "context", "__publicField", "data", "width", "height", "leftTop", "center", "create", "__spreadValues", "geometry", "PlaneGeometry", "texture", "Texture", "material", "MeshBasicMaterial", "DoubleSide", "Mesh", "x", "y", "Matrix3", "matrix", "item", "vector", "Vector2", "features", "featureCollection", "point", "box", "bbox", "getCenter", "Floor", "Object3D", "context", "__publicField", "Shadow", "GraphicLayer", "PoiLayer", "grounds", "ground", "Box3", "Vector3", "box", "center", "size", "graphicOptions", "poiOptions", "data", "HeatmapElement", "opacity", "visible", "_a", "EventDispatcher", "Vector3", "BaseSvg", "EventDispatcher", "context", "__publicField", "createSvg", "enable", "e", "camera", "renderer", "x", "y", "clientWidth", "clientHeight", "nx", "ny", "Vector3", "vector", "container", "vector3ToDevice", "SvgLine", "BaseSvg", "context", "__publicField", "point1", "setCirclePosition", "setLineStartEnd", "point2", "e", "point", "x", "y", "circle", "line", "createCircle", "createLine", "enable", "vector", "distance", "x1", "y1", "x2", "y2", "__pow", "SvgPolygon", "BaseSvg", "context", "__publicField", "point", "index", "devicePoint", "setCirclePosition", "setLineStartEnd", "e", "x", "y", "fill", "radius", "stroke", "circle", "createCircle", "line", "createLine", "enable", "cx", "cy", "__pow", "vector", "area", "cds", "item", "numPoints", "i", "j", "Frustum", "BoxSelection", "BaseSvg", "context", "__publicField", "Frustum", "e", "point", "startPoint", "endPoint", "__spreadValues", "leftTop", "width", "height", "setRectPosition", "fill", "stroke", "createRect", "enable", "camera", "w", "h", "startDevice", "vector3ToDevice", "endDevice", "rightBottom", "list", "_a", "item", "Graphic", "object", "box", "min", "max", "minDevice", "maxDevice", "isContain", "Selection", "EventDispatcher", "context", "__publicField", "e", "graphics", "item", "list", "BoxSelection", "EventDispatcher", "HoverHelper", "EventDispatcher", "context", "__publicField", "Timer", "graphics", "time", "graphic", "timer", "size", "Context", "EventDispatcher", "container", "config", "__publicField", "initScene", "initRenderer", "initLight", "Timer", "TweenGroup", "camera", "renderer", "w", "h", "e", "graphics", "position", "pois", "Selection", "HoverHelper", "initCamera", "initControl", "_a", "polarAngle", "point1", "Vector3", "point2", "clientWidth", "clientHeight", "device1", "vector3ToDevice", "device2", "__pow", "color", "item", "AmbientLight", "Color", "floor", "x", "y", "point", "Vector2", "raycaster", "Raycaster", "polar", "duration", "timeoutPromise", "resolve", "start", "end", "tween", "Tween", "zoom", "center", "lookAtVector", "object", "padding", "top", "right", "bottom", "left", "boundingBox", "Box3", "max", "min", "max2d", "min2d", "size", "Box2", "xScale", "yScale", "scale", "light", "dispose", "merge", "defaultConfig", "getConfig", "config", "BMap", "EventDispatcher", "container", "config", "__publicField", "e", "polar", "azimuthal", "getConfig", "Context", "_0", "__async", "brand", "project", "phase", "building", "floor", "ts", "resource_type_list", "apiDomain", "floorGraphic", "apiInfo", "url", "res", "item", "key", "floorRange", "data", "floorKey", "buildGround", "center", "getCenter", "cds", "coord", "x", "y", "curFloor", "Floor", "groundGraphics", "ground", "Graphic", "graphicData", "legacyToGraphicMap", "graphics", "graphic", "curFloorData", "buildingKey", "createdFloor", "_a", "options", "poi", "position", "ele", "duration", "vector", "clientWidth", "clientHeight", "vector3ToDevice", "type", "zoom", "cameraZoom", "keys", "radius", "resolve", "reject", "SvgLine", "dispose", "distance", "SvgPolygon", "area", "nodeId", "clearTextTexture", "clearCanvas"]
3
+ "sources": ["../src/bmap.ts", "../src/utils/timer.ts", "../src/utils/init-helper.ts", "../src/utils/dispose.ts", "../src/utils/rules.ts", "../src/utils/texture.ts", "../src/utils/coordinate.ts", "../src/utils/proxy.ts", "../src/utils/promise.ts", "../src/utils/svg.ts", "../src/context.ts", "../src/operations/selection/selection.ts", "../src/elements/graphic.ts", "../src/elements/shadow.ts", "../src/elements/poi.ts", "../src/elements/overlay.ts", "../src/elements/floor.ts", "../src/layer/graphic-layer.ts", "../src/layer/layer.ts", "../src/layer/poi-layer.ts", "../src/elements/heatmap.ts", "../src/elements/base-svg.ts", "../src/elements/svg-line.ts", "../src/elements/svg-polygon.ts", "../src/elements/select-box.ts", "../src/operations/selection/box-selection.ts", "../src/operations/hover/hover-helper.ts", "../src/config.ts"],
4
+ "sourcesContent": ["import { EventDispatcher, Object3D } from \"three\";\nimport { Context } from \"./context\";\nimport { clearTextTexture, clearCanvas, vector3ToDevice, getCenter } from \"./utils\";\nimport { Config, getConfig } from './config'\nimport {Floor, Graphic, HeatmapDataParam, PoiOptionsParam} from \"./elements\";\nimport { SvgLine, SvgPolygon } from \"./elements\";\nimport { GraphicInfo, GraphicOptions, PolygonGeometry, ResGraphicInfo } from \"./types\";\n\nexport interface LoadQuery {\n brand: string;\n project: string;\n phase: string;\n building: string;\n floor: string;\n ts: string;\n resource_type_list: string;\n}\n\nexport class BMap extends EventDispatcher {\n config: Config;\n\n public context: Context;\n\n private polarKeys: string[] = [];\n\n private azimuthalKeys: string[] = [];\n\n private svgLine?: SvgLine;\n\n private svgPolygon?: SvgPolygon;\n\n public basicZoom = 1;\n\n floorDataMap: Map<string, GraphicInfo[]> = new Map()\n\n buildingGroundMap = new Map<string, GraphicInfo | null>()\n\n currentBuildGround: GraphicInfo | null = null\n\n constructor(private container: HTMLElement, config: Partial<Config> = {}) {\n super();\n this.config = getConfig(config)\n this.context = new Context(container, this.config);\n this.registryEvent();\n this.context.render();\n }\n\n private async loadGraphics({ brand, project, phase, building, floor, ts, resource_type_list }: LoadQuery): Promise<GraphicInfo[]> {\n const { apiDomain, apiPath: { floorGraphic }, apiInfo } = this.config\n const url = `${apiDomain}${floorGraphic}?brand=${brand}&project=${project}&phase=${phase}&building=${building}&floor=${floor}&ts=${ts}&resource_type_list=${resource_type_list}`\n const data = await fetch(url, apiInfo)\n .then((res) => res.json())\n .then(res => res.data)\n .then((res: ResGraphicInfo[]): GraphicInfo[] => {\n (res || []).map(item => item.info = (JSON.parse(item.info)))\n return (res || []) as unknown as GraphicInfo[]\n })\n return data\n }\n\n getBuildingKey({ brand, project, phase, building }: Omit<LoadQuery, \"floor\" | \"ts\" | \"resource_type_list\">) {\n const key = `${brand}-${project}-${phase}-${building}`\n return key\n }\n\n private async loadBuildingGround({ brand, project, phase, building }: Omit<LoadQuery, \"floor\" | \"ts\" | \"resource_type_list\">): Promise<GraphicInfo | null>{ \n const key = this.getBuildingKey({ brand, project, phase, building })\n if (this.buildingGroundMap.get(key)) { \n return this.buildingGroundMap.get(key) || null\n }\n const { apiDomain, apiPath: { floorRange }, apiInfo } = this.config\n const url = `${apiDomain}${floorRange}?brand=${brand}&project=${project}&phase=${phase}&building=${building}`\n const data = await fetch(url, apiInfo)\n .then((res) => res.json())\n .then(res => res.data)\n .then((res: ResGraphicInfo[]): GraphicInfo | null => {\n const data = (res || [])[0]\n if (data) {\n data.info = JSON.parse(data.info)\n }\n return data as unknown as GraphicInfo | null\n })\n this.buildingGroundMap.set(key, data)\n return data\n }\n \n getFloorKey({ brand, project, phase, building, floor, ts, resource_type_list }: LoadQuery) { \n const floorKey = `${brand}-${project}-${phase}-${building}-${floor}-${ts}-${resource_type_list}`\n return floorKey\n }\n\n async load({ brand, project, phase, building, floor, ts, resource_type_list }: LoadQuery) {\n const floorKey = this.getFloorKey({ brand, project, phase, building, floor, ts, resource_type_list })\n if (this.floorDataMap.get(floorKey)) { return }\n const [data, buildGround] = await Promise.all([\n this.loadGraphics({ brand, project, phase, building, floor, ts, resource_type_list }),\n this.loadBuildingGround({ brand, project, phase, building })\n ])\n if (buildGround) {\n const center = getCenter((buildGround.info.geometry as PolygonGeometry).cds[0])\n data.forEach(item => {\n if (item.info.geometry.type === \"polygon\") { \n item.info.geometry.cds.map(cds => {\n if (Array.isArray(cds)) {\n cds.forEach(coord => {\n coord[0] -= center[0]\n coord[1] -= center[1]\n })\n }\n })\n } else {\n // point\n const [x, y] = item.info.geometry.cds\n item.info.geometry.cds = [x - center[0], y - center[1]]\n }\n })\n }\n if (!this.config.useFloorCache) {\n this.floorDataMap.clear()\n }\n this.floorDataMap.set(floorKey, data)\n return data\n }\n\n private createFloor(data: GraphicInfo[]) { \n const curFloor = new Floor(this.context)\n if (!data.length) { return {curFloor, graphics: []} }\n // \u627E\u51FA\u5730\u9762\u56FE\u5143\n const grounds = data.filter(item => item.info.group === \"ground\")\n const groundGraphics = grounds.map(ground => new Graphic(this.context, ground.info))\n curFloor.addGrounds(groundGraphics)\n const graphicData = data.filter(item => item.info.group !== \"ground\")\n const legacyToGraphicMap = new Map<string, Graphic>()\n const graphics = graphicData.map(item => { \n const graphic = curFloor.addGraphic(item.info)\n graphic.userData.data = item\n legacyToGraphicMap.set(item.legacy_id, graphic)\n return graphic\n })\n curFloor.addShadow()\n curFloor.userData.legacyToGraphicMap = legacyToGraphicMap\n return { curFloor, graphics }\n }\n\n async switchFloor({ brand, project, phase, building, floor, ts, resource_type_list }: LoadQuery) {\n const floorKey = this.getFloorKey({ brand, project, phase, building, floor, ts, resource_type_list })\n const curFloorData = this.floorDataMap.get(floorKey)\n if (curFloorData) {\n const buildingKey = this.getBuildingKey({ brand, project, phase, building })\n this.currentBuildGround = this.buildingGroundMap.get(buildingKey) || null\n const createdFloor = this.createFloor(curFloorData)\n if (createdFloor) {\n this.context.switchFloor(createdFloor.curFloor)\n // \u8BBE\u7F6Ezoom\n this.context.control.minZoom = 0;\n this.context.control.maxZoom = Infinity;\n await this.context.fitCameraToGround(undefined, 0);\n this.basicZoom = this.context.camera.zoom;\n // \u8BBE\u7F6Ezoom\n this.context.control.minZoom = this.basicZoom;\n this.context.control.maxZoom = this.basicZoom * 25;\n } else {\n console.warn(\"[switchFloor error] [\"+ floor +\"] \u697C\u5C42\u6CA1\u6709\u6570\u636E\")\n }\n } else {\n console.warn(\"[switchFloor error] \u6CA1\u6709\u8FD9\u4E2A\u697C\u5C42\uFF0C\u8BF7\u5148\u8C03\u7528load\u65B9\u6CD5\u52A0\u8F7D\u697C\u5C42\")\n }\n }\n\n addHeatmap(data: HeatmapDataParam) {\n return this.context.currentFloor?.addHeatmap(data)\n }\n\n getLegacyToGraphicMap() {\n return this.context.currentFloor?.userData.legacyToGraphicMap || new Map()\n }\n\n /**\n * \u83B7\u53D6\u5F53\u524D\u697C\u5C42\u5168\u90E8\u7684graphic\n * @returns \n */\n getFloorAllGraphics(): Graphic[] {\n return this.context.currentFloor?.graphicLayer.children.filter(item => item instanceof Graphic) as Graphic[] || []\n }\n\n createGraphicPoi(graphic: Graphic, options: PoiOptionsParam) { \n if (this.context.currentFloor) {\n const poi = this.context.currentFloor.addPoi(options)\n // \u8BA9poi\u663E\u793A\u5728\u56FE\u5143\u7684\u4E0A\u9762\n const position = graphic.getCenter()\n position.z += graphic.options.height / 2\n poi.position.copy(position)\n poi.position.z = poi.position.z + graphic.options.height / 2\n return poi\n }\n return null\n }\n\n removeHeatMap() {\n this.context.currentFloor?.removeHeatMap()\n }\n\n /**\n * \u79FB\u52A8\u76F8\u673A\u4F4D\u7F6E\u8BA9\u9009\u4E2D\u7684\u5143\u7D20\u5C45\u4E2D\u663E\u793A\n * @param ele { Graphic | Poi }\n * @param duration\n */\n translateElementToCenter(ele: Object3D, duration: number = 500) {\n const position = ele.position\n .clone()\n .setFromMatrixPosition(ele.matrixWorld);\n return this.context.setCameraPosition(position, duration);\n }\n\n /**\n * \u83B7\u53D6\u7269\u4F53\u7684\u5C4F\u5E55\u5750\u6807\n */\n getElementDeviceCoordinate(ele: Object3D) {\n const vector = ele.position.clone();\n const { clientWidth, clientHeight } = this.container;\n return vector3ToDevice(\n vector,\n this.context.camera,\n clientWidth,\n clientHeight\n );\n }\n\n /**\n * \u5207\u63622d\u30013d\u89C6\u89D2\n * @param type\n * @param duration\n */\n changeMapType(type: \"2d\" | \"3d\", duration = 500) {\n if (type === \"2d\") {\n this.context.setPolarAngle(0);\n } else {\n this.context.setPolarAngle(1.2);\n }\n }\n\n /**\n * \u7F29\u5C0F\u5730\u56FE\n * @param zoom\n * @param duration\n * @returns\n */\n reduceMap(zoom = 0.5, duration = 500) {\n const cameraZoom = this.context.camera.zoom;\n return this.context.setZoom(\n cameraZoom - zoom,\n this.context.control.target,\n duration\n );\n }\n\n /**\n * \u653E\u5927\u5730\u56FE\n * @param zoom\n * @param duration\n * @returns\n */\n enlargeMap(zoom = 0.5, duration = 500) {\n const cameraZoom = this.context.camera.zoom;\n return this.context.setZoom(\n cameraZoom + zoom,\n this.context.control.target,\n duration\n );\n }\n\n onKeydown = (e: KeyboardEvent) => {\n if (this.polarKeys.includes(e.code)) {\n this.context.control.maxPolarAngle = this.config.control.maxPolar;\n this.context.control.minPolarAngle = 0;\n }\n if (this.azimuthalKeys.includes(e.code)) {\n this.context.control.maxAzimuthAngle = Infinity;\n this.context.control.minAzimuthAngle = Infinity;\n }\n };\n\n onKeyUp = (e: KeyboardEvent) => {\n if (this.polarKeys.includes(e.code)) {\n const polar = this.context.control.getPolarAngle();\n this.context.control.maxPolarAngle = polar;\n this.context.control.minPolarAngle = polar;\n }\n if (this.azimuthalKeys.includes(e.code)) {\n const azimuthal = this.context.control.getAzimuthalAngle();\n this.context.control.maxAzimuthAngle = azimuthal;\n this.context.control.minAzimuthAngle = azimuthal;\n }\n };\n\n registryEvent() {\n window.addEventListener(\"keydown\", this.onKeydown);\n window.addEventListener(\"keyup\", this.onKeyUp);\n }\n\n unRegistryEvent() {\n window.removeEventListener(\"keydown\", this.onKeydown);\n window.removeEventListener(\"keyup\", this.onKeyUp);\n }\n\n /**\n * \u914D\u7F6E\u5750\u6807\u5B9A\u70B9 2D/3D\u7EBF\u6027\u5207\u6362\u7684\u5FEB\u6377\u952E\n * @param key\n */\n configurePolarShortcutKeys(keys: string[]) {\n this.polarKeys = keys;\n }\n\n configureAzimuthalShortcutKeys(keys: string[]) {\n this.azimuthalKeys = keys;\n }\n\n rotateMap(radius = 0.1) {\n const azimuthal = this.context.control.getAzimuthalAngle();\n this.context.control.maxAzimuthAngle = azimuthal + radius;\n this.context.control.minAzimuthAngle = azimuthal + radius;\n this.context.control.update()\n }\n\n /**\n * \u6D4B\u91CF\u8DDD\u79BB\n * @returns \n */\n async measureDistance() { \n this.cancelDistance()\n return new Promise((resolve, reject) => { \n this.changeMapType('2d', 0)\n this.context.control.enableRotate = false; // \u6D4B\u91CF\u53EA\u80FD\u57282d\u4E2D\u8FDB\u884C\n this.svgLine = new SvgLine(this.context)\n const dispose = this.svgLine.dispose.bind(this.svgLine)\n this.svgLine.dispose = function () {\n dispose();\n reject(\"cancel\")\n }\n this.svgLine.addEventListener(\"distance\", ({ distance }) => {\n resolve(distance)\n })\n }) \n }\n\n /**\n * \u53D6\u6D88\u6D4B\u91CF\u957F\u5EA6\n */\n cancelDistance() {\n if (this.svgLine) {\n this.svgLine.dispose()\n this.svgLine = undefined;\n this.context.control.enableRotate = true;\n }\n }\n\n /**\n * \u6D4B\u91CF\u9762\u79EF\n */\n measureArea() { \n this.cancelArea()\n return new Promise((resolve, reject) => {\n this.changeMapType('2d', 0)\n this.context.control.enableRotate = false; // \u6D4B\u91CF\u53EA\u80FD\u57282d\u4E2D\u8FDB\u884C\n this.svgPolygon = new SvgPolygon(this.context)\n const dispose = this.svgPolygon.dispose.bind(this.svgPolygon)\n this.svgPolygon.dispose = function () {\n dispose();\n reject(\"cancel\")\n }\n this.svgPolygon.addEventListener(\"area\", ({ area }) => {\n resolve(area)\n })\n })\n }\n\n /**\n * \u53D6\u6D88\u6D4B\u91CF\u9762\u79EF\n */\n cancelArea() {\n if (this.svgPolygon) {\n this.svgPolygon.dispose()\n this.svgPolygon = undefined\n this.context.control.enableRotate = true;\n }\n }\n\n /**\n * \u6839\u636EnodeId \u83B7\u53D6graphic\n */\n getGraphicByNodeId(nodeId: string) {\n if (this.context.currentFloor) {\n return this.context.currentFloor.graphicLayer.graphicMap.get(nodeId) || null\n }\n return null\n }\n\n deleteGraphic(graphic: Graphic) {\n if (this.context.currentFloor) {\n this.context.currentFloor.graphicLayer.remove(graphic)\n graphic.dispose()\n this.context.currentFloor.graphicLayer.graphicMap.delete(graphic.options.id)\n }\n }\n\n createGraphicByOptions(options: GraphicOptions) {\n if (this.currentBuildGround) {\n const center = getCenter((this.currentBuildGround.info.geometry as PolygonGeometry).cds[0])\n if (options.geometry.type === \"polygon\") {\n options.geometry.cds.map(cds => {\n if (Array.isArray(cds)) {\n cds.forEach(coord => {\n coord[0] -= center[0]\n coord[1] -= center[1]\n })\n }\n })\n } else {\n // point\n const [x, y] = options.geometry.cds\n options.geometry.cds = [x - center[0], y - center[1]]\n }\n }\n return this.context.currentFloor?.graphicLayer.createGraphic(options)\n }\n\n dispose() {\n this.context.dispose();\n clearTextTexture();\n clearCanvas();\n this.unRegistryEvent();\n }\n}\n", "type Fn = (...arg: any) => any\n\n/**\n * \u4EFB\u52A1\u7BA1\u7406\u5668\n * \u5728\u7C7B\u9500\u6BC1\u7684\u65F6\u5019\uFF0C\u8981\u6E05\u9664\u6240\u6709\u7684\u5F02\u6B65\u5B9A\u65F6\u5668\n */\nexport class Timer { \n tasks = {\n requestAnimation: new Set<number>(),\n timeout: new Set<number>(),\n interval: new Set<number>()\n }\n\n requestAnimationFrame(fn: Fn): number { \n const timer = window.requestAnimationFrame(() => {\n this.tasks.requestAnimation.delete(timer)\n fn()\n })\n this.tasks.requestAnimation.add(timer)\n return timer\n }\n\n cancelAnimationFrame(timer: number) { \n this.tasks.requestAnimation.delete(timer)\n window.cancelAnimationFrame(timer)\n }\n\n setTimeout(fn: Fn, wait: number): number { \n const timer = window.setTimeout(() => {\n this.tasks.timeout.delete(timer)\n fn()\n }, wait)\n this.tasks.timeout.add(timer)\n return timer\n }\n\n clearTimeout(timer: number) {\n this.tasks.timeout.delete(timer)\n window.clearTimeout(timer)\n }\n\n setInterval(fn: Fn, wait: number): number { \n const timer = window.setInterval(() => {\n this.tasks.interval.delete(timer)\n fn()\n }, wait)\n this.tasks.interval.add(timer)\n return timer\n }\n\n clearInterval(timer: number) {\n this.tasks.interval.delete(timer)\n window.clearInterval(timer)\n }\n\n dispose() { \n this.tasks.requestAnimation.forEach(timer => {\n window.cancelAnimationFrame(timer)\n })\n this.tasks.requestAnimation.clear()\n this.tasks.timeout.forEach(timer => {\n window.clearTimeout(timer)\n })\n this.tasks.timeout.clear()\n this.tasks.interval.forEach(timer => {\n window.clearInterval(timer)\n }) \n this.tasks.interval.clear()\n }\n}", "import { Coordinate } from 'src/types'\nimport {\n Scene, WebGLRenderer, OrthographicCamera, HemisphereLight, Shape, \n PCFSoftShadowMap, Group, Color, DirectionalLight, AmbientLight, Path, Vector2\n} from 'three'\nimport { MapControls } from 'three/examples/jsm/controls/MapControls'\n\nexport function initScene() {\n const scene = new Scene()\n scene.background = new Color(0xffffff)\n return scene\n}\n\nexport function initRenderer() {\n const renderer = new WebGLRenderer({antialias: true})\n renderer.setClearColor(0xffffff);\n renderer.setPixelRatio(window.devicePixelRatio);\n renderer.shadowMap.enabled = true;\n renderer.shadowMap.autoUpdate = true;\n renderer.shadowMap.type = PCFSoftShadowMap;\n return renderer\n}\n\nexport function initCamera(width: number, height: number): OrthographicCamera {\n const camera = new OrthographicCamera(-width / 2, width / 2, height / 2, -height / 2, -1000, 5000)\n camera.up.set(0, 0, 1);\n camera.position.set(0, 0, 100);\n camera.lookAt(0, 0, 0);\n return camera\n}\n\nexport function initLight() {\n const lights = new Group()\n // \u534A\u7403\u5149\n const hemisphereLight = new HemisphereLight(0xffffff, 0xeeeeee, 1);\n hemisphereLight.intensity = 1;\n hemisphereLight.position.set(0, 0, 10);\n hemisphereLight.up.set(0, 0, 1);\n lights.add(hemisphereLight)\n const ambientLight = new AmbientLight( 0xffffff );\n lights.add(ambientLight)\n return lights\n}\n\nexport function initControl(camera: OrthographicCamera, domElement: HTMLCanvasElement) {\n const control = new MapControls(camera, domElement)\n // \u7981\u7528\u963B\u5C3C\n control.enableDamping = false\n // \u8BBE\u7F6E2.5D\n control.maxPolarAngle = 0\n control.minPolarAngle = 0\n // \u7981\u7528\u6C34\u5E73\u65CB\u8F6C\n control.maxAzimuthAngle = 0\n control.minAzimuthAngle = 0\n return control\n}\n\nexport function initShape(path: Coordinate[], holePath: Coordinate[][] = []) { \n const shape = new Shape(path.map(item => new Vector2(...item)));\n if (holePath.length) {\n holePath.forEach(cur => {\n var hole = new Path(cur.map(item => new Vector2(...item)));\n shape.holes.push(hole);\n })\n }\n return shape\n}\n\nexport function initDirectionalLight(color = 0xffffff, intensity = 1) {\n const directionalLight = new DirectionalLight(color, intensity);\n directionalLight.castShadow = true;\n directionalLight.shadow.radius = 8;\n directionalLight.shadow.bias = -0.001;\n directionalLight.shadow.mapSize.set(256, 256);\n directionalLight.shadow.camera.left = -200;\n directionalLight.shadow.camera.right = 200;\n directionalLight.shadow.camera.top = 200;\n directionalLight.shadow.camera.bottom = -200;\n return directionalLight\n}", "import { Object3D, Mesh, Light } from 'three'\n\nexport function dispose(o: Object3D, recursive?: boolean): void {\n if (recursive && o.children && o.children.length) {\n o.children.forEach((child) => {\n dispose(child, recursive);\n });\n }\n if ((o as Mesh).isMesh) {\n const m = o as Mesh;\n if (m.geometry) m.geometry.dispose();\n if (m.material) {\n if (Array.isArray(m.material)) {\n m.material.forEach((mat) => {\n mat.dispose();\n });\n } else {\n m.material.dispose();\n }\n }\n }\n if ((o as Light).isLight) {\n (o as Light).dispose?.()\n }\n}", "export function hasChinese(str:string) {\n return /[\\u4E00-\\u9FA5]+/g.test(str);\n}", "import { hasChinese } from './rules'\nimport { DataTexture, RGBAFormat, LinearFilter } from 'three'\n\nconst urlTextureMap = new Map()\nconst textTextureMap = new Map<string, DataTexture>()\n\nexport function initCanvas() {\n const canvas = document.createElement('canvas');\n canvas.width = 1024;\n canvas.height = 64;\n const ctx = canvas.getContext('2d', {\n willReadFrequently: true,\n }) as CanvasRenderingContext2D;\n ctx.font = '54px sans-serif';\n ctx.textBaseline = 'hanging';\n ctx.lineWidth = 12;\n ctx.fillStyle = 'rgba(0,0,0,1)';\n ctx.strokeStyle = 'white';\n return { canvas, ctx }\n}\n\nlet canvas: HTMLCanvasElement;\nlet ctx: CanvasRenderingContext2D;\n\nexport function createCanvas() {\n if (!canvas) {\n const { canvas: c, ctx: t } = initCanvas()\n canvas = c;\n ctx = t;\n }\n}\n\nexport function getTextureByText(text: string): DataTexture {\n if (textTextureMap.has(text)) {\n return textTextureMap.get(text)!\n }\n createCanvas()\n\n ctx.clearRect(0, 0, 1024, 64);\n const y = hasChinese(text) ? 4 : 8;\n ctx.strokeText(text, 2, y);\n ctx.fillText(text, 2, y);\n\n let width = Math.ceil(ctx.measureText(text).width);\n width = width % 2 === 0 ? width : width + 1;\n width += 2;\n const imageData = ctx.getImageData(0, 0, width, 64);\n const texture = new DataTexture(\n Uint8Array.from(imageData.data),\n width,\n 64,\n RGBAFormat,\n );\n texture.flipY = true;\n texture.minFilter = LinearFilter;\n texture.magFilter = LinearFilter;\n\n textTextureMap.set(text, texture);\n return texture;\n}\n\nexport function clearTextTexture() {\n textTextureMap.clear()\n}\n\nexport function clearCanvas() {\n ctx = null as unknown as CanvasRenderingContext2D;\n canvas = null as unknown as HTMLCanvasElement;\n}", "import { Coordinate } from 'src/types';\nimport { Vector3, Camera } from 'three';\nimport { point, featureCollection, center } from '@turf/turf'\n\n/**\n * 3D\u5750\u6807\u8F6C\u5C4F\u5E55\u5750\u6807\n * @param vector \n * @param camera \n * @param w container\u7684\u5BBD\n * @param h container\u7684\u9AD8\n * @returns \n */\nexport function vector3ToDevice(vector: Vector3, camera: Camera, w: number, h: number) {\n const _vector = vector.clone().project(camera);//\u901A\u8FC7\u4E16\u754C\u5750\u6807\u83B7\u53D6\u8F6C\u6807\u51C6\u8BBE\u5907\u5750\u6807\n const _w = w / 2;\n const _h = h / 2;\n const x = Math.round(_vector.x * _w + _w);//\u6807\u51C6\u8BBE\u5907\u5750\u6807\u8F6C\u5C4F\u5E55\u5750\u6807\n const y = Math.round(-_vector.y * _h + _h);\n return { x, y }\n}\n\n\n/**\n * \u83B7\u53D6\u591A\u53D8\u5F62\u7684\u4E2D\u5FC3\u70B9\n * @param coordinates \n */\nexport function getCenter(coordinates: Coordinate[]) {\n const features = featureCollection(coordinates.map(item => point(item)))\n const cent = center(features)\n return cent.geometry.coordinates\n}\n\ntype Position = {\n x: number,\n y: number\n}\nexport function isContain(point: Position, start: Position, end: Position) {\n // \u5224\u65AD point\u662F\u5426\u5728 start \u548Cend\u5F62\u6210\u7684\u77E9\u5F62\u4E2D\n return point.x >= start.x &&\n point.x <= end.x &&\n point.y >= start.y &&\n point.y <= end.y \n}", "import { EventDispatcher } from 'three'\n\nexport function proxyOptions\n <T extends Record<string, any>, M extends { [K in keyof T as `change-${Extract<K, string>}`]: { value: T[K] } }>\n (target: T, master: EventDispatcher<M>): T\n{ \n return new Proxy<T>(target, {\n get: (target, p, receiver) => {\n return Reflect.get(target, p, receiver)\n },\n set: (target, p, newValue, receiver) => {\n const res = Reflect.set(target, p, newValue, receiver)\n master.dispatchEvent({ type: `change-${p as Extract<keyof T, string>}`, value: newValue } as any)\n return res\n }\n })\n}", "/**\n * \u53EF\u4EE5\u8BBE\u7F6E\u8D85\u65F6\u65F6\u95F4\u7684promise\n * @param promise \n * @param timeout \n * @returns \n */\nexport function timeoutPromise<T>(promise: Promise<T>, timeout: number): Promise<T> {\n return Promise.race([\n promise,\n new Promise<T>((resolve, reject) => {\n setTimeout(() => reject(new Error(\"Promise timeout\")), timeout);\n })\n ]);\n}", "export function createSvgElement(tag: string) {\n return document.createElementNS('http://www.w3.org/2000/svg', tag); \n}\n\n/**\n * \u521B\u5EFAsvg\n */\nexport function createSvg(w: string, h: string) {\n const svg = createSvgElement(\"svg\");\n svg.setAttribute(\"width\", w)\n svg.setAttribute(\"height\", h)\n svg.style.cssText = \"position: absolute; left: 0; top: 0; pointer-events: none;\"\n return svg;\n}\n\n/**\n * \u521B\u5EFA\u5706\u70B9\n * @param radius \n */\nexport function createCircle(radius = \"2\", fill: string) {\n const circle = createSvgElement(\"circle\");\n circle.setAttribute(\"r\", radius)\n circle.setAttribute(\"fill\", fill)\n return circle\n}\n\n/**\n * \u521B\u5EFA\u7EBF\n * @param stroke \n */\nexport function createLine(stroke: string) {\n const line = createSvgElement(\"line\")\n line.setAttribute(\"stroke\", stroke)\n return line\n}\n\n/**\n * \u521B\u5EFA\u77E9\u5F62\n * @param stroke \n * @returns \n */\nexport function createRect(stroke: string, fill: string) {\n const rect = createSvgElement(\"rect\")\n rect.setAttribute(\"stroke\", stroke)\n rect.setAttribute(\"fill\", fill)\n return rect\n}\n\nexport function setCirclePosition(circle: SVGElement, x: number, y: number) {\n circle.setAttribute('cx', `${x}`)\n circle.setAttribute('cy', `${y}`)\n}\n\ntype Position = { x: number; y: number }\n\nexport function setLineStartEnd(line: SVGElement, start?: Position, end?: Position) {\n if (start) { \n line.setAttribute(\"x1\", `${start.x}`)\n line.setAttribute(\"y1\", `${start.y}`)\n }\n if (end) {\n line.setAttribute(\"x2\", `${end.x}`)\n line.setAttribute(\"y2\", `${end.y}`)\n }\n}\n\nexport function setRectPosition(rect: SVGElement, x: number, y: number, w: number, h: number) {\n rect.setAttribute('x', `${x}`)\n rect.setAttribute('y', `${y}`)\n rect.setAttribute('width', `${w}`)\n rect.setAttribute('height', `${h}`)\n}", "import { MapControls } from \"three/examples/jsm/controls/MapControls\";\nimport {\n Timer,\n initCamera,\n initRenderer,\n initScene,\n initLight,\n initControl,\n dispose,\n vector3ToDevice,\n timeoutPromise,\n} from \"./utils\";\nimport {\n EventDispatcher,\n OrthographicCamera,\n Light,\n Box2,\n Vector3,\n Vector2,\n Raycaster,\n Object3D,\n Box3,\n Color,\n AmbientLight,\n} from \"three\";\nimport { Graphic, Poi, Floor } from \"./elements\";\nimport { Group as TweenGroup, Tween } from \"@tweenjs/tween.js\";\nimport { Config } from \"./config\";\nimport { Selection } from \"./operations/selection/selection\";\nimport { HoverHelper } from \"./operations\";\n\nexport interface ContextEventMap {\n update: {};\n \"graphic-click\": {\n graphics: Graphic[];\n position: Vector3 | null\n };\n \"poi-click\": {\n pois: Poi[];\n };\n 'pointer-level': {};\n 'pointer-over': {\n graphics: Graphic[];\n pois: Poi[];\n position: Vector3 | null;\n };\n 'pointer-move': {\n graphics: Graphic[];\n pois: Poi[];\n position: Vector3 | null;\n },\n 'change-ratio': {\n px: number;\n },\n \"select-graphic\": {\n graphics: Graphic[]\n },\n \"hover\": {\n graphics: Graphic[];\n }\n}\n\nexport class Context extends EventDispatcher<ContextEventMap> {\n scene = initScene();\n\n renderer = initRenderer();\n\n camera!: OrthographicCamera;\n\n control!: MapControls;\n\n lights = initLight();\n\n // \u7BA1\u7406\u4EFB\u52A1\uFF0C\u9632\u6B62\u5185\u5B58\u6CC4\u6F0F\n timer = new Timer();\n \n tweenGroup = new TweenGroup();\n \n currentFloor?: Floor;\n\n selection: Selection;\n\n hoverHelper: HoverHelper;\n \n private basicRatio?: number; // zoom=1\u7684\u65F6\u5019\uFF0C100M\u5BF9\u5E94\u7684\u50CF\u7D20\u4E2A\u6570\n\n constructor(public container: HTMLElement, public config: Config) {\n super();\n this.container.style.position = \"relative\";\n this.container.style.overflow = \"hidden\";\n this.init();\n this.selection = new Selection(this);\n this.hoverHelper = new HoverHelper(this);\n\n this.registryEvent();\n }\n\n init() {\n const { clientWidth: w, clientHeight: h } = this.container;\n this.camera = initCamera(w, h);\n this.renderer.setSize(w, h);\n this.control = initControl(this.camera, this.renderer.domElement);\n this.container.appendChild(this.renderer.domElement);\n this.scene.add(this.lights);\n this.basicRatio = this.getRatio()\n // \u65CB\u8F6C\u89C6\u89D2\u7684\u65F6\u5019\uFF0C\u9690\u85CF\u548C\u663E\u793A\u9634\u5F71\n this.control.addEventListener(\"change\", () => {\n const polarAngle = this.control.getPolarAngle();\n this.currentFloor?.setShadowOpacity(polarAngle / this.config.control.maxPolar)\n this.dispatchEvent({ type: 'change-ratio', px: (this.basicRatio || 0) * this.camera.zoom })\n });\n }\n\n /**\n * \u83B7\u53D6\u4E24\u4E2A\u70B9\u4E4B\u95F4\u7684\u50CF\u7D20\u6570\n */\n getRatio(point1 = new Vector3(0, 0, 0), point2 = new Vector3(100, 0, 0)) {\n const { clientWidth, clientHeight } = this.container\n const device1 = vector3ToDevice(point1, this.camera, clientWidth, clientHeight)\n const device2 = vector3ToDevice(point2, this.camera, clientWidth, clientHeight)\n return Math.ceil(Math.sqrt((device2.x - device1.x) ** 2 + (device2.y - device1.y) ** 2))\n }\n\n changeAmbientLightColor(color: string | number) {\n this.lights.children.forEach((item) => {\n if (item instanceof AmbientLight) {\n item.color = new Color(color);\n }\n });\n }\n\n switchFloor(floor: Floor) {\n if (this.currentFloor) {\n this.scene.remove(this.currentFloor)\n this.currentFloor.dispose()\n }\n this.currentFloor = floor\n this.scene.add(floor)\n // \u4FEE\u6539\u706F\u5149\u7684\u4F4D\u7F6E\n const position = floor.getCenter()\n if (position) {\n this.lights.position.x = position.x\n this.lights.position.y = position.y\n }\n }\n\n onWindowResize = () => {\n const { container, camera, renderer } = this;\n const { clientWidth: w, clientHeight: h } = container;\n camera.left = -w / 2;\n camera.right = w / 2;\n camera.top = h / 2;\n camera.bottom = -h / 2;\n camera.updateProjectionMatrix();\n renderer.setSize(w, h);\n };\n\n onClick = (e: MouseEvent) => {\n const { graphics, position } = this.getGraphicsByDeviceXy(e.offsetX, e.offsetY);\n if (graphics.length) {\n this.dispatchEvent({\n type: \"graphic-click\",\n graphics: graphics,\n position\n });\n }\n const pois = this.getPoisByDeviceXy(e.clientX, e.clientY);\n if (pois.length) {\n this.dispatchEvent({ type: \"poi-click\", pois: pois as Poi[] });\n }\n };\n\n /**\n * \u83B7\u53D6\u5C4F\u5E55\u5750\u6807\u5BF9\u5E94\u7684graphic\n * @param x\n * @param y\n * @returns\n */\n getGraphicsByDeviceXy(x: number, y: number): { graphics: Graphic[], position: Vector3 | null } {\n const point = new Vector2();\n point.x = (x / this.container.clientWidth) * 2 - 1;\n point.y = (y / this.container.clientHeight) * -2 + 1;\n const raycaster = new Raycaster();\n raycaster.setFromCamera(point, this.camera);\n const res = this.currentFloor?.graphicLayer.getGraphicByRaycaster(raycaster)\n return res || { graphics: [], position: null }\n }\n\n /**\n * \u83B7\u53D6\u5C4F\u5E55\u5750\u6807\u5BF9\u5E94\u7684poi\n * @param x\n * @param y\n * @returns\n */\n getPoisByDeviceXy(x: number, y: number) {\n const pois = this.currentFloor?.poiLayer.getPoiByDeviceXy(x, y)\n return pois || [];\n }\n\n onPointerover = (e: PointerEvent) => { \n const { graphics, position } = this.getGraphicsByDeviceXy(e.offsetX, e.offsetY);\n const pois = this.getPoisByDeviceXy(e.clientX, e.clientY) as Poi[];\n this.dispatchEvent({ type: 'pointer-over', graphics, pois, position })\n }\n\n onPointermove = (e: PointerEvent) => { \n const { graphics, position } = this.getGraphicsByDeviceXy(e.offsetX, e.offsetY)\n const pois = this.getPoisByDeviceXy(e.clientX, e.clientY) as Poi[];\n this.dispatchEvent({ type: 'pointer-move', graphics, pois, position })\n }\n\n onPointerleave = () => { \n this.dispatchEvent({ type: \"pointer-level\" })\n }\n\n onSelectionSelect = ({ graphics }: {graphics: Graphic[]}) => { \n this.dispatchEvent({ type: \"select-graphic\", graphics })\n }\n\n onHoverChange = ({ graphics }: { graphics: Graphic[] }) => { \n this.dispatchEvent({ type: \"hover\", graphics })\n }\n\n registryEvent() {\n window.addEventListener(\"resize\", this.onWindowResize);\n this.container.addEventListener(\"click\", this.onClick);\n this.container.addEventListener(\"pointerover\", this.onPointerover)\n this.container.addEventListener(\"pointermove\", this.onPointermove)\n this.container.addEventListener(\"pointerleave\", this.onPointerleave)\n this.selection.addEventListener(\"select\", this.onSelectionSelect)\n this.hoverHelper.addEventListener(\"hover-change\", this.onHoverChange)\n }\n\n unRegistryEvent() {\n window.removeEventListener(\"resize\", this.onWindowResize);\n this.container.removeEventListener(\"click\", this.onClick);\n this.container.removeEventListener(\"pointerover\", this.onPointerover)\n this.container.removeEventListener(\"pointermove\", this.onPointermove)\n this.container.removeEventListener(\"pointerleave\", this.onPointerleave)\n this.selection.removeEventListener(\"select\", this.onSelectionSelect)\n this.hoverHelper.removeEventListener(\"hover-change\", this.onHoverChange)\n }\n\n /**\n * \u8BBE\u7F6E\u7EB5\u5411\u65CB\u8F6C\u89D2\u5EA6\n * @param polar \u5F27\u5EA6\n */\n public setPolarAngle(polar: number, duration = 500) {\n return timeoutPromise(\n new Promise((resolve) => {\n const start = { polar: this.control.getPolarAngle() };\n const end = { polar };\n const tween = new Tween(start, this.tweenGroup)\n .to(end, duration)\n .onUpdate(() => {\n this.control.maxPolarAngle = start.polar;\n this.control.minPolarAngle = start.polar;\n this.control.update();\n })\n .onComplete(() => {\n this.control.enabled = true;\n this.tweenGroup.remove(tween);\n resolve(true);\n })\n .onStart(() => {\n this.control.enabled = false;\n })\n .start();\n }),\n duration + 500\n );\n }\n\n getCameraLookAt() {\n return new Vector3().subVectors(this.control.target, this.camera.position);\n }\n\n /**\n * \u6309\u7167\u4E00\u4E2A\u4E2D\u5FC3\u70B9\u8BBE\u7F6E\u76F8\u673A\u7684\u653E\u5927\u7F29\u5C0F\n * @param zoom\n * @param center\n * @returns\n */\n public setZoom(zoom: number, center: Vector3, duration = 500) {\n return timeoutPromise(\n new Promise((resolve) => {\n const start = {\n zoom: this.camera.zoom,\n target: this.control.target.clone(),\n };\n const lookAtVector = this.getCameraLookAt();\n const tween = new Tween(start, this.tweenGroup)\n .to(\n {\n zoom,\n target: center,\n },\n duration\n )\n .onUpdate(() => {\n this.camera.position.copy(start.target.clone().sub(lookAtVector));\n this.control.target.copy(start.target);\n this.camera.zoom = start.zoom;\n this.control.update();\n })\n .onComplete(() => {\n this.tweenGroup.remove(tween);\n this.control.enabled = true;\n resolve(true)\n })\n .onStart(() => {\n this.control.enabled = false;\n })\n .start();\n }),\n duration + 500\n );\n }\n\n /**\n * \u653E\u5927\u76F8\u673A\u5230\u7269\u4F53\u5360\u5168\u5C4F\n * @param object\n * @param padding\n * @param duration\n * @returns\n */\n fitCameraToObject(\n object: Object3D,\n padding: [number, number, number, number] = [20, 20, 20, 20],\n duration = 500\n ) {\n const [top, right, bottom, left] = padding;\n const { clientWidth, clientHeight } = this.container;\n // \u83B7\u53D6\u7269\u4F53\u7684\u4E09\u7EF4\u76D2\u5B50\u5750\u6807\n const boundingBox = new Box3().setFromObject(object);\n const { max, min } = boundingBox;\n // \u5750\u6807\u8F6C\u6210\u5C4F\u5E55\u5750\u6807\u5E76\u8BA1\u7B97\u51FA\u5360\u7528\u5C4F\u5E55\u5750\u6807\u7684\u5927\u5C0F\n const max2d = vector3ToDevice(max, this.camera, clientWidth, clientHeight);\n const min2d = vector3ToDevice(min, this.camera, clientWidth, clientHeight);\n const boundingBox2d = new Box2().setFromPoints([\n new Vector2(max2d.x, max2d.y),\n new Vector2(min2d.x, min2d.y),\n ]);\n const size = boundingBox2d.getSize(new Vector2());\n // \u8BA1\u7B97\u5728\u5C4F\u5E55\u4E0Ax,y\u65B9\u5411\u4E0A\u9700\u8981\u8C03\u6574\u7684\u500D\u6570\n const xScale = (clientWidth - right - left) / size.x;\n const yScale = (clientHeight - top - bottom) / size.y;\n const scale = Math.min(xScale, yScale);\n const center = new Vector3((max.x + min.x) / 2, (max.y + min.y) / 2, max.z);\n return this.setZoom(scale * this.camera.zoom, center, duration);\n }\n\n fitCameraToGround(padding: [number, number, number, number] = [20, 20, 20, 20], duration = 500) { \n if (this.currentFloor && this.currentFloor.hasElement) {\n return this.fitCameraToObject(this.currentFloor.groundUpper, padding, duration);\n } else {\n return Promise.resolve(false);\n }\n }\n\n /**\n * \u4FEE\u6539\u76F8\u673A\u4F4D\u7F6E\n * @param position \u4FEE\u6539\u540E\u7684\u76F8\u673A\u7684\u4F4D\u7F6E\n * @param duration \u52A8\u753B\u6301\u7EED\u65F6\u95F4\n */\n public setCameraPosition(position: Vector3, duration: number) {\n return timeoutPromise(\n new Promise((resolve) => {\n const start = this.camera.position.clone();\n const lookAtVector = this.getCameraLookAt();\n const tween = new Tween(start, this.tweenGroup)\n .to(position, duration)\n .onUpdate(() => {\n this.camera.position.copy(start);\n this.control.target.copy(position.clone().add(lookAtVector));\n })\n .onComplete(() => {\n this.tweenGroup.remove(tween);\n this.control.update();\n this.control.enabled = true;\n resolve(true);\n })\n .onStart(() => {\n this.control.enabled = false;\n })\n .start();\n }),\n duration + 500\n );\n }\n\n render() {\n this.renderer.render(this.scene, this.camera);\n this.dispatchEvent({ type: \"update\" });\n this.timer.requestAnimationFrame(() => {\n this.render();\n });\n this.tweenGroup.update();\n }\n\n dispose() {\n this.selection.dispose()\n this.hoverHelper.dispose()\n this.tweenGroup.getAll().forEach((item) => item.stop());\n this.tweenGroup.removeAll();\n this.unRegistryEvent();\n this.container.removeChild(this.renderer.domElement);\n this.timer.dispose();\n this.renderer.dispose();\n (this.lights.children as Light[]).forEach((light: Light) =>\n light.dispose()\n );\n dispose(this.scene);\n }\n}\n", "import { EventDispatcher } from \"three\";\nimport { Context } from \"../../context\";\nimport { Graphic } from \"../../elements\";\nimport hotkeys from 'hotkeys-js'\nimport { BoxSelection } from \"./box-selection\";\n\ninterface SelectionEventMap {\n \"select\": {\n graphics: Graphic[]\n }\n}\n\nexport class Selection extends EventDispatcher<SelectionEventMap> {\n private _list = new Set<Graphic>()\n\n private boxSelection: BoxSelection;\n private prevPanStatus?: boolean;\n\n constructor(private context: Context) {\n super()\n this.boxSelection = new BoxSelection(context)\n this.boxSelection.setEnable(false)\n this.registryEvent()\n }\n\n get list() {\n return this._list\n }\n\n onPointerDown = (e: PointerEvent) => {\n const { graphics } = this.context.getGraphicsByDeviceXy(e.offsetX, e.offsetY)\n if (!e.ctrlKey) {\n this._list.clear()\n }\n graphics.forEach(item => this._list.add(item))\n this.selectEnd()\n }\n\n onKeyDown = (e: KeyboardEvent) => {\n if (e.key === \"Control\") {\n this.boxSelection.setEnable(true)\n this.prevPanStatus = this.context.control.enablePan\n this.context.control.enablePan = false\n }\n }\n\n onKeyUp = (e: KeyboardEvent) => {\n if (e.key === \"Control\") {\n this.boxSelection.setEnable(false)\n this.context.control.enablePan = !!this.prevPanStatus\n }\n }\n\n onBoxSelected = ({ list }: { list: Graphic[] }) => { \n this._list.clear()\n list.forEach(item => {\n this._list.add(item)\n })\n this.selectEnd()\n }\n\n selectEnd() {\n this.dispatchEvent({type: \"select\", graphics: [...this._list]})\n }\n\n registryEvent() {\n this.context.container.addEventListener(\"pointerdown\", this.onPointerDown)\n window.addEventListener(\"keydown\", this.onKeyDown)\n window.addEventListener(\"keyup\", this.onKeyUp)\n this.boxSelection.addEventListener(\"selected\", this.onBoxSelected)\n }\n\n unRegistryEvent() {\n this.context.container.removeEventListener(\"pointerdown\", this.onPointerDown)\n window.removeEventListener(\"keydown\", this.onKeyDown)\n window.removeEventListener(\"keyup\", this.onKeyUp)\n this.boxSelection.removeEventListener(\"selected\", this.onBoxSelected)\n }\n\n dispose() {\n this.unRegistryEvent()\n }\n}", "import {\n Object3D, ExtrudeGeometry, MeshStandardMaterial, Mesh, Color, Box3,\n LineSegments, EdgesGeometry, LineBasicMaterial, Raycaster, Object3DEventMap, Vector3\n} from 'three';\nimport { initShape, dispose, proxyOptions } from '../utils'\nimport { GraphicOptions, PolygonGeometry } from 'src/types';\nimport { merge } from 'lodash'\nimport { Context } from '../context'\n\n// \u95E8\u7684\u7C7B\u578B\nconst DoorType = {\n single: \"\u5355\u5F00\u95E8\",\n double: \"\u53CC\u5F00\u95E8\",\n move: \"\u79FB\u52A8\u95E8\",\n};\n\n// \u95E8\u7684\u6750\u8D28\nconst DoorMaterial = {\n wood: \"\u6728\u95E8\",\n glass: \"\u73BB\u7483\u95E8\",\n aluminum: \"\u94DD\u5408\u91D1\u95E8\",\n}\n\n// \u5355\u4E2A\u95E8\u7684\u914D\u7F6E\nexport interface Door {\n // \u540D\u79F0\n name: string;\n id: string;\n width: number;\n // \u5185\u5F00/\u5916\u5F00\n open: boolean;\n // \u7C7B\u578B \u5355\u5F00\u95E8 \u53CC\u5F00\u95E8 \u79FB\u52A8\u95E8\n type: keyof typeof DoorType;\n // \u6750\u8D28\n material: keyof typeof DoorMaterial;\n}\n\nexport type GraphicOptionsParam = Partial<GraphicOptions>\n\ntype GraphicEventMap = {\n [K in keyof GraphicOptions as `change-${K}`]: { value: GraphicOptions[K] };\n} & Object3DEventMap;\n\n\nconst defaultOptions: GraphicOptions = {\n id: \"\", // \u56FE\u5F62id\n height: 0.1, // \u56FE\u5F62\u9AD8\u5EA6\n airHeight: 0, // \u60AC\u7A7A\u9AD8\u5EA6\n area: 0, // \u9762\u79EF\n group: \"\", // \u5206\u7EC4\n fillColor: \"#EFF4FB\", // \u989C\u8272\n strokeColor: \"#ffffff\", // \u8FB9\u6846\n fillOpacity: 1, // \u900F\u660E\u5EA6\n strokeOpacity: 1, // \u63CF\u8FB9\u900F\u660E\u5EA6\n doors: [], // \u95E8\u914D\u7F6E\n locked: false,\n visible: true,\n geometry: {\n type: 'polygon',\n cds: [],\n curveCpt: [],\n curveIndex: []\n },\n layerType: \"\",\n zIndex: 0,\n}\n\nexport class Graphic extends Object3D<GraphicEventMap> {\n\n private geometry!: ExtrudeGeometry;\n\n private material!: MeshStandardMaterial;\n\n public mesh!: Mesh;\n\n private line!: LineSegments;\n \n public options: GraphicOptions\n \n constructor(private context: Context, options: GraphicOptionsParam) {\n super()\n this.options = proxyOptions<GraphicOptions, GraphicEventMap>(merge({}, defaultOptions, options), this)\n if (this.options.geometry.type === \"point\") { \n const [x, y] = this.options.geometry.cds\n this.position.set(x, y, this.options.height + this.options.airHeight)\n return this\n }\n this.init()\n this.visible = this.options.visible\n this.addEventListener('change-fillColor', ({ value }) => {\n this.material.color = new Color(value);\n })\n this.addEventListener('change-fillOpacity', ({ value }) => {\n this.material.opacity = value;\n })\n this.addEventListener('change-height', ({ value }) => {\n this.dispose()\n this.init()\n })\n this.addEventListener('change-strokeColor', ({ value }) => {\n (this.line.material as LineBasicMaterial).color = new Color(value)\n })\n this.addEventListener('change-strokeOpacity', ({ value }) => {\n (this.line.material as LineBasicMaterial).opacity = value\n })\n this.addEventListener('change-airHeight', ({ value }) => {\n this.position.z = value\n })\n this.addEventListener('change-visible', ({ value }) => {\n this.visible = value\n })\n }\n\n getCenter() { \n if (this.options.geometry.type === \"point\") { \n return this.position\n }\n const center = new Vector3()\n const box = new Box3()\n box.setFromObject(this)\n box.getCenter(center)\n return center\n }\n\n getSize() {\n if (this.options.geometry.type === \"point\") { \n return new Vector3(0, 0, 0)\n }\n const box = new Box3()\n const size = new Vector3()\n box.setFromObject(this)\n box.getSize(size)\n return size\n }\n\n getPosition() {\n return this.getCenter()\n }\n\n init() {\n this.geometry = this.initGeometry()\n this.material = this.initMaterial()\n this.mesh = this.initMesh()\n this.mesh.position.z = this.options.airHeight + this.options.height / 2\n this.mesh.castShadow = true\n this.add(this.mesh)\n // \u521B\u5EFA\u8FB9\u6846\n this.line = this.createBorder()\n this.add(this.line)\n }\n\n initGeometry() {\n const shape = initShape(\n (this.options.geometry as PolygonGeometry).cds[0],\n (this.options.geometry as PolygonGeometry).cds.slice(1)\n )\n const geometry = new ExtrudeGeometry(shape, {\n steps: 1,\n bevelEnabled: false,\n depth: this.options.height,\n curveSegments: 4,\n });\n return geometry\n }\n\n initMaterial() {\n const material = new MeshStandardMaterial({\n color: this.options.fillColor,\n roughness: 1,\n transparent: true,\n opacity: this.options.fillOpacity,\n depthWrite: true,\n });\n return material\n }\n\n initLineMaterial() { \n const lineMaterial = new LineBasicMaterial({\n color: this.options.strokeColor,\n opacity: this.options.strokeOpacity,\n transparent: true,\n depthWrite: true,\n });\n return lineMaterial\n }\n\n initMesh() {\n return new Mesh(this.geometry, this.material)\n }\n\n createBorder() {\n const material = this.initLineMaterial()\n const geometry = new EdgesGeometry( this.geometry );\n const line = new LineSegments(geometry, material)\n line.position.z = this.options.airHeight + this.options.height / 2\n return line\n }\n\n raycast(raycaster: Raycaster) {\n if (!this.visible) { return false }\n if (this.options.geometry.type === \"point\") { return false }\n const intersects = raycaster.intersectObject(this.mesh)\n if (intersects[0]) {\n const {point: position, distance} = intersects[0]\n return { position, distance }\n }\n return false\n }\n \n dispose() {\n dispose(this)\n this.clear()\n }\n\n}", "import {\n Object3D, PlaneGeometry, DirectionalLight,\n Mesh, MeshStandardMaterial, ShadowMaterial, Color, Vector3, DoubleSide\n} from 'three';\nimport { dispose, initDirectionalLight } from '../utils'\nimport { Graphic } from './graphic';\n\nexport class Shadow extends Object3D {\n\n private directionalLight: DirectionalLight\n\n private plane!: Mesh\n\n public basicOpacity = 0.39\n\n constructor() {\n super()\n this.directionalLight = this.initLight()\n this.initPlane()\n }\n\n // \u521B\u5EFA\u5149\u6E90\n initLight() { \n const directionalLight = initDirectionalLight(0xffffff, 1)\n directionalLight.position.set(0, 0, 100);\n this.add(directionalLight);\n return directionalLight\n }\n \n changeLightCamera(size: Vector3) {\n const x = size.x\n const y = size.y\n this.directionalLight.shadow.camera.left = -x;\n this.directionalLight.shadow.camera.right = x;\n this.directionalLight.shadow.camera.top = y;\n this.directionalLight.shadow.camera.bottom = -y;\n this.directionalLight.shadow.camera.near = 0.5;\n this.directionalLight.shadow.camera.far = Math.max(x, y);\n }\n\n changeLightColor(color: number | string) {\n this.directionalLight.color = new Color(color)\n }\n\n setPosition(position: Vector3) {\n this.position.copy(position)\n this.directionalLight.position.set(-position.x / 2, -position.y / 2, 100)\n }\n\n // \u521B\u5EFA\u5E73\u9762\u767D\u8272\n initPlane(width = 1000, height = 1000) { \n const geometry = new PlaneGeometry(width, height)\n const material = new ShadowMaterial({\n transparent: true,\n opacity: 0,\n side: DoubleSide\n })\n const mesh = new Mesh(geometry, material)\n mesh.receiveShadow = true\n mesh.position.z = -5\n this.add(mesh)\n this.plane = mesh\n return mesh\n }\n\n setTarget(target: Object3D) {\n this.directionalLight.target = target\n }\n\n transformOpacity(opacity: number): number {\n return opacity * this.basicOpacity\n }\n\n setOpacity(opacity: number) { \n (this.plane.material as MeshStandardMaterial).opacity = this.transformOpacity(opacity);\n }\n \n dispose() {\n dispose(this, true)\n }\n\n}", "import { proxyOptions } from '../utils';\nimport { Object3D, Object3DEventMap } from 'three';\nimport { Context } from '../context'\nimport { merge } from 'lodash'\nimport { Overlay } from './overlay';\n\nexport interface PoiOptions {\n text: string;\n icon?: string;\n icon_size?: [number, number]; // \u5BBD \u9AD8\n level: number; // \u6E32\u67D3\u4F18\u5148\u7EA7\n collision_enable: boolean; // \u662F\u5426\u53C2\u4E0E\u78B0\u649E\u68C0\u6D4B\n opacity: number;\n}\n\ntype PoiEventMap = {\n [K in keyof PoiOptions as `change-${K}`]: { value: PoiOptions[K] };\n} & Object3DEventMap;\n\nconst defaultOptions: PoiOptions = {\n text: \"\",\n level: 1,\n collision_enable: true,\n opacity: 1\n}\n\nexport type PoiOptionsParam = Partial<PoiOptions>\n\nexport class Poi extends Object3D<PoiEventMap> {\n\n private textDiv!: HTMLDivElement\n\n private img?: HTMLImageElement\n\n private overlay: Overlay\n\n public options: PoiOptions\n\n constructor(private context: Context, options: PoiOptionsParam) {\n super()\n this.options = proxyOptions<PoiOptions, PoiEventMap>(merge({}, defaultOptions, options), this)\n this.overlay = new Overlay(this.context)\n this.overlay.bindElement(this)\n this._changePosition()\n this.registryEvent()\n this.initDiv()\n this.addEventListener(\"change-icon\", ({ value }) => {\n if (value) {\n if (!this.img) {\n this.overlay.div.appendChild(this.initIcon())\n } else {\n this.img.setAttribute('src', value)\n }\n } else {\n this.img && this.overlay.div.removeChild(this.img)\n this.img = undefined\n }\n })\n this.addEventListener(\"change-text\", ({ value }) => {\n this.overlay.div.removeChild(this.textDiv)\n this.overlay.div.appendChild(this.initText())\n })\n this.addEventListener(\"change-opacity\", ({ value }) => {\n this.overlay.setOpacity(value)\n })\n }\n\n initDiv() {\n const div = this.overlay.div;\n div.appendChild(this.initText())\n if (this.options.icon) { \n div.appendChild(this.initIcon())\n }\n div.style.fontSize = `12px`;\n div.style.display = `flex`;\n div.style.flexDirection = `column`;\n div.style.justifyContent = `center`;\n div.style.alignItems = `center`;\n div.style.pointerEvents = `none`;\n return div\n }\n\n getPosition() {\n return this.position\n }\n\n initText() {\n const textDiv = document.createElement(\"div\")\n textDiv.appendChild(this.createTextFragment())\n textDiv.style.background = \"rgba(255, 255, 255, .7)\"\n textDiv.style.padding = \"2px\"\n textDiv.style.borderRadius = \"4px\"\n this.textDiv = textDiv\n return textDiv\n }\n\n createTextFragment() { \n const f = document.createDocumentFragment()\n this.options.text.split(\"\\r\\n\").forEach(item => { \n const div = document.createElement(\"div\")\n div.style.whiteSpace = 'nowrap';\n div.textContent = item\n f.appendChild(div)\n })\n return f\n }\n\n initIcon() {\n const img = document.createElement(\"img\")\n img.setAttribute(\"src\", this.options.icon!)\n img.style.width = `${this.options.icon_size?.[0] || 32}px`\n img.style.height = `${this.options.icon_size?.[1] || 32}px`\n this.img = img\n return img\n }\n\n private _changePosition = () => {\n this.overlay.div.style.transform = `translate3d(-50%, ${this.options.icon ? '-100%' : '-50%'}, 0)`;\n }\n\n registryEvent() {\n this.context.addEventListener('update', this._changePosition)\n }\n\n unRegistryEvent() {\n this.context.removeEventListener('update', this._changePosition)\n }\n\n setVisible(visible: boolean) {\n this.overlay.setVisible(visible, 'flex')\n }\n\n getBox() {\n return this.overlay.div.getBoundingClientRect()\n }\n\n isContain(x: number, y: number) {\n const box = this.getBox()\n return x >= box.left && x <= box.right && y >= box.top && y <= box.bottom\n }\n\n dispose() {\n this.unRegistryEvent();\n this.textDiv = null as unknown as HTMLDivElement;\n this.img = undefined\n this.overlay.dispose();\n }\n}", "import { Context } from \"../context\";\nimport { Box3, EventDispatcher, Object3D, Vector3 } from \"three\";\nimport { vector3ToDevice } from '../utils'\n\nexport class Overlay extends EventDispatcher {\n\n public div: HTMLDivElement\n\n private element?: Object3D & { getPosition?: () => Vector3 }\n\n public position = new Vector3()\n\n constructor(private context: Context) {\n super()\n this.registryEvent()\n this.div = this.initDiv()\n this.context.container.appendChild(this.div)\n }\n\n initDiv() {\n const div = document.createElement(\"div\")\n div.style.position = \"absolute\";\n return div\n }\n\n bindElement(element: Object3D) {\n this.element = element\n }\n\n unBindElement() {\n this.element = undefined;\n }\n\n setVisible(visible: boolean, display = 'block') {\n this.div.style.display = visible ? display : 'none'\n }\n\n setOpacity(opacity: number) {\n this.div.style.opacity = `${opacity}`\n }\n\n getPosition() {\n if (this.element) {\n if (typeof this.element.getPosition === \"function\") {\n return this.element.getPosition()\n }\n const box = new Box3().setFromObject(this.element)\n const center = box.getCenter(new Vector3())\n return center\n } else {\n return this.position\n }\n }\n\n onUpdate = () => {\n const vector = this.getPosition()\n const { clientWidth, clientHeight } = this.context.container\n const { x, y } = vector3ToDevice(vector, this.context.camera, clientWidth, clientHeight)\n this.div.style.left = `${x}px`;\n this.div.style.top = `${y}px`;\n }\n\n registryEvent() {\n this.context.addEventListener('update', this.onUpdate)\n }\n\n unRegistryEvent() {\n this.context.removeEventListener('update', this.onUpdate)\n }\n\n dispose() {\n this.unRegistryEvent()\n this.unBindElement()\n this.context.container.removeChild(this.div)\n this.div = null as unknown as HTMLDivElement\n }\n}", "import { Context } from \"../context\";\nimport { Box3, Object3D, Vector3 } from \"three\";\nimport { GraphicLayer } from '../layer/graphic-layer'\nimport { PoiLayer } from '../layer/poi-layer'\nimport { Graphic, GraphicOptionsParam } from \"./graphic\";\nimport { Shadow } from \"./shadow\";\nimport { PoiOptionsParam } from \"./poi\";\nimport { HeatmapDataParam, HeatmapElement } from './heatmap'\n\nexport class Floor extends Object3D {\n \n graphicLayer: GraphicLayer;\n\n poiLayer: PoiLayer;\n\n grounds: Set<Graphic> = new Set();\n\n shadow = new Shadow();\n\n heatmap?: HeatmapElement;\n\n groundUpper = new Object3D();\n\n constructor(public context: Context) {\n super()\n this.graphicLayer = new GraphicLayer(this.context);\n this.poiLayer = new PoiLayer(this.context);\n this.groundUpper.add(this.graphicLayer)\n this.groundUpper.add(this.poiLayer)\n this.add(this.groundUpper)\n }\n\n addGrounds(grounds: Graphic[]) {\n grounds.forEach(ground => { \n if (!this.grounds.has(ground)) {\n this.grounds.add(ground)\n this.groundUpper.add(ground)\n }\n })\n }\n\n get hasElement() { \n return !!(this.grounds.size || this.graphicLayer.children.length)\n }\n\n getCenter() { \n return new Box3().setFromObject(this.groundUpper).getCenter(new Vector3())\n }\n\n addShadow() { \n const box = new Box3().setFromObject(this.groundUpper)\n const center = box.getCenter(new Vector3())\n const size = box.getSize(new Vector3())\n this.shadow.setPosition(center)\n this.shadow.changeLightCamera(size)\n this.add(this.shadow)\n }\n\n addGraphic(graphicOptions: GraphicOptionsParam) {\n return this.graphicLayer.createGraphic(graphicOptions)\n }\n\n addPoi(poiOptions: PoiOptionsParam) {\n return this.poiLayer.createPoi(poiOptions)\n }\n\n addHeatmap(data: HeatmapDataParam) {\n if (!this.heatmap) {\n this.heatmap = new HeatmapElement(this.context)\n this.add(this.heatmap)\n }\n this.heatmap.loadData(data)\n const box = new Box3().setFromObject(this.graphicLayer)\n this.heatmap.position.setZ(box.max.z)\n return this.heatmap\n }\n\n removeHeatMap() {\n if (this.heatmap) {\n this.remove(this.heatmap)\n this.heatmap.dispose()\n this.heatmap = undefined\n }\n }\n\n setShadowOpacity(opacity: number) {\n this.shadow.setOpacity(opacity)\n }\n\n setShadowVisible(visible: boolean) {\n this.shadow.visible = visible;\n }\n\n dispose() {\n this.shadow.dispose();\n this.graphicLayer.dispose()\n this.poiLayer.dispose()\n this.grounds.forEach(ground => ground.dispose())\n this.heatmap?.dispose()\n this.groundUpper.clear()\n this.clear()\n }\n\n}", "import { Graphic, GraphicOptionsParam } from \"../elements\";\nimport { Box3, Raycaster, Vector3 } from \"three\";\nimport { Layer } from \"./layer\";\nimport { Context } from \"../context\";\n\nexport class GraphicLayer extends Layer {\n\n graphicMap = new Map<string, Graphic>()\n\n constructor(context: Context) {\n super(context)\n }\n\n getCenter(): Vector3 { \n const box = new Box3().setFromObject(this)\n return box.getCenter(new Vector3())\n }\n\n createGraphic(options: GraphicOptionsParam) {\n const graphic = new Graphic(this.context, options)\n this.add(graphic)\n this.graphicMap.set(options.id!, graphic)\n return graphic\n }\n\n /**\n * \u83B7\u53D6\u5C04\u7EBF\u76F8\u4EA4\u7684\u5143\u7D20\n * @param raycaster \n */\n getGraphicByRaycaster(raycaster: Raycaster): { graphics: Graphic[], position: Vector3 | null } {\n const initData: {\n position: Vector3 | null,\n graphic: Graphic | null,\n distance: number\n } = { distance: 10000, graphic: null, position: null }\n const data = this.children.reduce((res, item) => {\n if (item instanceof Graphic) {\n const pos = item.raycast(raycaster)\n if (pos) {\n const { distance } = pos\n if (distance < res.distance) {\n return {\n distance: res.distance,\n position: res.position,\n graphic: item\n }\n }\n }\n return res\n } else {\n return res\n }\n }, initData)\n if (data === initData) {\n return { graphics: [], position: null }\n }\n return { graphics: [data.graphic!], position: data.position }\n }\n}", "import { Context } from \"../context\";\nimport { Object3D } from \"three\";\nimport { dispose } from '../utils'\n\nexport class Layer extends Object3D {\n constructor(public context: Context) {\n super();\n }\n\n dispose() {\n dispose(this)\n this.clear()\n }\n}", "import { Poi, PoiOptionsParam } from \"../elements\";\nimport { Layer } from \"./layer\";\nimport { Context } from '../context'\n\nexport class PoiLayer extends Layer {\n pois: Poi[] = []\n \n constructor(context: Context) {\n super(context)\n this.registryEvent()\n }\n\n createPoi(options: PoiOptionsParam) {\n const poi = new Poi(this.context, options)\n this.add(poi)\n this.pushPoi(poi)\n poi.addEventListener(\"change-level\", () => this.changePoiLevelOrCollisionEnable(poi))\n poi.addEventListener(\"change-collision_enable\", () => this.changePoiLevelOrCollisionEnable(poi))\n return poi\n }\n\n changePoiLevelOrCollisionEnable(poi: Poi) {\n const index = this.pois.findIndex(item => item === poi)\n if (index === -1) { return }\n this.pois.splice(index, 1)\n this.pushPoi(poi)\n }\n\n removePoi(poi: Poi) {\n const index = this.pois.findIndex(item => item === poi)\n if (index === -1) { return }\n this.pois.splice(index, 1)\n this.remove(poi)\n poi.dispose()\n }\n\n /**\n * \u4FDD\u5B58poi\u6309\u7167level\u6392\u5E8F\n * @param poi \n */\n pushPoi(poi: Poi) {\n // \u4E0D\u53C2\u4E0E\u78B0\u649E\u68C0\u6D4B\u7684\u5728\u6700\u524D\u9762\n if (!poi.options.collision_enable) {\n this.pois.unshift(poi)\n return\n }\n // level\u6700\u5C0F\u7684\u5728\u6700\u540E\u9762\n if (poi.options.level === 1) {\n this.pois.push(poi)\n return\n }\n for (let i = 0; i < this.pois.length; i++) {\n const item = this.pois[i]\n // \u4E0D\u53C2\u4E0E\u78B0\u649E\u68C0\u6D4B\u7684\u5728\u524D\u9762\n if (!item.options.collision_enable) { \n continue\n }\n if (item.options.level <= poi.options.level) {\n this.pois.splice(i, 0, poi)\n return\n }\n }\n // \u63D2\u5165\u5230\u6700\u540E\n this.pois.push(poi) \n }\n\n getPoiByDeviceXy(x: number, y: number) {\n const pois = this.children.filter(item => {\n return (item instanceof Poi) && item.isContain(x, y)\n })\n return pois\n }\n\n onUpdate = () => { \n this.collisionDetection()\n }\n\n /**\n * \u78B0\u649E\u68C0\u6D4B\n */\n collisionDetection() {\n const range: { left: number; right: number; top: number; bottom: number; }[] = []\n this.pois.forEach((item, index) => {\n item.setVisible(true)\n const { left, right, top, bottom } = item.getBox()\n if (index === 0) {\n range.push({ left, right, top, bottom })\n return\n }\n const valid = range.some((box) => { \n const xIntersect = right < box.left || left > box.right; // x\u65B9\u5411\u91CD\u53E0\n const yIntersect = top > box.bottom || bottom < box.top; // y \u65B9\u5411\u91CD\u53E0\n return xIntersect || yIntersect;\n })\n item.setVisible(valid)\n })\n }\n\n registryEvent() {\n this.context.addEventListener('update', this.onUpdate)\n }\n\n unRegistryEvent() { \n this.context.removeEventListener('update', this.onUpdate)\n }\n \n dispose() {\n super.dispose()\n this.unRegistryEvent()\n this.pois.forEach(item => item.dispose())\n this.pois.length = 0;\n }\n}", "import { Context } from \"../context\";\nimport {\n MeshBasicMaterial, Object3D, PlaneGeometry,\n Texture, DoubleSide, Mesh, Matrix3, Vector2\n} from \"three\";\nimport { create, Heatmap, HeatmapData, DataPoint } from '@mars3d/heatmap.js'\nimport { featureCollection, point, bbox, center as getCenter } from '@turf/turf'\n\ntype V = 'value'\ntype X = 'x'\ntype Y = 'y'\n\nexport type HeatmapDataParam = HeatmapData<DataPoint<V, X, Y>>\n\nexport class HeatmapElement extends Object3D {\n\n private heatmap?: Heatmap<V, X, Y>;\n\n private div: HTMLDivElement\n\n private plane?: Mesh;\n\n constructor(private context: Context) {\n super()\n this.div = document.createElement(\"div\")\n }\n\n clearHeatmap() {\n if (this.div.firstChild) {\n this.div.removeChild(this.div.firstChild)\n }\n this.heatmap = undefined;\n }\n\n loadData(data: HeatmapDataParam) {\n this.clearHeatmap()\n const { width, height, leftTop, center } = this.getBox(data)\n this.heatmap = create({\n width: width,\n height: height,\n container: this.div,\n ...this.context.config.heatMap,\n } as any);\n this.heatmap.setData(this.transformData(data, leftTop))\n this.initPlane(width, height)\n this.position.set(center[0], center[1], this.position.z)\n }\n\n initPlane(width: number, height: number) {\n if (this.plane) { this.remove(this.plane) }\n const geometry = new PlaneGeometry(width, height)\n const texture = new Texture(this.div.firstChild as HTMLCanvasElement);\n texture.needsUpdate = true;\n const material = new MeshBasicMaterial({\n transparent: true,\n side: DoubleSide,\n map: texture,\n });\n material.needsUpdate = true;\n this.plane = new Mesh(geometry, material)\n this.add(this.plane)\n }\n\n getTransMatrix({ x, y }: { x: number, y: number }) {\n // \u5148\u628A\u5DE6\u4E0A\u89D2\u5E73\u79FB\u523000\u70B9\uFF0C\u7136\u540E\u5BF9y\u8F74\u53D6\u53CD\n return new Matrix3().makeScale(1, -1).multiply(new Matrix3().makeTranslation(0 - x, 0 - y))\n }\n\n /**\n * \u6240\u6709\u70B9\u7684\u5750\u6807\u51CF\u53BB\u5DE6\u4E0A\u89D2\u4ECE00\u70B9\u5F00\u59CB\u753Bcanvas\n * @param data \n * @param leftTop \n * @returns \n */\n transformData(data: HeatmapDataParam, leftTop: { x: number, y: number }): HeatmapDataParam {\n const matrix = this.getTransMatrix(leftTop)\n const $data = data.data.map(item => { \n const vector = new Vector2(item.x, item.y).applyMatrix3(matrix)\n return {\n x: vector.x,\n y: vector.y,\n value: item.value\n }\n })\n return {\n data: $data,\n max: data.max,\n min: data.min\n }\n }\n\n getBox(data: HeatmapDataParam) {\n const features = featureCollection(data.data.map(item => point([item.x, item.y])))\n // \u8FD4\u56DE\u4E00\u4E2A\u77E9\u5F62\u8FB9\u6846\u5750\u6807\n const box = bbox(features);\n const width = box[2] - box[0]\n const height = box[3] - box[1]\n const leftTop = { x: box[0], y: box[3] }\n const center = getCenter(features)\n return { width, height, leftTop, center: center.geometry.coordinates }\n }\n\n dispose() {\n this.div = null as unknown as HTMLDivElement\n this.heatmap = undefined\n }\n}", "import { Context } from \"../context\";\nimport { EventDispatcher, Vector3 } from \"three\";\nimport { createSvg, vector3ToDevice } from '../utils'\n\nexport class BaseSvg<T extends {} = {}> extends EventDispatcher<T> {\n protected points: Vector3[] = [];\n\n protected svg: SVGElement;\n\n protected enable = true;\n\n constructor(public context: Context) {\n super()\n this.svg = createSvg(`${context.container.clientWidth}`, `${context.container.clientHeight}`)\n context.container.appendChild(this.svg)\n }\n\n setEnable(enable: boolean) {\n this.enable = enable;\n if (enable) {\n this.svg.style.display = 'block';\n } else {\n this.svg.style.display = 'none';\n }\n }\n\n getIntersectByPointerEvent(e: PointerEvent) {\n const { camera, renderer } = this.context\n const { offsetX: x, offsetY: y } = e\n const { clientWidth, clientHeight } = renderer.domElement;\n const nx = x / clientWidth * 2 - 1;\n const ny = 1 - y / clientHeight * 2;\n\n const v = new Vector3(nx, ny, 0);\n\n return v.unproject(camera);\n }\n\n getSvgCoordinate(vector: Vector3) {\n const { camera, container } = this.context\n const coord = vector3ToDevice(vector, camera, container.clientWidth, container.clientHeight)\n return coord\n }\n \n dispose() {\n this.context.container.removeChild(this.svg)\n this.svg = null as unknown as SVGElement\n }\n}", "import { Context } from \"../context\";\nimport { Vector3 } from \"three\";\nimport { setCirclePosition, createCircle, createLine, setLineStartEnd } from '../utils'\nimport { BaseSvg } from './base-svg'\n\ninterface SvgLineEventMap {\n 'distance': { distance: number }\n}\n\nexport class SvgLine extends BaseSvg<SvgLineEventMap> {\n\n private circles: SVGElement[] \n \n private line: SVGElement\n\n constructor(public context: Context) {\n super(context)\n const { config: { svg: { circle, line } } } = context\n this.circles = [createCircle(circle.radius, circle.fill), createCircle(circle.radius, circle.fill)]\n this.line = createLine(line.stroke)\n this.svg.appendChild(this.circles[0]);\n this.svg.appendChild(this.circles[1]);\n this.svg.appendChild(this.line);\n this.registryEvent()\n }\n\n setEnable(enable: boolean) {\n super.setEnable(enable)\n if (enable) {\n this.registryEvent()\n } else {\n this.unRegistryEvent()\n }\n }\n\n registryEvent() { \n this.context.container.addEventListener(\"pointerenter\", this.onPointermove)\n this.context.container.addEventListener(\"pointermove\", this.onPointermove)\n this.context.container.addEventListener(\"pointerleave\", this.onPointerleave)\n this.context.container.addEventListener(\"pointerdown\", this.onPointerdown)\n this.context.addEventListener(\"update\", this.onUpdate)\n }\n \n unRegistryEvent() { \n this.context.container.removeEventListener(\"pointerenter\", this.onPointermove)\n this.context.container.removeEventListener(\"pointermove\", this.onPointermove)\n this.context.container.removeEventListener(\"pointerleave\", this.onPointerleave)\n this.context.container.removeEventListener(\"pointerdown\", this.onPointerdown)\n this.context.removeEventListener(\"update\", this.onUpdate)\n }\n\n onUpdate = () => {\n if (this.points[0]) {\n const point1 = this.getSvgCoordinate(this.points[0])\n setCirclePosition(this.circles[0], point1.x, point1.y)\n setLineStartEnd(this.line, point1)\n }\n if (this.points[1]) {\n const point2 = this.getSvgCoordinate(this.points[1])\n setCirclePosition(this.circles[1], point2.x, point2.y)\n setLineStartEnd(this.line, undefined, point2)\n }\n }\n \n \n onPointermove = (e: PointerEvent) => { \n // \u53EA\u5728\u6709\u7B2C\u4E00\u4E2A\u70B9\u7684\u65F6\u5019\u9700\u8981\n if (this.points.length !== 1) { return }\n this.line.style.display = \"block\";\n setLineStartEnd(this.line, undefined, { x: e.offsetX, y: e.offsetY })\n }\n \n onPointerleave = () => { \n if (this.points[1]) { return } // \u5982\u679C\u5DF2\u7ECF\u6709\u4E24\u4E2A\u70B9\u4E86\u5C31\u4E0D\u505A\u5904\u7406\n this.line.style.display = \"none\";\n }\n \n onPointerdown = (e: PointerEvent) => {\n if (this.points[1]) { return } // \u5982\u679C\u5DF2\u7ECF\u6709\u4E24\u4E2A\u70B9\u4E86\u5C31\u4E0D\u505A\u5904\u7406\n const point = this.getIntersectByPointerEvent(e)\n if (point) {\n const { offsetX: x, offsetY: y } = e\n // \u4FEE\u6539\u70B9\n const circle = this.circles[this.points.length]\n setCirclePosition(circle, x, y)\n if (!this.points.length) { \n // \u8BBE\u7F6E\u7EBF\u7684\u8D77\u59CB\u70B9\n setLineStartEnd(this.line, { x, y }, { x, y })\n }\n this.addPoint(point)\n }\n }\n\n addPoint(vector: Vector3) {\n this.points.push(vector)\n if (this.points.length >= 2) {\n const distance = this.calculatedDistance()\n this.dispatchEvent({ type: 'distance', distance })\n }\n }\n\n /**\n * \u8BA1\u7B97\u4E24\u4E2A\u70B9\u4E4B\u95F4\u7684\u8DDD\u79BB\n */\n calculatedDistance() { \n const [{ x: x1, y: y1 }, { x: x2, y: y2 }] = this.points\n return Math.sqrt((x2 - x1) ** 2 + (y2 - y1) ** 2)\n }\n \n dispose() {\n super.dispose()\n this.unRegistryEvent()\n this.line = null as unknown as SVGElement\n this.circles = []\n }\n}", "import { Context } from \"../context\";\nimport { BaseSvg } from \"./base-svg\";\nimport { setCirclePosition, setLineStartEnd, createLine, createCircle } from '../utils'\nimport { Vector3 } from \"three\";\n\ninterface SvgPolygonEventMap {\n 'area': { area: number }\n}\n\nexport class SvgPolygon extends BaseSvg<SvgPolygonEventMap> {\n\n private circles: SVGElement[] = []\n\n private lines: SVGElement[] = []\n\n private isClose = false\n\n constructor(context: Context) {\n super(context)\n this.registryEvent()\n }\n\n setEnable(enable: boolean) {\n super.setEnable(enable)\n if (enable) {\n this.registryEvent()\n } else {\n this.unRegistryEvent()\n }\n }\n\n private get lastLine() {\n return this.lines.slice(-1)[0]\n }\n\n private addCircle(circle: SVGElement) {\n this.circles.push(circle)\n this.svg.appendChild(circle)\n }\n\n private addLine(line: SVGElement) {\n this.lines.push(line)\n this.svg.appendChild(line)\n }\n\n registryEvent() { \n this.context.container.addEventListener(\"pointerenter\", this.onPointermove)\n this.context.container.addEventListener(\"pointermove\", this.onPointermove)\n this.context.container.addEventListener(\"pointerleave\", this.onPointerleave)\n this.context.container.addEventListener(\"pointerdown\", this.onPointerdown)\n this.context.addEventListener(\"update\", this.onUpdate)\n }\n \n unRegistryEvent() { \n this.context.container.removeEventListener(\"pointerenter\", this.onPointermove)\n this.context.container.removeEventListener(\"pointermove\", this.onPointermove)\n this.context.container.removeEventListener(\"pointerleave\", this.onPointerleave)\n this.context.container.removeEventListener(\"pointerdown\", this.onPointerdown)\n this.context.removeEventListener(\"update\", this.onUpdate)\n }\n\n onUpdate = () => {\n if (this.points.length) {\n this.points.forEach((point, index) => {\n const devicePoint = this.getSvgCoordinate(point)\n if (this.circles[index]) {\n setCirclePosition(this.circles[index], devicePoint.x, devicePoint.y)\n }\n if (index !== 0) {\n setLineStartEnd(this.lines[index - 1], undefined, devicePoint)\n }\n if (this.lines[index]) {\n setLineStartEnd(this.lines[index], devicePoint)\n }\n }) \n }\n }\n \n \n onPointermove = (e: PointerEvent) => { \n // \u5FC5\u987B\u8981\u6709\u4E00\u4E2A\u70B9\u5E76\u4E14\u8FD8\u6CA1\u6709\u95ED\u5408\u624D\u9700\u8981\u5904\u7406\n if (!this.lastLine || this.isClose) { return }\n this.lastLine.style.display = \"block\";\n setLineStartEnd(this.lastLine, undefined, { x: e.offsetX, y: e.offsetY })\n }\n \n onPointerleave = () => { \n // \u5982\u679C\u5DF2\u7ECF\u95ED\u5408\u4E86\u5C31\u4E0D\u9700\u8981\u5904\u7406\u4E86\n if (this.isClose) { return } \n this.lastLine.style.display = \"none\";\n }\n \n onPointerdown = (e: PointerEvent) => {\n // \u5982\u679C\u5DF2\u7ECF\u95ED\u5408\u4E86\n if (this.isClose) { return }\n const point = this.getIntersectByPointerEvent(e)\n if (point) {\n const { offsetX: x, offsetY: y } = e\n if (this.checkAdsorb(x, y)) {\n this.isClose = true\n this.addPoint(this.points[0])\n } else {\n this.addPoint(point)\n }\n const { circle: { fill, radius }, line: { stroke } } = this.context.config.svg\n if (!this.isClose) {\n // \u521B\u5EFA\u4E00\u4E2A\u65B0\u7684\u70B9\n const circle = createCircle(radius, fill)\n setCirclePosition(circle, x, y)\n this.addCircle(circle)\n }\n if (this.lines.length) {\n // \u5982\u679C\u5DF2\u7ECF\u6709\u4E00\u6761\u7EBF\u4E86 \u8981\u95ED\u5408\u8FD9\u6761\u7EBF\n setLineStartEnd(this.lastLine, undefined, { x, y })\n }\n // \u5982\u679C\u8FD9\u4E2A\u591A\u8FB9\u5F62\u8FD8\u6CA1\u6709\u95ED\u5408 \u5C31\u521B\u5EFA\u4E00\u4E2A\u65B0\u7684\u7EBF \u5305\u62EC\u521B\u5EFA\u7B2C\u4E00\u6761\u7EBF\n if (!this.isClose) {\n const line = createLine(stroke)\n // \u8BBE\u7F6E\u7EBF\u7684\u8D77\u59CB\u70B9\n setLineStartEnd(line, { x, y }, { x, y })\n this.addLine(line)\n }\n }\n }\n\n /**\n * \u68C0\u6D4B\u662F\u5426\u53EF\u4EE5\u5438\u9644\n * \u5750\u6807\u70B9\u6700\u5C113\u4E2A \u4F20\u5165\u7684\u5750\u6807\u70B9\u548C\u7B2C\u4E00\u4E2A\u5750\u6807\u7684\u50CF\u7D20\u76F8\u5DEE\u4E0D\u8D85\u8FC75\u4E2A\u50CF\u7D20\n */\n checkAdsorb(x: number, y: number) {\n if (this.points.length < 3) { return false }\n const circle = this.circles[0]\n const cx = +circle.getAttribute(\"cx\")!\n const cy = +circle.getAttribute(\"cy\")!\n return Math.sqrt((x - cx) ** 2 + (y - cy) ** 2) <= 5\n }\n\n addPoint(vector: Vector3) {\n this.points.push(vector)\n if (this.isClose) {\n const area = this.calculatedArea()\n this.dispatchEvent({ type: 'area', area })\n }\n }\n // \u8BA1\u7B97\u9762\u79EF\n calculatedArea() {\n const cds = this.points.map(item => [item.x, item.y])\n let area = 0\n const numPoints = cds.length\n for (let i = 0; i < numPoints; i++) {\n const j = (i + 1) % numPoints\n area += (cds[i][0] * cds[j][1] - cds[j][0] * cds[i][1])\n }\n return Math.abs(area / 2)\n }\n\n dispose() {\n super.dispose()\n this.unRegistryEvent()\n this.lines = []\n this.circles = []\n }\n}", "import { Context } from \"../context\";\nimport { Box3 } from \"three\";\nimport { vector3ToDevice, createRect, setRectPosition } from '../utils'\nimport { BaseSvg } from './base-svg'\nimport { Graphic } from \"./graphic\";\n\ninterface SvgLineEventMap {\n 'distance': { distance: number }\n}\n\nexport class SelectBox extends BaseSvg<SvgLineEventMap> {\n\n private rect!: SVGElement\n\n private cornerRect: SVGElement[] = [] // \u56DB\u4E2A\u89D2\u4E0A\u7684\u65B9\u5757\n\n private centerRect: SVGElement[] = [] // \u56DB\u4E2A\u7EBF\u4E2D\u95F4\u7684\u65B9\u5757\n\n private graphic?: Graphic\n\n constructor(public context: Context) {\n super(context)\n const { config: { svg: { line } } } = context\n this.rect = createRect(line.stroke, \"transparent\")\n this.svg.appendChild(this.rect)\n for (let i = 0; i < 4; i++) {\n this.cornerRect[i] = createRect(line.stroke, \"#ffffff\")\n this.centerRect[i] = createRect(line.stroke, \"#ffffff\")\n this.svg.appendChild(this.cornerRect[i])\n this.svg.appendChild(this.centerRect[i])\n }\n this.registryEvent()\n }\n\n setEnable(enable: boolean) {\n super.setEnable(enable)\n if (enable) {\n this.registryEvent()\n } else {\n this.unRegistryEvent()\n }\n }\n\n registryEvent() { \n this.context.addEventListener(\"update\", this.onUpdate)\n }\n \n unRegistryEvent() { \n this.context.removeEventListener(\"update\", this.onUpdate)\n }\n\n onUpdate = () => {\n if (!this.graphic) {\n setRectPosition(this.rect, 0, 0, 0, 0)\n for (let i = 0; i < this.cornerRect.length; i++) {\n setRectPosition(this.cornerRect[i], 0, 0, 0, 0)\n setRectPosition(this.centerRect[i], 0, 0, 0, 0)\n }\n } else {\n const box = new Box3().setFromObject(this.graphic)\n const { camera, container: { clientWidth: w, clientHeight: h } } = this.context\n const { min, max } = box\n const leftBottom = vector3ToDevice(min, camera, w, h)\n const rightTop = vector3ToDevice(max, camera, w, h)\n // \u753B\u51FA\u4E00\u4E2A\u6846\u6765\n setRectPosition(this.rect, leftBottom.x, rightTop.y, Math.abs(rightTop.x - leftBottom.x), Math.abs(rightTop.y - leftBottom.y))\n // \u56DB\u4E2A\u89D2\u7684\u4F4D\u7F6E\n const { x: left, y: bottom } = leftBottom\n const { x: right, y: top } = rightTop\n const halfWidth = 5;\n const corners = [\n { x: left - halfWidth, y: top - halfWidth }, // \u5DE6\u4E0A\u89D2\n { x: right - halfWidth, y: top - halfWidth }, // \u53F3\u4E0A\u89D2\n { x: left - halfWidth, y: bottom - halfWidth }, // \u5DE6\u4E0B\u89D2\n { x: right - halfWidth, y: bottom - halfWidth }, // \u53F3\u4E0B\u89D2 \n ]\n for (let i = 0; i < corners.length; i++) {\n setRectPosition(this.cornerRect[i], corners[i].x, corners[i].y, halfWidth * 2, halfWidth * 2)\n }\n // \u56DB\u4E2A\u4E2D\u95F4\u7684\u4F4D\u7F6E\n const centerHalfWidth = 4;\n const centerX = (left + right) / 2\n const centerY = (bottom + top) / 2\n const centers = [\n { x: centerX - centerHalfWidth, y: top - centerHalfWidth }, // \u4E0A\n { x: left - centerHalfWidth, y: centerY - centerHalfWidth }, // \u5DE6\n { x: right - centerHalfWidth, y: centerY - centerHalfWidth }, // \u53F3\n { x: centerX - centerHalfWidth, y: bottom - centerHalfWidth }, // \u4E0B\n ]\n for (let i = 0; i < centers.length; i++) {\n setRectPosition(this.centerRect[i], centers[i].x, centers[i].y, centerHalfWidth * 2, centerHalfWidth * 2)\n }\n }\n }\n \n selectGraphic(graphic: Graphic) { \n this.graphic = graphic\n }\n\n dispose() {\n super.dispose()\n this.unRegistryEvent()\n this.rect = null as unknown as SVGElement\n this.cornerRect = []\n this.centerRect = []\n }\n}", "import { createRect, isContain, setRectPosition, vector3ToDevice } from \"../../utils\";\nimport { Context } from \"../../context\";\nimport { BaseSvg, Graphic } from \"../../elements\";\nimport { Frustum, Vector3 } from \"three\";\n\ninterface BoxSelectionEventMap { \n \"selected\": {\n list: Graphic[]\n }\n}\n\nexport class BoxSelection extends BaseSvg<BoxSelectionEventMap> {\n\n private startPoint?: Vector3;\n\n private endPoint?: Vector3;\n\n rect: SVGElement;\n\n frustum = new Frustum();\n\n constructor(context: Context) { \n super(context);\n const { config: { selectBox: { fill, stroke } } } = context\n this.rect = createRect(stroke, fill)\n this.svg.appendChild(this.rect)\n this.registryEvent()\n }\n\n setEnable(enable: boolean): void {\n super.setEnable(enable)\n setRectPosition(this.rect, 0, 0, 0, 0)\n }\n\n onPointerDown = (e: PointerEvent) => { \n if (!this.enable) { return }\n const point = this.getIntersectByPointerEvent(e)\n if (point) { \n this.startPoint = point\n }\n this.endPoint = undefined;\n }\n\n onPointerMove = (e: PointerEvent) => { \n if (!this.enable || !this.startPoint) { return }\n const point = this.getIntersectByPointerEvent(e)\n if (point) { \n this.endPoint = point\n }\n }\n\n onPointerUp = (e: PointerEvent) => { \n if (!this.enable) { return }\n const point = this.getIntersectByPointerEvent(e)\n if (point) { \n this.endPoint = point\n }\n this.doSelect()\n this.startPoint = undefined\n }\n\n onUpdate = () => {\n if (this.startPoint) {\n const startPoint = this.getSvgCoordinate(this.startPoint)\n let endPoint = { ...startPoint }\n if (this.endPoint) {\n endPoint = this.getSvgCoordinate(this.endPoint)\n }\n const leftTop = { x: Math.min(startPoint.x, endPoint.x), y: Math.min(startPoint.y, endPoint.y) }\n const width = Math.abs(endPoint.x - startPoint.x)\n const height = Math.abs(endPoint.y - startPoint.y)\n setRectPosition(this.rect, leftTop.x, leftTop.y, width, height)\n }\n \n }\n\n registryEvent() { \n this.context.container.addEventListener(\"pointerdown\", this.onPointerDown)\n this.context.container.addEventListener(\"pointermove\", this.onPointerMove)\n this.context.container.addEventListener(\"pointerup\", this.onPointerUp)\n this.context.addEventListener(\"update\", this.onUpdate)\n }\n \n unRegistryEvent() { \n this.context.container.removeEventListener(\"pointerdown\", this.onPointerDown)\n this.context.container.removeEventListener(\"pointermove\", this.onPointerMove)\n this.context.container.removeEventListener(\"pointerup\", this.onPointerUp)\n this.context.removeEventListener(\"update\", this.onUpdate)\n }\n\n doSelect() { \n if (this.startPoint && this.endPoint) {\n const dis = this.startPoint.distanceTo(this.endPoint);\n if (dis < 0.1) { return }\n const { context: { camera, container: { clientWidth: w, clientHeight: h } } } = this\n const startDevice = vector3ToDevice(this.startPoint!, camera, w, h)\n const endDevice = vector3ToDevice(this.endPoint!, camera, w, h)\n const leftTop = { x: Math.min(startDevice.x, endDevice.x), y: Math.min(startDevice.y, endDevice.y) }\n const rightBottom = { x: Math.max(startDevice.x, endDevice.x), y: Math.max(startDevice.y, endDevice.y) }\n const list = this.searchMapInFrustum(leftTop, rightBottom);\n this.dispatchEvent({ type: \"selected\", list })\n }\n }\n\n searchMapInFrustum(leftTop: { x: number, y: number }, rightBottom: { x: number, y: number }): Graphic[] {\n const { context } = this\n return context.currentFloor?.graphicLayer.children.filter(item => {\n return item instanceof Graphic && this.searchChildInFrustum(item, leftTop, rightBottom)\n }) as Graphic[] || []\n }\n\n searchChildInFrustum(object: Graphic, leftTop: { x: number, y: number }, rightBottom: { x: number, y: number }): boolean {\n const { context: { camera, container: { clientWidth: w, clientHeight: h } } } = this\n if (!object) return false;\n if (!object.mesh.geometry.boundingBox) {\n object.mesh.geometry.computeBoundingBox();\n }\n const box = object.mesh.geometry.boundingBox;\n if (!box) { return false }\n const { min, max } = box\n const minDevice = vector3ToDevice(min, camera, w, h)\n const maxDevice = vector3ToDevice(max, camera, w, h)\n \n if (!isContain(minDevice, leftTop, rightBottom)) { return false }\n if (!isContain(maxDevice, leftTop, rightBottom)) { return false; }\n return true;\n }\n\n dispose() {\n this.unRegistryEvent()\n }\n}\n\n", "import { Graphic } from \"../../elements\";\nimport { Context } from \"../../context\";\nimport { EventDispatcher } from \"three\";\nimport { Timer } from \"../../utils\";\n\ninterface HoverHelperEventMap {\n \"hover-change\": {\n graphics: Graphic[]\n },\n}\n\nexport class HoverHelper extends EventDispatcher<HoverHelperEventMap> { \n\n curGraphics = new Set<Graphic>()\n\n timer = new Timer()\n\n graphicTimerMap = new Map<Graphic, number>()\n \n constructor(private context: Context) {\n super()\n this.registryEvent()\n }\n\n onPointerMove = ({ graphics }: { graphics: Graphic[] }) => {\n if (!graphics.length && this.curGraphics.size) {\n this.curGraphics.clear()\n this.handleHoverGraphicsChange()\n return\n }\n const { time } = this.context.config.hover\n graphics.forEach((graphic) => {\n // \u5982\u679C\u5DF2\u7ECF\u6709hover\u7684\u5B9A\u65F6\u5668\u5728\u6267\u884C\u4E86\u5C31\u8FD4\u56DE\n if (this.graphicTimerMap.get(graphic)) { \n return\n }\n // \u5982\u679C\u8FD9\u4E2A\u5143\u7D20\u7684hover\u5DF2\u7ECF\u89E6\u53D1\u8FC7\u4E86\u5C31\u8FD4\u56DE\n if (this.curGraphics.has(graphic)) { \n return\n }\n // \u8FD9\u4E2A\u5143\u7D20\u6CA1\u6709\u89E6\u53D1\u8FC7\u4E5F\u6CA1\u6709\u5B9A\u65F6\u5668\u5C31\u6DFB\u52A0\u4E00\u4E2A\u5B9A\u65F6\u5668\n const timer = this.timer.setTimeout(() => {\n this.curGraphics.add(graphic)\n this.handleHoverGraphicsChange()\n }, time)\n this.graphicTimerMap.set(graphic, timer)\n })\n // \u5982\u679C\u5B9A\u65F6\u5668\u7684\u5143\u7D20\u4E0D\u5B58\u5728\u5728\u5F53\u524Dgraphics\u4E2D\u4E86\u5C31\u5220\u9664\n this.graphicTimerMap.forEach((timer, graphic) => { \n if (!graphics.includes(graphic)) { \n this.timer.clearTimeout(timer)\n this.graphicTimerMap.delete(graphic)\n }\n })\n // \u5982\u679C\u5DF2\u7ECFhover\u7684\u5143\u7D20\u4E0D\u5B58\u5728\u5728\u5F53\u524D\u7684graphics\u4E86\u5C31\u5220\u9664\n const size = this.curGraphics.size\n this.curGraphics.forEach((graphic) => { \n if (!graphics.includes(graphic)) { \n this.curGraphics.delete(graphic)\n }\n })\n // \u5982\u679C\u6709\u5220\u9664\u5C31\u89E6\u53D1\u4E8B\u4EF6\n if (size !== this.curGraphics.size) {\n this.handleHoverGraphicsChange()\n }\n }\n\n onPointerLevel = () => {\n this.curGraphics.clear()\n this.handleHoverGraphicsChange()\n }\n\n handleHoverGraphicsChange(graphics = this.curGraphics) { \n this.dispatchEvent({ type: 'hover-change', graphics: Array.from(this.curGraphics) })\n }\n\n registryEvent() {\n this.context.addEventListener(\"pointer-over\", this.onPointerMove)\n this.context.addEventListener(\"pointer-move\", this.onPointerMove)\n this.context.addEventListener(\"pointer-level\", this.onPointerLevel)\n }\n\n unRegistryEvent() {\n this.context.removeEventListener(\"pointer-over\", this.onPointerMove)\n this.context.removeEventListener(\"pointer-move\", this.onPointerMove)\n this.context.removeEventListener(\"pointer-level\", this.onPointerLevel)\n }\n\n dispose() {\n this.unRegistryEvent()\n this.timer.dispose()\n }\n}", "import { merge } from 'lodash'\nimport { HeatmapConfiguration } from '@mars3d/heatmap.js'\n\nexport interface Config {\n apiDomain: string,\n apiInfo: RequestInit,\n apiPath: {\n floorGraphic: string,\n floorRange: string\n },\n heatMap: Partial<HeatmapConfiguration>,\n useFloorCache: boolean;\n control: {\n maxPolar: number\n },\n svg: {\n circle: {\n radius: string;\n fill: string;\n },\n line: {\n stroke: string;\n }\n },\n selectBox: {\n stroke: string;\n fill: string;\n },\n hover: {\n time: number;\n }\n}\n\nexport const defaultConfig: Config = {\n apiDomain: \"\",\n apiInfo: {},\n apiPath: {\n floorGraphic: \"/api/inception-map/floor/get\",\n floorRange: \"/api/inception-map/range/get\"\n },\n heatMap: {\n radius: 50,\n gradient: {\n 0: '#8F9FCD',\n 0.5: '#6284FF',\n 1: '#F95D5D',\n },\n },\n useFloorCache: true,\n control: {\n maxPolar: 1.2\n },\n svg: {\n circle: {\n radius: \"2\",\n fill: \"#1CADFF\"\n },\n line: {\n stroke: \"#1CADFF\"\n }\n },\n selectBox: {\n stroke: \"#1CADFF\",\n fill: \"rgba(28, 173, 255, 0.3)\"\n },\n hover: {\n time: 500\n }\n}\n\nexport function getConfig(config: Partial<Config>): Config {\n return merge({}, defaultConfig, config);\n}"],
5
+ "mappings": "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",
6
+ "names": ["EventDispatcher", "Timer", "__publicField", "fn", "timer", "wait", "Scene", "WebGLRenderer", "OrthographicCamera", "HemisphereLight", "Shape", "PCFSoftShadowMap", "Group", "Color", "DirectionalLight", "AmbientLight", "Path", "Vector2", "MapControls", "initScene", "scene", "initRenderer", "renderer", "initCamera", "width", "height", "camera", "initLight", "lights", "hemisphereLight", "ambientLight", "initControl", "domElement", "control", "initShape", "path", "holePath", "shape", "item", "cur", "hole", "initDirectionalLight", "color", "intensity", "directionalLight", "dispose", "o", "recursive", "_a", "child", "m", "mat", "hasChinese", "str", "DataTexture", "RGBAFormat", "LinearFilter", "textTextureMap", "initCanvas", "canvas", "ctx", "createCanvas", "c", "t", "getTextureByText", "text", "y", "hasChinese", "width", "imageData", "texture", "DataTexture", "RGBAFormat", "LinearFilter", "clearTextTexture", "clearCanvas", "point", "featureCollection", "center", "vector3ToDevice", "vector", "camera", "w", "h", "_vector", "_w", "_h", "x", "y", "getCenter", "coordinates", "features", "item", "isContain", "start", "end", "proxyOptions", "target", "master", "p", "receiver", "newValue", "res", "timeoutPromise", "promise", "timeout", "resolve", "reject", "createSvgElement", "tag", "createSvg", "w", "h", "svg", "createCircle", "radius", "fill", "circle", "createLine", "stroke", "line", "createRect", "rect", "setCirclePosition", "x", "y", "setLineStartEnd", "start", "end", "setRectPosition", "EventDispatcher", "Box2", "Vector3", "Vector2", "Raycaster", "Box3", "Color", "AmbientLight", "TweenGroup", "Tween", "EventDispatcher", "Object3D", "ExtrudeGeometry", "MeshStandardMaterial", "Mesh", "Color", "Box3", "LineSegments", "EdgesGeometry", "LineBasicMaterial", "Vector3", "merge", "defaultOptions", "Graphic", "Object3D", "context", "options", "__publicField", "proxyOptions", "merge", "x", "y", "value", "Color", "center", "Vector3", "box", "Box3", "size", "shape", "initShape", "ExtrudeGeometry", "MeshStandardMaterial", "LineBasicMaterial", "Mesh", "material", "geometry", "EdgesGeometry", "line", "LineSegments", "raycaster", "intersects", "position", "distance", "dispose", "Object3D", "PlaneGeometry", "Mesh", "ShadowMaterial", "Color", "DoubleSide", "Shadow", "Object3D", "__publicField", "directionalLight", "initDirectionalLight", "size", "x", "y", "color", "Color", "position", "width", "height", "geometry", "PlaneGeometry", "material", "ShadowMaterial", "DoubleSide", "mesh", "Mesh", "target", "opacity", "dispose", "Object3D", "merge", "Box3", "EventDispatcher", "Vector3", "Overlay", "EventDispatcher", "context", "__publicField", "Vector3", "vector", "clientWidth", "clientHeight", "x", "y", "vector3ToDevice", "div", "element", "visible", "display", "opacity", "Box3", "defaultOptions", "Poi", "Object3D", "context", "options", "__publicField", "proxyOptions", "merge", "Overlay", "value", "div", "textDiv", "f", "item", "_a", "_b", "img", "visible", "x", "y", "box", "Box3", "Object3D", "Vector3", "Box3", "Vector3", "Object3D", "Layer", "Object3D", "context", "dispose", "GraphicLayer", "Layer", "context", "__publicField", "Box3", "Vector3", "options", "graphic", "Graphic", "raycaster", "initData", "data", "res", "item", "pos", "distance", "PoiLayer", "Layer", "context", "__publicField", "options", "poi", "Poi", "index", "item", "i", "x", "y", "range", "left", "right", "top", "bottom", "valid", "box", "xIntersect", "yIntersect", "MeshBasicMaterial", "Object3D", "PlaneGeometry", "Texture", "DoubleSide", "Mesh", "Matrix3", "Vector2", "create", "featureCollection", "point", "bbox", "getCenter", "HeatmapElement", "Object3D", "context", "__publicField", "data", "width", "height", "leftTop", "center", "create", "__spreadValues", "geometry", "PlaneGeometry", "texture", "Texture", "material", "MeshBasicMaterial", "DoubleSide", "Mesh", "x", "y", "Matrix3", "matrix", "item", "vector", "Vector2", "features", "featureCollection", "point", "box", "bbox", "getCenter", "Floor", "Object3D", "context", "__publicField", "Shadow", "GraphicLayer", "PoiLayer", "grounds", "ground", "Box3", "Vector3", "box", "center", "size", "graphicOptions", "poiOptions", "data", "HeatmapElement", "opacity", "visible", "_a", "EventDispatcher", "Vector3", "BaseSvg", "EventDispatcher", "context", "__publicField", "createSvg", "enable", "e", "camera", "renderer", "x", "y", "clientWidth", "clientHeight", "nx", "ny", "Vector3", "vector", "container", "vector3ToDevice", "SvgLine", "BaseSvg", "context", "__publicField", "point1", "setCirclePosition", "setLineStartEnd", "point2", "e", "point", "x", "y", "circle", "line", "createCircle", "createLine", "enable", "vector", "distance", "x1", "y1", "x2", "y2", "__pow", "SvgPolygon", "BaseSvg", "context", "__publicField", "point", "index", "devicePoint", "setCirclePosition", "setLineStartEnd", "e", "x", "y", "fill", "radius", "stroke", "circle", "createCircle", "line", "createLine", "enable", "cx", "cy", "__pow", "vector", "area", "cds", "item", "numPoints", "i", "j", "Box3", "SelectBox", "BaseSvg", "context", "__publicField", "box", "Box3", "camera", "w", "h", "min", "max", "leftBottom", "vector3ToDevice", "rightTop", "setRectPosition", "left", "bottom", "right", "top", "halfWidth", "corners", "i", "centerHalfWidth", "centerX", "centerY", "centers", "line", "createRect", "enable", "graphic", "Frustum", "BoxSelection", "BaseSvg", "context", "__publicField", "Frustum", "e", "point", "startPoint", "endPoint", "__spreadValues", "leftTop", "width", "height", "setRectPosition", "fill", "stroke", "createRect", "enable", "camera", "w", "h", "startDevice", "vector3ToDevice", "endDevice", "rightBottom", "list", "_a", "item", "Graphic", "object", "box", "min", "max", "minDevice", "maxDevice", "isContain", "Selection", "EventDispatcher", "context", "__publicField", "e", "graphics", "item", "list", "BoxSelection", "EventDispatcher", "HoverHelper", "EventDispatcher", "context", "__publicField", "Timer", "graphics", "time", "graphic", "timer", "size", "Context", "EventDispatcher", "container", "config", "__publicField", "initScene", "initRenderer", "initLight", "Timer", "TweenGroup", "camera", "renderer", "w", "h", "e", "graphics", "position", "pois", "Selection", "HoverHelper", "initCamera", "initControl", "_a", "polarAngle", "point1", "Vector3", "point2", "clientWidth", "clientHeight", "device1", "vector3ToDevice", "device2", "__pow", "color", "item", "AmbientLight", "Color", "floor", "x", "y", "point", "Vector2", "raycaster", "Raycaster", "polar", "duration", "timeoutPromise", "resolve", "start", "end", "tween", "Tween", "zoom", "center", "lookAtVector", "object", "padding", "top", "right", "bottom", "left", "boundingBox", "Box3", "max", "min", "max2d", "min2d", "size", "Box2", "xScale", "yScale", "scale", "light", "dispose", "merge", "defaultConfig", "getConfig", "config", "BMap", "EventDispatcher", "container", "config", "__publicField", "e", "polar", "azimuthal", "getConfig", "Context", "_0", "__async", "brand", "project", "phase", "building", "floor", "ts", "resource_type_list", "apiDomain", "floorGraphic", "apiInfo", "url", "res", "item", "key", "floorRange", "data", "floorKey", "buildGround", "center", "getCenter", "cds", "coord", "x", "y", "curFloor", "Floor", "groundGraphics", "ground", "Graphic", "graphicData", "legacyToGraphicMap", "graphics", "graphic", "curFloorData", "buildingKey", "createdFloor", "_a", "options", "poi", "position", "ele", "duration", "vector", "clientWidth", "clientHeight", "vector3ToDevice", "type", "zoom", "cameraZoom", "keys", "radius", "resolve", "reject", "SvgLine", "dispose", "distance", "SvgPolygon", "area", "nodeId", "clearTextTexture", "clearCanvas"]
7
7
  }