s3m-three 0.4.26 → 0.4.27

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.
Files changed (71) hide show
  1. package/dist/browser/assets/{s3mWorker-DHOVIrAU.js → s3mWorker-BfSBNvF5.js} +1 -1
  2. package/dist/browser/s3m-three.iife.ext-three.js +52 -40
  3. package/dist/browser/s3m-three.iife.js +52 -40
  4. package/dist/core/BakeMercator.d.ts +54 -0
  5. package/dist/core/BakeMercator.d.ts.map +1 -0
  6. package/dist/core/BakeMercator.js +65 -0
  7. package/dist/core/BakeMercator.js.map +1 -0
  8. package/dist/core/TileGeometry.d.ts +7 -0
  9. package/dist/core/TileGeometry.d.ts.map +1 -1
  10. package/dist/core/TileGeometry.js +20 -0
  11. package/dist/core/TileGeometry.js.map +1 -1
  12. package/dist/index.d.ts +4 -3
  13. package/dist/index.d.ts.map +1 -1
  14. package/dist/index.js +2 -1
  15. package/dist/index.js.map +1 -1
  16. package/dist/render/DatasetManager.d.ts +27 -0
  17. package/dist/render/DatasetManager.d.ts.map +1 -1
  18. package/dist/render/DatasetManager.js +18 -4
  19. package/dist/render/DatasetManager.js.map +1 -1
  20. package/dist/render/GeoAdapter.d.ts +49 -24
  21. package/dist/render/GeoAdapter.d.ts.map +1 -1
  22. package/dist/render/GeoAdapter.js +96 -8
  23. package/dist/render/GeoAdapter.js.map +1 -1
  24. package/dist/render/GeometryBuilder.d.ts +17 -0
  25. package/dist/render/GeometryBuilder.d.ts.map +1 -1
  26. package/dist/render/GeometryBuilder.js +31 -2
  27. package/dist/render/GeometryBuilder.js.map +1 -1
  28. package/dist/render/S3MViewer.d.ts +72 -2
  29. package/dist/render/S3MViewer.d.ts.map +1 -1
  30. package/dist/render/S3MViewer.js +269 -9
  31. package/dist/render/S3MViewer.js.map +1 -1
  32. package/dist/render/StyleMaterial.d.ts +5 -0
  33. package/dist/render/StyleMaterial.d.ts.map +1 -1
  34. package/dist/render/StyleMaterial.js +21 -0
  35. package/dist/render/StyleMaterial.js.map +1 -1
  36. package/dist/render/tilePlacement.d.ts +84 -0
  37. package/dist/render/tilePlacement.d.ts.map +1 -0
  38. package/dist/render/tilePlacement.js +71 -0
  39. package/dist/render/tilePlacement.js.map +1 -0
  40. package/dist/render/viewer/EdgeDecorator.d.ts +1 -0
  41. package/dist/render/viewer/EdgeDecorator.d.ts.map +1 -1
  42. package/dist/render/viewer/EdgeDecorator.js +3 -0
  43. package/dist/render/viewer/EdgeDecorator.js.map +1 -1
  44. package/dist/render/viewer/PickService.d.ts +13 -0
  45. package/dist/render/viewer/PickService.d.ts.map +1 -1
  46. package/dist/render/viewer/PickService.js +24 -15
  47. package/dist/render/viewer/PickService.js.map +1 -1
  48. package/dist/render/viewer/types.d.ts +53 -0
  49. package/dist/render/viewer/types.d.ts.map +1 -1
  50. package/dist/render/viewer/types.js.map +1 -1
  51. package/dist/tileset/S3MTileset.d.ts +43 -1
  52. package/dist/tileset/S3MTileset.d.ts.map +1 -1
  53. package/dist/tileset/S3MTileset.js +202 -2
  54. package/dist/tileset/S3MTileset.js.map +1 -1
  55. package/dist/worker/s3mWorker.js +115 -62
  56. package/dist/worker/s3mWorker.js.map +1 -1
  57. package/docs/API.md +18 -0
  58. package/package.json +1 -1
  59. package/src/core/BakeMercator.ts +96 -0
  60. package/src/core/TileGeometry.ts +26 -0
  61. package/src/index.ts +11 -1
  62. package/src/render/DatasetManager.ts +43 -5
  63. package/src/render/GeoAdapter.ts +139 -11
  64. package/src/render/GeometryBuilder.ts +53 -2
  65. package/src/render/S3MViewer.ts +306 -13
  66. package/src/render/StyleMaterial.ts +26 -0
  67. package/src/render/tilePlacement.ts +121 -0
  68. package/src/render/viewer/EdgeDecorator.ts +3 -0
  69. package/src/render/viewer/PickService.ts +44 -16
  70. package/src/render/viewer/types.ts +51 -0
  71. package/src/tileset/S3MTileset.ts +226 -3
