s3m-three 0.3.5 → 0.3.7

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 (69) hide show
  1. package/dist/browser/assets/s3mWorker-D7AV6O30.js +1 -0
  2. package/dist/browser/s3m-three.iife.ext-three.js +26 -20
  3. package/dist/browser/s3m-three.iife.js +26 -20
  4. package/dist/core/TextureDecode.d.ts +39 -0
  5. package/dist/core/TextureDecode.d.ts.map +1 -0
  6. package/dist/core/TextureDecode.js +174 -0
  7. package/dist/core/TextureDecode.js.map +1 -0
  8. package/dist/core/TextureFormat.d.ts +22 -2
  9. package/dist/core/TextureFormat.d.ts.map +1 -1
  10. package/dist/core/TextureFormat.js +22 -2
  11. package/dist/core/TextureFormat.js.map +1 -1
  12. package/dist/core/TileGeometry.d.ts +92 -0
  13. package/dist/core/TileGeometry.d.ts.map +1 -0
  14. package/dist/core/TileGeometry.js +607 -0
  15. package/dist/core/TileGeometry.js.map +1 -0
  16. package/dist/render/DatasetManager.d.ts +2 -0
  17. package/dist/render/DatasetManager.d.ts.map +1 -1
  18. package/dist/render/DatasetManager.js +1 -0
  19. package/dist/render/DatasetManager.js.map +1 -1
  20. package/dist/render/FeatureStyleManager.d.ts +4 -2
  21. package/dist/render/FeatureStyleManager.d.ts.map +1 -1
  22. package/dist/render/FeatureStyleManager.js +33 -1
  23. package/dist/render/FeatureStyleManager.js.map +1 -1
  24. package/dist/render/GeometryBuilder.d.ts +8 -10
  25. package/dist/render/GeometryBuilder.d.ts.map +1 -1
  26. package/dist/render/GeometryBuilder.js +77 -555
  27. package/dist/render/GeometryBuilder.js.map +1 -1
  28. package/dist/render/S3MViewer.d.ts +4 -0
  29. package/dist/render/S3MViewer.d.ts.map +1 -1
  30. package/dist/render/S3MViewer.js +13 -2
  31. package/dist/render/S3MViewer.js.map +1 -1
  32. package/dist/render/StyleMaterial.d.ts.map +1 -1
  33. package/dist/render/StyleMaterial.js +6 -0
  34. package/dist/render/StyleMaterial.js.map +1 -1
  35. package/dist/render/TextureFactory.d.ts +9 -19
  36. package/dist/render/TextureFactory.d.ts.map +1 -1
  37. package/dist/render/TextureFactory.js +62 -115
  38. package/dist/render/TextureFactory.js.map +1 -1
  39. package/dist/tileset/S3MTileset.d.ts +21 -0
  40. package/dist/tileset/S3MTileset.d.ts.map +1 -1
  41. package/dist/tileset/S3MTileset.js +41 -2
  42. package/dist/tileset/S3MTileset.js.map +1 -1
  43. package/dist/worker/S3MWorkerClient.d.ts +48 -0
  44. package/dist/worker/S3MWorkerClient.d.ts.map +1 -0
  45. package/dist/worker/S3MWorkerClient.js +124 -0
  46. package/dist/worker/S3MWorkerClient.js.map +1 -0
  47. package/dist/worker/s3mWorker.d.ts +2 -0
  48. package/dist/worker/s3mWorker.d.ts.map +1 -0
  49. package/dist/worker/s3mWorker.js +56 -0
  50. package/dist/worker/s3mWorker.js.map +1 -0
  51. package/dist/worker/transferables.d.ts +14 -0
  52. package/dist/worker/transferables.d.ts.map +1 -0
  53. package/dist/worker/transferables.js +61 -0
  54. package/dist/worker/transferables.js.map +1 -0
  55. package/docs/API.md +6 -0
  56. package/package.json +1 -1
  57. package/src/core/TextureDecode.ts +224 -0
  58. package/src/core/TextureFormat.ts +23 -2
  59. package/src/core/TileGeometry.ts +745 -0
  60. package/src/render/DatasetManager.ts +3 -0
  61. package/src/render/FeatureStyleManager.ts +31 -2
  62. package/src/render/GeometryBuilder.ts +91 -617
  63. package/src/render/S3MViewer.ts +18 -4
  64. package/src/render/StyleMaterial.ts +6 -0
  65. package/src/render/TextureFactory.ts +78 -123
  66. package/src/tileset/S3MTileset.ts +55 -3
  67. package/src/worker/S3MWorkerClient.ts +159 -0
  68. package/src/worker/s3mWorker.ts +76 -0
  69. package/src/worker/transferables.ts +58 -0
