venue-js 1.2.0-next.8 → 1.2.0-next.9

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/dist/index.mjs CHANGED
@@ -777,7 +777,7 @@ function isNumber(num) {
777
777
  import turfDistance from "@turf/distance";
778
778
  import turfCenter3 from "@turf/center";
779
779
  import { PerspectiveCamera } from "three";
780
- import { ThreeLayer as ThreeLayer3 } from "maptalks.three";
780
+ import { ThreeLayer as ThreeLayer4 } from "maptalks.three";
781
781
 
782
782
  // src/IndoorMap/constants.ts
783
783
  var defaultLayerOption = { enableAltitude: true };
@@ -3103,6 +3103,7 @@ var CameraManager = class {
3103
3103
  };
3104
3104
 
3105
3105
  // src/IndoorMap/renderer/RendererManager.ts
3106
+ import _isFunction from "lodash/isFunction";
3106
3107
  import _min from "lodash/min";
3107
3108
  import { center as turfCenter2 } from "@turf/center";
3108
3109
  import * as THREE3 from "three";
@@ -3110,6 +3111,7 @@ import * as THREE3 from "three";
3110
3111
  // src/IndoorMap/renderer/3d/Element3DRenderer.ts
3111
3112
  import * as maptalks4 from "maptalks-gl";
3112
3113
  import * as THREE from "three";
3114
+ import { BaseObject as BaseObject5 } from "maptalks.three";
3113
3115
  import turfBuffer2 from "@turf/buffer";
3114
3116
 
3115
3117
  // src/IndoorMap/renderer/3d/element3DRendererOptions.ts
@@ -3160,6 +3162,7 @@ var Element3DRenderer = class extends EventTarget {
3160
3162
  map;
3161
3163
  gltfLayer;
3162
3164
  threeLayer;
3165
+ scene;
3163
3166
  // private dracoLoader: DRACOLoader
3164
3167
  lineMaterial;
3165
3168
  materialByColorMap;
@@ -3291,6 +3294,9 @@ var Element3DRenderer = class extends EventTarget {
3291
3294
  treeMarker.addTo(this.gltfLayer);
3292
3295
  return treeMarker;
3293
3296
  }
3297
+ async createBuilding(coordinate, ordinal) {
3298
+ return Promise.resolve(null);
3299
+ }
3294
3300
  createElement(f) {
3295
3301
  switch (f.feature_type) {
3296
3302
  default:
@@ -3312,6 +3318,34 @@ var Element3DRenderer = class extends EventTarget {
3312
3318
  }
3313
3319
  });
3314
3320
  }
3321
+ createHighlightController(element) {
3322
+ if (!(element instanceof BaseObject5)) {
3323
+ return null;
3324
+ }
3325
+ switch (element.type) {
3326
+ case "ExtrudePolygon": {
3327
+ const mesh = element.getObject3d();
3328
+ const originalMaterial = mesh.material;
3329
+ const highlightMaterial = this.getOrCreateMaterialByColor("#ff0000");
3330
+ return {
3331
+ start: () => {
3332
+ mesh.material = highlightMaterial;
3333
+ },
3334
+ clear: () => {
3335
+ mesh.material = originalMaterial;
3336
+ }
3337
+ };
3338
+ }
3339
+ default: {
3340
+ return {
3341
+ start() {
3342
+ },
3343
+ clear() {
3344
+ }
3345
+ };
3346
+ }
3347
+ }
3348
+ }
3315
3349
  render() {
3316
3350
  this.threeLayer._needsUpdate = !this.threeLayer._needsUpdate;
3317
3351
  if (this.threeLayer._needsUpdate) {
@@ -3419,7 +3453,10 @@ var Element2DRenderer = class extends EventTarget {
3419
3453
  async createEscalator(f, coordinates) {
3420
3454
  return Promise.resolve(null);
3421
3455
  }
3422
- async createTree(f, coordinates) {
3456
+ async createTree(coordinates) {
3457
+ return Promise.resolve(null);
3458
+ }
3459
+ async createBuilding(coordinate, ordinal) {
3423
3460
  return Promise.resolve(null);
3424
3461
  }
3425
3462
  createElement = (imdfFeature) => {
@@ -3439,6 +3476,15 @@ var Element2DRenderer = class extends EventTarget {
3439
3476
  element.hide();
3440
3477
  });
3441
3478
  }
3479
+ createHighlightController(element) {
3480
+ if (!(element instanceof maptalks5.Geometry)) return null;
3481
+ return {
3482
+ start() {
3483
+ },
3484
+ clear() {
3485
+ }
3486
+ };
3487
+ }
3442
3488
  };
3443
3489
 
3444
3490
  // src/IndoorMap/renderer/2d/Marker2DRenderer.ts
@@ -3476,7 +3522,7 @@ import * as maptalks7 from "maptalks-gl";
3476
3522
  // src/IndoorMap/renderer/3d/objects/TextSpriteMarker.ts
3477
3523
  import { Coordinate as Coordinate2, Util as Util4 } from "maptalks";
3478
3524
  import * as THREE2 from "three";
3479
- import { BaseObject as BaseObject5 } from "maptalks.three";
3525
+ import { BaseObject as BaseObject6 } from "maptalks.three";
3480
3526
  import { isNil, set } from "lodash";
3481
3527
 
3482
3528
  // src/IndoorMap/renderer/utils/interpolateStops.ts
@@ -3514,7 +3560,7 @@ var OPTIONS4 = {
3514
3560
  altitude: 0,
3515
3561
  opacity: 1
3516
3562
  };
3517
- var TextSpriteMarker = class extends BaseObject5 {
3563
+ var TextSpriteMarker = class extends BaseObject6 {
3518
3564
  #altitudeOffset = 0;
3519
3565
  constructor(coordinate, options, layer, properties = {}) {
3520
3566
  options = Util4.extend({}, OPTIONS4, options, { layer });
@@ -3782,6 +3828,9 @@ var RendererManager = class extends EventTarget {
3782
3828
  options;
3783
3829
  // Client for fetching data
3784
3830
  #dataClient;
3831
+ #isClicked = false;
3832
+ #onClickElement = (e) => {
3833
+ };
3785
3834
  /** Elements: Responsible for converting feature info elements and add to map */
3786
3835
  elementRenderer;
3787
3836
  markerRenderer;
@@ -3790,6 +3839,7 @@ var RendererManager = class extends EventTarget {
3790
3839
  currentOrdinals;
3791
3840
  markersMap;
3792
3841
  markersByOrdinal;
3842
+ highlightControllers = [];
3793
3843
  constructor(map, dataClient, options) {
3794
3844
  super();
3795
3845
  this.map = map;
@@ -3808,7 +3858,7 @@ var RendererManager = class extends EventTarget {
3808
3858
  scene.add(ambientLight);
3809
3859
  const dirColor = 16777215;
3810
3860
  const dllight = new THREE3.DirectionalLight(dirColor, 0.8);
3811
- dllight.position.set(0, -10, 10).normalize();
3861
+ dllight.position.set(0, -10, 20).normalize();
3812
3862
  scene.add(dllight);
3813
3863
  const hemi = new THREE3.HemisphereLight(16777215, 4473924, 0.4);
3814
3864
  scene.add(hemi);
@@ -3825,19 +3875,27 @@ var RendererManager = class extends EventTarget {
3825
3875
  this.#createElements();
3826
3876
  }
3827
3877
  }
3878
+ set onClickElement(func) {
3879
+ this.#onClickElement = func;
3880
+ }
3881
+ handleClickElement = (e) => {
3882
+ console.log(`handleClickElement`, this.#isClicked);
3883
+ if (this.#isClicked) return;
3884
+ this.#isClicked = true;
3885
+ const onClickElement = this.#onClickElement;
3886
+ if (!_isFunction(onClickElement)) return;
3887
+ this.#onClickElement(e);
3888
+ this.#isClicked = false;
3889
+ };
3828
3890
  getElementsByOrdinal = (ordinal) => {
3829
3891
  const exist = this.elementsByOrdinal.get(ordinal);
3830
3892
  if (!exist) this.elementsByOrdinal.set(ordinal, []);
3831
3893
  return this.elementsByOrdinal.get(ordinal);
3832
3894
  };
3833
- getMarkersByOrdinal = (ordinal) => {
3834
- const exist = this.markersByOrdinal.get(ordinal);
3835
- if (!exist) this.markersByOrdinal.set(ordinal, []);
3836
- return this.markersByOrdinal.get(ordinal);
3837
- };
3838
3895
  addElementsToManager = (id, elements, ordinal) => {
3839
3896
  this.elementsMap.set(id, elements);
3840
3897
  elements.forEach((el) => {
3898
+ el.on("click", (e) => this.handleClickElement(id));
3841
3899
  this.getElementsByOrdinal(ordinal).push(el);
3842
3900
  });
3843
3901
  const inOrdinal = Array.isArray(this.currentOrdinals) ? this.currentOrdinals.includes(ordinal) : ordinal === this.currentOrdinals;
@@ -3847,18 +3905,6 @@ var RendererManager = class extends EventTarget {
3847
3905
  this.elementRenderer.hideElements(elements, ordinal);
3848
3906
  }
3849
3907
  };
3850
- addMarkersToManager = (id, markers, ordinal) => {
3851
- this.markersMap.set(id, markers);
3852
- markers.forEach((el) => {
3853
- this.getMarkersByOrdinal(ordinal).push(el);
3854
- });
3855
- const inOrdinal = Array.isArray(this.currentOrdinals) ? this.currentOrdinals.includes(ordinal) : ordinal === this.currentOrdinals;
3856
- if (inOrdinal) {
3857
- this.markerRenderer.showMarkers(markers, ordinal);
3858
- } else {
3859
- this.markerRenderer.hideMarkers(markers, ordinal);
3860
- }
3861
- };
3862
3908
  async #createElements() {
3863
3909
  await delay(this.options.delayBeforeCreateElements ?? 0);
3864
3910
  const levels = await this.#dataClient.filterByType("level", {
@@ -3960,14 +4006,48 @@ var RendererManager = class extends EventTarget {
3960
4006
  }
3961
4007
  }
3962
4008
  }
4009
+ highlightElements = (elemIds, options) => {
4010
+ const { reset = true } = options ?? {};
4011
+ if (reset) {
4012
+ this.clearHighlightElements();
4013
+ }
4014
+ const elements = elemIds.map((id) => this.elementsMap.get(id)).flat();
4015
+ elements.forEach((element) => {
4016
+ const controller = this.elementRenderer.createHighlightController(element);
4017
+ controller.start();
4018
+ this.highlightControllers.push(controller);
4019
+ });
4020
+ };
4021
+ clearHighlightElements = () => {
4022
+ this.highlightControllers.forEach((controller) => {
4023
+ if (_isFunction(controller?.clear)) controller.clear();
4024
+ });
4025
+ };
3963
4026
  /**
3964
4027
  * ========================================================================
3965
4028
  * Markers
3966
4029
  * ======================================================================== */
4030
+ _getMarkersByOrdinal = (ordinal) => {
4031
+ const exist = this.markersByOrdinal.get(ordinal);
4032
+ if (!exist) this.markersByOrdinal.set(ordinal, []);
4033
+ return this.markersByOrdinal.get(ordinal);
4034
+ };
4035
+ _addMarkersToManager = (id, markers, ordinal) => {
4036
+ this.markersMap.set(id, markers);
4037
+ markers.forEach((el) => {
4038
+ this._getMarkersByOrdinal(ordinal).push(el);
4039
+ });
4040
+ const inOrdinal = Array.isArray(this.currentOrdinals) ? this.currentOrdinals.includes(ordinal) : ordinal === this.currentOrdinals;
4041
+ if (inOrdinal) {
4042
+ this.markerRenderer.showMarkers(markers, ordinal);
4043
+ } else {
4044
+ this.markerRenderer.hideMarkers(markers, ordinal);
4045
+ }
4046
+ };
3967
4047
  createMarker(coordinate, ordinal, text, options) {
3968
4048
  const marker = this.markerRenderer.createMarker(coordinate, ordinal, text, options);
3969
4049
  const markerId = `${this.markersMap.size + 1}`;
3970
- this.addMarkersToManager(markerId, [marker], ordinal);
4050
+ this._addMarkersToManager(markerId, [marker], ordinal);
3971
4051
  }
3972
4052
  clearMarkers() {
3973
4053
  for (const [markerId, marker] of this.markersMap) {
@@ -4065,7 +4145,7 @@ var IndoorMap = class extends EventTarget {
4065
4145
  layers: []
4066
4146
  });
4067
4147
  const groupLayer = new GroupGLLayer("group", [], {}).addTo(this.map);
4068
- const threeLayer = new ThreeLayer3("three", {
4148
+ const threeLayer = new ThreeLayer4("three", {
4069
4149
  forceRenderOnMoving: true,
4070
4150
  forceRenderOnRotating: true
4071
4151
  });
@@ -4167,7 +4247,7 @@ var IndoorMap = class extends EventTarget {
4167
4247
  this.map.setDevicePixelRatio(value);
4168
4248
  }
4169
4249
  set onClickElement(func) {
4170
- this.#onClickElement = func;
4250
+ this.rendererManager.onClickElement = func;
4171
4251
  }
4172
4252
  set locale(value) {
4173
4253
  this.#locale = value || defaultOptions.locale;
@@ -4216,7 +4296,6 @@ var IndoorMap = class extends EventTarget {
4216
4296
  } = this.#styler;
4217
4297
  let elements = {};
4218
4298
  let object3ds = [];
4219
- const scene = this.threeLayer.getScene();
4220
4299
  for (const feature2 of this.#features) {
4221
4300
  try {
4222
4301
  const { feature_type: featureType, properties, id } = feature2;