@loaders.gl/gltf 4.0.0-alpha.23 → 4.0.0-alpha.24

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 (85) hide show
  1. package/dist/dist.min.js +148 -102
  2. package/dist/es5/lib/extensions/EXT_mesh_features.js +3 -3
  3. package/dist/es5/lib/extensions/EXT_mesh_features.js.map +1 -1
  4. package/dist/es5/lib/extensions/EXT_structural_metadata.js +88 -86
  5. package/dist/es5/lib/extensions/EXT_structural_metadata.js.map +1 -1
  6. package/dist/es5/lib/extensions/deprecated/EXT_feature_metadata.js +26 -13
  7. package/dist/es5/lib/extensions/deprecated/EXT_feature_metadata.js.map +1 -1
  8. package/dist/es5/lib/extensions/{data-processing.js → utils/3d-tiles-utils.js} +25 -6
  9. package/dist/es5/lib/extensions/utils/3d-tiles-utils.js.map +1 -0
  10. package/dist/es5/lib/types/gltf-ext-structural-metadata-schema.js.map +1 -1
  11. package/dist/es5/lib/types/gltf-json-schema.js.map +1 -1
  12. package/dist/es5/lib/utils/version.js +1 -1
  13. package/dist/esm/lib/extensions/EXT_mesh_features.js +1 -1
  14. package/dist/esm/lib/extensions/EXT_mesh_features.js.map +1 -1
  15. package/dist/esm/lib/extensions/EXT_structural_metadata.js +85 -81
  16. package/dist/esm/lib/extensions/EXT_structural_metadata.js.map +1 -1
  17. package/dist/esm/lib/extensions/deprecated/EXT_feature_metadata.js +26 -13
  18. package/dist/esm/lib/extensions/deprecated/EXT_feature_metadata.js.map +1 -1
  19. package/dist/esm/lib/extensions/{data-processing.js → utils/3d-tiles-utils.js} +24 -6
  20. package/dist/esm/lib/extensions/utils/3d-tiles-utils.js.map +1 -0
  21. package/dist/esm/lib/types/gltf-ext-structural-metadata-schema.js.map +1 -1
  22. package/dist/esm/lib/types/gltf-json-schema.js.map +1 -1
  23. package/dist/esm/lib/utils/version.js +1 -1
  24. package/dist/lib/extensions/EXT_structural_metadata.d.ts +3 -3
  25. package/dist/lib/extensions/EXT_structural_metadata.d.ts.map +1 -1
  26. package/dist/lib/extensions/deprecated/EXT_feature_metadata.d.ts.map +1 -1
  27. package/dist/lib/extensions/utils/3d-tiles-utils.d.ts +52 -0
  28. package/dist/lib/extensions/utils/3d-tiles-utils.d.ts.map +1 -0
  29. package/dist/lib/types/gltf-ext-structural-metadata-schema.d.ts +4 -4
  30. package/dist/lib/types/gltf-ext-structural-metadata-schema.d.ts.map +1 -1
  31. package/dist/lib/types/gltf-json-schema.d.ts +1 -1
  32. package/dist/lib/types/gltf-json-schema.d.ts.map +1 -1
  33. package/package.json +6 -6
  34. package/src/lib/extensions/EXT_mesh_features.ts +1 -1
  35. package/src/lib/extensions/EXT_structural_metadata.ts +267 -200
  36. package/src/lib/extensions/deprecated/EXT_feature_metadata.ts +123 -19
  37. package/src/lib/extensions/{data-processing.ts → utils/3d-tiles-utils.ts} +95 -34
  38. package/src/lib/types/gltf-ext-structural-metadata-schema.ts +6 -4
  39. package/src/lib/types/gltf-json-schema.ts +1 -1
  40. package/dist/bundle.js +0 -5
  41. package/dist/es5/lib/extensions/data-processing.js.map +0 -1
  42. package/dist/esm/lib/extensions/data-processing.js.map +0 -1
  43. package/dist/glb-loader.js +0 -34
  44. package/dist/glb-writer.js +0 -35
  45. package/dist/gltf-loader.js +0 -50
  46. package/dist/gltf-writer.js +0 -32
  47. package/dist/index.js +0 -34
  48. package/dist/lib/api/gltf-extensions.js +0 -88
  49. package/dist/lib/api/gltf-scenegraph.js +0 -580
  50. package/dist/lib/api/normalize-gltf-v1.js +0 -299
  51. package/dist/lib/api/post-process-gltf.js +0 -433
  52. package/dist/lib/encoders/encode-glb.js +0 -72
  53. package/dist/lib/encoders/encode-gltf.js +0 -32
  54. package/dist/lib/extensions/EXT_mesh_features.js +0 -89
  55. package/dist/lib/extensions/EXT_meshopt_compression.js +0 -41
  56. package/dist/lib/extensions/EXT_structural_metadata.js +0 -504
  57. package/dist/lib/extensions/EXT_texture_webp.js +0 -36
  58. package/dist/lib/extensions/KHR_binary_gltf.js +0 -39
  59. package/dist/lib/extensions/KHR_draco_mesh_compression.js +0 -137
  60. package/dist/lib/extensions/KHR_texture_basisu.js +0 -29
  61. package/dist/lib/extensions/KHR_texture_transform.js +0 -227
  62. package/dist/lib/extensions/data-processing.d.ts +0 -34
  63. package/dist/lib/extensions/data-processing.d.ts.map +0 -1
  64. package/dist/lib/extensions/data-processing.js +0 -212
  65. package/dist/lib/extensions/deprecated/EXT_feature_metadata.js +0 -282
  66. package/dist/lib/extensions/deprecated/KHR_lights_punctual.js +0 -59
  67. package/dist/lib/extensions/deprecated/KHR_materials_unlit.js +0 -44
  68. package/dist/lib/extensions/deprecated/KHR_techniques_webgl.js +0 -79
  69. package/dist/lib/gltf-utils/get-typed-array.js +0 -41
  70. package/dist/lib/gltf-utils/gltf-attribute-utils.js +0 -73
  71. package/dist/lib/gltf-utils/gltf-constants.js +0 -43
  72. package/dist/lib/gltf-utils/gltf-utils.js +0 -90
  73. package/dist/lib/gltf-utils/resolve-url.js +0 -18
  74. package/dist/lib/parsers/parse-glb.js +0 -166
  75. package/dist/lib/parsers/parse-gltf.js +0 -185
  76. package/dist/lib/types/glb-types.js +0 -2
  77. package/dist/lib/types/gltf-ext-mesh-features-schema.js +0 -2
  78. package/dist/lib/types/gltf-ext-structural-metadata-schema.js +0 -2
  79. package/dist/lib/types/gltf-json-schema.js +0 -4
  80. package/dist/lib/types/gltf-postprocessed-schema.js +0 -4
  81. package/dist/lib/types/gltf-types.js +0 -3
  82. package/dist/lib/utils/assert.js +0 -12
  83. package/dist/lib/utils/version.js +0 -7
  84. package/dist/meshopt/meshopt-decoder.js +0 -118
  85. package/dist/webp/webp.js +0 -38
