venue-js 1.3.1 → 1.4.0-next.1

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
@@ -2683,7 +2683,7 @@ var CameraManager = class {
2683
2683
  // src/IndoorMap/renderer/RendererManager.ts
2684
2684
  import { min, compact as compact3, isFunction } from "lodash-es";
2685
2685
  import { center as turfCenter2 } from "@turf/center";
2686
- import * as THREE3 from "three";
2686
+ import * as THREE4 from "three";
2687
2687
 
2688
2688
  // src/IndoorMap/renderer/3d/Element3DRenderer.ts
2689
2689
  import * as maptalks4 from "maptalks-gl";
@@ -3032,7 +3032,7 @@ var DEFAULT_POLYGON_OPTION = {
3032
3032
  offset: 0,
3033
3033
  altitude: 0
3034
3034
  };
3035
- var get3DRendererOption = (featureType, category, options) => {
3035
+ var get3DRendererOption = (featureType, category, options = {}) => {
3036
3036
  try {
3037
3037
  const option = options[featureType] ?? element3DRendererOptions[featureType];
3038
3038
  return (category && option.byCategory?.[category]) ?? option?.default ?? DEFAULT_POLYGON_OPTION;
@@ -3493,6 +3493,12 @@ var Marker2DRenderer = class extends EventTarget {
3493
3493
  marker.addTo(this.map);
3494
3494
  return marker;
3495
3495
  };
3496
+ createTextMarker = (position, label, options) => {
3497
+ return null;
3498
+ };
3499
+ createImageMarker = (position, src, options) => {
3500
+ return null;
3501
+ };
3496
3502
  removeMarker = (marker) => {
3497
3503
  marker.remove();
3498
3504
  };
@@ -3504,6 +3510,7 @@ var Marker2DRenderer = class extends EventTarget {
3504
3510
 
3505
3511
  // src/IndoorMap/renderer/3d/Marker3DRenderer.ts
3506
3512
  import * as maptalks7 from "maptalks-gl";
3513
+ import * as THREE3 from "three";
3507
3514
 
3508
3515
  // src/IndoorMap/renderer/3d/objects/TextSpriteMarker.ts
3509
3516
  import { Coordinate as Coordinate2, Util as Util4 } from "maptalks";
@@ -3703,21 +3710,35 @@ var TextSpriteMarker = class extends BaseObject6 {
3703
3710
  };
3704
3711
 
3705
3712
  // src/IndoorMap/renderer/3d/Marker3DRenderer.ts
3706
- var HEIGHT_METER2 = 4;
3707
- var MULTIORDINAL_HEIGHT_METER3 = 9;
3708
3713
  var Marker3DRenderer = class extends EventTarget {
3709
3714
  isReady = false;
3710
3715
  threeLayer;
3711
3716
  map;
3712
- materialByKey;
3713
3717
  constructor(map, options, layer) {
3714
3718
  super();
3715
3719
  this.map = map;
3716
3720
  this.threeLayer = layer;
3717
3721
  }
3718
- createTextMarker = (position, ordinal, label, options) => {
3722
+ createPointMaterialFromSvg(svgPath, size = 40) {
3723
+ return new THREE3.PointsMaterial({
3724
+ size,
3725
+ sizeAttenuation: false,
3726
+ // Always same size in screen pixels (Screen pixel)
3727
+ // color: fillStyle,
3728
+ alphaTest: 0.5,
3729
+ // vertexColors: THREE.VertexColors,
3730
+ // color: 0xffffff,
3731
+ transparent: true,
3732
+ blending: THREE3.NormalBlending,
3733
+ depthTest: true,
3734
+ // POI is hidden behind building
3735
+ depthWrite: true,
3736
+ map: new THREE3.TextureLoader().load(svgPath)
3737
+ });
3738
+ }
3739
+ createTextMarker = (position, label, options) => {
3719
3740
  const combinedOptions = {
3720
- altitude: ordinal * HEIGHT_METER2,
3741
+ altitude: 0,
3721
3742
  text: label,
3722
3743
  ...options ?? {}
3723
3744
  };
@@ -3726,17 +3747,37 @@ var Marker3DRenderer = class extends EventTarget {
3726
3747
  this.threeLayer.addMesh([marker]);
3727
3748
  return marker;
3728
3749
  };
3729
- createImageMarker = () => {
3730
- };
3731
- createMarker = (coordinates, ordinal, label, options) => {
3732
- return this.createTextMarker(coordinates, ordinal, label, options);
3750
+ createImageMarker = (position, src, options) => {
3751
+ const [lng, lat] = position;
3752
+ let meshes = [];
3753
+ const height = options.height ?? 0;
3754
+ const { leg, ...markerOptions } = options;
3755
+ const { color: legColor = "#000000", ...legOptions } = leg ?? {};
3756
+ const material = this.createPointMaterialFromSvg(src, 40);
3757
+ const marker = this.threeLayer.toPoint(new maptalks7.Coordinate(lng, lat), { height, ...markerOptions }, material);
3758
+ marker.getObject3d().renderOrder = 10;
3759
+ meshes.push(marker);
3760
+ if (options.leg) {
3761
+ const legMaterial = new THREE3.MeshLambertMaterial({ color: legColor, transparent: true });
3762
+ const leg2 = this.threeLayer.toBar(new maptalks7.Coordinate(lng, lat), { ...legOptions, height }, legMaterial);
3763
+ const legObj = leg2.getObject3d();
3764
+ legObj.traverse((o) => {
3765
+ if (o.isMesh && o.material) {
3766
+ o.material.depthWrite = false;
3767
+ o.material.depthTest = true;
3768
+ o.renderOrder = 0;
3769
+ }
3770
+ });
3771
+ meshes = [leg2, ...meshes];
3772
+ }
3773
+ this.threeLayer.addMesh(meshes);
3774
+ return meshes;
3733
3775
  };
3734
3776
  removeMarker = (marker) => {
3735
3777
  marker.remove();
3736
3778
  };
3737
3779
  showMarkers(elements, ordinalDiff = 0) {
3738
3780
  elements.forEach((element) => {
3739
- element.setAltitude(ordinalDiff * MULTIORDINAL_HEIGHT_METER3);
3740
3781
  element.show();
3741
3782
  });
3742
3783
  }
@@ -4275,7 +4316,11 @@ function inBBox(pt, bbox2) {
4275
4316
 
4276
4317
  // src/IndoorMap/renderer/utils/findUnitOnPoint.ts
4277
4318
  var findUnitOnPoint = (units, point2) => {
4278
- return units.find((unit) => booleanPointInPolygon(point2, polygon(unit.geometry.coordinates)));
4319
+ try {
4320
+ return units.find((unit) => booleanPointInPolygon(point2, polygon(unit.geometry.coordinates)));
4321
+ } catch (err) {
4322
+ return null;
4323
+ }
4279
4324
  };
4280
4325
 
4281
4326
  // src/IndoorMap/renderer/RendererManager.ts
@@ -4345,13 +4390,13 @@ var RendererManager = class extends EventTarget {
4345
4390
  }
4346
4391
  return bad;
4347
4392
  }
4348
- const ambientLight = new THREE3.AmbientLight(16777215, 0.3);
4393
+ const ambientLight = new THREE4.AmbientLight(16777215, 0.3);
4349
4394
  scene.add(ambientLight);
4350
4395
  const dirColor = 16777215;
4351
- const dllight = new THREE3.DirectionalLight(dirColor, 0.8);
4396
+ const dllight = new THREE4.DirectionalLight(dirColor, 0.8);
4352
4397
  dllight.position.set(0, -10, 20).normalize();
4353
4398
  scene.add(dllight);
4354
- const hemi = new THREE3.HemisphereLight(16777215, 4473924, 0.4);
4399
+ const hemi = new THREE4.HemisphereLight(16777215, 4473924, 0.4);
4355
4400
  scene.add(hemi);
4356
4401
  _this.elementRenderer = new Element3DRenderer(map, options.elements);
4357
4402
  _this.markerRenderer = new Marker3DRenderer(map, {}, threeLayer);
@@ -4434,7 +4479,7 @@ var RendererManager = class extends EventTarget {
4434
4479
  return openings.find((o) => o.id === openingId);
4435
4480
  }));
4436
4481
  const innerElements = this.elementRenderer.createGeometry(unit);
4437
- const wallElements = this.elementRenderer.createRoomWall(unit, roomOpenings);
4482
+ const wallElements = [];
4438
4483
  if (innerElements || wallElements) {
4439
4484
  const _innerElements = Array.isArray(innerElements) ? innerElements : [innerElements];
4440
4485
  const _wallElements = Array.isArray(wallElements) ? wallElements : [wallElements];
@@ -4489,10 +4534,12 @@ var RendererManager = class extends EventTarget {
4489
4534
  for (const label of groundLabels) {
4490
4535
  const center2 = turfCenter2(polygon(label.geometry.coordinates)).geometry.coordinates;
4491
4536
  const unit = findUnitOnPoint(units, center2);
4492
- const element = this.elementRenderer.createGroundLabel(label, unit);
4493
- if (element) {
4494
- const _elements = Array.isArray(element) ? element : [element];
4495
- this.addElementsToManager(label.id, _elements, label.properties.ordinal);
4537
+ if (unit) {
4538
+ const element = this.elementRenderer.createGroundLabel(label, unit);
4539
+ if (element) {
4540
+ const _elements = Array.isArray(element) ? element : [element];
4541
+ this.addElementsToManager(label.id, _elements, label.properties.ordinal);
4542
+ }
4496
4543
  }
4497
4544
  }
4498
4545
  if (this.options.type === "3D") {
@@ -4574,10 +4621,11 @@ var RendererManager = class extends EventTarget {
4574
4621
  this.markerRenderer.hideMarkers(markers, ordinal);
4575
4622
  }
4576
4623
  };
4577
- createMarker(coordinate, ordinal, text, options) {
4578
- const marker = this.markerRenderer.createMarker(coordinate, ordinal, text, options);
4624
+ createMarker(type, coordinate, ordinal, textOrPath, options) {
4625
+ const meshes = type === "text" ? this.markerRenderer.createTextMarker(coordinate, textOrPath, options) : this.markerRenderer.createImageMarker(coordinate, textOrPath, options);
4579
4626
  const markerId = `${this.markersMap.size + 1}`;
4580
- this._addMarkersToManager(markerId, [marker], ordinal);
4627
+ const markerMeshes = Array.isArray(meshes) ? meshes : [meshes];
4628
+ this._addMarkersToManager(markerId, markerMeshes, ordinal);
4581
4629
  }
4582
4630
  clearMarkers() {
4583
4631
  for (const [markerId, marker] of this.markersMap) {
@@ -4717,6 +4765,7 @@ var IndoorMap = class extends EventTarget {
4717
4765
  this.#dataClient = value;
4718
4766
  if (!this.options.camera?.defaultView?.center) {
4719
4767
  this.#dataClient.filterByType("venue").then((venues) => {
4768
+ this.#venues = venues;
4720
4769
  const venueCenters = turfCenter3(featureCollection(venues));
4721
4770
  const [x, y] = venueCenters.geometry.coordinates;
4722
4771
  const center2 = new Coordinate4(x, y);