@aibee/crc-bmap 0.0.113 → 0.0.115

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/lib/bmap.esm.js CHANGED
@@ -454,7 +454,7 @@ var require_Graph = __commonJS({
454
454
  });
455
455
 
456
456
  // src/bmap.ts
457
- import { EventDispatcher as EventDispatcher7, Vector3 as Vector314 } from "three";
457
+ import { EventDispatcher as EventDispatcher7, Vector3 as Vector315 } from "three";
458
458
 
459
459
  // src/utils/timer.ts
460
460
  var Timer = class {
@@ -1619,7 +1619,7 @@ function toWebWorker(obj) {
1619
1619
  import {
1620
1620
  EventDispatcher as EventDispatcher6,
1621
1621
  Box2,
1622
- Vector3 as Vector313,
1622
+ Vector3 as Vector314,
1623
1623
  Vector2 as Vector25,
1624
1624
  Raycaster as Raycaster3,
1625
1625
  Box3 as Box38,
@@ -2380,8 +2380,13 @@ var Poi = class extends EventDispatcher2 {
2380
2380
  }
2381
2381
  });
2382
2382
  this.addEventListener("change-texts", ({ value }) => {
2383
- this.div.removeChild(this.textDiv);
2384
- this.addText();
2383
+ const div = this.textDiv;
2384
+ if (div) {
2385
+ const text = this.initText();
2386
+ this.div.replaceChild(text, div);
2387
+ } else {
2388
+ this.addText();
2389
+ }
2385
2390
  this.resetSize();
2386
2391
  });
2387
2392
  this.addEventListener("change-opacity", ({ value }) => {
@@ -2608,20 +2613,141 @@ var Poi = class extends EventDispatcher2 {
2608
2613
  };
2609
2614
 
2610
2615
  // src/elements/floor.ts
2611
- import { Box3 as Box35, Group as Group2, Object3D as Object3D9, Vector3 as Vector38 } from "three";
2616
+ import { Box3 as Box35, Object3D as Object3D8, Vector3 as Vector38 } from "three";
2617
+
2618
+ // src/elements/heatmap.ts
2619
+ import {
2620
+ MeshBasicMaterial as MeshBasicMaterial2,
2621
+ Object3D as Object3D5,
2622
+ PlaneGeometry as PlaneGeometry2,
2623
+ Texture,
2624
+ DoubleSide as DoubleSide3,
2625
+ Mesh as Mesh3,
2626
+ Matrix3,
2627
+ Vector2 as Vector24
2628
+ } from "three";
2629
+ import { create } from "@mars3d/heatmap.js";
2630
+ import { featureCollection as featureCollection2, point as point2, bbox, center as getCenter2 } from "@turf/turf";
2631
+ var HeatmapElement = class extends Object3D5 {
2632
+ constructor(context) {
2633
+ super();
2634
+ this.context = context;
2635
+ this.div = document.createElement("div");
2636
+ }
2637
+ heatmap;
2638
+ div;
2639
+ plane;
2640
+ clearHeatmap() {
2641
+ if (this.div.firstChild) {
2642
+ this.div.removeChild(this.div.firstChild);
2643
+ }
2644
+ this.heatmap = void 0;
2645
+ }
2646
+ loadData(data) {
2647
+ this.clearHeatmap();
2648
+ const { width, height, leftTop, center: center2 } = this.getBox(data);
2649
+ this.heatmap = create({
2650
+ width,
2651
+ height,
2652
+ container: this.div,
2653
+ ...this.context.config.heatMap
2654
+ });
2655
+ this.heatmap.setData(this.transformData(data, leftTop));
2656
+ this.initPlane(width, height);
2657
+ this.position.set(center2[0], center2[1], this.position.z);
2658
+ }
2659
+ initPlane(width, height) {
2660
+ if (this.plane) {
2661
+ this.remove(this.plane);
2662
+ }
2663
+ const geometry = new PlaneGeometry2(width, height);
2664
+ const texture = new Texture(this.div.firstChild);
2665
+ texture.needsUpdate = true;
2666
+ const material = new MeshBasicMaterial2({
2667
+ transparent: true,
2668
+ side: DoubleSide3,
2669
+ map: texture
2670
+ });
2671
+ material.needsUpdate = true;
2672
+ this.plane = new Mesh3(geometry, material);
2673
+ this.add(this.plane);
2674
+ }
2675
+ getTransMatrix({ x, y }) {
2676
+ return new Matrix3().makeScale(1, -1).multiply(new Matrix3().makeTranslation(0 - x, 0 - y));
2677
+ }
2678
+ /**
2679
+ * 所有点的坐标减去左上角从00点开始画canvas
2680
+ * @param data
2681
+ * @param leftTop
2682
+ * @returns
2683
+ */
2684
+ transformData(data, leftTop) {
2685
+ const matrix = this.getTransMatrix(leftTop);
2686
+ const $data = data.data.map((item) => {
2687
+ const vector = new Vector24(item.x, item.y).applyMatrix3(matrix);
2688
+ return {
2689
+ x: vector.x,
2690
+ y: vector.y,
2691
+ value: item.value
2692
+ };
2693
+ });
2694
+ return {
2695
+ data: $data,
2696
+ max: data.max,
2697
+ min: data.min
2698
+ };
2699
+ }
2700
+ getBox(data) {
2701
+ const features = featureCollection2(data.data.map((item) => point2([item.x, item.y])));
2702
+ const box = bbox(features);
2703
+ const width = box[2] - box[0];
2704
+ const height = box[3] - box[1];
2705
+ const leftTop = { x: box[0], y: box[3] };
2706
+ const center2 = getCenter2(features);
2707
+ return { width, height, leftTop, center: center2.geometry.coordinates };
2708
+ }
2709
+ dispose() {
2710
+ this.div = null;
2711
+ this.heatmap = void 0;
2712
+ }
2713
+ };
2714
+
2715
+ // src/elements/model.ts
2716
+ import { Object3D as Object3D6, Vector3 as Vector36 } from "three";
2717
+ var Model = class extends Object3D6 {
2718
+ constructor(context, options) {
2719
+ super();
2720
+ this.context = context;
2721
+ this.options = options;
2722
+ this.position.copy(options.position || new Vector36(0, 0, 0));
2723
+ this.loadModel();
2724
+ }
2725
+ model = null;
2726
+ async loadModel() {
2727
+ const object = await loadModel(this.options.modelUrl);
2728
+ object.scene.rotation.set(Math.PI / 2, Math.PI / 2, 0);
2729
+ this.add(object.scene);
2730
+ this.model = object;
2731
+ }
2732
+ dispose() {
2733
+ dispose(this);
2734
+ this.model = null;
2735
+ }
2736
+ };
2612
2737
 
2613
2738
  // src/layer/graphic-layer.ts
2614
- import { Box3 as Box33, Vector3 as Vector36 } from "three";
2739
+ import { Box3 as Box34, Vector3 as Vector37 } from "three";
2615
2740
 
2616
2741
  // src/layer/layer.ts
2617
- import { Object3D as Object3D5 } from "three";
2618
- var Layer = class extends Object3D5 {
2742
+ import { Object3D as Object3D7 } from "three";
2743
+ var Layer = class extends Object3D7 {
2619
2744
  constructor(context) {
2620
2745
  super();
2621
2746
  this.context = context;
2622
2747
  }
2623
2748
  dispose() {
2624
2749
  dispose(this);
2750
+ this.children.forEach((item) => item.dispose?.());
2625
2751
  this.clear();
2626
2752
  }
2627
2753
  };
@@ -2633,8 +2759,8 @@ var GraphicLayer = class extends Layer {
2633
2759
  super(context);
2634
2760
  }
2635
2761
  getCenter() {
2636
- const box = new Box33().setFromObject(this);
2637
- return box.getCenter(new Vector36());
2762
+ const box = new Box34().setFromObject(this);
2763
+ return box.getCenter(new Vector37());
2638
2764
  }
2639
2765
  createGraphic(options) {
2640
2766
  const graphic = new Graphic(this.context, options);
@@ -2818,215 +2944,32 @@ var PoiLayer = class extends Layer {
2818
2944
  }
2819
2945
  };
2820
2946
 
2821
- // src/elements/heatmap.ts
2822
- import {
2823
- MeshBasicMaterial as MeshBasicMaterial2,
2824
- Object3D as Object3D6,
2825
- PlaneGeometry as PlaneGeometry2,
2826
- Texture,
2827
- DoubleSide as DoubleSide3,
2828
- Mesh as Mesh3,
2829
- Matrix3,
2830
- Vector2 as Vector24
2831
- } from "three";
2832
- import { create } from "@mars3d/heatmap.js";
2833
- import { featureCollection as featureCollection2, point as point2, bbox, center as getCenter2 } from "@turf/turf";
2834
- var HeatmapElement = class extends Object3D6 {
2835
- constructor(context) {
2836
- super();
2837
- this.context = context;
2838
- this.div = document.createElement("div");
2839
- }
2840
- heatmap;
2841
- div;
2842
- plane;
2843
- clearHeatmap() {
2844
- if (this.div.firstChild) {
2845
- this.div.removeChild(this.div.firstChild);
2846
- }
2847
- this.heatmap = void 0;
2848
- }
2849
- loadData(data) {
2850
- this.clearHeatmap();
2851
- const { width, height, leftTop, center: center2 } = this.getBox(data);
2852
- this.heatmap = create({
2853
- width,
2854
- height,
2855
- container: this.div,
2856
- ...this.context.config.heatMap
2857
- });
2858
- this.heatmap.setData(this.transformData(data, leftTop));
2859
- this.initPlane(width, height);
2860
- this.position.set(center2[0], center2[1], this.position.z);
2861
- }
2862
- initPlane(width, height) {
2863
- if (this.plane) {
2864
- this.remove(this.plane);
2865
- }
2866
- const geometry = new PlaneGeometry2(width, height);
2867
- const texture = new Texture(this.div.firstChild);
2868
- texture.needsUpdate = true;
2869
- const material = new MeshBasicMaterial2({
2870
- transparent: true,
2871
- side: DoubleSide3,
2872
- map: texture
2873
- });
2874
- material.needsUpdate = true;
2875
- this.plane = new Mesh3(geometry, material);
2876
- this.add(this.plane);
2877
- }
2878
- getTransMatrix({ x, y }) {
2879
- return new Matrix3().makeScale(1, -1).multiply(new Matrix3().makeTranslation(0 - x, 0 - y));
2880
- }
2881
- /**
2882
- * 所有点的坐标减去左上角从00点开始画canvas
2883
- * @param data
2884
- * @param leftTop
2885
- * @returns
2886
- */
2887
- transformData(data, leftTop) {
2888
- const matrix = this.getTransMatrix(leftTop);
2889
- const $data = data.data.map((item) => {
2890
- const vector = new Vector24(item.x, item.y).applyMatrix3(matrix);
2891
- return {
2892
- x: vector.x,
2893
- y: vector.y,
2894
- value: item.value
2895
- };
2896
- });
2897
- return {
2898
- data: $data,
2899
- max: data.max,
2900
- min: data.min
2901
- };
2902
- }
2903
- getBox(data) {
2904
- const features = featureCollection2(data.data.map((item) => point2([item.x, item.y])));
2905
- const box = bbox(features);
2906
- const width = box[2] - box[0];
2907
- const height = box[3] - box[1];
2908
- const leftTop = { x: box[0], y: box[3] };
2909
- const center2 = getCenter2(features);
2910
- return { width, height, leftTop, center: center2.geometry.coordinates };
2911
- }
2912
- dispose() {
2913
- this.div = null;
2914
- this.heatmap = void 0;
2915
- }
2916
- };
2917
-
2918
- // src/elements/model.ts
2919
- import { Box3 as Box34, Object3D as Object3D7, Vector3 as Vector37 } from "three";
2920
- var Model = class extends Object3D7 {
2921
- constructor(context, options) {
2922
- super();
2923
- this.context = context;
2924
- this.options = options;
2925
- this.position.copy(options.position || new Vector37(0, 0, 0));
2926
- this.loadModel();
2927
- }
2928
- poi = null;
2929
- model = null;
2930
- async loadModel() {
2931
- const object = await loadModel(this.options.modelUrl);
2932
- object.scene.rotation.set(Math.PI / 2, Math.PI / 2, 0);
2933
- this.add(object.scene);
2934
- this.model = object;
2935
- this.initPoi();
2936
- }
2937
- initPoi() {
2938
- if (!this.options.icon) {
2939
- return;
2940
- }
2941
- const poi = this.context.currentFloor?.addPoi({
2942
- icon: this.options.icon,
2943
- icon_size: this.options.icon_size,
2944
- built_in: true,
2945
- level: 0
2946
- });
2947
- this.poi = poi || null;
2948
- if (this.model && poi) {
2949
- poi.position = new Box34().setFromObject(this).getCenter(new Vector37());
2950
- }
2951
- }
2952
- dispose() {
2953
- dispose(this);
2954
- this.model = null;
2955
- if (this.poi) {
2956
- this.context.currentFloor?.poiLayer.removePoi(this.poi);
2957
- this.poi = null;
2958
- }
2959
- }
2960
- };
2961
-
2962
- // src/elements/ground-texture.ts
2963
- import { Euler, Mesh as Mesh4, Object3D as Object3D8, PlaneGeometry as PlaneGeometry3 } from "three";
2964
- var defaultOptions4 = {
2965
- uuid: "",
2966
- url: "",
2967
- name: "",
2968
- angleX: 0,
2969
- angleY: 0,
2970
- angleZ: 0,
2971
- width: 0,
2972
- height: 0,
2973
- center: [0, 0],
2974
- opacity: 1,
2975
- visible: true
2976
- };
2977
- var GroundTexture = class extends Object3D8 {
2978
- constructor(context, options) {
2979
- super();
2980
- this.context = context;
2981
- this.options = proxyOptions(
2982
- { ...defaultOptions4, ...options },
2983
- this
2984
- );
2985
- this.init();
2986
- }
2987
- options;
2988
- mesh;
2989
- async init() {
2990
- const { width, height, center: center2, url, opacity, angleX, angleY, angleZ } = this.options;
2991
- const planeGeometry = new PlaneGeometry3(width, height);
2992
- const planeMaterial = await this.context.materialFactory.createGroundTextureMaterial({
2993
- url,
2994
- opacity
2995
- });
2996
- const mesh = new Mesh4(planeGeometry, planeMaterial);
2997
- this.mesh = mesh;
2998
- this.mesh.position.set(center2[0], center2[1], 0);
2999
- mesh.setRotationFromEuler(new Euler(angleX, angleY, angleZ));
3000
- this.add(mesh);
3001
- }
3002
- dispose() {
3003
- this.mesh?.geometry.dispose();
3004
- this.clear();
3005
- }
3006
- };
3007
-
3008
2947
  // src/elements/floor.ts
3009
- var Floor = class extends Object3D9 {
2948
+ var Floor = class extends Object3D8 {
3010
2949
  constructor(context) {
3011
2950
  super();
3012
2951
  this.context = context;
3013
2952
  this.graphicLayer = new GraphicLayer(this.context);
3014
2953
  this.poiLayer = new PoiLayer(this.context);
2954
+ this.wallLayer = new Layer(this.context);
2955
+ this.textureLayer = new Layer(this.context);
3015
2956
  this.groundUpper.add(this.graphicLayer);
3016
2957
  this.groundUpper.add(this.poiLayer);
3017
- this.groundUpper.add(this.groundTextures);
2958
+ this.groundUpper.add(this.wallLayer);
2959
+ this.groundUpper.add(this.textureLayer);
3018
2960
  this.add(this.groundUpper);
3019
2961
  this.add(this.models);
3020
2962
  }
3021
2963
  graphicLayer;
3022
2964
  poiLayer;
2965
+ wallLayer;
2966
+ textureLayer;
3023
2967
  grounds = /* @__PURE__ */ new Set();
3024
2968
  shadow = new Shadow();
3025
2969
  heatmap;
3026
- groundUpper = new Object3D9();
3027
- models = new Object3D9();
2970
+ groundUpper = new Object3D8();
2971
+ models = new Object3D8();
3028
2972
  modelMap = /* @__PURE__ */ new Map();
3029
- groundTextures = new Group2();
3030
2973
  groundMaxHeight = 0;
3031
2974
  name = "";
3032
2975
  key = "";
@@ -3079,10 +3022,6 @@ var Floor = class extends Object3D9 {
3079
3022
  addPoi(poiOptions) {
3080
3023
  return this.poiLayer.createPoi(poiOptions);
3081
3024
  }
3082
- addGroundTexture(options) {
3083
- const groundTexture = new GroundTexture(this.context, options);
3084
- this.groundTextures.add(groundTexture);
3085
- }
3086
3025
  addHeatmap(data) {
3087
3026
  if (!this.heatmap) {
3088
3027
  this.heatmap = new HeatmapElement(this.context);
@@ -3110,9 +3049,9 @@ var Floor = class extends Object3D9 {
3110
3049
  this.shadow.dispose();
3111
3050
  this.graphicLayer.dispose();
3112
3051
  this.poiLayer.dispose();
3052
+ this.wallLayer.dispose();
3053
+ this.textureLayer.dispose();
3113
3054
  this.grounds.forEach((ground) => ground.dispose());
3114
- this.groundTextures.children.forEach((groundTexture) => groundTexture.dispose());
3115
- this.groundTextures.clear();
3116
3055
  this.heatmap?.dispose();
3117
3056
  this.groundUpper.clear();
3118
3057
  this.models.children.forEach((model) => model.dispose());
@@ -3511,6 +3450,154 @@ var SelectBox = class extends BaseSvg {
3511
3450
  }
3512
3451
  };
3513
3452
 
3453
+ // src/elements/wall.ts
3454
+ import { BufferGeometry as BufferGeometry2, ExtrudeGeometry as ExtrudeGeometry2, LineSegments as LineSegments2, Mesh as Mesh4, Object3D as Object3D9, Vector3 as Vector310 } from "three";
3455
+ import { mergeGeometries } from "three/examples/jsm/utils/BufferGeometryUtils";
3456
+ var Wall = class extends Object3D9 {
3457
+ constructor(context, options) {
3458
+ super();
3459
+ this.context = context;
3460
+ this.options = options;
3461
+ if (!options.length) {
3462
+ return;
3463
+ }
3464
+ this.init();
3465
+ }
3466
+ geometry;
3467
+ material;
3468
+ lineMaterial;
3469
+ lineGeometry;
3470
+ Mesh;
3471
+ LineMesh;
3472
+ initGeometry() {
3473
+ const geometries = this.options.map((option) => {
3474
+ const shape = initShape(
3475
+ option.geometry.coords[0],
3476
+ option.geometry.coords.slice(1)
3477
+ );
3478
+ const geometry = new ExtrudeGeometry2(shape, {
3479
+ steps: 1,
3480
+ bevelEnabled: false,
3481
+ depth: option.height,
3482
+ curveSegments: 4
3483
+ });
3484
+ return geometry;
3485
+ });
3486
+ this.geometry = mergeGeometries(geometries);
3487
+ }
3488
+ initMaterial() {
3489
+ const { fillColor, fillOpacity, height } = this.options[0];
3490
+ const material = this.context.materialFactory.createMeshBasicMaterial({
3491
+ color: fillColor,
3492
+ opacity: fillOpacity
3493
+ });
3494
+ const material1 = this.context.materialFactory.createMeshBasicMaterial({
3495
+ color: darkenColor(fillColor),
3496
+ opacity: fillOpacity
3497
+ });
3498
+ this.material = [material, material1];
3499
+ return [material, material1];
3500
+ }
3501
+ initLineMaterial() {
3502
+ const { strokeColor, strokeOpacity } = this.options[0];
3503
+ const lineMaterial = this.context.materialFactory.createLineMaterial({
3504
+ color: strokeColor,
3505
+ opacity: strokeOpacity
3506
+ });
3507
+ this.lineMaterial = lineMaterial;
3508
+ return lineMaterial;
3509
+ }
3510
+ getBorderPoints(option) {
3511
+ const { height, deltaHeight, geometry } = option;
3512
+ const points = [];
3513
+ const _height = height + (deltaHeight || 0);
3514
+ const { coords } = geometry;
3515
+ for (let j = 0; j < coords.length; j++) {
3516
+ const curCds = coords[j];
3517
+ for (let i = 0; i < curCds.length; i++) {
3518
+ const cur = curCds[i];
3519
+ const next = i + 1 === curCds.length ? curCds[0] : curCds[i + 1];
3520
+ points.push(new Vector310(cur[0], cur[1], _height));
3521
+ points.push(new Vector310(next[0], next[1], _height));
3522
+ }
3523
+ }
3524
+ return points;
3525
+ }
3526
+ initLineGeometry() {
3527
+ const geometries = this.options.map((option) => {
3528
+ const points = this.getBorderPoints(option);
3529
+ return new BufferGeometry2().setFromPoints(points);
3530
+ });
3531
+ this.lineGeometry = mergeGeometries(geometries);
3532
+ }
3533
+ createBorder() {
3534
+ const line = new LineSegments2(this.lineGeometry, this.lineMaterial);
3535
+ this.LineMesh = line;
3536
+ this.add(line);
3537
+ return line;
3538
+ }
3539
+ init() {
3540
+ this.initGeometry();
3541
+ this.initMaterial();
3542
+ const mesh = new Mesh4(this.geometry, this.material);
3543
+ this.add(mesh);
3544
+ this.initLineMaterial();
3545
+ this.initLineGeometry();
3546
+ this.createBorder();
3547
+ }
3548
+ dispose() {
3549
+ this.geometry?.dispose();
3550
+ this.lineGeometry?.dispose();
3551
+ this.clear();
3552
+ }
3553
+ };
3554
+
3555
+ // src/elements/ground-texture.ts
3556
+ import { Euler, Mesh as Mesh5, Object3D as Object3D10, PlaneGeometry as PlaneGeometry3 } from "three";
3557
+ var defaultOptions4 = {
3558
+ uuid: "",
3559
+ url: "",
3560
+ name: "",
3561
+ angleX: 0,
3562
+ angleY: 0,
3563
+ angleZ: 0,
3564
+ width: 0,
3565
+ height: 0,
3566
+ center: [0, 0],
3567
+ opacity: 1,
3568
+ visible: true
3569
+ };
3570
+ var GroundTexture = class extends Object3D10 {
3571
+ constructor(context, options) {
3572
+ super();
3573
+ this.context = context;
3574
+ this.options = proxyOptions(
3575
+ { ...defaultOptions4, ...options },
3576
+ this
3577
+ );
3578
+ this.init();
3579
+ }
3580
+ options;
3581
+ mesh;
3582
+ async init() {
3583
+ const { width, height, center: center2, url, opacity, angleX, angleY, angleZ } = this.options;
3584
+ const planeGeometry = new PlaneGeometry3(width, height);
3585
+ const planeMaterial = await this.context.materialFactory.createGroundTextureMaterial({
3586
+ url,
3587
+ opacity
3588
+ });
3589
+ const mesh = new Mesh5(planeGeometry, planeMaterial);
3590
+ this.mesh = mesh;
3591
+ this.mesh.position.set(center2[0], center2[1], 0);
3592
+ mesh.setRotationFromEuler(new Euler(angleX, angleY, angleZ));
3593
+ this.add(mesh);
3594
+ }
3595
+ dispose() {
3596
+ this.mesh?.geometry.dispose();
3597
+ this.clear();
3598
+ }
3599
+ };
3600
+
3514
3601
  // src/operations/selection/box-selection.ts
3515
3602
  import { Frustum } from "three";
3516
3603
  var BoxSelection = class extends BaseSvg {
@@ -3871,9 +3958,9 @@ var HoverHelper = class extends EventDispatcher5 {
3871
3958
  // src/factory/material.ts
3872
3959
  import {
3873
3960
  Color as Color4,
3874
- LineBasicMaterial as LineBasicMaterial2,
3961
+ LineBasicMaterial as LineBasicMaterial3,
3875
3962
  MeshStandardMaterial as MeshStandardMaterial2,
3876
- MeshBasicMaterial as MeshBasicMaterial4,
3963
+ MeshBasicMaterial as MeshBasicMaterial5,
3877
3964
  ShaderMaterial as ShaderMaterial2,
3878
3965
  DoubleSide as DoubleSide4
3879
3966
  } from "three";
@@ -3897,7 +3984,7 @@ var MaterialFactory = class {
3897
3984
  if (this.lineMaterialMap.has(key)) {
3898
3985
  return this.lineMaterialMap.get(key);
3899
3986
  }
3900
- const lineMaterial = new LineBasicMaterial2({
3987
+ const lineMaterial = new LineBasicMaterial3({
3901
3988
  color: new Color4(color).convertLinearToSRGB(),
3902
3989
  transparent: true,
3903
3990
  opacity
@@ -3925,7 +4012,7 @@ var MaterialFactory = class {
3925
4012
  if (this.meshBasicMaterialMap.has(key)) {
3926
4013
  return this.meshBasicMaterialMap.get(key);
3927
4014
  }
3928
- const material = new MeshBasicMaterial4({
4015
+ const material = new MeshBasicMaterial5({
3929
4016
  color,
3930
4017
  transparent: true,
3931
4018
  opacity,
@@ -4028,7 +4115,7 @@ var MaterialFactory = class {
4028
4115
  return this.groundTextureMaterialMap.get(key);
4029
4116
  }
4030
4117
  const texture = await this.context.textureFactory.getTexture(url);
4031
- const material = new MeshBasicMaterial4({
4118
+ const material = new MeshBasicMaterial5({
4032
4119
  map: texture,
4033
4120
  transparent: true,
4034
4121
  opacity
@@ -4062,7 +4149,7 @@ var MaterialFactory = class {
4062
4149
  };
4063
4150
 
4064
4151
  // src/utils/camera-bound.ts
4065
- import { Box3 as Box37, Vector3 as Vector312 } from "three";
4152
+ import { Box3 as Box37, Vector3 as Vector313 } from "three";
4066
4153
  var CameraBound = class {
4067
4154
  constructor(context) {
4068
4155
  this.context = context;
@@ -4070,9 +4157,9 @@ var CameraBound = class {
4070
4157
  this.changePrevCamera();
4071
4158
  }
4072
4159
  prevCamera = {
4073
- position: new Vector312(),
4160
+ position: new Vector313(),
4074
4161
  zoom: 1,
4075
- target: new Vector312()
4162
+ target: new Vector313()
4076
4163
  };
4077
4164
  enable = true;
4078
4165
  setEnable(enable) {
@@ -4105,16 +4192,17 @@ var CameraBound = class {
4105
4192
  this.context.removeEventListener("control-change", this.onCameraChange);
4106
4193
  }
4107
4194
  getCurFloorScreenPosition() {
4108
- if (!this.context.currentFloor) {
4195
+ const floors = this.context.scene.children.filter((el) => el instanceof Floor);
4196
+ if (!floors.length) {
4109
4197
  return null;
4110
4198
  }
4111
- const box = new Box37().setFromObject(this.context.currentFloor.groundUpper);
4112
- const { camera, container: { clientWidth: w, clientHeight: h } } = this.context;
4199
+ const box = new Box37().setFromObject(this.context.scene);
4200
+ const { camera, clientSize: { width: w, height: h } } = this.context;
4113
4201
  const { min, max } = box;
4114
4202
  const lb = vector3ToDevice(min, camera, w, h);
4115
4203
  const rt = vector3ToDevice(max, camera, w, h);
4116
- const lt = vector3ToDevice(new Vector312(min.x, max.y, max.z), camera, w, h);
4117
- const rb = vector3ToDevice(new Vector312(max.x, min.y, min.z), camera, w, h);
4204
+ const lt = vector3ToDevice(new Vector313(min.x, max.y, max.z), camera, w, h);
4205
+ const rb = vector3ToDevice(new Vector313(max.x, min.y, min.z), camera, w, h);
4118
4206
  const left = Math.min(lb.x, rt.x, lt.x, rb.x);
4119
4207
  const right = Math.max(lb.x, rt.x, lt.x, rb.x);
4120
4208
  const top = Math.min(lb.y, rt.y, lt.y, rb.y);
@@ -4129,9 +4217,23 @@ var CameraBound = class {
4129
4217
  checkDistanceToScreenEdge({ left, right, top, bottom }) {
4130
4218
  const { width, height } = this.context.clientSize;
4131
4219
  const [pt, pr, pb, pl] = this.context.config.cameraBound.padding;
4132
- return left <= pl && width - right <= pr && top <= pt && height - bottom <= pb;
4220
+ const checkedRight = right >= pl;
4221
+ const checkedLeft = width - left >= pr;
4222
+ const checkedTop = height - top >= pb;
4223
+ const checkedBottom = bottom >= pt;
4224
+ return checkedRight && checkedLeft && checkedTop && checkedBottom;
4133
4225
  }
4134
4226
  onCameraChange = () => {
4227
+ const bound = this.getCurFloorScreenPosition();
4228
+ if (bound) {
4229
+ const { left, right, top, bottom } = bound;
4230
+ const isInBound = this.checkDistanceToScreenEdge({ left, right, top, bottom });
4231
+ if (isInBound) {
4232
+ this.changePrevCamera();
4233
+ } else {
4234
+ this.backToPrevCamera();
4235
+ }
4236
+ }
4135
4237
  };
4136
4238
  dispose() {
4137
4239
  this.unRegistryEvent();
@@ -4230,7 +4332,7 @@ var Context = class extends EventDispatcher6 {
4230
4332
  /**
4231
4333
  * 获取两个点之间的像素数
4232
4334
  */
4233
- getRatio(point1 = new Vector313(0, 0, 0), point22 = new Vector313(100, 0, 0)) {
4335
+ getRatio(point1 = new Vector314(0, 0, 0), point22 = new Vector314(100, 0, 0)) {
4234
4336
  const { clientWidth, clientHeight } = this.container;
4235
4337
  const device1 = vector3ToDevice(point1, this.camera, clientWidth, clientHeight);
4236
4338
  const device2 = vector3ToDevice(point22, this.camera, clientWidth, clientHeight);
@@ -4431,7 +4533,7 @@ var Context = class extends EventDispatcher6 {
4431
4533
  );
4432
4534
  }
4433
4535
  getCameraLookAt() {
4434
- return new Vector313().subVectors(this.control.target, this.camera.position);
4536
+ return new Vector314().subVectors(this.control.target, this.camera.position);
4435
4537
  }
4436
4538
  /**
4437
4539
  * 按照一个中心点设置相机的放大缩小
@@ -4486,10 +4588,10 @@ var Context = class extends EventDispatcher6 {
4486
4588
  const boundingBox = new Box38().setFromObject(object);
4487
4589
  this.setPolarAngle(polar, 0);
4488
4590
  const { max, min } = boundingBox;
4489
- const leftTop = new Vector313(min.x, max.y, max.z);
4490
- const rightTop = new Vector313(max.x, max.y, max.z);
4491
- const rightBottom = new Vector313(max.x, min.y, min.z);
4492
- const leftBottom = new Vector313(min.x, min.y, min.z);
4591
+ const leftTop = new Vector314(min.x, max.y, max.z);
4592
+ const rightTop = new Vector314(max.x, max.y, max.z);
4593
+ const rightBottom = new Vector314(max.x, min.y, min.z);
4594
+ const leftBottom = new Vector314(min.x, min.y, min.z);
4493
4595
  const leftTop2d = vector3ToDevice(leftTop, this.camera, width, height);
4494
4596
  const rightTop2d = vector3ToDevice(rightTop, this.camera, width, height);
4495
4597
  const leftBottom2d = vector3ToDevice(leftBottom, this.camera, width, height);
@@ -4504,7 +4606,7 @@ var Context = class extends EventDispatcher6 {
4504
4606
  const xScale = (width - right - left) / size.x;
4505
4607
  const yScale = (height - top - bottom) / size.y;
4506
4608
  const scale = Math.min(xScale, yScale);
4507
- const center2 = new Vector313((max.x + min.x) / 2, (max.y + min.y) / 2, (max.z + min.z) / 2);
4609
+ const center2 = new Vector314((max.x + min.x) / 2, (max.y + min.y) / 2, (max.z + min.z) / 2);
4508
4610
  return { zoom: scale * this.camera.zoom, center: center2 };
4509
4611
  }
4510
4612
  /**
@@ -4964,6 +5066,7 @@ var BMap = class extends EventDispatcher7 {
4964
5066
  this.context.control.addEventListener("change", this.onControlChange);
4965
5067
  this.onControlChange();
4966
5068
  this.context.cameraBound.setEnable(true);
5069
+ this.context.cameraBound.changePrevCamera();
4967
5070
  }
4968
5071
  onControlChange = () => {
4969
5072
  const {
@@ -5054,7 +5157,7 @@ var BMap = class extends EventDispatcher7 {
5054
5157
  } = this.context;
5055
5158
  const device = vector3ToDevice(position, camera, width, height);
5056
5159
  const offsetX = device.x - width / 2;
5057
- const v3 = new Vector314();
5160
+ const v3 = new Vector315();
5058
5161
  v3.setFromMatrixColumn(this.context.camera.matrix, 0);
5059
5162
  v3.normalize();
5060
5163
  v3.multiplyScalar(offsetX / this.context.camera.zoom);
@@ -5427,24 +5530,24 @@ function Worker2() {
5427
5530
 
5428
5531
  // src/plugins/navigation/path.ts
5429
5532
  import {
5430
- Mesh as Mesh5,
5431
- Object3D as Object3D12,
5533
+ Mesh as Mesh6,
5534
+ Object3D as Object3D13,
5432
5535
  TextureLoader as TextureLoader2,
5433
5536
  Color as Color7,
5434
5537
  Vector2 as Vector27,
5435
- Vector3 as Vector316,
5538
+ Vector3 as Vector317,
5436
5539
  NormalBlending,
5437
5540
  RepeatWrapping
5438
5541
  } from "three";
5439
5542
 
5440
5543
  // src/external/meshLine.js
5441
5544
  import {
5442
- BufferGeometry as BufferGeometry2,
5545
+ BufferGeometry as BufferGeometry3,
5443
5546
  Matrix4,
5444
- Vector3 as Vector315,
5547
+ Vector3 as Vector316,
5445
5548
  Ray as Ray2,
5446
5549
  Sphere,
5447
- LineSegments as LineSegments2,
5550
+ LineSegments as LineSegments3,
5448
5551
  BufferAttribute,
5449
5552
  ShaderChunk,
5450
5553
  ShaderMaterial as ShaderMaterial3,
@@ -5452,7 +5555,7 @@ import {
5452
5555
  Color as Color6,
5453
5556
  Vector2 as Vector26
5454
5557
  } from "three";
5455
- var MeshLine = class extends BufferGeometry2 {
5558
+ var MeshLine = class extends BufferGeometry3 {
5456
5559
  constructor() {
5457
5560
  super();
5458
5561
  this.isMeshLine = true;
@@ -5521,7 +5624,7 @@ MeshLine.prototype.setPoints = function(points, wcb) {
5521
5624
  this.widthCallback = wcb;
5522
5625
  this.positions = [];
5523
5626
  this.counters = [];
5524
- if (points.length && points[0] instanceof Vector315) {
5627
+ if (points.length && points[0] instanceof Vector316) {
5525
5628
  for (var j = 0; j < points.length; j++) {
5526
5629
  var p = points[j];
5527
5630
  var c = j / points.length;
@@ -5545,7 +5648,7 @@ function MeshLineRaycast(raycaster, intersects) {
5545
5648
  var inverseMatrix = new Matrix4();
5546
5649
  var ray = new Ray2();
5547
5650
  var sphere = new Sphere();
5548
- var interRay = new Vector315();
5651
+ var interRay = new Vector316();
5549
5652
  var geometry = this.geometry;
5550
5653
  if (!geometry.boundingSphere) geometry.computeBoundingSphere();
5551
5654
  sphere.copy(geometry.boundingSphere);
@@ -5555,10 +5658,10 @@ function MeshLineRaycast(raycaster, intersects) {
5555
5658
  }
5556
5659
  inverseMatrix.copy(this.matrixWorld).invert();
5557
5660
  ray.copy(raycaster.ray).applyMatrix4(inverseMatrix);
5558
- var vStart = new Vector315();
5559
- var vEnd = new Vector315();
5560
- var interSegment = new Vector315();
5561
- var step = this instanceof LineSegments2 ? 2 : 1;
5661
+ var vStart = new Vector316();
5662
+ var vEnd = new Vector316();
5663
+ var interSegment = new Vector316();
5664
+ var step = this instanceof LineSegments3 ? 2 : 1;
5562
5665
  var index = geometry.index;
5563
5666
  var attributes = geometry.attributes;
5564
5667
  if (index !== null) {
@@ -5611,8 +5714,8 @@ MeshLine.prototype.getDistance = function(i) {
5611
5714
  let maxLength = 0;
5612
5715
  for (let k = 0; k < i; k++) {
5613
5716
  const index = 6 * k;
5614
- const p0 = new Vector315(this.positions[index], this.positions[index + 1], this.positions[index + 2]);
5615
- const p1 = new Vector315(this.positions[index + 6], this.positions[index + 7], this.positions[index + 8]);
5717
+ const p0 = new Vector316(this.positions[index], this.positions[index + 1], this.positions[index + 2]);
5718
+ const p1 = new Vector316(this.positions[index + 6], this.positions[index + 7], this.positions[index + 8]);
5616
5719
  const distance = p0.distanceTo(p1);
5617
5720
  maxLength += distance;
5618
5721
  }
@@ -6075,7 +6178,7 @@ var defaultConfig2 = {
6075
6178
  lineWidth: 8,
6076
6179
  color: 16777215
6077
6180
  };
6078
- var Path2 = class extends Object3D12 {
6181
+ var Path2 = class extends Object3D13 {
6079
6182
  constructor(navigation, config) {
6080
6183
  super();
6081
6184
  this.navigation = navigation;
@@ -6124,7 +6227,7 @@ var Path2 = class extends Object3D12 {
6124
6227
  }
6125
6228
  } = this;
6126
6229
  const screenPoints = points.map(
6127
- ([x, y]) => vector3ToDevice(new Vector316(x, y, 0), camera, width, height)
6230
+ ([x, y]) => vector3ToDevice(new Vector317(x, y, 0), camera, width, height)
6128
6231
  ).map(({ x, y }) => [x, y]);
6129
6232
  const pointLength = getPathLength(screenPoints);
6130
6233
  return pointLength / 32;
@@ -6180,7 +6283,7 @@ var Path2 = class extends Object3D12 {
6180
6283
  blending: NormalBlending,
6181
6284
  repeat: new Vector27(this.getRepeat(), 1)
6182
6285
  });
6183
- const mesh = this.mesh = new Mesh5(lineGeometry, material);
6286
+ const mesh = this.mesh = new Mesh6(lineGeometry, material);
6184
6287
  this.add(mesh);
6185
6288
  return mesh;
6186
6289
  }
@@ -6574,7 +6677,304 @@ var SplitLoad = class extends Plugin {
6574
6677
  return Array.from(this.bmap.context.currentFloor.userData.graphicMap.values());
6575
6678
  }
6576
6679
  };
6680
+
6681
+ // src/plugins/mul-floors/mul-floors.ts
6682
+ import { Group as Group4 } from "three";
6683
+ var MulFloors = class extends Plugin {
6684
+ poiLayer;
6685
+ floors = [];
6686
+ group = new Group4();
6687
+ constructor(bmap) {
6688
+ super(bmap);
6689
+ this.poiLayer = new PoiLayer(bmap.context);
6690
+ }
6691
+ show(floors) {
6692
+ let height = floors[0].userData.height;
6693
+ floors.forEach((floor) => {
6694
+ floor.poiLayer.pois.forEach((poi) => {
6695
+ this.poiLayer.pushPoi(poi);
6696
+ });
6697
+ floor.poiLayer.pois.length = 0;
6698
+ floor.poiLayer.dispose();
6699
+ floor.position.z = height;
6700
+ height += floor.userData.height;
6701
+ });
6702
+ const { scene, currentFloor } = this.bmap.context;
6703
+ if (currentFloor) {
6704
+ scene.remove(currentFloor);
6705
+ currentFloor.dispose();
6706
+ }
6707
+ this.group.add(this.poiLayer, ...floors);
6708
+ scene.add(this.group);
6709
+ this.floors = floors;
6710
+ }
6711
+ hide() {
6712
+ const { scene } = this.bmap.context;
6713
+ scene.remove(this.group);
6714
+ this.poiLayer.clear(true);
6715
+ this.floors.forEach((floor) => {
6716
+ floor.dispose();
6717
+ });
6718
+ this.floors = [];
6719
+ this.group.clear();
6720
+ }
6721
+ fitCamera() {
6722
+ const { context, config, type } = this.bmap;
6723
+ context.cameraBound.setEnable(false);
6724
+ context.control.minZoom = 0;
6725
+ context.control.maxZoom = Infinity;
6726
+ context.camera.zoom = 1;
6727
+ context.setAzimuthalAngle(config.control.defaultAzimuthal, 0);
6728
+ context.setPolarAngle(config.control.defaultPolar, 0);
6729
+ context.fitCameraToObject(this.group, void 0, 0);
6730
+ const basicZoom = context.camera.zoom;
6731
+ context.control.minZoom = basicZoom;
6732
+ context.control.maxZoom = basicZoom * 25;
6733
+ if (type === "3d") {
6734
+ context.fitCameraToObject(this.group, config.defaultPadding, 0, false);
6735
+ }
6736
+ this.bmap.basicZoom = context.camera.zoom;
6737
+ context.control.addEventListener(
6738
+ "change",
6739
+ this.bmap.onControlChange.bind(this.bmap)
6740
+ );
6741
+ this.bmap.onControlChange();
6742
+ context.cameraBound.setEnable(true);
6743
+ }
6744
+ dispose() {
6745
+ this.poiLayer.dispose();
6746
+ this.floors.forEach((item) => item.dispose());
6747
+ this.floors = [];
6748
+ }
6749
+ };
6750
+
6751
+ // src/utils/index-db.ts
6752
+ var _db;
6753
+ function createDb(database = "aibee_map") {
6754
+ return new Promise((resolve, reject) => {
6755
+ if (_db) {
6756
+ return resolve(_db);
6757
+ }
6758
+ const request = indexedDB.open(database);
6759
+ request.onupgradeneeded = function(event) {
6760
+ _db = event.target.result;
6761
+ resolve(_db);
6762
+ };
6763
+ request.onsuccess = (event) => {
6764
+ _db = event.target.result;
6765
+ };
6766
+ request.onerror = (event) => {
6767
+ reject(event);
6768
+ };
6769
+ });
6770
+ }
6771
+ function createStore(storeName, db = _db) {
6772
+ if (!db) {
6773
+ return;
6774
+ }
6775
+ if (!db.objectStoreNames.contains(storeName)) {
6776
+ db.createObjectStore(storeName, { keyPath: "key" });
6777
+ }
6778
+ }
6779
+
6780
+ // src/loader/AibeeLoader/zstd.worker.ts
6781
+ function Worker3() {
6782
+ return inlineWorker('var L=Object.defineProperty;var k=(g,A,Q)=>A in g?L(g,A,{enumerable:!0,configurable:!0,writable:!0,value:Q}):g[A]=Q;var s=(g,A,Q)=>k(g,typeof A!="symbol"?A+"":A,Q);function a(g,A){return new Promise((Q,I)=>{let B=new XMLHttpRequest;B.open("GET",g,!0),Object.keys(A.headers||{}).forEach(C=>{B.setRequestHeader(C,A.headers[C])}),A.responseType&&(B.responseType=A.responseType),B.onload=()=>{if(B.status>=200&&B.status<300)if(A.responseType==="arraybuffer")Q(B.response);else try{let C=JSON.parse(B.responseText);Q(C)}catch(C){I(C)}else I(B.statusText)},B.onerror=()=>{I(B.statusText)},B.send()})}function F(g){return g.replace(/[A-Z]/g,A=>"_"+A.toLowerCase()).replace(/^_/,"")}var D=class g{constructor(){s(this,"keySet",new Set)}static createKey(){return Math.random().toString(36).substring(2,15)+Math.random().toString(36).substring(2,15)}genUniqueKey(){let A=g.createKey();for(;this.keySet.has(A);)A=g.createKey();return A}removeKey(A){this.keySet.delete(A)}dispose(){this.keySet.clear()}};var H=new D;function h(g){let A={};for(let I in g)I.startsWith("on")&&(A[F(I.slice(2))]=g[I]);let Q=async({data:I})=>{if(A[I.type])try{let B=await A[I.type](I.data);self.postMessage({type:`${I.type}_result`,key:I.key,data:B})}catch(B){self.postMessage({type:`${I.type}_result`,key:I.key,error:B})}else self.postMessage({type:`${I.type}_result`,key:I.key,error:"no_event"})};return self.addEventListener("message",Q),()=>{self.removeEventListener("message",Q)}}var i,E,w,G={env:{emscripten_notify_memory_growth:function(g){w=new Uint8Array(E.exports.memory.buffer)}}},o=class{init(){return i||(typeof fetch!="undefined"?i=fetch("data:application/wasm;base64,"+y).then(A=>A.arrayBuffer()).then(A=>WebAssembly.instantiate(A,G)).then(this._init):i=WebAssembly.instantiate(Buffer.from(y,"base64"),G).then(this._init),i)}_init(A){E=A.instance,G.env.emscripten_notify_memory_growth(0)}decode(A,Q=0){if(!E)throw new Error("ZSTDDecoder: Await .init() before decoding.");let I=A.byteLength,B=E.exports.malloc(I);w.set(A,B),Q=Q||Number(E.exports.ZSTD_findDecompressedSize(B,I));let C=E.exports.malloc(Q),S=E.exports.ZSTD_decompress(C,Q,B,I),N=w.slice(C,C+S);return E.exports.free(B),E.exports.free(C),N}},y="AGFzbQEAAAABpQEVYAF/AX9gAn9/AGADf39/AX9gBX9/f39/AX9gAX8AYAJ/fwF/YAR/f39/AX9gA39/fwBgBn9/f39/fwF/YAd/f39/f39/AX9gAn9/AX5gAn5+AX5gAABgBX9/f39/AGAGf39/f39/AGAIf39/f39/f38AYAl/f39/f39/f38AYAABf2AIf39/f39/f38Bf2ANf39/f39/f39/f39/fwF/YAF/AX4CJwEDZW52H2Vtc2NyaXB0ZW5fbm90aWZ5X21lbW9yeV9ncm93dGgABANpaAEFAAAFAgEFCwACAQABAgIFBQcAAwABDgsBAQcAEhMHAAUBDAQEAAANBwQCAgYCBAgDAwMDBgEACQkHBgICAAYGAgQUBwYGAwIGAAMCAQgBBwUGCgoEEQAEBAEIAwgDBQgDEA8IAAcABAUBcAECAgUEAQCAAgYJAX8BQaCgwAILB2AHBm1lbW9yeQIABm1hbGxvYwAoBGZyZWUAJgxaU1REX2lzRXJyb3IAaBlaU1REX2ZpbmREZWNvbXByZXNzZWRTaXplAFQPWlNURF9kZWNvbXByZXNzAEoGX3N0YXJ0ACQJBwEAQQELASQKussBaA8AIAAgACgCBCABajYCBAsZACAAKAIAIAAoAgRBH3F0QQAgAWtBH3F2CwgAIABBiH9LC34BBH9BAyEBIAAoAgQiA0EgTQRAIAAoAggiASAAKAIQTwRAIAAQDQ8LIAAoAgwiAiABRgRAQQFBAiADQSBJGw8LIAAgASABIAJrIANBA3YiBCABIARrIAJJIgEbIgJrIgQ2AgggACADIAJBA3RrNgIEIAAgBCgAADYCAAsgAQsUAQF/IAAgARACIQIgACABEAEgAgv3AQECfyACRQRAIABCADcCACAAQQA2AhAgAEIANwIIQbh/DwsgACABNgIMIAAgAUEEajYCECACQQRPBEAgACABIAJqIgFBfGoiAzYCCCAAIAMoAAA2AgAgAUF/ai0AACIBBEAgAEEIIAEQFGs2AgQgAg8LIABBADYCBEF/DwsgACABNgIIIAAgAS0AACIDNgIAIAJBfmoiBEEBTQRAIARBAWtFBEAgACABLQACQRB0IANyIgM2AgALIAAgAS0AAUEIdCADajYCAAsgASACakF/ai0AACIBRQRAIABBADYCBEFsDwsgAEEoIAEQFCACQQN0ams2AgQgAgsWACAAIAEpAAA3AAAgACABKQAINwAICy8BAX8gAUECdEGgHWooAgAgACgCAEEgIAEgACgCBGprQR9xdnEhAiAAIAEQASACCyEAIAFCz9bTvtLHq9lCfiAAfEIfiUKHla+vmLbem55/fgsdAQF/IAAoAgggACgCDEYEfyAAKAIEQSBGBUEACwuCBAEDfyACQYDAAE8EQCAAIAEgAhBnIAAPCyAAIAJqIQMCQCAAIAFzQQNxRQRAAkAgAkEBSARAIAAhAgwBCyAAQQNxRQRAIAAhAgwBCyAAIQIDQCACIAEtAAA6AAAgAUEBaiEBIAJBAWoiAiADTw0BIAJBA3ENAAsLAkAgA0F8cSIEQcAASQ0AIAIgBEFAaiIFSw0AA0AgAiABKAIANgIAIAIgASgCBDYCBCACIAEoAgg2AgggAiABKAIMNgIMIAIgASgCEDYCECACIAEoAhQ2AhQgAiABKAIYNgIYIAIgASgCHDYCHCACIAEoAiA2AiAgAiABKAIkNgIkIAIgASgCKDYCKCACIAEoAiw2AiwgAiABKAIwNgIwIAIgASgCNDYCNCACIAEoAjg2AjggAiABKAI8NgI8IAFBQGshASACQUBrIgIgBU0NAAsLIAIgBE8NAQNAIAIgASgCADYCACABQQRqIQEgAkEEaiICIARJDQALDAELIANBBEkEQCAAIQIMAQsgA0F8aiIEIABJBEAgACECDAELIAAhAgNAIAIgAS0AADoAACACIAEtAAE6AAEgAiABLQACOgACIAIgAS0AAzoAAyABQQRqIQEgAkEEaiICIARNDQALCyACIANJBEADQCACIAEtAAA6AAAgAUEBaiEBIAJBAWoiAiADRw0ACwsgAAsMACAAIAEpAAA3AAALQQECfyAAKAIIIgEgACgCEEkEQEEDDwsgACAAKAIEIgJBB3E2AgQgACABIAJBA3ZrIgE2AgggACABKAAANgIAQQALDAAgACABKAIANgAAC/cCAQJ/AkAgACABRg0AAkAgASACaiAASwRAIAAgAmoiBCABSw0BCyAAIAEgAhALDwsgACABc0EDcSEDAkACQCAAIAFJBEAgAwRAIAAhAwwDCyAAQQNxRQRAIAAhAwwCCyAAIQMDQCACRQ0EIAMgAS0AADoAACABQQFqIQEgAkF/aiECIANBAWoiA0EDcQ0ACwwBCwJAIAMNACAEQQNxBEADQCACRQ0FIAAgAkF/aiICaiIDIAEgAmotAAA6AAAgA0EDcQ0ACwsgAkEDTQ0AA0AgACACQXxqIgJqIAEgAmooAgA2AgAgAkEDSw0ACwsgAkUNAgNAIAAgAkF/aiICaiABIAJqLQAAOgAAIAINAAsMAgsgAkEDTQ0AIAIhBANAIAMgASgCADYCACABQQRqIQEgA0EEaiEDIARBfGoiBEEDSw0ACyACQQNxIQILIAJFDQADQCADIAEtAAA6AAAgA0EBaiEDIAFBAWohASACQX9qIgINAAsLIAAL8wICAn8BfgJAIAJFDQAgACACaiIDQX9qIAE6AAAgACABOgAAIAJBA0kNACADQX5qIAE6AAAgACABOgABIANBfWogAToAACAAIAE6AAIgAkEHSQ0AIANBfGogAToAACAAIAE6AAMgAkEJSQ0AIABBACAAa0EDcSIEaiIDIAFB/wFxQYGChAhsIgE2AgAgAyACIARrQXxxIgRqIgJBfGogATYCACAEQQlJDQAgAyABNgIIIAMgATYCBCACQXhqIAE2AgAgAkF0aiABNgIAIARBGUkNACADIAE2AhggAyABNgIUIAMgATYCECADIAE2AgwgAkFwaiABNgIAIAJBbGogATYCACACQWhqIAE2AgAgAkFkaiABNgIAIAQgA0EEcUEYciIEayICQSBJDQAgAa0iBUIghiAFhCEFIAMgBGohAQNAIAEgBTcDGCABIAU3AxAgASAFNwMIIAEgBTcDACABQSBqIQEgAkFgaiICQR9LDQALCyAACy8BAn8gACgCBCAAKAIAQQJ0aiICLQACIQMgACACLwEAIAEgAi0AAxAIajYCACADCy8BAn8gACgCBCAAKAIAQQJ0aiICLQACIQMgACACLwEAIAEgAi0AAxAFajYCACADCx8AIAAgASACKAIEEAg2AgAgARAEGiAAIAJBCGo2AgQLCAAgAGdBH3MLugUBDX8jAEEQayIKJAACfyAEQQNNBEAgCkEANgIMIApBDGogAyAEEAsaIAAgASACIApBDGpBBBAVIgBBbCAAEAMbIAAgACAESxsMAQsgAEEAIAEoAgBBAXRBAmoQECENQVQgAygAACIGQQ9xIgBBCksNABogAiAAQQVqNgIAIAMgBGoiAkF8aiEMIAJBeWohDiACQXtqIRAgAEEGaiELQQQh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ASIDNgLE4AEgACgCvOABIQQgACABNgK84AEgACABIAJqNgK44AEgACABIAQgA2tqNgLA4AELpgEBAX8gACAAKALs4QEQFjYCyOABIABCADcD+OABIABCADcDuOABIABBwOABakIANwMAIABBqNAAaiIBQYyAgOAANgIAIABBADYCmOIBIABCADcDiOEBIABCAzcDgOEBIABBrNABakHgEikCADcCACAAQbTQAWpB6BIoAgA2AgAgACABNgIMIAAgAEGYIGo2AgggACAAQaAwajYCBCAAIABBEGo2AgALYQEBf0G4fyEDAkAgAUEDSQ0AIAIgABAhIgFBA3YiADYCCCACIAFBAXE2AgQgAiABQQF2QQNxIgM2AgACQCADQX9qIgFBAksNAAJAIAFBAWsOAgEAAgtBbA8LIAAhAwsgAwsMACAAIAEgAkEAEC4LiAQCA38CfiADEBYhBCAAQQBBKBAQIQAgBCACSwRAIAQPCyABRQRAQX8PCwJAAkAgA0EBRg0AIAEoAAAiBkGo6r5pRg0AQXYhAyAGQXBxQdDUtMIBRw0BQQghAyACQQhJDQEgAEEAQSgQECEAIAEoAAQhASAAQQE2AhQgACABrTcDAEEADwsgASACIAMQLyIDIAJLDQAgACADNgIYQXIhAyABIARqIgVBf2otAAAiAkEIcQ0AIAJBIHEiBkUEQEFwIQMgBS0AACIFQacBSw0BIAVBB3GtQgEgBUEDdkEKaq2GIgdCA4h+IAd8IQggBEEBaiEECyACQQZ2IQMgAkECdiEFAkAgAkEDcUF/aiICQQJLBEBBACECDAELAkACQAJAIAJBAWsOAgECAAsgASAEai0AACECIARBAWohBAwCCyABIARqLwAAIQIgBEECaiEEDAELIAEgBGooAAAhAiAEQQRqIQQLIAVBAXEhBQJ+AkACQAJAIANBf2oiA0ECTQRAIANBAWsOAgIDAQtCfyAGRQ0DGiABIARqMQAADAMLIAEgBGovAACtQoACfAwCCyABIARqKAAArQwBCyABIARqKQAACyEHIAAgBTYCICAAIAI2AhwgACAHNwMAQQAhAyAAQQA2AhQgACAHIAggBhsiBzcDCCAAIAdCgIAIIAdCgIAIVBs+AhALIAMLWwEBf0G4fyEDIAIQFiICIAFNBH8gACACakF/ai0AACIAQQNxQQJ0QaAeaigC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C0Egak8NAQsgByAHKQNoNwMQIAcgBykDYDcDCCAEIA0gB0EIaiAHQdwAaiAPIA4gESAQEB4hCwwBCyACIARqIQggBCAKEAcgAkERTwRAIARBEGohAgNAIAIgCkEQaiIKEAcgAkEQaiICIAhJDQALCyAIIAlrIQIgByATNgJcIAkgCCAOa0sEQCAJIAggEWtLBEBBbCELDAILIBAgAiAOayICaiIKIANqIBBNBEAgCCAKIAMQDxoMAgsgCCAKQQAgAmsQDyEIIAcgAiADaiIDNgJkIAggAmshCCAOIQILIAlBEE8EQCADIAhqIQMDQCAIIAIQByACQRBqIQIgCEEQaiIIIANJDQALDAELAkAgCUEHTQRAIAggAi0AADoAACAIIAItAAE6AAEgCCACLQACOgACIAggAi0AAzoAAyAIQQRqIAIgCUECdCIDQcAeaigCAGoiAhAXIAIgA0HgHmooAgBrIQIgBygCZCEDDAELIAggAhAMCyADQQlJDQAgAyAIaiEDIAhBCGoiCCACQQhqIgJrQQ9MBEADQCAIIAIQDCACQQhqIQIgCEEIaiIIIANJDQAMAgALAAsDQCAIIAIQByACQRBqIQIgCEEQaiIIIANJDQALCyAHQRhqEAQaIAsgDCALEAMiAhshDCAEIAQgC2ogAhshBCAFQX9qIgUNAAsgDBADDQFBbCEMIAdBGGoQBEECSQ0BQQAhCANAIAhBA0cEQCAAIAhBAnQiAmpBrNABaiACIAdqKAJENgIAIAhBAWohCAwBCwsgBygCXCEIC0G6fyEMIA8gCGsiACANIARrSw0AIAQEfyAEIAggABALIABqBUEACyABayEMCyAHQfAAaiQAIAwLkRcCFn8FfiMAQdABayIHJAAgByAAKALw4QEiCDYCvAEgASACaiESIAggACgCgOIBaiETAkACQCAFRQRAIAEhAwwBCyAAKALE4AEhESAAKALA4AEhFSAAKAK84AEhDyAAQQE2AozhAUEAIQgDQCAIQQNHBEAgByAIQQJ0IgJqIAAgAmpBrNABaigCADYCVCAIQQFqIQgMAQsLIAcgETYCZCAHIA82AmAgByABIA9rNgJoQWwhECAHQShqIAMgBBAGEAMNASAFQQQgBUEESBshFyAHQTxqIAdBKGogACgCABATIAdBxABqIAdBKGogACgCCBATIAdBzABqIAdB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IAdB0AFqJAAgEAslACAAQgA3AgAgAEEAOwEIIABBADoACyAAIAE2AgwgACACOgAKC7QFAQN/IwBBMGsiBCQAIABB/wFqIgVBfWohBgJAIAMvAQIEQCAEQRhqIAEgAhAGIgIQAw0BIARBEGogBEEYaiADEBwgBEEIaiAEQRhqIAMQHCAAIQMDQAJAIARBGGoQBCADIAZPckUEQCADIARBEGogBEEYahASOgAAIAMgBEEIaiAEQRhqEBI6AAEgBEEYahAERQ0BIANBAmohAwsgBUF+aiEFAn8DQEG6fyECIAMiASAFSw0FIAEgBEEQaiAEQRhqEBI6AAAgAUEBaiEDIARBGGoQBEEDRgRAQQIhAiAEQQhqDAILIAMgBUsNBSABIARBCGogBEEYahASOgABIAFBAmohA0EDIQIgBEEYahAEQQNHDQALIARBEGoLIQUgAyAFIARBGGoQEjoAACABIAJqIABrIQIMAwsgAyAEQRBqIARBGGoQEjoAAiADIARBCGogBEEYahASOgADIANBBGohAwwAAAsACyAEQRhqIAEgAhAGIgIQAw0AIARBEGogBEEYaiADEBwgBEEIaiAEQRhqIAMQHCAAIQMDQAJAIARBGGoQBCADIAZPckUEQCADIARBEGogBEEYahAROgAAIAMgBEEIaiAEQRhqEBE6AAEgBEEYahAERQ0BIANBAmohAwsgBUF+aiEFAn8DQEG6fyECIAMiASAFSw0EIAEgBEEQaiAEQRhqEBE6AAAgAUEBaiEDIARBGGoQBEEDRgRAQQIhAiAEQQhqDAILIAMgBUsNBCABIARBCGogBEEYahAROgABIAFBAmohA0EDIQIgBEEYahAEQQNHDQALIARBEGoLIQUgAyAFIARBGGoQEToAACABIAJqIABrIQIMAgsgAyAEQRBqIARBGGoQEToAAiADIARBCGogBEEYahAROgADIANBBGohAwwAAAsACyAEQTBqJAAgAgtpAQF/An8CQAJAIAJBB00NACABKAAAQbfIwuF+Rw0AIAAgASgABDYCmOIBQWIgAEEQaiABIAIQPiIDEAMNAhogAEKBgICAEDcDiOEBIAAgASADaiACIANrECoMAQsgACABIAIQKgtBAAsLrQMBBn8jAEGAAWsiAyQAQWIhCAJAIAJBCUkNACAAQZjQAGogAUEIaiIEIAJBeGogAEGY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wOABCwutAgIEfwF+IwBBQGoiBCQAAkACQCACQQhJDQAgASgAAEFwcUHQ1LTCAUcNACABIAIQIiEBIABCADcDCCAAQQA2AgQgACABNgIADAELIARBGGogASACEC0iAxADBEAgACADEBoMAQsgAwRAIABBuH8QGgwBCyACIAQoAjAiA2shAiABIANqIQMDQAJAIAAgAyACIARBCGoQLCIFEAMEfyAFBSACIAVBA2oiBU8NAUG4fwsQGgwCCyAGQQFqIQYgAiAFayECIAMgBWohAyAEKAIMRQ0ACyAEKAI4BEAgAkEDTQRAIABBuH8QGgwCCyADQQRqIQMLIAQoAighAiAEKQMYIQcgAEEANgIEIAAgAyABazYCACAAIAIgBmytIAcgB0J/URs3AwgLIARBQGskAAslAQF/IwBBEGsiAiQAIAIgACABEFEgAigCACEAIAJBEGokACAAC30BBH8jAEGQBGsiBCQAIARB/wE2AggCQCAEQRBqIARBCGogBEEMaiABIAIQFSIGEAMEQCAGIQUMAQtBVCEFIAQoAgwiB0EGSw0AIAMgBEEQaiAEKAIIIAcQQSIFEAMNACAAIAEgBmogAiAGayADEDwhBQsgBEGQBGokACAFC4cBAgJ/An5BABAWIQMCQANAIAEgA08EQAJAIAAoAABBcHFB0NS0wgFGBEAgACABECIiAhADRQ0BQn4PCyAAIAEQVSIEQn1WDQMgBCAFfCIFIARUIQJCfiEEIAINAyAAIAEQUiICEAMNAwsgASACayEBIAAgAmohAAwBCwtCfiAFIAEbIQQLIAQLPwIBfwF+IwBBMGsiAiQAAn5CfiACQQhqIAAgARAtDQAaQgAgAigCHEEBRg0AGiACKQMICyEDIAJBMGokACADC40BAQJ/IwBBMGsiASQAAkAgAEUNACAAKAKI4gENACABIABB/OEBaigCADYCKCABIAApAvThATcDICAAEDAgACgCqOIBIQIgASABKAIoNgIYIAEgASkDIDcDECACIAFBEGoQGyAAQQA2AqjiASABIAEoAig2AgggASABKQMgNwMAIAAgARAbCyABQTBqJAALKgECfyMAQRBrIgAkACAAQQA2AgggAEIANwMAIAAQWCEBIABBEGokACABC4cBAQN/IwBBEGsiAiQAAkAgACgCAEUgACgCBEVzDQAgAiAAKAIINgIIIAIgACkCADcDAAJ/IAIoAgAiAQRAIAIoAghBqOMJIAERBQAMAQtBqOMJECgLIgFFDQAgASAAKQIANwL04QEgAUH84QFqIAAoAgg2AgAgARBZIAEhAwsgAkEQaiQAIAMLywEBAn8jAEEgayIBJAAgAEGBgIDAADYCtOIBIABBADYCiOIBIABBADYC7OEBIABCADcDkOIBIABBADYCpOMJIABBADYC3OIBIABCADcCzOIBIABBADYCvOIBIABBADYCxOABIABCADcCnOIBIABBpOIBakIANwIAIABBrOIBakEANgIAIAFCADcCECABQgA3AhggASABKQMYNwMIIAEgASkDEDcDACABKAIIQQh2QQFxIQIgAEEANgLg4gEgACACNgKM4gEgAUEgaiQAC3YBA38jAEEwayIBJAAgAARAIAEgAEHE0AFqIgIoAgA2AiggASAAKQK80AE3AyAgACgCACEDIAEgAigCADYCGCABIAApArzQATcDECADIAFBEGoQGyABIAEoAig2AgggASABKQMgNwMAIAAgARAbCyABQTBqJAALzAEBAX8gACABKAK00AE2ApjiASAAIAEoAgQiAjYCwOABIAAgAjYCvOABIAAgAiABKAIIaiICNgK44AEgACACNgLE4AEgASgCuNABBEAgAEKBgICAEDcDiOEBIAAgAUGk0ABqNgIMIAAgAUGUIGo2AgggACABQZwwajYCBCAAIAFBDGo2AgAgAEGs0AFqIAFBqNABaigCADYCACAAQbDQAWogAUGs0AFqKAIANgIAIABBtNABaiABQbDQAWooAgA2AgAPCyAAQgA3A4jhAQs7ACACRQRAQbp/DwsgBEUEQEFsDwsgAiAEEGAEQCAAIAEgAiADIAQgBRBhDwsgACABIAIgAyAEIAUQZQtGAQF/IwBBEGsiBSQAIAVBCGogBBAOAn8gBS0ACQRAIAAgASACIAMgBBAyDAELIAAgASACIAMgBBA0CyEAIAVBEGokACAACzQAIAAgAyAEIAUQNiIFEAMEQCAFDwsgBSAESQR/IAEgAiADIAVqIAQgBWsgABA1BUG4fwsLRgEBfyMAQRBrIgUkACAFQQhqIAQQDgJ/IAUtAAkEQCAAIAEgAiADIAQQYgwBCyAAIAEgAiADIAQQNQshACAFQRBqJAAgAAtZAQF/QQ8hAiABIABJBEAgAUEE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";var R=new o,J=R.init();h({async onDecode(g){try{let A=await a(g,{responseType:"arraybuffer"}),Q=new Uint8Array(A);await J;let I=R.decode(Q),B=new TextDecoder().decode(I);return JSON.parse(B)}catch(A){return console.error(A),"error"}}});\n');
6783
+ }
6784
+
6785
+ // src/loader/AibeeLoader/utils.ts
6786
+ function transformGraphicData(data, center2, baseIndex = 0) {
6787
+ data.forEach((item) => {
6788
+ item.geometry.coords = JSON.parse(
6789
+ JSON.stringify(item.geometry.cds)
6790
+ );
6791
+ if (item.geometry.type === "polygon") {
6792
+ item.geometry.coords.map((cds) => {
6793
+ if (Array.isArray(cds)) {
6794
+ cds.forEach((coord) => {
6795
+ coord[0] -= center2[0];
6796
+ coord[1] -= center2[1];
6797
+ });
6798
+ }
6799
+ });
6800
+ } else {
6801
+ item.geometry.coords = translatePosToCenter(item.geometry.cds, center2);
6802
+ }
6803
+ });
6804
+ for (let i = 0; i < data.length; i++) {
6805
+ const item = data[i];
6806
+ item.deltaHeight = 1e-5 * (baseIndex + i + 1);
6807
+ }
6808
+ }
6809
+ function translatePosToCenter(cds, center2) {
6810
+ return [cds[0] - center2[0], cds[1] - center2[1]];
6811
+ }
6812
+
6813
+ // src/loader/AibeeLoader/index.ts
6814
+ var defaultAibeeLoaderOption = {
6815
+ loadRoadNetwork: false
6816
+ };
6817
+ var VersionStoreName = "version";
6818
+ var MapDataStoreName = "map_data";
6819
+ var RoadNetworkDataStoreName = "road_network_data";
6820
+ var AibeeLoader = class {
6821
+ constructor(bmap) {
6822
+ this.bmap = bmap;
6823
+ this.initDb();
6824
+ }
6825
+ placeId = null;
6826
+ canUseZstd = localStorage.getItem("canUseZstd") !== "0";
6827
+ // 是不是可以使用zstd 默认是可以的 如果解压缩失败了就要标记本机不可以使用,之后不在尝试
6828
+ worker = Worker3();
6829
+ async initDb() {
6830
+ try {
6831
+ await createDb();
6832
+ createStore(VersionStoreName);
6833
+ createStore(MapDataStoreName);
6834
+ createStore(RoadNetworkDataStoreName);
6835
+ } catch (e) {
6836
+ console.log("[\u6253\u5F00indexDb\u9519\u8BEF]", e);
6837
+ }
6838
+ }
6839
+ async load(placeId) {
6840
+ this.clear();
6841
+ this.placeId = placeId;
6842
+ }
6843
+ async getFloorData(floor) {
6844
+ if (this.canUseZstd) {
6845
+ const res = await triggerWorker(this.worker, "decode", "");
6846
+ if (res === "error") {
6847
+ this.setCanUseZstd(false);
6848
+ return this.getFloorData(floor);
6849
+ }
6850
+ } else {
6851
+ }
6852
+ return new Floor(this.bmap.context);
6853
+ }
6854
+ async getRoadNetworkData() {
6855
+ }
6856
+ // 空闲时间请求其他数据
6857
+ async getOtherDataByFreeTime() {
6858
+ }
6859
+ // 获取多楼层数据
6860
+ async getMulFloorsData(floor) {
6861
+ return [];
6862
+ }
6863
+ async getDataByUrl(url) {
6864
+ const data = await fetch(url).then((res) => res.json());
6865
+ return this.getDataByJson(data);
6866
+ }
6867
+ getDataByJson(data) {
6868
+ const floor = new Floor(this.bmap.context);
6869
+ let center2 = [0, 0];
6870
+ data.layers.forEach((layer) => {
6871
+ switch (layer.l_type) {
6872
+ case "range":
6873
+ const data2 = layer.elements[0];
6874
+ center2 = [data2.center_x, data2.center_y];
6875
+ break;
6876
+ case "graph":
6877
+ const graphics = [];
6878
+ const graphicMap = /* @__PURE__ */ new Map();
6879
+ transformGraphicData(layer.elements, center2);
6880
+ layer.elements.forEach((options) => {
6881
+ const graphic = floor.addGraphic(options);
6882
+ graphics.push(graphic);
6883
+ graphicMap.set(options.id, graphic);
6884
+ });
6885
+ floor.userData.graphics = graphics;
6886
+ floor.userData.graphicMap = graphicMap;
6887
+ break;
6888
+ case "ground":
6889
+ transformGraphicData(layer.elements, center2);
6890
+ const grounds = layer.elements.map((options) => new Graphic(this.bmap.context, options));
6891
+ floor.addGrounds(grounds);
6892
+ break;
6893
+ case "wall":
6894
+ transformGraphicData(layer.elements, center2);
6895
+ const wallGroup = layer.elements.reduce((obj, options) => {
6896
+ const { fillColor, fillOpacity, strokeColor, strokeOpacity } = options;
6897
+ const key = `${fillColor}-${fillOpacity}-${strokeColor}-${strokeOpacity}`;
6898
+ if (obj[key]) {
6899
+ obj[key].push(options);
6900
+ } else {
6901
+ obj[key] = [options];
6902
+ }
6903
+ return obj;
6904
+ }, {});
6905
+ Object.values(wallGroup).forEach((optionArray) => {
6906
+ const wall = new Wall(this.bmap.context, optionArray);
6907
+ floor.wallLayer.add(wall);
6908
+ });
6909
+ break;
6910
+ case "lane":
6911
+ break;
6912
+ case "texture2d":
6913
+ case "texture3d":
6914
+ layer.elements.forEach((options) => {
6915
+ options.center = translatePosToCenter(options.center, center2);
6916
+ const texture = new GroundTexture(this.bmap.context, options);
6917
+ floor.textureLayer.add(texture);
6918
+ });
6919
+ break;
6920
+ case "glb":
6921
+ break;
6922
+ case "store":
6923
+ layer.elements.map((options) => {
6924
+ const pos = translatePosToCenter(options.geometry.cds, center2);
6925
+ floor.poiLayer.createPoi({
6926
+ icon: options.poi_info.icon,
6927
+ texts: [{ text: options.store_name || options.poi_info.name }],
6928
+ position: { x: pos[0], y: pos[1], z: options.airHeight }
6929
+ });
6930
+ });
6931
+ break;
6932
+ case "facility":
6933
+ layer.elements.map((options) => {
6934
+ const pos = translatePosToCenter(options.geometry.cds, center2);
6935
+ floor.poiLayer.createPoi({
6936
+ icon: options.poi_info.icon,
6937
+ texts: [{ text: options.store_name || options.poi_info.name }],
6938
+ position: { x: pos[0], y: pos[1], z: options.airHeight }
6939
+ });
6940
+ });
6941
+ break;
6942
+ case "parkingSpace":
6943
+ transformGraphicData(layer.elements, center2);
6944
+ let parkingSpacesGraphics = [];
6945
+ let parkingSpacesGraphicMap = /* @__PURE__ */ new Map();
6946
+ layer.elements.forEach((options) => {
6947
+ const graphic = floor.addGraphic(options);
6948
+ parkingSpacesGraphics.push(graphic);
6949
+ parkingSpacesGraphicMap.set(options.id, graphic);
6950
+ const pos = translatePosToCenter([options.center_x, options.center_y], center2);
6951
+ floor.poiLayer.createPoi({
6952
+ texts: [{ text: options.poi_info.name }],
6953
+ position: { x: pos[0], y: pos[1], z: options.airHeight }
6954
+ });
6955
+ });
6956
+ floor.userData.parkingSpaces = parkingSpacesGraphics;
6957
+ floor.userData.parkingSpacesGraphicMap = parkingSpacesGraphicMap;
6958
+ break;
6959
+ }
6960
+ });
6961
+ floor.userData.center = center2;
6962
+ floor.userData.height = data.floorHeight;
6963
+ return floor;
6964
+ }
6965
+ clear() {
6966
+ this.placeId = null;
6967
+ }
6968
+ setCanUseZstd(bool) {
6969
+ this.canUseZstd = bool;
6970
+ localStorage.setItem("canUseZstd", "0");
6971
+ }
6972
+ dispose() {
6973
+ this.clear();
6974
+ }
6975
+ };
6577
6976
  export {
6977
+ AibeeLoader,
6578
6978
  BMap,
6579
6979
  BaseSvg,
6580
6980
  Context,
@@ -6583,12 +6983,14 @@ export {
6583
6983
  Floor,
6584
6984
  Graphic,
6585
6985
  GraphicLayer,
6986
+ GroundTexture,
6586
6987
  HeatmapElement,
6587
6988
  HooksName,
6588
6989
  HoverHelper,
6589
6990
  Layer,
6590
6991
  MapTypePolar,
6591
6992
  Model,
6993
+ MulFloors,
6592
6994
  Navigation,
6593
6995
  Overlay,
6594
6996
  PathDirection,
@@ -6603,6 +7005,7 @@ export {
6603
7005
  SvgPolygon,
6604
7006
  Timer,
6605
7007
  UniqueKey,
7008
+ Wall,
6606
7009
  addAlphaToHexColor,
6607
7010
  calc_angle,
6608
7011
  calc_direction,
@@ -6616,7 +7019,9 @@ export {
6616
7019
  createSvg,
6617
7020
  createSvgElement,
6618
7021
  darkenColor,
7022
+ defaultAibeeLoaderOption,
6619
7023
  defaultConfig,
7024
+ defaultOptions4 as defaultOptions,
6620
7025
  dispose,
6621
7026
  disposeLoader,
6622
7027
  distancePointToSegment,
@@ -6660,4 +7065,3 @@ export {
6660
7065
  vector3ToDevice,
6661
7066
  xhrGet
6662
7067
  };
6663
- //# sourceMappingURL=bmap.esm.js.map