@@ -31,6 +31,8 @@ export interface S3MDatasetOptions {
31
31
  align?: DatasetAlignment;
32
32
  /** 垂直高度偏移(米),在 align 对齐基准上的额外偏移,正数抬升,负数下降,默认 0 */
33
33
  heightOffset?: number;
34
+ /** 是否用 Web Worker 解析经典 .s3mb 瓦片(默认开,崩溃自动降级主线程),见 S3MTilesetOptions.useWorker */
35
+ useWorker?: boolean;
34
36
  /**
35
37
  * 是否对该数据集生成几何棱线(CPU 端 EdgesGeometry)。
36
38
  * - 不填:跟随全局 `style.edges`
@@ -194,6 +196,7 @@ export class DatasetManager {
194
196
  maxConcurrent: maxConcurrent,
195
197
  lodRangeScale: ds.lodRangeScale ?? defaultLodRangeScale,
196
198
  buildTile: buildTile ?? null,
199
+ useWorker: ds.useWorker,
197
200
  uniforms: uniforms,
198
201
  onTile: (node) => {
199
202
  callbacks.onTile(node, entry);
@@ -6,7 +6,9 @@
6
6
  * 2. 专题图分析(按业务字段分段着色、连续插值着色、字段过滤、高度拉伸)
7
7
  * 3. 2 行状态纹理(uBatchTex)的烘焙与 GPU 上传:
8
8
  * - Row 0: [R, G, B, elevation / hidden]
9
- * - Row 1: [translationX, translationY, translationZ, reserved]
9
+ * - Row 1: [translationX, translationY, translationZ, opacity]
10
+ * 约定:alpha 0 = 无单体透明覆盖(shader 不乘),(0,1) 开区间为实际透明度,
11
+ * opacity <= 0 等价 hidden(走 Row 0 的 -1 隐藏位)
10
12
  * 4. 批次冲突审计(auditBatches)
11
13
  */
12
14
  import * as THREE from 'three';
@@ -26,7 +28,7 @@ export interface FeatureStyle {
26
28
  elevation?: number;
27
29
  /** 自定义单体三维平移偏移量 [dx, dy, dz](米) */
28
30
  translation?: [number, number, number];
29
- /** 自定义单体透明度(0~1) */
31
+ /** 自定义单体透明度(0~1,batch 粒度;<= 0 等价 hidden,1 / 不传 = 不覆盖) */
30
32
  opacity?: number;
31
33
  /** 是否隐藏该单体 */
32
34
  hidden?: boolean;
@@ -562,6 +564,8 @@ export class FeatureStyleManager {
562
564
  if (mat.userData.uBatchTexActive) {
563
565
  mat.userData.uBatchTexActive.value = 0;
564
566
  }
567
+ // 单体淡化清除后,把材质 transparent 还原成全局透明度语义
568
+ if (mat.transparent && mat.opacity >= 0.999) mat.transparent = false;
565
569
  return;
566
570
  }
567
571
 
@@ -569,6 +573,7 @@ export class FeatureStyleManager {
569
573
  if (mat.userData.uBatchTexActive) {
570
574
  mat.userData.uBatchTexActive.value = 0;
571
575
  }
576
+ if (mat.transparent && mat.opacity >= 0.999) mat.transparent = false;
572
577
  return;
573
578
  }
574
579
 
@@ -611,6 +616,7 @@ export class FeatureStyleManager {
611
616
  const colorOfBatch = new Map<number, string>();
612
617
  const elevOfBatch = new Map<number, number>();
613
618
  const translationOfBatch = new Map<number, [number, number, number]>();
619
+ const opacityOfBatch = new Map<number, number>();
614
620
  const ownersOfBatch = new Map<number, number>();
615
621
 
616
622
  for (const [smidStr, entry] of Object.entries(pickInfo)) {
@@ -661,6 +667,16 @@ export class FeatureStyleManager {
661
667
  continue;
662
668
  }
663
669
 
670
+ // 单体独立透明度:<= 0 等价 hidden;(0,1) 写入状态纹理第 2 行 alpha;>= 1 不覆盖
671
+ const fade = st?.opacity;
672
+ if (fade != null) {
673
+ if (fade <= 0) {
674
+ hiddenBatches.add(bId);
675
+ continue;
676
+ }
677
+ if (fade < 1 && !opacityOfBatch.has(bId)) opacityOfBatch.set(bId, fade);
678
+ }
679
+
664
680
  const col = st?.color ?? this.thematicColors.get(smid);
665
681
  if (col && !colorOfBatch.has(bId)) colorOfBatch.set(bId, col);
666
682
 
@@ -704,6 +720,19 @@ export class FeatureStyleManager {
704
720
  hasActive = true;
705
721
  }
706
722
 
723
+ // 单体独立透明度写在第 2 行 alpha:shader 里 0 = 无覆盖,不会误伤未设置的单体
724
+ let hasFade = false;
725
+ for (const [bId, fade] of opacityOfBatch) {
726
+ if (hiddenBatches.has(bId)) continue;
727
+ data[(w + bId) * 4 + 3] = fade;
728
+ hasActive = true;
729
+ hasFade = true;
730
+ }
731
+
732
+ // 有淡化单体时整块材质要开混合才有透明效果;清除后还原为全局透明度语义
733
+ if (hasFade && !mat.transparent) mat.transparent = true;
734
+ else if (!hasFade && mat.transparent && mat.opacity >= 0.999) mat.transparent = false;
735
+
707
736
  let conflicts = 0;
708
737
  for (const [bId, owners] of ownersOfBatch) {
709
738
  if (owners < 2) continue;