@aibee/crc-bmap 0.0.98 → 0.0.99
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/example/src/main.ts +2 -2
- package/example/vite.config.ts +1 -1
- package/lib/bmap.cjs.min.js +2 -2
- package/lib/bmap.cjs.min.js.map +2 -2
- package/lib/bmap.esm.js +3 -1
- package/lib/bmap.esm.js.map +2 -2
- package/lib/bmap.esm.min.js +5381 -3632
- package/lib/bmap.esm.min.js.map +2 -2
- package/lib/bmap.min.js +2 -2
- package/lib/bmap.min.js.map +2 -2
- package/package.json +1 -1
- package/example/lib/bmap.esm.min.js +0 -5069
- package/example/lib/bmap.esm.min.js.map +0 -7
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../node_modules/.pnpm/three.meshline@1.4.0/node_modules/three.meshline/src/THREE.MeshLine.js", "../../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/utils/events.ts", "../../src/utils/event-name.ts", "../../src/utils/obj-utils.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", "../../src/plugins/base.ts", "../../src/plugins/equipment/equipment.ts", "../../src/api/floor.ts", "inline-worker:__inline-worker", "../../src/plugins/navigation/path.worker.ts", "../../src/plugins/navigation/path.ts", "../../src/plugins/navigation/navigation.ts", "../../src/plugins/split-load/split-load.ts"],
|
|
4
|
-
"sourcesContent": [";(function() {\r\n 'use strict'\r\n\r\n var root = this\r\n\r\n var has_require = typeof require !== 'undefined'\r\n\r\n var THREE = root.THREE || (has_require && require('three'))\r\n if (!THREE) throw new Error('MeshLine requires three.js')\r\n\r\n class MeshLine extends THREE.BufferGeometry {\r\n constructor()\r\n {\r\n super();\r\n this.isMeshLine = true;\r\n this.type = 'MeshLine'\r\n\r\n this.positions = []\r\n\r\n this.previous = []\r\n this.next = []\r\n this.side = []\r\n this.width = []\r\n this.indices_array = []\r\n this.uvs = []\r\n this.counters = []\r\n this._points = []\r\n this._geom = null\r\n\r\n this.widthCallback = null\r\n\r\n // Used to raycast\r\n this.matrixWorld = new THREE.Matrix4()\r\n\r\n Object.defineProperties(this, {\r\n // this is now a bufferGeometry\r\n // add getter to support previous api\r\n geometry: {\r\n enumerable: true,\r\n get: function() {\r\n return this\r\n },\r\n },\r\n geom: {\r\n enumerable: true,\r\n get: function() {\r\n return this._geom\r\n },\r\n set: function(value) {\r\n this.setGeometry(value, this.widthCallback)\r\n },\r\n },\r\n // for declaritive architectures\r\n // to return the same value that sets the points\r\n // eg. this.points = points\r\n // console.log(this.points) -> points\r\n points: {\r\n enumerable: true,\r\n get: function() {\r\n return this._points\r\n },\r\n set: function(value) {\r\n this.setPoints(value, this.widthCallback)\r\n },\r\n },\r\n })\r\n }\r\n }\r\n\r\n MeshLine.prototype.setMatrixWorld = function(matrixWorld) {\r\n this.matrixWorld = matrixWorld\r\n }\r\n\r\n // setting via a geometry is rather superfluous\r\n // as you're creating a unecessary geometry just to throw away\r\n // but exists to support previous api\r\n MeshLine.prototype.setGeometry = function(g, c) {\r\n\t\t// as the input geometry are mutated we store them\r\n\t\t// for later retreival when necessary (declaritive architectures)\r\n\t\tthis._geometry = g;\r\n this.setPoints(g.getAttribute(\"position\").array, c);\r\n }\r\n\r\n MeshLine.prototype.setPoints = function(points, wcb) {\r\n\t\tif (!(points instanceof Float32Array) && !(points instanceof Array)) {\r\n\t\t\tconsole.error(\r\n\t\t\t\t\"ERROR: The BufferArray of points is not instancied correctly.\"\r\n\t\t\t);\r\n\t\t\treturn;\r\n\t\t}\r\n\t\t// as the points are mutated we store them\r\n\t\t// for later retreival when necessary (declaritive architectures)\r\n\t\tthis._points = points;\r\n\t\tthis.widthCallback = wcb;\r\n\t\tthis.positions = [];\r\n\t\tthis.counters = [];\r\n\t\tif (points.length && points[0] instanceof THREE.Vector3) {\r\n\t\t\t// could transform Vector3 array into the array used below\r\n\t\t\t// but this approach will only loop through the array once\r\n\t\t\t// and is more performant\r\n\t\t\tfor (var j = 0; j < points.length; j++) {\r\n\t\t\t\tvar p = points[j];\r\n\t\t\t\tvar c = j / points.length;\r\n\t\t\t\tthis.positions.push(p.x, p.y, p.z);\r\n\t\t\t\tthis.positions.push(p.x, p.y, p.z);\r\n\t\t\t\tthis.counters.push(c);\r\n\t\t\t\tthis.counters.push(c);\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tfor (var j = 0; j < points.length; j += 3) {\r\n\t\t\t\tvar c = j / points.length;\r\n\t\t\t\tthis.positions.push(points[j], points[j + 1], points[j + 2]);\r\n\t\t\t\tthis.positions.push(points[j], points[j + 1], points[j + 2]);\r\n\t\t\t\tthis.counters.push(c);\r\n\t\t\t\tthis.counters.push(c);\r\n\t\t\t}\r\n\t\t}\r\n\t\tthis.process();\r\n }\r\n\r\n function MeshLineRaycast(raycaster, intersects) {\r\n var inverseMatrix = new THREE.Matrix4()\r\n var ray = new THREE.Ray()\r\n var sphere = new THREE.Sphere()\r\n var interRay = new THREE.Vector3()\r\n var geometry = this.geometry\r\n // Checking boundingSphere distance to ray\r\n\r\n if (!geometry.boundingSphere) geometry.computeBoundingSphere()\r\n sphere.copy(geometry.boundingSphere)\r\n sphere.applyMatrix4(this.matrixWorld)\r\n\r\n if (raycaster.ray.intersectSphere(sphere, interRay) === false) {\r\n return\r\n }\r\n\r\n inverseMatrix.copy( this.matrixWorld ).invert();\r\n ray.copy(raycaster.ray).applyMatrix4(inverseMatrix)\r\n\r\n var vStart = new THREE.Vector3()\r\n var vEnd = new THREE.Vector3()\r\n var interSegment = new THREE.Vector3()\r\n var step = this instanceof THREE.LineSegments ? 2 : 1\r\n var index = geometry.index\r\n var attributes = geometry.attributes\r\n\r\n if (index !== null) {\r\n var indices = index.array\r\n var positions = attributes.position.array\r\n var widths = attributes.width.array\r\n\r\n for (var i = 0, l = indices.length - 1; i < l; i += step) {\r\n var a = indices[i]\r\n var b = indices[i + 1]\r\n\r\n vStart.fromArray(positions, a * 3)\r\n vEnd.fromArray(positions, b * 3)\r\n var width = widths[Math.floor(i / 3)] !== undefined ? widths[Math.floor(i / 3)] : 1\r\n var precision = raycaster.params.Line.threshold + (this.material.lineWidth * width) / 2\r\n var precisionSq = precision * precision\r\n\r\n var distSq = ray.distanceSqToSegment(vStart, vEnd, interRay, interSegment)\r\n\r\n if (distSq > precisionSq) continue\r\n\r\n interRay.applyMatrix4(this.matrixWorld) //Move back to world space for distance calculation\r\n\r\n var distance = raycaster.ray.origin.distanceTo(interRay)\r\n\r\n if (distance < raycaster.near || distance > raycaster.far) continue\r\n\r\n intersects.push({\r\n distance: distance,\r\n // What do we want? intersection point on the ray or on the segment??\r\n // point: raycaster.ray.at( distance ),\r\n point: interSegment.clone().applyMatrix4(this.matrixWorld),\r\n index: i,\r\n face: null,\r\n faceIndex: null,\r\n object: this,\r\n })\r\n // make event only fire once\r\n i = l\r\n }\r\n }\r\n }\r\n MeshLine.prototype.raycast = MeshLineRaycast\r\n MeshLine.prototype.compareV3 = function(a, b) {\r\n var aa = a * 6\r\n var ab = b * 6\r\n return (\r\n this.positions[aa] === this.positions[ab] &&\r\n this.positions[aa + 1] === this.positions[ab + 1] &&\r\n this.positions[aa + 2] === this.positions[ab + 2]\r\n )\r\n }\r\n\r\n MeshLine.prototype.copyV3 = function(a) {\r\n var aa = a * 6\r\n return [this.positions[aa], this.positions[aa + 1], this.positions[aa + 2]]\r\n }\r\n\r\n MeshLine.prototype.process = function() {\r\n var l = this.positions.length / 6\r\n\r\n this.previous = []\r\n this.next = []\r\n this.side = []\r\n this.width = []\r\n this.indices_array = []\r\n this.uvs = []\r\n\r\n var w\r\n\r\n var v\r\n // initial previous points\r\n if (this.compareV3(0, l - 1)) {\r\n v = this.copyV3(l - 2)\r\n } else {\r\n v = this.copyV3(0)\r\n }\r\n this.previous.push(v[0], v[1], v[2])\r\n this.previous.push(v[0], v[1], v[2])\r\n\r\n for (var j = 0; j < l; j++) {\r\n // sides\r\n this.side.push(1)\r\n this.side.push(-1)\r\n\r\n // widths\r\n if (this.widthCallback) w = this.widthCallback(j / (l - 1))\r\n else w = 1\r\n this.width.push(w)\r\n this.width.push(w)\r\n\r\n // uvs\r\n this.uvs.push(j / (l - 1), 0)\r\n this.uvs.push(j / (l - 1), 1)\r\n\r\n if (j < l - 1) {\r\n // points previous to poisitions\r\n v = this.copyV3(j)\r\n this.previous.push(v[0], v[1], v[2])\r\n this.previous.push(v[0], v[1], v[2])\r\n\r\n // indices\r\n var n = j * 2\r\n this.indices_array.push(n, n + 1, n + 2)\r\n this.indices_array.push(n + 2, n + 1, n + 3)\r\n }\r\n if (j > 0) {\r\n // points after poisitions\r\n v = this.copyV3(j)\r\n this.next.push(v[0], v[1], v[2])\r\n this.next.push(v[0], v[1], v[2])\r\n }\r\n }\r\n\r\n // last next point\r\n if (this.compareV3(l - 1, 0)) {\r\n v = this.copyV3(1)\r\n } else {\r\n v = this.copyV3(l - 1)\r\n }\r\n this.next.push(v[0], v[1], v[2])\r\n this.next.push(v[0], v[1], v[2])\r\n\r\n // redefining the attribute seems to prevent range errors\r\n // if the user sets a differing number of vertices\r\n if (!this._attributes || this._attributes.position.count !== this.positions.length) {\r\n this._attributes = {\r\n position: new THREE.BufferAttribute(new Float32Array(this.positions), 3),\r\n previous: new THREE.BufferAttribute(new Float32Array(this.previous), 3),\r\n next: new THREE.BufferAttribute(new Float32Array(this.next), 3),\r\n side: new THREE.BufferAttribute(new Float32Array(this.side), 1),\r\n width: new THREE.BufferAttribute(new Float32Array(this.width), 1),\r\n uv: new THREE.BufferAttribute(new Float32Array(this.uvs), 2),\r\n index: new THREE.BufferAttribute(new Uint16Array(this.indices_array), 1),\r\n counters: new THREE.BufferAttribute(new Float32Array(this.counters), 1),\r\n }\r\n } else {\r\n this._attributes.position.copyArray(new Float32Array(this.positions))\r\n this._attributes.position.needsUpdate = true\r\n this._attributes.previous.copyArray(new Float32Array(this.previous))\r\n this._attributes.previous.needsUpdate = true\r\n this._attributes.next.copyArray(new Float32Array(this.next))\r\n this._attributes.next.needsUpdate = true\r\n this._attributes.side.copyArray(new Float32Array(this.side))\r\n this._attributes.side.needsUpdate = true\r\n this._attributes.width.copyArray(new Float32Array(this.width))\r\n this._attributes.width.needsUpdate = true\r\n this._attributes.uv.copyArray(new Float32Array(this.uvs))\r\n this._attributes.uv.needsUpdate = true\r\n this._attributes.index.copyArray(new Uint16Array(this.indices_array))\r\n this._attributes.index.needsUpdate = true\r\n }\r\n\r\n this.setAttribute('position', this._attributes.position)\r\n this.setAttribute('previous', this._attributes.previous)\r\n this.setAttribute('next', this._attributes.next)\r\n this.setAttribute('side', this._attributes.side)\r\n this.setAttribute('width', this._attributes.width)\r\n this.setAttribute('uv', this._attributes.uv)\r\n this.setAttribute('counters', this._attributes.counters)\r\n\r\n this.setIndex(this._attributes.index)\r\n\r\n this.computeBoundingSphere()\r\n this.computeBoundingBox()\r\n }\r\n\r\n function memcpy(src, srcOffset, dst, dstOffset, length) {\r\n var i\r\n\r\n src = src.subarray || src.slice ? src : src.buffer\r\n dst = dst.subarray || dst.slice ? dst : dst.buffer\r\n\r\n src = srcOffset\r\n ? src.subarray\r\n ? src.subarray(srcOffset, length && srcOffset + length)\r\n : src.slice(srcOffset, length && srcOffset + length)\r\n : src\r\n\r\n if (dst.set) {\r\n dst.set(src, dstOffset)\r\n } else {\r\n for (i = 0; i < src.length; i++) {\r\n dst[i + dstOffset] = src[i]\r\n }\r\n }\r\n\r\n return dst\r\n }\r\n\r\n /**\r\n * Fast method to advance the line by one position. The oldest position is removed.\r\n * @param position\r\n */\r\n MeshLine.prototype.advance = function(position) {\r\n var positions = this._attributes.position.array\r\n var previous = this._attributes.previous.array\r\n var next = this._attributes.next.array\r\n var l = positions.length\r\n\r\n // PREVIOUS\r\n memcpy(positions, 0, previous, 0, l)\r\n\r\n // POSITIONS\r\n memcpy(positions, 6, positions, 0, l - 6)\r\n\r\n positions[l - 6] = position.x\r\n positions[l - 5] = position.y\r\n positions[l - 4] = position.z\r\n positions[l - 3] = position.x\r\n positions[l - 2] = position.y\r\n positions[l - 1] = position.z\r\n\r\n // NEXT\r\n memcpy(positions, 6, next, 0, l - 6)\r\n\r\n next[l - 6] = position.x\r\n next[l - 5] = position.y\r\n next[l - 4] = position.z\r\n next[l - 3] = position.x\r\n next[l - 2] = position.y\r\n next[l - 1] = position.z\r\n\r\n this._attributes.position.needsUpdate = true\r\n this._attributes.previous.needsUpdate = true\r\n this._attributes.next.needsUpdate = true\r\n }\r\n\r\n THREE.ShaderChunk['meshline_vert'] = [\r\n '',\r\n THREE.ShaderChunk.logdepthbuf_pars_vertex,\r\n THREE.ShaderChunk.fog_pars_vertex,\r\n '',\r\n 'attribute vec3 previous;',\r\n 'attribute vec3 next;',\r\n 'attribute float side;',\r\n 'attribute float width;',\r\n 'attribute float counters;',\r\n '',\r\n 'uniform vec2 resolution;',\r\n 'uniform float lineWidth;',\r\n 'uniform vec3 color;',\r\n 'uniform float opacity;',\r\n 'uniform float sizeAttenuation;',\r\n '',\r\n 'varying vec2 vUV;',\r\n 'varying vec4 vColor;',\r\n 'varying float vCounters;',\r\n '',\r\n 'vec2 fix( vec4 i, float aspect ) {',\r\n '',\r\n ' vec2 res = i.xy / i.w;',\r\n ' res.x *= aspect;',\r\n '\t vCounters = counters;',\r\n ' return res;',\r\n '',\r\n '}',\r\n '',\r\n 'void main() {',\r\n '',\r\n ' float aspect = resolution.x / resolution.y;',\r\n '',\r\n ' vColor = vec4( color, opacity );',\r\n ' vUV = uv;',\r\n '',\r\n ' mat4 m = projectionMatrix * modelViewMatrix;',\r\n ' vec4 finalPosition = m * vec4( position, 1.0 );',\r\n ' vec4 prevPos = m * vec4( previous, 1.0 );',\r\n ' vec4 nextPos = m * vec4( next, 1.0 );',\r\n '',\r\n ' vec2 currentP = fix( finalPosition, aspect );',\r\n ' vec2 prevP = fix( prevPos, aspect );',\r\n ' vec2 nextP = fix( nextPos, aspect );',\r\n '',\r\n ' float w = lineWidth * width;',\r\n '',\r\n ' vec2 dir;',\r\n ' if( nextP == currentP ) dir = normalize( currentP - prevP );',\r\n ' else if( prevP == currentP ) dir = normalize( nextP - currentP );',\r\n ' else {',\r\n ' vec2 dir1 = normalize( currentP - prevP );',\r\n ' vec2 dir2 = normalize( nextP - currentP );',\r\n ' dir = normalize( dir1 + dir2 );',\r\n '',\r\n ' vec2 perp = vec2( -dir1.y, dir1.x );',\r\n ' vec2 miter = vec2( -dir.y, dir.x );',\r\n ' //w = clamp( w / dot( miter, perp ), 0., 4. * lineWidth * width );',\r\n '',\r\n ' }',\r\n '',\r\n ' //vec2 normal = ( cross( vec3( dir, 0. ), vec3( 0., 0., 1. ) ) ).xy;',\r\n ' vec4 normal = vec4( -dir.y, dir.x, 0., 1. );',\r\n ' normal.xy *= .5 * w;',\r\n ' normal *= projectionMatrix;',\r\n ' if( sizeAttenuation == 0. ) {',\r\n ' normal.xy *= finalPosition.w;',\r\n ' normal.xy /= ( vec4( resolution, 0., 1. ) * projectionMatrix ).xy;',\r\n ' }',\r\n '',\r\n ' finalPosition.xy += normal.xy * side;',\r\n '',\r\n ' gl_Position = finalPosition;',\r\n '',\r\n THREE.ShaderChunk.logdepthbuf_vertex,\r\n THREE.ShaderChunk.fog_vertex && ' vec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );',\r\n THREE.ShaderChunk.fog_vertex,\r\n '}',\r\n ].join('\\n')\r\n\r\n THREE.ShaderChunk['meshline_frag'] = [\r\n '',\r\n THREE.ShaderChunk.fog_pars_fragment,\r\n THREE.ShaderChunk.logdepthbuf_pars_fragment,\r\n '',\r\n 'uniform sampler2D map;',\r\n 'uniform sampler2D alphaMap;',\r\n 'uniform float useMap;',\r\n 'uniform float useAlphaMap;',\r\n 'uniform float useDash;',\r\n 'uniform float dashArray;',\r\n 'uniform float dashOffset;',\r\n 'uniform float dashRatio;',\r\n 'uniform float visibility;',\r\n 'uniform float alphaTest;',\r\n 'uniform vec2 repeat;',\r\n '',\r\n 'varying vec2 vUV;',\r\n 'varying vec4 vColor;',\r\n 'varying float vCounters;',\r\n '',\r\n 'void main() {',\r\n '',\r\n THREE.ShaderChunk.logdepthbuf_fragment,\r\n '',\r\n ' vec4 c = vColor;',\r\n ' if( useMap == 1. ) c *= texture2D( map, vUV * repeat );',\r\n ' if( useAlphaMap == 1. ) c.a *= texture2D( alphaMap, vUV * repeat ).a;',\r\n ' if( c.a < alphaTest ) discard;',\r\n ' if( useDash == 1. ){',\r\n ' c.a *= ceil(mod(vCounters + dashOffset, dashArray) - (dashArray * dashRatio));',\r\n ' }',\r\n ' gl_FragColor = c;',\r\n ' gl_FragColor.a *= step(vCounters, visibility);',\r\n '',\r\n THREE.ShaderChunk.fog_fragment,\r\n '}',\r\n ].join('\\n')\r\n\r\n class MeshLineMaterial extends THREE.ShaderMaterial {\r\n constructor(parameters)\r\n {\r\n super({\r\n uniforms: Object.assign({}, THREE.UniformsLib.fog, {\r\n lineWidth: { value: 1 },\r\n map: { value: null },\r\n useMap: { value: 0 },\r\n alphaMap: { value: null },\r\n useAlphaMap: { value: 0 },\r\n color: { value: new THREE.Color(0xffffff) },\r\n opacity: { value: 1 },\r\n resolution: { value: new THREE.Vector2(1, 1) },\r\n sizeAttenuation: { value: 1 },\r\n dashArray: { value: 0 },\r\n dashOffset: { value: 0 },\r\n dashRatio: { value: 0.5 },\r\n useDash: { value: 0 },\r\n visibility: { value: 1 },\r\n alphaTest: { value: 0 },\r\n repeat: { value: new THREE.Vector2(1, 1) },\r\n }),\r\n\r\n vertexShader: THREE.ShaderChunk.meshline_vert,\r\n\r\n fragmentShader: THREE.ShaderChunk.meshline_frag,\r\n });\r\n this.isMeshLineMaterial = true\r\n this.type = 'MeshLineMaterial'\r\n\r\n Object.defineProperties(this, {\r\n lineWidth: {\r\n enumerable: true,\r\n get: function() {\r\n return this.uniforms.lineWidth.value\r\n },\r\n set: function(value) {\r\n this.uniforms.lineWidth.value = value\r\n },\r\n },\r\n map: {\r\n enumerable: true,\r\n get: function() {\r\n return this.uniforms.map.value\r\n },\r\n set: function(value) {\r\n this.uniforms.map.value = value\r\n },\r\n },\r\n useMap: {\r\n enumerable: true,\r\n get: function() {\r\n return this.uniforms.useMap.value\r\n },\r\n set: function(value) {\r\n this.uniforms.useMap.value = value\r\n },\r\n },\r\n alphaMap: {\r\n enumerable: true,\r\n get: function() {\r\n return this.uniforms.alphaMap.value\r\n },\r\n set: function(value) {\r\n this.uniforms.alphaMap.value = value\r\n },\r\n },\r\n useAlphaMap: {\r\n enumerable: true,\r\n get: function() {\r\n return this.uniforms.useAlphaMap.value\r\n },\r\n set: function(value) {\r\n this.uniforms.useAlphaMap.value = value\r\n },\r\n },\r\n color: {\r\n enumerable: true,\r\n get: function() {\r\n return this.uniforms.color.value\r\n },\r\n set: function(value) {\r\n this.uniforms.color.value = value\r\n },\r\n },\r\n opacity: {\r\n enumerable: true,\r\n get: function() {\r\n return this.uniforms.opacity.value\r\n },\r\n set: function(value) {\r\n this.uniforms.opacity.value = value\r\n },\r\n },\r\n resolution: {\r\n enumerable: true,\r\n get: function() {\r\n return this.uniforms.resolution.value\r\n },\r\n set: function(value) {\r\n this.uniforms.resolution.value.copy(value)\r\n },\r\n },\r\n sizeAttenuation: {\r\n enumerable: true,\r\n get: function() {\r\n return this.uniforms.sizeAttenuation.value\r\n },\r\n set: function(value) {\r\n this.uniforms.sizeAttenuation.value = value\r\n },\r\n },\r\n dashArray: {\r\n enumerable: true,\r\n get: function() {\r\n return this.uniforms.dashArray.value\r\n },\r\n set: function(value) {\r\n this.uniforms.dashArray.value = value\r\n this.useDash = value !== 0 ? 1 : 0\r\n },\r\n },\r\n dashOffset: {\r\n enumerable: true,\r\n get: function() {\r\n return this.uniforms.dashOffset.value\r\n },\r\n set: function(value) {\r\n this.uniforms.dashOffset.value = value\r\n },\r\n },\r\n dashRatio: {\r\n enumerable: true,\r\n get: function() {\r\n return this.uniforms.dashRatio.value\r\n },\r\n set: function(value) {\r\n this.uniforms.dashRatio.value = value\r\n },\r\n },\r\n useDash: {\r\n enumerable: true,\r\n get: function() {\r\n return this.uniforms.useDash.value\r\n },\r\n set: function(value) {\r\n this.uniforms.useDash.value = value\r\n },\r\n },\r\n visibility: {\r\n enumerable: true,\r\n get: function() {\r\n return this.uniforms.visibility.value\r\n },\r\n set: function(value) {\r\n this.uniforms.visibility.value = value\r\n },\r\n },\r\n alphaTest: {\r\n enumerable: true,\r\n get: function() {\r\n return this.uniforms.alphaTest.value\r\n },\r\n set: function(value) {\r\n this.uniforms.alphaTest.value = value\r\n },\r\n },\r\n repeat: {\r\n enumerable: true,\r\n get: function() {\r\n return this.uniforms.repeat.value\r\n },\r\n set: function(value) {\r\n this.uniforms.repeat.value.copy(value)\r\n },\r\n },\r\n })\r\n\r\n this.setValues(parameters)\r\n }\r\n }\r\n\r\n MeshLineMaterial.prototype.copy = function(source) {\r\n THREE.ShaderMaterial.prototype.copy.call(this, source)\r\n\r\n this.lineWidth = source.lineWidth\r\n this.map = source.map\r\n this.useMap = source.useMap\r\n this.alphaMap = source.alphaMap\r\n this.useAlphaMap = source.useAlphaMap\r\n this.color.copy(source.color)\r\n this.opacity = source.opacity\r\n this.resolution.copy(source.resolution)\r\n this.sizeAttenuation = source.sizeAttenuation\r\n this.dashArray.copy(source.dashArray)\r\n this.dashOffset.copy(source.dashOffset)\r\n this.dashRatio.copy(source.dashRatio)\r\n this.useDash = source.useDash\r\n this.visibility = source.visibility\r\n this.alphaTest = source.alphaTest\r\n this.repeat.copy(source.repeat)\r\n\r\n return this\r\n }\r\n\r\n if (typeof exports !== 'undefined') {\r\n if (typeof module !== 'undefined' && module.exports) {\r\n exports = module.exports = {\r\n MeshLine: MeshLine,\r\n MeshLineMaterial: MeshLineMaterial,\r\n MeshLineRaycast: MeshLineRaycast,\r\n }\r\n }\r\n exports.MeshLine = MeshLine\r\n exports.MeshLineMaterial = MeshLineMaterial\r\n exports.MeshLineRaycast = MeshLineRaycast\r\n } else {\r\n root.MeshLine = MeshLine\r\n root.MeshLineMaterial = MeshLineMaterial\r\n root.MeshLineRaycast = MeshLineRaycast\r\n }\r\n}.call(this))\r\n", "import { EventDispatcher, Object3D, Vector3 } from \"three\";\nimport { Context } from \"./context\";\nimport {\n clearTextTexture,\n clearCanvas,\n vector3ToDevice,\n getCenter,\n timeoutPromise,\n Timer,\n Events,\n generatorKeyByObj,\n HooksName\n} from \"./utils\";\nimport { Config, getConfig } from \"./config\";\nimport {\n Floor,\n Graphic,\n HeatmapDataParam,\n ModelOptions,\n PoiOptionsParam,\n} from \"./elements\";\nimport { SvgLine, SvgPolygon } from \"./elements\";\nimport {\n GraphicInfo,\n GraphicOptions,\n PolygonGeometry,\n ResGraphicInfo,\n LoadQuery\n} from \"./types\";\nimport { debounce } from \"lodash\";\nimport { disposeLoader } from \"./utils/model\";\nimport { Plugin } from \"./plugins/base\";\nimport { Equipment } from \"./plugins/equipment/equipment\";\nimport { loadBuildingGround, loadGraphics } from './api'\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 public event = new Events();\n\n timer = new Timer();\n\n plugins: Plugin[] = [];\n\n constructor(\n private container: HTMLElement,\n config: Partial<Config> = {}\n ) {\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 async loadGraphics({\n brand,\n project,\n floor,\n ts,\n resource_type_list,\n }: LoadQuery): Promise<GraphicInfo[]> {\n const data = await loadGraphics({\n brand,\n project,\n floor,\n ts,\n resource_type_list,\n }, this.config)\n return data;\n }\n\n private async loadBuildingGround({\n brand,\n project,\n }: Omit<\n LoadQuery,\n \"floor\" | \"ts\" | \"resource_type_list\"\n >): Promise<GraphicInfo | null> {\n const key = generatorKeyByObj({ brand, project })\n if (this.buildingGroundMap.get(key)) {\n return this.buildingGroundMap.get(key) || null;\n }\n const data = await loadBuildingGround({brand, project }, this.config)\n this.buildingGroundMap.set(key, data);\n return data;\n }\n\n async load({\n brand,\n project,\n floor,\n ts,\n resource_type_list,\n }: LoadQuery) {\n const floorKey = generatorKeyByObj({brand, project, floor, ts, resource_type_list});\n if (this.floorDataMap.has(floorKey)) {\n return this.floorDataMap.get(floorKey);\n }\n const [data, buildGround] = await Promise.all([\n this.loadGraphics({\n brand,\n project,\n floor,\n ts,\n resource_type_list,\n }),\n this.loadBuildingGround({ brand, project }),\n ]);\n const center = buildGround ? getCenter(\n (buildGround.info.geometry as PolygonGeometry).cds[0]\n ) : [0, 0] as [number, number]\n this.transformGraphicData(data, center);\n data.forEach(item => { \n item.info.transformToBuildingGround = !!buildGround;\n })\n if (!this.config.useFloorCache) {\n this.floorDataMap.clear();\n }\n this.floorDataMap.set(floorKey, data);\n return data;\n }\n\n transformGraphicData(data: GraphicInfo[], center: [number, number]) { \n data.forEach((item) => {\n item.info.geometry.coords = JSON.parse(\n JSON.stringify(item.info.geometry.cds)\n );\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 });\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 }\n\n loadEquipment() { \n const equipment = new Equipment(this);\n this.plugins.push(equipment)\n }\n\n use(plugin: Plugin) { \n plugin.bmap = this;\n this.plugins.push(plugin)\n }\n\n createFloor(data: GraphicInfo[]) {\n const curFloor = new Floor(this.context);\n if (!data.length) {\n return { curFloor, graphics: [] };\n }\n const legacyToGraphicMap = new Map<string, Graphic>();\n const graphics: Graphic[] = [];\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 triggerHooks(hooks: HooksName, ...args: any[]) { \n this.event.emit(hooks, ...args)\n }\n\n switchFloor({\n brand,\n project,\n floor,\n ts,\n resource_type_list,\n }: LoadQuery) {\n const floorKey = generatorKeyByObj({\n brand,\n project,\n floor,\n ts,\n resource_type_list,\n });\n const curFloorData = this.floorDataMap.get(floorKey);\n this.context.control.removeEventListener(\"change\", this.onControlChange);\n if (curFloorData) {\n const buildingKey = generatorKeyByObj({ brand, project });\n this.currentBuildGround = this.buildingGroundMap.get(buildingKey) || null;\n const createdFloor = this.createFloor(curFloorData);\n if (createdFloor) {\n this.triggerHooks(HooksName.SWITCH_FLOOR_BEFORE, createdFloor)\n this.context.switchFloor(createdFloor.curFloor);\n this.initialFloorCamera();\n this.triggerHooks(HooksName.SWITCH_FLOOR_AFTER, createdFloor)\n } else {\n console.warn(\"[switchFloor error] [\" + floor + \"] \u697C\u5C42\u6CA1\u6709\u6570\u636E\");\n }\n } else {\n console.warn(\n \"[switchFloor error] \u6CA1\u6709\u8FD9\u4E2A\u697C\u5C42\uFF0C\u8BF7\u5148\u8C03\u7528load\u65B9\u6CD5\u52A0\u8F7D\u697C\u5C42\"\n );\n }\n }\n\n // \u5207\u6362\u697C\u5C42\u540E\u521D\u59CB\u5316\u76F8\u673A\n initialFloorCamera() { \n this.context.cameraBound.setEnable(false);\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 }\n\n onControlChange = () => {\n const {\n camera: { zoom },\n } = 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 {\n facilityAngle = 0,\n facilityXScale = 1,\n facilityYScale = 1,\n } = 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 (\n (this.context.currentFloor?.graphicLayer.children.filter(\n (item) => item instanceof Graphic\n ) as Graphic[]) || []\n );\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(\n ele: { getPosition: () => Vector3 },\n duration: number = 500\n ) {\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(\n ele: { getPosition: () => Vector3 },\n duration: number = 500\n ) {\n return timeoutPromise(new Promise((resolve) => { \n const target = this.context.control.target.clone();\n const position = ele.getPosition();\n this.timer.requestAnimationFrame(() => { \n const {\n clientSize: { width, height },\n camera,\n } = this.context;\n console.log(\"width\", width, height);\n const device = vector3ToDevice(position, camera, width, height);\n const offsetX = device.x - width / 2;\n const v3 = new Vector3();\n v3.setFromMatrixColumn(this.context.camera.matrix, 0);\n v3.normalize();\n v3.multiplyScalar(offsetX / this.context.camera.zoom);\n target.add(v3)\n this.context.setCameraPosition(target, duration).then(resolve)\n })\n }), duration + 500)\n \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(\n this.config.control.defaultAzimuthal,\n time\n );\n await this.changeMapType(this.type, time);\n await this.context.fitCameraToGround(\n this.config.defaultPadding,\n time,\n false\n );\n }\n\n /**\n * \u7F29\u5C0F\u5730\u56FE\n * @param zoom\n * @param duration\n * @returns\n */\n reduceMap(zoom = 0.5, duration = 500) {\n const cameraZoom = this.context.camera.zoom;\n return this.context.setZoom(\n cameraZoom - zoom,\n this.context.control.target,\n duration\n );\n }\n\n /**\n * \u653E\u5927\u5730\u56FE\n * @param zoom\n * @param duration\n * @returns\n */\n enlargeMap(zoom = 0.5, duration = 500) {\n const cameraZoom = this.context.camera.zoom;\n return this.context.setZoom(\n cameraZoom + zoom,\n this.context.control.target,\n duration\n );\n }\n\n onKeydown = (e: KeyboardEvent) => {\n if (this.polarKeys.includes(e.code)) {\n this.context.control.maxPolarAngle = this.config.control.maxPolar;\n this.context.control.minPolarAngle = 0;\n }\n if (this.azimuthalKeys.includes(e.code)) {\n this.context.control.maxAzimuthAngle = Infinity;\n this.context.control.minAzimuthAngle = Infinity;\n }\n };\n\n onKeyUp = (e: KeyboardEvent) => {\n if (this.polarKeys.includes(e.code)) {\n const polar = this.context.control.getPolarAngle();\n this.context.control.maxPolarAngle = polar;\n this.context.control.minPolarAngle = polar;\n }\n if (this.azimuthalKeys.includes(e.code)) {\n const azimuthal = this.context.control.getAzimuthalAngle();\n this.context.control.maxAzimuthAngle = azimuthal;\n this.context.control.minAzimuthAngle = azimuthal;\n }\n };\n\n registryEvent() {\n window.addEventListener(\"keydown\", this.onKeydown);\n window.addEventListener(\"keyup\", this.onKeyUp);\n 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 (\n this.context.currentFloor?.graphicLayer.getGraphicByNodeId(nodeId) || null\n );\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(\n (this.currentBuildGround.info.geometry as PolygonGeometry).cds[0]\n );\n if (options.geometry.type === \"polygon\") {\n options.geometry.coords = JSON.parse(\n JSON.stringify(options.geometry.cds)\n );\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(\n (item) => !item.options.built_in\n );\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.timer.dispose();\n this.plugins.forEach(plugin => plugin.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 '../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[]): [number, number] {\n const features = featureCollection(coordinates.map(item => point(item)))\n const cent = center(features)\n return cent.geometry.coordinates as [number, number]\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}", "type DefaultFn = (...args: any[]) => void;\n\ninterface EventI {\n on(type: string, callback: DefaultFn): void;\n once(type: string, callback: DefaultFn): void;\n off(type: string, callback: DefaultFn): void;\n offAll(): void;\n emit(type: string, ...args: any[]): void;\n}\n\nexport type { EventI }\n\nconst oncePrefix = '__once__'\n\nexport class Events implements EventI {\n events = new Map<string, Set<DefaultFn>>()\n\n on(type: string, callback: DefaultFn) {\n if (typeof callback !== 'function') return undefined\n const events = this.events.get(type)\n if (events) {\n return events.add(callback)\n }\n return this.events.set(type, new Set([callback]))\n }\n\n once(type: string, callback: DefaultFn) {\n if (typeof callback !== 'function') return undefined\n const event = `${oncePrefix}${type}`\n const events = this.events.get(event)\n if (events) {\n return events.add(callback)\n }\n return this.events.set(event, new Set([callback]))\n }\n\n off(type: string, callback: DefaultFn) {\n const events = this.events.get(type)\n const onceEvents = this.events.get(`${oncePrefix}${type}`)\n if (!events && !onceEvents) {\n return\n }\n if (callback === undefined) {\n events?.clear()\n onceEvents?.clear()\n }\n if (events?.has(callback)) {\n events.delete(callback)\n }\n if (onceEvents?.has(callback)) {\n onceEvents.delete(callback)\n }\n }\n\n offAll() {\n this.events.clear()\n }\n\n emit(type: string, ...args: any[]) {\n const events = this.events.get(type)\n const onceEvents = this.events.get(`${oncePrefix}${type}`)\n if (!events && !onceEvents) {\n return\n }\n events?.forEach((fn) => {\n if (typeof fn === 'function') {\n fn(...args)\n }\n })\n onceEvents?.forEach((fn) => {\n if (typeof fn === 'function') {\n fn(...args)\n }\n })\n onceEvents?.clear()\n }\n}\n", "export enum HooksName {\n SWITCH_FLOOR_BEFORE = \"switch_floor_before\",\n SWITCH_FLOOR_AFTER = \"switch_floor_after\",\n}\n", "/**\n * \u751F\u6210\u5BF9\u8C61\u7684key\n * @param obj \n * @returns \n */\nexport function generatorKeyByObj(obj: Record<string, any>) {\n return Object.keys(obj).sort().map(key => `${key}=${obj[key]}`).join(\"&\")\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, max.z);\n const rightTop = new Vector3(max.x, max.y, max.z);\n const rightBottom = new Vector3(max.x, min.y, min.z);\n const leftBottom = new Vector3(min.x, min.y, min.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, (max.z + min.z) / 2);\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 Ray,\n BoxGeometry,\n Line,\n Box3Helper,\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 / 2);\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 // createMesh(pos: Vector3, color = 0xff0000) { \n // const geometry = new BoxGeometry(1, 1, 1)\n // const material = new MeshBasicMaterial({ color })\n // const mesh = new Mesh(geometry, material)\n // mesh.position.copy(pos)\n // this.context.scene.add(mesh)\n // }\n\n // createLine(points: Vector3[], color = 0xff0000) {\n // const material = new LineBasicMaterial({\n // color: color\n // });\n // const geometry = new BufferGeometry().setFromPoints(points);\n // const line = new Line( geometry, material );\n // this.context.scene.add(line)\n // }\n\n getMaxAndMin(pos: Vector3, dir: Vector3) {\n const box = new Box3().setFromObject(this)\n const minOrigin = pos.clone().add(dir.clone().multiplyScalar(1000))\n const raycaster = new Ray(minOrigin, dir.clone().multiplyScalar(-1));\n const min = new Vector3()\n raycaster.intersectBox(box, min);\n const maxOrigin = pos.clone().add(dir.clone().multiplyScalar(-1000))\n const raycaster2 = new Ray(maxOrigin, dir.clone());\n const max = new Vector3()\n raycaster2.intersectBox(box, max);\n return {\n max, min\n }\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 const pos = this.getPosition();\n const dir = new Vector3(-1.0, 0.2, 0.0).normalize()\n const { max: __max, min: _min } = this.getMaxAndMin(pos, dir)\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: __max,\n min: _min\n })\n if (this.options.height <= 0.1) {\n this.material = material;\n return material;\n }\n\n const center = this.getCenter();\n const dir2 = new Vector3(-1.0, 0.2, 1.0).normalize()\n const { max: ___max, min: __min } = this.getMaxAndMin(center, dir2)\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: ___max,\n min: __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 disposed = false\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 if (this.disposed) { return }\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 this.disposed = true\n }\n}", "import { Context } from \"../context\";\nimport { Box3, EventDispatcher, Object3D, Vector3 } from \"three\";\nimport { vector3ToDevice } from \"../utils\";\nimport { debounce } from \"lodash\";\n\ninterface OverlayOptions {\n autoUpdate: boolean;\n appendToBody: boolean;\n autoChangePlacement: boolean;\n}\n\nconst defaultOptions: OverlayOptions = {\n autoUpdate: true,\n appendToBody: false,\n autoChangePlacement: false,\n};\n\ninterface OverlayEventMap {\n \"update-position\": {\n x: number;\n y: number;\n width: number;\n height: number;\n };\n}\n\ntype Placement =\n | \"top\"\n | \"bottom\"\n | \"left\"\n | \"right\"\n | \"leftTop\"\n | \"rightTop\"\n | \"leftBottom\"\n | \"rightBottom\"\n | \"center\";\n\nexport class Overlay extends EventDispatcher<OverlayEventMap> {\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 placement: Placement = \"top\";\n\n observer: MutationObserver | null = null;\n\n constructor(\n private context: Context,\n options: Partial<OverlayOptions> = {}\n ) {\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 initObserver() {\n const observer = new MutationObserver(\n debounce(() => {\n if (this.div) {\n this.usePlacement();\n }\n }, 100)\n );\n observer.observe(this.div, {\n childList: true,\n subtree: true,\n attributes: true,\n });\n this.observer = observer;\n }\n\n getPlacementPosition(): Record<Placement, Vector3> {\n const { max, min } = new Box3().setFromObject(this.element!);\n const centerX = (max.x + min.x) / 2;\n const centerY = (max.y + min.y) / 2;\n return {\n left: new Vector3(min.x, centerY, max.z),\n leftTop: new Vector3(min.x, max.y, max.z),\n top: new Vector3(centerX, max.y, max.z),\n rightTop: new Vector3(max.x, max.y, max.z),\n right: new Vector3(max.x, centerY, max.z),\n rightBottom: new Vector3(max.x, min.y, max.z),\n bottom: new Vector3(centerX, min.y, max.z),\n leftBottom: new Vector3(min.x, min.y, max.z),\n center: new Vector3(centerX, centerY, max.z),\n };\n }\n\n getPlacementScreenPosition(): Record<Placement, { x: number; y: number }> {\n const { width, height } = this.context.clientSize;\n const positions = this.getPlacementPosition();\n return Object.keys(positions).reduce((obj, key) => {\n const { x, y } = vector3ToDevice(\n (positions as any)[key],\n this.context.camera,\n width,\n height\n );\n (obj as any)[key] = { x, y };\n return obj;\n }, {}) as Record<Placement, { x: number; y: number }>;\n }\n\n // \u68C0\u67E5\u662F\u4E0D\u662F\u6EA2\u51FA\u4E86context.container\n // @return true \u8868\u793A\u6CA1\u6709\u6EA2\u51FA\n checkOverflow(\n max: { x: number; y: number },\n min: { x: number; y: number }\n ): boolean {\n const { width, height } = this.context.clientSize;\n return min.x > 0 && max.x < width && min.y < height && max.y > 0;\n }\n\n // \u8BA1\u7B97\u9002\u7528\u7684placement\n getPlacement(): { type: Placement, position: { x: number, y: number } } {\n const { clientWidth, clientHeight } = this.div;\n const positions = this.getPlacementScreenPosition();\n const halfWidth = clientWidth / 2;\n const halfHeight = clientHeight / 2;\n const placements: {\n type: Placement;\n getBox: (\n x: number,\n y: number\n ) => {\n max: { x: number; y: number };\n min: { x: number; y: number };\n };\n }[] = [\n {\n type: \"center\",\n getBox(x: number, y: number) {\n return {\n max: { x: halfWidth + x, y: y - clientHeight },\n min: { x: x - halfWidth, y: y },\n };\n },\n },\n {\n type: \"left\",\n getBox(x, y) {\n return {\n max: { x: x, y: y - halfHeight },\n min: { x: x - clientWidth, y: y + halfHeight },\n };\n },\n },\n {\n type: \"leftTop\",\n getBox(x, y) {\n return {\n max: { x: x, y: y - clientHeight },\n min: { x: x - clientWidth, y: y },\n };\n },\n },\n {\n type: \"top\",\n getBox(x, y) {\n return {\n max: { x: x + halfWidth, y: y - clientHeight },\n min: { x: x - halfWidth, y: y },\n };\n },\n },\n {\n type: \"rightTop\",\n getBox(x, y) {\n return {\n max: { x: x + clientWidth, y: y - clientHeight },\n min: { x: x, y: y },\n };\n },\n },\n {\n type: \"right\",\n getBox(x, y) {\n return {\n max: { x: x + clientWidth, y: y - halfHeight },\n min: { x: x, y: y + halfHeight },\n };\n },\n },\n {\n type: \"rightBottom\",\n getBox(x, y) {\n return {\n max: { x: x + clientWidth, y: y },\n min: { x: x, y: y + clientHeight },\n };\n },\n },\n {\n type: \"bottom\",\n getBox(x, y) {\n return {\n max: { x: x + halfWidth, y: y },\n min: { x: x - halfWidth, y: y + clientHeight },\n };\n },\n },\n {\n type: \"leftBottom\",\n getBox(x, y) {\n return {\n max: { x: x, y: y },\n min: { x: x - clientWidth, y: y + halfHeight },\n };\n },\n },\n ];\n for (let i = 0; i < placements.length; i++) {\n const placement = placements[i];\n const position = positions[placement.type];\n const { max, min } = placement.getBox(position.x, position.y);\n if (this.checkOverflow(max, min)) {\n return {\n type: placement.type,\n position,\n };\n }\n }\n return {\n type: \"center\",\n position: positions.center\n };\n }\n\n initDiv() {\n const div = document.createElement(\"div\");\n div.style.position = \"absolute\";\n return div;\n }\n\n usePlacement() {\n const placement = this.getPlacement();\n this.div.className = `overlay_${placement.type}`;\n this._updatePosition(placement.position.x, placement.position.y)\n }\n\n bindElement(element: Object3D) {\n this.element = element;\n if (this.options.autoChangePlacement) {\n this.initObserver();\n // TODO\n // this.usePlacement();\n }\n this.onUpdate();\n }\n\n unBindElement() {\n this.element = undefined;\n }\n\n setVisible(visible: boolean, display = \"block\") {\n if (visible === this.visible) {\n return;\n }\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(x: number, y: number) { \n this.clientPos = { x, y };\n const { width, height, x: clientX, y: clientY } = this.context.clientSize;\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 updatePosition(force = false) {\n const vector = this.getPosition();\n const { width, height, x: clientX, y: clientY } = this.context.clientSize;\n const { x, y } = vector3ToDevice(\n vector,\n this.context.camera,\n width,\n height\n );\n if (this.clientPos.x === x && this.clientPos.y === y && !force) {\n return;\n }\n this._updatePosition(x, y)\n }\n\n onUpdate = () => {\n if (this.options.autoChangePlacement) { \n this.usePlacement();\n } else {\n this.updatePosition();\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.unRegistryEvent();\n this.unBindElement();\n this.observer?.disconnect();\n this.div?.remove();\n this.div = null as unknown as HTMLDivElement;\n }\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 name: string = \"\";\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 {\n Color,\n LineBasicMaterial,\n MeshStandardMaterial,\n MeshBasicMaterial,\n ShaderMaterial,\n Vector3,\n DoubleSide\n} 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 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 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({\n gradualColor,\n center,\n maxValue,\n opacity,\n direction,\n max,\n min,\n }: ShaderMaterialOptions) {\n const key = `${gradualColor.toString()}-${vectorToString(\n center\n )}-${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 lineVec = uMax - uMin; // \u7EBF\u6BB5AB\u7684\u65B9\u5411\u5411\u91CF\n vec3 AP = position - uMin; // \u5411\u91CFAP\n float t = dot(AP, lineVec) / dot(lineVec, lineVec); // \u53C2\u6570t\n t = clamp(t, 0.0, 1.0); // \u9650\u5236t\u5728[0, 1]\u8303\u56F4\u5185\uFF0C\u786E\u4FDD\u6700\u77ED\u8DDD\u79BB\u5728\u7EBF\u6BB5AB\u4E0A\n \n vec3 closestPoint = uMin + t * lineVec; // \u6700\u77ED\u8DDD\u79BB\u70B9\u7684\u4F4D\u7F6E\n vec3 vecAP = closestPoint - uMin; // \u5411\u91CFAP'\n float distance = length(vecAP);\n float maxLen = length(lineVec);\n\n vec3 direction = normalize(uDirection);\n float gradient = dot(normalize(normal), normalize(uDirection));\n vec3 currentPosition = position - center;\n // float colorFactor = (dot(direction, currentPosition) / maxValue) * 0.5 + 0.5;\n float colorFactor = distance / maxLen;\n\n vColor = mix(uColor, uGradualColor, 1.0 - t);\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 equipmentList: 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 equipmentList: \"/api/inception-map/equipment/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}", "import { BMap } from \"../bmap\";\n\nexport class Plugin {\n\n bmap: BMap;\n\n constructor(bmap: BMap) {\n this.bmap = bmap;\n }\n\n dispose() {}\n \n}", "import { BMap } from \"../../bmap\";\nimport { Plugin } from \"../base\";\nimport { HooksName } from \"../../utils\";\nimport { Graphic } from \"../../elements\";\n\ninterface EquipmentData {\n equipment_id: string;\n equipment_name: string;\n equipment_icon: string;\n}\n\nexport class Equipment extends Plugin {\n equipmentList: EquipmentData[] = [];\n\n equipmentMap: Map<string, EquipmentData> = new Map();\n\n constructor(bmap: BMap) {\n super(bmap);\n this.fetchEquipment();\n this.bmap.event.on(HooksName.SWITCH_FLOOR_AFTER, this.onSwitchFloor);\n }\n\n async fetchEquipment() {\n const {\n apiDomain,\n apiPath: { equipmentList },\n apiInfo,\n } = this.bmap.config;\n const url = `${apiDomain}${equipmentList}`;\n await fetch(url, apiInfo)\n .then((res) => res.json())\n .then((res) => res.data)\n .then((res: EquipmentData[]) => {\n this.equipmentList = res;\n this.equipmentMap = new Map(\n res.map((item) => [item.equipment_id, item])\n );\n });\n if (this.bmap.context.currentFloor) {\n this.changeGraphicToEquipment(\n this.bmap.context.currentFloor.graphicLayer.children as Graphic[]\n );\n }\n }\n\n onSwitchFloor = (floor: { graphics: Graphic[] }) => {\n if (!this.equipmentList.length) {\n return;\n }\n this.changeGraphicToEquipment(floor.graphics);\n };\n\n getGraphicEquipment(graphic: Graphic) {\n return graphic.userData.data.info.userData.equipment;\n }\n\n changeGraphicToEquipment(graphics: Graphic[]) {\n graphics\n .filter((graphic) => {\n const equipment = this.getGraphicEquipment(graphic);\n return equipment && this.equipmentMap.has(equipment);\n })\n .forEach((graphic) => {\n const equipment = this.equipmentMap.get(\n this.getGraphicEquipment(graphic)\n );\n const poi = this.bmap.createGraphicPoi(graphic, {\n icon: equipment?.equipment_icon,\n built_in: true,\n icon_size: [14, 14],\n });\n });\n }\n\n dispose() {\n this.bmap.event.off(HooksName.SWITCH_FLOOR_AFTER, this.onSwitchFloor);\n }\n}\n", "import { Config } from \"../config\";\nimport { GraphicInfo, ResGraphicInfo, LoadQuery } from \"../types\";\n\ntype BuildingGroundQuery = Omit<LoadQuery, \"floor\" | \"ts\" | \"resource_type_list\">;\n\n/**\n * \u8BF7\u6C42\u697C\u680B\u5730\u9762\n */\nexport async function loadBuildingGround({ brand, project }: BuildingGroundQuery, config: Config): Promise<GraphicInfo | null> {\n const {\n apiDomain,\n apiPath: { floorRange },\n apiInfo,\n } = config;\n const url = `${apiDomain}${floorRange}?brand=${brand}&project=${project}&phase=${project}&building=${project}`;\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 return data;\n}\n\n/**\n * \u52A0\u8F7D\u56FE\u5143\n * @param param0 \n * @param config \n * @returns \n */\nexport async function loadGraphics({\n brand,\n project,\n floor,\n ts,\n resource_type_list,\n}: LoadQuery, config: Config): Promise<GraphicInfo[]> {\n const {\n apiDomain,\n apiPath: { floorGraphic },\n apiInfo,\n } = config;\n const url = `${apiDomain}${floorGraphic}?brand=${brand}&project=${project}&phase=${project}&building=${project}&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", "\nexport default function inlineWorker(scriptText) {\n let blob = new Blob([scriptText], {type: 'text/javascript'});\n let url = URL.createObjectURL(blob);\n let worker = new Worker(url);\n URL.revokeObjectURL(url);\n return worker;\n}\n", "import inlineWorker from '__inline-worker'\nexport default function Worker() {\n return inlineWorker(\"self.onmessage=o=>{console.log(o.data),s(\\\"\\\"),t(\\\"\\\",\\\"\\\")};function s(o){console.log(o),self.postMessage(\\\"project\\\")}function t(o,e){console.log(o,e),self.postMessage(\\\"getPath\\\")}var g=()=>{};export{g as default};\\n\");\n}\n", "import {\n Mesh,\n Object3D,\n TextureLoader,\n Color,\n Vector2,\n NormalBlending,\n RepeatWrapping,\n Texture,\n AxesHelper,\n} from \"three\";\nimport { Navigation } from \"./navigation\";\n// @ts-ignore\nimport { MeshLine, MeshLineMaterial } from \"three.meshline\";\nimport Arrow from \"./arrow.png\";\n\ninterface PathConfig {\n texture_url: string;\n lineWidth: number;\n color: number;\n}\n\nconst defaultConfig: PathConfig = {\n texture_url: Arrow,\n lineWidth: 16,\n color: 0x668bff,\n};\n\nexport class Path extends Object3D {\n mesh: Mesh | null = null;\n\n geometry: MeshLine | null = null;\n\n material: MeshLineMaterial | null = null;\n\n texture: Texture | null = null;\n\n config: PathConfig = defaultConfig;\n\n constructor(\n public navigation: Navigation,\n config?: Partial<PathConfig>\n ) {\n super();\n this.config = Object.assign({}, defaultConfig, config);\n }\n\n loadTexture(url: string): Promise<Texture> {\n return new Promise((r, j) => {\n new TextureLoader().load(url, r, undefined, j);\n });\n }\n\n transformPoints(points: [number, number, number][]): number[] {\n // \u9664\u4E86\u9996\u5C3E \u4E2D\u95F4\u7684\u70B9\u90FD\u9700\u8981\u4E24\u4EFD\n const _points = [];\n for (let i = 0; i < points.length; i++) {\n if (i === 0 || i === points.length - 1) {\n _points.push(...points[i]);\n } else {\n _points.push(...points[i], ...points[i]);\n }\n }\n return _points;\n }\n\n updatePoints(points: [number, number, number][]) {\n const _points = this.transformPoints(points);\n if (this.geometry) {\n this.geometry.setPoints(_points);\n }\n }\n\n async create(points: [number, number, number][]) {\n const lineGeometry = (this.geometry = new MeshLine());\n this.updatePoints(points);\n\n if (!this.texture) {\n const texture = this.texture = await this.loadTexture(this.config.texture_url);\n texture.wrapS = texture.wrapT = RepeatWrapping;\n texture.repeat.y = 10;\n }\n\n const material = (this.material = new MeshLineMaterial({\n useMap: true,\n color: new Color(this.config.color),\n transparent: true,\n resolution: new Vector2(\n this.navigation.bmap.context.clientSize.width,\n this.navigation.bmap.context.clientSize.height\n ),\n depthTest: false,\n sizeAttenuation: false,\n lineWidth: this.config.lineWidth,\n map: this.texture,\n blending: NormalBlending,\n }));\n // \u751F\u6210\u6A21\u578B\n const mesh = (this.mesh = new Mesh(lineGeometry, material));\n this.add(mesh);\n this.navigation.bmap.context.scene.add(new AxesHelper(100))\n return mesh;\n }\n\n dispose() {\n this.clear();\n this.geometry?.dispose();\n this.material?.dispose();\n this.texture?.dispose();\n }\n}\n", "import { BMap } from \"../../bmap\";\nimport { Plugin } from \"../base\";\n// @ts-ignore\nimport PathWorker from \"./path.worker\";\nimport { Path } from \"./path\";\nimport { Vector3, CatmullRomCurve3, Vector2, SplineCurve } from \"three\";\n\nenum EndPoint {\n // \u7535\u68AF\n elevator = 0,\n}\n\nexport type PathData = {\n floor: string;\n points: [number, number][];\n endType: EndPoint;\n}[];\n\nexport class Navigation extends Plugin {\n // worker_url = window.URL.createObjectURL(\n // new Blob([workerCode], { type: \"text/javascript\" })\n // );\n\n path: Path | null = null;\n\n worker: any = PathWorker()\n\n constructor(bmap: BMap) {\n super(bmap);\n console.log(this.worker);\n this.worker.postMessage(\"initial\");\n this.worker.onmessage = (e: any) => {\n console.log(\"onmessage\", e.data);\n };\n\n this.renderPath();\n }\n\n // \u89C4\u5212\u8DEF\u7EBF\n // \u8DEF\u7EBF\u7684\u683C\u5F0F\n // \u591A\u697C\u5C42\n // [{floor: \"xx\", points: [number, number][], endType: '\u7EC8\u70B9\u7684\u7C7B\u578B\uFF0C\u7535\u68AF/\u6276\u68AF/\u7EC8\u70B9' }, {}]\n // \u6BCF\u4E2A\u697C\u5C42\u4E2D \u6BCF\u4E2A\u70B9\u7684z\u8F74\u7684\u5750\u6807\u4ECE\u697C\u5C42\u7684\u5730\u9762\u9AD8\u5EA6\u83B7\u53D6\n\n fetchRoad() {\n // \u8BF7\u6C42\u8DEF\u7EBF \u8003\u8651\u5728webwork\u4E2D\u8BF7\u6C42\u8DEF\u7EBF\n }\n\n renderPath() {\n const points: [number, number][] = [\n [-5, 0],\n [-5, 10],\n [5, 10],\n [5, 0],\n ];\n const cPath: [number, number, number][] = this.catmullRomCurve3(points).map(([x, y]) => [x, y, 15]);\n if (this.path) {\n this.path.updatePoints(cPath);\n } else {\n this.path = new Path(this, {});\n this.path.create(cPath);\n this.bmap.context.scene.add(this.path);\n }\n }\n\n catmullRomCurve3(points: [number, number][]) {\n return points\n // \u521B\u5EFACatmull-Rom\u66F2\u7EBF\n var curve = new SplineCurve(\n points.map(([x, y]) => new Vector2(x, y))\n );\n\n // \u83B7\u53D6\u66F2\u7EBF\u4E0A\u7684\u9876\u70B9\n var numPoints = points.length * 10;\n var path = curve.getPoints(numPoints);\n return path.map(({ x, y }) => [x, y]);\n }\n\n dispose() {\n this.worker.terminate();\n // window.URL.revokeObjectURL(this.worker_url);\n this.path?.dispose();\n }\n}\n", "import { loadGraphics } from \"../../api\";\nimport { Graphic } from \"../../elements\";\nimport { GraphicInfo, LoadQuery } from \"../../types\";\nimport { HooksName, generatorKeyByObj } from \"../../utils\";\nimport { Plugin } from \"../base\";\n\ntype LoadGraphicQuery = Omit<LoadQuery, \"resource_type_list\">;\n\nexport class SplitLoad extends Plugin {\n cacheData = new Map<string, GraphicInfo[]>();\n\n async load(query: LoadQuery): Promise<GraphicInfo[]> {\n const cacheKey = generatorKeyByObj(query);\n if (this.cacheData.has(cacheKey)) {\n return this.cacheData.get(cacheKey)!;\n }\n console.time(\"floor/get\u8BF7\u6C42\" + query.resource_type_list)\n const data = await loadGraphics(query, this.bmap.config);\n console.timeEnd(\"floor/get\u8BF7\u6C42\" + query.resource_type_list)\n this.bmap.transformGraphicData(data, [0, 0]);\n data.forEach((item) => (item.info.transformToBuildingGround = false));\n this.cacheData.set(cacheKey, data);\n return data;\n }\n\n isSameFloor(query: LoadGraphicQuery) {\n return this.bmap.context.currentFloor?.name === generatorKeyByObj(query);\n }\n\n switchFloorByData(data: GraphicInfo[], query: LoadGraphicQuery) {\n if (!this.isSameFloor(query)) {\n // \u9700\u8981\u5207\u6362\u697C\u5C42\n const floorName = generatorKeyByObj(query);\n const { curFloor, graphics } = this.bmap.createFloor(data);\n curFloor.name = floorName;\n const graphicMap = new Map<string, GraphicInfo>();\n data.forEach((graphicInfo) => {\n graphicMap.set(graphicInfo.element_uuid, graphicInfo);\n })\n curFloor.userData.graphicMap = graphicMap;\n this.bmap.triggerHooks(HooksName.SWITCH_FLOOR_BEFORE, { curFloor, graphics })\n this.bmap.context.switchFloor(curFloor);\n this.bmap.initialFloorCamera();\n this.bmap.triggerHooks(HooksName.SWITCH_FLOOR_AFTER, { curFloor, graphics })\n } else {\n if (!data.length) {\n return;\n }\n const curFloor = this.bmap.context.currentFloor!;\n const legacyToGraphicMap = curFloor.userData.legacyToGraphicMap;\n const graphicMap = curFloor.userData.graphicMap;\n const graphics: Graphic[] = [];\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 graphicMap.set(item.element_uuid, item);\n }\n this.bmap.triggerHooks(HooksName.SWITCH_FLOOR_BEFORE, { curFloor, graphics })\n this.bmap.initialFloorCamera();\n this.bmap.triggerHooks(HooksName.SWITCH_FLOOR_AFTER, { curFloor, graphics })\n }\n }\n\n filterData(data: GraphicInfo[], query: LoadGraphicQuery) {\n if (!this.isSameFloor(query)) {\n // \u65B0\u7684\u697C\u5C42\u6570\u636E\n return data;\n }\n // \u8981\u548C\u5DF2\u6709\u7684\u697C\u5C42\u6570\u636E\u505A\u7ED3\u5408\n const graphicMap = this.bmap.context.currentFloor!.userData.graphicMap;\n return data.filter((graphic) => !graphicMap.has(graphic.element_uuid));\n }\n\n private async switchFloorByStoreData(query: LoadGraphicQuery) {\n const storeData = await this.load({ ...query, resource_type_list: \"6\" });\n const filterData = this.filterData(storeData, query);\n this.switchFloorByData(filterData, query);\n }\n\n private async switchFloorByOtherData(query: LoadGraphicQuery) {\n const otherData = await this.load({\n ...query,\n resource_type_list: \"1,2,3,4\",\n });\n const filterData = this.filterData(otherData, query);\n this.switchFloorByData(filterData, query);\n }\n\n async changeFloor(query: LoadGraphicQuery) {\n await Promise.all([\n this.switchFloorByStoreData(query),\n this.switchFloorByOtherData(query),\n ]);\n return Array.from(this.bmap.context.currentFloor!.userData.graphicMap.values());\n }\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["MeshLine", "MeshLineMaterial", "EventDispatcher", "Vector3", "canvas", "ctx", "point", "target", "loader", "gltf", "HooksName", "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", "debounce", "debounce", "MeshBasicMaterial", "Object3D", "PlaneGeometry", "DoubleSide", "Mesh", "Vector2", "featureCollection", "point", "getCenter", "center", "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", "center", "Box3", "Vector3", "Vector3", "Box3", "EventDispatcher", "Vector3", "point2", "AmbientLight", "Color", "point", "Vector2", "Raycaster", "center", "Box3", "debounce", "data", "MapTypePolar", "EventDispatcher", "center", "Vector3", "debounce", "dispose", "Worker", "import_three", "Mesh", "Object3D", "Color", "Vector2", "defaultConfig", "Path", "Object3D", "Color", "Vector2", "Mesh", "Vector2", "Worker", "Path", "Vector2"]
|
|
7
|
-
}
|