@@ -3480,10 +3480,49 @@ async function Gn(e, t = {}) {
3480
3480
  kind: `unsupported(${e.compressType}/${e.pixelFormat})`
3481
3481
  };
3482
3482
  }
3483
- function Kn(e) {
3483
+ // src/render/GeoAdapter.ts
3484
+ var Kn = 6378137, qn = 1 / 298.257223563, Jn = 2 * qn - qn * qn;
3485
+ function Yn(e) {
3486
+ let t = Math.sin(e);
3487
+ return Kn / Math.sqrt(1 - Jn * t * t);
3488
+ }
3489
+ function Xn(e) {
3490
+ let t = Math.sin(e), n = 1 - Jn * t * t;
3491
+ return Kn * .9933056200098587 / (n * Math.sqrt(n));
3492
+ }
3493
+ function Zn(e, t, n, r) {
3494
+ let i = t * Math.PI / 180, a = i + r / Xn(i + r / Xn(i) * .5), o = Yn(a), s = Math.cos(a);
3495
+ return [e + (Math.abs(s) < 1e-12 ? 0 : n / (o * s)) * 180 / Math.PI, a * 180 / Math.PI];
3496
+ }
3497
+ function Qn(e, t, n = 0) {
3498
+ let r = t * Math.PI / 180, i = Math.sin(r), a = Math.max(Math.abs(Math.cos(r)), 1e-12), o = (180 + e) / 360, s = .5 - .25 * Math.log((1 + i) / (1 - i)) / Math.PI, c = Yn(r), l = Xn(r), u = 1 / (2 * Math.PI * c * a), d = 1 / (2 * Math.PI * l * a), f = u;
3499
+ return {
3500
+ x: o,
3501
+ y: s,
3502
+ z: n * f,
3503
+ meterInMercatorEast: u,
3504
+ meterInMercatorNorth: d,
3505
+ meterInMercatorUp: f,
3506
+ meterInMercator: u,
3507
+ altitude: n
3508
+ };
3509
+ }
3510
+ // src/core/BakeMercator.ts
3511
+ function $n(e, t, n) {
3512
+ return Zn(e.lon, e.lat, t, n);
3513
+ }
3514
+ function er(e, t, n, r, i = 3, a) {
3515
+ let o = a && a.length >= t * 3 ? a : new Float32Array(t * 3), s = (n.height ?? 0) + (r.z ?? 0), [c, l] = $n(n, r.x, r.y), u = Qn(c, l, s);
3516
+ for (let r = 0; r < t; r++) {
3517
+ let t = r * i, a = e[t], s = e[t + 1], c = e[t + 2] ?? 0, l = (n.height ?? 0) + c, [d, f] = $n(n, a, s), p = Qn(d, f, l);
3518
+ o[r * 3 + 0] = p.x - u.x, o[r * 3 + 1] = p.y - u.y, o[r * 3 + 2] = p.z - u.z;
3519
+ }
3520
+ return o;
3521
+ }
3522
+ function tr(e) {
3484
3523
  return e === "u8" ? 1 : e === "u16" ? 2 : 4;
3485
3524
  }
3486
- function qn(e, t) {
3525
+ function nr(e, t) {
3487
3526
  switch (e) {
3488
3527
  case "u8": return new Uint8Array(t);
3489
3528
  case "u16": return new Uint16Array(t);
@@ -3491,7 +3530,7 @@ function qn(e, t) {
3491
3530
  default: return new Float32Array(t);
3492
3531
  }
3493
3532
  }
3494
- function Jn(e, t) {
3533
+ function rr(e, t) {
3495
3534
  switch (e) {
3496
3535
  case "u8": return new Uint8Array(t);
3497
3536
  case "u16": return new Uint16Array(t);
@@ -3499,14 +3538,14 @@ function Jn(e, t) {
3499
3538
  default: return new Float32Array(t);
3500
3539
  }
3501
3540
  }
3502
- function Yn(e) {
3503
- let { data: t, stride: n, offsetInBytes: r, dtype: i = "f32" } = e, a = e.components ?? e.comp ?? 3, o = Kn(i), s = a * o, c = n ?? s, l = r ?? 0, u = i === "u8";
3541
+ function ir(e) {
3542
+ let { data: t, stride: n, offsetInBytes: r, dtype: i = "f32" } = e, a = e.components ?? e.comp ?? 3, o = tr(i), s = a * o, c = n ?? s, l = r ?? 0, u = i === "u8";
3504
3543
  if (c === s && l === 0) return {
3505
- array: qn(i, t.buffer.slice(t.byteOffset, t.byteOffset + t.byteLength)),
3544
+ array: nr(i, t.buffer.slice(t.byteOffset, t.byteOffset + t.byteLength)),
3506
3545
  components: a,
3507
3546
  normalized: u
3508
3547
  };
3509
- let d = Math.floor(t.byteLength / c), f = Jn(i, d * a), p = new DataView(t.buffer, t.byteOffset, t.byteLength);
3548
+ let d = Math.floor(t.byteLength / c), f = rr(i, d * a), p = new DataView(t.buffer, t.byteOffset, t.byteLength);
3510
3549
  for (let e = 0; e < d; e++) {
3511
3550
  let t = e * c + l;
3512
3551
  for (let n = 0; n < a; n++) {
@@ -3520,7 +3559,7 @@ function Yn(e) {
3520
3559
  normalized: u
3521
3560
  };
3522
3561
  }
3523
- function Xn(e, t) {
3562
+ function ar(e, t) {
3524
3563
  let n = new Float32Array(t * 4);
3525
3564
  if (!e) return n.fill(1), n;
3526
3565
  let r = e.data, i = e.components ?? 4, a = e.dtype === "u8" ? 1 / 255 : 1, o = i >= 4;
@@ -3530,7 +3569,7 @@ function Xn(e, t) {
3530
3569
  }
3531
3570
  return n;
3532
3571
  }
3533
- function Zn(e) {
3572
+ function or(e) {
3534
3573
  let { indices: t, indexType: n, indexCount: r } = e;
3535
3574
  if (!t || r === 0) return null;
3536
3575
  let i = Math.floor(t.byteLength / r), a = i === 4 || i !== 2 && (n === 1 || n === 3), o = r * (a ? 4 : 2);
@@ -3538,7 +3577,7 @@ function Zn(e) {
3538
3577
  let s = t.buffer.slice(t.byteOffset, t.byteOffset + o);
3539
3578
  return a ? new Uint32Array(s) : new Uint16Array(s);
3540
3579
  }
3541
- function Qn(e, t, n) {
3580
+ function sr(e, t, n) {
3542
3581
  let r = new Float32Array(n * 3), i = (t, n, i) => {
3543
3582
  let a = e[t * 3], o = e[t * 3 + 1], s = e[t * 3 + 2], c = e[n * 3], l = e[n * 3 + 1], u = e[n * 3 + 2], d = e[i * 3], f = e[i * 3 + 1], p = e[i * 3 + 2], m = c - a, h = l - o, g = u - s, _ = d - a, v = f - o, y = p - s, b = h * y - g * v, x = g * _ - m * y, S = m * v - h * _;
3544
3583
  for (let e of [
@@ -3555,7 +3594,7 @@ function Qn(e, t, n) {
3555
3594
  }
3556
3595
  return r;
3557
3596
  }
3558
- function $n(e, t) {
3597
+ function cr(e, t) {
3559
3598
  let n = [
3560
3599
  Infinity,
3561
3600
  Infinity,
@@ -3585,21 +3624,21 @@ function $n(e, t) {
3585
3624
  sphereRadius: Math.sqrt(a)
3586
3625
  };
3587
3626
  }
3588
- var er = [
3627
+ var lr = [
3589
3628
  13,
3590
3629
  2,
3591
3630
  3
3592
- ], tr = 1;
3593
- function nr(e) {
3594
- return er.includes(e);
3631
+ ], ur = 1;
3632
+ function dr(e) {
3633
+ return lr.includes(e);
3595
3634
  }
3596
- function rr(e) {
3635
+ function fr(e) {
3597
3636
  return !e || e[0] === 1 && e[1] === 0 && e[2] === 0 && e[3] === 0 && e[4] === 0 && e[5] === 1 && e[6] === 0 && e[7] === 0 && e[8] === 0 && e[9] === 0 && e[10] === 1 && e[11] === 0 && e[12] === 0 && e[13] === 0 && e[14] === 0 && e[15] === 1;
3598
3637
  }
3599
- function ir(e, t, n, r, i) {
3638
+ function pr(e, t, n, r, i) {
3600
3639
  i[0] = e[0] * t + e[4] * n + e[8] * r + e[12], i[1] = e[1] * t + e[5] * n + e[9] * r + e[13], i[2] = e[2] * t + e[6] * n + e[10] * r + e[14];
3601
3640
  }
3602
- function ar(e) {
3641
+ function mr(e) {
3603
3642
  let t = e[0], n = e[4], r = e[8], i = e[1], a = e[5], o = e[9], s = e[2], c = e[6], l = e[10], u = a * l - o * c, d = -(i * l - o * s), f = i * c - a * s, p = -(n * l - r * c), m = t * l - r * s, h = -(t * c - n * s), g = n * o - r * a, _ = -(t * o - r * i), v = t * a - n * i, y = t * u + n * d + r * f || 1e-12, b = [
3604
3643
  u / y,
3605
3644
  d / y,
@@ -3613,12 +3652,12 @@ function ar(e) {
3613
3652
  ], x = /* @__PURE__ */ new Float32Array(9);
3614
3653
  return x[0] = b[0], x[1] = b[3], x[2] = b[6], x[3] = b[1], x[4] = b[4], x[5] = b[7], x[6] = b[2], x[7] = b[5], x[8] = b[8], x;
3615
3654
  }
3616
- function or(e, t, n, r, i) {
3655
+ function hr(e, t, n, r, i) {
3617
3656
  i[0] = e[0] * t + e[3] * n + e[6] * r, i[1] = e[1] * t + e[4] * n + e[7] * r, i[2] = e[2] * t + e[5] * n + e[8] * r;
3618
3657
  let a = Math.hypot(i[0], i[1], i[2]) || 1;
3619
3658
  i[0] /= a, i[1] /= a, i[2] /= a;
3620
3659
  }
3621
- function sr(e) {
3660
+ function gr(e) {
3622
3661
  let t = 0, n = 0, r = !1, i = !1, a = !1, o = !1, s = !1;
3623
3662
  for (let c of e) t += c.vertexCount, n += c.index ? c.indexCount : c.vertexCount, c.attrs.normal && (r = !0), c.attrs.uv && (i = !0), c.attrs.uv1 && (a = !0), c.attrs.aAtlasRect && (o = !0), c.attrs.aTexCoordZ && (s = !0);
3624
3663
  let c = {
@@ -3667,10 +3706,10 @@ function sr(e) {
3667
3706
  0
3668
3707
  ], b = 0, x = 0;
3669
3708
  for (let t of e) {
3670
- let { attrs: e } = t, n = t.vertexCount, r = rr(t.matrix) ? null : t.matrix, i = r && l ? ar(r) : null, a = e.position.array, o = e.normal?.array, s = e.uv?.array, S = e.uv1?.array, C = e.aTexCoordZ?.array, w = _?.array, T = e.aColor.array, E = e.aBatchId.array, D = c.array, ee = l?.array, te = u?.array, ne = d?.array, O = f.array, re = p.array;
3709
+ let { attrs: e } = t, n = t.vertexCount, r = fr(t.matrix) ? null : t.matrix, i = r && l ? mr(r) : null, a = e.position.array, o = e.normal?.array, s = e.uv?.array, S = e.uv1?.array, C = e.aTexCoordZ?.array, w = _?.array, T = e.aColor.array, E = e.aBatchId.array, D = c.array, ee = l?.array, te = u?.array, ne = d?.array, O = f.array, re = p.array;
3671
3710
  for (let e = 0; e < n; e++) {
3672
3711
  let t = b + e;
3673
- r ? (ir(r, a[e * 3], a[e * 3 + 1], a[e * 3 + 2], y), D[t * 3] = y[0], D[t * 3 + 1] = y[1], D[t * 3 + 2] = y[2]) : (D[t * 3] = a[e * 3], D[t * 3 + 1] = a[e * 3 + 1], D[t * 3 + 2] = a[e * 3 + 2]), ee && (o && i ? (or(i, o[e * 3], o[e * 3 + 1], o[e * 3 + 2], y), ee[t * 3] = y[0], ee[t * 3 + 1] = y[1], ee[t * 3 + 2] = y[2]) : o && (ee[t * 3] = o[e * 3], ee[t * 3 + 1] = o[e * 3 + 1], ee[t * 3 + 2] = o[e * 3 + 2])), te && s && (te[t * 2] = s[e * 2], te[t * 2 + 1] = s[e * 2 + 1]), ne && S && (ne[t * 2] = S[e * 2], ne[t * 2 + 1] = S[e * 2 + 1]), w && (w[t] = C ? C[e] : 0), T ? (O[t * 4] = T[e * 4], O[t * 4 + 1] = T[e * 4 + 1], O[t * 4 + 2] = T[e * 4 + 2], O[t * 4 + 3] = T[e * 4 + 3] ?? 1) : (O[t * 4] = 1, O[t * 4 + 1] = 1, O[t * 4 + 2] = 1, O[t * 4 + 3] = 1), re[t] = E ? E[e] : -1;
3712
+ r ? (pr(r, a[e * 3], a[e * 3 + 1], a[e * 3 + 2], y), D[t * 3] = y[0], D[t * 3 + 1] = y[1], D[t * 3 + 2] = y[2]) : (D[t * 3] = a[e * 3], D[t * 3 + 1] = a[e * 3 + 1], D[t * 3 + 2] = a[e * 3 + 2]), ee && (o && i ? (hr(i, o[e * 3], o[e * 3 + 1], o[e * 3 + 2], y), ee[t * 3] = y[0], ee[t * 3 + 1] = y[1], ee[t * 3 + 2] = y[2]) : o && (ee[t * 3] = o[e * 3], ee[t * 3 + 1] = o[e * 3 + 1], ee[t * 3 + 2] = o[e * 3 + 2])), te && s && (te[t * 2] = s[e * 2], te[t * 2 + 1] = s[e * 2 + 1]), ne && S && (ne[t * 2] = S[e * 2], ne[t * 2 + 1] = S[e * 2 + 1]), w && (w[t] = C ? C[e] : 0), T ? (O[t * 4] = T[e * 4], O[t * 4 + 1] = T[e * 4 + 1], O[t * 4 + 2] = T[e * 4 + 2], O[t * 4 + 3] = T[e * 4 + 3] ?? 1) : (O[t * 4] = 1, O[t * 4 + 1] = 1, O[t * 4 + 2] = 1, O[t * 4 + 3] = 1), re[t] = E ? E[e] : -1;
3674
3713
  }
3675
3714
  if (m) {
3676
3715
  let t = e.aAtlasRect?.array, r = e.aAtlasRect1?.array, i = e.aSecUv?.array, a = m.array, o = h.array, s = g.array;
@@ -3689,7 +3728,7 @@ function sr(e) {
3689
3728
  }
3690
3729
  b += n;
3691
3730
  }
3692
- let S = $n(c.array, t);
3731
+ let S = cr(c.array, t);
3693
3732
  return {
3694
3733
  skeletonName: e[0].name,
3695
3734
  geoNames: e.map((e) => e.name),
@@ -3715,13 +3754,13 @@ function sr(e) {
3715
3754
  batchedFrom: e.length
3716
3755
  };
3717
3756
  }
3718
- function cr(e, t, n, r, i) {
3757
+ function _r(e, t, n, r, i) {
3719
3758
  let a = t.vertexPackage;
3720
3759
  ue(a, void 0, n.vertexAttributeDescript ?? i?.vertexAttributeDescript);
3721
3760
  let o = a.vertexAttributes.find((e) => e.semantic === "position");
3722
3761
  if (!o) return r.push(`${e} 无 position`), null;
3723
3762
  let s = a.verticesCount || 0, c = {
3724
- position: Yn(o),
3763
+ position: ir(o),
3725
3764
  aColor: {
3726
3765
  array: /* @__PURE__ */ new Float32Array(),
3727
3766
  components: 4,
@@ -3736,11 +3775,11 @@ function cr(e, t, n, r, i) {
3736
3775
  for (let e of a.vertexAttributes) if (e.divisor === void 0 && e.semantic !== "position") {
3737
3776
  if (e.semantic === "color") l = e;
3738
3777
  else if (e.semantic === "batchId") u = e;
3739
- else if (e.semantic === "normal") d = Yn(e);
3740
- else if (e.semantic === "uv") f = Yn(e);
3741
- else if (e.semantic === "uv2") p = Yn(e);
3778
+ else if (e.semantic === "normal") d = ir(e);
3779
+ else if (e.semantic === "uv") f = ir(e);
3780
+ else if (e.semantic === "uv2") p = ir(e);
3742
3781
  else if ((e.semantic === "TextureCoordMatrix" || e.semantic === "aTextureCoordMatrix" || e.semantic === "custom0" && !a.vertexAttributes.some((e) => e.semantic === "TextureCoordMatrix" || e.semantic === "VertexWeight")) && (e.components ?? 1) >= 1) {
3743
- let t = Yn(e), n = t.array, r = !1;
3782
+ let t = ir(e), n = t.array, r = !1;
3744
3783
  for (let e = 0; e < n.length; e++) if (n[e] >= -99900) {
3745
3784
  r = !0;
3746
3785
  break;
@@ -3749,11 +3788,11 @@ function cr(e, t, n, r, i) {
3749
3788
  }
3750
3789
  }
3751
3790
  c.aColor = {
3752
- array: Xn(l, s),
3791
+ array: ar(l, s),
3753
3792
  components: 4,
3754
3793
  normalized: !1
3755
3794
  }, c.aBatchId = u ? {
3756
- array: Yn(u).array,
3795
+ array: ir(u).array,
3757
3796
  components: 1,
3758
3797
  normalized: !1
3759
3798
  } : {
@@ -3788,7 +3827,7 @@ function cr(e, t, n, r, i) {
3788
3827
  indexCount: 0,
3789
3828
  indexType: 0,
3790
3829
  useIndex: 0,
3791
- primitiveType: tr,
3830
+ primitiveType: ur,
3792
3831
  indices: null,
3793
3832
  passNames: []
3794
3833
  }]), {
@@ -3797,10 +3836,10 @@ function cr(e, t, n, r, i) {
3797
3836
  instanced: a.instanceIndex !== -1 && (a.instanceMode === 16 || a.instanceMode === 17)
3798
3837
  };
3799
3838
  }
3800
- function lr(e, t, n, r, i, a) {
3801
- let o = n.vertexPackage.verticesCount || 0, s = Zn(i), c = { ...r.attrs };
3802
- return !nr(i.primitiveType) && i.primitiveType !== tr && !c.normal && (c.normal = {
3803
- array: Qn(c.position.array, s, o),
3839
+ function vr(e, t, n, r, i, a) {
3840
+ let o = n.vertexPackage.verticesCount || 0, s = or(i), c = { ...r.attrs };
3841
+ return !dr(i.primitiveType) && i.primitiveType !== ur && !c.normal && (c.normal = {
3842
+ array: sr(c.position.array, s, o),
3804
3843
  components: 3,
3805
3844
  normalized: !1
3806
3845
  }), {
@@ -3813,10 +3852,10 @@ function lr(e, t, n, r, i, a) {
3813
3852
  indexCount: i.indexCount || 0,
3814
3853
  attributes: c,
3815
3854
  index: s,
3816
- bounds: $n(c.position.array, o)
3855
+ bounds: cr(c.position.array, o)
3817
3856
  };
3818
3857
  }
3819
- function ur(e, t, n, r = .001) {
3858
+ function yr(e, t, n, r = .001) {
3820
3859
  let i = Math.floor(e.length / 3);
3821
3860
  if (i === 0) return {
3822
3861
  index: e,
@@ -3837,7 +3876,7 @@ function ur(e, t, n, r = .001) {
3837
3876
  dropped: u
3838
3877
  };
3839
3878
  }
3840
- function dr(e, t = {}) {
3879
+ function br(e, t = {}) {
3841
3880
  let n = t.batching !== !1, r = [], i = {
3842
3881
  vertices: 0,
3843
3882
  instanced: 0,
@@ -3845,19 +3884,19 @@ function dr(e, t = {}) {
3845
3884
  skipped: r
3846
3885
  }, a = /* @__PURE__ */ new Map();
3847
3886
  for (let [n, o] of Object.entries(e.geoPackage ?? {})) {
3848
- let s = cr(n, o, e, r, t);
3887
+ let s = _r(n, o, e, r, t);
3849
3888
  s && (a.set(n, s), i.vertices += o.vertexPackage.verticesCount || 0);
3850
3889
  }
3851
3890
  let o = [], s = /* @__PURE__ */ new Map(), c = 0, l = (e) => {
3852
- nr(e.primitiveType) && i.edgeLines++, o.push(e);
3891
+ dr(e.primitiveType) && i.edgeLines++, o.push(e);
3853
3892
  }, u = (e) => {
3854
3893
  let t = e.passNames[0] ?? "__default__", n = s.get(t);
3855
3894
  n || (n = [], s.set(t, n)), n.push(e);
3856
3895
  }, d = (e, t, r, a, o) => {
3857
3896
  let s = r.packs[a], d = r.instanced && !!t.vertexPackage.instanceBuffer && (t.vertexPackage.instanceCount ?? 0) > 0;
3858
- nr(s.primitiveType) || d ? (d && i.instanced++, l(lr(e, e, t, r, s, o)), c++) : n && s.primitiveType === 4 ? (u({
3897
+ dr(s.primitiveType) || d ? (d && i.instanced++, l(vr(e, e, t, r, s, o)), c++) : n && s.primitiveType === 4 ? (u({
3859
3898
  attrs: r.attrs,
3860
- index: Zn(s),
3899
+ index: or(s),
3861
3900
  vertexCount: t.vertexPackage.verticesCount || 0,
3862
3901
  indexCount: s.indexCount || 0,
3863
3902
  name: e,
@@ -3865,7 +3904,7 @@ function dr(e, t = {}) {
3865
3904
  matrix: o,
3866
3905
  passNames: s.passNames ?? [],
3867
3906
  primitiveType: s.primitiveType
3868
- }), c++) : (l(lr(e, e, t, r, s, o)), c++);
3907
+ }), c++) : (l(vr(e, e, t, r, s, o)), c++);
3869
3908
  };
3870
3909
  for (let t of e.groupNode?.pageLods ?? []) for (let n of t.geodes ?? []) {
3871
3910
  let t = n.matrix && n.matrix.length === 16 ? n.matrix : null;
@@ -3882,7 +3921,7 @@ function dr(e, t = {}) {
3882
3921
  }
3883
3922
  if (s.size > 0) for (let [, e] of s) if (i.originalMeshes = (i.originalMeshes ?? 0) + e.length, e.length === 1) {
3884
3923
  let t = e[0];
3885
- l(lr(t.name, t.name, t.geo, {
3924
+ l(vr(t.name, t.name, t.geo, {
3886
3925
  attrs: t.attrs,
3887
3926
  packs: [],
3888
3927
  instanced: !1
@@ -3894,24 +3933,38 @@ function dr(e, t = {}) {
3894
3933
  indices: t.index ? new Uint8Array(t.index.buffer, t.index.byteOffset, t.index.byteLength) : null,
3895
3934
  passNames: t.passNames
3896
3935
  }, t.matrix));
3897
- } else l(sr(e));
3936
+ } else l(gr(e));
3898
3937
  if (t.dedupeCoincident !== !1) for (let e of o) {
3899
3938
  if (e.primitiveType !== 4 || !e.index || e.geoNames.length > 1) continue;
3900
3939
  let t = e.attributes.position?.array;
3901
3940
  if (!t) continue;
3902
- let n = e.attributes.aBatchId?.array ?? null, { index: r, dropped: a } = ur(e.index, t, n);
3941
+ let n = e.attributes.aBatchId?.array ?? null, { index: r, dropped: a } = yr(e.index, t, n);
3903
3942
  a > 0 && (e.index = r, e.indexCount = r.length, i.deduped = (i.deduped ?? 0) + a);
3904
3943
  }
3944
+ if (t.bakeMercator && t.tileAnchor) for (let e of o) {
3945
+ let n = e.attributes.position?.array;
3946
+ if (!n || e.vertexCount === 0) continue;
3947
+ let r = t.tileCenter ?? {
3948
+ x: e.bounds.sphereCenter[0],
3949
+ y: e.bounds.sphereCenter[1],
3950
+ z: e.bounds.sphereCenter[2]
3951
+ }, i = er(n, e.vertexCount, t.tileAnchor, r);
3952
+ e.attributes.aMercatorOffset = {
3953
+ array: i,
3954
+ components: 3,
3955
+ normalized: !1
3956
+ };
3957
+ }
3905
3958
  return {
3906
3959
  primitives: o,
3907
3960
  stats: i
3908
3961
  };
3909
3962
  }
3910
3963
  // src/worker/transferables.ts
3911
- var fr = 12;
3912
- function pr(e) {
3964
+ var xr = 12;
3965
+ function Sr(e) {
3913
3966
  let t = /* @__PURE__ */ new Set(), n = /* @__PURE__ */ new Set(), r = (e, i) => {
3914
- if (e == null || i > fr) return;
3967
+ if (e == null || i > xr) return;
3915
3968
  if (ArrayBuffer.isView(e)) {
3916
3969
  let n = e.buffer;
3917
3970
  n instanceof ArrayBuffer && t.add(n);
@@ -3933,46 +3986,46 @@ function pr(e) {
3933
3986
  return r(e, 0), [...t];
3934
3987
  }
3935
3988
  // src/worker/s3mWorker.ts
3936
- var mr = self;
3937
- function hr(e) {
3938
- let t = pr(e);
3989
+ var Cr = self;
3990
+ function wr(e) {
3991
+ let t = Sr(e);
3939
3992
  return e.bitmap && t.push(e.bitmap), t;
3940
3993
  }
3941
- mr.onmessage = async (e) => {
3994
+ Cr.onmessage = async (e) => {
3942
3995
  let t = e.data, { id: n } = t;
3943
3996
  try {
3944
3997
  if (t.type === "parse") {
3945
3998
  let e = await Ct(t.buffer, { vertexAttributeDescript: t.vertexAttributeDescript });
3946
3999
  if (t.assemble) {
3947
- let r = dr(e, {
4000
+ let r = br(e, {
3948
4001
  batching: t.batching,
3949
4002
  vertexAttributeDescript: t.vertexAttributeDescript
3950
4003
  });
3951
- mr.postMessage({
4004
+ Cr.postMessage({
3952
4005
  id: n,
3953
4006
  ok: !0,
3954
4007
  tile: e,
3955
4008
  geometry: r
3956
- }, [...pr(e), ...pr(r)]);
3957
- } else mr.postMessage({
4009
+ }, [...Sr(e), ...Sr(r)]);
4010
+ } else Cr.postMessage({
3958
4011
  id: n,
3959
4012
  ok: !0,
3960
4013
  tile: e
3961
- }, pr(e));
4014
+ }, Sr(e));
3962
4015
  } else {
3963
4016
  let e = await Wn(t.tex, {
3964
4017
  compressed: t.compressed,
3965
4018
  maxSize: t.maxSize
3966
4019
  });
3967
- mr.postMessage({
4020
+ Cr.postMessage({
3968
4021
  id: n,
3969
4022
  ok: !0,
3970
4023
  data: e
3971
- }, hr(e));
4024
+ }, wr(e));
3972
4025
  }
3973
4026
  } catch (e) {
3974
4027
  let t = e?.permanent === !0, r = String(e?.message ?? e);
3975
- mr.postMessage({
4028
+ Cr.postMessage({
3976
4029
  id: n,
3977
4030
  ok: !1,
3978
4031
  message: r,