@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.
- package/dist/dist.min.js +148 -102
- package/dist/es5/lib/extensions/EXT_mesh_features.js +3 -3
- package/dist/es5/lib/extensions/EXT_mesh_features.js.map +1 -1
- package/dist/es5/lib/extensions/EXT_structural_metadata.js +88 -86
- package/dist/es5/lib/extensions/EXT_structural_metadata.js.map +1 -1
- package/dist/es5/lib/extensions/deprecated/EXT_feature_metadata.js +26 -13
- package/dist/es5/lib/extensions/deprecated/EXT_feature_metadata.js.map +1 -1
- package/dist/es5/lib/extensions/{data-processing.js → utils/3d-tiles-utils.js} +25 -6
- package/dist/es5/lib/extensions/utils/3d-tiles-utils.js.map +1 -0
- package/dist/es5/lib/types/gltf-ext-structural-metadata-schema.js.map +1 -1
- package/dist/es5/lib/types/gltf-json-schema.js.map +1 -1
- package/dist/es5/lib/utils/version.js +1 -1
- package/dist/esm/lib/extensions/EXT_mesh_features.js +1 -1
- package/dist/esm/lib/extensions/EXT_mesh_features.js.map +1 -1
- package/dist/esm/lib/extensions/EXT_structural_metadata.js +85 -81
- package/dist/esm/lib/extensions/EXT_structural_metadata.js.map +1 -1
- package/dist/esm/lib/extensions/deprecated/EXT_feature_metadata.js +26 -13
- package/dist/esm/lib/extensions/deprecated/EXT_feature_metadata.js.map +1 -1
- package/dist/esm/lib/extensions/{data-processing.js → utils/3d-tiles-utils.js} +24 -6
- package/dist/esm/lib/extensions/utils/3d-tiles-utils.js.map +1 -0
- package/dist/esm/lib/types/gltf-ext-structural-metadata-schema.js.map +1 -1
- package/dist/esm/lib/types/gltf-json-schema.js.map +1 -1
- package/dist/esm/lib/utils/version.js +1 -1
- package/dist/lib/extensions/EXT_structural_metadata.d.ts +3 -3
- package/dist/lib/extensions/EXT_structural_metadata.d.ts.map +1 -1
- package/dist/lib/extensions/deprecated/EXT_feature_metadata.d.ts.map +1 -1
- package/dist/lib/extensions/utils/3d-tiles-utils.d.ts +52 -0
- package/dist/lib/extensions/utils/3d-tiles-utils.d.ts.map +1 -0
- package/dist/lib/types/gltf-ext-structural-metadata-schema.d.ts +4 -4
- package/dist/lib/types/gltf-ext-structural-metadata-schema.d.ts.map +1 -1
- package/dist/lib/types/gltf-json-schema.d.ts +1 -1
- package/dist/lib/types/gltf-json-schema.d.ts.map +1 -1
- package/package.json +6 -6
- package/src/lib/extensions/EXT_mesh_features.ts +1 -1
- package/src/lib/extensions/EXT_structural_metadata.ts +267 -200
- package/src/lib/extensions/deprecated/EXT_feature_metadata.ts +123 -19
- package/src/lib/extensions/{data-processing.ts → utils/3d-tiles-utils.ts} +95 -34
- package/src/lib/types/gltf-ext-structural-metadata-schema.ts +6 -4
- package/src/lib/types/gltf-json-schema.ts +1 -1
- package/dist/bundle.js +0 -5
- package/dist/es5/lib/extensions/data-processing.js.map +0 -1
- package/dist/esm/lib/extensions/data-processing.js.map +0 -1
- package/dist/glb-loader.js +0 -34
- package/dist/glb-writer.js +0 -35
- package/dist/gltf-loader.js +0 -50
- package/dist/gltf-writer.js +0 -32
- package/dist/index.js +0 -34
- package/dist/lib/api/gltf-extensions.js +0 -88
- package/dist/lib/api/gltf-scenegraph.js +0 -580
- package/dist/lib/api/normalize-gltf-v1.js +0 -299
- package/dist/lib/api/post-process-gltf.js +0 -433
- package/dist/lib/encoders/encode-glb.js +0 -72
- package/dist/lib/encoders/encode-gltf.js +0 -32
- package/dist/lib/extensions/EXT_mesh_features.js +0 -89
- package/dist/lib/extensions/EXT_meshopt_compression.js +0 -41
- package/dist/lib/extensions/EXT_structural_metadata.js +0 -504
- package/dist/lib/extensions/EXT_texture_webp.js +0 -36
- package/dist/lib/extensions/KHR_binary_gltf.js +0 -39
- package/dist/lib/extensions/KHR_draco_mesh_compression.js +0 -137
- package/dist/lib/extensions/KHR_texture_basisu.js +0 -29
- package/dist/lib/extensions/KHR_texture_transform.js +0 -227
- package/dist/lib/extensions/data-processing.d.ts +0 -34
- package/dist/lib/extensions/data-processing.d.ts.map +0 -1
- package/dist/lib/extensions/data-processing.js +0 -212
- package/dist/lib/extensions/deprecated/EXT_feature_metadata.js +0 -282
- package/dist/lib/extensions/deprecated/KHR_lights_punctual.js +0 -59
- package/dist/lib/extensions/deprecated/KHR_materials_unlit.js +0 -44
- package/dist/lib/extensions/deprecated/KHR_techniques_webgl.js +0 -79
- package/dist/lib/gltf-utils/get-typed-array.js +0 -41
- package/dist/lib/gltf-utils/gltf-attribute-utils.js +0 -73
- package/dist/lib/gltf-utils/gltf-constants.js +0 -43
- package/dist/lib/gltf-utils/gltf-utils.js +0 -90
- package/dist/lib/gltf-utils/resolve-url.js +0 -18
- package/dist/lib/parsers/parse-glb.js +0 -166
- package/dist/lib/parsers/parse-gltf.js +0 -185
- package/dist/lib/types/glb-types.js +0 -2
- package/dist/lib/types/gltf-ext-mesh-features-schema.js +0 -2
- package/dist/lib/types/gltf-ext-structural-metadata-schema.js +0 -2
- package/dist/lib/types/gltf-json-schema.js +0 -4
- package/dist/lib/types/gltf-postprocessed-schema.js +0 -4
- package/dist/lib/types/gltf-types.js +0 -3
- package/dist/lib/utils/assert.js +0 -12
- package/dist/lib/utils/version.js +0 -7
- package/dist/meshopt/meshopt-decoder.js +0 -118
- 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/
|
|
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
|
|
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
|
|
2544
|
-
|
|
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
|
|
2633
|
-
"src/lib/extensions/
|
|
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
|
-
|
|
2782
|
-
|
|
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
|
|
2817
|
-
|
|
2818
|
-
|
|
2819
|
-
|
|
2820
|
-
return
|
|
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
|
|
2865
|
+
return parseVariableLengthArrayNumeric(valuesData, numberOfElements, arrayOffsets, valuesDataBytes.length, elementSize);
|
|
2836
2866
|
}
|
|
2837
2867
|
if (arrayCount) {
|
|
2838
|
-
return
|
|
2868
|
+
return parseFixedLengthArrayNumeric(valuesData, numberOfElements, arrayCount);
|
|
2839
2869
|
}
|
|
2840
2870
|
return [];
|
|
2841
2871
|
}
|
|
2842
|
-
|
|
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
|
|
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
|
|
2856
|
-
|
|
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
|
-
|
|
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
|
|
2888
|
+
function parseFixedLengthArrayNumeric(valuesData, numberOfElements, arrayCount) {
|
|
2868
2889
|
const attributeValueArray = [];
|
|
2869
2890
|
for (let index = 0; index < numberOfElements; index++) {
|
|
2870
|
-
const
|
|
2871
|
-
|
|
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
|
-
|
|
2916
|
-
if (
|
|
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
|
|
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
|
|
2946
|
+
return parseFixedLengthArrayENUM(valuesData, numberOfElements, arrayCount, enumEntry);
|
|
2922
2947
|
}
|
|
2923
2948
|
return [];
|
|
2924
2949
|
}
|
|
2925
|
-
|
|
2926
|
-
|
|
2927
|
-
|
|
2928
|
-
|
|
2929
|
-
|
|
2930
|
-
|
|
2931
|
-
|
|
2932
|
-
|
|
2933
|
-
|
|
2934
|
-
|
|
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
|
|
2941
|
-
|
|
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
|
|
2975
|
+
function parseFixedLengthArrayENUM(valuesData, numberOfElements, arrayCount, enumEntry) {
|
|
2956
2976
|
const attributeValueArray = [];
|
|
2957
2977
|
for (let index = 0; index < numberOfElements; index++) {
|
|
2958
|
-
const
|
|
2959
|
-
|
|
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
|
|
2971
|
-
|
|
2972
|
-
|
|
2973
|
-
if (
|
|
2974
|
-
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
3124
|
-
|
|
3125
|
-
|
|
3126
|
-
|
|
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
|
-
|
|
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
|
|
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.
|
|
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
|
|
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,
|
|
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,
|
|
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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"}
|