@aibee/crc-bmap 0.0.4 → 0.0.5

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
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/config.ts", "../src/elements/graphic.ts", "../src/elements/shadow.ts", "../src/elements/poi.ts", "../src/elements/overlay.ts", "../src/elements/floor.ts", "../src/layer/layer.ts", "../src/layer/graphic-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"],
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, 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}\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 floorDataMap: Map<string, GraphicInfo[]> = new Map()\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 }: LoadQuery): Promise<GraphicInfo[]> {\n const { apiDomain } = this.config\n const url = `${apiDomain}/api/floor/get?brand=${brand}&project=${project}&phase=${phase}&building=${building}&floor=${floor}&ts=${ts}&resource_type_list=`\n const data = await fetch(url)\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 private async loadBuildingGround({ brand, project, phase, building }: Omit<LoadQuery, \"floor\" | \"ts\">): Promise<GraphicInfo>{ \n const { apiDomain } = this.config\n const url = `${apiDomain}/api/range/get?brand=${brand}&project=${project}&phase=${phase}&building=${building}`\n const data = await fetch(url)\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[0]\n }\n\n async load({ brand, project, phase, building, floor, ts }: LoadQuery) {\n if (this.floorDataMap.get(floor)) { return }\n const [data, buildGround] = await Promise.all([\n this.loadGraphics({ brand, project, phase, building, floor, ts }),\n this.loadBuildingGround({ brand, project, phase, building })\n ])\n const center = getCenter(buildGround.info.geometry.cds[0])\n data.forEach(item => {\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 })\n if (!this.config.useFloorCache) {\n this.floorDataMap.clear()\n }\n this.floorDataMap.set(floor, data)\n return data\n }\n\n private createFloor(data: GraphicInfo[]) { \n const curFloor = new Floor(this.context)\n // \u627E\u51FA\u5730\u9762\u56FE\u5143\n let groundIndex = data.findIndex(item => item.info.group === \"floor\")\n if (groundIndex === -1) {\n groundIndex = 0\n }\n const ground = data[groundIndex]\n console.log(ground.info.height, ground.info.airHeight)\n const list = [...data]\n list.splice(groundIndex, 1)\n const groundGraphic = new Graphic(this.context, ground.info)\n curFloor.addGround(groundGraphic)\n const legacyToGraphicMap = new Map<string, Graphic>()\n const graphics = list.map(item => { \n const graphic = curFloor.addGraphic(item.info)\n legacyToGraphicMap.set(item.legacy_id, graphic)\n return graphic\n })\n curFloor.userData.legacyToGraphicMap = legacyToGraphicMap\n return { curFloor, ground: groundGraphic, graphics }\n }\n\n switchFloor(floor: string) {\n const curFloorData = this.floorDataMap.get(floor)\n if (curFloorData) {\n const { curFloor } = this.createFloor(curFloorData)\n this.context.switchFloor(curFloor)\n this.context.fitCameraToGround(undefined, 0);\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 createGraphicPoi(graphic: Graphic, options: PoiOptionsParam) { \n if (this.context.currentFloor) {\n const poi = this.context.currentFloor.addPoi(options)\n poi.position.copy(graphic.getCenter())\n poi.position.z = poi.position.z + graphic.options.height / 2\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 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\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[]) { \n const shape = new Shape();\n if (Array.isArray(path[0])) {\n shape.moveTo(...path[0]);\n for (let i = 1; i < path.length; i++) {\n shape.lineTo( ...path[i] );\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(64, 64);\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}", "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\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}", "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 { GraphicLayer, PoiLayer } from \"./layer\";\nimport { Group as TweenGroup, Tween } from \"@tweenjs/tween.js\";\nimport { Config } from \"./config\";\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}\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 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\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(floor)\n floor.dispose()\n }\n this.currentFloor = floor\n this.scene.add(floor)\n // \u4FEE\u6539\u706F\u5149\u7684\u4F4D\u7F6E\n const position = floor.ground?.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(window.innerWidth, window.innerHeight);\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 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 }\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 }\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 const ground = this.currentFloor?.ground;\n if (ground) {\n return this.fitCameraToObject(ground, 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.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 { merge } from 'lodash'\nimport { HeatmapConfiguration } from '@mars3d/heatmap.js'\n\nexport interface Config {\n apiDomain: string,\n apiInfo: RequestInit,\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}\n\nexport const defaultConfig: Config = {\n apiDomain: \"\",\n apiInfo: {},\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: \"#EFF4FB\"\n },\n line: {\n stroke: \"#EFF4FB\"\n }\n }\n}\n\nexport function getConfig(config: Partial<Config>): Config {\n return merge({}, defaultConfig, config);\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 { Coordinate, GraphicOptions } 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 private 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 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 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 const box = new Box3()\n const size = new Vector3()\n box.setFromObject(this)\n box.getSize(size)\n return size\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(this.options.geometry.cds[0])\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 \n createBorder() {\n const material = this.initLineMaterial()\n const geometry = new EdgesGeometry( this.geometry );\n const line = new LineSegments(geometry, material)\n return line\n }\n\n raycast(raycaster: Raycaster) {\n if (!this.visible) { return false }\n const intersects = raycaster.intersectObject(this.mesh)\n if (intersects[0]) {\n const position = intersects[0].point\n return position\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 // \u521B\u5EFA\u5E73\u9762\u767D\u8272\n initPlane(width = 10000, height = 10000) { \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 = -20\n this.add(mesh)\n this.plane = mesh\n return mesh\n }\n\n setTarget(target: Graphic) {\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}\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}\n\nexport type PoiOptionsParam = Partial<PoiOptions>\n\nexport class Poi extends Object3D<PoiEventMap> {\n\n private span!: HTMLSpanElement\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.span.textContent = 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 initText() {\n const span = document.createElement(\"span\")\n span.style.whiteSpace = 'nowrap';\n span.textContent = this.options.text\n this.span = span\n return span\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.overlay.dispose();\n this.span = null as unknown as HTMLSpanElement;\n this.img = undefined\n }\n}", "import { Context } from \"../context\";\nimport { 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\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 getPosition() {\n return this.element\n ? this.element.position.clone().setFromMatrixPosition(this.element.matrixWorld)\n : this.position\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 { Object3D } 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 ground?: Graphic;\n\n shadow = new Shadow();\n\n heatmap?: HeatmapElement;\n\n constructor(public context: Context) {\n super()\n this.graphicLayer = new GraphicLayer(this.context);\n this.poiLayer = new PoiLayer(this.context);\n this.add(this.graphicLayer)\n this.add(this.poiLayer)\n this.add(this.shadow)\n }\n\n addGround(ground: Graphic) {\n this.ground = ground\n this.add(ground)\n const center = ground.getCenter()\n const size = ground.getSize()\n this.shadow.position.x = center.x;\n this.shadow.position.y = center.y;\n this.shadow.changeLightCamera(size)\n this.shadow.setTarget(ground)\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 if (this.ground) {\n this.heatmap.position.setZ(this.ground?.options.airHeight + this.ground?.options.height)\n }\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.ground?.dispose()\n this.heatmap?.dispose()\n this.clear()\n }\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 { Graphic, GraphicOptionsParam } from \"../elements\";\nimport { Raycaster, Vector3 } from \"three\";\nimport { Layer } from \"./layer\";\nimport { Context } from \"../context\";\n\nexport class GraphicLayer extends Layer {\n\n constructor(context: Context) {\n super(context)\n }\n\n createGraphic(options: GraphicOptionsParam) {\n const graphic = new Graphic(this.context, options)\n this.add(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 let position: Vector3 | null = null;\n const graphics = this.children.filter(item => {\n if (item instanceof Graphic) {\n const pos = item.raycast(raycaster)\n if (pos) {\n if (position) {\n if (pos.z > position.z) {\n position = pos \n }\n } else {\n position = pos \n }\n }\n return !!pos\n }\n }) as Graphic[]\n return { graphics, position }\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, Raycaster, Vector2, 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 if (!this.context.currentFloor?.ground) { return }\n const { offsetX: x, offsetY: y } = e\n const point = new Vector2();\n point.x = (x / this.context.container.clientWidth) * 2 - 1;\n point.y = (y / this.context.container.clientHeight) * -2 + 1;\n const raycaster = new Raycaster();\n raycaster.setFromCamera(point, this.context.camera);\n const intersects = raycaster.intersectObjects(this.context.currentFloor.ground.children, true)\n return intersects[0]\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 intersect = this.getIntersectByPointerEvent(e)\n if (intersect?.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(intersect.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 { Matrix4, Vector3 } from \"three\";\nimport { area, polygon, bbox } from '@turf/turf'\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 intersect = this.getIntersectByPointerEvent(e)\n if (intersect?.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(intersect.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}"],
5
- "mappings": "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",
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, 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}\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 floorDataMap: Map<string, GraphicInfo[]> = new Map()\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 }: LoadQuery): Promise<GraphicInfo[]> {\n const { apiDomain } = this.config\n const url = `${apiDomain}/api/floor/get?brand=${brand}&project=${project}&phase=${phase}&building=${building}&floor=${floor}&ts=${ts}&resource_type_list=`\n const data = await fetch(url)\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 private async loadBuildingGround({ brand, project, phase, building }: Omit<LoadQuery, \"floor\" | \"ts\">): Promise<GraphicInfo>{ \n const { apiDomain } = this.config\n const url = `${apiDomain}/api/range/get?brand=${brand}&project=${project}&phase=${phase}&building=${building}`\n const data = await fetch(url)\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[0]\n }\n\n async load({ brand, project, phase, building, floor, ts }: LoadQuery) {\n if (this.floorDataMap.get(floor)) { return }\n const [data, buildGround] = await Promise.all([\n this.loadGraphics({ brand, project, phase, building, floor, ts }),\n this.loadBuildingGround({ brand, project, phase, building })\n ])\n const center = getCenter(buildGround.info.geometry.cds[0])\n data.forEach(item => {\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 })\n if (!this.config.useFloorCache) {\n this.floorDataMap.clear()\n }\n this.floorDataMap.set(floor, data)\n return data\n }\n\n private createFloor(data: GraphicInfo[]) { \n const curFloor = new Floor(this.context)\n // \u627E\u51FA\u5730\u9762\u56FE\u5143\n let groundIndex = data.findIndex(item => item.info.group === \"floor\")\n if (groundIndex === -1) {\n groundIndex = 0\n }\n const ground = data[groundIndex]\n console.log(ground.info.height, ground.info.airHeight)\n const list = [...data]\n list.splice(groundIndex, 1)\n const groundGraphic = new Graphic(this.context, ground.info)\n curFloor.addGround(groundGraphic)\n const legacyToGraphicMap = new Map<string, Graphic>()\n const graphics = list.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.userData.legacyToGraphicMap = legacyToGraphicMap\n return { curFloor, ground: groundGraphic, graphics }\n }\n\n switchFloor(floor: string) {\n const curFloorData = this.floorDataMap.get(floor)\n if (curFloorData) {\n const { curFloor } = this.createFloor(curFloorData)\n this.context.switchFloor(curFloor)\n this.context.fitCameraToGround(undefined, 0);\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 createGraphicPoi(graphic: Graphic, options: PoiOptionsParam) { \n if (this.context.currentFloor) {\n const poi = this.context.currentFloor.addPoi(options)\n poi.position.copy(graphic.getCenter())\n poi.position.z = poi.position.z + graphic.options.height / 2\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 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\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[]) { \n const shape = new Shape();\n if (Array.isArray(path[0])) {\n shape.moveTo(...path[0]);\n for (let i = 1; i < path.length; i++) {\n shape.lineTo( ...path[i] );\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(64, 64);\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}", "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\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}", "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 { GraphicLayer, PoiLayer } from \"./layer\";\nimport { Group as TweenGroup, Tween } from \"@tweenjs/tween.js\";\nimport { Config } from \"./config\";\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}\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 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\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(floor)\n floor.dispose()\n }\n this.currentFloor = floor\n this.scene.add(floor)\n // \u4FEE\u6539\u706F\u5149\u7684\u4F4D\u7F6E\n const position = floor.ground?.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(window.innerWidth, window.innerHeight);\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 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 }\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 }\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 const ground = this.currentFloor?.ground;\n if (ground) {\n return this.fitCameraToObject(ground, 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.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 { merge } from 'lodash'\nimport { HeatmapConfiguration } from '@mars3d/heatmap.js'\n\nexport interface Config {\n apiDomain: string,\n apiInfo: RequestInit,\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}\n\nexport const defaultConfig: Config = {\n apiDomain: \"\",\n apiInfo: {},\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: \"#EFF4FB\"\n },\n line: {\n stroke: \"#EFF4FB\"\n }\n }\n}\n\nexport function getConfig(config: Partial<Config>): Config {\n return merge({}, defaultConfig, config);\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 { Coordinate, GraphicOptions } 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 private 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 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 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 const box = new Box3()\n const size = new Vector3()\n box.setFromObject(this)\n box.getSize(size)\n return size\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(this.options.geometry.cds[0])\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 \n createBorder() {\n const material = this.initLineMaterial()\n const geometry = new EdgesGeometry( this.geometry );\n const line = new LineSegments(geometry, material)\n return line\n }\n\n raycast(raycaster: Raycaster) {\n if (!this.visible) { return false }\n const intersects = raycaster.intersectObject(this.mesh)\n if (intersects[0]) {\n const position = intersects[0].point\n return position\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 // \u521B\u5EFA\u5E73\u9762\u767D\u8272\n initPlane(width = 10000, height = 10000) { \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 = -20\n this.add(mesh)\n this.plane = mesh\n return mesh\n }\n\n setTarget(target: Graphic) {\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}\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}\n\nexport type PoiOptionsParam = Partial<PoiOptions>\n\nexport class Poi extends Object3D<PoiEventMap> {\n\n private span!: HTMLSpanElement\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.span.textContent = 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 initText() {\n const span = document.createElement(\"span\")\n span.style.whiteSpace = 'nowrap';\n span.textContent = this.options.text\n this.span = span\n return span\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.overlay.dispose();\n this.span = null as unknown as HTMLSpanElement;\n this.img = undefined\n }\n}", "import { Context } from \"../context\";\nimport { 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\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 getPosition() {\n return this.element\n ? this.element.position.clone().setFromMatrixPosition(this.element.matrixWorld)\n : this.position\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 { Object3D } 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 ground?: Graphic;\n\n shadow = new Shadow();\n\n heatmap?: HeatmapElement;\n\n constructor(public context: Context) {\n super()\n this.graphicLayer = new GraphicLayer(this.context);\n this.poiLayer = new PoiLayer(this.context);\n this.add(this.graphicLayer)\n this.add(this.poiLayer)\n this.add(this.shadow)\n }\n\n addGround(ground: Graphic) {\n this.ground = ground\n this.add(ground)\n const center = ground.getCenter()\n const size = ground.getSize()\n this.shadow.position.x = center.x;\n this.shadow.position.y = center.y;\n this.shadow.changeLightCamera(size)\n this.shadow.setTarget(ground)\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 if (this.ground) {\n this.heatmap.position.setZ(this.ground?.options.airHeight + this.ground?.options.height)\n }\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.ground?.dispose()\n this.heatmap?.dispose()\n this.clear()\n }\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 { Graphic, GraphicOptionsParam } from \"../elements\";\nimport { Raycaster, Vector3 } from \"three\";\nimport { Layer } from \"./layer\";\nimport { Context } from \"../context\";\n\nexport class GraphicLayer extends Layer {\n\n constructor(context: Context) {\n super(context)\n }\n\n createGraphic(options: GraphicOptionsParam) {\n const graphic = new Graphic(this.context, options)\n this.add(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 let position: Vector3 | null = null;\n const graphics = this.children.filter(item => {\n if (item instanceof Graphic) {\n const pos = item.raycast(raycaster)\n if (pos) {\n if (position) {\n if (pos.z > position.z) {\n position = pos \n }\n } else {\n position = pos \n }\n }\n return !!pos\n }\n }) as Graphic[]\n return { graphics, position }\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, Raycaster, Vector2, 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 if (!this.context.currentFloor?.ground) { return }\n const { offsetX: x, offsetY: y } = e\n const point = new Vector2();\n point.x = (x / this.context.container.clientWidth) * 2 - 1;\n point.y = (y / this.context.container.clientHeight) * -2 + 1;\n const raycaster = new Raycaster();\n raycaster.setFromCamera(point, this.context.camera);\n const intersects = raycaster.intersectObjects(this.context.currentFloor.ground.children, true)\n return intersects[0]\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 intersect = this.getIntersectByPointerEvent(e)\n if (intersect?.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(intersect.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 { Matrix4, Vector3 } from \"three\";\nimport { area, polygon, bbox } from '@turf/turf'\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 intersect = this.getIntersectByPointerEvent(e)\n if (intersect?.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(intersect.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}"],
5
+ "mappings": "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",
6
6
  "names": ["EventDispatcher", "Timer", "__publicField", "fn", "timer", "wait", "Scene", "WebGLRenderer", "OrthographicCamera", "HemisphereLight", "Shape", "PCFSoftShadowMap", "Group", "Color", "DirectionalLight", "AmbientLight", "MapControls", "initScene", "scene", "initRenderer", "renderer", "initCamera", "width", "height", "camera", "initLight", "lights", "hemisphereLight", "ambientLight", "initControl", "domElement", "control", "initShape", "path", "shape", "i", "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", "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", "setCirclePosition", "x", "y", "setLineStartEnd", "start", "end", "EventDispatcher", "Box2", "Vector3", "Vector2", "Raycaster", "Box3", "Color", "AmbientLight", "TweenGroup", "Tween", "Context", "EventDispatcher", "container", "config", "__publicField", "initScene", "initRenderer", "initLight", "Timer", "TweenGroup", "camera", "renderer", "w", "h", "e", "graphics", "position", "pois", "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", "ground", "light", "dispose", "merge", "defaultConfig", "getConfig", "config", "Object3D", "ExtrudeGeometry", "MeshStandardMaterial", "Mesh", "Color", "Box3", "LineSegments", "EdgesGeometry", "LineBasicMaterial", "Vector3", "merge", "defaultOptions", "Graphic", "Object3D", "context", "options", "__publicField", "proxyOptions", "merge", "value", "Color", "center", "Vector3", "box", "Box3", "size", "shape", "initShape", "ExtrudeGeometry", "MeshStandardMaterial", "LineBasicMaterial", "Mesh", "material", "geometry", "EdgesGeometry", "LineSegments", "raycaster", "intersects", "dispose", "Object3D", "PlaneGeometry", "Mesh", "ShadowMaterial", "Color", "DoubleSide", "Shadow", "Object3D", "__publicField", "directionalLight", "initDirectionalLight", "size", "x", "y", "color", "Color", "width", "height", "geometry", "PlaneGeometry", "material", "ShadowMaterial", "DoubleSide", "mesh", "Mesh", "target", "opacity", "dispose", "Object3D", "merge", "EventDispatcher", "Vector3", "Overlay", "EventDispatcher", "context", "__publicField", "Vector3", "vector", "clientWidth", "clientHeight", "x", "y", "vector3ToDevice", "div", "element", "visible", "display", "defaultOptions", "Poi", "Object3D", "context", "options", "__publicField", "proxyOptions", "merge", "Overlay", "value", "div", "span", "_a", "_b", "img", "visible", "x", "y", "box", "Object3D", "Object3D", "Layer", "Object3D", "context", "dispose", "GraphicLayer", "Layer", "context", "options", "graphic", "Graphic", "raycaster", "position", "item", "pos", "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", "ground", "center", "size", "graphicOptions", "poiOptions", "data", "_a", "_b", "HeatmapElement", "opacity", "visible", "EventDispatcher", "Raycaster", "Vector2", "BaseSvg", "EventDispatcher", "context", "__publicField", "createSvg", "enable", "e", "_a", "x", "y", "point", "Vector2", "raycaster", "Raycaster", "vector", "camera", "container", "vector3ToDevice", "SvgLine", "BaseSvg", "context", "__publicField", "point1", "setCirclePosition", "setLineStartEnd", "point2", "e", "intersect", "x", "y", "circle", "line", "createCircle", "createLine", "enable", "vector", "distance", "x1", "y1", "x2", "y2", "__pow", "SvgPolygon", "BaseSvg", "context", "__publicField", "point", "index", "devicePoint", "setCirclePosition", "setLineStartEnd", "e", "intersect", "x", "y", "fill", "radius", "stroke", "circle", "createCircle", "line", "createLine", "enable", "cx", "cy", "__pow", "vector", "area", "cds", "item", "numPoints", "i", "j", "BMap", "EventDispatcher", "container", "config", "__publicField", "e", "polar", "azimuthal", "getConfig", "Context", "_0", "__async", "brand", "project", "phase", "building", "floor", "ts", "apiDomain", "url", "res", "item", "data", "buildGround", "center", "getCenter", "cds", "coord", "curFloor", "Floor", "groundIndex", "ground", "list", "groundGraphic", "Graphic", "legacyToGraphicMap", "graphics", "graphic", "curFloorData", "_a", "options", "poi", "ele", "duration", "position", "vector", "clientWidth", "clientHeight", "vector3ToDevice", "type", "zoom", "cameraZoom", "keys", "radius", "resolve", "reject", "SvgLine", "dispose", "distance", "SvgPolygon", "area", "clearTextTexture", "clearCanvas"]
7
7
  }