venue-js 1.3.1 → 1.4.0-next.2

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