@aibee/crc-bmap 0.0.89 → 0.0.90

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/utils/sleep.ts", "../src/utils/color.ts", "../src/utils/model.ts", "../src/utils/os.ts", "../src/utils/keyboard.ts", "../src/context.ts", "../src/operations/selection/selection.ts", "../src/elements/graphic.ts", "../src/elements/shadow.ts", "../src/elements/poi.ts", "../src/elements/overlay.ts", "../src/elements/floor.ts", "../src/layer/graphic-layer.ts", "../src/layer/layer.ts", "../src/layer/poi-layer.ts", "../src/elements/heatmap.ts", "../src/elements/model.ts", "../src/elements/base-svg.ts", "../src/elements/svg-line.ts", "../src/elements/svg-polygon.ts", "../src/elements/select-box.ts", "../src/operations/selection/box-selection.ts", "../src/operations/hover/hover-helper.ts", "../src/factory/material.ts", "../src/utils/camera-bound.ts", "../src/config.ts"],
4
- "sourcesContent": ["import { EventDispatcher, Object3D, Vector3 } from \"three\";\nimport { Context } from \"./context\";\nimport { clearTextTexture, clearCanvas, vector3ToDevice, getCenter, getLongestSideDir } from \"./utils\";\nimport { Config, getConfig } from './config'\nimport {Floor, Graphic, HeatmapDataParam, Model, ModelOptions, PoiOptionsParam} from \"./elements\";\nimport { SvgLine, SvgPolygon } from \"./elements\";\nimport { GraphicInfo, GraphicOptions, PolygonGeometry, ResGraphicInfo } from \"./types\";\nimport { debounce } from \"lodash\";\nimport { disposeLoader } from \"./utils/model\";\n\nexport interface LoadQuery {\n brand: string;\n project: string;\n phase: string;\n building: string;\n floor: string;\n ts: string;\n resource_type_list: string;\n}\n\ninterface BmapEventMap {\n \"zoom-change\": {\n basicZoom: number;\n cameraZoom: number;\n }\n}\n\nexport type MapType = \"2d\" | \"3d\"\n\nexport enum MapTypePolar {\n D2 = 0,\n D3 = 1.1\n}\n\nexport class BMap extends EventDispatcher<BmapEventMap> {\n config: Config;\n\n public context: Context;\n\n private polarKeys: string[] = [];\n\n private azimuthalKeys: string[] = [];\n\n private svgLine?: SvgLine;\n\n private svgPolygon?: SvgPolygon;\n\n public basicZoom = 1;\n\n private prevCameraZoom = 1;\n\n type: MapType = \"2d\"\n\n floorDataMap: Map<string, GraphicInfo[]> = new Map()\n\n buildingGroundMap = new Map<string, GraphicInfo | null>()\n\n currentBuildGround: GraphicInfo | null = null\n\n private observe: ResizeObserver | null = null;\n\n constructor(private container: HTMLElement, config: Partial<Config> = {}) {\n super();\n this.config = getConfig(config)\n this.context = new Context(container, this.config);\n this.registryEvent();\n this.context.render();\n }\n\n private async loadGraphics({ brand, project, phase, building, floor, ts, resource_type_list }: LoadQuery): Promise<GraphicInfo[]> {\n const { apiDomain, apiPath: { floorGraphic }, apiInfo } = this.config\n const url = `${apiDomain}${floorGraphic}?brand=${brand}&project=${project}&phase=${phase}&building=${building}&floor=${floor}&ts=${ts}&resource_type_list=${resource_type_list}`\n const data = await fetch(url, apiInfo)\n .then((res) => res.json())\n .then(res => res.data)\n .then((res: ResGraphicInfo[]): GraphicInfo[] => {\n (res || []).map(item => item.info = (JSON.parse(item.info)))\n return (res || []) as unknown as GraphicInfo[]\n })\n return data\n }\n\n getBuildingKey({ brand, project, phase, building }: Omit<LoadQuery, \"floor\" | \"ts\" | \"resource_type_list\">) {\n const key = `${brand}-${project}-${phase}-${building}`\n return key\n }\n\n private async loadBuildingGround({ brand, project, phase, building }: Omit<LoadQuery, \"floor\" | \"ts\" | \"resource_type_list\">): Promise<GraphicInfo | null>{ \n const key = this.getBuildingKey({ brand, project, phase, building })\n if (this.buildingGroundMap.get(key)) { \n return this.buildingGroundMap.get(key) || null\n }\n const { apiDomain, apiPath: { floorRange }, apiInfo } = this.config\n const url = `${apiDomain}${floorRange}?brand=${brand}&project=${project}&phase=${phase}&building=${building}`\n const data = await fetch(url, apiInfo)\n .then((res) => res.json())\n .then(res => res.data)\n .then((res: ResGraphicInfo[]): GraphicInfo | null => {\n const data = (res || [])[0]\n if (data) {\n data.info = JSON.parse(data.info)\n }\n return data as unknown as GraphicInfo | null\n })\n this.buildingGroundMap.set(key, data)\n return data\n }\n \n getFloorKey({ brand, project, phase, building, floor, ts, resource_type_list }: LoadQuery) { \n const floorKey = `${brand}-${project}-${phase}-${building}-${floor}-${ts}-${resource_type_list}`\n return floorKey\n }\n\n async load({ brand, project, phase, building, floor, ts, resource_type_list }: LoadQuery) {\n const floorKey = this.getFloorKey({ brand, project, phase, building, floor, ts, resource_type_list })\n if (this.floorDataMap.get(floorKey)) { return }\n const [data, buildGround] = await Promise.all([\n this.loadGraphics({ brand, project, phase, building, floor, ts, resource_type_list }),\n this.loadBuildingGround({ brand, project, phase, building })\n ])\n if (buildGround) {\n const center = getCenter((buildGround.info.geometry as PolygonGeometry).cds[0])\n data.forEach(item => {\n item.info.geometry.coords = JSON.parse(JSON.stringify(item.info.geometry.cds))\n if (item.info.geometry.type === \"polygon\") { \n item.info.geometry.coords.map(cds => {\n if (Array.isArray(cds)) {\n cds.forEach(coord => {\n coord[0] -= center[0]\n coord[1] -= center[1]\n })\n }\n })\n } else {\n // point\n const [x, y] = item.info.geometry.cds\n item.info.geometry.coords = [x - center[0], y - center[1]]\n }\n item.info.transformToBuildingGround = true\n })\n }\n const { ground, markGraphic, graphic } = this.config\n for (let i = 0; i < data.length; i++) {\n const item = data[i]\n item.info.deltaHeight = 0.00001 * (i + 1)\n if (item.info.group === \"ground\") {\n item.info.fillColor = ground.color\n item.info.fillOpacity = ground.opacity\n item.info.height = ground.height\n item.info.stroke = ground.stroke\n item.info.strokeColor = ground.strokeColor\n item.info.strokeOpacity = ground.strokeOpacity\n } else if (item.info.userData.mark) {\n item.info.height = markGraphic.height;\n item.info.fillColor = markGraphic.color;\n item.info.fillOpacity = markGraphic.opacity;\n item.info.stroke = markGraphic.stroke;\n item.info.strokeColor = markGraphic.strokeColor;\n item.info.strokeOpacity = markGraphic.strokeOpacity;\n } else {\n item.info.fillOpacity = graphic.fillOpacity;\n if (this.config.initTransToMark) { \n item.info.height = markGraphic.height;\n item.info.fillColor = markGraphic.color;\n item.info.stroke = markGraphic.stroke;\n item.info.strokeColor = markGraphic.strokeColor;\n item.info.strokeOpacity = markGraphic.strokeOpacity;\n }\n }\n }\n if (!this.config.useFloorCache) {\n this.floorDataMap.clear()\n }\n this.floorDataMap.set(floorKey, data)\n return data\n }\n\n private createFloor(data: GraphicInfo[]) { \n const curFloor = new Floor(this.context)\n if (!data.length) { return { curFloor, graphics: [] } }\n const legacyToGraphicMap = new Map<string, Graphic>()\n const graphics = []\n for (const item of data) {\n if (item.info.group === \"ground\") {\n curFloor.createGround(item.info)\n } else {\n const graphic = curFloor.addGraphic(item.info)\n graphic.userData.data = item\n legacyToGraphicMap.set(item.legacy_id, graphic)\n graphics.push(graphic)\n }\n }\n // curFloor.addShadow()\n curFloor.userData.legacyToGraphicMap = legacyToGraphicMap\n return { curFloor, graphics }\n }\n\n switchFloor({ brand, project, phase, building, floor, ts, resource_type_list }: LoadQuery) {\n const floorKey = this.getFloorKey({ brand, project, phase, building, floor, ts, resource_type_list })\n const curFloorData = this.floorDataMap.get(floorKey)\n this.context.control.removeEventListener(\"change\", this.onControlChange)\n if (curFloorData) {\n const buildingKey = this.getBuildingKey({ brand, project, phase, building })\n this.currentBuildGround = this.buildingGroundMap.get(buildingKey) || null\n const createdFloor = this.createFloor(curFloorData)\n if (createdFloor) {\n this.context.cameraBound.setEnable(false)\n this.context.switchFloor(createdFloor.curFloor)\n // \u8BBE\u7F6Ezoom\n this.context.control.minZoom = 0;\n this.context.control.maxZoom = Infinity;\n this.context.camera.zoom = 1;\n this.context.setAzimuthalAngle(this.config.control.defaultAzimuthal, 0);\n this.context.fitCameraToGround(undefined, 0);\n this.basicZoom = this.context.camera.zoom;\n // \u8BBE\u7F6Ezoom\n this.context.control.minZoom = this.basicZoom;\n this.context.control.maxZoom = this.basicZoom * 25;\n this.context.control.addEventListener(\"change\", this.onControlChange)\n if (this.type === \"3d\") {\n this.context.fitCameraToGround(this.config.defaultPadding, 0, false)\n }\n this.onControlChange()\n this.context.cameraBound.setEnable(true)\n } else {\n console.warn(\"[switchFloor error] [\"+ floor +\"] \u697C\u5C42\u6CA1\u6709\u6570\u636E\")\n }\n } else {\n console.warn(\"[switchFloor error] \u6CA1\u6709\u8FD9\u4E2A\u697C\u5C42\uFF0C\u8BF7\u5148\u8C03\u7528load\u65B9\u6CD5\u52A0\u8F7D\u697C\u5C42\")\n }\n }\n\n onControlChange = () => {\n const { camera: { zoom } } = this.context\n if (zoom !== this.prevCameraZoom) {\n this.dispatchEvent({\n type: \"zoom-change\",\n basicZoom: this.basicZoom,\n cameraZoom: this.context.camera.zoom\n })\n this.prevCameraZoom = zoom\n }\n }\n\n // \u6276\u68AF\n addModel(graphic: Graphic, options: ModelOptions) { \n // \u6839\u636E\u6700\u957F\u8FB9\uFF0C\u83B7\u53D6\u6276\u68AF\u7684\u65B9\u5411\n if (graphic.options.geometry.type === \"polygon\") {\n // \u6839\u636E\u65B9\u5411\u6E32\u67D3\u6A21\u578B\n const model = this.context.currentFloor?.addModel({\n ...options,\n position: graphic.getPosition().setZ(0.1),\n id: graphic.options.id\n })\n if (model) {\n const { facilityAngle = 0, facilityXScale = 1, facilityYScale = 1 } = graphic.options.userData\n model.rotateZ((180 - facilityAngle) / 180 * Math.PI)\n model.scale.set(facilityXScale, facilityYScale, 1)\n }\n }\n }\n\n addHeatmap(data: HeatmapDataParam) {\n return this.context.currentFloor?.addHeatmap(data)\n }\n\n getLegacyToGraphicMap(): Map<string, Graphic> {\n return this.context.currentFloor?.userData.legacyToGraphicMap || new Map()\n }\n\n /**\n * \u83B7\u53D6\u5F53\u524D\u697C\u5C42\u5168\u90E8\u7684graphic\n * @returns \n */\n getFloorAllGraphics(): Graphic[] {\n return this.context.currentFloor?.graphicLayer.children.filter(item => item instanceof Graphic) as Graphic[] || []\n }\n\n createGraphicPoi(graphic: Graphic, options: PoiOptionsParam) { \n if (this.context.currentFloor) {\n if (options.id === undefined) {\n options.id = graphic.options.id\n }\n const position = graphic.getCenter()\n const poi = this.context.currentFloor.addPoi({\n ...options,\n position: { ...position, z: position.z + graphic.options.height / 2 }\n })\n return poi\n }\n return null\n }\n\n removeHeatMap() {\n this.context.currentFloor?.removeHeatMap()\n }\n\n /**\n * \u79FB\u52A8\u76F8\u673A\u4F4D\u7F6E\u8BA9\u9009\u4E2D\u7684\u5143\u7D20\u5C45\u4E2D\u663E\u793A\n * @param ele { Graphic | Poi }\n * @param duration\n */\n translateElementToCenter(ele: { getPosition: () => Vector3 }, duration: number = 500) {\n const position = ele.getPosition()\n return this.context.setCameraPosition(position, duration);\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 async translateElementToCenterX(ele: { getPosition: () => Vector3 }, duration: number = 500) {\n const { y, z } = this.context.control.target\n const position = ele.getPosition()\n position.setY(y)\n position.setZ(z)\n await 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: MapType, duration = 500) {\n this.type = type;\n if (type === \"2d\") {\n return this.context.setPolarAngle(MapTypePolar.D2, duration);\n } else {\n return this.context.setPolarAngle(MapTypePolar.D3, duration);\n }\n }\n\n async resetView(duration = 300) { \n const time = duration / 3\n await this.context.setAzimuthalAngle(this.config.control.defaultAzimuthal, time)\n await this.changeMapType(this.type, time)\n await this.context.fitCameraToGround(this.config.defaultPadding, time, false)\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 if (this.config.resizeObserver) {\n const observe = new ResizeObserver(debounce(this.resize, 5))\n observe.observe(this.container)\n this.observe = observe\n }\n }\n\n unRegistryEvent() {\n window.removeEventListener(\"keydown\", this.onKeydown);\n window.removeEventListener(\"keyup\", this.onKeyUp);\n this.observe?.disconnect()\n this.observe = null;\n }\n\n /**\n * \u914D\u7F6E\u5750\u6807\u5B9A\u70B9 2D/3D\u7EBF\u6027\u5207\u6362\u7684\u5FEB\u6377\u952E\n * @param key\n */\n configurePolarShortcutKeys(keys: string[]) {\n this.polarKeys = keys;\n }\n\n configureAzimuthalShortcutKeys(keys: string[]) {\n this.azimuthalKeys = keys;\n }\n\n rotateMap(radius = 0.1) {\n const azimuthal = this.context.control.getAzimuthalAngle();\n this.context.control.maxAzimuthAngle = azimuthal + radius;\n this.context.control.minAzimuthAngle = azimuthal + radius;\n this.context.control.update()\n }\n\n /**\n * \u6D4B\u91CF\u8DDD\u79BB\n * @returns \n */\n async measureDistance() { \n this.cancelDistance()\n return new Promise((resolve, reject) => { \n this.changeMapType('2d', 0)\n this.context.control.enableRotate = false; // \u6D4B\u91CF\u53EA\u80FD\u57282d\u4E2D\u8FDB\u884C\n this.svgLine = new SvgLine(this.context)\n const dispose = this.svgLine.dispose.bind(this.svgLine)\n this.svgLine.dispose = function () {\n dispose();\n reject(\"cancel\")\n }\n this.svgLine.addEventListener(\"distance\", ({ distance }) => {\n resolve(distance)\n })\n }) \n }\n\n /**\n * \u53D6\u6D88\u6D4B\u91CF\u957F\u5EA6\n */\n cancelDistance() {\n if (this.svgLine) {\n this.svgLine.dispose()\n this.svgLine = undefined;\n this.context.control.enableRotate = true;\n }\n }\n\n /**\n * \u6D4B\u91CF\u9762\u79EF\n */\n measureArea() { \n this.cancelArea()\n return new Promise((resolve, reject) => {\n this.changeMapType('2d', 0)\n this.context.control.enableRotate = false; // \u6D4B\u91CF\u53EA\u80FD\u57282d\u4E2D\u8FDB\u884C\n this.svgPolygon = new SvgPolygon(this.context)\n const dispose = this.svgPolygon.dispose.bind(this.svgPolygon)\n this.svgPolygon.dispose = function () {\n dispose();\n reject(\"cancel\")\n }\n this.svgPolygon.addEventListener(\"area\", ({ area }) => {\n resolve(area)\n })\n })\n }\n\n /**\n * \u53D6\u6D88\u6D4B\u91CF\u9762\u79EF\n */\n cancelArea() {\n if (this.svgPolygon) {\n this.svgPolygon.dispose()\n this.svgPolygon = undefined\n this.context.control.enableRotate = true;\n }\n }\n\n /**\n * \u6839\u636EnodeId \u83B7\u53D6graphic\n */\n getGraphicByNodeId(nodeId: string) {\n return this.context.currentFloor?.graphicLayer.getGraphicByNodeId(nodeId) || null\n }\n\n deleteGraphic(graphic: Graphic) {\n this.context.currentFloor?.graphicLayer.removeGraphic(graphic)\n }\n\n createGraphicByOptions(options: GraphicOptions) {\n if (!options.transformToBuildingGround) {\n if (this.currentBuildGround) {\n const center = getCenter((this.currentBuildGround.info.geometry as PolygonGeometry).cds[0])\n if (options.geometry.type === \"polygon\") {\n options.geometry.coords = JSON.parse(JSON.stringify(options.geometry.cds))\n options.geometry.coords.map(cds => {\n if (Array.isArray(cds)) {\n cds.forEach(coord => {\n coord[0] -= center[0]\n coord[1] -= center[1]\n })\n }\n })\n } else {\n // point\n const [x, y] = options.geometry.cds\n options.geometry.coords = [x - center[0], y - center[1]]\n }\n }\n }\n return this.context.currentFloor?.graphicLayer.createGraphic(options)\n }\n\n removePoiById(id: string) { \n return this.context.currentFloor?.poiLayer.removePoiById(id)\n }\n\n getPoiById(id: string) { \n return this.context.currentFloor?.poiLayer.getPoiById(id)\n }\n\n getPois() { \n return (this.context.currentFloor?.poiLayer.pois || []).filter(item => !item.options.built_in)\n }\n\n clearPoi() {\n if (this.context.currentFloor) { \n this.context.currentFloor.poiLayer.clear()\n }\n }\n\n removeSelectGraphic(graphic: Graphic) { \n this.context.selection.remove(graphic)\n }\n\n resize = () => { \n this.context.cameraBound.setEnable(false)\n this.context.onWindowResize();\n const azimuthal = this.context.control.getAzimuthalAngle();\n const zoom = this.context.camera.zoom;\n // \u8BBE\u7F6Ezoom\n this.context.control.minZoom = 0;\n this.context.control.maxZoom = Infinity;\n this.context.camera.zoom = 1;\n this.context.setAzimuthalAngle(0, 0);\n const basicZoom = this.context.getFitCameraToGroundZoom(undefined, 0);\n this.basicZoom = basicZoom || 0;\n // \u8BBE\u7F6Ezoom\n this.context.control.minZoom = this.basicZoom;\n this.context.control.maxZoom = this.basicZoom * 25;\n this.context.camera.zoom = zoom;\n this.context.control.addEventListener(\"change\", this.onControlChange)\n this.context.setAzimuthalAngle(azimuthal, 0);\n this.context.cameraBound.setEnable(true)\n }\n\n dispose() {\n this.context.dispose();\n this.floorDataMap.clear();\n this.buildingGroundMap.clear();\n clearTextTexture();\n clearCanvas();\n disposeLoader();\n this.unRegistryEvent();\n }\n}\n", "type Fn = (...arg: any) => any\n\n/**\n * \u4EFB\u52A1\u7BA1\u7406\u5668\n * \u5728\u7C7B\u9500\u6BC1\u7684\u65F6\u5019\uFF0C\u8981\u6E05\u9664\u6240\u6709\u7684\u5F02\u6B65\u5B9A\u65F6\u5668\n */\nexport class Timer { \n tasks = {\n requestAnimation: new Set<number>(),\n timeout: new Set<number>(),\n interval: new Set<number>()\n }\n\n requestAnimationFrame(fn: Fn): number { \n const timer = window.requestAnimationFrame(() => {\n this.tasks.requestAnimation.delete(timer)\n fn()\n })\n this.tasks.requestAnimation.add(timer)\n return timer\n }\n\n cancelAnimationFrame(timer: number) { \n this.tasks.requestAnimation.delete(timer)\n window.cancelAnimationFrame(timer)\n }\n\n setTimeout(fn: Fn, wait: number): number { \n const timer = window.setTimeout(() => {\n this.tasks.timeout.delete(timer)\n fn()\n }, wait)\n this.tasks.timeout.add(timer)\n return timer\n }\n\n clearTimeout(timer: number) {\n this.tasks.timeout.delete(timer)\n window.clearTimeout(timer)\n }\n\n setInterval(fn: Fn, wait: number): number { \n const timer = window.setInterval(() => {\n this.tasks.interval.delete(timer)\n fn()\n }, wait)\n this.tasks.interval.add(timer)\n return timer\n }\n\n clearInterval(timer: number) {\n this.tasks.interval.delete(timer)\n window.clearInterval(timer)\n }\n\n dispose() { \n this.tasks.requestAnimation.forEach(timer => {\n window.cancelAnimationFrame(timer)\n })\n this.tasks.requestAnimation.clear()\n this.tasks.timeout.forEach(timer => {\n window.clearTimeout(timer)\n })\n this.tasks.timeout.clear()\n this.tasks.interval.forEach(timer => {\n window.clearInterval(timer)\n }) \n this.tasks.interval.clear()\n }\n}", "import { Coordinate } from 'src/types'\nimport {\n Scene, WebGLRenderer, OrthographicCamera, HemisphereLight, Shape, \n PCFSoftShadowMap, Group, Color, DirectionalLight, AmbientLight, Path, Vector2\n} from 'three'\nimport { MapControls } from 'three/examples/jsm/controls/MapControls'\n\nexport function initScene() {\n const scene = new Scene()\n scene.background = new Color(0xffffff)\n return scene\n}\n\nexport function initRenderer() {\n const renderer = new WebGLRenderer({\n antialias: true,\n // logarithmicDepthBuffer: true,\n // alpha: false,\n // premultipliedAlpha: false\n })\n renderer.autoClear = true\n renderer.setClearAlpha(1);\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, 0xffffff, 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, 2.6);\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 control.zoomSpeed = 2\n return control\n}\n\nexport function initShape(path: Coordinate[], holePath: Coordinate[][] = []) { \n const shape = new Shape(path.map(item => new Vector2(...item)));\n if (holePath.length) {\n holePath.forEach(cur => {\n var hole = new Path(cur.map(item => new Vector2(...item)));\n shape.holes.push(hole);\n })\n }\n return shape\n}\n\nexport function initDirectionalLight(color = 0xffffff, intensity = 1) {\n const directionalLight = new DirectionalLight(color, intensity);\n directionalLight.castShadow = true;\n directionalLight.shadow.radius = 8;\n directionalLight.shadow.bias = -0.001;\n directionalLight.shadow.mapSize.set(256, 256);\n directionalLight.shadow.camera.left = -200;\n directionalLight.shadow.camera.right = 200;\n directionalLight.shadow.camera.top = 200;\n directionalLight.shadow.camera.bottom = -200;\n return directionalLight\n}", "import { Object3D, Mesh, Light } from 'three'\n\nexport function dispose(o: Object3D, recursive?: boolean): void {\n if (recursive && o.children && o.children.length) {\n o.children.forEach((child) => {\n dispose(child, recursive);\n });\n }\n if ((o as Mesh).isMesh) {\n const m = o as Mesh;\n if (m.geometry) m.geometry.dispose();\n if (m.material) {\n if (Array.isArray(m.material)) {\n m.material.forEach((mat) => {\n mat.dispose();\n });\n } else {\n m.material.dispose();\n }\n }\n }\n if ((o as Light).isLight) {\n (o as Light).dispose?.()\n }\n}", "export function hasChinese(str:string) {\n return /[\\u4E00-\\u9FA5]+/g.test(str);\n}", "import { hasChinese } from './rules'\nimport { DataTexture, RGBAFormat, LinearFilter } from 'three'\n\nconst urlTextureMap = new Map()\nconst textTextureMap = new Map<string, DataTexture>()\n\nexport function initCanvas() {\n const canvas = document.createElement('canvas');\n canvas.width = 1024;\n canvas.height = 64;\n const ctx = canvas.getContext('2d', {\n willReadFrequently: true,\n }) as CanvasRenderingContext2D;\n ctx.font = '54px sans-serif';\n ctx.textBaseline = 'hanging';\n ctx.lineWidth = 12;\n ctx.fillStyle = 'rgba(0,0,0,1)';\n ctx.strokeStyle = 'white';\n return { canvas, ctx }\n}\n\nlet canvas: HTMLCanvasElement;\nlet ctx: CanvasRenderingContext2D;\n\nexport function createCanvas() {\n if (!canvas) {\n const { canvas: c, ctx: t } = initCanvas()\n canvas = c;\n ctx = t;\n }\n}\n\nexport function getTextureByText(text: string): DataTexture {\n if (textTextureMap.has(text)) {\n return textTextureMap.get(text)!\n }\n createCanvas()\n\n ctx.clearRect(0, 0, 1024, 64);\n const y = hasChinese(text) ? 4 : 8;\n ctx.strokeText(text, 2, y);\n ctx.fillText(text, 2, y);\n\n let width = Math.ceil(ctx.measureText(text).width);\n width = width % 2 === 0 ? width : width + 1;\n width += 2;\n const imageData = ctx.getImageData(0, 0, width, 64);\n const texture = new DataTexture(\n Uint8Array.from(imageData.data),\n width,\n 64,\n RGBAFormat,\n );\n texture.flipY = true;\n texture.minFilter = LinearFilter;\n texture.magFilter = LinearFilter;\n\n textTextureMap.set(text, texture);\n return texture;\n}\n\nexport function clearTextTexture() {\n textTextureMap.clear()\n}\n\nexport function clearCanvas() {\n ctx = null as unknown as CanvasRenderingContext2D;\n canvas = null as unknown as HTMLCanvasElement;\n}", "import { Coordinate } from 'src/types';\nimport { Vector3, Camera } from 'three';\nimport { point, featureCollection, center } from '@turf/turf'\n\n/**\n * 3D\u5750\u6807\u8F6C\u5C4F\u5E55\u5750\u6807\n * @param vector \n * @param camera \n * @param w container\u7684\u5BBD\n * @param h container\u7684\u9AD8\n * @returns \n */\nexport function vector3ToDevice(vector: Vector3, camera: Camera, w: number, h: number) {\n const _vector = vector.clone().project(camera);//\u901A\u8FC7\u4E16\u754C\u5750\u6807\u83B7\u53D6\u8F6C\u6807\u51C6\u8BBE\u5907\u5750\u6807\n const _w = w / 2;\n const _h = h / 2;\n const x = Math.round(_vector.x * _w + _w);//\u6807\u51C6\u8BBE\u5907\u5750\u6807\u8F6C\u5C4F\u5E55\u5750\u6807\n const y = Math.round(-_vector.y * _h + _h);\n return { x, y }\n}\n\n\n/**\n * \u83B7\u53D6\u591A\u53D8\u5F62\u7684\u4E2D\u5FC3\u70B9\n * @param coordinates \n */\nexport function getCenter(coordinates: Coordinate[]) {\n const features = featureCollection(coordinates.map(item => point(item)))\n const cent = center(features)\n return cent.geometry.coordinates\n}\n\ntype Position = {\n x: number,\n y: number\n}\nexport function isContain(point: Position, start: Position, end: Position) {\n // \u5224\u65AD point\u662F\u5426\u5728 start \u548Cend\u5F62\u6210\u7684\u77E9\u5F62\u4E2D\n return point.x >= start.x &&\n point.x <= end.x &&\n point.y >= start.y &&\n point.y <= end.y \n}\n\n/**\n * \u83B7\u53D6\u6700\u957F\u8FB9\u7684\u65B9\u5411\n * @param cds \n */\nexport function getLongestSideDir(cds: Coordinate[]) { \n let maxDistance = 0;\n let dir = new Vector3();\n for (let i = 1; i < cds.length; i++) { \n const point_0 = new Vector3(cds[i - 1][0], cds[i - 1][1], 0);\n const point_1 = new Vector3(cds[i][0], cds[i][1], 0);\n const distance = point_1.distanceTo(point_0)\n if (distance > maxDistance) {\n maxDistance = distance;\n dir = point_1.clone().sub(point_0).normalize();\n }\n }\n return dir;\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 oldValue = Reflect.get(target, p, receiver)\n const res = Reflect.set(target, p, newValue, receiver)\n if (oldValue !== newValue) {\n master.dispatchEvent({ type: `change-${p as Extract<keyof T, string>}`, value: newValue } as any)\n }\n return res\n }\n })\n}", "/**\n * \u53EF\u4EE5\u8BBE\u7F6E\u8D85\u65F6\u65F6\u95F4\u7684promise\n * @param promise \n * @param timeout \n * @returns \n */\nexport function timeoutPromise<T>(promise: Promise<T>, timeout: number): Promise<T> {\n return Promise.race([\n promise,\n new Promise<T>((resolve, reject) => {\n setTimeout(() => reject(new Error(\"Promise timeout\")), timeout);\n })\n ]);\n}", "export function createSvgElement(tag: string) {\n return document.createElementNS('http://www.w3.org/2000/svg', tag); \n}\n\n/**\n * \u521B\u5EFAsvg\n */\nexport function createSvg(w: string, h: string) {\n const svg = createSvgElement(\"svg\");\n svg.setAttribute(\"width\", w)\n svg.setAttribute(\"height\", h)\n svg.style.cssText = \"position: absolute; left: 0; top: 0; pointer-events: none;\"\n return svg;\n}\n\n/**\n * \u521B\u5EFA\u5706\u70B9\n * @param radius \n */\nexport function createCircle(radius = \"2\", fill: string) {\n const circle = createSvgElement(\"circle\");\n circle.setAttribute(\"r\", radius)\n circle.setAttribute(\"fill\", fill)\n return circle\n}\n\n/**\n * \u521B\u5EFA\u7EBF\n * @param stroke \n */\nexport function createLine(stroke: string) {\n const line = createSvgElement(\"line\")\n line.setAttribute(\"stroke\", stroke)\n return line\n}\n\n/**\n * \u521B\u5EFA\u77E9\u5F62\n * @param stroke \n * @returns \n */\nexport function createRect(stroke: string, fill: string) {\n const rect = createSvgElement(\"rect\")\n rect.setAttribute(\"stroke\", stroke)\n rect.setAttribute(\"fill\", fill)\n return rect\n}\n\nexport function setCirclePosition(circle: SVGElement, x: number, y: number) {\n circle.setAttribute('cx', `${x}`)\n circle.setAttribute('cy', `${y}`)\n}\n\ntype Position = { x: number; y: number }\n\nexport function setLineStartEnd(line: SVGElement, start?: Position, end?: Position) {\n if (start) { \n line.setAttribute(\"x1\", `${start.x}`)\n line.setAttribute(\"y1\", `${start.y}`)\n }\n if (end) {\n line.setAttribute(\"x2\", `${end.x}`)\n line.setAttribute(\"y2\", `${end.y}`)\n }\n}\n\nexport function setRectPosition(rect: SVGElement, x: number, y: number, w: number, h: number) {\n rect.setAttribute('x', `${x}`)\n rect.setAttribute('y', `${y}`)\n rect.setAttribute('width', `${w}`)\n rect.setAttribute('height', `${h}`)\n}", "export function sleepOnePromise() {\n return Promise.resolve()\n}\n\nexport function sleepOneRf() { \n return new Promise(resolve => {\n requestAnimationFrame(resolve)\n })\n}", "export function strToNumber(str: string) {\n return parseInt(str.replace(\"#\", \"0x\"), 16);\n}\n\n/**\n * \u7ED9\u989C\u8272\u52A0\u4E0A\u900F\u660E\u5EA6\n * @param hexColor\n * @param alpha\n * @returns\n */\nexport function addAlphaToHexColor(hexColor: string, alpha: number) {\n // \u5C0616\u8FDB\u5236\u989C\u8272\u503C\u8F6C\u6362\u4E3ARGB\u6570\u503C\n let r = parseInt(hexColor.substring(1, 3), 16);\n let g = parseInt(hexColor.substring(3, 5), 16);\n let b = parseInt(hexColor.substring(5, 7), 16);\n\n // \u8BA1\u7B97\u65B0\u7684RGB\u6570\u503C\n let newR = Math.round(r * alpha);\n let newG = Math.round(g * alpha);\n let newB = Math.round(b * alpha);\n\n // \u5C06\u65B0\u7684RGB\u6570\u503C\u8F6C\u6362\u4E3A16\u8FDB\u5236\u683C\u5F0F\n let newHexColor = `#${(1 << 24 | newR << 16 | newG << 8 | newB).toString(16).slice(1)}`;\n\n return newHexColor;\n}\n\nexport function darkenColor(hexColor: string, factor = 0.85) {\n let r: number;\n let g: number;\n let b: number;\n if (hexColor.startsWith(\"#\")) {\n // \u5C06\u5341\u516D\u8FDB\u5236\u989C\u8272\u8F6C\u6362\u4E3ARGB\n r = parseInt(hexColor.substring(1, 3), 16);\n g = parseInt(hexColor.substring(3, 5), 16);\n b = parseInt(hexColor.substring(5, 7), 16);\n } else { \n // rgb\u683C\u5F0F\u7684\n let numbers = hexColor.slice(4, -1).split(\",\");\n r = parseInt(numbers[0].trim())\n g = parseInt(numbers[1].trim())\n b = parseInt(numbers[2].trim())\n }\n // \u8BA1\u7B97\u6697\u70B9\u989C\u8272\n r = Math.min(Math.floor(r * factor), 255);\n g = Math.min(Math.floor(g * factor), 255);\n b = Math.min(Math.floor(b * factor), 255);\n\n\n // \u5C06RGB\u989C\u8272\u8F6C\u6362\u56DE\u5341\u516D\u8FDB\u5236\n let darkHexColor = \"#\" + ((1 << 24) + (r << 16) + (g << 8) + b).toString(16).slice(1);\n\n return darkHexColor;\n}\n", "import { Object3D, Scene, Mesh, MeshBasicMaterial } from 'three'\nimport { GLTF, GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader'\n\nfunction createLoader() { \n const loader = new GLTFLoader()\n return loader\n}\n\nlet loader: GLTFLoader | null = null\nlet modelMap = new Map<string, Promise<GLTF>>()\n\n/**\n * \u52A0\u8F7D\u6A21\u578B\n * @param url \n * @returns \n */\nexport function loadModel(url: string): Promise<GLTF> { \n if (modelMap.has(url)) {\n const gltf = modelMap.get(url)!.then(gltf => { \n gltf.scene = gltf.scene.clone()\n return gltf\n })\n }\n if (!loader) {\n loader = createLoader()\n }\n const p = new Promise<GLTF>((resolve, reject) => { \n loader!.load(url, gltf => {\n resolve(gltf)\n }, undefined, reject)\n })\n modelMap.set(url, p)\n return p.then(gltf => { \n gltf.scene = gltf.scene.clone()\n return gltf\n })\n}\n\nexport function disposeLoader() { \n loader = null\n modelMap.clear()\n}", "export const isMac = navigator.userAgent.toUpperCase().indexOf('MAC') >= 0;\n", "import { isMac } from \"./os\";\n\nexport function isControl(key: string) { \n if (isMac) {\n return key === \"Meta\"\n }\n return key === \"Control\"\n}", "import { MapControls } from \"three/examples/jsm/controls/MapControls\";\nimport {\n Timer,\n initCamera,\n initRenderer,\n initScene,\n initLight,\n initControl,\n dispose,\n vector3ToDevice,\n timeoutPromise,\n} from \"./utils\";\nimport {\n EventDispatcher,\n OrthographicCamera,\n Light,\n Box2,\n Vector3,\n Vector2,\n Raycaster,\n Object3D,\n Box3,\n Color,\n AmbientLight,\n} from \"three\";\nimport { Graphic, Poi, Floor } from \"./elements\";\nimport { Group as TweenGroup, Tween } from \"@tweenjs/tween.js\";\nimport { Config } from \"./config\";\nimport { Selection } from \"./operations/selection/selection\";\nimport { HoverHelper } from \"./operations\";\nimport { MaterialFactory } from \"./factory\";\nimport { CameraBound } from \"./utils/camera-bound\";\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 e: PointerEvent;\n graphics: Graphic[];\n pois: Poi[];\n position: Vector3 | null;\n };\n 'pointer-move': {\n e: PointerEvent;\n graphics: Graphic[];\n pois: Poi[];\n position: Vector3 | null;\n },\n 'change-ratio': {\n px: number;\n },\n \"select-graphic\": {\n graphics: Graphic[],\n isMultipleSelect: boolean,\n },\n \"hover\": {\n graphics: Graphic[];\n },\n \"control-change\": {},\n \"resize\": {\n width: number;\n height: 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 selection: Selection;\n\n hoverHelper: HoverHelper;\n \n private basicRatio?: number; // zoom=1\u7684\u65F6\u5019\uFF0C100M\u5BF9\u5E94\u7684\u50CF\u7D20\u4E2A\u6570\n\n public materialFactory!: MaterialFactory;\n\n cameraBound!: CameraBound;\n\n clientSize = {\n width: 0,\n height: 0,\n x: 0,\n y: 0\n }\n\n constructor(public container: HTMLElement, public config: Config) {\n super();\n this.container.style.position = \"relative\";\n this.container.style.overflow = \"hidden\";\n this.init();\n this.selection = new Selection(this);\n this.hoverHelper = new HoverHelper(this);\n this.materialFactory = new MaterialFactory(this);\n this.resizeClientSize()\n this.registryEvent();\n }\n\n resizeClientSize() { \n const { x, y, width, height } = this.container.getBoundingClientRect()\n this.clientSize = {\n width: width || this.container.clientWidth,\n height: height || this.container.clientHeight,\n x,\n y\n }\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.control.maxPolarAngle = this.config.control.maxPolar;\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 this.dispatchEvent({ type: 'control-change' })\n });\n this.cameraBound = new CameraBound(this);\n }\n\n /**\n * \u83B7\u53D6\u4E24\u4E2A\u70B9\u4E4B\u95F4\u7684\u50CF\u7D20\u6570\n */\n getRatio(point1 = new Vector3(0, 0, 0), point2 = new Vector3(100, 0, 0)) {\n const { clientWidth, clientHeight } = this.container\n const device1 = vector3ToDevice(point1, this.camera, clientWidth, clientHeight)\n const device2 = vector3ToDevice(point2, this.camera, clientWidth, clientHeight)\n return Math.ceil(Math.sqrt((device2.x - device1.x) ** 2 + (device2.y - device1.y) ** 2))\n }\n\n changeAmbientLightColor(color: string | number) {\n this.lights.children.forEach((item) => {\n if (item instanceof AmbientLight) {\n item.color = new Color(color);\n }\n });\n }\n\n switchFloor(floor: Floor) {\n if (this.currentFloor) {\n this.scene.remove(this.currentFloor)\n this.currentFloor.dispose()\n }\n this.currentFloor = floor\n this.scene.add(floor)\n // \u4FEE\u6539\u706F\u5149\u7684\u4F4D\u7F6E\n const position = floor.getCenter()\n if (position) {\n this.lights.position.x = position.x\n this.lights.position.y = position.y\n }\n }\n\n onWindowResize = () => {\n const { container, camera, renderer } = this;\n let { clientWidth: w, clientHeight: h } = container;\n w = Math.max(1, w);\n h = Math.max(1, h);\n camera.left = -w / 2;\n camera.right = w / 2;\n camera.top = h / 2;\n camera.bottom = -h / 2;\n camera.updateProjectionMatrix();\n renderer.setSize(w, h);\n this.resizeClientSize()\n this.dispatchEvent({ type:'resize', width: w, height: h })\n };\n\n onClick = (e: MouseEvent) => {\n const { graphics, position } = this.getGraphicsByDeviceXy(e.offsetX, e.offsetY);\n if (graphics.length) {\n this.dispatchEvent({\n type: \"graphic-click\",\n graphics: graphics,\n position\n });\n }\n const pois = this.getPoisByDeviceXy(e.offsetX, e.offsetY);\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.clientSize.width) * 2 - 1;\n point.y = (y / this.clientSize.height) * -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.offsetX, e.offsetY) as Poi[];\n this.dispatchEvent({ type: 'pointer-over', e, 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.offsetX, e.offsetY) as Poi[];\n // console.log(graphics, position, e.offsetX, e.offsetY)\n this.dispatchEvent({ type: 'pointer-move', e, graphics, pois, position })\n }\n\n onPointerleave = () => { \n this.dispatchEvent({ type: \"pointer-level\" })\n }\n\n onSelectionSelect = ({ graphics, isMultipleSelect }: {graphics: Graphic[], isMultipleSelect: boolean}) => { \n this.dispatchEvent({ type: \"select-graphic\", graphics, isMultipleSelect })\n }\n\n onHoverChange = ({ graphics }: { graphics: Graphic[] }) => { \n this.dispatchEvent({ type: \"hover\", graphics })\n }\n\n registryEvent() {\n window.addEventListener(\"resize\", this.onWindowResize);\n this.container.addEventListener(\"click\", this.onClick);\n this.container.addEventListener(\"pointerover\", this.onPointerover)\n this.container.addEventListener(\"pointermove\", this.onPointermove)\n this.container.addEventListener(\"pointerleave\", this.onPointerleave)\n this.selection.addEventListener(\"select\", this.onSelectionSelect)\n this.hoverHelper.addEventListener(\"hover-change\", this.onHoverChange)\n }\n\n unRegistryEvent() {\n window.removeEventListener(\"resize\", this.onWindowResize);\n this.container.removeEventListener(\"click\", this.onClick);\n this.container.removeEventListener(\"pointerover\", this.onPointerover)\n this.container.removeEventListener(\"pointermove\", this.onPointermove)\n this.container.removeEventListener(\"pointerleave\", this.onPointerleave)\n this.selection.removeEventListener(\"select\", this.onSelectionSelect)\n this.hoverHelper.removeEventListener(\"hover-change\", this.onHoverChange)\n }\n\n /**\n * \u8BBE\u7F6E\u7EB5\u5411\u65CB\u8F6C\u89D2\u5EA6\n * @param polar \u5F27\u5EA6\n */\n public setPolarAngle(polar: number, duration = 500) {\n if (duration === 0) {\n this.control.maxPolarAngle = polar;\n this.control.minPolarAngle = polar;\n this.control.update();\n this.control.maxPolarAngle = this.config.control.maxPolar;\n this.control.minPolarAngle = 0;\n return Promise.resolve();\n }\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.control.maxPolarAngle = this.config.control.maxPolar;\n this.control.minPolarAngle = 0;\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 /**\n * \u8BBE\u7F6E\u6A2A\u5411\u65CB\u8F6C\u89D2\u5EA6\n * @param azimuthal \u5F27\u5EA6\n */\n public setAzimuthalAngle(azimuthal: number, duration = 500) {\n if (duration === 0) {\n this.control.maxAzimuthAngle = azimuthal;\n this.control.minAzimuthAngle = azimuthal;\n this.control.update();\n this.control.maxAzimuthAngle = Infinity;\n this.control.minAzimuthAngle = Infinity;\n return\n }\n return timeoutPromise(\n new Promise((resolve) => {\n const start = { azimuthal: this.control.getAzimuthalAngle() };\n const end = { azimuthal };\n const tween = new Tween(start, this.tweenGroup)\n .to(end, duration)\n .onUpdate(() => {\n this.control.maxAzimuthAngle = start.azimuthal;\n this.control.minAzimuthAngle = start.azimuthal;\n this.control.update();\n })\n .onComplete(() => {\n this.control.enabled = true;\n this.control.maxAzimuthAngle = Infinity;\n this.control.minAzimuthAngle = Infinity;\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 const lookAtVector = this.getCameraLookAt();\n const start = {\n zoom: this.camera.zoom,\n target: this.control.target.clone(),\n };\n if (!duration) { \n this.camera.position.copy(center.clone().sub(lookAtVector));\n this.control.target.copy(center);\n this.camera.zoom = zoom;\n this.control.update()\n return\n }\n return timeoutPromise(\n new Promise((resolve) => {\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 getFitCameraToObjectZoom(\n object: Object3D,\n padding: [number, number, number, number] = [20, 20, 20, 20],\n duration = 500,\n force2DView = true, // \u5F3A\u5236\u8BA1\u7B972d\u89C6\u89D2\u7684\u5927\u5C0F\n ) { \n const [top, right, bottom, left] = padding;\n const { clientSize: { width, height } } = this;\n const polar = this.control.getPolarAngle()\n if (force2DView) {\n // \u83B7\u53D6\u57282D\u89C6\u56FE\u4E0B\u7684\u5927\u5C0F\n this.setPolarAngle(0, 0)\n }\n // \u83B7\u53D6\u7269\u4F53\u7684\u4E09\u7EF4\u76D2\u5B50\u5750\u6807\n const boundingBox = new Box3().setFromObject(object);\n this.setPolarAngle(polar, 0)\n const { max, min } = boundingBox;\n // \u9700\u8981\u83B7\u53D6\u5230box\u76844\u4E2A\u70B9\u7684\u5750\u6807\n const leftTop = new Vector3(min.x, max.y, min.z);\n const rightTop = new Vector3(max.x, max.y, min.z);\n const rightBottom = new Vector3(max.x, min.y, max.z);\n const leftBottom = new Vector3(min.x, min.y, max.z);\n // \u5750\u6807\u8F6C\u6210\u5C4F\u5E55\u5750\u6807\u5E76\u8BA1\u7B97\u51FA\u5360\u7528\u5C4F\u5E55\u5750\u6807\u7684\u5927\u5C0F\n const leftTop2d = vector3ToDevice(leftTop, this.camera, width, height);\n const rightTop2d = vector3ToDevice(rightTop, this.camera, width, height);\n const leftBottom2d = vector3ToDevice(leftBottom, this.camera, width, height);\n const rightBottom2d = vector3ToDevice(rightBottom, this.camera, width, height);\n const boundingBox2d = new Box2().setFromPoints([\n new Vector2(leftTop2d.x, leftTop2d.y),\n new Vector2(rightTop2d.x, rightTop2d.y),\n new Vector2(leftBottom2d.x, leftBottom2d.y),\n new Vector2(rightBottom2d.x, rightBottom2d.y),\n ]);\n const size = boundingBox2d.getSize(new Vector2());\n\n // \u8BA1\u7B97\u5728\u5C4F\u5E55\u4E0Ax,y\u65B9\u5411\u4E0A\u9700\u8981\u8C03\u6574\u7684\u500D\u6570\n const xScale = (width - right - left) / size.x;\n const yScale = (height - 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, 0);\n return { zoom: scale * this.camera.zoom, center };\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 force2DView = true, // \u5F3A\u5236\u8BA1\u7B972d\u89C6\u89D2\u7684\u5927\u5C0F\n ) {\n const { zoom, center } = this.getFitCameraToObjectZoom(object, padding, duration, force2DView)\n return this.setZoom(zoom, center, duration);\n }\n\n getFitCameraToGroundZoom(padding: [number, number, number, number] = [20, 20, 20, 20], duration = 500, force2DView = true) {\n if (this.currentFloor && this.currentFloor.hasElement) {\n return this.getFitCameraToObjectZoom(this.currentFloor.groundUpper, padding, duration, force2DView).zoom;\n }\n }\n\n fitCameraToGround(padding: [number, number, number, number] = [20, 20, 20, 20], duration = 500, force2DView = true) { \n if (this.currentFloor && this.currentFloor.hasElement) {\n return this.fitCameraToObject(this.currentFloor.groundUpper, padding, duration, force2DView);\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.clone().sub(lookAtVector));\n this.control.target.copy(start.clone());\n this.control.update();\n })\n .onComplete(() => {\n this.tweenGroup.remove(tween);\n this.camera.position.copy(start.clone().sub(lookAtVector));\n this.control.target.copy(position.clone());\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.cameraBound.dispose()\n this.selection.dispose()\n this.hoverHelper.dispose()\n this.tweenGroup.getAll().forEach((item) => item.stop());\n this.tweenGroup.removeAll();\n this.unRegistryEvent();\n this.container.removeChild(this.renderer.domElement);\n this.timer.dispose();\n this.renderer.dispose();\n (this.lights.children as Light[]).forEach((light: Light) =>\n light.dispose()\n );\n this.materialFactory.dispose();\n dispose(this.scene);\n }\n}\n", "import { EventDispatcher } from \"three\";\nimport { Context } from \"../../context\";\nimport { Graphic, Poi } from \"../../elements\";\nimport { BoxSelection } from \"./box-selection\";\nimport { isControl, isMac } from \"../../utils\";\n\ninterface SelectionEventMap {\n \"select\": {\n graphics: Graphic[],\n isMultipleSelect: boolean,\n }\n}\n\nexport class Selection extends EventDispatcher<SelectionEventMap> {\n private _list = new Set<Graphic>()\n\n private boxSelection: BoxSelection;\n private prevPanStatus?: boolean;\n private prevRotateStatus?: boolean;\n private downPoint: { x: number, y: number } | null = null\n\n private isMultipleSelect = false;\n\n constructor(private context: Context) {\n super()\n this.boxSelection = new BoxSelection(context)\n this.boxSelection.setEnable(false)\n this.registryEvent()\n }\n\n get list() {\n return this._list\n }\n\n enableBoxSelection() { \n if (this.isMultipleSelect) { return }\n this.isMultipleSelect = true;\n this.boxSelection.setEnable(true)\n this.prevPanStatus = this.context.control.enablePan\n this.prevRotateStatus = this.context.control.enableRotate\n this.context.control.enablePan = false\n this.context.control.enableRotate = false\n }\n\n disableBoxSelection() { \n if (this.isMultipleSelect) { \n this.isMultipleSelect = false;\n this.boxSelection.setEnable(false)\n this.context.control.enablePan = !!this.prevPanStatus\n this.context.control.enableRotate = !!this.prevRotateStatus\n }\n }\n\n onPointerDown = (e: PointerEvent) => {\n this.downPoint = { x: e.offsetX, y: e.offsetY }\n }\n\n onPointerUp = (e: PointerEvent) => {\n if (!this.downPoint) { return }\n const { offsetX, offsetY } = e\n const { x, y } = this.downPoint\n if (Math.sqrt((x - offsetX) ** 2 + (y - offsetY) ** 2) > 3) {\n return\n }\n const { graphics } = this.context.getGraphicsByDeviceXy(offsetX, offsetY)\n const graphicIdSet = new Set(graphics.map(item => item.options.id))\n const pois = this.context.getPoisByDeviceXy(offsetX, offsetY) as Poi[];\n pois.forEach(item => { \n if (!graphicIdSet.has(item.options.id)) {\n const graphic = this.context.currentFloor?.graphicLayer.graphicMap.get(item.options.id) || null\n if (graphic && graphic.options.geometry.type === 'point') { \n graphics.push(graphic)\n graphicIdSet.add(item.options.id)\n }\n }\n })\n if (!(isMac ? e.metaKey : e.ctrlKey)) {\n this._list.clear()\n }\n graphics.forEach(item => this._list.add(item))\n this.selectEnd()\n this.downPoint = null\n }\n\n onPointerOut = (e: PointerEvent) => { \n this.disableBoxSelection()\n }\n\n onKeyDown = (e: KeyboardEvent) => {\n if (isControl(e.key)) {\n this.enableBoxSelection()\n }\n }\n\n onKeyUp = (e: KeyboardEvent) => {\n if (isControl(e.key)) {\n this.disableBoxSelection()\n }\n }\n\n onBoxSelected = ({ list }: { list: Graphic[] }) => { \n this._list.clear()\n list.forEach(item => {\n this._list.add(item)\n })\n this.selectEnd()\n }\n\n selectEnd() {\n this.dispatchEvent({type: \"select\", graphics: [...this._list], isMultipleSelect: this.isMultipleSelect})\n }\n\n registryEvent() {\n this.context.container.addEventListener(\"pointerdown\", this.onPointerDown)\n this.context.container.addEventListener(\"pointerup\", this.onPointerUp)\n this.context.container.addEventListener(\"pointerout\", this.onPointerOut)\n this.context.container.addEventListener(\"pointercancel\", this.onPointerOut)\n window.addEventListener(\"keydown\", this.onKeyDown)\n window.addEventListener(\"keyup\", this.onKeyUp)\n this.boxSelection.addEventListener(\"selected\", this.onBoxSelected)\n }\n\n unRegistryEvent() {\n this.context.container.removeEventListener(\"pointerdown\", this.onPointerDown)\n this.context.container.removeEventListener(\"pointerup\", this.onPointerUp)\n this.context.container.removeEventListener(\"pointerout\", this.onPointerOut)\n this.context.container.removeEventListener(\"pointercancel\", this.onPointerOut)\n window.removeEventListener(\"keydown\", this.onKeyDown)\n window.removeEventListener(\"keyup\", this.onKeyUp)\n this.boxSelection.removeEventListener(\"selected\", this.onBoxSelected)\n }\n\n clear() {\n this._list.clear()\n }\n\n remove(graphic: Graphic) { \n this._list.delete(graphic)\n }\n\n dispose() {\n this.unRegistryEvent()\n }\n}", "import {\n Object3D,\n ExtrudeGeometry,\n Mesh,\n Box3,\n MeshBasicMaterial,\n Raycaster,\n Object3DEventMap,\n Vector3,\n BufferGeometry,\n LineBasicMaterial,\n LineSegments,\n Float32BufferAttribute,\n ShaderMaterial,\n DoubleSide,\n Color,\n } from \"three\";\nimport { initShape, proxyOptions, darkenColor } from \"../utils\";\nimport { GraphicOptions, PolygonGeometry } from \"src/types\";\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\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 strokeWidth: 1, // \u63CF\u8FB9\u5BBD\u5EA6\n doors: [], // \u95E8\u914D\u7F6E\n locked: false,\n visible: true,\n geometry: {\n type: \"polygon\",\n cds: [],\n coords: [],\n curveCpt: [],\n curveIndex: [],\n },\n layerType: \"\",\n zIndex: 0,\n stroke: true,\n deltaHeight: 0,\n userData: {},\n gradualColor: [],\n renderType: \"single\",\n colorFactor: 0.9\n};\n\nexport class Graphic extends Object3D<GraphicEventMap> {\n private geometry!: ExtrudeGeometry;\n\n private material!: MeshBasicMaterial | MeshBasicMaterial[] | ShaderMaterial[] | ShaderMaterial;\n\n public mesh!: Mesh;\n\n private line!: LineSegments;\n\n private lineMaterial?: LineBasicMaterial;\n\n private lineGeometry?: BufferGeometry;\n\n public options: GraphicOptions;\n\n constructor(\n private context: Context,\n options: GraphicOptionsParam\n ) {\n super();\n this.options = proxyOptions<GraphicOptions, GraphicEventMap>(\n { ...defaultOptions, ...options },\n this\n );\n if (this.options.geometry.type === \"point\") {\n const [x, y] = this.options.geometry.coords;\n this.position.set(x, y, this.options.height + this.options.airHeight);\n return this;\n }\n this.init();\n this.visible = this.options.visible;\n this.addEventListener(\"change-fillColor\", ({ value }) => {\n this.initMaterial();\n this.initMesh();\n });\n this.addEventListener(\"change-fillOpacity\", ({ value }) => {\n this.initMaterial();\n this.initMesh();\n });\n this.addEventListener(\"change-height\", ({ value }) => {\n this.dispose();\n this.init();\n });\n this.addEventListener(\"change-strokeColor\", ({ value }) => {\n if (!this.options.stroke) {\n return;\n }\n this.initLineMaterial();\n this.createBorder();\n });\n this.addEventListener(\"change-strokeOpacity\", ({ value }) => {\n if (!this.options.stroke) {\n return;\n }\n this.initLineMaterial();\n this.createBorder();\n });\n // this.addEventListener('change-strokeWidth', ({ value }) => {\n // this.initLineMaterial();\n // this.createBorder();\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 this.addEventListener(\"change-stroke\", ({ value }) => {\n if (value) {\n if (this.line) {\n return;\n }\n this.initLineGeometry();\n this.initLineMaterial();\n this.createBorder();\n } else if (this.line) {\n this.remove(this.line);\n this.lineGeometry?.dispose();\n }\n });\n this.addEventListener(\"change-renderType\", () => {\n this.initMaterial();\n this.initMesh();\n })\n this.addEventListener(\"change-gradualColor\", () => {\n this.initMaterial();\n this.initMesh();\n })\n }\n\n getCenter() {\n if (this.options.geometry.type === \"point\") {\n return this.position.clone();\n }\n const center = new Vector3();\n const box = new Box3();\n box.setFromObject(this);\n box.getCenter(center);\n return center;\n }\n\n getSize() {\n if (this.options.geometry.type === \"point\") {\n return new Vector3(0, 0, 0);\n }\n const box = new Box3();\n const size = new Vector3();\n box.setFromObject(this);\n box.getSize(size);\n return size;\n }\n\n getPosition() {\n const center = this.getCenter();\n center.setZ(center.z + this.options.height);\n return center;\n }\n\n init() {\n this.geometry = this.initGeometry();\n this.initMaterial();\n this.initMesh();\n this.mesh.position.z = this.options.airHeight + this.options.deltaHeight;\n if (this.options.stroke) {\n // \u521B\u5EFA\u8FB9\u6846\n this.initLineMaterial();\n this.initLineGeometry();\n this.createBorder();\n }\n }\n\n initGeometry() {\n const shape = initShape(\n (this.options.geometry as PolygonGeometry).coords[0],\n (this.options.geometry as PolygonGeometry).coords.slice(1)\n );\n const geometry = new ExtrudeGeometry(shape, {\n steps: 1,\n bevelEnabled: false,\n depth: this.options.height,\n curveSegments: 4,\n });\n return geometry;\n }\n\n initSingleMaterial() {\n const material = this.context.materialFactory.createMeshBasicMaterial({\n color: this.options.fillColor,\n opacity: this.options.fillOpacity,\n });\n if (this.options.height <= 0.1) {\n this.material = material;\n return material;\n }\n const material1 = this.context.materialFactory.createMeshBasicMaterial({\n color: darkenColor(this.options.fillColor),\n opacity: this.options.fillOpacity,\n });\n this.material = [material, material1];\n return [material, material1];\n }\n\n initGradualMaterial() { \n const { max, min } = new Box3().setFromObject(this)\n const _max = max.clone().sub(min)\n const maxValue = Math.max(_max.x, _max.y, _max.z) / 2\n\n const material = this.context.materialFactory.createShaderMaterial({\n gradualColor: this.options.gradualColor,\n center: this.getPosition(),\n maxValue,\n opacity: this.options.fillOpacity,\n direction: new Vector3(-1.0, 0.2, 0.0),\n max,\n min\n })\n if (this.options.height <= 0.1) {\n this.material = material;\n return material;\n }\n\n const material1 = this.context.materialFactory.createShaderMaterial({\n gradualColor: [darkenColor(this.options.gradualColor[0], this.options.colorFactor), darkenColor(this.options.gradualColor[1], this.options.colorFactor)],\n center: this.getCenter(),\n maxValue,\n opacity: this.options.fillOpacity,\n direction: new Vector3(-1.0, 0.2, 1.0),\n max,\n min\n })\n\n this.material = [material, material1];\n return [material, material1];\n }\n\n initMaterial() {\n if (this.options.renderType === 'gradual') { \n return this.initGradualMaterial()\n } else {\n return this.initSingleMaterial()\n }\n }\n\n initLineMaterial() {\n const lineMaterial = this.context.materialFactory.createLineMaterial({\n color: this.options.strokeColor,\n opacity: this.options.strokeOpacity,\n });\n this.lineMaterial = lineMaterial;\n return lineMaterial;\n }\n\n initMesh() {\n if (this.mesh) {\n this.remove(this.mesh);\n }\n this.mesh = new Mesh(this.geometry, this.material);\n this.add(this.mesh);\n }\n\n getBorderPoints() {\n const points = [];\n const height = this.options.height + this.options.deltaHeight;\n // \u70B9\u7684\u5750\u6807\u8981\u81EA\u5DF1\u7B97\uFF0C\u53EA\u753B\u5173\u952E\u8282\u70B9\u7684\u5782\u76F4\u7EBFcurveIndex\u662F\u5173\u952E\u8282\u70B9,\u5982\u679C\u662F\u66F2\u7EBF\u6709\u8FD9\u4E2A\u503C\uFF0C\u4E0D\u662F\u66F2\u7EBF\u4E0D\u4E00\u5B9A\u6709\n const { coords } = this.options.geometry as PolygonGeometry;\n for (let j = 0; j < coords.length; j++) {\n const curCds = coords[j];\n for (let i = 0; i < curCds.length; i++) {\n const cur = curCds[i];\n const next = i + 1 === curCds.length ? curCds[0] : curCds[i + 1];\n // \u628A\u62C9\u5347\u4E0A\u53BB\u7684\u70B9\u653E\u8FDB\u53BB\n points.push(new Vector3(cur[0], cur[1], height));\n points.push(new Vector3(next[0], next[1], height));\n }\n }\n return points;\n }\n\n initLineGeometry() {\n if (this.lineGeometry) {\n this.lineGeometry.dispose();\n }\n const points = this.getBorderPoints();\n const lineGeometry = new BufferGeometry().setFromPoints(points);\n this.lineGeometry = lineGeometry;\n }\n\n createBorder() {\n if (this.line) {\n this.remove(this.line);\n }\n const line = new LineSegments(this.lineGeometry, this.lineMaterial);\n line.position.z = this.options.airHeight + 0.01;\n this.line = line;\n this.add(line);\n return line;\n }\n\n raycast(raycaster: Raycaster) {\n if (!this.visible) {\n return false;\n }\n if (this.options.geometry.type === \"point\") {\n return false;\n }\n const intersects = raycaster.intersectObject(this.mesh);\n if (intersects[0]) {\n const { point: position, distance } = intersects[0];\n return { position, distance };\n }\n return false;\n }\n\n dispose() {\n this.geometry.dispose();\n this.line?.geometry.dispose();\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'\n\nexport class Shadow extends Object3D {\n\n private directionalLight: DirectionalLight\n\n private plane!: Mesh\n\n public basicOpacity = 0.07\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, 0.5)\n directionalLight.position.set(0, 0, 100);\n this.add(directionalLight);\n return directionalLight\n }\n \n changeLightCamera(size: Vector3) {\n const x = size.x\n const y = size.y\n this.directionalLight.shadow.camera.left = -x;\n this.directionalLight.shadow.camera.right = x;\n this.directionalLight.shadow.camera.top = y;\n this.directionalLight.shadow.camera.bottom = -y;\n this.directionalLight.shadow.camera.near = 0.5;\n this.directionalLight.shadow.camera.far = Math.max(x, y);\n }\n\n changeLightColor(color: number | string) {\n this.directionalLight.color = new Color(color)\n }\n\n setPosition(position: Vector3) {\n this.position.copy(position)\n this.directionalLight.position.set(-position.x / 2, -position.y / 2, 100)\n }\n\n // \u521B\u5EFA\u5E73\u9762\u767D\u8272\n initPlane(width = 1000, height = 1000) { \n const geometry = new PlaneGeometry(width, height)\n const material = new ShadowMaterial({\n transparent: true,\n opacity: 0,\n side: DoubleSide\n })\n const mesh = new Mesh(geometry, material)\n mesh.receiveShadow = true\n mesh.position.z = -10\n this.add(mesh)\n this.plane = mesh\n return mesh\n }\n\n setTarget(target: Object3D) {\n this.directionalLight.target = target\n }\n\n transformOpacity(opacity: number): number {\n return opacity * this.basicOpacity\n }\n\n setOpacity(opacity: number) { \n (this.plane.material as MeshStandardMaterial).opacity = this.transformOpacity(opacity);\n }\n \n dispose() {\n dispose(this, true)\n }\n\n}", "import { proxyOptions, sleepOnePromise } from '../utils';\nimport { EventDispatcher, Object3D, Object3DEventMap, Vector3 } from 'three';\nimport { Context } from '../context'\nimport { Overlay } from './overlay';\n\nexport interface PoiOptions {\n texts: { text: string, styles?: { [key: string]: string }; }[];\n icon?: string;\n icon_size?: [number, number]; // \u5BBD \u9AD8\n level: number; // \u6E32\u67D3\u4F18\u5148\u7EA7\n collision_enable: boolean; // \u662F\u5426\u53C2\u4E0E\u78B0\u649E\u68C0\u6D4B\n opacity: number;\n id: string; // poi\u7684key\n position: { x: number; y: number; z: number };\n icon_opacity: number;\n icon_border: { color: string, width: number };\n background: string;\n collision_hide_icon: boolean;\n built_in: boolean; // \u662F\u5426\u662F\u5185\u7F6E\u7684poi\n box_only_icon: boolean; // \u5305\u56F4\u76D2\u662F\u4E0D\u662F\u53EA\u5305\u542B\u56FE\u6807\n}\n\ntype PoiEventMap = {\n [K in keyof PoiOptions as `change-${K}`]: { value: PoiOptions[K] };\n} & Object3DEventMap;\n\nconst defaultOptions: PoiOptions = {\n texts: [{ text: \"\" }],\n level: 1,\n collision_enable: true,\n opacity: 1,\n id: \"\",\n position: { x: 0, y: 0, z: 0 },\n icon_opacity: 1,\n icon_border: { color: \"#586EE0\", width: 0 },\n background: \"\",\n collision_hide_icon: true,\n built_in: false,\n box_only_icon: false\n}\n\nexport type PoiOptionsParam = Partial<PoiOptions>\n\nexport class Poi extends EventDispatcher<PoiEventMap> {\n\n private div!: HTMLDivElement\n\n private textDiv!: HTMLDivElement\n\n private img?: HTMLImageElement\n\n private overlay: Overlay\n\n public options: PoiOptions\n\n public visible = true\n\n size = { width: 0, height: 0 }\n\n position = new Vector3()\n\n userData = {};\n\n showTextStatus = true\n\n constructor(private context: Context, options: PoiOptionsParam) {\n super()\n this.options = proxyOptions<PoiOptions, PoiEventMap>({...defaultOptions, ...options}, this)\n this.position.set(options.position?.x || 0, options.position?.y || 0, options.position?.z || 0)\n this.overlay = new Overlay(this.context, { autoUpdate: false })\n this.overlay.addEventListener(\"update-position\", ({ x, y, height }) => { \n this.overlay.div.style.transform = `translate3d(calc(${x}px - 50%), calc(${-height + y}px - ${this.options.icon ? '100%' : '50%'}), 0)`;\n })\n this.overlay.bindElement(this as unknown as Object3D)\n this.registryEvent()\n this.initDiv()\n this.addEventListener(\"change-icon\", ({ value }) => {\n if (value) {\n if (!this.img) {\n this.div.appendChild(this.initIcon())\n this._changePosition()\n } else {\n this.img.setAttribute('src', value)\n }\n } else {\n this.img && this.div.removeChild(this.img)\n this.img = undefined\n this._changePosition()\n this.resetSize()\n }\n })\n this.addEventListener(\"change-texts\", ({ value }) => {\n this.div.removeChild(this.textDiv)\n if (this.div.firstChild) {\n this.div.insertBefore(this.initText(), this.div.firstChild)\n } else {\n this.div.appendChild(this.initText())\n }\n this.resetSize()\n })\n this.addEventListener(\"change-opacity\", ({ value }) => {\n this.overlay.setOpacity(value)\n })\n this.addEventListener(\"change-icon_size\", ({ value }) => {\n if (this.img) {\n this.img.style.width = `${value?.[0] || 32}px`\n this.img.style.height = `${value?.[1] || 32}px`\n this.resetSize()\n }\n })\n this.addEventListener(\"change-icon_opacity\", ({ value }) => {\n if (this.img) {\n this.img.style.opacity = `${value}`\n }\n })\n this.addEventListener(\"change-icon_border\", ({ value }) => {\n if (this.img) {\n this.img.style.border = `${value.width}px solid ${value.color}`\n }\n })\n this.addEventListener(\"change-background\", ({ value }) => {\n this.div.style.background = value;\n })\n }\n\n get withinDisplayRange() {\n return this.overlay.withinDisplayRange\n }\n\n async resetSize() {\n await sleepOnePromise()\n if (this.options.box_only_icon) {\n if (!this.img) { return }\n const { width, height } = this.img.getBoundingClientRect()\n this.size = {\n width: width + 2, \n height: height + 2\n }\n } else {\n const { width, height } = this.div.getBoundingClientRect()\n this.size = {\n width: width + 2, \n height: height + 2\n }\n }\n }\n\n renderHelperBox() {\n // let div = this.helperDiv\n // if (!div) {\n // div = document.createElement('div')\n // this.context.container.appendChild(div)\n // }\n // const box = this.getBox()\n // div.style.cssText = `position: absolute; top: ${box.top}px;left: ${box.left}px;width: ${box.right - box.left}px;height: ${box.bottom - box.top}px;border: 1px solid red;`\n // this.helperDiv = div;\n }\n\n get clientPos() {\n return this.overlay.clientPos\n }\n\n initDiv() {\n const div = document.createElement(\"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.textShadow = `#fff 1px 0 0, #fff 0 1px 0, #fff -1px 0 0, #fff 0 -1px 0`;\n div.style.display = `flex`;\n div.style.flexDirection = `column`;\n div.style.justifyContent = `center`;\n div.style.alignItems = `center`;\n div.style.padding = \"4px\";\n this.overlay.setOpacity(this.options.opacity);\n this.overlay.div.style.pointerEvents = `none`;\n this.overlay.div.style.userSelect = `none`;\n this.overlay.div.appendChild(div)\n this.div = div;\n // this._changePosition()\n this.resetSize()\n return div\n }\n\n getPosition() {\n return this.position\n }\n\n initText() {\n const textDiv = document.createElement(\"div\")\n textDiv.appendChild(this.createTextFragment())\n textDiv.style.textAlign = \"center\"\n this.textDiv = textDiv\n return textDiv\n }\n\n createTextFragment() { \n const f = document.createDocumentFragment()\n this.options.texts.forEach(item => { \n const div = document.createElement(\"div\")\n div.style.whiteSpace = 'nowrap';\n if (item.styles) { \n for (let [key, value] of Object.entries(item.styles)) { \n div.style[key as any] = value;\n }\n }\n div.textContent = item.text;\n f.appendChild(div)\n })\n return f\n }\n\n initIcon() {\n const img = document.createElement(\"img\")\n img.setAttribute(\"src\", this.options.icon!)\n img.style.width = `${this.options.icon_size?.[0] || 32}px`\n img.style.height = `${this.options.icon_size?.[1] || 32}px`\n img.style.opacity = `${this.options.icon_opacity}px`\n img.style.borderRadius = '50%';\n if (this.options.icon_border.width) {\n img.style.border = `${this.options.icon_border.width}px solid ${this.options.icon_border.color}`\n }\n img.onload = () => {\n // this._changePosition()\n this.resetSize()\n }\n this.img = img\n return img\n }\n\n private _changePosition = () => {\n this.overlay.updatePosition(true)\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 if (visible === this.visible) { return }\n this.visible = visible\n this.changeOverlayVisible(visible)\n }\n\n changeOverlayVisible(visible: boolean) {\n if (visible === this.overlay.visible && this.options.collision_hide_icon) { return }\n if (this.options.collision_hide_icon) {\n this.overlay.visible = visible;\n this.overlay.div.style.visibility = visible ? \"visible\" : \"hidden\"\n } else {\n if (this.showTextStatus === visible) { return }\n this.textDiv.style.visibility = visible ? \"visible\" : \"hidden\"\n this.showTextStatus = visible\n }\n }\n\n parentSetVisible(visible: boolean) { \n if (!this.visible) { \n return\n }\n this.changeOverlayVisible(visible)\n // if (visible) {\n // this.renderHelperBox()\n // } else {\n // this.helperDiv?.remove()\n // this.helperDiv = null\n // }\n }\n\n getBox(boxScale = this.context.config.poi.boxScale) {\n const { width, height } = this.size\n const w = width * boxScale;\n const h = height * boxScale;\n const { x, y } = this.overlay.clientPos\n return {\n left: x - w / 2,\n right: x + w / 2,\n top: this.options.icon ? y - h : y - h / 2,\n bottom: this.options.icon ? y : y + h / 2,\n }\n }\n\n getOriginBox() { \n return this.getBox(1)\n }\n\n isContain(x: number, y: number) {\n if (!this.overlay.visible) { return false }\n if (!this.visible) {return false}\n const box = this.getOriginBox()\n return x >= box.left && x <= box.right && y >= box.top && y <= box.bottom\n }\n\n dispose() {\n this.unRegistryEvent();\n this.div = null as unknown as HTMLDivElement;\n this.textDiv = null as unknown as HTMLDivElement;\n this.img = undefined\n this.overlay.dispose();\n }\n}", "import { Context } from \"../context\";\nimport { Box3, EventDispatcher, Object3D, Vector3 } from \"three\";\nimport { vector3ToDevice } from '../utils'\n\ninterface OverlayOptions {\n autoUpdate: boolean;\n appendToBody: boolean;\n}\n\nconst defaultOptions: OverlayOptions = {\n autoUpdate: true,\n appendToBody: false\n}\n\ninterface OverlayEventMap {\n \"update-position\": {\n x: number;\n y: number;\n width: number;\n height: number;\n }\n}\n\nexport class Overlay extends EventDispatcher<OverlayEventMap> {\n\n public div: HTMLDivElement\n\n private element?: Object3D & { getPosition?: () => Vector3 }\n\n public position = new Vector3()\n\n clientPos = { x: 0, y: 0 }\n\n visible = true\n\n private options: OverlayOptions\n\n constructor(private context: Context, options: Partial<OverlayOptions> = {}) {\n super()\n this.options = { ...defaultOptions, ...options };\n this.registryEvent()\n this.div = this.initDiv()\n if (this.options.appendToBody) {\n document.body.appendChild(this.div)\n } else {\n this.context.container.appendChild(this.div)\n }\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 this.onUpdate() \n }\n\n unBindElement() {\n this.element = undefined;\n }\n\n setVisible(visible: boolean, display = 'block') {\n if (visible === this.visible) { return }\n this.div.style.display = visible ? display : 'none'\n this.visible = visible\n }\n\n setOpacity(opacity: number) {\n this.div.style.opacity = `${opacity}`\n }\n\n getPosition() {\n if (this.element) {\n if (typeof this.element.getPosition === \"function\") {\n return this.element.getPosition()\n }\n const box = new Box3().setFromObject(this.element)\n const center = box.getCenter(new Vector3())\n return center\n } else {\n return this.position\n }\n }\n\n get withinDisplayRange() { \n const { x, y } = this.clientPos\n const { width, height } = this.context.clientSize\n return x >=0 && x <= width && y >= 0 && y <= height\n }\n\n updatePosition(force = false) {\n const vector = this.getPosition()\n const { width, height, x: clientX, y: clientY } = this.context.clientSize\n const { x, y } = vector3ToDevice(vector, this.context.camera, width, height)\n if (this.clientPos.x === x && this.clientPos.y === y && !force) { return }\n this.clientPos = { x, y }\n if (this.options.appendToBody) {\n this.div.style.left = `${clientX}px`\n this.div.style.top = `${clientY + height}px`\n }\n if (this.options.autoUpdate) { \n this.div.style.transform = `translate3d(${x}px, ${-height+y}px, 0)`\n } else {\n this.dispatchEvent({ type: \"update-position\", x, y, width, height })\n }\n }\n\n onUpdate = () => {\n this.updatePosition()\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.div?.remove();\n this.div = null as unknown as HTMLDivElement\n }\n}", "import { Context } from \"../context\";\nimport { Box3, Object3D, Vector3 } from \"three\";\nimport { GraphicLayer } from '../layer/graphic-layer'\nimport { PoiLayer } from '../layer/poi-layer'\nimport { Graphic, GraphicOptionsParam } from \"./graphic\";\nimport { Shadow } from \"./shadow\";\nimport { PoiOptionsParam } from \"./poi\";\nimport { HeatmapDataParam, HeatmapElement } from './heatmap'\nimport { Model, ModelOptions } from \"./model\";\n\nexport class Floor extends Object3D {\n \n graphicLayer: GraphicLayer;\n\n poiLayer: PoiLayer;\n\n grounds: Set<Graphic> = new Set();\n\n shadow = new Shadow();\n\n heatmap?: HeatmapElement;\n\n groundUpper = new Object3D();\n\n models = new Object3D()\n\n modelMap = new Map()\n\n private groundMaxHeight = 0;\n\n constructor(public context: Context) {\n super()\n this.graphicLayer = new GraphicLayer(this.context);\n this.poiLayer = new PoiLayer(this.context);\n this.groundUpper.add(this.graphicLayer)\n this.groundUpper.add(this.poiLayer)\n this.add(this.groundUpper)\n this.add(this.models)\n }\n\n getPosition() { \n const box = new Box3().setFromObject(this.groundUpper)\n return box.getCenter(new Vector3())\n }\n\n createGround(options: GraphicOptionsParam) {\n // options.deltaHeight = 0.00001 * this.grounds.size\n const ground = new Graphic(this.context, options)\n this.addGrounds([ground])\n }\n\n addGrounds(grounds: Graphic[]) {\n grounds.forEach(ground => { \n if (!this.grounds.has(ground)) {\n ground.mesh.castShadow = true;\n this.grounds.add(ground)\n this.groundUpper.add(ground)\n }\n })\n this.changeGroundMaxHeight()\n }\n\n changeGroundMaxHeight() { \n const grounds = Array.from(this.grounds)\n this.groundMaxHeight = this.grounds.size > 0 ? Math.max(...grounds.map(ground => ground.options.height + ground.options.airHeight + ground.options.deltaHeight)) : 0\n this.graphicLayer.position.z = this.groundMaxHeight\n this.models.position.z = this.groundMaxHeight\n }\n\n get hasElement() { \n return !!(this.grounds.size || this.graphicLayer.children.length)\n }\n\n getCenter() { \n return new Box3().setFromObject(this.groundUpper).getCenter(new Vector3())\n }\n \n addModel(options: ModelOptions) { \n const model = new Model(this.context, options)\n this.models.add(model)\n this.modelMap.set(options.id, model)\n return model\n }\n\n addShadow() { \n const box = new Box3().setFromObject(this.groundUpper)\n const center = box.getCenter(new Vector3())\n const size = box.getSize(new Vector3())\n this.shadow.setPosition(center)\n this.shadow.changeLightCamera(size)\n // this.add(this.shadow)\n }\n\n addGraphic(graphicOptions: GraphicOptionsParam) {\n return this.graphicLayer.createGraphic(graphicOptions)\n }\n\n addPoi(poiOptions: PoiOptionsParam) {\n return this.poiLayer.createPoi(poiOptions)\n }\n\n addHeatmap(data: HeatmapDataParam) {\n if (!this.heatmap) {\n this.heatmap = new HeatmapElement(this.context)\n this.add(this.heatmap)\n }\n this.heatmap.loadData(data)\n const box = new Box3().setFromObject(this.graphicLayer)\n this.heatmap.position.setZ(box.max.z)\n return this.heatmap\n }\n\n removeHeatMap() {\n if (this.heatmap) {\n this.remove(this.heatmap)\n this.heatmap.dispose()\n this.heatmap = undefined\n }\n }\n\n setShadowOpacity(opacity: number) {\n this.shadow.setOpacity(opacity)\n }\n\n setShadowVisible(visible: boolean) {\n this.shadow.visible = visible;\n }\n\n dispose() {\n this.shadow.dispose();\n this.graphicLayer.dispose()\n this.poiLayer.dispose()\n this.grounds.forEach(ground => ground.dispose())\n this.heatmap?.dispose()\n this.groundUpper.clear()\n this.models.children.forEach((model) => (model as unknown as Model).dispose())\n this.models.clear()\n this.modelMap.clear()\n this.clear()\n }\n\n}", "import { Graphic, GraphicOptionsParam } from \"../elements\";\nimport { Box3, Raycaster, Vector3 } from \"three\";\nimport { Layer } from \"./layer\";\nimport { Context } from \"../context\";\n\nexport class GraphicLayer extends Layer {\n\n graphicMap = new Map<string, Graphic>()\n\n constructor(context: Context) {\n super(context)\n }\n\n getCenter(): Vector3 { \n const box = new Box3().setFromObject(this)\n return box.getCenter(new Vector3())\n }\n\n createGraphic(options: GraphicOptionsParam) {\n // options.deltaHeight = 0.00001 * this.graphicMap.size;\n const graphic = new Graphic(this.context, options)\n this.add(graphic)\n this.graphicMap.set(options.id!, graphic)\n return graphic\n }\n\n removeGraphic(graphic: Graphic) { \n this.remove(graphic)\n this.graphicMap.delete(graphic.options.id!)\n graphic.dispose()\n }\n\n removeGraphicById(id: string) {\n if (this.graphicMap.has(id)) {\n this.removeGraphic(this.graphicMap.get(id)!)\n }\n }\n\n getGraphicByNodeId(id: string) {\n return this.graphicMap.get(id) || null\n }\n\n /**\n * \u83B7\u53D6\u5C04\u7EBF\u76F8\u4EA4\u7684\u5143\u7D20\n * @param raycaster \n */\n getGraphicByRaycaster(raycaster: Raycaster): { graphics: Graphic[], position: Vector3 | null } {\n const initData: {\n position: Vector3 | null,\n graphic: Graphic | null,\n distance: number\n } = { distance: 10000, graphic: null, position: null }\n const data = this.children.reduce((res, item) => {\n if (item instanceof Graphic) {\n const pos = item.raycast(raycaster)\n if (pos) {\n const { distance } = pos\n if (distance < res.distance) {\n return {\n distance: res.distance,\n position: res.position,\n graphic: item\n }\n }\n }\n return res\n } else {\n return res\n }\n }, initData)\n if (data === initData) {\n return { graphics: [], position: null }\n }\n return { graphics: [data.graphic!], position: data.position }\n }\n}", "import { Context } from \"../context\";\nimport { Object3D } from \"three\";\nimport { dispose } from '../utils'\n\nexport class Layer extends Object3D {\n constructor(public context: Context) {\n super();\n }\n\n dispose() {\n dispose(this)\n this.clear()\n }\n}", "import { Poi, PoiOptionsParam } from \"../elements\";\nimport { Layer } from \"./layer\";\nimport { Context } from '../context'\nimport { debounce } from 'lodash'\nimport { Timer } from \"../utils\";\n\nexport class PoiLayer extends Layer {\n pois: Poi[] = []\n debounceCollisionDetection: () => void\n\n timer = new Timer()\n \n constructor(context: Context) {\n super(context)\n this.registryEvent()\n this.debounceCollisionDetection = debounce(this.collisionDetection, 10)\n }\n\n clear(force = false) {\n this.pois.forEach(item => {\n if (item.options.built_in && !force) { \n return\n }\n item.dispose()\n })\n this.pois = force ? [] : this.pois.filter(item => item.options.built_in)\n return this\n }\n\n createPoi(options: PoiOptionsParam) {\n const poi = new Poi(this.context, options)\n this.pushPoi(poi)\n poi.addEventListener(\"change-level\", () => this.changePoiLevelOrCollisionEnable(poi))\n poi.addEventListener(\"change-collision_enable\", () => this.changePoiLevelOrCollisionEnable(poi))\n Promise.resolve().then(() => { \n this.debounceCollisionDetection()\n })\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 poi.dispose()\n }\n\n removePoiById(id: string) {\n const poi = this.pois.find(item => item.options.id === id)\n if (poi) {\n this.removePoi(poi)\n }\n }\n\n getPoiById(id: string) { \n const poi = this.pois.find(item => item.options.id === id)\n return poi || null\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 === 0) {\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.pois.filter(item => {\n return (item instanceof Poi) && item.isContain(x, y)\n })\n return pois\n }\n\n onUpdate = () => { \n this.timer.requestAnimationFrame(() => { \n this.collisionDetection()\n })\n }\n\n /**\n * \u78B0\u649E\u68C0\u6D4B\n */\n collisionDetection() {\n const range: { left: number; right: number; top: number; bottom: number; }[] = []\n // \u6392\u9664\u5728\u5C4F\u5E55\u5916\u7684poi\n const pois = this.pois.filter(item => item.visible && item.withinDisplayRange)\n pois.forEach((item, index) => {\n const { left, right, top, bottom } = item.getBox()\n if (index === 0 || !item.options.collision_enable) {\n range.push({ left, right, top, bottom })\n item.parentSetVisible(true)\n return\n }\n // valid boolean \u8868\u793A\u53D1\u751F\u4E86\u78B0\u649E\n const valid = range.some((box) => { \n // \u5224\u65AD\u56DB\u4E2A\u70B9\u662F\u4E0D\u662F\u90FD\u4E0D\u5728box\u7684\u8303\u56F4\u5185\n return box.left < right && box.right > left && box.top < bottom && box.bottom > top;\n })\n item.parentSetVisible(!valid)\n if (!valid) { \n range.push({ left, right, top, bottom })\n }\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 this.timer.dispose()\n this.pois.forEach(item => item.dispose())\n this.pois.length = 0;\n this.debounceCollisionDetection = () => { }\n super.dispose()\n this.unRegistryEvent()\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 { Box3, Object3D, Vector3 } from \"three\";\nimport { Context } from \"../context\";\nimport { loadModel, dispose } from \"../utils\";\nimport { Poi } from \"./poi\";\nimport { GLTF } from \"three/examples/jsm/loaders/GLTFLoader\";\n\nexport interface ModelOptions {\n modelUrl: string;\n icon?: string;\n icon_size?: [number, number];\n position?: Vector3;\n id: string;\n}\n\nexport class Model extends Object3D {\n poi: Poi | null = null;\n\n model: GLTF | null = null\n\n constructor(public context: Context, private options: ModelOptions) {\n super()\n this.position.copy(options.position || new Vector3(0, 0, 0))\n this.loadModel()\n }\n \n async loadModel() { \n const object = await loadModel(this.options.modelUrl);\n object.scene.rotation.set(Math.PI / 2, Math.PI / 2, 0)\n this.add(object.scene)\n this.model = object\n this.initPoi()\n }\n\n initPoi() {\n if (!this.options.icon) {\n return\n }\n const poi = this.context.currentFloor?.addPoi({\n icon: this.options.icon,\n icon_size: this.options.icon_size,\n built_in: true,\n level: 0\n })\n this.poi = poi || null\n if (this.model && poi) {\n poi.position = (new Box3().setFromObject(this)).getCenter(new Vector3())\n }\n }\n\n dispose() {\n dispose(this)\n this.model = null\n if (this.poi) {\n this.context.currentFloor?.poiLayer.removePoi(this.poi)\n this.poi = null;\n }\n }\n}", "import { Context } from \"../context\";\nimport { EventDispatcher, Vector3 } from \"three\";\nimport { createSvg, vector3ToDevice } from '../utils'\n\nexport class BaseSvg<T extends {} = {}> extends EventDispatcher<T> {\n protected points: Vector3[] = [];\n\n protected svg: SVGElement;\n\n protected enable = true;\n\n constructor(public context: Context) {\n super()\n this.svg = createSvg(`${context.container.clientWidth}`, `${context.container.clientHeight}`)\n context.container.appendChild(this.svg)\n this._registryEvent()\n }\n\n private _onResize = ({ width, height }: { width: number; height: number }) => {\n if (this.svg) {\n this.svg.setAttribute(\"width\", `${width}`)\n this.svg.setAttribute(\"height\", `${height}`)\n }\n }\n\n private _registryEvent() {\n this.context.addEventListener(\"resize\", this._onResize)\n }\n\n private _unRegistryEvent() { \n this.context.removeEventListener(\"resize\", this._onResize)\n }\n\n setEnable(enable: boolean) {\n this.enable = enable;\n if (enable) {\n this.svg.style.display = 'block';\n } else {\n this.svg.style.display = 'none';\n }\n }\n\n getIntersectByPointerEvent(e: PointerEvent) {\n const { camera, renderer } = this.context\n const { offsetX: x, offsetY: y } = e\n const { clientWidth, clientHeight } = renderer.domElement;\n const nx = x / clientWidth * 2 - 1;\n const ny = 1 - y / clientHeight * 2;\n\n const v = new Vector3(nx, ny, 0);\n\n return v.unproject(camera);\n }\n\n getSvgCoordinate(vector: Vector3) {\n const { camera, container } = this.context\n const coord = vector3ToDevice(vector, camera, container.clientWidth, container.clientHeight)\n return coord\n }\n \n dispose() {\n this._unRegistryEvent()\n this.context.container.removeChild(this.svg)\n this.svg = null as unknown as SVGElement\n }\n}", "import { Context } from \"../context\";\nimport { Vector3 } from \"three\";\nimport { setCirclePosition, createCircle, createLine, setLineStartEnd } from '../utils'\nimport { BaseSvg } from './base-svg'\n\ninterface SvgLineEventMap {\n 'distance': { distance: number }\n}\n\nexport class SvgLine extends BaseSvg<SvgLineEventMap> {\n\n private circles: SVGElement[] \n \n private line: SVGElement\n\n constructor(public context: Context) {\n super(context)\n const { config: { svg: { circle, line } } } = context\n this.circles = [createCircle(circle.radius, circle.fill), createCircle(circle.radius, circle.fill)]\n this.line = createLine(line.stroke)\n this.svg.appendChild(this.circles[0]);\n this.svg.appendChild(this.circles[1]);\n this.svg.appendChild(this.line);\n this.registryEvent()\n }\n\n setEnable(enable: boolean) {\n super.setEnable(enable)\n if (enable) {\n this.registryEvent()\n } else {\n this.unRegistryEvent()\n }\n }\n\n registryEvent() { \n this.context.container.addEventListener(\"pointerenter\", this.onPointermove)\n this.context.container.addEventListener(\"pointermove\", this.onPointermove)\n this.context.container.addEventListener(\"pointerleave\", this.onPointerleave)\n this.context.container.addEventListener(\"pointerdown\", this.onPointerdown)\n this.context.addEventListener(\"update\", this.onUpdate)\n }\n \n unRegistryEvent() { \n this.context.container.removeEventListener(\"pointerenter\", this.onPointermove)\n this.context.container.removeEventListener(\"pointermove\", this.onPointermove)\n this.context.container.removeEventListener(\"pointerleave\", this.onPointerleave)\n this.context.container.removeEventListener(\"pointerdown\", this.onPointerdown)\n this.context.removeEventListener(\"update\", this.onUpdate)\n }\n\n onUpdate = () => {\n if (this.points[0]) {\n const point1 = this.getSvgCoordinate(this.points[0])\n setCirclePosition(this.circles[0], point1.x, point1.y)\n setLineStartEnd(this.line, point1)\n }\n if (this.points[1]) {\n const point2 = this.getSvgCoordinate(this.points[1])\n setCirclePosition(this.circles[1], point2.x, point2.y)\n setLineStartEnd(this.line, undefined, point2)\n }\n }\n \n \n onPointermove = (e: PointerEvent) => { \n // \u53EA\u5728\u6709\u7B2C\u4E00\u4E2A\u70B9\u7684\u65F6\u5019\u9700\u8981\n if (this.points.length !== 1) { return }\n this.line.style.display = \"block\";\n setLineStartEnd(this.line, undefined, { x: e.offsetX, y: e.offsetY })\n }\n \n onPointerleave = () => { \n if (this.points[1]) { return } // \u5982\u679C\u5DF2\u7ECF\u6709\u4E24\u4E2A\u70B9\u4E86\u5C31\u4E0D\u505A\u5904\u7406\n this.line.style.display = \"none\";\n }\n \n onPointerdown = (e: PointerEvent) => {\n if (this.points[1]) { return } // \u5982\u679C\u5DF2\u7ECF\u6709\u4E24\u4E2A\u70B9\u4E86\u5C31\u4E0D\u505A\u5904\u7406\n const point = this.getIntersectByPointerEvent(e)\n if (point) {\n const { offsetX: x, offsetY: y } = e\n // \u4FEE\u6539\u70B9\n const circle = this.circles[this.points.length]\n setCirclePosition(circle, x, y)\n if (!this.points.length) { \n // \u8BBE\u7F6E\u7EBF\u7684\u8D77\u59CB\u70B9\n setLineStartEnd(this.line, { x, y }, { x, y })\n }\n this.addPoint(point)\n }\n }\n\n addPoint(vector: Vector3) {\n this.points.push(vector)\n if (this.points.length >= 2) {\n const distance = this.calculatedDistance()\n this.dispatchEvent({ type: 'distance', distance })\n }\n }\n\n /**\n * \u8BA1\u7B97\u4E24\u4E2A\u70B9\u4E4B\u95F4\u7684\u8DDD\u79BB\n */\n calculatedDistance() { \n const [{ x: x1, y: y1 }, { x: x2, y: y2 }] = this.points\n return Math.sqrt((x2 - x1) ** 2 + (y2 - y1) ** 2)\n }\n \n dispose() {\n super.dispose()\n this.unRegistryEvent()\n this.line = null as unknown as SVGElement\n this.circles = []\n }\n}", "import { Context } from \"../context\";\nimport { BaseSvg } from \"./base-svg\";\nimport { setCirclePosition, setLineStartEnd, createLine, createCircle } from '../utils'\nimport { Vector3 } from \"three\";\n\ninterface SvgPolygonEventMap {\n 'area': { area: number }\n}\n\nexport class SvgPolygon extends BaseSvg<SvgPolygonEventMap> {\n\n private circles: SVGElement[] = []\n\n private lines: SVGElement[] = []\n\n private isClose = false\n\n constructor(context: Context) {\n super(context)\n this.registryEvent()\n }\n\n setEnable(enable: boolean) {\n super.setEnable(enable)\n if (enable) {\n this.registryEvent()\n } else {\n this.unRegistryEvent()\n }\n }\n\n private get lastLine() {\n return this.lines.slice(-1)[0]\n }\n\n private addCircle(circle: SVGElement) {\n this.circles.push(circle)\n this.svg.appendChild(circle)\n }\n\n private addLine(line: SVGElement) {\n this.lines.push(line)\n this.svg.appendChild(line)\n }\n\n registryEvent() { \n this.context.container.addEventListener(\"pointerenter\", this.onPointermove)\n this.context.container.addEventListener(\"pointermove\", this.onPointermove)\n this.context.container.addEventListener(\"pointerleave\", this.onPointerleave)\n this.context.container.addEventListener(\"pointerdown\", this.onPointerdown)\n this.context.addEventListener(\"update\", this.onUpdate)\n }\n \n unRegistryEvent() { \n this.context.container.removeEventListener(\"pointerenter\", this.onPointermove)\n this.context.container.removeEventListener(\"pointermove\", this.onPointermove)\n this.context.container.removeEventListener(\"pointerleave\", this.onPointerleave)\n this.context.container.removeEventListener(\"pointerdown\", this.onPointerdown)\n this.context.removeEventListener(\"update\", this.onUpdate)\n }\n\n onUpdate = () => {\n if (this.points.length) {\n this.points.forEach((point, index) => {\n const devicePoint = this.getSvgCoordinate(point)\n if (this.circles[index]) {\n setCirclePosition(this.circles[index], devicePoint.x, devicePoint.y)\n }\n if (index !== 0) {\n setLineStartEnd(this.lines[index - 1], undefined, devicePoint)\n }\n if (this.lines[index]) {\n setLineStartEnd(this.lines[index], devicePoint)\n }\n }) \n }\n }\n \n \n onPointermove = (e: PointerEvent) => { \n // \u5FC5\u987B\u8981\u6709\u4E00\u4E2A\u70B9\u5E76\u4E14\u8FD8\u6CA1\u6709\u95ED\u5408\u624D\u9700\u8981\u5904\u7406\n if (!this.lastLine || this.isClose) { return }\n this.lastLine.style.display = \"block\";\n setLineStartEnd(this.lastLine, undefined, { x: e.offsetX, y: e.offsetY })\n }\n \n onPointerleave = () => { \n // \u5982\u679C\u5DF2\u7ECF\u95ED\u5408\u4E86\u5C31\u4E0D\u9700\u8981\u5904\u7406\u4E86\n if (this.isClose) { return } \n this.lastLine.style.display = \"none\";\n }\n \n onPointerdown = (e: PointerEvent) => {\n // \u5982\u679C\u5DF2\u7ECF\u95ED\u5408\u4E86\n if (this.isClose) { return }\n const point = this.getIntersectByPointerEvent(e)\n if (point) {\n const { offsetX: x, offsetY: y } = e\n if (this.checkAdsorb(x, y)) {\n this.isClose = true\n this.addPoint(this.points[0])\n } else {\n this.addPoint(point)\n }\n const { circle: { fill, radius }, line: { stroke } } = this.context.config.svg\n if (!this.isClose) {\n // \u521B\u5EFA\u4E00\u4E2A\u65B0\u7684\u70B9\n const circle = createCircle(radius, fill)\n setCirclePosition(circle, x, y)\n this.addCircle(circle)\n }\n if (this.lines.length) {\n // \u5982\u679C\u5DF2\u7ECF\u6709\u4E00\u6761\u7EBF\u4E86 \u8981\u95ED\u5408\u8FD9\u6761\u7EBF\n setLineStartEnd(this.lastLine, undefined, { x, y })\n }\n // \u5982\u679C\u8FD9\u4E2A\u591A\u8FB9\u5F62\u8FD8\u6CA1\u6709\u95ED\u5408 \u5C31\u521B\u5EFA\u4E00\u4E2A\u65B0\u7684\u7EBF \u5305\u62EC\u521B\u5EFA\u7B2C\u4E00\u6761\u7EBF\n if (!this.isClose) {\n const line = createLine(stroke)\n // \u8BBE\u7F6E\u7EBF\u7684\u8D77\u59CB\u70B9\n setLineStartEnd(line, { x, y }, { x, y })\n this.addLine(line)\n }\n }\n }\n\n /**\n * \u68C0\u6D4B\u662F\u5426\u53EF\u4EE5\u5438\u9644\n * \u5750\u6807\u70B9\u6700\u5C113\u4E2A \u4F20\u5165\u7684\u5750\u6807\u70B9\u548C\u7B2C\u4E00\u4E2A\u5750\u6807\u7684\u50CF\u7D20\u76F8\u5DEE\u4E0D\u8D85\u8FC75\u4E2A\u50CF\u7D20\n */\n checkAdsorb(x: number, y: number) {\n if (this.points.length < 3) { return false }\n const circle = this.circles[0]\n const cx = +circle.getAttribute(\"cx\")!\n const cy = +circle.getAttribute(\"cy\")!\n return Math.sqrt((x - cx) ** 2 + (y - cy) ** 2) <= 5\n }\n\n addPoint(vector: Vector3) {\n this.points.push(vector)\n if (this.isClose) {\n const area = this.calculatedArea()\n this.dispatchEvent({ type: 'area', area })\n }\n }\n // \u8BA1\u7B97\u9762\u79EF\n calculatedArea() {\n const cds = this.points.map(item => [item.x, item.y])\n let area = 0\n const numPoints = cds.length\n for (let i = 0; i < numPoints; i++) {\n const j = (i + 1) % numPoints\n area += (cds[i][0] * cds[j][1] - cds[j][0] * cds[i][1])\n }\n return Math.abs(area / 2)\n }\n\n dispose() {\n super.dispose()\n this.unRegistryEvent()\n this.lines = []\n this.circles = []\n }\n}", "import { Context } from \"../context\";\nimport { Box3 } from \"three\";\nimport { vector3ToDevice, createRect, setRectPosition } from '../utils'\nimport { BaseSvg } from './base-svg'\nimport { Graphic } from \"./graphic\";\n\ninterface SvgLineEventMap {\n 'distance': { distance: number }\n}\n\nexport class SelectBox extends BaseSvg<SvgLineEventMap> {\n\n private rect!: SVGElement\n\n private cornerRect: SVGElement[] = [] // \u56DB\u4E2A\u89D2\u4E0A\u7684\u65B9\u5757\n\n private centerRect: SVGElement[] = [] // \u56DB\u4E2A\u7EBF\u4E2D\u95F4\u7684\u65B9\u5757\n\n private graphic?: Graphic\n\n constructor(public context: Context) {\n super(context)\n const { config: { svg: { line } } } = context\n this.rect = createRect(line.stroke, \"transparent\")\n this.svg.appendChild(this.rect)\n for (let i = 0; i < 4; i++) {\n this.cornerRect[i] = createRect(line.stroke, \"#ffffff\")\n this.centerRect[i] = createRect(line.stroke, \"#ffffff\")\n this.svg.appendChild(this.cornerRect[i])\n this.svg.appendChild(this.centerRect[i])\n }\n this.registryEvent()\n }\n\n setEnable(enable: boolean) {\n super.setEnable(enable)\n if (enable) {\n this.registryEvent()\n } else {\n this.unRegistryEvent()\n }\n }\n\n registryEvent() { \n this.context.addEventListener(\"update\", this.onUpdate)\n }\n \n unRegistryEvent() { \n this.context.removeEventListener(\"update\", this.onUpdate)\n }\n\n onUpdate = () => {\n if (!this.graphic) {\n setRectPosition(this.rect, 0, 0, 0, 0)\n for (let i = 0; i < this.cornerRect.length; i++) {\n setRectPosition(this.cornerRect[i], 0, 0, 0, 0)\n setRectPosition(this.centerRect[i], 0, 0, 0, 0)\n }\n } else {\n const box = new Box3().setFromObject(this.graphic)\n const { camera, container: { clientWidth: w, clientHeight: h } } = this.context\n const { min, max } = box\n const leftBottom = vector3ToDevice(min, camera, w, h)\n const rightTop = vector3ToDevice(max, camera, w, h)\n // \u753B\u51FA\u4E00\u4E2A\u6846\u6765\n setRectPosition(this.rect, leftBottom.x, rightTop.y, Math.abs(rightTop.x - leftBottom.x), Math.abs(rightTop.y - leftBottom.y))\n // \u56DB\u4E2A\u89D2\u7684\u4F4D\u7F6E\n const { x: left, y: bottom } = leftBottom\n const { x: right, y: top } = rightTop\n const halfWidth = 5;\n const corners = [\n { x: left - halfWidth, y: top - halfWidth }, // \u5DE6\u4E0A\u89D2\n { x: right - halfWidth, y: top - halfWidth }, // \u53F3\u4E0A\u89D2\n { x: left - halfWidth, y: bottom - halfWidth }, // \u5DE6\u4E0B\u89D2\n { x: right - halfWidth, y: bottom - halfWidth }, // \u53F3\u4E0B\u89D2 \n ]\n for (let i = 0; i < corners.length; i++) {\n setRectPosition(this.cornerRect[i], corners[i].x, corners[i].y, halfWidth * 2, halfWidth * 2)\n }\n // \u56DB\u4E2A\u4E2D\u95F4\u7684\u4F4D\u7F6E\n const centerHalfWidth = 4;\n const centerX = (left + right) / 2\n const centerY = (bottom + top) / 2\n const centers = [\n { x: centerX - centerHalfWidth, y: top - centerHalfWidth }, // \u4E0A\n { x: left - centerHalfWidth, y: centerY - centerHalfWidth }, // \u5DE6\n { x: right - centerHalfWidth, y: centerY - centerHalfWidth }, // \u53F3\n { x: centerX - centerHalfWidth, y: bottom - centerHalfWidth }, // \u4E0B\n ]\n for (let i = 0; i < centers.length; i++) {\n setRectPosition(this.centerRect[i], centers[i].x, centers[i].y, centerHalfWidth * 2, centerHalfWidth * 2)\n }\n }\n }\n \n selectGraphic(graphic: Graphic) { \n this.graphic = graphic\n }\n\n dispose() {\n super.dispose()\n this.unRegistryEvent()\n this.rect = null as unknown as SVGElement\n this.cornerRect = []\n this.centerRect = []\n }\n}", "import { createRect, isContain, setRectPosition, vector3ToDevice } from \"../../utils\";\nimport { Context } from \"../../context\";\nimport { BaseSvg, Graphic } from \"../../elements\";\nimport { Frustum, Vector3 } from \"three\";\n\ninterface BoxSelectionEventMap { \n \"selected\": {\n list: Graphic[]\n }\n}\n\nexport class BoxSelection extends BaseSvg<BoxSelectionEventMap> {\n\n private startPoint?: Vector3;\n\n private endPoint?: Vector3;\n\n rect: SVGElement;\n\n frustum = new Frustum();\n\n constructor(context: Context) { \n super(context);\n const { config: { selectBox: { fill, stroke } } } = context\n this.rect = createRect(stroke, fill)\n this.svg.appendChild(this.rect)\n this.registryEvent()\n }\n\n setEnable(enable: boolean): void {\n super.setEnable(enable)\n setRectPosition(this.rect, 0, 0, 0, 0)\n if (enable) {\n this.registryEvent()\n } else {\n this.startPoint = undefined\n this.unRegistryEvent()\n }\n }\n\n onPointerDown = (e: PointerEvent) => { \n if (!this.enable) { return }\n const point = this.getIntersectByPointerEvent(e)\n if (point) { \n this.startPoint = point\n }\n this.endPoint = undefined;\n }\n\n onPointerMove = (e: PointerEvent) => { \n if (!this.enable || !this.startPoint) { return }\n const point = this.getIntersectByPointerEvent(e)\n if (point) { \n this.endPoint = point\n }\n }\n\n onPointerUp = (e: PointerEvent) => { \n if (!this.enable) { return }\n const point = this.getIntersectByPointerEvent(e)\n if (point) { \n this.endPoint = point\n }\n this.doSelect()\n this.startPoint = undefined\n }\n\n onUpdate = () => {\n if (this.startPoint) {\n const startPoint = this.getSvgCoordinate(this.startPoint)\n let endPoint = { ...startPoint }\n if (this.endPoint) {\n endPoint = this.getSvgCoordinate(this.endPoint)\n }\n const leftTop = { x: Math.min(startPoint.x, endPoint.x), y: Math.min(startPoint.y, endPoint.y) }\n const width = Math.abs(endPoint.x - startPoint.x)\n const height = Math.abs(endPoint.y - startPoint.y)\n setRectPosition(this.rect, leftTop.x, leftTop.y, width, height)\n } else {\n setRectPosition(this.rect, 0, 0, 0, 0)\n }\n }\n\n registryEvent() { \n this.context.container.addEventListener(\"pointerdown\", this.onPointerDown)\n this.context.container.addEventListener(\"pointermove\", this.onPointerMove)\n this.context.container.addEventListener(\"pointerup\", this.onPointerUp)\n this.context.addEventListener(\"update\", this.onUpdate)\n }\n \n unRegistryEvent() { \n this.context.container.removeEventListener(\"pointerdown\", this.onPointerDown)\n this.context.container.removeEventListener(\"pointermove\", this.onPointerMove)\n this.context.container.removeEventListener(\"pointerup\", this.onPointerUp)\n this.context.removeEventListener(\"update\", this.onUpdate)\n }\n\n doSelect() { \n if (this.startPoint && this.endPoint) {\n const dis = this.startPoint.distanceTo(this.endPoint);\n if (dis < 0.1) { return }\n const { context: { camera, container: { clientWidth: w, clientHeight: h } } } = this\n const startDevice = vector3ToDevice(this.startPoint!, camera, w, h)\n const endDevice = vector3ToDevice(this.endPoint!, camera, w, h)\n const leftTop = { x: Math.min(startDevice.x, endDevice.x), y: Math.min(startDevice.y, endDevice.y) }\n const rightBottom = { x: Math.max(startDevice.x, endDevice.x), y: Math.max(startDevice.y, endDevice.y) }\n const list = this.searchMapInFrustum(leftTop, rightBottom);\n this.dispatchEvent({ type: \"selected\", list })\n }\n }\n\n searchMapInFrustum(leftTop: { x: number, y: number }, rightBottom: { x: number, y: number }): Graphic[] {\n const { context } = this\n return context.currentFloor?.graphicLayer.children.filter(item => {\n return item instanceof Graphic && this.searchChildInFrustum(item, leftTop, rightBottom)\n }) as Graphic[] || []\n }\n\n searchChildInFrustum(object: Graphic, leftTop: { x: number, y: number }, rightBottom: { x: number, y: number }): boolean {\n const { context: { camera, container: { clientWidth: w, clientHeight: h } } } = this\n if (!object) return false;\n if (!object.mesh) { \n // \u70B9\n const position = object.getPosition()\n if (position) {\n const position2d = vector3ToDevice(position, camera, w, h)\n return isContain(position2d, leftTop, rightBottom)\n }\n return false\n }\n if (!object.mesh.geometry.boundingBox) {\n object.mesh.geometry.computeBoundingBox();\n }\n const box = object.mesh.geometry.boundingBox;\n if (!box) { return false }\n const { min, max } = box\n const minDevice = vector3ToDevice(min, camera, w, h)\n const maxDevice = vector3ToDevice(max, camera, w, h)\n \n if (!isContain(minDevice, leftTop, rightBottom)) { return false }\n if (!isContain(maxDevice, leftTop, rightBottom)) { return false; }\n return true;\n }\n\n dispose() {\n this.unRegistryEvent()\n }\n}\n\n", "import { Graphic, Poi } from \"../../elements\";\nimport { Context } from \"../../context\";\nimport { EventDispatcher } from \"three\";\nimport { Timer } from \"../../utils\";\n\ninterface HoverHelperEventMap {\n \"hover-change\": {\n graphics: Graphic[]\n },\n}\n\nexport class HoverHelper extends EventDispatcher<HoverHelperEventMap> { \n\n curGraphics = new Set<Graphic>()\n\n timer = new Timer()\n\n graphicTimerMap = new Map<Graphic, number>()\n \n constructor(private context: Context) {\n super()\n this.registryEvent()\n }\n\n onPointerMove = ({ graphics, pois, e }: { graphics: Graphic[], pois: Poi[], e: PointerEvent }) => {\n const poiGraphics = pois\n .map(item => this.context.currentFloor?.graphicLayer.graphicMap.get(item.options.id))\n .filter(graphic => graphic && graphic.options.geometry.type === \"point\") as Graphic[]\n if (!graphics.length && !poiGraphics.length && this.curGraphics.size) {\n this.curGraphics.clear()\n this.handleHoverGraphicsChange()\n return\n }\n const { time } = this.context.config.hover\n const allGraphics = new Set<Graphic>()\n if (poiGraphics.length) { \n // \u627E\u79BB\u4E2D\u5FC3\u70B9\u6700\u65B0\u7684\u90A3\u4E2A\n let resGraphic: Graphic;\n let distance = 10000;\n poiGraphics.forEach(graphic => { \n const poi = pois.find(poi => poi.options.id === graphic.options.id)!\n const { x, y } = poi.clientPos\n let curDistance = Math.sqrt((x - e.offsetX) ** 2 + (y - e.offsetY) ** 2)\n if (curDistance < distance) {\n distance = curDistance\n resGraphic = graphic\n }\n })\n allGraphics.add(resGraphic!)\n }\n if (!allGraphics.size) { \n graphics.forEach(graphic => allGraphics.add(graphic))\n }\n allGraphics.forEach((graphic) => {\n // \u5982\u679C\u5DF2\u7ECF\u6709hover\u7684\u5B9A\u65F6\u5668\u5728\u6267\u884C\u4E86\u5C31\u8FD4\u56DE\n if (this.graphicTimerMap.get(graphic)) { \n return\n }\n // \u5982\u679C\u8FD9\u4E2A\u5143\u7D20\u7684hover\u5DF2\u7ECF\u89E6\u53D1\u8FC7\u4E86\u5C31\u8FD4\u56DE\n if (this.curGraphics.has(graphic)) { \n return\n }\n // \u8FD9\u4E2A\u5143\u7D20\u6CA1\u6709\u89E6\u53D1\u8FC7\u4E5F\u6CA1\u6709\u5B9A\u65F6\u5668\u5C31\u6DFB\u52A0\u4E00\u4E2A\u5B9A\u65F6\u5668\n const timer = this.timer.setTimeout(() => {\n this.curGraphics.add(graphic)\n this.graphicTimerMap.delete(graphic)\n this.timer.clearTimeout(timer)\n this.handleHoverGraphicsChange()\n }, time)\n this.graphicTimerMap.set(graphic, timer)\n })\n // \u5982\u679C\u5B9A\u65F6\u5668\u7684\u5143\u7D20\u4E0D\u5B58\u5728\u5728\u5F53\u524Dgraphics\u4E2D\u4E86\u5C31\u5220\u9664\n this.graphicTimerMap.forEach((timer, graphic) => { \n if (!allGraphics.has(graphic)) { \n this.timer.clearTimeout(timer)\n this.graphicTimerMap.delete(graphic)\n }\n })\n // \u5982\u679C\u5DF2\u7ECFhover\u7684\u5143\u7D20\u4E0D\u5B58\u5728\u5728\u5F53\u524D\u7684graphics\u4E86\u5C31\u5220\u9664\n const size = this.curGraphics.size\n this.curGraphics.forEach((graphic) => { \n if (!allGraphics.has(graphic)) { \n this.curGraphics.delete(graphic)\n }\n })\n // \u5982\u679C\u6709\u5220\u9664\u5C31\u89E6\u53D1\u4E8B\u4EF6\n if (size !== this.curGraphics.size) {\n this.handleHoverGraphicsChange()\n }\n }\n\n onPointerLevel = () => {\n this.curGraphics.clear()\n this.handleHoverGraphicsChange()\n }\n\n handleHoverGraphicsChange(graphics = this.curGraphics) { \n this.dispatchEvent({ type: 'hover-change', graphics: Array.from(graphics) })\n }\n\n registryEvent() {\n this.context.addEventListener(\"pointer-over\", this.onPointerMove)\n this.context.addEventListener(\"pointer-move\", this.onPointerMove)\n this.context.addEventListener(\"pointer-level\", this.onPointerLevel)\n }\n\n unRegistryEvent() {\n this.context.removeEventListener(\"pointer-over\", this.onPointerMove)\n this.context.removeEventListener(\"pointer-move\", this.onPointerMove)\n this.context.removeEventListener(\"pointer-level\", this.onPointerLevel)\n }\n\n dispose() {\n this.unRegistryEvent()\n this.timer.dispose()\n }\n}", "import { Context } from \"../context\";\nimport { Color, LineBasicMaterial, MeshStandardMaterial, MeshBasicMaterial, ShaderMaterial, Vector3, DoubleSide } from \"three\";\n\nfunction vectorToString(vector: Vector3) {\n return `${vector.x}-${vector.y}-${vector.z}`\n}\n\ninterface LineMaterialOptions {\n color: string;\n opacity: number;\n}\n\ninterface MeshStandardMaterialOptions {\n color: string,\n opacity: number,\n}\n\ninterface MeshBasicMaterialOptions {\n color: string,\n opacity: number,\n}\n\ninterface ShaderMaterialOptions { \n gradualColor: string[];\n center: Vector3;\n maxValue: number;\n opacity: number;\n direction: Vector3;\n max: Vector3;\n min: Vector3;\n}\n\nexport class MaterialFactory {\n\n private lineMaterialMap = new Map<string, LineBasicMaterial>()\n\n private meshStandardMaterialMap = new Map<string, MeshStandardMaterial>()\n\n private meshBasicMaterialMap = new Map<string, MeshBasicMaterial>()\n\n private shaderMaterialMap = new Map<string, ShaderMaterial>()\n\n constructor(private context: Context) {\n\n }\n\n generateLineMaterialKey({ color, opacity }: LineMaterialOptions) { \n return `${color}-${opacity}`;\n }\n\n createLineMaterial({ color, opacity }: LineMaterialOptions) {\n const key = this.generateLineMaterialKey({ color, opacity })\n if (this.lineMaterialMap.has(key)) {\n return this.lineMaterialMap.get(key)!\n }\n const lineMaterial = new LineBasicMaterial({\n color: new Color(color).convertLinearToSRGB(),\n transparent: true,\n opacity: opacity\n })\n this.lineMaterialMap.set(key, lineMaterial);\n return lineMaterial\n }\n\n createMeshStandardMaterial({ color, opacity }: MeshStandardMaterialOptions) {\n const key = `${color}-${opacity}`;\n if (this.meshStandardMaterialMap.has(key)) {\n return this.meshStandardMaterialMap.get(key)!\n }\n const material = new MeshStandardMaterial({\n color: new Color(color).convertLinearToSRGB(),\n roughness: 1,\n transparent: true,\n opacity: opacity,\n depthWrite: true,\n })\n this.meshStandardMaterialMap.set(key, material);\n return material;\n }\n\n createMeshBasicMaterial({ color, opacity }: MeshBasicMaterialOptions) {\n const key = `${color}-${opacity}`;\n if (this.meshBasicMaterialMap.has(key)) {\n return this.meshBasicMaterialMap.get(key)!\n }\n const material = new MeshBasicMaterial({\n color: color,\n transparent: true,\n opacity: opacity,\n depthWrite: true,\n })\n this.meshBasicMaterialMap.set(key, material);\n return material;\n }\n\n createShaderMaterial({ gradualColor, center, maxValue, opacity, direction, max, min }: ShaderMaterialOptions) {\n\n const key = `${gradualColor.toString()}-${vectorToString(center)}-${maxValue}-${opacity}-${vectorToString(direction)}`\n if (this.shaderMaterialMap.has(key)) {\n return this.shaderMaterialMap.get(key)!;\n }\n // \u81EA\u5B9A\u4E49\u7740\u8272\u5668\u4EE3\u7801\n const vertexShader = `\n uniform vec3 uColor;\n uniform vec3 uGradualColor;\n uniform vec3 center;\n uniform vec3 uDirection;\n uniform vec3 uMax;\n uniform vec3 uMin;\n uniform float maxValue;\n varying vec3 vColor; \n\n void main() {\n vec3 direction = normalize(uDirection);\n vec3 currentPosition = position - center;\n float colorFactor = (dot(direction, currentPosition) / maxValue) * 0.5 + 0.5;\n\n vColor = mix(uColor, uGradualColor, colorFactor);\n gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\n }\n `;\n\n const fragmentShader = `\n varying vec3 vColor;\n uniform float opacity;\n\n void main() {\n gl_FragColor = vec4(vColor.x, vColor.y, vColor.z, opacity);\n }\n `;\n\n // \u521B\u5EFA\u81EA\u5B9A\u4E49ShaderMaterial\n const material = new ShaderMaterial({\n uniforms: {\n uColor: {\n value: new Color(gradualColor[0]).convertLinearToSRGB(),\n },\n uGradualColor: {\n value: new Color(gradualColor[1]).convertLinearToSRGB(),\n },\n center: {\n value: center,\n },\n maxValue: {\n value: maxValue\n },\n opacity: {\n value: opacity\n },\n uDirection: {\n value: direction\n },\n uMax: {\n value: max\n },\n uMin: {\n value: min\n }\n },\n vertexShader: vertexShader,\n fragmentShader: fragmentShader,\n side: DoubleSide\n });\n this.shaderMaterialMap.set(key, material);\n return material\n }\n\n dispose() { \n this.lineMaterialMap.forEach((val, _) => { \n val.dispose()\n })\n this.lineMaterialMap.clear()\n\n this.meshStandardMaterialMap.forEach((val, _) => { \n val.dispose()\n })\n this.meshStandardMaterialMap.clear();\n\n this.meshBasicMaterialMap.forEach((val, _) => { \n val.dispose()\n })\n this.meshBasicMaterialMap.clear()\n\n this.shaderMaterialMap.forEach((val, _) => { \n val.dispose()\n })\n this.shaderMaterialMap.clear()\n }\n \n}", "import { Box3, Vector3 } from \"three\";\nimport { Context } from \"../context\";\nimport { vector3ToDevice } from \"./coordinate\";\n\nexport class CameraBound {\n private prevCamera = {\n position: new Vector3(),\n zoom: 1,\n target: new Vector3()\n }\n\n private enable = true;\n\n constructor(private context: Context) {\n this.registryEvent()\n this.changePrevCamera()\n }\n\n setEnable(enable: boolean) {\n this.enable = enable;\n if (enable) {\n this.registryEvent()\n } else {\n this.unRegistryEvent()\n }\n }\n\n changePrevCamera() {\n this.prevCamera = {\n position: this.context.camera.position.clone(),\n zoom: this.context.camera.zoom,\n target: this.context.control.target.clone()\n }\n }\n\n backToPrevCamera() {\n this.setEnable(false)\n this.context.camera.position.copy(this.prevCamera.position)\n this.context.camera.zoom = this.prevCamera.zoom;\n this.context.control.target.copy(this.prevCamera.target)\n this.context.control.update()\n this.setEnable(true)\n }\n\n registryEvent() { \n this.context.addEventListener(\"control-change\", this.onCameraChange)\n }\n\n unRegistryEvent() {\n this.context.removeEventListener(\"control-change\", this.onCameraChange)\n }\n\n getCurFloorScreenPosition() {\n if (!this.context.currentFloor) {\n return null\n }\n const box = new Box3().setFromObject(this.context.currentFloor.groundUpper);\n const { camera, container: { clientWidth: w, clientHeight: h } } = this.context\n const { min, max } = box\n const lb = vector3ToDevice(min, camera, w, h)\n const rt = vector3ToDevice(max, camera, w, h)\n const lt = vector3ToDevice(new Vector3(min.x, max.y, max.z), camera, w, h)\n const rb = vector3ToDevice(new Vector3(max.x, min.y, min.z), camera, w, h)\n const left = Math.min(lb.x, rt.x, lt.x, rb.x)\n const right = Math.max(lb.x, rt.x, lt.x, rb.x)\n const top = Math.min(lb.y, rt.y, lt.y, rb.y)\n const bottom = Math.max(lb.y, rt.y, lt.y, rb.y)\n return { left, right, top, bottom }\n }\n\n /**\n * \u68C0\u6D4B\u5730\u56FE\u662F\u4E0D\u662F\u5728\u663E\u793A\u8303\u56F4\n * @param param0 \n * @returns \n */\n checkDistanceToScreenEdge({ left, right, top, bottom }: { left: number, right: number, top: number, bottom: number }) { \n const { width, height } = this.context.clientSize\n const [pt, pr, pb, pl] = this.context.config.cameraBound.padding\n // console.log(left, left <= pl , width - right, width - right <= pr , top <= pt , height - bottom <= pb)\n // \u6240\u6709\u7684\u8FB9\u90FD\u4E0D\u8D85\u51FA\n return (left <= pl && width - right <= pr && top <= pt && height - bottom <= pb)\n }\n\n onCameraChange = () => {\n // \u5224\u65AD\u5982\u679C\u8D85\u51FA\u5C31\u7528\u4E4B\u524D\u7684prevCamera\n // \u83B7\u53D6\u5730\u56FE\u7684\u5C4F\u5E55\u4F4D\u7F6E\n // \u5148\u4E0D\u505A\u8FB9\u754C\u5224\u65AD\n // const bound = this.getCurFloorScreenPosition();\n // if (bound) {\n // const { left, right, top, bottom } = bound\n // const isInBound = this.checkDistanceToScreenEdge({ left, right, top, bottom });\n // console.log(\"isInBound\", isInBound)\n // if (isInBound) {\n // this.changePrevCamera()\n // } else {\n // this.backToPrevCamera()\n // }\n // }\n }\n\n dispose() {\n this.unRegistryEvent()\n }\n}", "import { merge } from 'lodash'\nimport { HeatmapConfiguration } from '@mars3d/heatmap.js'\n\nexport interface Config {\n apiDomain: string,\n apiInfo: RequestInit,\n apiPath: {\n floorGraphic: string,\n floorRange: string\n },\n resizeObserver: boolean;\n heatMap: Partial<HeatmapConfiguration>,\n useFloorCache: boolean;\n control: {\n maxPolar: number;\n defaultPolar: number;\n defaultAzimuthal: number;\n },\n defaultPadding: [number, number, number, number];\n initTransToMark: boolean;\n svg: {\n circle: {\n radius: string;\n fill: string;\n },\n line: {\n stroke: string;\n }\n },\n selectBox: {\n stroke: string;\n fill: string;\n },\n hover: {\n time: number;\n },\n ground: {\n color: string;\n opacity: number;\n height: number;\n stroke: boolean,\n strokeColor: string,\n strokeOpacity: number\n },\n markGraphic: {\n color: string;\n opacity: number;\n height: number;\n stroke: boolean;\n strokeColor: string;\n strokeOpacity: number;\n },\n graphic: {\n fillOpacity: number,\n },\n cameraBound: {\n padding: [number, number, number, number]\n },\n poi: {\n boxScale: number;\n }\n}\n\nexport const defaultConfig: Config = {\n apiDomain: \"\",\n apiInfo: {},\n apiPath: {\n floorGraphic: \"/api/inception-map/floor/get\",\n floorRange: \"/api/inception-map/range/get\"\n },\n resizeObserver: false,\n initTransToMark: false,\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 defaultPolar: 1.1,\n defaultAzimuthal: 0,\n },\n defaultPadding: [20, 20, 20, 20],\n svg: {\n circle: {\n radius: \"2\",\n fill: \"#1CADFF\"\n },\n line: {\n stroke: \"#1CADFF\"\n }\n },\n selectBox: {\n stroke: \"#1CADFF\",\n fill: \"rgba(28, 173, 255, 0.3)\"\n },\n hover: {\n time: 100\n },\n ground: {\n color: \"#F6F6F6\",\n opacity: 1,\n height: 0.001,\n stroke: false, \n strokeColor: \"#E6E6E6\",\n strokeOpacity: 1\n },\n markGraphic: {\n color: \"#EEF0F3\",\n opacity: 1,\n height: 0.001,\n stroke: false,\n strokeColor: \"#000\",\n strokeOpacity: 1\n },\n graphic: {\n fillOpacity: 1,\n },\n cameraBound: {\n padding: [150, 150, 150, 150]\n },\n poi: {\n boxScale: 1.0\n }\n}\n\nexport function getConfig(config: Partial<Config>): Config {\n return merge({}, defaultConfig, config);\n}"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import { EventDispatcher, Object3D, Vector3 } from \"three\";\nimport { Context } from \"./context\";\nimport { clearTextTexture, clearCanvas, vector3ToDevice, getCenter, getLongestSideDir } from \"./utils\";\nimport { Config, getConfig } from './config'\nimport {Floor, Graphic, HeatmapDataParam, Model, ModelOptions, PoiOptionsParam} from \"./elements\";\nimport { SvgLine, SvgPolygon } from \"./elements\";\nimport { GraphicInfo, GraphicOptions, PolygonGeometry, ResGraphicInfo } from \"./types\";\nimport { debounce } from \"lodash\";\nimport { disposeLoader } from \"./utils/model\";\n\nexport interface LoadQuery {\n brand: string;\n project: string;\n phase: string;\n building: string;\n floor: string;\n ts: string;\n resource_type_list: string;\n}\n\ninterface BmapEventMap {\n \"zoom-change\": {\n basicZoom: number;\n cameraZoom: number;\n }\n}\n\nexport type MapType = \"2d\" | \"3d\"\n\nexport enum MapTypePolar {\n D2 = 0,\n D3 = 1.1\n}\n\nexport class BMap extends EventDispatcher<BmapEventMap> {\n config: Config;\n\n public context: Context;\n\n private polarKeys: string[] = [];\n\n private azimuthalKeys: string[] = [];\n\n private svgLine?: SvgLine;\n\n private svgPolygon?: SvgPolygon;\n\n public basicZoom = 1;\n\n private prevCameraZoom = 1;\n\n type: MapType = \"2d\"\n\n floorDataMap: Map<string, GraphicInfo[]> = new Map()\n\n buildingGroundMap = new Map<string, GraphicInfo | null>()\n\n currentBuildGround: GraphicInfo | null = null\n\n private observe: ResizeObserver | null = null;\n\n constructor(private container: HTMLElement, config: Partial<Config> = {}) {\n super();\n this.config = getConfig(config)\n this.context = new Context(container, this.config);\n this.registryEvent();\n this.context.render();\n }\n\n private async loadGraphics({ brand, project, phase, building, floor, ts, resource_type_list }: LoadQuery): Promise<GraphicInfo[]> {\n const { apiDomain, apiPath: { floorGraphic }, apiInfo } = this.config\n const url = `${apiDomain}${floorGraphic}?brand=${brand}&project=${project}&phase=${phase}&building=${building}&floor=${floor}&ts=${ts}&resource_type_list=${resource_type_list}`\n const data = await fetch(url, apiInfo)\n .then((res) => res.json())\n .then(res => res.data)\n .then((res: ResGraphicInfo[]): GraphicInfo[] => {\n (res || []).map(item => item.info = (JSON.parse(item.info)))\n return (res || []) as unknown as GraphicInfo[]\n })\n return data\n }\n\n getBuildingKey({ brand, project, phase, building }: Omit<LoadQuery, \"floor\" | \"ts\" | \"resource_type_list\">) {\n const key = `${brand}-${project}-${phase}-${building}`\n return key\n }\n\n private async loadBuildingGround({ brand, project, phase, building }: Omit<LoadQuery, \"floor\" | \"ts\" | \"resource_type_list\">): Promise<GraphicInfo | null>{ \n const key = this.getBuildingKey({ brand, project, phase, building })\n if (this.buildingGroundMap.get(key)) { \n return this.buildingGroundMap.get(key) || null\n }\n const { apiDomain, apiPath: { floorRange }, apiInfo } = this.config\n const url = `${apiDomain}${floorRange}?brand=${brand}&project=${project}&phase=${phase}&building=${building}`\n const data = await fetch(url, apiInfo)\n .then((res) => res.json())\n .then(res => res.data)\n .then((res: ResGraphicInfo[]): GraphicInfo | null => {\n const data = (res || [])[0]\n if (data) {\n data.info = JSON.parse(data.info)\n }\n return data as unknown as GraphicInfo | null\n })\n this.buildingGroundMap.set(key, data)\n return data\n }\n \n getFloorKey({ brand, project, phase, building, floor, ts, resource_type_list }: LoadQuery) { \n const floorKey = `${brand}-${project}-${phase}-${building}-${floor}-${ts}-${resource_type_list}`\n return floorKey\n }\n\n async load({ brand, project, phase, building, floor, ts, resource_type_list }: LoadQuery) {\n const floorKey = this.getFloorKey({ brand, project, phase, building, floor, ts, resource_type_list })\n if (this.floorDataMap.get(floorKey)) { return }\n const [data, buildGround] = await Promise.all([\n this.loadGraphics({ brand, project, phase, building, floor, ts, resource_type_list }),\n this.loadBuildingGround({ brand, project, phase, building })\n ])\n if (buildGround) {\n const center = getCenter((buildGround.info.geometry as PolygonGeometry).cds[0])\n data.forEach(item => {\n item.info.geometry.coords = JSON.parse(JSON.stringify(item.info.geometry.cds))\n if (item.info.geometry.type === \"polygon\") { \n item.info.geometry.coords.map(cds => {\n if (Array.isArray(cds)) {\n cds.forEach(coord => {\n coord[0] -= center[0]\n coord[1] -= center[1]\n })\n }\n })\n } else {\n // point\n const [x, y] = item.info.geometry.cds\n item.info.geometry.coords = [x - center[0], y - center[1]]\n }\n item.info.transformToBuildingGround = true\n })\n }\n const { ground, markGraphic, graphic } = this.config\n for (let i = 0; i < data.length; i++) {\n const item = data[i]\n item.info.deltaHeight = 0.00001 * (i + 1)\n if (item.info.group === \"ground\") {\n item.info.fillColor = ground.color\n item.info.fillOpacity = ground.opacity\n item.info.height = ground.height\n item.info.stroke = ground.stroke\n item.info.strokeColor = ground.strokeColor\n item.info.strokeOpacity = ground.strokeOpacity\n } else if (item.info.userData.mark) {\n item.info.height = markGraphic.height;\n item.info.fillColor = markGraphic.color;\n item.info.fillOpacity = markGraphic.opacity;\n item.info.stroke = markGraphic.stroke;\n item.info.strokeColor = markGraphic.strokeColor;\n item.info.strokeOpacity = markGraphic.strokeOpacity;\n } else {\n item.info.fillOpacity = graphic.fillOpacity;\n if (this.config.initTransToMark) { \n item.info.height = markGraphic.height;\n item.info.fillColor = markGraphic.color;\n item.info.stroke = markGraphic.stroke;\n item.info.strokeColor = markGraphic.strokeColor;\n item.info.strokeOpacity = markGraphic.strokeOpacity;\n }\n }\n }\n if (!this.config.useFloorCache) {\n this.floorDataMap.clear()\n }\n this.floorDataMap.set(floorKey, data)\n return data\n }\n\n private createFloor(data: GraphicInfo[]) { \n const curFloor = new Floor(this.context)\n if (!data.length) { return { curFloor, graphics: [] } }\n const legacyToGraphicMap = new Map<string, Graphic>()\n const graphics = []\n for (const item of data) {\n if (item.info.group === \"ground\") {\n curFloor.createGround(item.info)\n } else {\n const graphic = curFloor.addGraphic(item.info)\n graphic.userData.data = item\n legacyToGraphicMap.set(item.legacy_id, graphic)\n graphics.push(graphic)\n }\n }\n // curFloor.addShadow()\n curFloor.userData.legacyToGraphicMap = legacyToGraphicMap\n return { curFloor, graphics }\n }\n\n switchFloor({ brand, project, phase, building, floor, ts, resource_type_list }: LoadQuery) {\n const floorKey = this.getFloorKey({ brand, project, phase, building, floor, ts, resource_type_list })\n const curFloorData = this.floorDataMap.get(floorKey)\n this.context.control.removeEventListener(\"change\", this.onControlChange)\n if (curFloorData) {\n const buildingKey = this.getBuildingKey({ brand, project, phase, building })\n this.currentBuildGround = this.buildingGroundMap.get(buildingKey) || null\n const createdFloor = this.createFloor(curFloorData)\n if (createdFloor) {\n this.context.cameraBound.setEnable(false)\n this.context.switchFloor(createdFloor.curFloor)\n // \u8BBE\u7F6Ezoom\n this.context.control.minZoom = 0;\n this.context.control.maxZoom = Infinity;\n this.context.camera.zoom = 1;\n this.context.setAzimuthalAngle(this.config.control.defaultAzimuthal, 0);\n this.context.fitCameraToGround(undefined, 0);\n this.basicZoom = this.context.camera.zoom;\n // \u8BBE\u7F6Ezoom\n this.context.control.minZoom = this.basicZoom;\n this.context.control.maxZoom = this.basicZoom * 25;\n this.context.control.addEventListener(\"change\", this.onControlChange)\n if (this.type === \"3d\") {\n this.context.fitCameraToGround(this.config.defaultPadding, 0, false)\n }\n this.onControlChange()\n this.context.cameraBound.setEnable(true)\n } else {\n console.warn(\"[switchFloor error] [\"+ floor +\"] \u697C\u5C42\u6CA1\u6709\u6570\u636E\")\n }\n } else {\n console.warn(\"[switchFloor error] \u6CA1\u6709\u8FD9\u4E2A\u697C\u5C42\uFF0C\u8BF7\u5148\u8C03\u7528load\u65B9\u6CD5\u52A0\u8F7D\u697C\u5C42\")\n }\n }\n\n onControlChange = () => {\n const { camera: { zoom } } = this.context\n if (zoom !== this.prevCameraZoom) {\n this.dispatchEvent({\n type: \"zoom-change\",\n basicZoom: this.basicZoom,\n cameraZoom: this.context.camera.zoom\n })\n this.prevCameraZoom = zoom\n }\n }\n\n // \u6276\u68AF\n addModel(graphic: Graphic, options: ModelOptions) { \n // \u6839\u636E\u6700\u957F\u8FB9\uFF0C\u83B7\u53D6\u6276\u68AF\u7684\u65B9\u5411\n if (graphic.options.geometry.type === \"polygon\") {\n // \u6839\u636E\u65B9\u5411\u6E32\u67D3\u6A21\u578B\n const model = this.context.currentFloor?.addModel({\n ...options,\n position: graphic.getPosition().setZ(0.1),\n id: graphic.options.id\n })\n if (model) {\n const { facilityAngle = 0, facilityXScale = 1, facilityYScale = 1 } = graphic.options.userData\n model.rotateZ((180 - facilityAngle) / 180 * Math.PI)\n model.scale.set(facilityXScale, facilityYScale, 1)\n }\n }\n }\n\n addHeatmap(data: HeatmapDataParam) {\n return this.context.currentFloor?.addHeatmap(data)\n }\n\n getLegacyToGraphicMap(): Map<string, Graphic> {\n return this.context.currentFloor?.userData.legacyToGraphicMap || new Map()\n }\n\n /**\n * \u83B7\u53D6\u5F53\u524D\u697C\u5C42\u5168\u90E8\u7684graphic\n * @returns \n */\n getFloorAllGraphics(): Graphic[] {\n return this.context.currentFloor?.graphicLayer.children.filter(item => item instanceof Graphic) as Graphic[] || []\n }\n\n createGraphicPoi(graphic: Graphic, options: PoiOptionsParam) { \n if (this.context.currentFloor) {\n if (options.id === undefined) {\n options.id = graphic.options.id\n }\n const position = graphic.getCenter()\n const poi = this.context.currentFloor.addPoi({\n ...options,\n position: { ...position, z: position.z + graphic.options.height / 2 }\n })\n return poi\n }\n return null\n }\n\n removeHeatMap() {\n this.context.currentFloor?.removeHeatMap()\n }\n\n /**\n * \u79FB\u52A8\u76F8\u673A\u4F4D\u7F6E\u8BA9\u9009\u4E2D\u7684\u5143\u7D20\u5C45\u4E2D\u663E\u793A\n * @param ele { Graphic | Poi }\n * @param duration\n */\n translateElementToCenter(ele: { getPosition: () => Vector3 }, duration: number = 500) {\n const position = ele.getPosition()\n return this.context.setCameraPosition(position, duration);\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 async translateElementToCenterX(ele: { getPosition: () => Vector3 }, duration: number = 500) {\n const { y, z } = this.context.control.target\n const position = ele.getPosition()\n position.setY(y)\n position.setZ(z)\n await 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: MapType, duration = 500) {\n this.type = type;\n if (type === \"2d\") {\n return this.context.setPolarAngle(MapTypePolar.D2, duration);\n } else {\n return this.context.setPolarAngle(MapTypePolar.D3, duration);\n }\n }\n\n async resetView(duration = 300) { \n const time = duration / 3\n await this.context.setAzimuthalAngle(this.config.control.defaultAzimuthal, time)\n await this.changeMapType(this.type, time)\n await this.context.fitCameraToGround(this.config.defaultPadding, time, false)\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 if (this.config.resizeObserver) {\n const observe = new ResizeObserver(debounce(this.resize, 5))\n observe.observe(this.container)\n this.observe = observe\n }\n }\n\n unRegistryEvent() {\n window.removeEventListener(\"keydown\", this.onKeydown);\n window.removeEventListener(\"keyup\", this.onKeyUp);\n this.observe?.disconnect()\n this.observe = null;\n }\n\n /**\n * \u914D\u7F6E\u5750\u6807\u5B9A\u70B9 2D/3D\u7EBF\u6027\u5207\u6362\u7684\u5FEB\u6377\u952E\n * @param key\n */\n configurePolarShortcutKeys(keys: string[]) {\n this.polarKeys = keys;\n }\n\n configureAzimuthalShortcutKeys(keys: string[]) {\n this.azimuthalKeys = keys;\n }\n\n rotateMap(radius = 0.1) {\n const azimuthal = this.context.control.getAzimuthalAngle();\n this.context.control.maxAzimuthAngle = azimuthal + radius;\n this.context.control.minAzimuthAngle = azimuthal + radius;\n this.context.control.update()\n }\n\n /**\n * \u6D4B\u91CF\u8DDD\u79BB\n * @returns \n */\n async measureDistance() { \n this.cancelDistance()\n return new Promise((resolve, reject) => { \n this.changeMapType('2d', 0)\n this.context.control.enableRotate = false; // \u6D4B\u91CF\u53EA\u80FD\u57282d\u4E2D\u8FDB\u884C\n this.svgLine = new SvgLine(this.context)\n const dispose = this.svgLine.dispose.bind(this.svgLine)\n this.svgLine.dispose = function () {\n dispose();\n reject(\"cancel\")\n }\n this.svgLine.addEventListener(\"distance\", ({ distance }) => {\n resolve(distance)\n })\n }) \n }\n\n /**\n * \u53D6\u6D88\u6D4B\u91CF\u957F\u5EA6\n */\n cancelDistance() {\n if (this.svgLine) {\n this.svgLine.dispose()\n this.svgLine = undefined;\n this.context.control.enableRotate = true;\n }\n }\n\n /**\n * \u6D4B\u91CF\u9762\u79EF\n */\n measureArea() { \n this.cancelArea()\n return new Promise((resolve, reject) => {\n this.changeMapType('2d', 0)\n this.context.control.enableRotate = false; // \u6D4B\u91CF\u53EA\u80FD\u57282d\u4E2D\u8FDB\u884C\n this.svgPolygon = new SvgPolygon(this.context)\n const dispose = this.svgPolygon.dispose.bind(this.svgPolygon)\n this.svgPolygon.dispose = function () {\n dispose();\n reject(\"cancel\")\n }\n this.svgPolygon.addEventListener(\"area\", ({ area }) => {\n resolve(area)\n })\n })\n }\n\n /**\n * \u53D6\u6D88\u6D4B\u91CF\u9762\u79EF\n */\n cancelArea() {\n if (this.svgPolygon) {\n this.svgPolygon.dispose()\n this.svgPolygon = undefined\n this.context.control.enableRotate = true;\n }\n }\n\n /**\n * \u6839\u636EnodeId \u83B7\u53D6graphic\n */\n getGraphicByNodeId(nodeId: string) {\n return this.context.currentFloor?.graphicLayer.getGraphicByNodeId(nodeId) || null\n }\n\n deleteGraphic(graphic: Graphic) {\n this.context.currentFloor?.graphicLayer.removeGraphic(graphic)\n }\n\n createGraphicByOptions(options: GraphicOptions) {\n if (!options.transformToBuildingGround) {\n if (this.currentBuildGround) {\n const center = getCenter((this.currentBuildGround.info.geometry as PolygonGeometry).cds[0])\n if (options.geometry.type === \"polygon\") {\n options.geometry.coords = JSON.parse(JSON.stringify(options.geometry.cds))\n options.geometry.coords.map(cds => {\n if (Array.isArray(cds)) {\n cds.forEach(coord => {\n coord[0] -= center[0]\n coord[1] -= center[1]\n })\n }\n })\n } else {\n // point\n const [x, y] = options.geometry.cds\n options.geometry.coords = [x - center[0], y - center[1]]\n }\n }\n }\n return this.context.currentFloor?.graphicLayer.createGraphic(options)\n }\n\n removePoiById(id: string) { \n return this.context.currentFloor?.poiLayer.removePoiById(id)\n }\n\n getPoiById(id: string) { \n return this.context.currentFloor?.poiLayer.getPoiById(id)\n }\n\n getPois() { \n return (this.context.currentFloor?.poiLayer.pois || []).filter(item => !item.options.built_in)\n }\n\n clearPoi() {\n if (this.context.currentFloor) { \n this.context.currentFloor.poiLayer.clear()\n }\n }\n\n removeSelectGraphic(graphic: Graphic) { \n this.context.selection.remove(graphic)\n }\n\n resize = () => { \n this.context.cameraBound.setEnable(false)\n this.context.onWindowResize();\n const azimuthal = this.context.control.getAzimuthalAngle();\n const zoom = this.context.camera.zoom;\n // \u8BBE\u7F6Ezoom\n this.context.control.minZoom = 0;\n this.context.control.maxZoom = Infinity;\n this.context.camera.zoom = 1;\n this.context.setAzimuthalAngle(0, 0);\n const basicZoom = this.context.getFitCameraToGroundZoom(undefined, 0);\n this.basicZoom = basicZoom || 0;\n // \u8BBE\u7F6Ezoom\n this.context.control.minZoom = this.basicZoom;\n this.context.control.maxZoom = this.basicZoom * 25;\n this.context.camera.zoom = zoom;\n this.context.control.addEventListener(\"change\", this.onControlChange)\n this.context.setAzimuthalAngle(azimuthal, 0);\n this.context.cameraBound.setEnable(true)\n }\n\n dispose() {\n this.context.dispose();\n this.floorDataMap.clear();\n this.buildingGroundMap.clear();\n clearTextTexture();\n clearCanvas();\n disposeLoader();\n this.unRegistryEvent();\n }\n}\n", "type Fn = (...arg: any) => any\n\n/**\n * \u4EFB\u52A1\u7BA1\u7406\u5668\n * \u5728\u7C7B\u9500\u6BC1\u7684\u65F6\u5019\uFF0C\u8981\u6E05\u9664\u6240\u6709\u7684\u5F02\u6B65\u5B9A\u65F6\u5668\n */\nexport class Timer { \n tasks = {\n requestAnimation: new Set<number>(),\n timeout: new Set<number>(),\n interval: new Set<number>()\n }\n\n requestAnimationFrame(fn: Fn): number { \n const timer = window.requestAnimationFrame(() => {\n this.tasks.requestAnimation.delete(timer)\n fn()\n })\n this.tasks.requestAnimation.add(timer)\n return timer\n }\n\n cancelAnimationFrame(timer: number) { \n this.tasks.requestAnimation.delete(timer)\n window.cancelAnimationFrame(timer)\n }\n\n setTimeout(fn: Fn, wait: number): number { \n const timer = window.setTimeout(() => {\n this.tasks.timeout.delete(timer)\n fn()\n }, wait)\n this.tasks.timeout.add(timer)\n return timer\n }\n\n clearTimeout(timer: number) {\n this.tasks.timeout.delete(timer)\n window.clearTimeout(timer)\n }\n\n setInterval(fn: Fn, wait: number): number { \n const timer = window.setInterval(() => {\n this.tasks.interval.delete(timer)\n fn()\n }, wait)\n this.tasks.interval.add(timer)\n return timer\n }\n\n clearInterval(timer: number) {\n this.tasks.interval.delete(timer)\n window.clearInterval(timer)\n }\n\n dispose() { \n this.tasks.requestAnimation.forEach(timer => {\n window.cancelAnimationFrame(timer)\n })\n this.tasks.requestAnimation.clear()\n this.tasks.timeout.forEach(timer => {\n window.clearTimeout(timer)\n })\n this.tasks.timeout.clear()\n this.tasks.interval.forEach(timer => {\n window.clearInterval(timer)\n }) \n this.tasks.interval.clear()\n }\n}", "import { Coordinate } from 'src/types'\nimport {\n Scene, WebGLRenderer, OrthographicCamera, HemisphereLight, Shape, \n PCFSoftShadowMap, Group, Color, DirectionalLight, AmbientLight, Path, Vector2\n} from 'three'\nimport { MapControls } from 'three/examples/jsm/controls/MapControls'\n\nexport function initScene() {\n const scene = new Scene()\n scene.background = new Color(0xffffff)\n return scene\n}\n\nexport function initRenderer() {\n const renderer = new WebGLRenderer({\n antialias: true,\n // logarithmicDepthBuffer: true,\n // alpha: false,\n // premultipliedAlpha: false\n })\n renderer.autoClear = true\n renderer.setClearAlpha(1);\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, 0xffffff, 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, 2.6);\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 control.zoomSpeed = 2\n return control\n}\n\nexport function initShape(path: Coordinate[], holePath: Coordinate[][] = []) { \n const shape = new Shape(path.map(item => new Vector2(...item)));\n if (holePath.length) {\n holePath.forEach(cur => {\n var hole = new Path(cur.map(item => new Vector2(...item)));\n shape.holes.push(hole);\n })\n }\n return shape\n}\n\nexport function initDirectionalLight(color = 0xffffff, intensity = 1) {\n const directionalLight = new DirectionalLight(color, intensity);\n directionalLight.castShadow = true;\n directionalLight.shadow.radius = 8;\n directionalLight.shadow.bias = -0.001;\n directionalLight.shadow.mapSize.set(256, 256);\n directionalLight.shadow.camera.left = -200;\n directionalLight.shadow.camera.right = 200;\n directionalLight.shadow.camera.top = 200;\n directionalLight.shadow.camera.bottom = -200;\n return directionalLight\n}", "import { Object3D, Mesh, Light } from 'three'\n\nexport function dispose(o: Object3D, recursive?: boolean): void {\n if (recursive && o.children && o.children.length) {\n o.children.forEach((child) => {\n dispose(child, recursive);\n });\n }\n if ((o as Mesh).isMesh) {\n const m = o as Mesh;\n if (m.geometry) m.geometry.dispose();\n if (m.material) {\n if (Array.isArray(m.material)) {\n m.material.forEach((mat) => {\n mat.dispose();\n });\n } else {\n m.material.dispose();\n }\n }\n }\n if ((o as Light).isLight) {\n (o as Light).dispose?.()\n }\n}", "export function hasChinese(str:string) {\n return /[\\u4E00-\\u9FA5]+/g.test(str);\n}", "import { hasChinese } from './rules'\nimport { DataTexture, RGBAFormat, LinearFilter } from 'three'\n\nconst urlTextureMap = new Map()\nconst textTextureMap = new Map<string, DataTexture>()\n\nexport function initCanvas() {\n const canvas = document.createElement('canvas');\n canvas.width = 1024;\n canvas.height = 64;\n const ctx = canvas.getContext('2d', {\n willReadFrequently: true,\n }) as CanvasRenderingContext2D;\n ctx.font = '54px sans-serif';\n ctx.textBaseline = 'hanging';\n ctx.lineWidth = 12;\n ctx.fillStyle = 'rgba(0,0,0,1)';\n ctx.strokeStyle = 'white';\n return { canvas, ctx }\n}\n\nlet canvas: HTMLCanvasElement;\nlet ctx: CanvasRenderingContext2D;\n\nexport function createCanvas() {\n if (!canvas) {\n const { canvas: c, ctx: t } = initCanvas()\n canvas = c;\n ctx = t;\n }\n}\n\nexport function getTextureByText(text: string): DataTexture {\n if (textTextureMap.has(text)) {\n return textTextureMap.get(text)!\n }\n createCanvas()\n\n ctx.clearRect(0, 0, 1024, 64);\n const y = hasChinese(text) ? 4 : 8;\n ctx.strokeText(text, 2, y);\n ctx.fillText(text, 2, y);\n\n let width = Math.ceil(ctx.measureText(text).width);\n width = width % 2 === 0 ? width : width + 1;\n width += 2;\n const imageData = ctx.getImageData(0, 0, width, 64);\n const texture = new DataTexture(\n Uint8Array.from(imageData.data),\n width,\n 64,\n RGBAFormat,\n );\n texture.flipY = true;\n texture.minFilter = LinearFilter;\n texture.magFilter = LinearFilter;\n\n textTextureMap.set(text, texture);\n return texture;\n}\n\nexport function clearTextTexture() {\n textTextureMap.clear()\n}\n\nexport function clearCanvas() {\n ctx = null as unknown as CanvasRenderingContext2D;\n canvas = null as unknown as HTMLCanvasElement;\n}", "import { Coordinate } from 'src/types';\nimport { Vector3, Camera } from 'three';\nimport { point, featureCollection, center } from '@turf/turf'\n\n/**\n * 3D\u5750\u6807\u8F6C\u5C4F\u5E55\u5750\u6807\n * @param vector \n * @param camera \n * @param w container\u7684\u5BBD\n * @param h container\u7684\u9AD8\n * @returns \n */\nexport function vector3ToDevice(vector: Vector3, camera: Camera, w: number, h: number) {\n const _vector = vector.clone().project(camera);//\u901A\u8FC7\u4E16\u754C\u5750\u6807\u83B7\u53D6\u8F6C\u6807\u51C6\u8BBE\u5907\u5750\u6807\n const _w = w / 2;\n const _h = h / 2;\n const x = Math.round(_vector.x * _w + _w);//\u6807\u51C6\u8BBE\u5907\u5750\u6807\u8F6C\u5C4F\u5E55\u5750\u6807\n const y = Math.round(-_vector.y * _h + _h);\n return { x, y }\n}\n\n\n/**\n * \u83B7\u53D6\u591A\u53D8\u5F62\u7684\u4E2D\u5FC3\u70B9\n * @param coordinates \n */\nexport function getCenter(coordinates: Coordinate[]) {\n const features = featureCollection(coordinates.map(item => point(item)))\n const cent = center(features)\n return cent.geometry.coordinates\n}\n\ntype Position = {\n x: number,\n y: number\n}\nexport function isContain(point: Position, start: Position, end: Position) {\n // \u5224\u65AD point\u662F\u5426\u5728 start \u548Cend\u5F62\u6210\u7684\u77E9\u5F62\u4E2D\n return point.x >= start.x &&\n point.x <= end.x &&\n point.y >= start.y &&\n point.y <= end.y \n}\n\n/**\n * \u83B7\u53D6\u6700\u957F\u8FB9\u7684\u65B9\u5411\n * @param cds \n */\nexport function getLongestSideDir(cds: Coordinate[]) { \n let maxDistance = 0;\n let dir = new Vector3();\n for (let i = 1; i < cds.length; i++) { \n const point_0 = new Vector3(cds[i - 1][0], cds[i - 1][1], 0);\n const point_1 = new Vector3(cds[i][0], cds[i][1], 0);\n const distance = point_1.distanceTo(point_0)\n if (distance > maxDistance) {\n maxDistance = distance;\n dir = point_1.clone().sub(point_0).normalize();\n }\n }\n return dir;\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 oldValue = Reflect.get(target, p, receiver)\n const res = Reflect.set(target, p, newValue, receiver)\n if (oldValue !== newValue) {\n master.dispatchEvent({ type: `change-${p as Extract<keyof T, string>}`, value: newValue } as any)\n }\n return res\n }\n })\n}", "/**\n * \u53EF\u4EE5\u8BBE\u7F6E\u8D85\u65F6\u65F6\u95F4\u7684promise\n * @param promise \n * @param timeout \n * @returns \n */\nexport function timeoutPromise<T>(promise: Promise<T>, timeout: number): Promise<T> {\n return Promise.race([\n promise,\n new Promise<T>((resolve, reject) => {\n setTimeout(() => reject(new Error(\"Promise timeout\")), timeout);\n })\n ]);\n}", "export function createSvgElement(tag: string) {\n return document.createElementNS('http://www.w3.org/2000/svg', tag); \n}\n\n/**\n * \u521B\u5EFAsvg\n */\nexport function createSvg(w: string, h: string) {\n const svg = createSvgElement(\"svg\");\n svg.setAttribute(\"width\", w)\n svg.setAttribute(\"height\", h)\n svg.style.cssText = \"position: absolute; left: 0; top: 0; pointer-events: none;\"\n return svg;\n}\n\n/**\n * \u521B\u5EFA\u5706\u70B9\n * @param radius \n */\nexport function createCircle(radius = \"2\", fill: string) {\n const circle = createSvgElement(\"circle\");\n circle.setAttribute(\"r\", radius)\n circle.setAttribute(\"fill\", fill)\n return circle\n}\n\n/**\n * \u521B\u5EFA\u7EBF\n * @param stroke \n */\nexport function createLine(stroke: string) {\n const line = createSvgElement(\"line\")\n line.setAttribute(\"stroke\", stroke)\n return line\n}\n\n/**\n * \u521B\u5EFA\u77E9\u5F62\n * @param stroke \n * @returns \n */\nexport function createRect(stroke: string, fill: string) {\n const rect = createSvgElement(\"rect\")\n rect.setAttribute(\"stroke\", stroke)\n rect.setAttribute(\"fill\", fill)\n return rect\n}\n\nexport function setCirclePosition(circle: SVGElement, x: number, y: number) {\n circle.setAttribute('cx', `${x}`)\n circle.setAttribute('cy', `${y}`)\n}\n\ntype Position = { x: number; y: number }\n\nexport function setLineStartEnd(line: SVGElement, start?: Position, end?: Position) {\n if (start) { \n line.setAttribute(\"x1\", `${start.x}`)\n line.setAttribute(\"y1\", `${start.y}`)\n }\n if (end) {\n line.setAttribute(\"x2\", `${end.x}`)\n line.setAttribute(\"y2\", `${end.y}`)\n }\n}\n\nexport function setRectPosition(rect: SVGElement, x: number, y: number, w: number, h: number) {\n rect.setAttribute('x', `${x}`)\n rect.setAttribute('y', `${y}`)\n rect.setAttribute('width', `${w}`)\n rect.setAttribute('height', `${h}`)\n}", "export function sleepOnePromise() {\n return Promise.resolve()\n}\n\nexport function sleepOneRf() { \n return new Promise(resolve => {\n requestAnimationFrame(resolve)\n })\n}", "export function strToNumber(str: string) {\n return parseInt(str.replace(\"#\", \"0x\"), 16);\n}\n\n/**\n * \u7ED9\u989C\u8272\u52A0\u4E0A\u900F\u660E\u5EA6\n * @param hexColor\n * @param alpha\n * @returns\n */\nexport function addAlphaToHexColor(hexColor: string, alpha: number) {\n // \u5C0616\u8FDB\u5236\u989C\u8272\u503C\u8F6C\u6362\u4E3ARGB\u6570\u503C\n let r = parseInt(hexColor.substring(1, 3), 16);\n let g = parseInt(hexColor.substring(3, 5), 16);\n let b = parseInt(hexColor.substring(5, 7), 16);\n\n // \u8BA1\u7B97\u65B0\u7684RGB\u6570\u503C\n let newR = Math.round(r * alpha);\n let newG = Math.round(g * alpha);\n let newB = Math.round(b * alpha);\n\n // \u5C06\u65B0\u7684RGB\u6570\u503C\u8F6C\u6362\u4E3A16\u8FDB\u5236\u683C\u5F0F\n let newHexColor = `#${(1 << 24 | newR << 16 | newG << 8 | newB).toString(16).slice(1)}`;\n\n return newHexColor;\n}\n\nexport function darkenColor(hexColor: string, factor = 0.85) {\n let r: number;\n let g: number;\n let b: number;\n if (hexColor.startsWith(\"#\")) {\n // \u5C06\u5341\u516D\u8FDB\u5236\u989C\u8272\u8F6C\u6362\u4E3ARGB\n r = parseInt(hexColor.substring(1, 3), 16);\n g = parseInt(hexColor.substring(3, 5), 16);\n b = parseInt(hexColor.substring(5, 7), 16);\n } else { \n // rgb\u683C\u5F0F\u7684\n let numbers = hexColor.slice(4, -1).split(\",\");\n r = parseInt(numbers[0].trim())\n g = parseInt(numbers[1].trim())\n b = parseInt(numbers[2].trim())\n }\n // \u8BA1\u7B97\u6697\u70B9\u989C\u8272\n r = Math.min(Math.floor(r * factor), 255);\n g = Math.min(Math.floor(g * factor), 255);\n b = Math.min(Math.floor(b * factor), 255);\n\n\n // \u5C06RGB\u989C\u8272\u8F6C\u6362\u56DE\u5341\u516D\u8FDB\u5236\n let darkHexColor = \"#\" + ((1 << 24) + (r << 16) + (g << 8) + b).toString(16).slice(1);\n\n return darkHexColor;\n}\n", "import { Object3D, Scene, Mesh, MeshBasicMaterial } from 'three'\nimport { GLTF, GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader'\n\nfunction createLoader() { \n const loader = new GLTFLoader()\n return loader\n}\n\nlet loader: GLTFLoader | null = null\nlet modelMap = new Map<string, Promise<GLTF>>()\n\n/**\n * \u52A0\u8F7D\u6A21\u578B\n * @param url \n * @returns \n */\nexport function loadModel(url: string): Promise<GLTF> { \n if (modelMap.has(url)) {\n const gltf = modelMap.get(url)!.then(gltf => { \n gltf.scene = gltf.scene.clone()\n return gltf\n })\n }\n if (!loader) {\n loader = createLoader()\n }\n const p = new Promise<GLTF>((resolve, reject) => { \n loader!.load(url, gltf => {\n resolve(gltf)\n }, undefined, reject)\n })\n modelMap.set(url, p)\n return p.then(gltf => { \n gltf.scene = gltf.scene.clone()\n return gltf\n })\n}\n\nexport function disposeLoader() { \n loader = null\n modelMap.clear()\n}", "export const isMac = navigator.userAgent.toUpperCase().indexOf('MAC') >= 0;\n", "import { isMac } from \"./os\";\n\nexport function isControl(key: string) { \n if (isMac) {\n return key === \"Meta\"\n }\n return key === \"Control\"\n}", "import { MapControls } from \"three/examples/jsm/controls/MapControls\";\nimport {\n Timer,\n initCamera,\n initRenderer,\n initScene,\n initLight,\n initControl,\n dispose,\n vector3ToDevice,\n timeoutPromise,\n} from \"./utils\";\nimport {\n EventDispatcher,\n OrthographicCamera,\n Light,\n Box2,\n Vector3,\n Vector2,\n Raycaster,\n Object3D,\n Box3,\n Color,\n AmbientLight,\n} from \"three\";\nimport { Graphic, Poi, Floor } from \"./elements\";\nimport { Group as TweenGroup, Tween } from \"@tweenjs/tween.js\";\nimport { Config } from \"./config\";\nimport { Selection } from \"./operations/selection/selection\";\nimport { HoverHelper } from \"./operations\";\nimport { MaterialFactory } from \"./factory\";\nimport { CameraBound } from \"./utils/camera-bound\";\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 e: PointerEvent;\n graphics: Graphic[];\n pois: Poi[];\n position: Vector3 | null;\n };\n 'pointer-move': {\n e: PointerEvent;\n graphics: Graphic[];\n pois: Poi[];\n position: Vector3 | null;\n },\n 'change-ratio': {\n px: number;\n },\n \"select-graphic\": {\n graphics: Graphic[],\n isMultipleSelect: boolean,\n },\n \"hover\": {\n graphics: Graphic[];\n },\n \"control-change\": {},\n \"resize\": {\n width: number;\n height: 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 selection: Selection;\n\n hoverHelper: HoverHelper;\n \n private basicRatio?: number; // zoom=1\u7684\u65F6\u5019\uFF0C100M\u5BF9\u5E94\u7684\u50CF\u7D20\u4E2A\u6570\n\n public materialFactory!: MaterialFactory;\n\n cameraBound!: CameraBound;\n\n clientSize = {\n width: 0,\n height: 0,\n x: 0,\n y: 0\n }\n\n constructor(public container: HTMLElement, public config: Config) {\n super();\n this.container.style.position = \"relative\";\n this.container.style.overflow = \"hidden\";\n this.init();\n this.selection = new Selection(this);\n this.hoverHelper = new HoverHelper(this);\n this.materialFactory = new MaterialFactory(this);\n this.resizeClientSize()\n this.registryEvent();\n }\n\n resizeClientSize() { \n const { x, y, width, height } = this.container.getBoundingClientRect()\n this.clientSize = {\n width: width || this.container.clientWidth,\n height: height || this.container.clientHeight,\n x,\n y\n }\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.control.maxPolarAngle = this.config.control.maxPolar;\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 this.dispatchEvent({ type: 'control-change' })\n });\n this.cameraBound = new CameraBound(this);\n }\n\n /**\n * \u83B7\u53D6\u4E24\u4E2A\u70B9\u4E4B\u95F4\u7684\u50CF\u7D20\u6570\n */\n getRatio(point1 = new Vector3(0, 0, 0), point2 = new Vector3(100, 0, 0)) {\n const { clientWidth, clientHeight } = this.container\n const device1 = vector3ToDevice(point1, this.camera, clientWidth, clientHeight)\n const device2 = vector3ToDevice(point2, this.camera, clientWidth, clientHeight)\n return Math.ceil(Math.sqrt((device2.x - device1.x) ** 2 + (device2.y - device1.y) ** 2))\n }\n\n changeAmbientLightColor(color: string | number) {\n this.lights.children.forEach((item) => {\n if (item instanceof AmbientLight) {\n item.color = new Color(color);\n }\n });\n }\n\n switchFloor(floor: Floor) {\n if (this.currentFloor) {\n this.scene.remove(this.currentFloor)\n this.currentFloor.dispose()\n }\n this.currentFloor = floor\n this.scene.add(floor)\n // \u4FEE\u6539\u706F\u5149\u7684\u4F4D\u7F6E\n const position = floor.getCenter()\n if (position) {\n this.lights.position.x = position.x\n this.lights.position.y = position.y\n }\n }\n\n onWindowResize = () => {\n const { container, camera, renderer } = this;\n let { clientWidth: w, clientHeight: h } = container;\n w = Math.max(1, w);\n h = Math.max(1, h);\n camera.left = -w / 2;\n camera.right = w / 2;\n camera.top = h / 2;\n camera.bottom = -h / 2;\n camera.updateProjectionMatrix();\n renderer.setSize(w, h);\n this.resizeClientSize()\n this.dispatchEvent({ type:'resize', width: w, height: h })\n };\n\n onClick = (e: MouseEvent) => {\n const { graphics, position } = this.getGraphicsByDeviceXy(e.offsetX, e.offsetY);\n if (graphics.length) {\n this.dispatchEvent({\n type: \"graphic-click\",\n graphics: graphics,\n position\n });\n }\n const pois = this.getPoisByDeviceXy(e.offsetX, e.offsetY);\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.clientSize.width) * 2 - 1;\n point.y = (y / this.clientSize.height) * -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.offsetX, e.offsetY) as Poi[];\n this.dispatchEvent({ type: 'pointer-over', e, 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.offsetX, e.offsetY) as Poi[];\n // console.log(graphics, position, e.offsetX, e.offsetY)\n this.dispatchEvent({ type: 'pointer-move', e, graphics, pois, position })\n }\n\n onPointerleave = () => { \n this.dispatchEvent({ type: \"pointer-level\" })\n }\n\n onSelectionSelect = ({ graphics, isMultipleSelect }: {graphics: Graphic[], isMultipleSelect: boolean}) => { \n this.dispatchEvent({ type: \"select-graphic\", graphics, isMultipleSelect })\n }\n\n onHoverChange = ({ graphics }: { graphics: Graphic[] }) => { \n this.dispatchEvent({ type: \"hover\", graphics })\n }\n\n registryEvent() {\n window.addEventListener(\"resize\", this.onWindowResize);\n this.container.addEventListener(\"click\", this.onClick);\n this.container.addEventListener(\"pointerover\", this.onPointerover)\n this.container.addEventListener(\"pointermove\", this.onPointermove)\n this.container.addEventListener(\"pointerleave\", this.onPointerleave)\n this.selection.addEventListener(\"select\", this.onSelectionSelect)\n this.hoverHelper.addEventListener(\"hover-change\", this.onHoverChange)\n }\n\n unRegistryEvent() {\n window.removeEventListener(\"resize\", this.onWindowResize);\n this.container.removeEventListener(\"click\", this.onClick);\n this.container.removeEventListener(\"pointerover\", this.onPointerover)\n this.container.removeEventListener(\"pointermove\", this.onPointermove)\n this.container.removeEventListener(\"pointerleave\", this.onPointerleave)\n this.selection.removeEventListener(\"select\", this.onSelectionSelect)\n this.hoverHelper.removeEventListener(\"hover-change\", this.onHoverChange)\n }\n\n /**\n * \u8BBE\u7F6E\u7EB5\u5411\u65CB\u8F6C\u89D2\u5EA6\n * @param polar \u5F27\u5EA6\n */\n public setPolarAngle(polar: number, duration = 500) {\n if (duration === 0) {\n this.control.maxPolarAngle = polar;\n this.control.minPolarAngle = polar;\n this.control.update();\n this.control.maxPolarAngle = this.config.control.maxPolar;\n this.control.minPolarAngle = 0;\n return Promise.resolve();\n }\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.control.maxPolarAngle = this.config.control.maxPolar;\n this.control.minPolarAngle = 0;\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 /**\n * \u8BBE\u7F6E\u6A2A\u5411\u65CB\u8F6C\u89D2\u5EA6\n * @param azimuthal \u5F27\u5EA6\n */\n public setAzimuthalAngle(azimuthal: number, duration = 500) {\n if (duration === 0) {\n this.control.maxAzimuthAngle = azimuthal;\n this.control.minAzimuthAngle = azimuthal;\n this.control.update();\n this.control.maxAzimuthAngle = Infinity;\n this.control.minAzimuthAngle = Infinity;\n return\n }\n return timeoutPromise(\n new Promise((resolve) => {\n const start = { azimuthal: this.control.getAzimuthalAngle() };\n const end = { azimuthal };\n const tween = new Tween(start, this.tweenGroup)\n .to(end, duration)\n .onUpdate(() => {\n this.control.maxAzimuthAngle = start.azimuthal;\n this.control.minAzimuthAngle = start.azimuthal;\n this.control.update();\n })\n .onComplete(() => {\n this.control.enabled = true;\n this.control.maxAzimuthAngle = Infinity;\n this.control.minAzimuthAngle = Infinity;\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 const lookAtVector = this.getCameraLookAt();\n const start = {\n zoom: this.camera.zoom,\n target: this.control.target.clone(),\n };\n if (!duration) { \n this.camera.position.copy(center.clone().sub(lookAtVector));\n this.control.target.copy(center);\n this.camera.zoom = zoom;\n this.control.update()\n return\n }\n return timeoutPromise(\n new Promise((resolve) => {\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 getFitCameraToObjectZoom(\n object: Object3D,\n padding: [number, number, number, number] = [20, 20, 20, 20],\n duration = 500,\n force2DView = true, // \u5F3A\u5236\u8BA1\u7B972d\u89C6\u89D2\u7684\u5927\u5C0F\n ) { \n const [top, right, bottom, left] = padding;\n const { clientSize: { width, height } } = this;\n const polar = this.control.getPolarAngle()\n if (force2DView) {\n // \u83B7\u53D6\u57282D\u89C6\u56FE\u4E0B\u7684\u5927\u5C0F\n this.setPolarAngle(0, 0)\n }\n // \u83B7\u53D6\u7269\u4F53\u7684\u4E09\u7EF4\u76D2\u5B50\u5750\u6807\n const boundingBox = new Box3().setFromObject(object);\n this.setPolarAngle(polar, 0)\n const { max, min } = boundingBox;\n // \u9700\u8981\u83B7\u53D6\u5230box\u76844\u4E2A\u70B9\u7684\u5750\u6807\n const leftTop = new Vector3(min.x, max.y, min.z);\n const rightTop = new Vector3(max.x, max.y, min.z);\n const rightBottom = new Vector3(max.x, min.y, max.z);\n const leftBottom = new Vector3(min.x, min.y, max.z);\n // \u5750\u6807\u8F6C\u6210\u5C4F\u5E55\u5750\u6807\u5E76\u8BA1\u7B97\u51FA\u5360\u7528\u5C4F\u5E55\u5750\u6807\u7684\u5927\u5C0F\n const leftTop2d = vector3ToDevice(leftTop, this.camera, width, height);\n const rightTop2d = vector3ToDevice(rightTop, this.camera, width, height);\n const leftBottom2d = vector3ToDevice(leftBottom, this.camera, width, height);\n const rightBottom2d = vector3ToDevice(rightBottom, this.camera, width, height);\n const boundingBox2d = new Box2().setFromPoints([\n new Vector2(leftTop2d.x, leftTop2d.y),\n new Vector2(rightTop2d.x, rightTop2d.y),\n new Vector2(leftBottom2d.x, leftBottom2d.y),\n new Vector2(rightBottom2d.x, rightBottom2d.y),\n ]);\n const size = boundingBox2d.getSize(new Vector2());\n\n // \u8BA1\u7B97\u5728\u5C4F\u5E55\u4E0Ax,y\u65B9\u5411\u4E0A\u9700\u8981\u8C03\u6574\u7684\u500D\u6570\n const xScale = (width - right - left) / size.x;\n const yScale = (height - 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, 0);\n return { zoom: scale * this.camera.zoom, center };\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 force2DView = true, // \u5F3A\u5236\u8BA1\u7B972d\u89C6\u89D2\u7684\u5927\u5C0F\n ) {\n const { zoom, center } = this.getFitCameraToObjectZoom(object, padding, duration, force2DView)\n return this.setZoom(zoom, center, duration);\n }\n\n getFitCameraToGroundZoom(padding: [number, number, number, number] = [20, 20, 20, 20], duration = 500, force2DView = true) {\n if (this.currentFloor && this.currentFloor.hasElement) {\n return this.getFitCameraToObjectZoom(this.currentFloor.groundUpper, padding, duration, force2DView).zoom;\n }\n }\n\n fitCameraToGround(padding: [number, number, number, number] = [20, 20, 20, 20], duration = 500, force2DView = true) { \n if (this.currentFloor && this.currentFloor.hasElement) {\n return this.fitCameraToObject(this.currentFloor.groundUpper, padding, duration, force2DView);\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.clone().sub(lookAtVector));\n this.control.target.copy(start.clone());\n this.control.update();\n })\n .onComplete(() => {\n this.tweenGroup.remove(tween);\n this.camera.position.copy(start.clone().sub(lookAtVector));\n this.control.target.copy(position.clone());\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.cameraBound.dispose()\n this.selection.dispose()\n this.hoverHelper.dispose()\n this.tweenGroup.getAll().forEach((item) => item.stop());\n this.tweenGroup.removeAll();\n this.unRegistryEvent();\n this.container.removeChild(this.renderer.domElement);\n this.timer.dispose();\n this.renderer.dispose();\n (this.lights.children as Light[]).forEach((light: Light) =>\n light.dispose()\n );\n this.materialFactory.dispose();\n dispose(this.scene);\n }\n}\n", "import { EventDispatcher } from \"three\";\nimport { Context } from \"../../context\";\nimport { Graphic, Poi } from \"../../elements\";\nimport { BoxSelection } from \"./box-selection\";\nimport { isControl, isMac } from \"../../utils\";\n\ninterface SelectionEventMap {\n \"select\": {\n graphics: Graphic[],\n isMultipleSelect: boolean,\n }\n}\n\nexport class Selection extends EventDispatcher<SelectionEventMap> {\n private _list = new Set<Graphic>()\n\n private boxSelection: BoxSelection;\n private prevPanStatus?: boolean;\n private prevRotateStatus?: boolean;\n private downPoint: { x: number, y: number } | null = null\n\n private isMultipleSelect = false;\n\n constructor(private context: Context) {\n super()\n this.boxSelection = new BoxSelection(context)\n this.boxSelection.setEnable(false)\n this.registryEvent()\n }\n\n get list() {\n return this._list\n }\n\n enableBoxSelection() { \n if (this.isMultipleSelect) { return }\n this.isMultipleSelect = true;\n this.boxSelection.setEnable(true)\n this.prevPanStatus = this.context.control.enablePan\n this.prevRotateStatus = this.context.control.enableRotate\n this.context.control.enablePan = false\n this.context.control.enableRotate = false\n }\n\n disableBoxSelection() { \n if (this.isMultipleSelect) { \n this.isMultipleSelect = false;\n this.boxSelection.setEnable(false)\n this.context.control.enablePan = !!this.prevPanStatus\n this.context.control.enableRotate = !!this.prevRotateStatus\n }\n }\n\n onPointerDown = (e: PointerEvent) => {\n this.downPoint = { x: e.offsetX, y: e.offsetY }\n }\n\n onPointerUp = (e: PointerEvent) => {\n if (!this.downPoint) { return }\n const { offsetX, offsetY } = e\n const { x, y } = this.downPoint\n if (Math.sqrt((x - offsetX) ** 2 + (y - offsetY) ** 2) > 3) {\n return\n }\n const { graphics } = this.context.getGraphicsByDeviceXy(offsetX, offsetY)\n const graphicIdSet = new Set(graphics.map(item => item.options.id))\n const pois = this.context.getPoisByDeviceXy(offsetX, offsetY) as Poi[];\n pois.forEach(item => { \n if (!graphicIdSet.has(item.options.id)) {\n const graphic = this.context.currentFloor?.graphicLayer.graphicMap.get(item.options.id) || null\n if (graphic && graphic.options.geometry.type === 'point') { \n graphics.push(graphic)\n graphicIdSet.add(item.options.id)\n }\n }\n })\n if (!(isMac ? e.metaKey : e.ctrlKey)) {\n this._list.clear()\n }\n graphics.forEach(item => this._list.add(item))\n this.selectEnd()\n this.downPoint = null\n }\n\n onPointerOut = (e: PointerEvent) => { \n this.disableBoxSelection()\n }\n\n onKeyDown = (e: KeyboardEvent) => {\n if (isControl(e.key)) {\n this.enableBoxSelection()\n }\n }\n\n onKeyUp = (e: KeyboardEvent) => {\n if (isControl(e.key)) {\n this.disableBoxSelection()\n }\n }\n\n onBoxSelected = ({ list }: { list: Graphic[] }) => { \n this._list.clear()\n list.forEach(item => {\n this._list.add(item)\n })\n this.selectEnd()\n }\n\n selectEnd() {\n this.dispatchEvent({type: \"select\", graphics: [...this._list], isMultipleSelect: this.isMultipleSelect})\n }\n\n registryEvent() {\n this.context.container.addEventListener(\"pointerdown\", this.onPointerDown)\n this.context.container.addEventListener(\"pointerup\", this.onPointerUp)\n this.context.container.addEventListener(\"pointerout\", this.onPointerOut)\n this.context.container.addEventListener(\"pointercancel\", this.onPointerOut)\n window.addEventListener(\"keydown\", this.onKeyDown)\n window.addEventListener(\"keyup\", this.onKeyUp)\n this.boxSelection.addEventListener(\"selected\", this.onBoxSelected)\n }\n\n unRegistryEvent() {\n this.context.container.removeEventListener(\"pointerdown\", this.onPointerDown)\n this.context.container.removeEventListener(\"pointerup\", this.onPointerUp)\n this.context.container.removeEventListener(\"pointerout\", this.onPointerOut)\n this.context.container.removeEventListener(\"pointercancel\", this.onPointerOut)\n window.removeEventListener(\"keydown\", this.onKeyDown)\n window.removeEventListener(\"keyup\", this.onKeyUp)\n this.boxSelection.removeEventListener(\"selected\", this.onBoxSelected)\n }\n\n clear() {\n this._list.clear()\n }\n\n remove(graphic: Graphic) { \n this._list.delete(graphic)\n }\n\n dispose() {\n this.unRegistryEvent()\n }\n}", "import {\n Object3D,\n ExtrudeGeometry,\n Mesh,\n Box3,\n MeshBasicMaterial,\n Raycaster,\n Object3DEventMap,\n Vector3,\n BufferGeometry,\n LineBasicMaterial,\n LineSegments,\n Float32BufferAttribute,\n ShaderMaterial,\n DoubleSide,\n Color,\n } from \"three\";\nimport { initShape, proxyOptions, darkenColor } from \"../utils\";\nimport { GraphicOptions, PolygonGeometry } from \"src/types\";\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\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 strokeWidth: 1, // \u63CF\u8FB9\u5BBD\u5EA6\n doors: [], // \u95E8\u914D\u7F6E\n locked: false,\n visible: true,\n geometry: {\n type: \"polygon\",\n cds: [],\n coords: [],\n curveCpt: [],\n curveIndex: [],\n },\n layerType: \"\",\n zIndex: 0,\n stroke: true,\n deltaHeight: 0,\n userData: {},\n gradualColor: [],\n renderType: \"single\",\n colorFactor: 0.9\n};\n\nexport class Graphic extends Object3D<GraphicEventMap> {\n private geometry!: ExtrudeGeometry;\n\n private material!: MeshBasicMaterial | MeshBasicMaterial[] | ShaderMaterial[] | ShaderMaterial;\n\n public mesh!: Mesh;\n\n private line!: LineSegments;\n\n private lineMaterial?: LineBasicMaterial;\n\n private lineGeometry?: BufferGeometry;\n\n public options: GraphicOptions;\n\n constructor(\n private context: Context,\n options: GraphicOptionsParam\n ) {\n super();\n this.options = proxyOptions<GraphicOptions, GraphicEventMap>(\n { ...defaultOptions, ...options },\n this\n );\n if (this.options.geometry.type === \"point\") {\n const [x, y] = this.options.geometry.coords;\n this.position.set(x, y, this.options.height + this.options.airHeight);\n return this;\n }\n this.init();\n this.visible = this.options.visible;\n this.addEventListener(\"change-fillColor\", ({ value }) => {\n this.initMaterial();\n this.initMesh();\n });\n this.addEventListener(\"change-fillOpacity\", ({ value }) => {\n this.initMaterial();\n this.initMesh();\n });\n this.addEventListener(\"change-height\", ({ value }) => {\n this.dispose();\n this.init();\n });\n this.addEventListener(\"change-strokeColor\", ({ value }) => {\n if (!this.options.stroke) {\n return;\n }\n this.initLineMaterial();\n this.createBorder();\n });\n this.addEventListener(\"change-strokeOpacity\", ({ value }) => {\n if (!this.options.stroke) {\n return;\n }\n this.initLineMaterial();\n this.createBorder();\n });\n // this.addEventListener('change-strokeWidth', ({ value }) => {\n // this.initLineMaterial();\n // this.createBorder();\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 this.addEventListener(\"change-stroke\", ({ value }) => {\n if (value) {\n if (this.line) {\n return;\n }\n this.initLineGeometry();\n this.initLineMaterial();\n this.createBorder();\n } else if (this.line) {\n this.remove(this.line);\n this.lineGeometry?.dispose();\n }\n });\n this.addEventListener(\"change-renderType\", () => {\n this.initMaterial();\n this.initMesh();\n })\n this.addEventListener(\"change-gradualColor\", () => {\n this.initMaterial();\n this.initMesh();\n })\n }\n\n getCenter() {\n if (this.options.geometry.type === \"point\") {\n return this.position.clone();\n }\n const center = new Vector3();\n const box = new Box3();\n box.setFromObject(this);\n box.getCenter(center);\n return center;\n }\n\n getSize() {\n if (this.options.geometry.type === \"point\") {\n return new Vector3(0, 0, 0);\n }\n const box = new Box3();\n const size = new Vector3();\n box.setFromObject(this);\n box.getSize(size);\n return size;\n }\n\n getPosition() {\n const center = this.getCenter();\n center.setZ(center.z + this.options.height);\n return center;\n }\n\n init() {\n this.geometry = this.initGeometry();\n this.initMaterial();\n this.initMesh();\n this.mesh.position.z = this.options.airHeight + this.options.deltaHeight;\n if (this.options.stroke) {\n // \u521B\u5EFA\u8FB9\u6846\n this.initLineMaterial();\n this.initLineGeometry();\n this.createBorder();\n }\n }\n\n initGeometry() {\n const shape = initShape(\n (this.options.geometry as PolygonGeometry).coords[0],\n (this.options.geometry as PolygonGeometry).coords.slice(1)\n );\n const geometry = new ExtrudeGeometry(shape, {\n steps: 1,\n bevelEnabled: false,\n depth: this.options.height,\n curveSegments: 4,\n });\n return geometry;\n }\n\n initSingleMaterial() {\n const material = this.context.materialFactory.createMeshBasicMaterial({\n color: this.options.fillColor,\n opacity: this.options.fillOpacity,\n });\n if (this.options.height <= 0.1) {\n this.material = material;\n return material;\n }\n const material1 = this.context.materialFactory.createMeshBasicMaterial({\n color: darkenColor(this.options.fillColor),\n opacity: this.options.fillOpacity,\n });\n this.material = [material, material1];\n return [material, material1];\n }\n\n initGradualMaterial() { \n const { max, min } = new Box3().setFromObject(this)\n const _max = max.clone().sub(min)\n const maxValue = Math.max(_max.x, _max.y, _max.z) / 2\n\n const material = this.context.materialFactory.createShaderMaterial({\n gradualColor: this.options.gradualColor,\n center: this.getPosition(),\n maxValue,\n opacity: this.options.fillOpacity,\n direction: new Vector3(-1.0, 0.2, 0.0),\n max,\n min\n })\n if (this.options.height <= 0.1) {\n this.material = material;\n return material;\n }\n\n const material1 = this.context.materialFactory.createShaderMaterial({\n gradualColor: [darkenColor(this.options.gradualColor[0], this.options.colorFactor), darkenColor(this.options.gradualColor[1], this.options.colorFactor)],\n center: this.getCenter(),\n maxValue,\n opacity: this.options.fillOpacity,\n direction: new Vector3(-1.0, 0.2, 1.0),\n max,\n min\n })\n\n this.material = [material, material1];\n return [material, material1];\n }\n\n initMaterial() {\n if (this.options.renderType === 'gradual') { \n return this.initGradualMaterial()\n } else {\n return this.initSingleMaterial()\n }\n }\n\n initLineMaterial() {\n const lineMaterial = this.context.materialFactory.createLineMaterial({\n color: this.options.strokeColor,\n opacity: this.options.strokeOpacity,\n });\n this.lineMaterial = lineMaterial;\n return lineMaterial;\n }\n\n initMesh() {\n if (this.mesh) {\n this.remove(this.mesh);\n }\n this.mesh = new Mesh(this.geometry, this.material);\n this.add(this.mesh);\n }\n\n getBorderPoints() {\n const points = [];\n const height = this.options.height + this.options.deltaHeight;\n // \u70B9\u7684\u5750\u6807\u8981\u81EA\u5DF1\u7B97\uFF0C\u53EA\u753B\u5173\u952E\u8282\u70B9\u7684\u5782\u76F4\u7EBFcurveIndex\u662F\u5173\u952E\u8282\u70B9,\u5982\u679C\u662F\u66F2\u7EBF\u6709\u8FD9\u4E2A\u503C\uFF0C\u4E0D\u662F\u66F2\u7EBF\u4E0D\u4E00\u5B9A\u6709\n const { coords } = this.options.geometry as PolygonGeometry;\n for (let j = 0; j < coords.length; j++) {\n const curCds = coords[j];\n for (let i = 0; i < curCds.length; i++) {\n const cur = curCds[i];\n const next = i + 1 === curCds.length ? curCds[0] : curCds[i + 1];\n // \u628A\u62C9\u5347\u4E0A\u53BB\u7684\u70B9\u653E\u8FDB\u53BB\n points.push(new Vector3(cur[0], cur[1], height));\n points.push(new Vector3(next[0], next[1], height));\n }\n }\n return points;\n }\n\n initLineGeometry() {\n if (this.lineGeometry) {\n this.lineGeometry.dispose();\n }\n const points = this.getBorderPoints();\n const lineGeometry = new BufferGeometry().setFromPoints(points);\n this.lineGeometry = lineGeometry;\n }\n\n createBorder() {\n if (this.line) {\n this.remove(this.line);\n }\n const line = new LineSegments(this.lineGeometry, this.lineMaterial);\n line.position.z = this.options.airHeight + 0.01;\n this.line = line;\n this.add(line);\n return line;\n }\n\n raycast(raycaster: Raycaster) {\n if (!this.visible) {\n return false;\n }\n if (this.options.geometry.type === \"point\") {\n return false;\n }\n const intersects = raycaster.intersectObject(this.mesh);\n if (intersects[0]) {\n const { point: position, distance } = intersects[0];\n return { position, distance };\n }\n return false;\n }\n\n dispose() {\n this.geometry.dispose();\n this.line?.geometry.dispose();\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'\n\nexport class Shadow extends Object3D {\n\n private directionalLight: DirectionalLight\n\n private plane!: Mesh\n\n public basicOpacity = 0.07\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, 0.5)\n directionalLight.position.set(0, 0, 100);\n this.add(directionalLight);\n return directionalLight\n }\n \n changeLightCamera(size: Vector3) {\n const x = size.x\n const y = size.y\n this.directionalLight.shadow.camera.left = -x;\n this.directionalLight.shadow.camera.right = x;\n this.directionalLight.shadow.camera.top = y;\n this.directionalLight.shadow.camera.bottom = -y;\n this.directionalLight.shadow.camera.near = 0.5;\n this.directionalLight.shadow.camera.far = Math.max(x, y);\n }\n\n changeLightColor(color: number | string) {\n this.directionalLight.color = new Color(color)\n }\n\n setPosition(position: Vector3) {\n this.position.copy(position)\n this.directionalLight.position.set(-position.x / 2, -position.y / 2, 100)\n }\n\n // \u521B\u5EFA\u5E73\u9762\u767D\u8272\n initPlane(width = 1000, height = 1000) { \n const geometry = new PlaneGeometry(width, height)\n const material = new ShadowMaterial({\n transparent: true,\n opacity: 0,\n side: DoubleSide\n })\n const mesh = new Mesh(geometry, material)\n mesh.receiveShadow = true\n mesh.position.z = -10\n this.add(mesh)\n this.plane = mesh\n return mesh\n }\n\n setTarget(target: Object3D) {\n this.directionalLight.target = target\n }\n\n transformOpacity(opacity: number): number {\n return opacity * this.basicOpacity\n }\n\n setOpacity(opacity: number) { \n (this.plane.material as MeshStandardMaterial).opacity = this.transformOpacity(opacity);\n }\n \n dispose() {\n dispose(this, true)\n }\n\n}", "import { proxyOptions, sleepOnePromise } from '../utils';\nimport { EventDispatcher, Object3D, Object3DEventMap, Vector3 } from 'three';\nimport { Context } from '../context'\nimport { Overlay } from './overlay';\n\nexport interface PoiOptions {\n texts: { text: string, styles?: { [key: string]: string }; }[];\n icon?: string;\n icon_size?: [number, number]; // \u5BBD \u9AD8\n icon_position?: 'top' | 'bottom';\n level: number; // \u6E32\u67D3\u4F18\u5148\u7EA7\n collision_enable: boolean; // \u662F\u5426\u53C2\u4E0E\u78B0\u649E\u68C0\u6D4B\n opacity: number;\n id: string; // poi\u7684key\n position: { x: number; y: number; z: number };\n icon_opacity: number;\n icon_border: { color: string, width: number };\n background: string;\n collision_hide_icon: boolean;\n built_in: boolean; // \u662F\u5426\u662F\u5185\u7F6E\u7684poi\n box_only_icon: boolean; // \u5305\u56F4\u76D2\u662F\u4E0D\u662F\u53EA\u5305\u542B\u56FE\u6807\n}\n\ntype PoiEventMap = {\n [K in keyof PoiOptions as `change-${K}`]: { value: PoiOptions[K] };\n} & Object3DEventMap;\n\nconst defaultOptions: PoiOptions = {\n texts: [{ text: \"\" }],\n level: 1,\n icon_position: 'bottom',\n collision_enable: true,\n opacity: 1,\n id: \"\",\n position: { x: 0, y: 0, z: 0 },\n icon_opacity: 1,\n icon_border: { color: \"#586EE0\", width: 0 },\n background: \"\",\n collision_hide_icon: true,\n built_in: false,\n box_only_icon: false\n}\n\nexport type PoiOptionsParam = Partial<PoiOptions>\n\nexport class Poi extends EventDispatcher<PoiEventMap> {\n\n private div!: HTMLDivElement\n\n private textDiv!: HTMLDivElement\n\n private img?: HTMLImageElement\n\n private overlay: Overlay\n\n public options: PoiOptions\n\n public visible = true\n\n size = { width: 0, height: 0 }\n\n position = new Vector3()\n\n userData = {};\n\n showTextStatus = true\n\n constructor(private context: Context, options: PoiOptionsParam) {\n super()\n this.options = proxyOptions<PoiOptions, PoiEventMap>({...defaultOptions, ...options}, this)\n this.position.set(options.position?.x || 0, options.position?.y || 0, options.position?.z || 0)\n this.overlay = new Overlay(this.context, { autoUpdate: false })\n this.overlay.addEventListener(\"update-position\", ({ x, y, height }) => { \n this.overlay.div.style.transform = `translate3d(calc(${x}px - 50%), calc(${-height + y}px - ${this.options.icon ? '100%' : '50%'}), 0)`;\n })\n this.overlay.bindElement(this as unknown as Object3D)\n this.registryEvent()\n this.initDiv()\n this.addEventListener(\"change-icon\", ({ value }) => {\n if (value) {\n if (!this.img) {\n this.addIcon()\n this._changePosition()\n } else {\n this.img.setAttribute('src', value)\n }\n } else {\n this.img && this.div.removeChild(this.img)\n this.img = undefined\n this._changePosition()\n this.resetSize()\n }\n })\n this.addEventListener(\"change-texts\", ({ value }) => {\n this.div.removeChild(this.textDiv)\n this.addText()\n this.resetSize()\n })\n this.addEventListener(\"change-opacity\", ({ value }) => {\n this.overlay.setOpacity(value)\n })\n this.addEventListener(\"change-icon_size\", ({ value }) => {\n if (this.img) {\n this.img.style.width = `${value?.[0] || 32}px`\n this.img.style.height = `${value?.[1] || 32}px`\n this.resetSize()\n }\n })\n this.addEventListener(\"change-icon_opacity\", ({ value }) => {\n if (this.img) {\n this.img.style.opacity = `${value}`\n }\n })\n this.addEventListener(\"change-icon_border\", ({ value }) => {\n if (this.img) {\n this.img.style.border = `${value.width}px solid ${value.color}`\n }\n })\n this.addEventListener(\"change-background\", ({ value }) => {\n this.div.style.background = value;\n })\n }\n\n get withinDisplayRange() {\n return this.overlay.withinDisplayRange\n }\n\n async resetSize() {\n await sleepOnePromise()\n if (this.options.box_only_icon) {\n if (!this.img) { return }\n const { width, height } = this.img.getBoundingClientRect()\n this.size = {\n width: width + 2, \n height: height + 2\n }\n } else {\n const { width, height } = this.div.getBoundingClientRect()\n this.size = {\n width: width + 2, \n height: height + 2\n }\n }\n }\n\n renderHelperBox() {\n // let div = this.helperDiv\n // if (!div) {\n // div = document.createElement('div')\n // this.context.container.appendChild(div)\n // }\n // const box = this.getBox()\n // div.style.cssText = `position: absolute; top: ${box.top}px;left: ${box.left}px;width: ${box.right - box.left}px;height: ${box.bottom - box.top}px;border: 1px solid red;`\n // this.helperDiv = div;\n }\n\n get clientPos() {\n return this.overlay.clientPos\n }\n\n initDiv() {\n const div = document.createElement(\"div\");\n this.div = div;\n this.addText()\n if (this.options.icon) { \n this.addIcon()\n }\n div.style.fontSize = `12px`;\n div.style.textShadow = `#fff 1px 0 0, #fff 0 1px 0, #fff -1px 0 0, #fff 0 -1px 0`;\n div.style.display = `flex`;\n div.style.flexDirection = `column`;\n div.style.justifyContent = `center`;\n div.style.alignItems = `center`;\n div.style.padding = \"4px\";\n this.overlay.setOpacity(this.options.opacity);\n this.overlay.div.style.pointerEvents = `none`;\n this.overlay.div.style.userSelect = `none`;\n this.overlay.div.appendChild(div)\n // this._changePosition()\n this.resetSize()\n return div\n }\n\n addIcon() { \n if (!this.img) {\n const icon = this.initIcon()\n if (this.options.icon_position === \"top\") {\n if (this.div.firstChild) {\n this.div.insertBefore(icon, this.div.firstChild)\n } else {\n this.div.appendChild(icon)\n }\n } else {\n this.div.appendChild(icon)\n }\n }\n }\n\n addText() { \n const text = this.initText()\n if (this.options.icon_position === \"top\") {\n this.div.appendChild(text)\n } else {\n if (this.div.firstChild) {\n this.div.insertBefore(text, this.div.firstChild)\n } else {\n this.div.appendChild(text)\n }\n }\n }\n\n getPosition() {\n return this.position\n }\n\n initText() {\n const textDiv = document.createElement(\"div\")\n textDiv.appendChild(this.createTextFragment())\n textDiv.style.textAlign = \"center\"\n this.textDiv = textDiv\n return textDiv\n }\n\n createTextFragment() { \n const f = document.createDocumentFragment()\n this.options.texts.forEach(item => { \n const div = document.createElement(\"div\")\n div.style.whiteSpace = 'nowrap';\n if (item.styles) { \n for (let [key, value] of Object.entries(item.styles)) { \n div.style[key as any] = value;\n }\n }\n div.textContent = item.text;\n f.appendChild(div)\n })\n return f\n }\n\n initIcon() {\n const img = document.createElement(\"img\")\n img.setAttribute(\"src\", this.options.icon!)\n img.style.width = `${this.options.icon_size?.[0] || 32}px`\n img.style.height = `${this.options.icon_size?.[1] || 32}px`\n img.style.opacity = `${this.options.icon_opacity}px`\n img.style.borderRadius = '50%';\n if (this.options.icon_border.width) {\n img.style.border = `${this.options.icon_border.width}px solid ${this.options.icon_border.color}`\n }\n img.onload = () => {\n // this._changePosition()\n this.resetSize()\n }\n this.img = img\n return img\n }\n\n private _changePosition = () => {\n this.overlay.updatePosition(true)\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 if (visible === this.visible) { return }\n this.visible = visible\n this.changeOverlayVisible(visible)\n }\n\n changeOverlayVisible(visible: boolean) {\n if (visible === this.overlay.visible && this.options.collision_hide_icon) { return }\n if (this.options.collision_hide_icon) {\n this.overlay.visible = visible;\n this.overlay.div.style.visibility = visible ? \"visible\" : \"hidden\"\n } else {\n if (this.showTextStatus === visible) { return }\n this.textDiv.style.visibility = visible ? \"visible\" : \"hidden\"\n this.showTextStatus = visible\n }\n }\n\n parentSetVisible(visible: boolean) { \n if (!this.visible) { \n return\n }\n this.changeOverlayVisible(visible)\n // if (visible) {\n // this.renderHelperBox()\n // } else {\n // this.helperDiv?.remove()\n // this.helperDiv = null\n // }\n }\n\n getBox(boxScale = this.context.config.poi.boxScale) {\n const { width, height } = this.size\n const w = width * boxScale;\n const h = height * boxScale;\n const { x, y } = this.overlay.clientPos\n return {\n left: x - w / 2,\n right: x + w / 2,\n top: this.options.icon ? y - h : y - h / 2,\n bottom: this.options.icon ? y : y + h / 2,\n }\n }\n\n getOriginBox() { \n return this.getBox(1)\n }\n\n isContain(x: number, y: number) {\n if (!this.overlay.visible) { return false }\n if (!this.visible) {return false}\n const box = this.getOriginBox()\n return x >= box.left && x <= box.right && y >= box.top && y <= box.bottom\n }\n\n dispose() {\n this.unRegistryEvent();\n this.div = null as unknown as HTMLDivElement;\n this.textDiv = null as unknown as HTMLDivElement;\n this.img = undefined\n this.overlay.dispose();\n }\n}", "import { Context } from \"../context\";\nimport { Box3, EventDispatcher, Object3D, Vector3 } from \"three\";\nimport { vector3ToDevice } from '../utils'\n\ninterface OverlayOptions {\n autoUpdate: boolean;\n appendToBody: boolean;\n}\n\nconst defaultOptions: OverlayOptions = {\n autoUpdate: true,\n appendToBody: false\n}\n\ninterface OverlayEventMap {\n \"update-position\": {\n x: number;\n y: number;\n width: number;\n height: number;\n }\n}\n\nexport class Overlay extends EventDispatcher<OverlayEventMap> {\n\n public div: HTMLDivElement\n\n private element?: Object3D & { getPosition?: () => Vector3 }\n\n public position = new Vector3()\n\n clientPos = { x: 0, y: 0 }\n\n visible = true\n\n private options: OverlayOptions\n\n constructor(private context: Context, options: Partial<OverlayOptions> = {}) {\n super()\n this.options = { ...defaultOptions, ...options };\n this.registryEvent()\n this.div = this.initDiv()\n if (this.options.appendToBody) {\n document.body.appendChild(this.div)\n } else {\n this.context.container.appendChild(this.div)\n }\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 this.onUpdate() \n }\n\n unBindElement() {\n this.element = undefined;\n }\n\n setVisible(visible: boolean, display = 'block') {\n if (visible === this.visible) { return }\n this.div.style.display = visible ? display : 'none'\n this.visible = visible\n }\n\n setOpacity(opacity: number) {\n this.div.style.opacity = `${opacity}`\n }\n\n getPosition() {\n if (this.element) {\n if (typeof this.element.getPosition === \"function\") {\n return this.element.getPosition()\n }\n const box = new Box3().setFromObject(this.element)\n const center = box.getCenter(new Vector3())\n return center\n } else {\n return this.position\n }\n }\n\n get withinDisplayRange() { \n const { x, y } = this.clientPos\n const { width, height } = this.context.clientSize\n return x >=0 && x <= width && y >= 0 && y <= height\n }\n\n updatePosition(force = false) {\n const vector = this.getPosition()\n const { width, height, x: clientX, y: clientY } = this.context.clientSize\n const { x, y } = vector3ToDevice(vector, this.context.camera, width, height)\n if (this.clientPos.x === x && this.clientPos.y === y && !force) { return }\n this.clientPos = { x, y }\n if (this.options.appendToBody) {\n this.div.style.left = `${clientX}px`\n this.div.style.top = `${clientY + height}px`\n }\n if (this.options.autoUpdate) { \n this.div.style.transform = `translate3d(${x}px, ${-height+y}px, 0)`\n } else {\n this.dispatchEvent({ type: \"update-position\", x, y, width, height })\n }\n }\n\n onUpdate = () => {\n this.updatePosition()\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.div?.remove();\n this.div = null as unknown as HTMLDivElement\n }\n}", "import { Context } from \"../context\";\nimport { Box3, Object3D, Vector3 } from \"three\";\nimport { GraphicLayer } from '../layer/graphic-layer'\nimport { PoiLayer } from '../layer/poi-layer'\nimport { Graphic, GraphicOptionsParam } from \"./graphic\";\nimport { Shadow } from \"./shadow\";\nimport { PoiOptionsParam } from \"./poi\";\nimport { HeatmapDataParam, HeatmapElement } from './heatmap'\nimport { Model, ModelOptions } from \"./model\";\n\nexport class Floor extends Object3D {\n \n graphicLayer: GraphicLayer;\n\n poiLayer: PoiLayer;\n\n grounds: Set<Graphic> = new Set();\n\n shadow = new Shadow();\n\n heatmap?: HeatmapElement;\n\n groundUpper = new Object3D();\n\n models = new Object3D()\n\n modelMap = new Map()\n\n private groundMaxHeight = 0;\n\n constructor(public context: Context) {\n super()\n this.graphicLayer = new GraphicLayer(this.context);\n this.poiLayer = new PoiLayer(this.context);\n this.groundUpper.add(this.graphicLayer)\n this.groundUpper.add(this.poiLayer)\n this.add(this.groundUpper)\n this.add(this.models)\n }\n\n getPosition() { \n const box = new Box3().setFromObject(this.groundUpper)\n return box.getCenter(new Vector3())\n }\n\n createGround(options: GraphicOptionsParam) {\n // options.deltaHeight = 0.00001 * this.grounds.size\n const ground = new Graphic(this.context, options)\n this.addGrounds([ground])\n }\n\n addGrounds(grounds: Graphic[]) {\n grounds.forEach(ground => { \n if (!this.grounds.has(ground)) {\n ground.mesh.castShadow = true;\n this.grounds.add(ground)\n this.groundUpper.add(ground)\n }\n })\n this.changeGroundMaxHeight()\n }\n\n changeGroundMaxHeight() { \n const grounds = Array.from(this.grounds)\n this.groundMaxHeight = this.grounds.size > 0 ? Math.max(...grounds.map(ground => ground.options.height + ground.options.airHeight + ground.options.deltaHeight)) : 0\n this.graphicLayer.position.z = this.groundMaxHeight\n this.models.position.z = this.groundMaxHeight\n }\n\n get hasElement() { \n return !!(this.grounds.size || this.graphicLayer.children.length)\n }\n\n getCenter() { \n return new Box3().setFromObject(this.groundUpper).getCenter(new Vector3())\n }\n \n addModel(options: ModelOptions) { \n const model = new Model(this.context, options)\n this.models.add(model)\n this.modelMap.set(options.id, model)\n return model\n }\n\n addShadow() { \n const box = new Box3().setFromObject(this.groundUpper)\n const center = box.getCenter(new Vector3())\n const size = box.getSize(new Vector3())\n this.shadow.setPosition(center)\n this.shadow.changeLightCamera(size)\n // this.add(this.shadow)\n }\n\n addGraphic(graphicOptions: GraphicOptionsParam) {\n return this.graphicLayer.createGraphic(graphicOptions)\n }\n\n addPoi(poiOptions: PoiOptionsParam) {\n return this.poiLayer.createPoi(poiOptions)\n }\n\n addHeatmap(data: HeatmapDataParam) {\n if (!this.heatmap) {\n this.heatmap = new HeatmapElement(this.context)\n this.add(this.heatmap)\n }\n this.heatmap.loadData(data)\n const box = new Box3().setFromObject(this.graphicLayer)\n this.heatmap.position.setZ(box.max.z)\n return this.heatmap\n }\n\n removeHeatMap() {\n if (this.heatmap) {\n this.remove(this.heatmap)\n this.heatmap.dispose()\n this.heatmap = undefined\n }\n }\n\n setShadowOpacity(opacity: number) {\n this.shadow.setOpacity(opacity)\n }\n\n setShadowVisible(visible: boolean) {\n this.shadow.visible = visible;\n }\n\n dispose() {\n this.shadow.dispose();\n this.graphicLayer.dispose()\n this.poiLayer.dispose()\n this.grounds.forEach(ground => ground.dispose())\n this.heatmap?.dispose()\n this.groundUpper.clear()\n this.models.children.forEach((model) => (model as unknown as Model).dispose())\n this.models.clear()\n this.modelMap.clear()\n this.clear()\n }\n\n}", "import { Graphic, GraphicOptionsParam } from \"../elements\";\nimport { Box3, Raycaster, Vector3 } from \"three\";\nimport { Layer } from \"./layer\";\nimport { Context } from \"../context\";\n\nexport class GraphicLayer extends Layer {\n\n graphicMap = new Map<string, Graphic>()\n\n constructor(context: Context) {\n super(context)\n }\n\n getCenter(): Vector3 { \n const box = new Box3().setFromObject(this)\n return box.getCenter(new Vector3())\n }\n\n createGraphic(options: GraphicOptionsParam) {\n // options.deltaHeight = 0.00001 * this.graphicMap.size;\n const graphic = new Graphic(this.context, options)\n this.add(graphic)\n this.graphicMap.set(options.id!, graphic)\n return graphic\n }\n\n removeGraphic(graphic: Graphic) { \n this.remove(graphic)\n this.graphicMap.delete(graphic.options.id!)\n graphic.dispose()\n }\n\n removeGraphicById(id: string) {\n if (this.graphicMap.has(id)) {\n this.removeGraphic(this.graphicMap.get(id)!)\n }\n }\n\n getGraphicByNodeId(id: string) {\n return this.graphicMap.get(id) || null\n }\n\n /**\n * \u83B7\u53D6\u5C04\u7EBF\u76F8\u4EA4\u7684\u5143\u7D20\n * @param raycaster \n */\n getGraphicByRaycaster(raycaster: Raycaster): { graphics: Graphic[], position: Vector3 | null } {\n const initData: {\n position: Vector3 | null,\n graphic: Graphic | null,\n distance: number\n } = { distance: 10000, graphic: null, position: null }\n const data = this.children.reduce((res, item) => {\n if (item instanceof Graphic) {\n const pos = item.raycast(raycaster)\n if (pos) {\n const { distance } = pos\n if (distance < res.distance) {\n return {\n distance: res.distance,\n position: res.position,\n graphic: item\n }\n }\n }\n return res\n } else {\n return res\n }\n }, initData)\n if (data === initData) {\n return { graphics: [], position: null }\n }\n return { graphics: [data.graphic!], position: data.position }\n }\n}", "import { Context } from \"../context\";\nimport { Object3D } from \"three\";\nimport { dispose } from '../utils'\n\nexport class Layer extends Object3D {\n constructor(public context: Context) {\n super();\n }\n\n dispose() {\n dispose(this)\n this.clear()\n }\n}", "import { Poi, PoiOptionsParam } from \"../elements\";\nimport { Layer } from \"./layer\";\nimport { Context } from '../context'\nimport { debounce } from 'lodash'\nimport { Timer } from \"../utils\";\n\nexport class PoiLayer extends Layer {\n pois: Poi[] = []\n debounceCollisionDetection: () => void\n\n timer = new Timer()\n \n constructor(context: Context) {\n super(context)\n this.registryEvent()\n this.debounceCollisionDetection = debounce(this.collisionDetection, 10)\n }\n\n clear(force = false) {\n this.pois.forEach(item => {\n if (item.options.built_in && !force) { \n return\n }\n item.dispose()\n })\n this.pois = force ? [] : this.pois.filter(item => item.options.built_in)\n return this\n }\n\n createPoi(options: PoiOptionsParam) {\n const poi = new Poi(this.context, options)\n this.pushPoi(poi)\n poi.addEventListener(\"change-level\", () => this.changePoiLevelOrCollisionEnable(poi))\n poi.addEventListener(\"change-collision_enable\", () => this.changePoiLevelOrCollisionEnable(poi))\n Promise.resolve().then(() => { \n this.debounceCollisionDetection()\n })\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 poi.dispose()\n }\n\n removePoiById(id: string) {\n const poi = this.pois.find(item => item.options.id === id)\n if (poi) {\n this.removePoi(poi)\n }\n }\n\n getPoiById(id: string) { \n const poi = this.pois.find(item => item.options.id === id)\n return poi || null\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 === 0) {\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.pois.filter(item => {\n return (item instanceof Poi) && item.isContain(x, y)\n })\n return pois\n }\n\n onUpdate = () => { \n this.timer.requestAnimationFrame(() => { \n this.collisionDetection()\n })\n }\n\n /**\n * \u78B0\u649E\u68C0\u6D4B\n */\n collisionDetection() {\n const range: { left: number; right: number; top: number; bottom: number; }[] = []\n // \u6392\u9664\u5728\u5C4F\u5E55\u5916\u7684poi\n const pois = this.pois.filter(item => item.visible && item.withinDisplayRange)\n pois.forEach((item, index) => {\n const { left, right, top, bottom } = item.getBox()\n if (index === 0 || !item.options.collision_enable) {\n range.push({ left, right, top, bottom })\n item.parentSetVisible(true)\n return\n }\n // valid boolean \u8868\u793A\u53D1\u751F\u4E86\u78B0\u649E\n const valid = range.some((box) => { \n // \u5224\u65AD\u56DB\u4E2A\u70B9\u662F\u4E0D\u662F\u90FD\u4E0D\u5728box\u7684\u8303\u56F4\u5185\n return box.left < right && box.right > left && box.top < bottom && box.bottom > top;\n })\n item.parentSetVisible(!valid)\n if (!valid) { \n range.push({ left, right, top, bottom })\n }\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 this.timer.dispose()\n this.pois.forEach(item => item.dispose())\n this.pois.length = 0;\n this.debounceCollisionDetection = () => { }\n super.dispose()\n this.unRegistryEvent()\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 { Box3, Object3D, Vector3 } from \"three\";\nimport { Context } from \"../context\";\nimport { loadModel, dispose } from \"../utils\";\nimport { Poi } from \"./poi\";\nimport { GLTF } from \"three/examples/jsm/loaders/GLTFLoader\";\n\nexport interface ModelOptions {\n modelUrl: string;\n icon?: string;\n icon_size?: [number, number];\n position?: Vector3;\n id: string;\n}\n\nexport class Model extends Object3D {\n poi: Poi | null = null;\n\n model: GLTF | null = null\n\n constructor(public context: Context, private options: ModelOptions) {\n super()\n this.position.copy(options.position || new Vector3(0, 0, 0))\n this.loadModel()\n }\n \n async loadModel() { \n const object = await loadModel(this.options.modelUrl);\n object.scene.rotation.set(Math.PI / 2, Math.PI / 2, 0)\n this.add(object.scene)\n this.model = object\n this.initPoi()\n }\n\n initPoi() {\n if (!this.options.icon) {\n return\n }\n const poi = this.context.currentFloor?.addPoi({\n icon: this.options.icon,\n icon_size: this.options.icon_size,\n built_in: true,\n level: 0\n })\n this.poi = poi || null\n if (this.model && poi) {\n poi.position = (new Box3().setFromObject(this)).getCenter(new Vector3())\n }\n }\n\n dispose() {\n dispose(this)\n this.model = null\n if (this.poi) {\n this.context.currentFloor?.poiLayer.removePoi(this.poi)\n this.poi = null;\n }\n }\n}", "import { Context } from \"../context\";\nimport { EventDispatcher, Vector3 } from \"three\";\nimport { createSvg, vector3ToDevice } from '../utils'\n\nexport class BaseSvg<T extends {} = {}> extends EventDispatcher<T> {\n protected points: Vector3[] = [];\n\n protected svg: SVGElement;\n\n protected enable = true;\n\n constructor(public context: Context) {\n super()\n this.svg = createSvg(`${context.container.clientWidth}`, `${context.container.clientHeight}`)\n context.container.appendChild(this.svg)\n this._registryEvent()\n }\n\n private _onResize = ({ width, height }: { width: number; height: number }) => {\n if (this.svg) {\n this.svg.setAttribute(\"width\", `${width}`)\n this.svg.setAttribute(\"height\", `${height}`)\n }\n }\n\n private _registryEvent() {\n this.context.addEventListener(\"resize\", this._onResize)\n }\n\n private _unRegistryEvent() { \n this.context.removeEventListener(\"resize\", this._onResize)\n }\n\n setEnable(enable: boolean) {\n this.enable = enable;\n if (enable) {\n this.svg.style.display = 'block';\n } else {\n this.svg.style.display = 'none';\n }\n }\n\n getIntersectByPointerEvent(e: PointerEvent) {\n const { camera, renderer } = this.context\n const { offsetX: x, offsetY: y } = e\n const { clientWidth, clientHeight } = renderer.domElement;\n const nx = x / clientWidth * 2 - 1;\n const ny = 1 - y / clientHeight * 2;\n\n const v = new Vector3(nx, ny, 0);\n\n return v.unproject(camera);\n }\n\n getSvgCoordinate(vector: Vector3) {\n const { camera, container } = this.context\n const coord = vector3ToDevice(vector, camera, container.clientWidth, container.clientHeight)\n return coord\n }\n \n dispose() {\n this._unRegistryEvent()\n this.context.container.removeChild(this.svg)\n this.svg = null as unknown as SVGElement\n }\n}", "import { Context } from \"../context\";\nimport { Vector3 } from \"three\";\nimport { setCirclePosition, createCircle, createLine, setLineStartEnd } from '../utils'\nimport { BaseSvg } from './base-svg'\n\ninterface SvgLineEventMap {\n 'distance': { distance: number }\n}\n\nexport class SvgLine extends BaseSvg<SvgLineEventMap> {\n\n private circles: SVGElement[] \n \n private line: SVGElement\n\n constructor(public context: Context) {\n super(context)\n const { config: { svg: { circle, line } } } = context\n this.circles = [createCircle(circle.radius, circle.fill), createCircle(circle.radius, circle.fill)]\n this.line = createLine(line.stroke)\n this.svg.appendChild(this.circles[0]);\n this.svg.appendChild(this.circles[1]);\n this.svg.appendChild(this.line);\n this.registryEvent()\n }\n\n setEnable(enable: boolean) {\n super.setEnable(enable)\n if (enable) {\n this.registryEvent()\n } else {\n this.unRegistryEvent()\n }\n }\n\n registryEvent() { \n this.context.container.addEventListener(\"pointerenter\", this.onPointermove)\n this.context.container.addEventListener(\"pointermove\", this.onPointermove)\n this.context.container.addEventListener(\"pointerleave\", this.onPointerleave)\n this.context.container.addEventListener(\"pointerdown\", this.onPointerdown)\n this.context.addEventListener(\"update\", this.onUpdate)\n }\n \n unRegistryEvent() { \n this.context.container.removeEventListener(\"pointerenter\", this.onPointermove)\n this.context.container.removeEventListener(\"pointermove\", this.onPointermove)\n this.context.container.removeEventListener(\"pointerleave\", this.onPointerleave)\n this.context.container.removeEventListener(\"pointerdown\", this.onPointerdown)\n this.context.removeEventListener(\"update\", this.onUpdate)\n }\n\n onUpdate = () => {\n if (this.points[0]) {\n const point1 = this.getSvgCoordinate(this.points[0])\n setCirclePosition(this.circles[0], point1.x, point1.y)\n setLineStartEnd(this.line, point1)\n }\n if (this.points[1]) {\n const point2 = this.getSvgCoordinate(this.points[1])\n setCirclePosition(this.circles[1], point2.x, point2.y)\n setLineStartEnd(this.line, undefined, point2)\n }\n }\n \n \n onPointermove = (e: PointerEvent) => { \n // \u53EA\u5728\u6709\u7B2C\u4E00\u4E2A\u70B9\u7684\u65F6\u5019\u9700\u8981\n if (this.points.length !== 1) { return }\n this.line.style.display = \"block\";\n setLineStartEnd(this.line, undefined, { x: e.offsetX, y: e.offsetY })\n }\n \n onPointerleave = () => { \n if (this.points[1]) { return } // \u5982\u679C\u5DF2\u7ECF\u6709\u4E24\u4E2A\u70B9\u4E86\u5C31\u4E0D\u505A\u5904\u7406\n this.line.style.display = \"none\";\n }\n \n onPointerdown = (e: PointerEvent) => {\n if (this.points[1]) { return } // \u5982\u679C\u5DF2\u7ECF\u6709\u4E24\u4E2A\u70B9\u4E86\u5C31\u4E0D\u505A\u5904\u7406\n const point = this.getIntersectByPointerEvent(e)\n if (point) {\n const { offsetX: x, offsetY: y } = e\n // \u4FEE\u6539\u70B9\n const circle = this.circles[this.points.length]\n setCirclePosition(circle, x, y)\n if (!this.points.length) { \n // \u8BBE\u7F6E\u7EBF\u7684\u8D77\u59CB\u70B9\n setLineStartEnd(this.line, { x, y }, { x, y })\n }\n this.addPoint(point)\n }\n }\n\n addPoint(vector: Vector3) {\n this.points.push(vector)\n if (this.points.length >= 2) {\n const distance = this.calculatedDistance()\n this.dispatchEvent({ type: 'distance', distance })\n }\n }\n\n /**\n * \u8BA1\u7B97\u4E24\u4E2A\u70B9\u4E4B\u95F4\u7684\u8DDD\u79BB\n */\n calculatedDistance() { \n const [{ x: x1, y: y1 }, { x: x2, y: y2 }] = this.points\n return Math.sqrt((x2 - x1) ** 2 + (y2 - y1) ** 2)\n }\n \n dispose() {\n super.dispose()\n this.unRegistryEvent()\n this.line = null as unknown as SVGElement\n this.circles = []\n }\n}", "import { Context } from \"../context\";\nimport { BaseSvg } from \"./base-svg\";\nimport { setCirclePosition, setLineStartEnd, createLine, createCircle } from '../utils'\nimport { Vector3 } from \"three\";\n\ninterface SvgPolygonEventMap {\n 'area': { area: number }\n}\n\nexport class SvgPolygon extends BaseSvg<SvgPolygonEventMap> {\n\n private circles: SVGElement[] = []\n\n private lines: SVGElement[] = []\n\n private isClose = false\n\n constructor(context: Context) {\n super(context)\n this.registryEvent()\n }\n\n setEnable(enable: boolean) {\n super.setEnable(enable)\n if (enable) {\n this.registryEvent()\n } else {\n this.unRegistryEvent()\n }\n }\n\n private get lastLine() {\n return this.lines.slice(-1)[0]\n }\n\n private addCircle(circle: SVGElement) {\n this.circles.push(circle)\n this.svg.appendChild(circle)\n }\n\n private addLine(line: SVGElement) {\n this.lines.push(line)\n this.svg.appendChild(line)\n }\n\n registryEvent() { \n this.context.container.addEventListener(\"pointerenter\", this.onPointermove)\n this.context.container.addEventListener(\"pointermove\", this.onPointermove)\n this.context.container.addEventListener(\"pointerleave\", this.onPointerleave)\n this.context.container.addEventListener(\"pointerdown\", this.onPointerdown)\n this.context.addEventListener(\"update\", this.onUpdate)\n }\n \n unRegistryEvent() { \n this.context.container.removeEventListener(\"pointerenter\", this.onPointermove)\n this.context.container.removeEventListener(\"pointermove\", this.onPointermove)\n this.context.container.removeEventListener(\"pointerleave\", this.onPointerleave)\n this.context.container.removeEventListener(\"pointerdown\", this.onPointerdown)\n this.context.removeEventListener(\"update\", this.onUpdate)\n }\n\n onUpdate = () => {\n if (this.points.length) {\n this.points.forEach((point, index) => {\n const devicePoint = this.getSvgCoordinate(point)\n if (this.circles[index]) {\n setCirclePosition(this.circles[index], devicePoint.x, devicePoint.y)\n }\n if (index !== 0) {\n setLineStartEnd(this.lines[index - 1], undefined, devicePoint)\n }\n if (this.lines[index]) {\n setLineStartEnd(this.lines[index], devicePoint)\n }\n }) \n }\n }\n \n \n onPointermove = (e: PointerEvent) => { \n // \u5FC5\u987B\u8981\u6709\u4E00\u4E2A\u70B9\u5E76\u4E14\u8FD8\u6CA1\u6709\u95ED\u5408\u624D\u9700\u8981\u5904\u7406\n if (!this.lastLine || this.isClose) { return }\n this.lastLine.style.display = \"block\";\n setLineStartEnd(this.lastLine, undefined, { x: e.offsetX, y: e.offsetY })\n }\n \n onPointerleave = () => { \n // \u5982\u679C\u5DF2\u7ECF\u95ED\u5408\u4E86\u5C31\u4E0D\u9700\u8981\u5904\u7406\u4E86\n if (this.isClose) { return } \n this.lastLine.style.display = \"none\";\n }\n \n onPointerdown = (e: PointerEvent) => {\n // \u5982\u679C\u5DF2\u7ECF\u95ED\u5408\u4E86\n if (this.isClose) { return }\n const point = this.getIntersectByPointerEvent(e)\n if (point) {\n const { offsetX: x, offsetY: y } = e\n if (this.checkAdsorb(x, y)) {\n this.isClose = true\n this.addPoint(this.points[0])\n } else {\n this.addPoint(point)\n }\n const { circle: { fill, radius }, line: { stroke } } = this.context.config.svg\n if (!this.isClose) {\n // \u521B\u5EFA\u4E00\u4E2A\u65B0\u7684\u70B9\n const circle = createCircle(radius, fill)\n setCirclePosition(circle, x, y)\n this.addCircle(circle)\n }\n if (this.lines.length) {\n // \u5982\u679C\u5DF2\u7ECF\u6709\u4E00\u6761\u7EBF\u4E86 \u8981\u95ED\u5408\u8FD9\u6761\u7EBF\n setLineStartEnd(this.lastLine, undefined, { x, y })\n }\n // \u5982\u679C\u8FD9\u4E2A\u591A\u8FB9\u5F62\u8FD8\u6CA1\u6709\u95ED\u5408 \u5C31\u521B\u5EFA\u4E00\u4E2A\u65B0\u7684\u7EBF \u5305\u62EC\u521B\u5EFA\u7B2C\u4E00\u6761\u7EBF\n if (!this.isClose) {\n const line = createLine(stroke)\n // \u8BBE\u7F6E\u7EBF\u7684\u8D77\u59CB\u70B9\n setLineStartEnd(line, { x, y }, { x, y })\n this.addLine(line)\n }\n }\n }\n\n /**\n * \u68C0\u6D4B\u662F\u5426\u53EF\u4EE5\u5438\u9644\n * \u5750\u6807\u70B9\u6700\u5C113\u4E2A \u4F20\u5165\u7684\u5750\u6807\u70B9\u548C\u7B2C\u4E00\u4E2A\u5750\u6807\u7684\u50CF\u7D20\u76F8\u5DEE\u4E0D\u8D85\u8FC75\u4E2A\u50CF\u7D20\n */\n checkAdsorb(x: number, y: number) {\n if (this.points.length < 3) { return false }\n const circle = this.circles[0]\n const cx = +circle.getAttribute(\"cx\")!\n const cy = +circle.getAttribute(\"cy\")!\n return Math.sqrt((x - cx) ** 2 + (y - cy) ** 2) <= 5\n }\n\n addPoint(vector: Vector3) {\n this.points.push(vector)\n if (this.isClose) {\n const area = this.calculatedArea()\n this.dispatchEvent({ type: 'area', area })\n }\n }\n // \u8BA1\u7B97\u9762\u79EF\n calculatedArea() {\n const cds = this.points.map(item => [item.x, item.y])\n let area = 0\n const numPoints = cds.length\n for (let i = 0; i < numPoints; i++) {\n const j = (i + 1) % numPoints\n area += (cds[i][0] * cds[j][1] - cds[j][0] * cds[i][1])\n }\n return Math.abs(area / 2)\n }\n\n dispose() {\n super.dispose()\n this.unRegistryEvent()\n this.lines = []\n this.circles = []\n }\n}", "import { Context } from \"../context\";\nimport { Box3 } from \"three\";\nimport { vector3ToDevice, createRect, setRectPosition } from '../utils'\nimport { BaseSvg } from './base-svg'\nimport { Graphic } from \"./graphic\";\n\ninterface SvgLineEventMap {\n 'distance': { distance: number }\n}\n\nexport class SelectBox extends BaseSvg<SvgLineEventMap> {\n\n private rect!: SVGElement\n\n private cornerRect: SVGElement[] = [] // \u56DB\u4E2A\u89D2\u4E0A\u7684\u65B9\u5757\n\n private centerRect: SVGElement[] = [] // \u56DB\u4E2A\u7EBF\u4E2D\u95F4\u7684\u65B9\u5757\n\n private graphic?: Graphic\n\n constructor(public context: Context) {\n super(context)\n const { config: { svg: { line } } } = context\n this.rect = createRect(line.stroke, \"transparent\")\n this.svg.appendChild(this.rect)\n for (let i = 0; i < 4; i++) {\n this.cornerRect[i] = createRect(line.stroke, \"#ffffff\")\n this.centerRect[i] = createRect(line.stroke, \"#ffffff\")\n this.svg.appendChild(this.cornerRect[i])\n this.svg.appendChild(this.centerRect[i])\n }\n this.registryEvent()\n }\n\n setEnable(enable: boolean) {\n super.setEnable(enable)\n if (enable) {\n this.registryEvent()\n } else {\n this.unRegistryEvent()\n }\n }\n\n registryEvent() { \n this.context.addEventListener(\"update\", this.onUpdate)\n }\n \n unRegistryEvent() { \n this.context.removeEventListener(\"update\", this.onUpdate)\n }\n\n onUpdate = () => {\n if (!this.graphic) {\n setRectPosition(this.rect, 0, 0, 0, 0)\n for (let i = 0; i < this.cornerRect.length; i++) {\n setRectPosition(this.cornerRect[i], 0, 0, 0, 0)\n setRectPosition(this.centerRect[i], 0, 0, 0, 0)\n }\n } else {\n const box = new Box3().setFromObject(this.graphic)\n const { camera, container: { clientWidth: w, clientHeight: h } } = this.context\n const { min, max } = box\n const leftBottom = vector3ToDevice(min, camera, w, h)\n const rightTop = vector3ToDevice(max, camera, w, h)\n // \u753B\u51FA\u4E00\u4E2A\u6846\u6765\n setRectPosition(this.rect, leftBottom.x, rightTop.y, Math.abs(rightTop.x - leftBottom.x), Math.abs(rightTop.y - leftBottom.y))\n // \u56DB\u4E2A\u89D2\u7684\u4F4D\u7F6E\n const { x: left, y: bottom } = leftBottom\n const { x: right, y: top } = rightTop\n const halfWidth = 5;\n const corners = [\n { x: left - halfWidth, y: top - halfWidth }, // \u5DE6\u4E0A\u89D2\n { x: right - halfWidth, y: top - halfWidth }, // \u53F3\u4E0A\u89D2\n { x: left - halfWidth, y: bottom - halfWidth }, // \u5DE6\u4E0B\u89D2\n { x: right - halfWidth, y: bottom - halfWidth }, // \u53F3\u4E0B\u89D2 \n ]\n for (let i = 0; i < corners.length; i++) {\n setRectPosition(this.cornerRect[i], corners[i].x, corners[i].y, halfWidth * 2, halfWidth * 2)\n }\n // \u56DB\u4E2A\u4E2D\u95F4\u7684\u4F4D\u7F6E\n const centerHalfWidth = 4;\n const centerX = (left + right) / 2\n const centerY = (bottom + top) / 2\n const centers = [\n { x: centerX - centerHalfWidth, y: top - centerHalfWidth }, // \u4E0A\n { x: left - centerHalfWidth, y: centerY - centerHalfWidth }, // \u5DE6\n { x: right - centerHalfWidth, y: centerY - centerHalfWidth }, // \u53F3\n { x: centerX - centerHalfWidth, y: bottom - centerHalfWidth }, // \u4E0B\n ]\n for (let i = 0; i < centers.length; i++) {\n setRectPosition(this.centerRect[i], centers[i].x, centers[i].y, centerHalfWidth * 2, centerHalfWidth * 2)\n }\n }\n }\n \n selectGraphic(graphic: Graphic) { \n this.graphic = graphic\n }\n\n dispose() {\n super.dispose()\n this.unRegistryEvent()\n this.rect = null as unknown as SVGElement\n this.cornerRect = []\n this.centerRect = []\n }\n}", "import { createRect, isContain, setRectPosition, vector3ToDevice } from \"../../utils\";\nimport { Context } from \"../../context\";\nimport { BaseSvg, Graphic } from \"../../elements\";\nimport { Frustum, Vector3 } from \"three\";\n\ninterface BoxSelectionEventMap { \n \"selected\": {\n list: Graphic[]\n }\n}\n\nexport class BoxSelection extends BaseSvg<BoxSelectionEventMap> {\n\n private startPoint?: Vector3;\n\n private endPoint?: Vector3;\n\n rect: SVGElement;\n\n frustum = new Frustum();\n\n constructor(context: Context) { \n super(context);\n const { config: { selectBox: { fill, stroke } } } = context\n this.rect = createRect(stroke, fill)\n this.svg.appendChild(this.rect)\n this.registryEvent()\n }\n\n setEnable(enable: boolean): void {\n super.setEnable(enable)\n setRectPosition(this.rect, 0, 0, 0, 0)\n if (enable) {\n this.registryEvent()\n } else {\n this.startPoint = undefined\n this.unRegistryEvent()\n }\n }\n\n onPointerDown = (e: PointerEvent) => { \n if (!this.enable) { return }\n const point = this.getIntersectByPointerEvent(e)\n if (point) { \n this.startPoint = point\n }\n this.endPoint = undefined;\n }\n\n onPointerMove = (e: PointerEvent) => { \n if (!this.enable || !this.startPoint) { return }\n const point = this.getIntersectByPointerEvent(e)\n if (point) { \n this.endPoint = point\n }\n }\n\n onPointerUp = (e: PointerEvent) => { \n if (!this.enable) { return }\n const point = this.getIntersectByPointerEvent(e)\n if (point) { \n this.endPoint = point\n }\n this.doSelect()\n this.startPoint = undefined\n }\n\n onUpdate = () => {\n if (this.startPoint) {\n const startPoint = this.getSvgCoordinate(this.startPoint)\n let endPoint = { ...startPoint }\n if (this.endPoint) {\n endPoint = this.getSvgCoordinate(this.endPoint)\n }\n const leftTop = { x: Math.min(startPoint.x, endPoint.x), y: Math.min(startPoint.y, endPoint.y) }\n const width = Math.abs(endPoint.x - startPoint.x)\n const height = Math.abs(endPoint.y - startPoint.y)\n setRectPosition(this.rect, leftTop.x, leftTop.y, width, height)\n } else {\n setRectPosition(this.rect, 0, 0, 0, 0)\n }\n }\n\n registryEvent() { \n this.context.container.addEventListener(\"pointerdown\", this.onPointerDown)\n this.context.container.addEventListener(\"pointermove\", this.onPointerMove)\n this.context.container.addEventListener(\"pointerup\", this.onPointerUp)\n this.context.addEventListener(\"update\", this.onUpdate)\n }\n \n unRegistryEvent() { \n this.context.container.removeEventListener(\"pointerdown\", this.onPointerDown)\n this.context.container.removeEventListener(\"pointermove\", this.onPointerMove)\n this.context.container.removeEventListener(\"pointerup\", this.onPointerUp)\n this.context.removeEventListener(\"update\", this.onUpdate)\n }\n\n doSelect() { \n if (this.startPoint && this.endPoint) {\n const dis = this.startPoint.distanceTo(this.endPoint);\n if (dis < 0.1) { return }\n const { context: { camera, container: { clientWidth: w, clientHeight: h } } } = this\n const startDevice = vector3ToDevice(this.startPoint!, camera, w, h)\n const endDevice = vector3ToDevice(this.endPoint!, camera, w, h)\n const leftTop = { x: Math.min(startDevice.x, endDevice.x), y: Math.min(startDevice.y, endDevice.y) }\n const rightBottom = { x: Math.max(startDevice.x, endDevice.x), y: Math.max(startDevice.y, endDevice.y) }\n const list = this.searchMapInFrustum(leftTop, rightBottom);\n this.dispatchEvent({ type: \"selected\", list })\n }\n }\n\n searchMapInFrustum(leftTop: { x: number, y: number }, rightBottom: { x: number, y: number }): Graphic[] {\n const { context } = this\n return context.currentFloor?.graphicLayer.children.filter(item => {\n return item instanceof Graphic && this.searchChildInFrustum(item, leftTop, rightBottom)\n }) as Graphic[] || []\n }\n\n searchChildInFrustum(object: Graphic, leftTop: { x: number, y: number }, rightBottom: { x: number, y: number }): boolean {\n const { context: { camera, container: { clientWidth: w, clientHeight: h } } } = this\n if (!object) return false;\n if (!object.mesh) { \n // \u70B9\n const position = object.getPosition()\n if (position) {\n const position2d = vector3ToDevice(position, camera, w, h)\n return isContain(position2d, leftTop, rightBottom)\n }\n return false\n }\n if (!object.mesh.geometry.boundingBox) {\n object.mesh.geometry.computeBoundingBox();\n }\n const box = object.mesh.geometry.boundingBox;\n if (!box) { return false }\n const { min, max } = box\n const minDevice = vector3ToDevice(min, camera, w, h)\n const maxDevice = vector3ToDevice(max, camera, w, h)\n \n if (!isContain(minDevice, leftTop, rightBottom)) { return false }\n if (!isContain(maxDevice, leftTop, rightBottom)) { return false; }\n return true;\n }\n\n dispose() {\n this.unRegistryEvent()\n }\n}\n\n", "import { Graphic, Poi } from \"../../elements\";\nimport { Context } from \"../../context\";\nimport { EventDispatcher } from \"three\";\nimport { Timer } from \"../../utils\";\n\ninterface HoverHelperEventMap {\n \"hover-change\": {\n graphics: Graphic[]\n },\n}\n\nexport class HoverHelper extends EventDispatcher<HoverHelperEventMap> { \n\n curGraphics = new Set<Graphic>()\n\n timer = new Timer()\n\n graphicTimerMap = new Map<Graphic, number>()\n \n constructor(private context: Context) {\n super()\n this.registryEvent()\n }\n\n onPointerMove = ({ graphics, pois, e }: { graphics: Graphic[], pois: Poi[], e: PointerEvent }) => {\n const poiGraphics = pois\n .map(item => this.context.currentFloor?.graphicLayer.graphicMap.get(item.options.id))\n .filter(graphic => graphic && graphic.options.geometry.type === \"point\") as Graphic[]\n if (!graphics.length && !poiGraphics.length && this.curGraphics.size) {\n this.curGraphics.clear()\n this.handleHoverGraphicsChange()\n return\n }\n const { time } = this.context.config.hover\n const allGraphics = new Set<Graphic>()\n if (poiGraphics.length) { \n // \u627E\u79BB\u4E2D\u5FC3\u70B9\u6700\u65B0\u7684\u90A3\u4E2A\n let resGraphic: Graphic;\n let distance = 10000;\n poiGraphics.forEach(graphic => { \n const poi = pois.find(poi => poi.options.id === graphic.options.id)!\n const { x, y } = poi.clientPos\n let curDistance = Math.sqrt((x - e.offsetX) ** 2 + (y - e.offsetY) ** 2)\n if (curDistance < distance) {\n distance = curDistance\n resGraphic = graphic\n }\n })\n allGraphics.add(resGraphic!)\n }\n if (!allGraphics.size) { \n graphics.forEach(graphic => allGraphics.add(graphic))\n }\n allGraphics.forEach((graphic) => {\n // \u5982\u679C\u5DF2\u7ECF\u6709hover\u7684\u5B9A\u65F6\u5668\u5728\u6267\u884C\u4E86\u5C31\u8FD4\u56DE\n if (this.graphicTimerMap.get(graphic)) { \n return\n }\n // \u5982\u679C\u8FD9\u4E2A\u5143\u7D20\u7684hover\u5DF2\u7ECF\u89E6\u53D1\u8FC7\u4E86\u5C31\u8FD4\u56DE\n if (this.curGraphics.has(graphic)) { \n return\n }\n // \u8FD9\u4E2A\u5143\u7D20\u6CA1\u6709\u89E6\u53D1\u8FC7\u4E5F\u6CA1\u6709\u5B9A\u65F6\u5668\u5C31\u6DFB\u52A0\u4E00\u4E2A\u5B9A\u65F6\u5668\n const timer = this.timer.setTimeout(() => {\n this.curGraphics.add(graphic)\n this.graphicTimerMap.delete(graphic)\n this.timer.clearTimeout(timer)\n this.handleHoverGraphicsChange()\n }, time)\n this.graphicTimerMap.set(graphic, timer)\n })\n // \u5982\u679C\u5B9A\u65F6\u5668\u7684\u5143\u7D20\u4E0D\u5B58\u5728\u5728\u5F53\u524Dgraphics\u4E2D\u4E86\u5C31\u5220\u9664\n this.graphicTimerMap.forEach((timer, graphic) => { \n if (!allGraphics.has(graphic)) { \n this.timer.clearTimeout(timer)\n this.graphicTimerMap.delete(graphic)\n }\n })\n // \u5982\u679C\u5DF2\u7ECFhover\u7684\u5143\u7D20\u4E0D\u5B58\u5728\u5728\u5F53\u524D\u7684graphics\u4E86\u5C31\u5220\u9664\n const size = this.curGraphics.size\n this.curGraphics.forEach((graphic) => { \n if (!allGraphics.has(graphic)) { \n this.curGraphics.delete(graphic)\n }\n })\n // \u5982\u679C\u6709\u5220\u9664\u5C31\u89E6\u53D1\u4E8B\u4EF6\n if (size !== this.curGraphics.size) {\n this.handleHoverGraphicsChange()\n }\n }\n\n onPointerLevel = () => {\n this.curGraphics.clear()\n this.handleHoverGraphicsChange()\n }\n\n handleHoverGraphicsChange(graphics = this.curGraphics) { \n this.dispatchEvent({ type: 'hover-change', graphics: Array.from(graphics) })\n }\n\n registryEvent() {\n this.context.addEventListener(\"pointer-over\", this.onPointerMove)\n this.context.addEventListener(\"pointer-move\", this.onPointerMove)\n this.context.addEventListener(\"pointer-level\", this.onPointerLevel)\n }\n\n unRegistryEvent() {\n this.context.removeEventListener(\"pointer-over\", this.onPointerMove)\n this.context.removeEventListener(\"pointer-move\", this.onPointerMove)\n this.context.removeEventListener(\"pointer-level\", this.onPointerLevel)\n }\n\n dispose() {\n this.unRegistryEvent()\n this.timer.dispose()\n }\n}", "import { Context } from \"../context\";\nimport { Color, LineBasicMaterial, MeshStandardMaterial, MeshBasicMaterial, ShaderMaterial, Vector3, DoubleSide } from \"three\";\n\nfunction vectorToString(vector: Vector3) {\n return `${vector.x}-${vector.y}-${vector.z}`\n}\n\ninterface LineMaterialOptions {\n color: string;\n opacity: number;\n}\n\ninterface MeshStandardMaterialOptions {\n color: string,\n opacity: number,\n}\n\ninterface MeshBasicMaterialOptions {\n color: string,\n opacity: number,\n}\n\ninterface ShaderMaterialOptions { \n gradualColor: string[];\n center: Vector3;\n maxValue: number;\n opacity: number;\n direction: Vector3;\n max: Vector3;\n min: Vector3;\n}\n\nexport class MaterialFactory {\n\n private lineMaterialMap = new Map<string, LineBasicMaterial>()\n\n private meshStandardMaterialMap = new Map<string, MeshStandardMaterial>()\n\n private meshBasicMaterialMap = new Map<string, MeshBasicMaterial>()\n\n private shaderMaterialMap = new Map<string, ShaderMaterial>()\n\n constructor(private context: Context) {\n\n }\n\n generateLineMaterialKey({ color, opacity }: LineMaterialOptions) { \n return `${color}-${opacity}`;\n }\n\n createLineMaterial({ color, opacity }: LineMaterialOptions) {\n const key = this.generateLineMaterialKey({ color, opacity })\n if (this.lineMaterialMap.has(key)) {\n return this.lineMaterialMap.get(key)!\n }\n const lineMaterial = new LineBasicMaterial({\n color: new Color(color).convertLinearToSRGB(),\n transparent: true,\n opacity: opacity\n })\n this.lineMaterialMap.set(key, lineMaterial);\n return lineMaterial\n }\n\n createMeshStandardMaterial({ color, opacity }: MeshStandardMaterialOptions) {\n const key = `${color}-${opacity}`;\n if (this.meshStandardMaterialMap.has(key)) {\n return this.meshStandardMaterialMap.get(key)!\n }\n const material = new MeshStandardMaterial({\n color: new Color(color).convertLinearToSRGB(),\n roughness: 1,\n transparent: true,\n opacity: opacity,\n depthWrite: true,\n })\n this.meshStandardMaterialMap.set(key, material);\n return material;\n }\n\n createMeshBasicMaterial({ color, opacity }: MeshBasicMaterialOptions) {\n const key = `${color}-${opacity}`;\n if (this.meshBasicMaterialMap.has(key)) {\n return this.meshBasicMaterialMap.get(key)!\n }\n const material = new MeshBasicMaterial({\n color: color,\n transparent: true,\n opacity: opacity,\n depthWrite: true,\n })\n this.meshBasicMaterialMap.set(key, material);\n return material;\n }\n\n createShaderMaterial({ gradualColor, center, maxValue, opacity, direction, max, min }: ShaderMaterialOptions) {\n\n const key = `${gradualColor.toString()}-${vectorToString(center)}-${maxValue}-${opacity}-${vectorToString(direction)}`\n if (this.shaderMaterialMap.has(key)) {\n return this.shaderMaterialMap.get(key)!;\n }\n // \u81EA\u5B9A\u4E49\u7740\u8272\u5668\u4EE3\u7801\n const vertexShader = `\n uniform vec3 uColor;\n uniform vec3 uGradualColor;\n uniform vec3 center;\n uniform vec3 uDirection;\n uniform vec3 uMax;\n uniform vec3 uMin;\n uniform float maxValue;\n varying vec3 vColor; \n\n void main() {\n vec3 direction = normalize(uDirection);\n vec3 currentPosition = position - center;\n float colorFactor = (dot(direction, currentPosition) / maxValue) * 0.5 + 0.5;\n\n vColor = mix(uColor, uGradualColor, colorFactor);\n gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\n }\n `;\n\n const fragmentShader = `\n varying vec3 vColor;\n uniform float opacity;\n\n void main() {\n gl_FragColor = vec4(vColor.x, vColor.y, vColor.z, opacity);\n }\n `;\n\n // \u521B\u5EFA\u81EA\u5B9A\u4E49ShaderMaterial\n const material = new ShaderMaterial({\n uniforms: {\n uColor: {\n value: new Color(gradualColor[0]).convertLinearToSRGB(),\n },\n uGradualColor: {\n value: new Color(gradualColor[1]).convertLinearToSRGB(),\n },\n center: {\n value: center,\n },\n maxValue: {\n value: maxValue\n },\n opacity: {\n value: opacity\n },\n uDirection: {\n value: direction\n },\n uMax: {\n value: max\n },\n uMin: {\n value: min\n }\n },\n vertexShader: vertexShader,\n fragmentShader: fragmentShader,\n side: DoubleSide\n });\n this.shaderMaterialMap.set(key, material);\n return material\n }\n\n dispose() { \n this.lineMaterialMap.forEach((val, _) => { \n val.dispose()\n })\n this.lineMaterialMap.clear()\n\n this.meshStandardMaterialMap.forEach((val, _) => { \n val.dispose()\n })\n this.meshStandardMaterialMap.clear();\n\n this.meshBasicMaterialMap.forEach((val, _) => { \n val.dispose()\n })\n this.meshBasicMaterialMap.clear()\n\n this.shaderMaterialMap.forEach((val, _) => { \n val.dispose()\n })\n this.shaderMaterialMap.clear()\n }\n \n}", "import { Box3, Vector3 } from \"three\";\nimport { Context } from \"../context\";\nimport { vector3ToDevice } from \"./coordinate\";\n\nexport class CameraBound {\n private prevCamera = {\n position: new Vector3(),\n zoom: 1,\n target: new Vector3()\n }\n\n private enable = true;\n\n constructor(private context: Context) {\n this.registryEvent()\n this.changePrevCamera()\n }\n\n setEnable(enable: boolean) {\n this.enable = enable;\n if (enable) {\n this.registryEvent()\n } else {\n this.unRegistryEvent()\n }\n }\n\n changePrevCamera() {\n this.prevCamera = {\n position: this.context.camera.position.clone(),\n zoom: this.context.camera.zoom,\n target: this.context.control.target.clone()\n }\n }\n\n backToPrevCamera() {\n this.setEnable(false)\n this.context.camera.position.copy(this.prevCamera.position)\n this.context.camera.zoom = this.prevCamera.zoom;\n this.context.control.target.copy(this.prevCamera.target)\n this.context.control.update()\n this.setEnable(true)\n }\n\n registryEvent() { \n this.context.addEventListener(\"control-change\", this.onCameraChange)\n }\n\n unRegistryEvent() {\n this.context.removeEventListener(\"control-change\", this.onCameraChange)\n }\n\n getCurFloorScreenPosition() {\n if (!this.context.currentFloor) {\n return null\n }\n const box = new Box3().setFromObject(this.context.currentFloor.groundUpper);\n const { camera, container: { clientWidth: w, clientHeight: h } } = this.context\n const { min, max } = box\n const lb = vector3ToDevice(min, camera, w, h)\n const rt = vector3ToDevice(max, camera, w, h)\n const lt = vector3ToDevice(new Vector3(min.x, max.y, max.z), camera, w, h)\n const rb = vector3ToDevice(new Vector3(max.x, min.y, min.z), camera, w, h)\n const left = Math.min(lb.x, rt.x, lt.x, rb.x)\n const right = Math.max(lb.x, rt.x, lt.x, rb.x)\n const top = Math.min(lb.y, rt.y, lt.y, rb.y)\n const bottom = Math.max(lb.y, rt.y, lt.y, rb.y)\n return { left, right, top, bottom }\n }\n\n /**\n * \u68C0\u6D4B\u5730\u56FE\u662F\u4E0D\u662F\u5728\u663E\u793A\u8303\u56F4\n * @param param0 \n * @returns \n */\n checkDistanceToScreenEdge({ left, right, top, bottom }: { left: number, right: number, top: number, bottom: number }) { \n const { width, height } = this.context.clientSize\n const [pt, pr, pb, pl] = this.context.config.cameraBound.padding\n // console.log(left, left <= pl , width - right, width - right <= pr , top <= pt , height - bottom <= pb)\n // \u6240\u6709\u7684\u8FB9\u90FD\u4E0D\u8D85\u51FA\n return (left <= pl && width - right <= pr && top <= pt && height - bottom <= pb)\n }\n\n onCameraChange = () => {\n // \u5224\u65AD\u5982\u679C\u8D85\u51FA\u5C31\u7528\u4E4B\u524D\u7684prevCamera\n // \u83B7\u53D6\u5730\u56FE\u7684\u5C4F\u5E55\u4F4D\u7F6E\n // \u5148\u4E0D\u505A\u8FB9\u754C\u5224\u65AD\n // const bound = this.getCurFloorScreenPosition();\n // if (bound) {\n // const { left, right, top, bottom } = bound\n // const isInBound = this.checkDistanceToScreenEdge({ left, right, top, bottom });\n // console.log(\"isInBound\", isInBound)\n // if (isInBound) {\n // this.changePrevCamera()\n // } else {\n // this.backToPrevCamera()\n // }\n // }\n }\n\n dispose() {\n this.unRegistryEvent()\n }\n}", "import { merge } from 'lodash'\nimport { HeatmapConfiguration } from '@mars3d/heatmap.js'\n\nexport interface Config {\n apiDomain: string,\n apiInfo: RequestInit,\n apiPath: {\n floorGraphic: string,\n floorRange: string\n },\n resizeObserver: boolean;\n heatMap: Partial<HeatmapConfiguration>,\n useFloorCache: boolean;\n control: {\n maxPolar: number;\n defaultPolar: number;\n defaultAzimuthal: number;\n },\n defaultPadding: [number, number, number, number];\n initTransToMark: boolean;\n svg: {\n circle: {\n radius: string;\n fill: string;\n },\n line: {\n stroke: string;\n }\n },\n selectBox: {\n stroke: string;\n fill: string;\n },\n hover: {\n time: number;\n },\n ground: {\n color: string;\n opacity: number;\n height: number;\n stroke: boolean,\n strokeColor: string,\n strokeOpacity: number\n },\n markGraphic: {\n color: string;\n opacity: number;\n height: number;\n stroke: boolean;\n strokeColor: string;\n strokeOpacity: number;\n },\n graphic: {\n fillOpacity: number,\n },\n cameraBound: {\n padding: [number, number, number, number]\n },\n poi: {\n boxScale: number;\n }\n}\n\nexport const defaultConfig: Config = {\n apiDomain: \"\",\n apiInfo: {},\n apiPath: {\n floorGraphic: \"/api/inception-map/floor/get\",\n floorRange: \"/api/inception-map/range/get\"\n },\n resizeObserver: false,\n initTransToMark: false,\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 defaultPolar: 1.1,\n defaultAzimuthal: 0,\n },\n defaultPadding: [20, 20, 20, 20],\n svg: {\n circle: {\n radius: \"2\",\n fill: \"#1CADFF\"\n },\n line: {\n stroke: \"#1CADFF\"\n }\n },\n selectBox: {\n stroke: \"#1CADFF\",\n fill: \"rgba(28, 173, 255, 0.3)\"\n },\n hover: {\n time: 100\n },\n ground: {\n color: \"#F6F6F6\",\n opacity: 1,\n height: 0.001,\n stroke: false, \n strokeColor: \"#E6E6E6\",\n strokeOpacity: 1\n },\n markGraphic: {\n color: \"#EEF0F3\",\n opacity: 1,\n height: 0.001,\n stroke: false,\n strokeColor: \"#000\",\n strokeOpacity: 1\n },\n graphic: {\n fillOpacity: 1,\n },\n cameraBound: {\n padding: [150, 150, 150, 150]\n },\n poi: {\n boxScale: 1.0\n }\n}\n\nexport function getConfig(config: Partial<Config>): Config {\n return merge({}, defaultConfig, config);\n}"],
5
+ "mappings": "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",
6
6
  "names": ["EventDispatcher", "canvas", "ctx", "point", "target", "loader", "gltf", "EventDispatcher", "Vector3", "Vector2", "Raycaster", "Box3", "Color", "AmbientLight", "EventDispatcher", "Vector3", "center", "Vector3", "Object3D", "Mesh", "Color", "DoubleSide", "Object3D", "Color", "DoubleSide", "Mesh", "EventDispatcher", "Vector3", "Box3", "Vector3", "defaultOptions", "Vector3", "Box3", "center", "defaultOptions", "EventDispatcher", "Vector3", "Box3", "Object3D", "Vector3", "Box3", "Vector3", "Object3D", "Object3D", "Box3", "Vector3", "MeshBasicMaterial", "Object3D", "PlaneGeometry", "DoubleSide", "Mesh", "Vector2", "featureCollection", "point", "getCenter", "Object3D", "center", "PlaneGeometry", "MeshBasicMaterial", "DoubleSide", "Mesh", "Vector2", "featureCollection", "point", "getCenter", "Box3", "Object3D", "Vector3", "Object3D", "Vector3", "Box3", "Object3D", "Box3", "Vector3", "center", "EventDispatcher", "Vector3", "EventDispatcher", "Vector3", "point2", "point", "point", "Box3", "Box3", "point", "EventDispatcher", "EventDispatcher", "EventDispatcher", "poi", "Color", "LineBasicMaterial", "MeshStandardMaterial", "MeshBasicMaterial", "ShaderMaterial", "DoubleSide", "LineBasicMaterial", "Color", "MeshStandardMaterial", "MeshBasicMaterial", "center", "ShaderMaterial", "DoubleSide", "Box3", "Vector3", "Vector3", "Box3", "EventDispatcher", "Vector3", "point2", "AmbientLight", "Color", "point", "Vector2", "Raycaster", "center", "Box3", "debounce", "MapTypePolar", "EventDispatcher", "data", "center", "debounce", "dispose"]
7
7
  }