@aibee/crc-bmap 0.0.114 → 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,
@@ -2613,20 +2613,141 @@ var Poi = class extends EventDispatcher2 {
2613
2613
  };
2614
2614
 
2615
2615
  // src/elements/floor.ts
2616
- 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
+ };
2617
2737
 
2618
2738
  // src/layer/graphic-layer.ts
2619
- import { Box3 as Box33, Vector3 as Vector36 } from "three";
2739
+ import { Box3 as Box34, Vector3 as Vector37 } from "three";
2620
2740
 
2621
2741
  // src/layer/layer.ts
2622
- import { Object3D as Object3D5 } from "three";
2623
- var Layer = class extends Object3D5 {
2742
+ import { Object3D as Object3D7 } from "three";
2743
+ var Layer = class extends Object3D7 {
2624
2744
  constructor(context) {
2625
2745
  super();
2626
2746
  this.context = context;
2627
2747
  }
2628
2748
  dispose() {
2629
2749
  dispose(this);
2750
+ this.children.forEach((item) => item.dispose?.());
2630
2751
  this.clear();
2631
2752
  }
2632
2753
  };
@@ -2638,8 +2759,8 @@ var GraphicLayer = class extends Layer {
2638
2759
  super(context);
2639
2760
  }
2640
2761
  getCenter() {
2641
- const box = new Box33().setFromObject(this);
2642
- return box.getCenter(new Vector36());
2762
+ const box = new Box34().setFromObject(this);
2763
+ return box.getCenter(new Vector37());
2643
2764
  }
2644
2765
  createGraphic(options) {
2645
2766
  const graphic = new Graphic(this.context, options);
@@ -2823,215 +2944,32 @@ var PoiLayer = class extends Layer {
2823
2944
  }
2824
2945
  };
2825
2946
 
2826
- // src/elements/heatmap.ts
2827
- import {
2828
- MeshBasicMaterial as MeshBasicMaterial2,
2829
- Object3D as Object3D6,
2830
- PlaneGeometry as PlaneGeometry2,
2831
- Texture,
2832
- DoubleSide as DoubleSide3,
2833
- Mesh as Mesh3,
2834
- Matrix3,
2835
- Vector2 as Vector24
2836
- } from "three";
2837
- import { create } from "@mars3d/heatmap.js";
2838
- import { featureCollection as featureCollection2, point as point2, bbox, center as getCenter2 } from "@turf/turf";
2839
- var HeatmapElement = class extends Object3D6 {
2840
- constructor(context) {
2841
- super();
2842
- this.context = context;
2843
- this.div = document.createElement("div");
2844
- }
2845
- heatmap;
2846
- div;
2847
- plane;
2848
- clearHeatmap() {
2849
- if (this.div.firstChild) {
2850
- this.div.removeChild(this.div.firstChild);
2851
- }
2852
- this.heatmap = void 0;
2853
- }
2854
- loadData(data) {
2855
- this.clearHeatmap();
2856
- const { width, height, leftTop, center: center2 } = this.getBox(data);
2857
- this.heatmap = create({
2858
- width,
2859
- height,
2860
- container: this.div,
2861
- ...this.context.config.heatMap
2862
- });
2863
- this.heatmap.setData(this.transformData(data, leftTop));
2864
- this.initPlane(width, height);
2865
- this.position.set(center2[0], center2[1], this.position.z);
2866
- }
2867
- initPlane(width, height) {
2868
- if (this.plane) {
2869
- this.remove(this.plane);
2870
- }
2871
- const geometry = new PlaneGeometry2(width, height);
2872
- const texture = new Texture(this.div.firstChild);
2873
- texture.needsUpdate = true;
2874
- const material = new MeshBasicMaterial2({
2875
- transparent: true,
2876
- side: DoubleSide3,
2877
- map: texture
2878
- });
2879
- material.needsUpdate = true;
2880
- this.plane = new Mesh3(geometry, material);
2881
- this.add(this.plane);
2882
- }
2883
- getTransMatrix({ x, y }) {
2884
- return new Matrix3().makeScale(1, -1).multiply(new Matrix3().makeTranslation(0 - x, 0 - y));
2885
- }
2886
- /**
2887
- * 所有点的坐标减去左上角从00点开始画canvas
2888
- * @param data
2889
- * @param leftTop
2890
- * @returns
2891
- */
2892
- transformData(data, leftTop) {
2893
- const matrix = this.getTransMatrix(leftTop);
2894
- const $data = data.data.map((item) => {
2895
- const vector = new Vector24(item.x, item.y).applyMatrix3(matrix);
2896
- return {
2897
- x: vector.x,
2898
- y: vector.y,
2899
- value: item.value
2900
- };
2901
- });
2902
- return {
2903
- data: $data,
2904
- max: data.max,
2905
- min: data.min
2906
- };
2907
- }
2908
- getBox(data) {
2909
- const features = featureCollection2(data.data.map((item) => point2([item.x, item.y])));
2910
- const box = bbox(features);
2911
- const width = box[2] - box[0];
2912
- const height = box[3] - box[1];
2913
- const leftTop = { x: box[0], y: box[3] };
2914
- const center2 = getCenter2(features);
2915
- return { width, height, leftTop, center: center2.geometry.coordinates };
2916
- }
2917
- dispose() {
2918
- this.div = null;
2919
- this.heatmap = void 0;
2920
- }
2921
- };
2922
-
2923
- // src/elements/model.ts
2924
- import { Box3 as Box34, Object3D as Object3D7, Vector3 as Vector37 } from "three";
2925
- var Model = class extends Object3D7 {
2926
- constructor(context, options) {
2927
- super();
2928
- this.context = context;
2929
- this.options = options;
2930
- this.position.copy(options.position || new Vector37(0, 0, 0));
2931
- this.loadModel();
2932
- }
2933
- poi = null;
2934
- model = null;
2935
- async loadModel() {
2936
- const object = await loadModel(this.options.modelUrl);
2937
- object.scene.rotation.set(Math.PI / 2, Math.PI / 2, 0);
2938
- this.add(object.scene);
2939
- this.model = object;
2940
- this.initPoi();
2941
- }
2942
- initPoi() {
2943
- if (!this.options.icon) {
2944
- return;
2945
- }
2946
- const poi = this.context.currentFloor?.addPoi({
2947
- icon: this.options.icon,
2948
- icon_size: this.options.icon_size,
2949
- built_in: true,
2950
- level: 0
2951
- });
2952
- this.poi = poi || null;
2953
- if (this.model && poi) {
2954
- poi.position = new Box34().setFromObject(this).getCenter(new Vector37());
2955
- }
2956
- }
2957
- dispose() {
2958
- dispose(this);
2959
- this.model = null;
2960
- if (this.poi) {
2961
- this.context.currentFloor?.poiLayer.removePoi(this.poi);
2962
- this.poi = null;
2963
- }
2964
- }
2965
- };
2966
-
2967
- // src/elements/ground-texture.ts
2968
- import { Euler, Mesh as Mesh4, Object3D as Object3D8, PlaneGeometry as PlaneGeometry3 } from "three";
2969
- var defaultOptions4 = {
2970
- uuid: "",
2971
- url: "",
2972
- name: "",
2973
- angleX: 0,
2974
- angleY: 0,
2975
- angleZ: 0,
2976
- width: 0,
2977
- height: 0,
2978
- center: [0, 0],
2979
- opacity: 1,
2980
- visible: true
2981
- };
2982
- var GroundTexture = class extends Object3D8 {
2983
- constructor(context, options) {
2984
- super();
2985
- this.context = context;
2986
- this.options = proxyOptions(
2987
- { ...defaultOptions4, ...options },
2988
- this
2989
- );
2990
- this.init();
2991
- }
2992
- options;
2993
- mesh;
2994
- async init() {
2995
- const { width, height, center: center2, url, opacity, angleX, angleY, angleZ } = this.options;
2996
- const planeGeometry = new PlaneGeometry3(width, height);
2997
- const planeMaterial = await this.context.materialFactory.createGroundTextureMaterial({
2998
- url,
2999
- opacity
3000
- });
3001
- const mesh = new Mesh4(planeGeometry, planeMaterial);
3002
- this.mesh = mesh;
3003
- this.mesh.position.set(center2[0], center2[1], 0);
3004
- mesh.setRotationFromEuler(new Euler(angleX, angleY, angleZ));
3005
- this.add(mesh);
3006
- }
3007
- dispose() {
3008
- this.mesh?.geometry.dispose();
3009
- this.clear();
3010
- }
3011
- };
3012
-
3013
2947
  // src/elements/floor.ts
3014
- var Floor = class extends Object3D9 {
2948
+ var Floor = class extends Object3D8 {
3015
2949
  constructor(context) {
3016
2950
  super();
3017
2951
  this.context = context;
3018
2952
  this.graphicLayer = new GraphicLayer(this.context);
3019
2953
  this.poiLayer = new PoiLayer(this.context);
2954
+ this.wallLayer = new Layer(this.context);
2955
+ this.textureLayer = new Layer(this.context);
3020
2956
  this.groundUpper.add(this.graphicLayer);
3021
2957
  this.groundUpper.add(this.poiLayer);
3022
- this.groundUpper.add(this.groundTextures);
2958
+ this.groundUpper.add(this.wallLayer);
2959
+ this.groundUpper.add(this.textureLayer);
3023
2960
  this.add(this.groundUpper);
3024
2961
  this.add(this.models);
3025
2962
  }
3026
2963
  graphicLayer;
3027
2964
  poiLayer;
2965
+ wallLayer;
2966
+ textureLayer;
3028
2967
  grounds = /* @__PURE__ */ new Set();
3029
2968
  shadow = new Shadow();
3030
2969
  heatmap;
3031
- groundUpper = new Object3D9();
3032
- models = new Object3D9();
2970
+ groundUpper = new Object3D8();
2971
+ models = new Object3D8();
3033
2972
  modelMap = /* @__PURE__ */ new Map();
3034
- groundTextures = new Group2();
3035
2973
  groundMaxHeight = 0;
3036
2974
  name = "";
3037
2975
  key = "";
@@ -3084,10 +3022,6 @@ var Floor = class extends Object3D9 {
3084
3022
  addPoi(poiOptions) {
3085
3023
  return this.poiLayer.createPoi(poiOptions);
3086
3024
  }
3087
- addGroundTexture(options) {
3088
- const groundTexture = new GroundTexture(this.context, options);
3089
- this.groundTextures.add(groundTexture);
3090
- }
3091
3025
  addHeatmap(data) {
3092
3026
  if (!this.heatmap) {
3093
3027
  this.heatmap = new HeatmapElement(this.context);
@@ -3115,9 +3049,9 @@ var Floor = class extends Object3D9 {
3115
3049
  this.shadow.dispose();
3116
3050
  this.graphicLayer.dispose();
3117
3051
  this.poiLayer.dispose();
3052
+ this.wallLayer.dispose();
3053
+ this.textureLayer.dispose();
3118
3054
  this.grounds.forEach((ground) => ground.dispose());
3119
- this.groundTextures.children.forEach((groundTexture) => groundTexture.dispose());
3120
- this.groundTextures.clear();
3121
3055
  this.heatmap?.dispose();
3122
3056
  this.groundUpper.clear();
3123
3057
  this.models.children.forEach((model) => model.dispose());
@@ -3516,6 +3450,154 @@ var SelectBox = class extends BaseSvg {
3516
3450
  }
3517
3451
  };
3518
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
+
3519
3601
  // src/operations/selection/box-selection.ts
3520
3602
  import { Frustum } from "three";
3521
3603
  var BoxSelection = class extends BaseSvg {
@@ -3876,9 +3958,9 @@ var HoverHelper = class extends EventDispatcher5 {
3876
3958
  // src/factory/material.ts
3877
3959
  import {
3878
3960
  Color as Color4,
3879
- LineBasicMaterial as LineBasicMaterial2,
3961
+ LineBasicMaterial as LineBasicMaterial3,
3880
3962
  MeshStandardMaterial as MeshStandardMaterial2,
3881
- MeshBasicMaterial as MeshBasicMaterial4,
3963
+ MeshBasicMaterial as MeshBasicMaterial5,
3882
3964
  ShaderMaterial as ShaderMaterial2,
3883
3965
  DoubleSide as DoubleSide4
3884
3966
  } from "three";
@@ -3902,7 +3984,7 @@ var MaterialFactory = class {
3902
3984
  if (this.lineMaterialMap.has(key)) {
3903
3985
  return this.lineMaterialMap.get(key);
3904
3986
  }
3905
- const lineMaterial = new LineBasicMaterial2({
3987
+ const lineMaterial = new LineBasicMaterial3({
3906
3988
  color: new Color4(color).convertLinearToSRGB(),
3907
3989
  transparent: true,
3908
3990
  opacity
@@ -3930,7 +4012,7 @@ var MaterialFactory = class {
3930
4012
  if (this.meshBasicMaterialMap.has(key)) {
3931
4013
  return this.meshBasicMaterialMap.get(key);
3932
4014
  }
3933
- const material = new MeshBasicMaterial4({
4015
+ const material = new MeshBasicMaterial5({
3934
4016
  color,
3935
4017
  transparent: true,
3936
4018
  opacity,
@@ -4033,7 +4115,7 @@ var MaterialFactory = class {
4033
4115
  return this.groundTextureMaterialMap.get(key);
4034
4116
  }
4035
4117
  const texture = await this.context.textureFactory.getTexture(url);
4036
- const material = new MeshBasicMaterial4({
4118
+ const material = new MeshBasicMaterial5({
4037
4119
  map: texture,
4038
4120
  transparent: true,
4039
4121
  opacity
@@ -4067,7 +4149,7 @@ var MaterialFactory = class {
4067
4149
  };
4068
4150
 
4069
4151
  // src/utils/camera-bound.ts
4070
- import { Box3 as Box37, Vector3 as Vector312 } from "three";
4152
+ import { Box3 as Box37, Vector3 as Vector313 } from "three";
4071
4153
  var CameraBound = class {
4072
4154
  constructor(context) {
4073
4155
  this.context = context;
@@ -4075,9 +4157,9 @@ var CameraBound = class {
4075
4157
  this.changePrevCamera();
4076
4158
  }
4077
4159
  prevCamera = {
4078
- position: new Vector312(),
4160
+ position: new Vector313(),
4079
4161
  zoom: 1,
4080
- target: new Vector312()
4162
+ target: new Vector313()
4081
4163
  };
4082
4164
  enable = true;
4083
4165
  setEnable(enable) {
@@ -4110,16 +4192,17 @@ var CameraBound = class {
4110
4192
  this.context.removeEventListener("control-change", this.onCameraChange);
4111
4193
  }
4112
4194
  getCurFloorScreenPosition() {
4113
- if (!this.context.currentFloor) {
4195
+ const floors = this.context.scene.children.filter((el) => el instanceof Floor);
4196
+ if (!floors.length) {
4114
4197
  return null;
4115
4198
  }
4116
- const box = new Box37().setFromObject(this.context.currentFloor.groundUpper);
4117
- 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;
4118
4201
  const { min, max } = box;
4119
4202
  const lb = vector3ToDevice(min, camera, w, h);
4120
4203
  const rt = vector3ToDevice(max, camera, w, h);
4121
- const lt = vector3ToDevice(new Vector312(min.x, max.y, max.z), camera, w, h);
4122
- 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);
4123
4206
  const left = Math.min(lb.x, rt.x, lt.x, rb.x);
4124
4207
  const right = Math.max(lb.x, rt.x, lt.x, rb.x);
4125
4208
  const top = Math.min(lb.y, rt.y, lt.y, rb.y);
@@ -4134,9 +4217,23 @@ var CameraBound = class {
4134
4217
  checkDistanceToScreenEdge({ left, right, top, bottom }) {
4135
4218
  const { width, height } = this.context.clientSize;
4136
4219
  const [pt, pr, pb, pl] = this.context.config.cameraBound.padding;
4137
- 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;
4138
4225
  }
4139
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
+ }
4140
4237
  };
4141
4238
  dispose() {
4142
4239
  this.unRegistryEvent();
@@ -4235,7 +4332,7 @@ var Context = class extends EventDispatcher6 {
4235
4332
  /**
4236
4333
  * 获取两个点之间的像素数
4237
4334
  */
4238
- 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)) {
4239
4336
  const { clientWidth, clientHeight } = this.container;
4240
4337
  const device1 = vector3ToDevice(point1, this.camera, clientWidth, clientHeight);
4241
4338
  const device2 = vector3ToDevice(point22, this.camera, clientWidth, clientHeight);
@@ -4436,7 +4533,7 @@ var Context = class extends EventDispatcher6 {
4436
4533
  );
4437
4534
  }
4438
4535
  getCameraLookAt() {
4439
- return new Vector313().subVectors(this.control.target, this.camera.position);
4536
+ return new Vector314().subVectors(this.control.target, this.camera.position);
4440
4537
  }
4441
4538
  /**
4442
4539
  * 按照一个中心点设置相机的放大缩小
@@ -4491,10 +4588,10 @@ var Context = class extends EventDispatcher6 {
4491
4588
  const boundingBox = new Box38().setFromObject(object);
4492
4589
  this.setPolarAngle(polar, 0);
4493
4590
  const { max, min } = boundingBox;
4494
- const leftTop = new Vector313(min.x, max.y, max.z);
4495
- const rightTop = new Vector313(max.x, max.y, max.z);
4496
- const rightBottom = new Vector313(max.x, min.y, min.z);
4497
- 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);
4498
4595
  const leftTop2d = vector3ToDevice(leftTop, this.camera, width, height);
4499
4596
  const rightTop2d = vector3ToDevice(rightTop, this.camera, width, height);
4500
4597
  const leftBottom2d = vector3ToDevice(leftBottom, this.camera, width, height);
@@ -4509,7 +4606,7 @@ var Context = class extends EventDispatcher6 {
4509
4606
  const xScale = (width - right - left) / size.x;
4510
4607
  const yScale = (height - top - bottom) / size.y;
4511
4608
  const scale = Math.min(xScale, yScale);
4512
- 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);
4513
4610
  return { zoom: scale * this.camera.zoom, center: center2 };
4514
4611
  }
4515
4612
  /**
@@ -4969,6 +5066,7 @@ var BMap = class extends EventDispatcher7 {
4969
5066
  this.context.control.addEventListener("change", this.onControlChange);
4970
5067
  this.onControlChange();
4971
5068
  this.context.cameraBound.setEnable(true);
5069
+ this.context.cameraBound.changePrevCamera();
4972
5070
  }
4973
5071
  onControlChange = () => {
4974
5072
  const {
@@ -5059,7 +5157,7 @@ var BMap = class extends EventDispatcher7 {
5059
5157
  } = this.context;
5060
5158
  const device = vector3ToDevice(position, camera, width, height);
5061
5159
  const offsetX = device.x - width / 2;
5062
- const v3 = new Vector314();
5160
+ const v3 = new Vector315();
5063
5161
  v3.setFromMatrixColumn(this.context.camera.matrix, 0);
5064
5162
  v3.normalize();
5065
5163
  v3.multiplyScalar(offsetX / this.context.camera.zoom);
@@ -5432,24 +5530,24 @@ function Worker2() {
5432
5530
 
5433
5531
  // src/plugins/navigation/path.ts
5434
5532
  import {
5435
- Mesh as Mesh5,
5436
- Object3D as Object3D12,
5533
+ Mesh as Mesh6,
5534
+ Object3D as Object3D13,
5437
5535
  TextureLoader as TextureLoader2,
5438
5536
  Color as Color7,
5439
5537
  Vector2 as Vector27,
5440
- Vector3 as Vector316,
5538
+ Vector3 as Vector317,
5441
5539
  NormalBlending,
5442
5540
  RepeatWrapping
5443
5541
  } from "three";
5444
5542
 
5445
5543
  // src/external/meshLine.js
5446
5544
  import {
5447
- BufferGeometry as BufferGeometry2,
5545
+ BufferGeometry as BufferGeometry3,
5448
5546
  Matrix4,
5449
- Vector3 as Vector315,
5547
+ Vector3 as Vector316,
5450
5548
  Ray as Ray2,
5451
5549
  Sphere,
5452
- LineSegments as LineSegments2,
5550
+ LineSegments as LineSegments3,
5453
5551
  BufferAttribute,
5454
5552
  ShaderChunk,
5455
5553
  ShaderMaterial as ShaderMaterial3,
@@ -5457,7 +5555,7 @@ import {
5457
5555
  Color as Color6,
5458
5556
  Vector2 as Vector26
5459
5557
  } from "three";
5460
- var MeshLine = class extends BufferGeometry2 {
5558
+ var MeshLine = class extends BufferGeometry3 {
5461
5559
  constructor() {
5462
5560
  super();
5463
5561
  this.isMeshLine = true;
@@ -5526,7 +5624,7 @@ MeshLine.prototype.setPoints = function(points, wcb) {
5526
5624
  this.widthCallback = wcb;
5527
5625
  this.positions = [];
5528
5626
  this.counters = [];
5529
- if (points.length && points[0] instanceof Vector315) {
5627
+ if (points.length && points[0] instanceof Vector316) {
5530
5628
  for (var j = 0; j < points.length; j++) {
5531
5629
  var p = points[j];
5532
5630
  var c = j / points.length;
@@ -5550,7 +5648,7 @@ function MeshLineRaycast(raycaster, intersects) {
5550
5648
  var inverseMatrix = new Matrix4();
5551
5649
  var ray = new Ray2();
5552
5650
  var sphere = new Sphere();
5553
- var interRay = new Vector315();
5651
+ var interRay = new Vector316();
5554
5652
  var geometry = this.geometry;
5555
5653
  if (!geometry.boundingSphere) geometry.computeBoundingSphere();
5556
5654
  sphere.copy(geometry.boundingSphere);
@@ -5560,10 +5658,10 @@ function MeshLineRaycast(raycaster, intersects) {
5560
5658
  }
5561
5659
  inverseMatrix.copy(this.matrixWorld).invert();
5562
5660
  ray.copy(raycaster.ray).applyMatrix4(inverseMatrix);
5563
- var vStart = new Vector315();
5564
- var vEnd = new Vector315();
5565
- var interSegment = new Vector315();
5566
- 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;
5567
5665
  var index = geometry.index;
5568
5666
  var attributes = geometry.attributes;
5569
5667
  if (index !== null) {
@@ -5616,8 +5714,8 @@ MeshLine.prototype.getDistance = function(i) {
5616
5714
  let maxLength = 0;
5617
5715
  for (let k = 0; k < i; k++) {
5618
5716
  const index = 6 * k;
5619
- const p0 = new Vector315(this.positions[index], this.positions[index + 1], this.positions[index + 2]);
5620
- 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]);
5621
5719
  const distance = p0.distanceTo(p1);
5622
5720
  maxLength += distance;
5623
5721
  }
@@ -6080,7 +6178,7 @@ var defaultConfig2 = {
6080
6178
  lineWidth: 8,
6081
6179
  color: 16777215
6082
6180
  };
6083
- var Path2 = class extends Object3D12 {
6181
+ var Path2 = class extends Object3D13 {
6084
6182
  constructor(navigation, config) {
6085
6183
  super();
6086
6184
  this.navigation = navigation;
@@ -6129,7 +6227,7 @@ var Path2 = class extends Object3D12 {
6129
6227
  }
6130
6228
  } = this;
6131
6229
  const screenPoints = points.map(
6132
- ([x, y]) => vector3ToDevice(new Vector316(x, y, 0), camera, width, height)
6230
+ ([x, y]) => vector3ToDevice(new Vector317(x, y, 0), camera, width, height)
6133
6231
  ).map(({ x, y }) => [x, y]);
6134
6232
  const pointLength = getPathLength(screenPoints);
6135
6233
  return pointLength / 32;
@@ -6185,7 +6283,7 @@ var Path2 = class extends Object3D12 {
6185
6283
  blending: NormalBlending,
6186
6284
  repeat: new Vector27(this.getRepeat(), 1)
6187
6285
  });
6188
- const mesh = this.mesh = new Mesh5(lineGeometry, material);
6286
+ const mesh = this.mesh = new Mesh6(lineGeometry, material);
6189
6287
  this.add(mesh);
6190
6288
  return mesh;
6191
6289
  }
@@ -6579,7 +6677,304 @@ var SplitLoad = class extends Plugin {
6579
6677
  return Array.from(this.bmap.context.currentFloor.userData.graphicMap.values());
6580
6678
  }
6581
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="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IAMNACAEQQNxBEADQCACRQ0FIAAgAkF/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
+ };
6582
6976
  export {
6977
+ AibeeLoader,
6583
6978
  BMap,
6584
6979
  BaseSvg,
6585
6980
  Context,
@@ -6588,12 +6983,14 @@ export {
6588
6983
  Floor,
6589
6984
  Graphic,
6590
6985
  GraphicLayer,
6986
+ GroundTexture,
6591
6987
  HeatmapElement,
6592
6988
  HooksName,
6593
6989
  HoverHelper,
6594
6990
  Layer,
6595
6991
  MapTypePolar,
6596
6992
  Model,
6993
+ MulFloors,
6597
6994
  Navigation,
6598
6995
  Overlay,
6599
6996
  PathDirection,
@@ -6608,6 +7005,7 @@ export {
6608
7005
  SvgPolygon,
6609
7006
  Timer,
6610
7007
  UniqueKey,
7008
+ Wall,
6611
7009
  addAlphaToHexColor,
6612
7010
  calc_angle,
6613
7011
  calc_direction,
@@ -6621,7 +7019,9 @@ export {
6621
7019
  createSvg,
6622
7020
  createSvgElement,
6623
7021
  darkenColor,
7022
+ defaultAibeeLoaderOption,
6624
7023
  defaultConfig,
7024
+ defaultOptions4 as defaultOptions,
6625
7025
  dispose,
6626
7026
  disposeLoader,
6627
7027
  distancePointToSegment,
@@ -6665,4 +7065,3 @@ export {
6665
7065
  vector3ToDevice,
6666
7066
  xhrGet
6667
7067
  };
6668
- //# sourceMappingURL=bmap.esm.js.map