package/dist/dist.min.js CHANGED
@@ -2531,17 +2531,35 @@
2531
2531
  }
2532
2532
  });
2533
2533
 
2534
- // src/lib/extensions/data-processing.ts
2534
+ // src/lib/extensions/utils/3d-tiles-utils.ts
2535
2535
  function getArrayElementByteSize(attributeType, componentType) {
2536
2536
  return ATTRIBUTE_COMPONENT_TYPE_TO_BYTE_SIZE2[componentType] * ATTRIBUTE_TYPE_TO_COMPONENTS2[attributeType];
2537
2537
  }
2538
- function convertRawBufferToMetadataArray(typedArray, attributeType, componentType, elementCount = 1) {
2538
+ function getOffsetsForProperty(scenegraph, bufferViewIndex, offsetType, numberOfElements) {
2539
+ if (offsetType !== "UINT8" && offsetType !== "UINT16" && offsetType !== "UINT32" && offsetType !== "UINT64") {
2540
+ return null;
2541
+ }
2542
+ const arrayOffsetsBytes = scenegraph.getTypedArrayForBufferView(bufferViewIndex);
2543
+ const arrayOffsets = convertRawBufferToMetadataArray(arrayOffsetsBytes, "SCALAR", offsetType, numberOfElements + 1);
2544
+ if (arrayOffsets instanceof BigInt64Array || arrayOffsets instanceof BigUint64Array) {
2545
+ return null;
2546
+ }
2547
+ return arrayOffsets;
2548
+ }
2549
+ function convertRawBufferToMetadataArray(data, attributeType, componentType, elementCount = 1) {
2539
2550
  const numberOfComponents = ATTRIBUTE_TYPE_TO_COMPONENTS2[attributeType];
2540
2551
  const ArrayType = ATTRIBUTE_COMPONENT_TYPE_TO_ARRAY2[componentType];
2541
- const length = elementCount * numberOfComponents;
2542
2552
  const size = ATTRIBUTE_COMPONENT_TYPE_TO_BYTE_SIZE2[componentType];
2543
- const offset = typedArray.byteOffset % size ? Math.ceil(typedArray.byteOffset / size) * size : typedArray.byteOffset;
2544
- return new ArrayType(typedArray.buffer, offset, length);
2553
+ const length = elementCount * numberOfComponents;
2554
+ const byteLength = length * size;
2555
+ let buffer = data.buffer;
2556
+ let offset = data.byteOffset;
2557
+ if (offset % size !== 0) {
2558
+ const bufferArray = new Uint8Array(buffer);
2559
+ buffer = bufferArray.slice(offset, offset + byteLength).buffer;
2560
+ offset = 0;
2561
+ }
2562
+ return new ArrayType(buffer, offset, length);
2545
2563
  }
2546
2564
  function getPrimitiveTextureData(scenegraph, textureInfo, primitive) {
2547
2565
  const json = scenegraph.gltf.json;
@@ -2629,8 +2647,8 @@
2629
2647
  return offset;
2630
2648
  }
2631
2649
  var ATTRIBUTE_TYPE_TO_COMPONENTS2, ATTRIBUTE_COMPONENT_TYPE_TO_ARRAY2, ATTRIBUTE_COMPONENT_TYPE_TO_BYTE_SIZE2;
2632
- var init_data_processing = __esm({
2633
- "src/lib/extensions/data-processing.ts"() {
2650
+ var init_d_tiles_utils = __esm({
2651
+ "src/lib/extensions/utils/3d-tiles-utils.ts"() {
2634
2652
  init_gltf_utils();
2635
2653
  init_src3();
2636
2654
  init_src4();
@@ -2718,6 +2736,15 @@
2718
2736
  }
2719
2737
  }
2720
2738
  }
2739
+ function findPropertyTableByClass(propertyTables, schemaClassName) {
2740
+ for (let i2 = 0, len = propertyTables.length; i2 < len; i2++) {
2741
+ const propertyTable = propertyTables[i2];
2742
+ if (propertyTable.class === schemaClassName) {
2743
+ return propertyTable;
2744
+ }
2745
+ }
2746
+ return null;
2747
+ }
2721
2748
  function processPrimitivePropertyTextures(scenegraph, propertyTextures, primitive, extension) {
2722
2749
  if (!propertyTextures) {
2723
2750
  return;
@@ -2778,14 +2805,8 @@
2778
2805
  let data = [];
2779
2806
  const valuesBufferView = propertyTableProperty.values;
2780
2807
  const valuesDataBytes = scenegraph.getTypedArrayForBufferView(valuesBufferView);
2781
- let arrayOffsets = null;
2782
- if (classProperty.array && typeof classProperty.count === "undefined" && typeof propertyTableProperty.arrayOffsets !== "undefined" && typeof propertyTableProperty.arrayOffsetType !== "undefined") {
2783
- arrayOffsets = getOffsetArray(scenegraph, propertyTableProperty.arrayOffsets, propertyTableProperty.arrayOffsetType, numberOfElements);
2784
- }
2785
- let stringOffsets = null;
2786
- if (typeof propertyTableProperty.stringOffsets !== "undefined" && typeof propertyTableProperty.stringOffsetType !== "undefined") {
2787
- stringOffsets = getOffsetArray(scenegraph, propertyTableProperty.stringOffsets, propertyTableProperty.stringOffsetType, numberOfElements);
2788
- }
2808
+ const arrayOffsets = getArrayOffsetsForProperty(scenegraph, classProperty, propertyTableProperty, numberOfElements);
2809
+ const stringOffsets = getStringOffsetsForProperty(scenegraph, propertyTableProperty, numberOfElements);
2789
2810
  switch (classProperty.type) {
2790
2811
  case "SCALAR":
2791
2812
  case "VEC2":
@@ -2813,11 +2834,17 @@
2813
2834
  }
2814
2835
  return data;
2815
2836
  }
2816
- function getOffsetArray(scenegraph, offsets, offsetType, numberOfElements) {
2817
- const arrayOffsetsBufferView = offsets;
2818
- const arrayOffsetsBytes = scenegraph.getTypedArrayForBufferView(arrayOffsetsBufferView);
2819
- const arrayOffsets = convertRawBufferToMetadataArray(arrayOffsetsBytes, "SCALAR", offsetType, numberOfElements + 1);
2820
- return arrayOffsets;
2837
+ function getArrayOffsetsForProperty(scenegraph, classProperty, propertyTableProperty, numberOfElements) {
2838
+ if (classProperty.array && typeof classProperty.count === "undefined" && typeof propertyTableProperty.arrayOffsets !== "undefined" && typeof propertyTableProperty.arrayOffsetType !== "undefined") {
2839
+ return getOffsetsForProperty(scenegraph, propertyTableProperty.arrayOffsets, propertyTableProperty.arrayOffsetType, numberOfElements);
2840
+ }
2841
+ return null;
2842
+ }
2843
+ function getStringOffsetsForProperty(scenegraph, propertyTableProperty, numberOfElements) {
2844
+ if (typeof propertyTableProperty.stringOffsets !== "undefined" && typeof propertyTableProperty.stringOffsetType !== "undefined") {
2845
+ return getOffsetsForProperty(scenegraph, propertyTableProperty.stringOffsets, propertyTableProperty.stringOffsetType, numberOfElements);
2846
+ }
2847
+ return null;
2821
2848
  }
2822
2849
  function getPropertyDataNumeric(classProperty, numberOfElements, valuesDataBytes, arrayOffsets) {
2823
2850
  const isArray2 = classProperty.array;
@@ -2827,52 +2854,42 @@
2827
2854
  let valuesData;
2828
2855
  if (classProperty.componentType) {
2829
2856
  valuesData = convertRawBufferToMetadataArray(valuesDataBytes, classProperty.type, classProperty.componentType, elementCount);
2857
+ if (!valuesData) {
2858
+ valuesData = valuesDataBytes;
2859
+ }
2830
2860
  } else {
2831
2861
  valuesData = valuesDataBytes;
2832
2862
  }
2833
2863
  if (isArray2) {
2834
2864
  if (arrayOffsets) {
2835
- return handleVariableLengthArrayNumeric(valuesData, numberOfElements, arrayOffsets, valuesDataBytes.length, elementSize);
2865
+ return parseVariableLengthArrayNumeric(valuesData, numberOfElements, arrayOffsets, valuesDataBytes.length, elementSize);
2836
2866
  }
2837
2867
  if (arrayCount) {
2838
- return handleFixedLengthArrayNumeric(valuesData, numberOfElements, arrayCount);
2868
+ return parseFixedLengthArrayNumeric(valuesData, numberOfElements, arrayCount);
2839
2869
  }
2840
2870
  return [];
2841
2871
  }
2842
- const attributeValueArray = [];
2843
- for (let index = 0; index < numberOfElements; index++) {
2844
- const value = valuesData[index];
2845
- attributeValueArray.push(value);
2846
- }
2847
- return attributeValueArray;
2872
+ return valuesData;
2848
2873
  }
2849
- function handleVariableLengthArrayNumeric(valuesData, numberOfElements, arrayOffsets, valuesDataBytesLength, elementSize) {
2874
+ function parseVariableLengthArrayNumeric(valuesData, numberOfElements, arrayOffsets, valuesDataBytesLength, valueSize) {
2850
2875
  const attributeValueArray = [];
2851
2876
  for (let index = 0; index < numberOfElements; index++) {
2852
- const array = [];
2853
2877
  const arrayOffset = arrayOffsets[index];
2854
2878
  const arrayByteSize = arrayOffsets[index + 1] - arrayOffsets[index];
2855
- if (arrayByteSize + arrayOffset <= valuesDataBytesLength) {
2856
- const typedArrayOffset = arrayOffset / elementSize;
2857
- const elementCount = arrayByteSize / elementSize;
2858
- for (let i2 = 0; i2 < elementCount; i2++) {
2859
- const value = valuesData[typedArrayOffset + i2];
2860
- array.push(value);
2861
- }
2879
+ if (arrayByteSize + arrayOffset > valuesDataBytesLength) {
2880
+ break;
2862
2881
  }
2863
- attributeValueArray.push(array);
2882
+ const typedArrayOffset = arrayOffset / valueSize;
2883
+ const elementCount = arrayByteSize / valueSize;
2884
+ attributeValueArray.push(valuesData.slice(typedArrayOffset, typedArrayOffset + elementCount));
2864
2885
  }
2865
2886
  return attributeValueArray;
2866
2887
  }
2867
- function handleFixedLengthArrayNumeric(valuesData, numberOfElements, arrayCount) {
2888
+ function parseFixedLengthArrayNumeric(valuesData, numberOfElements, arrayCount) {
2868
2889
  const attributeValueArray = [];
2869
2890
  for (let index = 0; index < numberOfElements; index++) {
2870
- const array = [];
2871
- for (let i2 = 0; i2 < arrayCount; i2++) {
2872
- const value = valuesData[i2];
2873
- array.push(value);
2874
- }
2875
- attributeValueArray.push(array);
2891
+ const elementOffset = index * arrayCount;
2892
+ attributeValueArray.push(valuesData.slice(elementOffset, elementOffset + arrayCount));
2876
2893
  }
2877
2894
  return attributeValueArray;
2878
2895
  }
@@ -2898,9 +2915,6 @@
2898
2915
  return [];
2899
2916
  }
2900
2917
  function getPropertyDataENUM(schema, classProperty, numberOfElements, valuesDataBytes, arrayOffsets) {
2901
- const data = [];
2902
- const isArray2 = classProperty.array;
2903
- const arrayCount = classProperty.count;
2904
2918
  const enumType = classProperty.enumType;
2905
2919
  if (!enumType) {
2906
2920
  throw new Error("Incorrect data in the EXT_structural_metadata extension: classProperty.enumType is not set for type ENUM");
@@ -2912,69 +2926,77 @@
2912
2926
  const enumValueType = enumEntry.valueType || "UINT16";
2913
2927
  const elementSize = getArrayElementByteSize(classProperty.type, enumValueType);
2914
2928
  const elementCount = valuesDataBytes.byteLength / elementSize;
2915
- const valuesData = convertRawBufferToMetadataArray(valuesDataBytes, classProperty.type, enumValueType, elementCount);
2916
- if (isArray2) {
2929
+ let valuesData = convertRawBufferToMetadataArray(valuesDataBytes, classProperty.type, enumValueType, elementCount);
2930
+ if (!valuesData) {
2931
+ valuesData = valuesDataBytes;
2932
+ }
2933
+ if (classProperty.array) {
2917
2934
  if (arrayOffsets) {
2918
- return handleVariableLengthArrayENUM(valuesData, numberOfElements, arrayOffsets, valuesDataBytes.length, elementSize, enumEntry);
2935
+ return parseVariableLengthArrayENUM({
2936
+ valuesData,
2937
+ numberOfElements,
2938
+ arrayOffsets,
2939
+ valuesDataBytesLength: valuesDataBytes.length,
2940
+ elementSize,
2941
+ enumEntry
2942
+ });
2919
2943
  }
2944
+ const arrayCount = classProperty.count;
2920
2945
  if (arrayCount) {
2921
- return handleFixedLengthArrayENUM(valuesData, numberOfElements, arrayCount, enumEntry);
2946
+ return parseFixedLengthArrayENUM(valuesData, numberOfElements, arrayCount, enumEntry);
2922
2947
  }
2923
2948
  return [];
2924
2949
  }
2925
- for (let index = 0; index < numberOfElements; index++) {
2926
- const enumValue = valuesData[index];
2927
- const enumObject = getEnumByValue(enumEntry, enumValue);
2928
- if (enumObject) {
2929
- data.push(enumObject.name);
2930
- }
2931
- }
2932
- return data;
2933
- }
2934
- function handleVariableLengthArrayENUM(valuesData, numberOfElements, arrayOffsets, valuesDataBytesLength, elementSize, enumEntry) {
2950
+ return getEnumsArray(valuesData, 0, numberOfElements, enumEntry);
2951
+ }
2952
+ function parseVariableLengthArrayENUM(params) {
2953
+ const {
2954
+ valuesData,
2955
+ numberOfElements,
2956
+ arrayOffsets,
2957
+ valuesDataBytesLength,
2958
+ elementSize,
2959
+ enumEntry
2960
+ } = params;
2935
2961
  const attributeValueArray = [];
2936
2962
  for (let index = 0; index < numberOfElements; index++) {
2937
- const array = [];
2938
2963
  const arrayOffset = arrayOffsets[index];
2939
2964
  const arrayByteSize = arrayOffsets[index + 1] - arrayOffsets[index];
2940
- if (arrayByteSize + arrayOffset <= valuesDataBytesLength) {
2941
- const typedArrayOffset = arrayOffset / elementSize;
2942
- const elementCount = arrayByteSize / elementSize;
2943
- for (let i2 = 0; i2 < elementCount; i2++) {
2944
- const value = valuesData[typedArrayOffset + i2];
2945
- const enumObject = getEnumByValue(enumEntry, value);
2946
- if (enumObject) {
2947
- array.push(enumObject.name);
2948
- }
2949
- }
2965
+ if (arrayByteSize + arrayOffset > valuesDataBytesLength) {
2966
+ break;
2950
2967
  }
2968
+ const typedArrayOffset = arrayOffset / elementSize;
2969
+ const elementCount = arrayByteSize / elementSize;
2970
+ const array = getEnumsArray(valuesData, typedArrayOffset, elementCount, enumEntry);
2951
2971
  attributeValueArray.push(array);
2952
2972
  }
2953
2973
  return attributeValueArray;
2954
2974
  }
2955
- function handleFixedLengthArrayENUM(valuesData, numberOfElements, arrayCount, enumEntry) {
2975
+ function parseFixedLengthArrayENUM(valuesData, numberOfElements, arrayCount, enumEntry) {
2956
2976
  const attributeValueArray = [];
2957
2977
  for (let index = 0; index < numberOfElements; index++) {
2958
- const array = [];
2959
- for (let i2 = 0; i2 < arrayCount; i2++) {
2960
- const value = valuesData[i2];
2961
- const enumObject = getEnumByValue(enumEntry, value);
2962
- if (enumObject) {
2963
- array.push(enumObject.name);
2964
- }
2965
- }
2978
+ const elementOffset = arrayCount * index;
2979
+ const array = getEnumsArray(valuesData, elementOffset, arrayCount, enumEntry);
2966
2980
  attributeValueArray.push(array);
2967
2981
  }
2968
2982
  return attributeValueArray;
2969
2983
  }
2970
- function findPropertyTableByClass(propertyTables, schemaClassName) {
2971
- for (let i2 = 0, len = propertyTables.length; i2 < len; i2++) {
2972
- const propertyTable = propertyTables[i2];
2973
- if (propertyTable.class === schemaClassName) {
2974
- return propertyTable;
2984
+ function getEnumsArray(valuesData, offset, count, enumEntry) {
2985
+ const array = [];
2986
+ for (let i2 = 0; i2 < count; i2++) {
2987
+ if (valuesData instanceof BigInt64Array || valuesData instanceof BigUint64Array) {
2988
+ array.push("");
2989
+ } else {
2990
+ const value = valuesData[offset + i2];
2991
+ const enumObject = getEnumByValue(enumEntry, value);
2992
+ if (enumObject) {
2993
+ array.push(enumObject.name);
2994
+ } else {
2995
+ array.push("");
2996
+ }
2975
2997
  }
2976
2998
  }
2977
- return null;
2999
+ return array;
2978
3000
  }
2979
3001
  function getEnumByValue(enumEntry, value) {
2980
3002
  for (const enumValue of enumEntry.values) {
@@ -2988,7 +3010,7 @@
2988
3010
  var init_EXT_structural_metadata = __esm({
2989
3011
  "src/lib/extensions/EXT_structural_metadata.ts"() {
2990
3012
  init_gltf_scenegraph();
2991
- init_data_processing();
3013
+ init_d_tiles_utils();
2992
3014
  EXT_STRUCTURAL_METADATA_NAME = "EXT_structural_metadata";
2993
3015
  name = EXT_STRUCTURAL_METADATA_NAME;
2994
3016
  }
@@ -3053,7 +3075,7 @@
3053
3075
  var init_EXT_mesh_features = __esm({
3054
3076
  "src/lib/extensions/EXT_mesh_features.ts"() {
3055
3077
  init_gltf_scenegraph();
3056
- init_data_processing();
3078
+ init_d_tiles_utils();
3057
3079
  init_EXT_structural_metadata();
3058
3080
  EXT_MESH_FEATURES_NAME = "EXT_mesh_features";
3059
3081
  name2 = EXT_MESH_FEATURES_NAME;
@@ -3120,16 +3142,43 @@
3120
3142
  function getPropertyDataFromBinarySource2(scenegraph, schemaProperty, numberOfFeatures, featureTableProperty) {
3121
3143
  const bufferView = featureTableProperty.bufferView;
3122
3144
  const dataArray = scenegraph.getTypedArrayForBufferView(bufferView);
3123
- switch (schemaProperty.type) {
3124
- case "STRING": {
3125
- const stringOffsetBufferView = featureTableProperty.stringOffsetBufferView;
3126
- const offsetsData = scenegraph.getTypedArrayForBufferView(stringOffsetBufferView);
3127
- return getStringAttributes(dataArray, offsetsData, numberOfFeatures);
3145
+ if (schemaProperty.type === "STRING") {
3146
+ const offsetsData = getStringOffsets(scenegraph, featureTableProperty, numberOfFeatures);
3147
+ if (!offsetsData) {
3148
+ return [];
3128
3149
  }
3129
- default:
3150
+ return getStringAttributes(dataArray, offsetsData, numberOfFeatures);
3151
+ } else if (isNumericProperty(schemaProperty.type)) {
3152
+ return getNumericAttributes(dataArray, schemaProperty.type, numberOfFeatures);
3130
3153
  }
3131
3154
  return dataArray;
3132
3155
  }
3156
+ function isNumericProperty(schemaPropertyType) {
3157
+ return [
3158
+ "UINT8",
3159
+ "INT16",
3160
+ "UINT16",
3161
+ "INT32",
3162
+ "UINT32",
3163
+ "INT64",
3164
+ "UINT64",
3165
+ "FLOAT32",
3166
+ "FLOAT64"
3167
+ ].includes(schemaPropertyType);
3168
+ }
3169
+ function getStringOffsets(scenegraph, featureTableProperty, numberOfElements) {
3170
+ if (typeof featureTableProperty.stringOffsetBufferView !== "undefined") {
3171
+ return getOffsetsForProperty(scenegraph, featureTableProperty.stringOffsetBufferView, featureTableProperty.offsetType || "UINT32", numberOfElements);
3172
+ }
3173
+ return null;
3174
+ }
3175
+ function getNumericAttributes(valuesDataBytes, propertyType, elementCount) {
3176
+ let valuesData = convertRawBufferToMetadataArray(valuesDataBytes, "SCALAR", propertyType, elementCount);
3177
+ if (!valuesData) {
3178
+ valuesData = valuesDataBytes;
3179
+ }
3180
+ return valuesData;
3181
+ }
3133
3182
  function getPropertyDataFromTexture(scenegraph, featureTextureProperty, attributeName) {
3134
3183
  const json = scenegraph.gltf.json;
3135
3184
  if (!json.meshes) {
@@ -3247,14 +3296,10 @@
3247
3296
  function getStringAttributes(data, offsetsData, stringsCount) {
3248
3297
  const stringsArray = [];
3249
3298
  const textDecoder = new TextDecoder("utf8");
3250
- let stringOffset = 0;
3251
- const bytesPerStringSize = 4;
3252
3299
  for (let index = 0; index < stringsCount; index++) {
3253
- const stringByteSize = offsetsData[(index + 1) * bytesPerStringSize] - offsetsData[index * bytesPerStringSize];
3254
- const stringData = data.subarray(stringOffset, stringByteSize + stringOffset);
3300
+ const stringData = data.slice(offsetsData[index], offsetsData[index + 1]);
3255
3301
  const stringAttribute = textDecoder.decode(stringData);
3256
3302
  stringsArray.push(stringAttribute);
3257
- stringOffset += stringByteSize;
3258
3303
  }
3259
3304
  return stringsArray;
3260
3305
  }
@@ -3265,6 +3310,7 @@
3265
3310
  init_src3();
3266
3311
  init_gltf_utils();
3267
3312
  init_src4();
3313
+ init_d_tiles_utils();
3268
3314
  EXT_FEATURE_METADATA_NAME = "EXT_feature_metadata";
3269
3315
  name3 = EXT_FEATURE_METADATA_NAME;
3270
3316
  }
@@ -4765,7 +4811,7 @@
4765
4811
  var init_draco_module_loader = __esm({
4766
4812
  "../draco/src/lib/draco-module-loader.ts"() {
4767
4813
  init_src();
4768
- DRACO_DECODER_VERSION = "1.5.5";
4814
+ DRACO_DECODER_VERSION = "1.5.6";
4769
4815
  DRACO_ENCODER_VERSION = "1.4.1";
4770
4816
  STATIC_DECODER_URL = `https://www.gstatic.com/draco/versioned/decoders/${DRACO_DECODER_VERSION}`;
4771
4817
  DRACO_EXTERNAL_LIBRARIES = {
@@ -9,7 +9,7 @@ exports.name = void 0;
9
9
  var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
10
10
  var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
11
11
  var _gltfScenegraph = require("../api/gltf-scenegraph");
12
- var _dataProcessing = require("./data-processing");
12
+ var _dTilesUtils = require("./utils/3d-tiles-utils");
13
13
  var _EXT_structural_metadata = require("./EXT_structural_metadata");
14
14
  function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }
15
15
  function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
@@ -91,12 +91,12 @@ function processMeshPrimitiveFeatures(scenegraph, primitive, options) {
91
91
  var propertyDataTypedArray = scenegraph.getTypedArrayForAccessor(accessorIndex);
92
92
  propertyData = Array.prototype.slice.call(propertyDataTypedArray);
93
93
  } else if (typeof featureId.texture !== 'undefined' && options !== null && options !== void 0 && (_options$gltf = options.gltf) !== null && _options$gltf !== void 0 && _options$gltf.loadImages) {
94
- propertyData = (0, _dataProcessing.getPrimitiveTextureData)(scenegraph, featureId.texture, primitive);
94
+ propertyData = (0, _dTilesUtils.getPrimitiveTextureData)(scenegraph, featureId.texture, primitive);
95
95
  } else {}
96
96
  var attributeName = featureId.label || ((_propertyTable = propertyTable) === null || _propertyTable === void 0 ? void 0 : _propertyTable.name) || "featureAttribute".concat(featureIdCount);
97
97
  var featureTable = [];
98
98
  if (propertyData) {
99
- (0, _dataProcessing.primitivePropertyDataToAttributes)(scenegraph, attributeName, propertyData, featureTable, primitive);
99
+ (0, _dTilesUtils.primitivePropertyDataToAttributes)(scenegraph, attributeName, propertyData, featureTable, primitive);
100
100
  }
101
101
  extension.dataAttributeNames.push(attributeName);
102
102
  featureId.data = featureTable;
@@ -1 +1 @@
1
- {"version":3,"file":"EXT_mesh_features.js","names":["_gltfScenegraph","require","_dataProcessing","_EXT_structural_metadata","_createForOfIteratorHelper","o","allowArrayLike","it","Symbol","iterator","Array","isArray","_unsupportedIterableToArray","length","i","F","s","n","done","value","e","_e","f","TypeError","normalCompletion","didErr","err","call","step","next","_e2","return","minLen","_arrayLikeToArray","Object","prototype","toString","slice","constructor","name","from","test","arr","len","arr2","EXT_MESH_FEATURES_NAME","exports","decode","_x","_x2","_decode","apply","arguments","_asyncToGenerator2","default","_regenerator","mark","_callee","gltfData","options","scenegraph","wrap","_callee$","_context","prev","GLTFScenegraph","decodeExtMeshFeatures","stop","json","gltf","meshes","_iterator","_step","mesh","_iterator2","primitives","_step2","primitive","processMeshPrimitiveFeatures","_primitive$extensions","extension","extensions","featureIds","dataAttributeNames","featureIdCount","_iterator3","_step3","_options$gltf","_propertyTable","featureId","propertyTable","getPropertyTablePopulated","propertyData","attribute","accessorKey","concat","accessorIndex","attributes","propertyDataTypedArray","getTypedArrayForAccessor","texture","loadImages","getPrimitiveTextureData","attributeName","label","featureTable","primitivePropertyDataToAttributes","push","data"],"sources":["../../../../src/lib/extensions/EXT_mesh_features.ts"],"sourcesContent":["/* eslint-disable camelcase */\nimport type {GLTF, GLTFMeshPrimitive} from '../types/gltf-json-schema';\nimport {GLTFLoaderOptions} from '../../gltf-loader';\nimport type {\n GLTF_EXT_mesh_features,\n GLTF_EXT_mesh_features_featureId\n} from '../types/gltf-ext-mesh-features-schema';\nimport type {GLTF_EXT_structural_metadata_PropertyTable} from '../types/gltf-ext-structural-metadata-schema';\n\nimport {GLTFScenegraph} from '../api/gltf-scenegraph';\nimport {getPrimitiveTextureData, primitivePropertyDataToAttributes} from './data-processing';\nimport {getPropertyTablePopulated} from './EXT_structural_metadata';\n\nconst EXT_MESH_FEATURES_NAME = 'EXT_mesh_features';\nexport const name = EXT_MESH_FEATURES_NAME;\n\nexport async function decode(gltfData: {json: GLTF}, options: GLTFLoaderOptions): Promise<void> {\n const scenegraph = new GLTFScenegraph(gltfData);\n decodeExtMeshFeatures(scenegraph, options);\n}\n\n/**\n * Decodes feature metadata from extension\n * @param {GLTFScenegraph} scenegraph - Instance of the class for structured access to GLTF data.\n * @param {GLTFLoaderOptions} options - loader options.\n */\nfunction decodeExtMeshFeatures(scenegraph: GLTFScenegraph, options: GLTFLoaderOptions): void {\n const json = scenegraph.gltf.json;\n if (!json.meshes) {\n return;\n }\n\n // Iterate through all meshes/primitives.\n for (const mesh of json.meshes) {\n for (const primitive of mesh.primitives) {\n processMeshPrimitiveFeatures(scenegraph, primitive, options);\n }\n }\n}\n\n/**\n * Takes data from EXT_mesh_features and store it in 'data' property of featureIds.\n * If combined with EXT_structural_metadata, corresponding data are taken from the property tables of that extension.\n * @param {GLTFScenegraph} scenegraph - Instance of the class for structured access to GLTF data.\n * @param {GLTFMeshPrimitive} primitive - primitive that contains extensions.\n * @param {GLTFLoaderOptions} options - loader options.\n */\nfunction processMeshPrimitiveFeatures(\n scenegraph: GLTFScenegraph,\n primitive: GLTFMeshPrimitive,\n options: GLTFLoaderOptions\n): void {\n const extension = primitive.extensions?.[EXT_MESH_FEATURES_NAME] as GLTF_EXT_mesh_features;\n const featureIds: GLTF_EXT_mesh_features_featureId[] = extension?.featureIds;\n if (!featureIds) return;\n\n if (!extension.dataAttributeNames) {\n extension.dataAttributeNames = [];\n }\n\n let featureIdCount = 0; // It can be used to name the feature if neither label nor property table name is provided.\n for (const featureId of featureIds) {\n /*\n When combined with the EXT_structural_metadata extension, feature ID sets can be associated with property tables.\n A property table maps each feature ID to a set of values that are associated with the respective feature.\n The feature ID in this case serves as an index for the row of the table.\n The index of the property table that a certain set of feature IDs is associated with is stored in the propertyTable of the feature ID set definition.\n */\n let propertyTable: GLTF_EXT_structural_metadata_PropertyTable | null = null;\n if (typeof featureId.propertyTable === 'number') {\n propertyTable = getPropertyTablePopulated(scenegraph, featureId.propertyTable);\n }\n\n let propertyData: number[] | null = null;\n // Process \"Feature ID by Vertex\"\n if (typeof featureId.attribute !== 'undefined') {\n const accessorKey = `_FEATURE_ID_${featureId.attribute}`;\n const accessorIndex = primitive.attributes[accessorKey];\n const propertyDataTypedArray = scenegraph.getTypedArrayForAccessor(accessorIndex);\n propertyData = Array.prototype.slice.call(propertyDataTypedArray);\n }\n\n // Process \"Feature ID by Texture Coordinates\"\n else if (typeof featureId.texture !== 'undefined' && options?.gltf?.loadImages) {\n propertyData = getPrimitiveTextureData(scenegraph, featureId.texture, primitive);\n }\n\n // Process \"Feature ID by Index\"\n else {\n /*\n When both featureId.attribute and featureId.texture are undefined,\n then the feature ID value for each vertex is given implicitly, via the index of the vertex.\n In this case, the featureCount must match the number of vertices of the mesh primitive.\n */\n // TODO: At the moment of writing we don't have a tileset with the data of that kind. Implement it later.\n }\n\n const attributeName =\n featureId.label || propertyTable?.name || `featureAttribute${featureIdCount}`;\n\n // featureTable - an array where unique data from the property data are being stored\n const featureTable: number[] = [];\n if (propertyData) {\n primitivePropertyDataToAttributes(\n scenegraph,\n attributeName,\n propertyData,\n featureTable,\n primitive\n );\n }\n extension.dataAttributeNames.push(attributeName);\n featureId.data = featureTable;\n\n featureIdCount++;\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"EXT_mesh_features.js","names":["_gltfScenegraph","require","_dTilesUtils","_EXT_structural_metadata","_createForOfIteratorHelper","o","allowArrayLike","it","Symbol","iterator","Array","isArray","_unsupportedIterableToArray","length","i","F","s","n","done","value","e","_e","f","TypeError","normalCompletion","didErr","err","call","step","next","_e2","return","minLen","_arrayLikeToArray","Object","prototype","toString","slice","constructor","name","from","test","arr","len","arr2","EXT_MESH_FEATURES_NAME","exports","decode","_x","_x2","_decode","apply","arguments","_asyncToGenerator2","default","_regenerator","mark","_callee","gltfData","options","scenegraph","wrap","_callee$","_context","prev","GLTFScenegraph","decodeExtMeshFeatures","stop","json","gltf","meshes","_iterator","_step","mesh","_iterator2","primitives","_step2","primitive","processMeshPrimitiveFeatures","_primitive$extensions","extension","extensions","featureIds","dataAttributeNames","featureIdCount","_iterator3","_step3","_options$gltf","_propertyTable","featureId","propertyTable","getPropertyTablePopulated","propertyData","attribute","accessorKey","concat","accessorIndex","attributes","propertyDataTypedArray","getTypedArrayForAccessor","texture","loadImages","getPrimitiveTextureData","attributeName","label","featureTable","primitivePropertyDataToAttributes","push","data"],"sources":["../../../../src/lib/extensions/EXT_mesh_features.ts"],"sourcesContent":["/* eslint-disable camelcase */\nimport type {GLTF, GLTFMeshPrimitive} from '../types/gltf-json-schema';\nimport {GLTFLoaderOptions} from '../../gltf-loader';\nimport type {\n GLTF_EXT_mesh_features,\n GLTF_EXT_mesh_features_featureId\n} from '../types/gltf-ext-mesh-features-schema';\nimport type {GLTF_EXT_structural_metadata_PropertyTable} from '../types/gltf-ext-structural-metadata-schema';\n\nimport {GLTFScenegraph} from '../api/gltf-scenegraph';\nimport {getPrimitiveTextureData, primitivePropertyDataToAttributes} from './utils/3d-tiles-utils';\nimport {getPropertyTablePopulated} from './EXT_structural_metadata';\n\nconst EXT_MESH_FEATURES_NAME = 'EXT_mesh_features';\nexport const name = EXT_MESH_FEATURES_NAME;\n\nexport async function decode(gltfData: {json: GLTF}, options: GLTFLoaderOptions): Promise<void> {\n const scenegraph = new GLTFScenegraph(gltfData);\n decodeExtMeshFeatures(scenegraph, options);\n}\n\n/**\n * Decodes feature metadata from extension\n * @param {GLTFScenegraph} scenegraph - Instance of the class for structured access to GLTF data.\n * @param {GLTFLoaderOptions} options - loader options.\n */\nfunction decodeExtMeshFeatures(scenegraph: GLTFScenegraph, options: GLTFLoaderOptions): void {\n const json = scenegraph.gltf.json;\n if (!json.meshes) {\n return;\n }\n\n // Iterate through all meshes/primitives.\n for (const mesh of json.meshes) {\n for (const primitive of mesh.primitives) {\n processMeshPrimitiveFeatures(scenegraph, primitive, options);\n }\n }\n}\n\n/**\n * Takes data from EXT_mesh_features and store it in 'data' property of featureIds.\n * If combined with EXT_structural_metadata, corresponding data are taken from the property tables of that extension.\n * @param {GLTFScenegraph} scenegraph - Instance of the class for structured access to GLTF data.\n * @param {GLTFMeshPrimitive} primitive - primitive that contains extensions.\n * @param {GLTFLoaderOptions} options - loader options.\n */\nfunction processMeshPrimitiveFeatures(\n scenegraph: GLTFScenegraph,\n primitive: GLTFMeshPrimitive,\n options: GLTFLoaderOptions\n): void {\n const extension = primitive.extensions?.[EXT_MESH_FEATURES_NAME] as GLTF_EXT_mesh_features;\n const featureIds: GLTF_EXT_mesh_features_featureId[] = extension?.featureIds;\n if (!featureIds) return;\n\n if (!extension.dataAttributeNames) {\n extension.dataAttributeNames = [];\n }\n\n let featureIdCount = 0; // It can be used to name the feature if neither label nor property table name is provided.\n for (const featureId of featureIds) {\n /*\n When combined with the EXT_structural_metadata extension, feature ID sets can be associated with property tables.\n A property table maps each feature ID to a set of values that are associated with the respective feature.\n The feature ID in this case serves as an index for the row of the table.\n The index of the property table that a certain set of feature IDs is associated with is stored in the propertyTable of the feature ID set definition.\n */\n let propertyTable: GLTF_EXT_structural_metadata_PropertyTable | null = null;\n if (typeof featureId.propertyTable === 'number') {\n propertyTable = getPropertyTablePopulated(scenegraph, featureId.propertyTable);\n }\n\n let propertyData: number[] | null = null;\n // Process \"Feature ID by Vertex\"\n if (typeof featureId.attribute !== 'undefined') {\n const accessorKey = `_FEATURE_ID_${featureId.attribute}`;\n const accessorIndex = primitive.attributes[accessorKey];\n const propertyDataTypedArray = scenegraph.getTypedArrayForAccessor(accessorIndex);\n propertyData = Array.prototype.slice.call(propertyDataTypedArray);\n }\n\n // Process \"Feature ID by Texture Coordinates\"\n else if (typeof featureId.texture !== 'undefined' && options?.gltf?.loadImages) {\n propertyData = getPrimitiveTextureData(scenegraph, featureId.texture, primitive);\n }\n\n // Process \"Feature ID by Index\"\n else {\n /*\n When both featureId.attribute and featureId.texture are undefined,\n then the feature ID value for each vertex is given implicitly, via the index of the vertex.\n In this case, the featureCount must match the number of vertices of the mesh primitive.\n */\n // TODO: At the moment of writing we don't have a tileset with the data of that kind. Implement it later.\n }\n\n const attributeName =\n featureId.label || propertyTable?.name || `featureAttribute${featureIdCount}`;\n\n // featureTable - an array where unique data from the property data are being stored\n const featureTable: number[] = [];\n if (propertyData) {\n primitivePropertyDataToAttributes(\n scenegraph,\n attributeName,\n propertyData,\n featureTable,\n primitive\n );\n }\n extension.dataAttributeNames.push(attributeName);\n featureId.data = featureTable;\n\n featureIdCount++;\n }\n}\n"],"mappings":"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"}