@aibee/crc-bmap 0.0.114 → 0.0.116
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.cjs.min.js +4 -4
- package/lib/bmap.cjs.min.js.map +4 -4
- package/lib/bmap.esm.js +1017 -368
- package/lib/bmap.esm.js.map +4 -4
- package/lib/bmap.esm.min.js +5 -5
- package/lib/bmap.esm.min.js.map +4 -4
- package/lib/bmap.min.js +4 -4
- package/lib/bmap.min.js.map +4 -4
- package/lib/src/elements/floor.d.ts +6 -6
- package/lib/src/elements/glb-model.d.ts +21 -0
- package/lib/src/elements/ground-texture.d.ts +6 -6
- package/lib/src/elements/index.d.ts +4 -0
- package/lib/src/elements/lane.d.ts +38 -0
- package/lib/src/elements/model.d.ts +0 -5
- package/lib/src/elements/wall.d.ts +29 -2
- package/lib/src/factory/material.d.ts +8 -0
- package/lib/src/index.d.ts +1 -0
- package/lib/src/loader/AibeeLoader/index.d.ts +3 -2
- package/lib/src/loader/AibeeLoader/type.d.ts +123 -0
- package/lib/src/loader/AibeeLoader/utils.d.ts +6 -0
- package/lib/src/plugins/index.d.ts +1 -0
- package/lib/src/types/index.d.ts +2 -0
- package/lib/src/utils/index-db.d.ts +1 -0
- package/package.json +1 -1
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
|
|
457
|
+
import { EventDispatcher as EventDispatcher7, Vector3 as Vector318 } from "three";
|
|
458
458
|
|
|
459
459
|
// src/utils/timer.ts
|
|
460
460
|
var Timer = class {
|
|
@@ -527,11 +527,14 @@ import {
|
|
|
527
527
|
DirectionalLight,
|
|
528
528
|
AmbientLight,
|
|
529
529
|
Path,
|
|
530
|
-
Vector2
|
|
530
|
+
Vector2,
|
|
531
|
+
AxesHelper
|
|
531
532
|
} from "three";
|
|
532
533
|
import { MapControls } from "three/examples/jsm/controls/MapControls";
|
|
533
534
|
function initScene() {
|
|
534
535
|
const scene = new Scene();
|
|
536
|
+
const axes = new AxesHelper(1e3);
|
|
537
|
+
scene.add(axes);
|
|
535
538
|
scene.background = new Color(16777215);
|
|
536
539
|
return scene;
|
|
537
540
|
}
|
|
@@ -1619,10 +1622,10 @@ function toWebWorker(obj) {
|
|
|
1619
1622
|
import {
|
|
1620
1623
|
EventDispatcher as EventDispatcher6,
|
|
1621
1624
|
Box2,
|
|
1622
|
-
Vector3 as
|
|
1623
|
-
Vector2 as
|
|
1625
|
+
Vector3 as Vector317,
|
|
1626
|
+
Vector2 as Vector26,
|
|
1624
1627
|
Raycaster as Raycaster3,
|
|
1625
|
-
Box3 as
|
|
1628
|
+
Box3 as Box39,
|
|
1626
1629
|
Color as Color5,
|
|
1627
1630
|
AmbientLight as AmbientLight2
|
|
1628
1631
|
} from "three";
|
|
@@ -2613,20 +2616,141 @@ var Poi = class extends EventDispatcher2 {
|
|
|
2613
2616
|
};
|
|
2614
2617
|
|
|
2615
2618
|
// src/elements/floor.ts
|
|
2616
|
-
import { Box3 as Box35,
|
|
2619
|
+
import { Box3 as Box35, Object3D as Object3D8, Vector3 as Vector38 } from "three";
|
|
2620
|
+
|
|
2621
|
+
// src/elements/heatmap.ts
|
|
2622
|
+
import {
|
|
2623
|
+
MeshBasicMaterial as MeshBasicMaterial2,
|
|
2624
|
+
Object3D as Object3D5,
|
|
2625
|
+
PlaneGeometry as PlaneGeometry2,
|
|
2626
|
+
Texture,
|
|
2627
|
+
DoubleSide as DoubleSide3,
|
|
2628
|
+
Mesh as Mesh3,
|
|
2629
|
+
Matrix3,
|
|
2630
|
+
Vector2 as Vector24
|
|
2631
|
+
} from "three";
|
|
2632
|
+
import { create } from "@mars3d/heatmap.js";
|
|
2633
|
+
import { featureCollection as featureCollection2, point as point2, bbox, center as getCenter2 } from "@turf/turf";
|
|
2634
|
+
var HeatmapElement = class extends Object3D5 {
|
|
2635
|
+
constructor(context) {
|
|
2636
|
+
super();
|
|
2637
|
+
this.context = context;
|
|
2638
|
+
this.div = document.createElement("div");
|
|
2639
|
+
}
|
|
2640
|
+
heatmap;
|
|
2641
|
+
div;
|
|
2642
|
+
plane;
|
|
2643
|
+
clearHeatmap() {
|
|
2644
|
+
if (this.div.firstChild) {
|
|
2645
|
+
this.div.removeChild(this.div.firstChild);
|
|
2646
|
+
}
|
|
2647
|
+
this.heatmap = void 0;
|
|
2648
|
+
}
|
|
2649
|
+
loadData(data) {
|
|
2650
|
+
this.clearHeatmap();
|
|
2651
|
+
const { width, height, leftTop, center: center2 } = this.getBox(data);
|
|
2652
|
+
this.heatmap = create({
|
|
2653
|
+
width,
|
|
2654
|
+
height,
|
|
2655
|
+
container: this.div,
|
|
2656
|
+
...this.context.config.heatMap
|
|
2657
|
+
});
|
|
2658
|
+
this.heatmap.setData(this.transformData(data, leftTop));
|
|
2659
|
+
this.initPlane(width, height);
|
|
2660
|
+
this.position.set(center2[0], center2[1], this.position.z);
|
|
2661
|
+
}
|
|
2662
|
+
initPlane(width, height) {
|
|
2663
|
+
if (this.plane) {
|
|
2664
|
+
this.remove(this.plane);
|
|
2665
|
+
}
|
|
2666
|
+
const geometry = new PlaneGeometry2(width, height);
|
|
2667
|
+
const texture = new Texture(this.div.firstChild);
|
|
2668
|
+
texture.needsUpdate = true;
|
|
2669
|
+
const material = new MeshBasicMaterial2({
|
|
2670
|
+
transparent: true,
|
|
2671
|
+
side: DoubleSide3,
|
|
2672
|
+
map: texture
|
|
2673
|
+
});
|
|
2674
|
+
material.needsUpdate = true;
|
|
2675
|
+
this.plane = new Mesh3(geometry, material);
|
|
2676
|
+
this.add(this.plane);
|
|
2677
|
+
}
|
|
2678
|
+
getTransMatrix({ x, y }) {
|
|
2679
|
+
return new Matrix3().makeScale(1, -1).multiply(new Matrix3().makeTranslation(0 - x, 0 - y));
|
|
2680
|
+
}
|
|
2681
|
+
/**
|
|
2682
|
+
* 所有点的坐标减去左上角从00点开始画canvas
|
|
2683
|
+
* @param data
|
|
2684
|
+
* @param leftTop
|
|
2685
|
+
* @returns
|
|
2686
|
+
*/
|
|
2687
|
+
transformData(data, leftTop) {
|
|
2688
|
+
const matrix = this.getTransMatrix(leftTop);
|
|
2689
|
+
const $data = data.data.map((item) => {
|
|
2690
|
+
const vector = new Vector24(item.x, item.y).applyMatrix3(matrix);
|
|
2691
|
+
return {
|
|
2692
|
+
x: vector.x,
|
|
2693
|
+
y: vector.y,
|
|
2694
|
+
value: item.value
|
|
2695
|
+
};
|
|
2696
|
+
});
|
|
2697
|
+
return {
|
|
2698
|
+
data: $data,
|
|
2699
|
+
max: data.max,
|
|
2700
|
+
min: data.min
|
|
2701
|
+
};
|
|
2702
|
+
}
|
|
2703
|
+
getBox(data) {
|
|
2704
|
+
const features = featureCollection2(data.data.map((item) => point2([item.x, item.y])));
|
|
2705
|
+
const box = bbox(features);
|
|
2706
|
+
const width = box[2] - box[0];
|
|
2707
|
+
const height = box[3] - box[1];
|
|
2708
|
+
const leftTop = { x: box[0], y: box[3] };
|
|
2709
|
+
const center2 = getCenter2(features);
|
|
2710
|
+
return { width, height, leftTop, center: center2.geometry.coordinates };
|
|
2711
|
+
}
|
|
2712
|
+
dispose() {
|
|
2713
|
+
this.div = null;
|
|
2714
|
+
this.heatmap = void 0;
|
|
2715
|
+
}
|
|
2716
|
+
};
|
|
2717
|
+
|
|
2718
|
+
// src/elements/model.ts
|
|
2719
|
+
import { Object3D as Object3D6, Vector3 as Vector36 } from "three";
|
|
2720
|
+
var Model = class extends Object3D6 {
|
|
2721
|
+
constructor(context, options) {
|
|
2722
|
+
super();
|
|
2723
|
+
this.context = context;
|
|
2724
|
+
this.options = options;
|
|
2725
|
+
this.position.copy(options.position || new Vector36(0, 0, 0));
|
|
2726
|
+
this.loadModel();
|
|
2727
|
+
}
|
|
2728
|
+
model = null;
|
|
2729
|
+
async loadModel() {
|
|
2730
|
+
const object = await loadModel(this.options.modelUrl);
|
|
2731
|
+
object.scene.rotation.set(Math.PI / 2, Math.PI / 2, 0);
|
|
2732
|
+
this.add(object.scene);
|
|
2733
|
+
this.model = object;
|
|
2734
|
+
}
|
|
2735
|
+
dispose() {
|
|
2736
|
+
dispose(this);
|
|
2737
|
+
this.model = null;
|
|
2738
|
+
}
|
|
2739
|
+
};
|
|
2617
2740
|
|
|
2618
2741
|
// src/layer/graphic-layer.ts
|
|
2619
|
-
import { Box3 as
|
|
2742
|
+
import { Box3 as Box34, Vector3 as Vector37 } from "three";
|
|
2620
2743
|
|
|
2621
2744
|
// src/layer/layer.ts
|
|
2622
|
-
import { Object3D as
|
|
2623
|
-
var Layer = class extends
|
|
2745
|
+
import { Object3D as Object3D7 } from "three";
|
|
2746
|
+
var Layer = class extends Object3D7 {
|
|
2624
2747
|
constructor(context) {
|
|
2625
2748
|
super();
|
|
2626
2749
|
this.context = context;
|
|
2627
2750
|
}
|
|
2628
2751
|
dispose() {
|
|
2629
2752
|
dispose(this);
|
|
2753
|
+
this.children.forEach((item) => item.dispose?.());
|
|
2630
2754
|
this.clear();
|
|
2631
2755
|
}
|
|
2632
2756
|
};
|
|
@@ -2638,8 +2762,8 @@ var GraphicLayer = class extends Layer {
|
|
|
2638
2762
|
super(context);
|
|
2639
2763
|
}
|
|
2640
2764
|
getCenter() {
|
|
2641
|
-
const box = new
|
|
2642
|
-
return box.getCenter(new
|
|
2765
|
+
const box = new Box34().setFromObject(this);
|
|
2766
|
+
return box.getCenter(new Vector37());
|
|
2643
2767
|
}
|
|
2644
2768
|
createGraphic(options) {
|
|
2645
2769
|
const graphic = new Graphic(this.context, options);
|
|
@@ -2823,215 +2947,38 @@ var PoiLayer = class extends Layer {
|
|
|
2823
2947
|
}
|
|
2824
2948
|
};
|
|
2825
2949
|
|
|
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
2950
|
// src/elements/floor.ts
|
|
3014
|
-
var Floor = class extends
|
|
2951
|
+
var Floor = class extends Object3D8 {
|
|
3015
2952
|
constructor(context) {
|
|
3016
2953
|
super();
|
|
3017
2954
|
this.context = context;
|
|
3018
2955
|
this.graphicLayer = new GraphicLayer(this.context);
|
|
3019
2956
|
this.poiLayer = new PoiLayer(this.context);
|
|
2957
|
+
this.wallLayer = new Layer(this.context);
|
|
2958
|
+
this.textureLayer = new Layer(this.context);
|
|
2959
|
+
this.glbModelLayer = new Layer(this.context);
|
|
2960
|
+
this.laneLayer = new Layer(this.context);
|
|
3020
2961
|
this.groundUpper.add(this.graphicLayer);
|
|
3021
2962
|
this.groundUpper.add(this.poiLayer);
|
|
3022
|
-
this.groundUpper.add(this.
|
|
2963
|
+
this.groundUpper.add(this.wallLayer);
|
|
2964
|
+
this.groundUpper.add(this.textureLayer);
|
|
2965
|
+
this.groundUpper.add(this.glbModelLayer);
|
|
2966
|
+
this.groundUpper.add(this.laneLayer);
|
|
3023
2967
|
this.add(this.groundUpper);
|
|
3024
2968
|
this.add(this.models);
|
|
3025
2969
|
}
|
|
3026
2970
|
graphicLayer;
|
|
3027
2971
|
poiLayer;
|
|
2972
|
+
wallLayer;
|
|
2973
|
+
textureLayer;
|
|
2974
|
+
glbModelLayer;
|
|
2975
|
+
laneLayer;
|
|
3028
2976
|
grounds = /* @__PURE__ */ new Set();
|
|
3029
2977
|
shadow = new Shadow();
|
|
3030
2978
|
heatmap;
|
|
3031
|
-
groundUpper = new
|
|
3032
|
-
models = new
|
|
2979
|
+
groundUpper = new Object3D8();
|
|
2980
|
+
models = new Object3D8();
|
|
3033
2981
|
modelMap = /* @__PURE__ */ new Map();
|
|
3034
|
-
groundTextures = new Group2();
|
|
3035
2982
|
groundMaxHeight = 0;
|
|
3036
2983
|
name = "";
|
|
3037
2984
|
key = "";
|
|
@@ -3084,10 +3031,6 @@ var Floor = class extends Object3D9 {
|
|
|
3084
3031
|
addPoi(poiOptions) {
|
|
3085
3032
|
return this.poiLayer.createPoi(poiOptions);
|
|
3086
3033
|
}
|
|
3087
|
-
addGroundTexture(options) {
|
|
3088
|
-
const groundTexture = new GroundTexture(this.context, options);
|
|
3089
|
-
this.groundTextures.add(groundTexture);
|
|
3090
|
-
}
|
|
3091
3034
|
addHeatmap(data) {
|
|
3092
3035
|
if (!this.heatmap) {
|
|
3093
3036
|
this.heatmap = new HeatmapElement(this.context);
|
|
@@ -3115,9 +3058,11 @@ var Floor = class extends Object3D9 {
|
|
|
3115
3058
|
this.shadow.dispose();
|
|
3116
3059
|
this.graphicLayer.dispose();
|
|
3117
3060
|
this.poiLayer.dispose();
|
|
3061
|
+
this.wallLayer.dispose();
|
|
3062
|
+
this.textureLayer.dispose();
|
|
3063
|
+
this.glbModelLayer.dispose();
|
|
3064
|
+
this.laneLayer.dispose();
|
|
3118
3065
|
this.grounds.forEach((ground) => ground.dispose());
|
|
3119
|
-
this.groundTextures.children.forEach((groundTexture) => groundTexture.dispose());
|
|
3120
|
-
this.groundTextures.clear();
|
|
3121
3066
|
this.heatmap?.dispose();
|
|
3122
3067
|
this.groundUpper.clear();
|
|
3123
3068
|
this.models.children.forEach((model) => model.dispose());
|
|
@@ -3393,126 +3338,453 @@ var SvgPolygon = class extends BaseSvg {
|
|
|
3393
3338
|
const cy = +circle.getAttribute("cy");
|
|
3394
3339
|
return Math.sqrt((x - cx) ** 2 + (y - cy) ** 2) <= 5;
|
|
3395
3340
|
}
|
|
3396
|
-
addPoint(vector) {
|
|
3397
|
-
this.points.push(vector);
|
|
3398
|
-
if (this.isClose) {
|
|
3399
|
-
const area = this.calculatedArea();
|
|
3400
|
-
this.dispatchEvent({ type: "area", area });
|
|
3401
|
-
}
|
|
3341
|
+
addPoint(vector) {
|
|
3342
|
+
this.points.push(vector);
|
|
3343
|
+
if (this.isClose) {
|
|
3344
|
+
const area = this.calculatedArea();
|
|
3345
|
+
this.dispatchEvent({ type: "area", area });
|
|
3346
|
+
}
|
|
3347
|
+
}
|
|
3348
|
+
// 计算面积
|
|
3349
|
+
calculatedArea() {
|
|
3350
|
+
const cds = this.points.map((item) => [item.x, item.y]);
|
|
3351
|
+
let area = 0;
|
|
3352
|
+
const numPoints = cds.length;
|
|
3353
|
+
for (let i = 0; i < numPoints; i++) {
|
|
3354
|
+
const j = (i + 1) % numPoints;
|
|
3355
|
+
area += cds[i][0] * cds[j][1] - cds[j][0] * cds[i][1];
|
|
3356
|
+
}
|
|
3357
|
+
return Math.abs(area / 2);
|
|
3358
|
+
}
|
|
3359
|
+
dispose() {
|
|
3360
|
+
super.dispose();
|
|
3361
|
+
this.unRegistryEvent();
|
|
3362
|
+
this.lines = [];
|
|
3363
|
+
this.circles = [];
|
|
3364
|
+
}
|
|
3365
|
+
};
|
|
3366
|
+
|
|
3367
|
+
// src/elements/select-box.ts
|
|
3368
|
+
import { Box3 as Box36 } from "three";
|
|
3369
|
+
var SelectBox = class extends BaseSvg {
|
|
3370
|
+
constructor(context) {
|
|
3371
|
+
super(context);
|
|
3372
|
+
this.context = context;
|
|
3373
|
+
const { config: { svg: { line } } } = context;
|
|
3374
|
+
this.rect = createRect(line.stroke, "transparent");
|
|
3375
|
+
this.svg.appendChild(this.rect);
|
|
3376
|
+
for (let i = 0; i < 4; i++) {
|
|
3377
|
+
this.cornerRect[i] = createRect(line.stroke, "#ffffff");
|
|
3378
|
+
this.centerRect[i] = createRect(line.stroke, "#ffffff");
|
|
3379
|
+
this.svg.appendChild(this.cornerRect[i]);
|
|
3380
|
+
this.svg.appendChild(this.centerRect[i]);
|
|
3381
|
+
}
|
|
3382
|
+
this.registryEvent();
|
|
3383
|
+
}
|
|
3384
|
+
rect;
|
|
3385
|
+
cornerRect = [];
|
|
3386
|
+
// 四个角上的方块
|
|
3387
|
+
centerRect = [];
|
|
3388
|
+
// 四个线中间的方块
|
|
3389
|
+
graphic;
|
|
3390
|
+
setEnable(enable) {
|
|
3391
|
+
super.setEnable(enable);
|
|
3392
|
+
if (enable) {
|
|
3393
|
+
this.registryEvent();
|
|
3394
|
+
} else {
|
|
3395
|
+
this.unRegistryEvent();
|
|
3396
|
+
}
|
|
3397
|
+
}
|
|
3398
|
+
registryEvent() {
|
|
3399
|
+
this.context.addEventListener("update", this.onUpdate);
|
|
3400
|
+
}
|
|
3401
|
+
unRegistryEvent() {
|
|
3402
|
+
this.context.removeEventListener("update", this.onUpdate);
|
|
3403
|
+
}
|
|
3404
|
+
onUpdate = () => {
|
|
3405
|
+
if (!this.graphic) {
|
|
3406
|
+
setRectPosition(this.rect, 0, 0, 0, 0);
|
|
3407
|
+
for (let i = 0; i < this.cornerRect.length; i++) {
|
|
3408
|
+
setRectPosition(this.cornerRect[i], 0, 0, 0, 0);
|
|
3409
|
+
setRectPosition(this.centerRect[i], 0, 0, 0, 0);
|
|
3410
|
+
}
|
|
3411
|
+
} else {
|
|
3412
|
+
const box = new Box36().setFromObject(this.graphic);
|
|
3413
|
+
const { camera, container: { clientWidth: w, clientHeight: h } } = this.context;
|
|
3414
|
+
const { min, max } = box;
|
|
3415
|
+
const leftBottom = vector3ToDevice(min, camera, w, h);
|
|
3416
|
+
const rightTop = vector3ToDevice(max, camera, w, h);
|
|
3417
|
+
setRectPosition(this.rect, leftBottom.x, rightTop.y, Math.abs(rightTop.x - leftBottom.x), Math.abs(rightTop.y - leftBottom.y));
|
|
3418
|
+
const { x: left, y: bottom } = leftBottom;
|
|
3419
|
+
const { x: right, y: top } = rightTop;
|
|
3420
|
+
const halfWidth = 5;
|
|
3421
|
+
const corners = [
|
|
3422
|
+
{ x: left - halfWidth, y: top - halfWidth },
|
|
3423
|
+
// 左上角
|
|
3424
|
+
{ x: right - halfWidth, y: top - halfWidth },
|
|
3425
|
+
// 右上角
|
|
3426
|
+
{ x: left - halfWidth, y: bottom - halfWidth },
|
|
3427
|
+
// 左下角
|
|
3428
|
+
{ x: right - halfWidth, y: bottom - halfWidth }
|
|
3429
|
+
// 右下角
|
|
3430
|
+
];
|
|
3431
|
+
for (let i = 0; i < corners.length; i++) {
|
|
3432
|
+
setRectPosition(this.cornerRect[i], corners[i].x, corners[i].y, halfWidth * 2, halfWidth * 2);
|
|
3433
|
+
}
|
|
3434
|
+
const centerHalfWidth = 4;
|
|
3435
|
+
const centerX = (left + right) / 2;
|
|
3436
|
+
const centerY = (bottom + top) / 2;
|
|
3437
|
+
const centers = [
|
|
3438
|
+
{ x: centerX - centerHalfWidth, y: top - centerHalfWidth },
|
|
3439
|
+
// 上
|
|
3440
|
+
{ x: left - centerHalfWidth, y: centerY - centerHalfWidth },
|
|
3441
|
+
// 左
|
|
3442
|
+
{ x: right - centerHalfWidth, y: centerY - centerHalfWidth },
|
|
3443
|
+
// 右
|
|
3444
|
+
{ x: centerX - centerHalfWidth, y: bottom - centerHalfWidth }
|
|
3445
|
+
// 下
|
|
3446
|
+
];
|
|
3447
|
+
for (let i = 0; i < centers.length; i++) {
|
|
3448
|
+
setRectPosition(this.centerRect[i], centers[i].x, centers[i].y, centerHalfWidth * 2, centerHalfWidth * 2);
|
|
3449
|
+
}
|
|
3450
|
+
}
|
|
3451
|
+
};
|
|
3452
|
+
selectGraphic(graphic) {
|
|
3453
|
+
this.graphic = graphic;
|
|
3454
|
+
}
|
|
3455
|
+
dispose() {
|
|
3456
|
+
super.dispose();
|
|
3457
|
+
this.unRegistryEvent();
|
|
3458
|
+
this.rect = null;
|
|
3459
|
+
this.cornerRect = [];
|
|
3460
|
+
this.centerRect = [];
|
|
3461
|
+
}
|
|
3462
|
+
};
|
|
3463
|
+
|
|
3464
|
+
// src/elements/wall.ts
|
|
3465
|
+
import { BufferGeometry as BufferGeometry2, ExtrudeGeometry as ExtrudeGeometry2, LineSegments as LineSegments2, Mesh as Mesh4, Object3D as Object3D9, Vector3 as Vector310 } from "three";
|
|
3466
|
+
import { mergeGeometries } from "three/examples/jsm/utils/BufferGeometryUtils";
|
|
3467
|
+
var Wall = class extends Object3D9 {
|
|
3468
|
+
constructor(context, options) {
|
|
3469
|
+
super();
|
|
3470
|
+
this.context = context;
|
|
3471
|
+
this.options = options;
|
|
3472
|
+
if (!options.length) {
|
|
3473
|
+
return;
|
|
3474
|
+
}
|
|
3475
|
+
this.init();
|
|
3476
|
+
}
|
|
3477
|
+
geometry;
|
|
3478
|
+
material;
|
|
3479
|
+
lineMaterial;
|
|
3480
|
+
lineGeometry;
|
|
3481
|
+
Mesh;
|
|
3482
|
+
LineMesh;
|
|
3483
|
+
initGeometry() {
|
|
3484
|
+
const geometries = this.options.map((option) => {
|
|
3485
|
+
const shape = initShape(
|
|
3486
|
+
option.geometry.coords[0],
|
|
3487
|
+
option.geometry.coords.slice(1)
|
|
3488
|
+
);
|
|
3489
|
+
const geometry = new ExtrudeGeometry2(shape, {
|
|
3490
|
+
steps: 1,
|
|
3491
|
+
bevelEnabled: false,
|
|
3492
|
+
depth: option.height,
|
|
3493
|
+
curveSegments: 4
|
|
3494
|
+
});
|
|
3495
|
+
return geometry;
|
|
3496
|
+
});
|
|
3497
|
+
this.geometry = mergeGeometries(geometries);
|
|
3498
|
+
}
|
|
3499
|
+
initMaterial() {
|
|
3500
|
+
const { fillColor, fillOpacity, height } = this.options[0];
|
|
3501
|
+
const material = this.context.materialFactory.createMeshBasicMaterial({
|
|
3502
|
+
color: fillColor,
|
|
3503
|
+
opacity: fillOpacity
|
|
3504
|
+
});
|
|
3505
|
+
const material1 = this.context.materialFactory.createMeshBasicMaterial({
|
|
3506
|
+
color: darkenColor(fillColor),
|
|
3507
|
+
opacity: fillOpacity
|
|
3508
|
+
});
|
|
3509
|
+
this.material = [material, material1];
|
|
3510
|
+
return [material, material1];
|
|
3511
|
+
}
|
|
3512
|
+
initLineMaterial() {
|
|
3513
|
+
const { strokeColor, strokeOpacity } = this.options[0];
|
|
3514
|
+
const lineMaterial = this.context.materialFactory.createLineMaterial({
|
|
3515
|
+
color: strokeColor,
|
|
3516
|
+
opacity: strokeOpacity
|
|
3517
|
+
});
|
|
3518
|
+
this.lineMaterial = lineMaterial;
|
|
3519
|
+
return lineMaterial;
|
|
3520
|
+
}
|
|
3521
|
+
getBorderPoints(option) {
|
|
3522
|
+
const { height, deltaHeight, geometry } = option;
|
|
3523
|
+
const points = [];
|
|
3524
|
+
const _height = height + (deltaHeight || 0);
|
|
3525
|
+
const { coords } = geometry;
|
|
3526
|
+
for (let j = 0; j < coords.length; j++) {
|
|
3527
|
+
const curCds = coords[j];
|
|
3528
|
+
for (let i = 0; i < curCds.length; i++) {
|
|
3529
|
+
const cur = curCds[i];
|
|
3530
|
+
const next = i + 1 === curCds.length ? curCds[0] : curCds[i + 1];
|
|
3531
|
+
points.push(new Vector310(cur[0], cur[1], _height));
|
|
3532
|
+
points.push(new Vector310(next[0], next[1], _height));
|
|
3533
|
+
}
|
|
3534
|
+
}
|
|
3535
|
+
return points;
|
|
3536
|
+
}
|
|
3537
|
+
initLineGeometry() {
|
|
3538
|
+
const geometries = this.options.map((option) => {
|
|
3539
|
+
const points = this.getBorderPoints(option);
|
|
3540
|
+
return new BufferGeometry2().setFromPoints(points);
|
|
3541
|
+
});
|
|
3542
|
+
this.lineGeometry = mergeGeometries(geometries);
|
|
3543
|
+
}
|
|
3544
|
+
createBorder() {
|
|
3545
|
+
const line = new LineSegments2(this.lineGeometry, this.lineMaterial);
|
|
3546
|
+
this.LineMesh = line;
|
|
3547
|
+
this.add(line);
|
|
3548
|
+
return line;
|
|
3549
|
+
}
|
|
3550
|
+
init() {
|
|
3551
|
+
this.initGeometry();
|
|
3552
|
+
this.initMaterial();
|
|
3553
|
+
const mesh = new Mesh4(this.geometry, this.material);
|
|
3554
|
+
this.add(mesh);
|
|
3555
|
+
this.initLineMaterial();
|
|
3556
|
+
this.initLineGeometry();
|
|
3557
|
+
this.createBorder();
|
|
3558
|
+
}
|
|
3559
|
+
dispose() {
|
|
3560
|
+
this.geometry?.dispose();
|
|
3561
|
+
this.lineGeometry?.dispose();
|
|
3562
|
+
this.clear();
|
|
3563
|
+
}
|
|
3564
|
+
};
|
|
3565
|
+
|
|
3566
|
+
// src/elements/ground-texture.ts
|
|
3567
|
+
import { ExtrudeGeometry as ExtrudeGeometry3, Mesh as Mesh5, Object3D as Object3D10 } from "three";
|
|
3568
|
+
var defaultOptions4 = {
|
|
3569
|
+
uuid: "",
|
|
3570
|
+
iconUrl: "",
|
|
3571
|
+
name: "",
|
|
3572
|
+
secondRotate: 0,
|
|
3573
|
+
airHeight: 0,
|
|
3574
|
+
deltaHeight: 0,
|
|
3575
|
+
height: 0,
|
|
3576
|
+
geometry: { cds: [], type: "polygon", coords: [], curveCpt: [], curveIndex: [] },
|
|
3577
|
+
opacity: 1,
|
|
3578
|
+
visible: true
|
|
3579
|
+
};
|
|
3580
|
+
var GroundTexture = class extends Object3D10 {
|
|
3581
|
+
constructor(context, options) {
|
|
3582
|
+
super();
|
|
3583
|
+
this.context = context;
|
|
3584
|
+
this.options = proxyOptions(
|
|
3585
|
+
{ ...defaultOptions4, ...options },
|
|
3586
|
+
this
|
|
3587
|
+
);
|
|
3588
|
+
this.init();
|
|
3589
|
+
}
|
|
3590
|
+
options;
|
|
3591
|
+
mesh;
|
|
3592
|
+
async init() {
|
|
3593
|
+
const { deltaHeight, airHeight, geometry, iconUrl, opacity } = this.options;
|
|
3594
|
+
const shape = initShape(
|
|
3595
|
+
geometry.coords[0],
|
|
3596
|
+
geometry.coords.slice(1)
|
|
3597
|
+
);
|
|
3598
|
+
const extrudeGeometry = new ExtrudeGeometry3(shape, {
|
|
3599
|
+
steps: 1,
|
|
3600
|
+
bevelEnabled: false,
|
|
3601
|
+
depth: 0,
|
|
3602
|
+
curveSegments: 4
|
|
3603
|
+
});
|
|
3604
|
+
const planeMaterial = await this.context.materialFactory.createGroundTextureMaterial({
|
|
3605
|
+
url: iconUrl,
|
|
3606
|
+
opacity
|
|
3607
|
+
});
|
|
3608
|
+
const mesh = new Mesh5(extrudeGeometry, planeMaterial);
|
|
3609
|
+
this.mesh = mesh;
|
|
3610
|
+
this.mesh.position.z = airHeight + deltaHeight;
|
|
3611
|
+
this.add(mesh);
|
|
3612
|
+
}
|
|
3613
|
+
dispose() {
|
|
3614
|
+
this.mesh?.geometry.dispose();
|
|
3615
|
+
this.clear();
|
|
3616
|
+
}
|
|
3617
|
+
};
|
|
3618
|
+
|
|
3619
|
+
// src/elements/glb-model.ts
|
|
3620
|
+
import { Box3 as Box37, Object3D as Object3D11, Vector3 as Vector312 } from "three";
|
|
3621
|
+
var defaultGlbOptions = {
|
|
3622
|
+
url: "",
|
|
3623
|
+
geometry: { type: "polygon", cds: [], coords: [], curveCpt: [], curveIndex: [] },
|
|
3624
|
+
id: "",
|
|
3625
|
+
width: 0,
|
|
3626
|
+
rotate: 1,
|
|
3627
|
+
airHeight: 1,
|
|
3628
|
+
deltaHeight: 0
|
|
3629
|
+
};
|
|
3630
|
+
var GlbModel = class extends Object3D11 {
|
|
3631
|
+
constructor(context, options) {
|
|
3632
|
+
super();
|
|
3633
|
+
this.context = context;
|
|
3634
|
+
this.options = Object.assign({}, defaultGlbOptions, options);
|
|
3635
|
+
this.loadModel();
|
|
3402
3636
|
}
|
|
3403
|
-
|
|
3404
|
-
|
|
3405
|
-
|
|
3406
|
-
|
|
3407
|
-
|
|
3408
|
-
|
|
3409
|
-
|
|
3410
|
-
|
|
3411
|
-
|
|
3412
|
-
|
|
3637
|
+
model = null;
|
|
3638
|
+
options;
|
|
3639
|
+
async loadModel() {
|
|
3640
|
+
const object = await loadModel(this.options.url);
|
|
3641
|
+
object.scene.rotation.set(Math.PI / 2, Math.PI / 2, 0);
|
|
3642
|
+
const box = new Box37().setFromObject(object.scene);
|
|
3643
|
+
const size = box.getSize(new Vector312());
|
|
3644
|
+
const max = Math.max(size.x, size.y);
|
|
3645
|
+
const scale = this.options.width / max;
|
|
3646
|
+
this.scale.set(scale, scale, scale);
|
|
3647
|
+
this.add(object.scene);
|
|
3648
|
+
this.position.copy(box.getCenter(new Vector312()));
|
|
3649
|
+
this.position.z += this.options.airHeight + this.options.deltaHeight;
|
|
3650
|
+
this.model = object;
|
|
3413
3651
|
}
|
|
3414
3652
|
dispose() {
|
|
3415
|
-
|
|
3416
|
-
this.
|
|
3417
|
-
this.lines = [];
|
|
3418
|
-
this.circles = [];
|
|
3653
|
+
dispose(this);
|
|
3654
|
+
this.model = null;
|
|
3419
3655
|
}
|
|
3420
3656
|
};
|
|
3421
3657
|
|
|
3422
|
-
// src/elements/
|
|
3423
|
-
import {
|
|
3424
|
-
|
|
3425
|
-
|
|
3426
|
-
|
|
3658
|
+
// src/elements/lane.ts
|
|
3659
|
+
import { BufferGeometry as BufferGeometry3, ExtrudeGeometry as ExtrudeGeometry4, LineSegments as LineSegments3, Mesh as Mesh6, Object3D as Object3D12, Vector3 as Vector313 } from "three";
|
|
3660
|
+
import { mergeGeometries as mergeGeometries2 } from "three/examples/jsm/utils/BufferGeometryUtils";
|
|
3661
|
+
import { Line2 } from "three/examples/jsm/lines/line2";
|
|
3662
|
+
import { LineGeometry } from "three/examples/jsm/lines/lineGeometry";
|
|
3663
|
+
var Lane = class extends Object3D12 {
|
|
3664
|
+
constructor(context, options) {
|
|
3665
|
+
super();
|
|
3427
3666
|
this.context = context;
|
|
3428
|
-
|
|
3429
|
-
|
|
3430
|
-
|
|
3431
|
-
for (let i = 0; i < 4; i++) {
|
|
3432
|
-
this.cornerRect[i] = createRect(line.stroke, "#ffffff");
|
|
3433
|
-
this.centerRect[i] = createRect(line.stroke, "#ffffff");
|
|
3434
|
-
this.svg.appendChild(this.cornerRect[i]);
|
|
3435
|
-
this.svg.appendChild(this.centerRect[i]);
|
|
3667
|
+
this.options = options;
|
|
3668
|
+
if (!options.length) {
|
|
3669
|
+
return;
|
|
3436
3670
|
}
|
|
3437
|
-
this.
|
|
3671
|
+
this.init();
|
|
3438
3672
|
}
|
|
3439
|
-
|
|
3440
|
-
|
|
3441
|
-
|
|
3442
|
-
|
|
3443
|
-
|
|
3444
|
-
|
|
3445
|
-
|
|
3446
|
-
|
|
3447
|
-
|
|
3448
|
-
|
|
3449
|
-
|
|
3450
|
-
|
|
3451
|
-
|
|
3673
|
+
geometry;
|
|
3674
|
+
material;
|
|
3675
|
+
lineMaterial;
|
|
3676
|
+
lineGeometry;
|
|
3677
|
+
Mesh;
|
|
3678
|
+
LineMesh;
|
|
3679
|
+
initGeometry() {
|
|
3680
|
+
const geometries = this.options.map((option) => {
|
|
3681
|
+
const shape = initShape(
|
|
3682
|
+
option.geometry.coords[0],
|
|
3683
|
+
option.geometry.coords.slice(1)
|
|
3684
|
+
);
|
|
3685
|
+
const geometry = new ExtrudeGeometry4(shape, {
|
|
3686
|
+
steps: 1,
|
|
3687
|
+
bevelEnabled: false,
|
|
3688
|
+
depth: 0,
|
|
3689
|
+
curveSegments: 4
|
|
3690
|
+
});
|
|
3691
|
+
return geometry;
|
|
3692
|
+
});
|
|
3693
|
+
this.geometry = mergeGeometries2(geometries);
|
|
3452
3694
|
}
|
|
3453
|
-
|
|
3454
|
-
|
|
3695
|
+
initMaterial() {
|
|
3696
|
+
const { fillColor, fillOpacity } = this.options[0];
|
|
3697
|
+
const material = this.context.materialFactory.createMeshBasicMaterial({
|
|
3698
|
+
color: fillColor,
|
|
3699
|
+
opacity: fillOpacity
|
|
3700
|
+
});
|
|
3701
|
+
this.material = material;
|
|
3702
|
+
return material;
|
|
3455
3703
|
}
|
|
3456
|
-
|
|
3457
|
-
|
|
3704
|
+
initLineMaterial() {
|
|
3705
|
+
const { strokeColor, strokeOpacity } = this.options[0];
|
|
3706
|
+
const lineMaterial = this.context.materialFactory.createLineMaterial({
|
|
3707
|
+
color: strokeColor,
|
|
3708
|
+
opacity: strokeOpacity
|
|
3709
|
+
});
|
|
3710
|
+
this.lineMaterial = lineMaterial;
|
|
3711
|
+
return lineMaterial;
|
|
3458
3712
|
}
|
|
3459
|
-
|
|
3460
|
-
|
|
3461
|
-
|
|
3462
|
-
|
|
3463
|
-
|
|
3464
|
-
|
|
3713
|
+
getBorderPoints(option) {
|
|
3714
|
+
const { deltaHeight, geometry } = option;
|
|
3715
|
+
const points = [];
|
|
3716
|
+
const _height = deltaHeight || 0;
|
|
3717
|
+
const { coords } = geometry;
|
|
3718
|
+
for (let j = 0; j < coords.length; j++) {
|
|
3719
|
+
const curCds = coords[j];
|
|
3720
|
+
for (let i = 0; i < curCds.length; i++) {
|
|
3721
|
+
const cur = curCds[i];
|
|
3722
|
+
const next = i + 1 === curCds.length ? curCds[0] : curCds[i + 1];
|
|
3723
|
+
points.push(new Vector313(cur[0], cur[1], _height));
|
|
3724
|
+
points.push(new Vector313(next[0], next[1], _height));
|
|
3465
3725
|
}
|
|
3466
|
-
}
|
|
3467
|
-
|
|
3468
|
-
|
|
3469
|
-
|
|
3470
|
-
|
|
3471
|
-
|
|
3472
|
-
|
|
3473
|
-
|
|
3474
|
-
|
|
3475
|
-
const
|
|
3476
|
-
|
|
3477
|
-
|
|
3478
|
-
// 左上角
|
|
3479
|
-
{ x: right - halfWidth, y: top - halfWidth },
|
|
3480
|
-
// 右上角
|
|
3481
|
-
{ x: left - halfWidth, y: bottom - halfWidth },
|
|
3482
|
-
// 左下角
|
|
3483
|
-
{ x: right - halfWidth, y: bottom - halfWidth }
|
|
3484
|
-
// 右下角
|
|
3485
|
-
];
|
|
3486
|
-
for (let i = 0; i < corners.length; i++) {
|
|
3487
|
-
setRectPosition(this.cornerRect[i], corners[i].x, corners[i].y, halfWidth * 2, halfWidth * 2);
|
|
3726
|
+
}
|
|
3727
|
+
return points;
|
|
3728
|
+
}
|
|
3729
|
+
initDoubleLine() {
|
|
3730
|
+
const options = this.options.filter((option) => option.double && option.geometry.otherCoords?.[1]?.length);
|
|
3731
|
+
if (!options.length) {
|
|
3732
|
+
return;
|
|
3733
|
+
}
|
|
3734
|
+
const group = options.reduce((obj, cur) => {
|
|
3735
|
+
const key = `${cur.secondColor}-${cur.dashed}`;
|
|
3736
|
+
if (obj[key]) {
|
|
3737
|
+
obj[key].push(cur);
|
|
3488
3738
|
}
|
|
3489
|
-
|
|
3490
|
-
|
|
3491
|
-
const centerY = (bottom + top) / 2;
|
|
3492
|
-
const centers = [
|
|
3493
|
-
{ x: centerX - centerHalfWidth, y: top - centerHalfWidth },
|
|
3494
|
-
// 上
|
|
3495
|
-
{ x: left - centerHalfWidth, y: centerY - centerHalfWidth },
|
|
3496
|
-
// 左
|
|
3497
|
-
{ x: right - centerHalfWidth, y: centerY - centerHalfWidth },
|
|
3498
|
-
// 右
|
|
3499
|
-
{ x: centerX - centerHalfWidth, y: bottom - centerHalfWidth }
|
|
3500
|
-
// 下
|
|
3501
|
-
];
|
|
3502
|
-
for (let i = 0; i < centers.length; i++) {
|
|
3503
|
-
setRectPosition(this.centerRect[i], centers[i].x, centers[i].y, centerHalfWidth * 2, centerHalfWidth * 2);
|
|
3739
|
+
if (!obj[key]) {
|
|
3740
|
+
obj[key] = [cur];
|
|
3504
3741
|
}
|
|
3505
|
-
|
|
3506
|
-
|
|
3507
|
-
|
|
3508
|
-
|
|
3742
|
+
return obj;
|
|
3743
|
+
}, {});
|
|
3744
|
+
Object.values(group).map((options2) => {
|
|
3745
|
+
const material = this.context.materialFactory.createLine2MaterialMap({
|
|
3746
|
+
color: options2[0].secondColor,
|
|
3747
|
+
width: 0.2,
|
|
3748
|
+
dashed: options2[0].dashed
|
|
3749
|
+
});
|
|
3750
|
+
options2.map((option) => {
|
|
3751
|
+
const geometry = new LineGeometry();
|
|
3752
|
+
const vec = option.geometry.otherCoords[1].map((item) => [...item, 0]).flat(2);
|
|
3753
|
+
geometry.setPositions(vec);
|
|
3754
|
+
const line = new Line2(geometry, material);
|
|
3755
|
+
line.computeLineDistances();
|
|
3756
|
+
line.position.z += 1e-4;
|
|
3757
|
+
this.add(line);
|
|
3758
|
+
});
|
|
3759
|
+
});
|
|
3760
|
+
}
|
|
3761
|
+
initLineGeometry() {
|
|
3762
|
+
const geometries = this.options.map((option) => {
|
|
3763
|
+
const points = this.getBorderPoints(option);
|
|
3764
|
+
return new BufferGeometry3().setFromPoints(points);
|
|
3765
|
+
});
|
|
3766
|
+
this.lineGeometry = mergeGeometries2(geometries);
|
|
3767
|
+
}
|
|
3768
|
+
createBorder() {
|
|
3769
|
+
const line = new LineSegments3(this.lineGeometry, this.lineMaterial);
|
|
3770
|
+
this.LineMesh = line;
|
|
3771
|
+
this.add(line);
|
|
3772
|
+
return line;
|
|
3773
|
+
}
|
|
3774
|
+
init() {
|
|
3775
|
+
this.initGeometry();
|
|
3776
|
+
this.initMaterial();
|
|
3777
|
+
const mesh = new Mesh6(this.geometry, this.material);
|
|
3778
|
+
this.add(mesh);
|
|
3779
|
+
this.initLineMaterial();
|
|
3780
|
+
this.initLineGeometry();
|
|
3781
|
+
this.createBorder();
|
|
3782
|
+
this.initDoubleLine();
|
|
3509
3783
|
}
|
|
3510
3784
|
dispose() {
|
|
3511
|
-
|
|
3512
|
-
this.
|
|
3513
|
-
this.
|
|
3514
|
-
this.cornerRect = [];
|
|
3515
|
-
this.centerRect = [];
|
|
3785
|
+
this.geometry?.dispose();
|
|
3786
|
+
this.lineGeometry?.dispose();
|
|
3787
|
+
this.clear();
|
|
3516
3788
|
}
|
|
3517
3789
|
};
|
|
3518
3790
|
|
|
@@ -3874,13 +4146,15 @@ var HoverHelper = class extends EventDispatcher5 {
|
|
|
3874
4146
|
};
|
|
3875
4147
|
|
|
3876
4148
|
// src/factory/material.ts
|
|
4149
|
+
import { LineMaterial } from "three/examples/jsm/lines/LineMaterial";
|
|
3877
4150
|
import {
|
|
3878
4151
|
Color as Color4,
|
|
3879
|
-
LineBasicMaterial as
|
|
4152
|
+
LineBasicMaterial as LineBasicMaterial4,
|
|
3880
4153
|
MeshStandardMaterial as MeshStandardMaterial2,
|
|
3881
|
-
MeshBasicMaterial as
|
|
4154
|
+
MeshBasicMaterial as MeshBasicMaterial6,
|
|
3882
4155
|
ShaderMaterial as ShaderMaterial2,
|
|
3883
|
-
DoubleSide as DoubleSide4
|
|
4156
|
+
DoubleSide as DoubleSide4,
|
|
4157
|
+
Vector2 as Vector25
|
|
3884
4158
|
} from "three";
|
|
3885
4159
|
function vectorToString(vector) {
|
|
3886
4160
|
return `${vector.x}-${vector.y}-${vector.z}`;
|
|
@@ -3894,6 +4168,7 @@ var MaterialFactory = class {
|
|
|
3894
4168
|
meshBasicMaterialMap = /* @__PURE__ */ new Map();
|
|
3895
4169
|
shaderMaterialMap = /* @__PURE__ */ new Map();
|
|
3896
4170
|
groundTextureMaterialMap = /* @__PURE__ */ new Map();
|
|
4171
|
+
line2MaterialMap = /* @__PURE__ */ new Map();
|
|
3897
4172
|
generateLineMaterialKey({ color, opacity }) {
|
|
3898
4173
|
return `${color}-${opacity}`;
|
|
3899
4174
|
}
|
|
@@ -3902,7 +4177,7 @@ var MaterialFactory = class {
|
|
|
3902
4177
|
if (this.lineMaterialMap.has(key)) {
|
|
3903
4178
|
return this.lineMaterialMap.get(key);
|
|
3904
4179
|
}
|
|
3905
|
-
const lineMaterial = new
|
|
4180
|
+
const lineMaterial = new LineBasicMaterial4({
|
|
3906
4181
|
color: new Color4(color).convertLinearToSRGB(),
|
|
3907
4182
|
transparent: true,
|
|
3908
4183
|
opacity
|
|
@@ -3930,7 +4205,7 @@ var MaterialFactory = class {
|
|
|
3930
4205
|
if (this.meshBasicMaterialMap.has(key)) {
|
|
3931
4206
|
return this.meshBasicMaterialMap.get(key);
|
|
3932
4207
|
}
|
|
3933
|
-
const material = new
|
|
4208
|
+
const material = new MeshBasicMaterial6({
|
|
3934
4209
|
color,
|
|
3935
4210
|
transparent: true,
|
|
3936
4211
|
opacity,
|
|
@@ -4033,7 +4308,7 @@ var MaterialFactory = class {
|
|
|
4033
4308
|
return this.groundTextureMaterialMap.get(key);
|
|
4034
4309
|
}
|
|
4035
4310
|
const texture = await this.context.textureFactory.getTexture(url);
|
|
4036
|
-
const material = new
|
|
4311
|
+
const material = new MeshBasicMaterial6({
|
|
4037
4312
|
map: texture,
|
|
4038
4313
|
transparent: true,
|
|
4039
4314
|
opacity
|
|
@@ -4041,6 +4316,24 @@ var MaterialFactory = class {
|
|
|
4041
4316
|
this.groundTextureMaterialMap.set(key, material);
|
|
4042
4317
|
return material;
|
|
4043
4318
|
}
|
|
4319
|
+
createLine2MaterialMap({ color, width, dashed }) {
|
|
4320
|
+
const key = `${color}-${width}-${dashed}`;
|
|
4321
|
+
if (this.line2MaterialMap.has(key)) {
|
|
4322
|
+
return this.line2MaterialMap.get(key);
|
|
4323
|
+
}
|
|
4324
|
+
const material = new LineMaterial({
|
|
4325
|
+
color: parseInt(color.slice(1), 16),
|
|
4326
|
+
dashed,
|
|
4327
|
+
linewidth: width,
|
|
4328
|
+
worldUnits: true,
|
|
4329
|
+
dashSize: 1,
|
|
4330
|
+
gapSize: 3,
|
|
4331
|
+
dashScale: 1,
|
|
4332
|
+
resolution: new Vector25(this.context.clientSize.width, this.context.clientSize.height)
|
|
4333
|
+
});
|
|
4334
|
+
this.line2MaterialMap.set(key, material);
|
|
4335
|
+
return material;
|
|
4336
|
+
}
|
|
4044
4337
|
dispose() {
|
|
4045
4338
|
this.lineMaterialMap.forEach((val, _) => {
|
|
4046
4339
|
val.dispose();
|
|
@@ -4063,11 +4356,15 @@ var MaterialFactory = class {
|
|
|
4063
4356
|
val.map?.dispose();
|
|
4064
4357
|
});
|
|
4065
4358
|
this.groundTextureMaterialMap.clear();
|
|
4359
|
+
this.line2MaterialMap.forEach((val, _) => {
|
|
4360
|
+
val.dispose();
|
|
4361
|
+
});
|
|
4362
|
+
this.line2MaterialMap.clear();
|
|
4066
4363
|
}
|
|
4067
4364
|
};
|
|
4068
4365
|
|
|
4069
4366
|
// src/utils/camera-bound.ts
|
|
4070
|
-
import { Box3 as
|
|
4367
|
+
import { Box3 as Box38, Vector3 as Vector316 } from "three";
|
|
4071
4368
|
var CameraBound = class {
|
|
4072
4369
|
constructor(context) {
|
|
4073
4370
|
this.context = context;
|
|
@@ -4075,9 +4372,9 @@ var CameraBound = class {
|
|
|
4075
4372
|
this.changePrevCamera();
|
|
4076
4373
|
}
|
|
4077
4374
|
prevCamera = {
|
|
4078
|
-
position: new
|
|
4375
|
+
position: new Vector316(),
|
|
4079
4376
|
zoom: 1,
|
|
4080
|
-
target: new
|
|
4377
|
+
target: new Vector316()
|
|
4081
4378
|
};
|
|
4082
4379
|
enable = true;
|
|
4083
4380
|
setEnable(enable) {
|
|
@@ -4110,16 +4407,17 @@ var CameraBound = class {
|
|
|
4110
4407
|
this.context.removeEventListener("control-change", this.onCameraChange);
|
|
4111
4408
|
}
|
|
4112
4409
|
getCurFloorScreenPosition() {
|
|
4113
|
-
|
|
4410
|
+
const floors = this.context.scene.children.filter((el) => el instanceof Floor);
|
|
4411
|
+
if (!floors.length) {
|
|
4114
4412
|
return null;
|
|
4115
4413
|
}
|
|
4116
|
-
const box = new
|
|
4117
|
-
const { camera,
|
|
4414
|
+
const box = new Box38().setFromObject(this.context.scene);
|
|
4415
|
+
const { camera, clientSize: { width: w, height: h } } = this.context;
|
|
4118
4416
|
const { min, max } = box;
|
|
4119
4417
|
const lb = vector3ToDevice(min, camera, w, h);
|
|
4120
4418
|
const rt = vector3ToDevice(max, camera, w, h);
|
|
4121
|
-
const lt = vector3ToDevice(new
|
|
4122
|
-
const rb = vector3ToDevice(new
|
|
4419
|
+
const lt = vector3ToDevice(new Vector316(min.x, max.y, max.z), camera, w, h);
|
|
4420
|
+
const rb = vector3ToDevice(new Vector316(max.x, min.y, min.z), camera, w, h);
|
|
4123
4421
|
const left = Math.min(lb.x, rt.x, lt.x, rb.x);
|
|
4124
4422
|
const right = Math.max(lb.x, rt.x, lt.x, rb.x);
|
|
4125
4423
|
const top = Math.min(lb.y, rt.y, lt.y, rb.y);
|
|
@@ -4134,9 +4432,23 @@ var CameraBound = class {
|
|
|
4134
4432
|
checkDistanceToScreenEdge({ left, right, top, bottom }) {
|
|
4135
4433
|
const { width, height } = this.context.clientSize;
|
|
4136
4434
|
const [pt, pr, pb, pl] = this.context.config.cameraBound.padding;
|
|
4137
|
-
|
|
4435
|
+
const checkedRight = right >= pl;
|
|
4436
|
+
const checkedLeft = width - left >= pr;
|
|
4437
|
+
const checkedTop = height - top >= pb;
|
|
4438
|
+
const checkedBottom = bottom >= pt;
|
|
4439
|
+
return checkedRight && checkedLeft && checkedTop && checkedBottom;
|
|
4138
4440
|
}
|
|
4139
4441
|
onCameraChange = () => {
|
|
4442
|
+
const bound = this.getCurFloorScreenPosition();
|
|
4443
|
+
if (bound) {
|
|
4444
|
+
const { left, right, top, bottom } = bound;
|
|
4445
|
+
const isInBound = this.checkDistanceToScreenEdge({ left, right, top, bottom });
|
|
4446
|
+
if (isInBound) {
|
|
4447
|
+
this.changePrevCamera();
|
|
4448
|
+
} else {
|
|
4449
|
+
this.backToPrevCamera();
|
|
4450
|
+
}
|
|
4451
|
+
}
|
|
4140
4452
|
};
|
|
4141
4453
|
dispose() {
|
|
4142
4454
|
this.unRegistryEvent();
|
|
@@ -4235,7 +4547,7 @@ var Context = class extends EventDispatcher6 {
|
|
|
4235
4547
|
/**
|
|
4236
4548
|
* 获取两个点之间的像素数
|
|
4237
4549
|
*/
|
|
4238
|
-
getRatio(point1 = new
|
|
4550
|
+
getRatio(point1 = new Vector317(0, 0, 0), point22 = new Vector317(100, 0, 0)) {
|
|
4239
4551
|
const { clientWidth, clientHeight } = this.container;
|
|
4240
4552
|
const device1 = vector3ToDevice(point1, this.camera, clientWidth, clientHeight);
|
|
4241
4553
|
const device2 = vector3ToDevice(point22, this.camera, clientWidth, clientHeight);
|
|
@@ -4296,7 +4608,7 @@ var Context = class extends EventDispatcher6 {
|
|
|
4296
4608
|
* @returns
|
|
4297
4609
|
*/
|
|
4298
4610
|
getGraphicsByDeviceXy(x, y) {
|
|
4299
|
-
const point3 = new
|
|
4611
|
+
const point3 = new Vector26();
|
|
4300
4612
|
point3.x = x / this.clientSize.width * 2 - 1;
|
|
4301
4613
|
point3.y = y / this.clientSize.height * -2 + 1;
|
|
4302
4614
|
const raycaster = new Raycaster3();
|
|
@@ -4436,7 +4748,7 @@ var Context = class extends EventDispatcher6 {
|
|
|
4436
4748
|
);
|
|
4437
4749
|
}
|
|
4438
4750
|
getCameraLookAt() {
|
|
4439
|
-
return new
|
|
4751
|
+
return new Vector317().subVectors(this.control.target, this.camera.position);
|
|
4440
4752
|
}
|
|
4441
4753
|
/**
|
|
4442
4754
|
* 按照一个中心点设置相机的放大缩小
|
|
@@ -4488,28 +4800,28 @@ var Context = class extends EventDispatcher6 {
|
|
|
4488
4800
|
if (force2DView) {
|
|
4489
4801
|
this.setPolarAngle(0, 0);
|
|
4490
4802
|
}
|
|
4491
|
-
const boundingBox = new
|
|
4803
|
+
const boundingBox = new Box39().setFromObject(object);
|
|
4492
4804
|
this.setPolarAngle(polar, 0);
|
|
4493
4805
|
const { max, min } = boundingBox;
|
|
4494
|
-
const leftTop = new
|
|
4495
|
-
const rightTop = new
|
|
4496
|
-
const rightBottom = new
|
|
4497
|
-
const leftBottom = new
|
|
4806
|
+
const leftTop = new Vector317(min.x, max.y, max.z);
|
|
4807
|
+
const rightTop = new Vector317(max.x, max.y, max.z);
|
|
4808
|
+
const rightBottom = new Vector317(max.x, min.y, min.z);
|
|
4809
|
+
const leftBottom = new Vector317(min.x, min.y, min.z);
|
|
4498
4810
|
const leftTop2d = vector3ToDevice(leftTop, this.camera, width, height);
|
|
4499
4811
|
const rightTop2d = vector3ToDevice(rightTop, this.camera, width, height);
|
|
4500
4812
|
const leftBottom2d = vector3ToDevice(leftBottom, this.camera, width, height);
|
|
4501
4813
|
const rightBottom2d = vector3ToDevice(rightBottom, this.camera, width, height);
|
|
4502
4814
|
const boundingBox2d = new Box2().setFromPoints([
|
|
4503
|
-
new
|
|
4504
|
-
new
|
|
4505
|
-
new
|
|
4506
|
-
new
|
|
4815
|
+
new Vector26(leftTop2d.x, leftTop2d.y),
|
|
4816
|
+
new Vector26(rightTop2d.x, rightTop2d.y),
|
|
4817
|
+
new Vector26(leftBottom2d.x, leftBottom2d.y),
|
|
4818
|
+
new Vector26(rightBottom2d.x, rightBottom2d.y)
|
|
4507
4819
|
]);
|
|
4508
|
-
const size = boundingBox2d.getSize(new
|
|
4820
|
+
const size = boundingBox2d.getSize(new Vector26());
|
|
4509
4821
|
const xScale = (width - right - left) / size.x;
|
|
4510
4822
|
const yScale = (height - top - bottom) / size.y;
|
|
4511
4823
|
const scale = Math.min(xScale, yScale);
|
|
4512
|
-
const center2 = new
|
|
4824
|
+
const center2 = new Vector317((max.x + min.x) / 2, (max.y + min.y) / 2, (max.z + min.z) / 2);
|
|
4513
4825
|
return { zoom: scale * this.camera.zoom, center: center2 };
|
|
4514
4826
|
}
|
|
4515
4827
|
/**
|
|
@@ -4969,6 +5281,7 @@ var BMap = class extends EventDispatcher7 {
|
|
|
4969
5281
|
this.context.control.addEventListener("change", this.onControlChange);
|
|
4970
5282
|
this.onControlChange();
|
|
4971
5283
|
this.context.cameraBound.setEnable(true);
|
|
5284
|
+
this.context.cameraBound.changePrevCamera();
|
|
4972
5285
|
}
|
|
4973
5286
|
onControlChange = () => {
|
|
4974
5287
|
const {
|
|
@@ -5059,7 +5372,7 @@ var BMap = class extends EventDispatcher7 {
|
|
|
5059
5372
|
} = this.context;
|
|
5060
5373
|
const device = vector3ToDevice(position, camera, width, height);
|
|
5061
5374
|
const offsetX = device.x - width / 2;
|
|
5062
|
-
const v3 = new
|
|
5375
|
+
const v3 = new Vector318();
|
|
5063
5376
|
v3.setFromMatrixColumn(this.context.camera.matrix, 0);
|
|
5064
5377
|
v3.normalize();
|
|
5065
5378
|
v3.multiplyScalar(offsetX / this.context.camera.zoom);
|
|
@@ -5432,32 +5745,32 @@ function Worker2() {
|
|
|
5432
5745
|
|
|
5433
5746
|
// src/plugins/navigation/path.ts
|
|
5434
5747
|
import {
|
|
5435
|
-
Mesh as
|
|
5436
|
-
Object3D as
|
|
5748
|
+
Mesh as Mesh7,
|
|
5749
|
+
Object3D as Object3D15,
|
|
5437
5750
|
TextureLoader as TextureLoader2,
|
|
5438
5751
|
Color as Color7,
|
|
5439
|
-
Vector2 as
|
|
5440
|
-
Vector3 as
|
|
5752
|
+
Vector2 as Vector28,
|
|
5753
|
+
Vector3 as Vector320,
|
|
5441
5754
|
NormalBlending,
|
|
5442
5755
|
RepeatWrapping
|
|
5443
5756
|
} from "three";
|
|
5444
5757
|
|
|
5445
5758
|
// src/external/meshLine.js
|
|
5446
5759
|
import {
|
|
5447
|
-
BufferGeometry as
|
|
5760
|
+
BufferGeometry as BufferGeometry4,
|
|
5448
5761
|
Matrix4,
|
|
5449
|
-
Vector3 as
|
|
5762
|
+
Vector3 as Vector319,
|
|
5450
5763
|
Ray as Ray2,
|
|
5451
5764
|
Sphere,
|
|
5452
|
-
LineSegments as
|
|
5765
|
+
LineSegments as LineSegments4,
|
|
5453
5766
|
BufferAttribute,
|
|
5454
5767
|
ShaderChunk,
|
|
5455
5768
|
ShaderMaterial as ShaderMaterial3,
|
|
5456
5769
|
UniformsLib,
|
|
5457
5770
|
Color as Color6,
|
|
5458
|
-
Vector2 as
|
|
5771
|
+
Vector2 as Vector27
|
|
5459
5772
|
} from "three";
|
|
5460
|
-
var MeshLine = class extends
|
|
5773
|
+
var MeshLine = class extends BufferGeometry4 {
|
|
5461
5774
|
constructor() {
|
|
5462
5775
|
super();
|
|
5463
5776
|
this.isMeshLine = true;
|
|
@@ -5526,7 +5839,7 @@ MeshLine.prototype.setPoints = function(points, wcb) {
|
|
|
5526
5839
|
this.widthCallback = wcb;
|
|
5527
5840
|
this.positions = [];
|
|
5528
5841
|
this.counters = [];
|
|
5529
|
-
if (points.length && points[0] instanceof
|
|
5842
|
+
if (points.length && points[0] instanceof Vector319) {
|
|
5530
5843
|
for (var j = 0; j < points.length; j++) {
|
|
5531
5844
|
var p = points[j];
|
|
5532
5845
|
var c = j / points.length;
|
|
@@ -5550,7 +5863,7 @@ function MeshLineRaycast(raycaster, intersects) {
|
|
|
5550
5863
|
var inverseMatrix = new Matrix4();
|
|
5551
5864
|
var ray = new Ray2();
|
|
5552
5865
|
var sphere = new Sphere();
|
|
5553
|
-
var interRay = new
|
|
5866
|
+
var interRay = new Vector319();
|
|
5554
5867
|
var geometry = this.geometry;
|
|
5555
5868
|
if (!geometry.boundingSphere) geometry.computeBoundingSphere();
|
|
5556
5869
|
sphere.copy(geometry.boundingSphere);
|
|
@@ -5560,10 +5873,10 @@ function MeshLineRaycast(raycaster, intersects) {
|
|
|
5560
5873
|
}
|
|
5561
5874
|
inverseMatrix.copy(this.matrixWorld).invert();
|
|
5562
5875
|
ray.copy(raycaster.ray).applyMatrix4(inverseMatrix);
|
|
5563
|
-
var vStart = new
|
|
5564
|
-
var vEnd = new
|
|
5565
|
-
var interSegment = new
|
|
5566
|
-
var step = this instanceof
|
|
5876
|
+
var vStart = new Vector319();
|
|
5877
|
+
var vEnd = new Vector319();
|
|
5878
|
+
var interSegment = new Vector319();
|
|
5879
|
+
var step = this instanceof LineSegments4 ? 2 : 1;
|
|
5567
5880
|
var index = geometry.index;
|
|
5568
5881
|
var attributes = geometry.attributes;
|
|
5569
5882
|
if (index !== null) {
|
|
@@ -5616,8 +5929,8 @@ MeshLine.prototype.getDistance = function(i) {
|
|
|
5616
5929
|
let maxLength = 0;
|
|
5617
5930
|
for (let k = 0; k < i; k++) {
|
|
5618
5931
|
const index = 6 * k;
|
|
5619
|
-
const p0 = new
|
|
5620
|
-
const p1 = new
|
|
5932
|
+
const p0 = new Vector319(this.positions[index], this.positions[index + 1], this.positions[index + 2]);
|
|
5933
|
+
const p1 = new Vector319(this.positions[index + 6], this.positions[index + 7], this.positions[index + 8]);
|
|
5621
5934
|
const distance = p0.distanceTo(p1);
|
|
5622
5935
|
maxLength += distance;
|
|
5623
5936
|
}
|
|
@@ -5885,7 +6198,7 @@ var MeshLineMaterial = class extends ShaderMaterial3 {
|
|
|
5885
6198
|
useAlphaMap: { value: 0 },
|
|
5886
6199
|
color: { value: new Color6(16777215) },
|
|
5887
6200
|
opacity: { value: 1 },
|
|
5888
|
-
resolution: { value: new
|
|
6201
|
+
resolution: { value: new Vector27(1, 1) },
|
|
5889
6202
|
sizeAttenuation: { value: 1 },
|
|
5890
6203
|
dashArray: { value: 0 },
|
|
5891
6204
|
dashOffset: { value: 0 },
|
|
@@ -5893,7 +6206,7 @@ var MeshLineMaterial = class extends ShaderMaterial3 {
|
|
|
5893
6206
|
useDash: { value: 0 },
|
|
5894
6207
|
visibility: { value: 1 },
|
|
5895
6208
|
alphaTest: { value: 0 },
|
|
5896
|
-
repeat: { value: new
|
|
6209
|
+
repeat: { value: new Vector27(1, 1) }
|
|
5897
6210
|
}),
|
|
5898
6211
|
vertexShader: ShaderChunk.meshline_vert,
|
|
5899
6212
|
fragmentShader: ShaderChunk.meshline_frag
|
|
@@ -6080,7 +6393,7 @@ var defaultConfig2 = {
|
|
|
6080
6393
|
lineWidth: 8,
|
|
6081
6394
|
color: 16777215
|
|
6082
6395
|
};
|
|
6083
|
-
var Path2 = class extends
|
|
6396
|
+
var Path2 = class extends Object3D15 {
|
|
6084
6397
|
constructor(navigation, config) {
|
|
6085
6398
|
super();
|
|
6086
6399
|
this.navigation = navigation;
|
|
@@ -6129,7 +6442,7 @@ var Path2 = class extends Object3D12 {
|
|
|
6129
6442
|
}
|
|
6130
6443
|
} = this;
|
|
6131
6444
|
const screenPoints = points.map(
|
|
6132
|
-
([x, y]) => vector3ToDevice(new
|
|
6445
|
+
([x, y]) => vector3ToDevice(new Vector320(x, y, 0), camera, width, height)
|
|
6133
6446
|
).map(({ x, y }) => [x, y]);
|
|
6134
6447
|
const pointLength = getPathLength(screenPoints);
|
|
6135
6448
|
return pointLength / 32;
|
|
@@ -6139,7 +6452,7 @@ var Path2 = class extends Object3D12 {
|
|
|
6139
6452
|
return;
|
|
6140
6453
|
}
|
|
6141
6454
|
const repeat = this.getRepeat();
|
|
6142
|
-
this.material.repeat = new
|
|
6455
|
+
this.material.repeat = new Vector28(repeat, 1);
|
|
6143
6456
|
}
|
|
6144
6457
|
loadTexture(url) {
|
|
6145
6458
|
return new Promise((r, j) => {
|
|
@@ -6174,7 +6487,7 @@ var Path2 = class extends Object3D12 {
|
|
|
6174
6487
|
useMap: true,
|
|
6175
6488
|
color: new Color7(this.config.color),
|
|
6176
6489
|
transparent: true,
|
|
6177
|
-
resolution: new
|
|
6490
|
+
resolution: new Vector28(
|
|
6178
6491
|
this.navigation.bmap.context.clientSize.width,
|
|
6179
6492
|
this.navigation.bmap.context.clientSize.height
|
|
6180
6493
|
),
|
|
@@ -6183,9 +6496,9 @@ var Path2 = class extends Object3D12 {
|
|
|
6183
6496
|
lineWidth: this.config.lineWidth * 2,
|
|
6184
6497
|
map: this.texture,
|
|
6185
6498
|
blending: NormalBlending,
|
|
6186
|
-
repeat: new
|
|
6499
|
+
repeat: new Vector28(this.getRepeat(), 1)
|
|
6187
6500
|
});
|
|
6188
|
-
const mesh = this.mesh = new
|
|
6501
|
+
const mesh = this.mesh = new Mesh7(lineGeometry, material);
|
|
6189
6502
|
this.add(mesh);
|
|
6190
6503
|
return mesh;
|
|
6191
6504
|
}
|
|
@@ -6579,21 +6892,355 @@ var SplitLoad = class extends Plugin {
|
|
|
6579
6892
|
return Array.from(this.bmap.context.currentFloor.userData.graphicMap.values());
|
|
6580
6893
|
}
|
|
6581
6894
|
};
|
|
6895
|
+
|
|
6896
|
+
// src/plugins/mul-floors/mul-floors.ts
|
|
6897
|
+
import { Group as Group4 } from "three";
|
|
6898
|
+
var MulFloors = class extends Plugin {
|
|
6899
|
+
poiLayer;
|
|
6900
|
+
floors = [];
|
|
6901
|
+
group = new Group4();
|
|
6902
|
+
constructor(bmap) {
|
|
6903
|
+
super(bmap);
|
|
6904
|
+
this.poiLayer = new PoiLayer(bmap.context);
|
|
6905
|
+
}
|
|
6906
|
+
show(floors) {
|
|
6907
|
+
let height = floors[0].userData.height;
|
|
6908
|
+
floors.forEach((floor) => {
|
|
6909
|
+
floor.poiLayer.pois.forEach((poi) => {
|
|
6910
|
+
this.poiLayer.pushPoi(poi);
|
|
6911
|
+
});
|
|
6912
|
+
floor.poiLayer.pois.length = 0;
|
|
6913
|
+
floor.poiLayer.dispose();
|
|
6914
|
+
floor.position.z = height;
|
|
6915
|
+
height += floor.userData.height;
|
|
6916
|
+
});
|
|
6917
|
+
const { scene, currentFloor } = this.bmap.context;
|
|
6918
|
+
if (currentFloor) {
|
|
6919
|
+
scene.remove(currentFloor);
|
|
6920
|
+
currentFloor.dispose();
|
|
6921
|
+
}
|
|
6922
|
+
this.group.add(this.poiLayer, ...floors);
|
|
6923
|
+
scene.add(this.group);
|
|
6924
|
+
this.floors = floors;
|
|
6925
|
+
}
|
|
6926
|
+
hide() {
|
|
6927
|
+
const { scene } = this.bmap.context;
|
|
6928
|
+
scene.remove(this.group);
|
|
6929
|
+
this.poiLayer.clear(true);
|
|
6930
|
+
this.floors.forEach((floor) => {
|
|
6931
|
+
floor.dispose();
|
|
6932
|
+
});
|
|
6933
|
+
this.floors = [];
|
|
6934
|
+
this.group.clear();
|
|
6935
|
+
}
|
|
6936
|
+
fitCamera() {
|
|
6937
|
+
const { context, config, type } = this.bmap;
|
|
6938
|
+
context.cameraBound.setEnable(false);
|
|
6939
|
+
context.control.minZoom = 0;
|
|
6940
|
+
context.control.maxZoom = Infinity;
|
|
6941
|
+
context.camera.zoom = 1;
|
|
6942
|
+
context.setAzimuthalAngle(config.control.defaultAzimuthal, 0);
|
|
6943
|
+
context.setPolarAngle(config.control.defaultPolar, 0);
|
|
6944
|
+
context.fitCameraToObject(this.group, void 0, 0);
|
|
6945
|
+
const basicZoom = context.camera.zoom;
|
|
6946
|
+
context.control.minZoom = basicZoom;
|
|
6947
|
+
context.control.maxZoom = basicZoom * 25;
|
|
6948
|
+
if (type === "3d") {
|
|
6949
|
+
context.fitCameraToObject(this.group, config.defaultPadding, 0, false);
|
|
6950
|
+
}
|
|
6951
|
+
this.bmap.basicZoom = context.camera.zoom;
|
|
6952
|
+
context.control.addEventListener(
|
|
6953
|
+
"change",
|
|
6954
|
+
this.bmap.onControlChange.bind(this.bmap)
|
|
6955
|
+
);
|
|
6956
|
+
this.bmap.onControlChange();
|
|
6957
|
+
context.cameraBound.setEnable(true);
|
|
6958
|
+
}
|
|
6959
|
+
dispose() {
|
|
6960
|
+
this.poiLayer.dispose();
|
|
6961
|
+
this.floors.forEach((item) => item.dispose());
|
|
6962
|
+
this.floors = [];
|
|
6963
|
+
}
|
|
6964
|
+
};
|
|
6965
|
+
|
|
6966
|
+
// src/utils/index-db.ts
|
|
6967
|
+
var _db;
|
|
6968
|
+
function createDb(database = "aibee_map") {
|
|
6969
|
+
return new Promise((resolve, reject) => {
|
|
6970
|
+
if (_db) {
|
|
6971
|
+
return resolve(_db);
|
|
6972
|
+
}
|
|
6973
|
+
const request = indexedDB.open(database);
|
|
6974
|
+
request.onupgradeneeded = function(event) {
|
|
6975
|
+
_db = event.target.result;
|
|
6976
|
+
resolve(_db);
|
|
6977
|
+
};
|
|
6978
|
+
request.onsuccess = (event) => {
|
|
6979
|
+
_db = event.target.result;
|
|
6980
|
+
};
|
|
6981
|
+
request.onerror = (event) => {
|
|
6982
|
+
reject(event);
|
|
6983
|
+
};
|
|
6984
|
+
});
|
|
6985
|
+
}
|
|
6986
|
+
function createStore(storeName, db = _db) {
|
|
6987
|
+
if (!db) {
|
|
6988
|
+
return;
|
|
6989
|
+
}
|
|
6990
|
+
if (!db.objectStoreNames.contains(storeName)) {
|
|
6991
|
+
db.createObjectStore(storeName, { keyPath: "key" });
|
|
6992
|
+
}
|
|
6993
|
+
}
|
|
6994
|
+
function closeDb() {
|
|
6995
|
+
_db?.close();
|
|
6996
|
+
_db = null;
|
|
6997
|
+
}
|
|
6998
|
+
|
|
6999
|
+
// src/loader/AibeeLoader/zstd.worker.ts
|
|
7000
|
+
function Worker3() {
|
|
7001
|
+
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');
|
|
7002
|
+
}
|
|
7003
|
+
|
|
7004
|
+
// src/loader/AibeeLoader/utils.ts
|
|
7005
|
+
function transformGraphicData(data, center2, baseIndex = 0) {
|
|
7006
|
+
data.forEach((item) => {
|
|
7007
|
+
item.geometry.coords = JSON.parse(JSON.stringify(item.geometry.cds));
|
|
7008
|
+
if (item.geometry.type === "polygon") {
|
|
7009
|
+
item.geometry.coords.map((cds) => {
|
|
7010
|
+
if (Array.isArray(cds)) {
|
|
7011
|
+
cds.forEach((coord) => {
|
|
7012
|
+
coord[0] -= center2[0];
|
|
7013
|
+
coord[1] -= center2[1];
|
|
7014
|
+
});
|
|
7015
|
+
}
|
|
7016
|
+
});
|
|
7017
|
+
if (item.geometry.otherCds) {
|
|
7018
|
+
item.geometry.otherCoords = item.geometry.otherCds.map(
|
|
7019
|
+
(cds) => cds.map((item2) => translatePosToCenter(item2, center2))
|
|
7020
|
+
);
|
|
7021
|
+
}
|
|
7022
|
+
} else {
|
|
7023
|
+
item.geometry.coords = translatePosToCenter(item.geometry.cds, center2);
|
|
7024
|
+
}
|
|
7025
|
+
});
|
|
7026
|
+
for (let i = 0; i < data.length; i++) {
|
|
7027
|
+
const item = data[i];
|
|
7028
|
+
item.deltaHeight = 1e-5 * (baseIndex + i + 1);
|
|
7029
|
+
}
|
|
7030
|
+
}
|
|
7031
|
+
function translatePosToCenter(cds, center2) {
|
|
7032
|
+
return [cds[0] - center2[0], cds[1] - center2[1]];
|
|
7033
|
+
}
|
|
7034
|
+
|
|
7035
|
+
// src/loader/AibeeLoader/index.ts
|
|
7036
|
+
var defaultAibeeLoaderOption = {
|
|
7037
|
+
loadRoadNetwork: false
|
|
7038
|
+
};
|
|
7039
|
+
var VersionStoreName = "version";
|
|
7040
|
+
var MapDataStoreName = "map_data";
|
|
7041
|
+
var RoadNetworkDataStoreName = "road_network_data";
|
|
7042
|
+
var AibeeLoader = class {
|
|
7043
|
+
constructor(bmap) {
|
|
7044
|
+
this.bmap = bmap;
|
|
7045
|
+
this.initDb();
|
|
7046
|
+
}
|
|
7047
|
+
placeId = null;
|
|
7048
|
+
canUseZstd = localStorage.getItem("canUseZstd") !== "0";
|
|
7049
|
+
// 是不是可以使用zstd 默认是可以的 如果解压缩失败了就要标记本机不可以使用,之后不在尝试
|
|
7050
|
+
worker = Worker3();
|
|
7051
|
+
async initDb() {
|
|
7052
|
+
try {
|
|
7053
|
+
await createDb();
|
|
7054
|
+
createStore(VersionStoreName);
|
|
7055
|
+
createStore(MapDataStoreName);
|
|
7056
|
+
createStore(RoadNetworkDataStoreName);
|
|
7057
|
+
} catch (e) {
|
|
7058
|
+
console.log("[\u6253\u5F00indexDb\u9519\u8BEF]", e);
|
|
7059
|
+
}
|
|
7060
|
+
}
|
|
7061
|
+
async load(placeId) {
|
|
7062
|
+
this.clear();
|
|
7063
|
+
this.placeId = placeId;
|
|
7064
|
+
}
|
|
7065
|
+
async getFloorData(floor) {
|
|
7066
|
+
if (this.canUseZstd) {
|
|
7067
|
+
const res = await triggerWorker(this.worker, "decode", "");
|
|
7068
|
+
if (res === "error") {
|
|
7069
|
+
this.setCanUseZstd(false);
|
|
7070
|
+
return this.getFloorData(floor);
|
|
7071
|
+
}
|
|
7072
|
+
} else {
|
|
7073
|
+
}
|
|
7074
|
+
return new Floor(this.bmap.context);
|
|
7075
|
+
}
|
|
7076
|
+
async getRoadNetworkData() {
|
|
7077
|
+
}
|
|
7078
|
+
// 空闲时间请求其他数据
|
|
7079
|
+
async getOtherDataByFreeTime() {
|
|
7080
|
+
}
|
|
7081
|
+
// 获取多楼层数据
|
|
7082
|
+
async getMulFloorsData(floor) {
|
|
7083
|
+
return [];
|
|
7084
|
+
}
|
|
7085
|
+
async getDataByUrl(url) {
|
|
7086
|
+
const data = await fetch(url).then((res) => res.json());
|
|
7087
|
+
return this.getDataByJson(data);
|
|
7088
|
+
}
|
|
7089
|
+
getDataByJson(data) {
|
|
7090
|
+
const floor = new Floor(this.bmap.context);
|
|
7091
|
+
let center2 = [0, 0];
|
|
7092
|
+
data.layers.forEach((layer) => {
|
|
7093
|
+
switch (layer.l_type) {
|
|
7094
|
+
case "range":
|
|
7095
|
+
const data2 = layer.elements[0];
|
|
7096
|
+
center2 = [data2.center_x, data2.center_y];
|
|
7097
|
+
break;
|
|
7098
|
+
case "graph":
|
|
7099
|
+
const graphics = [];
|
|
7100
|
+
const graphicMap = /* @__PURE__ */ new Map();
|
|
7101
|
+
transformGraphicData(layer.elements, center2);
|
|
7102
|
+
layer.elements.forEach((options) => {
|
|
7103
|
+
const graphic = floor.addGraphic(options);
|
|
7104
|
+
graphics.push(graphic);
|
|
7105
|
+
graphicMap.set(options.id, graphic);
|
|
7106
|
+
});
|
|
7107
|
+
floor.userData.graphics = graphics;
|
|
7108
|
+
floor.userData.graphicMap = graphicMap;
|
|
7109
|
+
break;
|
|
7110
|
+
case "ground":
|
|
7111
|
+
transformGraphicData(layer.elements, center2);
|
|
7112
|
+
const grounds = layer.elements.map((options) => new Graphic(this.bmap.context, options));
|
|
7113
|
+
floor.addGrounds(grounds);
|
|
7114
|
+
break;
|
|
7115
|
+
case "wall":
|
|
7116
|
+
transformGraphicData(layer.elements, center2);
|
|
7117
|
+
const wallGroup = layer.elements.reduce((obj, options) => {
|
|
7118
|
+
const { fillColor, fillOpacity, strokeColor, strokeOpacity } = options;
|
|
7119
|
+
const key = `${fillColor}-${fillOpacity}-${strokeColor}-${strokeOpacity}`;
|
|
7120
|
+
if (obj[key]) {
|
|
7121
|
+
obj[key].push(options);
|
|
7122
|
+
} else {
|
|
7123
|
+
obj[key] = [options];
|
|
7124
|
+
}
|
|
7125
|
+
return obj;
|
|
7126
|
+
}, {});
|
|
7127
|
+
Object.values(wallGroup).forEach((optionArray) => {
|
|
7128
|
+
const wall = new Wall(this.bmap.context, optionArray);
|
|
7129
|
+
floor.wallLayer.add(wall);
|
|
7130
|
+
});
|
|
7131
|
+
break;
|
|
7132
|
+
case "lane":
|
|
7133
|
+
transformGraphicData(layer.elements, center2);
|
|
7134
|
+
const laneGroup = layer.elements.reduce((obj, options) => {
|
|
7135
|
+
const { fillColor, fillOpacity, strokeColor, strokeOpacity } = options;
|
|
7136
|
+
const key = `${fillColor}-${fillOpacity}-${strokeColor}-${strokeOpacity}`;
|
|
7137
|
+
if (obj[key]) {
|
|
7138
|
+
obj[key].push(options);
|
|
7139
|
+
} else {
|
|
7140
|
+
obj[key] = [options];
|
|
7141
|
+
}
|
|
7142
|
+
return obj;
|
|
7143
|
+
}, {});
|
|
7144
|
+
Object.values(laneGroup).forEach((optionArray) => {
|
|
7145
|
+
const lane = new Lane(this.bmap.context, optionArray);
|
|
7146
|
+
floor.laneLayer.add(lane);
|
|
7147
|
+
});
|
|
7148
|
+
break;
|
|
7149
|
+
case "texture2d":
|
|
7150
|
+
case "texture3d":
|
|
7151
|
+
transformGraphicData(layer.elements, center2);
|
|
7152
|
+
layer.elements.forEach((options) => {
|
|
7153
|
+
const texture = new GroundTexture(this.bmap.context, options);
|
|
7154
|
+
floor.textureLayer.add(texture);
|
|
7155
|
+
});
|
|
7156
|
+
break;
|
|
7157
|
+
case "glb":
|
|
7158
|
+
transformGraphicData(layer.elements, center2);
|
|
7159
|
+
layer.elements.forEach((options) => {
|
|
7160
|
+
const model = new GlbModel(this.bmap.context, {
|
|
7161
|
+
...options,
|
|
7162
|
+
url: options.secondUrl,
|
|
7163
|
+
rotate: options.secondRotate,
|
|
7164
|
+
width: options.secondWidth
|
|
7165
|
+
});
|
|
7166
|
+
floor.glbModelLayer.add(model);
|
|
7167
|
+
});
|
|
7168
|
+
break;
|
|
7169
|
+
case "store":
|
|
7170
|
+
layer.elements.map((options) => {
|
|
7171
|
+
const pos = translatePosToCenter([options.center_x, options.center_y], center2);
|
|
7172
|
+
floor.poiLayer.createPoi({
|
|
7173
|
+
icon: options.poi_info.icon,
|
|
7174
|
+
texts: [{ text: options.store_name || options.poi_info.name }],
|
|
7175
|
+
position: { x: pos[0], y: pos[1], z: options.airHeight }
|
|
7176
|
+
});
|
|
7177
|
+
});
|
|
7178
|
+
break;
|
|
7179
|
+
case "facility":
|
|
7180
|
+
layer.elements.map((options) => {
|
|
7181
|
+
const pos = translatePosToCenter(options.geometry.cds, center2);
|
|
7182
|
+
floor.poiLayer.createPoi({
|
|
7183
|
+
icon: options.poi_info.icon,
|
|
7184
|
+
texts: [{ text: options.store_name || options.poi_info.name }],
|
|
7185
|
+
position: { x: pos[0], y: pos[1], z: options.airHeight }
|
|
7186
|
+
});
|
|
7187
|
+
});
|
|
7188
|
+
break;
|
|
7189
|
+
case "parkingSpace":
|
|
7190
|
+
transformGraphicData(layer.elements, center2);
|
|
7191
|
+
let parkingSpacesGraphics = [];
|
|
7192
|
+
let parkingSpacesGraphicMap = /* @__PURE__ */ new Map();
|
|
7193
|
+
layer.elements.forEach((options) => {
|
|
7194
|
+
const graphic = floor.addGraphic(options);
|
|
7195
|
+
parkingSpacesGraphics.push(graphic);
|
|
7196
|
+
parkingSpacesGraphicMap.set(options.id, graphic);
|
|
7197
|
+
const pos = translatePosToCenter([options.center_x, options.center_y], center2);
|
|
7198
|
+
floor.poiLayer.createPoi({
|
|
7199
|
+
texts: [{ text: options.poi_info.name }],
|
|
7200
|
+
position: { x: pos[0], y: pos[1], z: options.airHeight }
|
|
7201
|
+
});
|
|
7202
|
+
});
|
|
7203
|
+
floor.userData.parkingSpaces = parkingSpacesGraphics;
|
|
7204
|
+
floor.userData.parkingSpacesGraphicMap = parkingSpacesGraphicMap;
|
|
7205
|
+
break;
|
|
7206
|
+
}
|
|
7207
|
+
});
|
|
7208
|
+
floor.userData.center = center2;
|
|
7209
|
+
floor.userData.height = data.floorHeight;
|
|
7210
|
+
return floor;
|
|
7211
|
+
}
|
|
7212
|
+
clear() {
|
|
7213
|
+
this.placeId = null;
|
|
7214
|
+
}
|
|
7215
|
+
setCanUseZstd(bool) {
|
|
7216
|
+
this.canUseZstd = bool;
|
|
7217
|
+
localStorage.setItem("canUseZstd", "0");
|
|
7218
|
+
}
|
|
7219
|
+
dispose() {
|
|
7220
|
+
this.clear();
|
|
7221
|
+
closeDb();
|
|
7222
|
+
}
|
|
7223
|
+
};
|
|
6582
7224
|
export {
|
|
7225
|
+
AibeeLoader,
|
|
6583
7226
|
BMap,
|
|
6584
7227
|
BaseSvg,
|
|
6585
7228
|
Context,
|
|
6586
7229
|
Equipment,
|
|
6587
7230
|
Events,
|
|
6588
7231
|
Floor,
|
|
7232
|
+
GlbModel,
|
|
6589
7233
|
Graphic,
|
|
6590
7234
|
GraphicLayer,
|
|
7235
|
+
GroundTexture,
|
|
6591
7236
|
HeatmapElement,
|
|
6592
7237
|
HooksName,
|
|
6593
7238
|
HoverHelper,
|
|
7239
|
+
Lane,
|
|
6594
7240
|
Layer,
|
|
6595
7241
|
MapTypePolar,
|
|
6596
7242
|
Model,
|
|
7243
|
+
MulFloors,
|
|
6597
7244
|
Navigation,
|
|
6598
7245
|
Overlay,
|
|
6599
7246
|
PathDirection,
|
|
@@ -6608,6 +7255,7 @@ export {
|
|
|
6608
7255
|
SvgPolygon,
|
|
6609
7256
|
Timer,
|
|
6610
7257
|
UniqueKey,
|
|
7258
|
+
Wall,
|
|
6611
7259
|
addAlphaToHexColor,
|
|
6612
7260
|
calc_angle,
|
|
6613
7261
|
calc_direction,
|
|
@@ -6621,7 +7269,9 @@ export {
|
|
|
6621
7269
|
createSvg,
|
|
6622
7270
|
createSvgElement,
|
|
6623
7271
|
darkenColor,
|
|
7272
|
+
defaultAibeeLoaderOption,
|
|
6624
7273
|
defaultConfig,
|
|
7274
|
+
defaultOptions4 as defaultOptions,
|
|
6625
7275
|
dispose,
|
|
6626
7276
|
disposeLoader,
|
|
6627
7277
|
distancePointToSegment,
|
|
@@ -6665,4 +7315,3 @@ export {
|
|
|
6665
7315
|
vector3ToDevice,
|
|
6666
7316
|
xhrGet
|
|
6667
7317
|
};
|
|
6668
|
-
//# sourceMappingURL=bmap.esm.js.map
|