@loaders.gl/tile-converter 4.0.0-alpha.7 → 4.0.0-alpha.9
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/3d-tiles-attributes-worker.js +2 -2
- package/dist/3d-tiles-attributes-worker.js.map +2 -2
- package/dist/converter.min.js +67 -67
- package/dist/deps-installer/deps-installer.d.ts.map +1 -1
- package/dist/deps-installer/deps-installer.js +3 -2
- package/dist/dist.min.js +698 -340
- package/dist/es5/3d-tiles-attributes-worker.js +1 -1
- package/dist/es5/3d-tiles-converter/3d-tiles-converter.js.map +1 -1
- package/dist/es5/deps-installer/deps-installer.js +4 -3
- package/dist/es5/deps-installer/deps-installer.js.map +1 -1
- package/dist/es5/i3s-attributes-worker.js +1 -1
- package/dist/es5/i3s-converter/helpers/batch-ids-extensions.js +2 -2
- package/dist/es5/i3s-converter/helpers/batch-ids-extensions.js.map +1 -1
- package/dist/es5/i3s-converter/helpers/coordinate-converter.js +6 -7
- package/dist/es5/i3s-converter/helpers/coordinate-converter.js.map +1 -1
- package/dist/es5/i3s-converter/helpers/geometry-converter.js +25 -14
- package/dist/es5/i3s-converter/helpers/geometry-converter.js.map +1 -1
- package/dist/es5/i3s-converter/helpers/gltf-attributes.js +45 -12
- package/dist/es5/i3s-converter/helpers/gltf-attributes.js.map +1 -1
- package/dist/es5/i3s-converter/helpers/load-3d-tiles.js +82 -0
- package/dist/es5/i3s-converter/helpers/load-3d-tiles.js.map +1 -0
- package/dist/es5/i3s-converter/helpers/node-index-document.js +74 -45
- package/dist/es5/i3s-converter/helpers/node-index-document.js.map +1 -1
- package/dist/es5/i3s-converter/helpers/preprocess-3d-tiles.js +111 -0
- package/dist/es5/i3s-converter/helpers/preprocess-3d-tiles.js.map +1 -0
- package/dist/es5/i3s-converter/helpers/tileset-traversal.js +82 -0
- package/dist/es5/i3s-converter/helpers/tileset-traversal.js.map +1 -0
- package/dist/es5/i3s-converter/i3s-converter.js +545 -516
- package/dist/es5/i3s-converter/i3s-converter.js.map +1 -1
- package/dist/es5/i3s-converter/types.js +16 -0
- package/dist/es5/i3s-converter/types.js.map +1 -1
- package/dist/es5/i3s-server/README.md +19 -0
- package/dist/es5/i3s-server/app.js +10 -1
- package/dist/es5/i3s-server/app.js.map +1 -1
- package/dist/es5/i3s-server/controllers/slpk-controller.js +84 -0
- package/dist/es5/i3s-server/controllers/slpk-controller.js.map +1 -0
- package/dist/es5/i3s-server/routes/slpk-router.js +71 -0
- package/dist/es5/i3s-server/routes/slpk-router.js.map +1 -0
- package/dist/es5/i3s-server/utils/create-scene-server.js +17 -0
- package/dist/es5/i3s-server/utils/create-scene-server.js.map +1 -0
- package/dist/es5/lib/utils/file-utils.js +1 -1
- package/dist/es5/lib/utils/file-utils.js.map +1 -1
- package/dist/es5/lib/utils/lod-conversion-utils.js.map +1 -1
- package/dist/es5/pgm-loader.js +1 -1
- package/dist/esm/3d-tiles-attributes-worker.js +1 -1
- package/dist/esm/3d-tiles-converter/3d-tiles-converter.js.map +1 -1
- package/dist/esm/deps-installer/deps-installer.js +4 -3
- package/dist/esm/deps-installer/deps-installer.js.map +1 -1
- package/dist/esm/i3s-attributes-worker.js +1 -1
- package/dist/esm/i3s-converter/helpers/batch-ids-extensions.js +2 -2
- package/dist/esm/i3s-converter/helpers/batch-ids-extensions.js.map +1 -1
- package/dist/esm/i3s-converter/helpers/coordinate-converter.js +6 -7
- package/dist/esm/i3s-converter/helpers/coordinate-converter.js.map +1 -1
- package/dist/esm/i3s-converter/helpers/geometry-converter.js +19 -8
- package/dist/esm/i3s-converter/helpers/geometry-converter.js.map +1 -1
- package/dist/esm/i3s-converter/helpers/gltf-attributes.js +49 -12
- package/dist/esm/i3s-converter/helpers/gltf-attributes.js.map +1 -1
- package/dist/esm/i3s-converter/helpers/load-3d-tiles.js +35 -0
- package/dist/esm/i3s-converter/helpers/load-3d-tiles.js.map +1 -0
- package/dist/esm/i3s-converter/helpers/node-index-document.js +14 -1
- package/dist/esm/i3s-converter/helpers/node-index-document.js.map +1 -1
- package/dist/esm/i3s-converter/helpers/preprocess-3d-tiles.js +48 -0
- package/dist/esm/i3s-converter/helpers/preprocess-3d-tiles.js.map +1 -0
- package/dist/esm/i3s-converter/helpers/tileset-traversal.js +14 -0
- package/dist/esm/i3s-converter/helpers/tileset-traversal.js.map +1 -0
- package/dist/esm/i3s-converter/i3s-converter.js +134 -120
- package/dist/esm/i3s-converter/i3s-converter.js.map +1 -1
- package/dist/esm/i3s-converter/types.js +10 -1
- package/dist/esm/i3s-converter/types.js.map +1 -1
- package/dist/esm/i3s-server/README.md +19 -0
- package/dist/esm/i3s-server/app.js +11 -1
- package/dist/esm/i3s-server/app.js.map +1 -1
- package/dist/esm/i3s-server/controllers/slpk-controller.js +36 -0
- package/dist/esm/i3s-server/controllers/slpk-controller.js.map +1 -0
- package/dist/esm/i3s-server/routes/slpk-router.js +33 -0
- package/dist/esm/i3s-server/routes/slpk-router.js.map +1 -0
- package/dist/esm/i3s-server/utils/create-scene-server.js +16 -0
- package/dist/esm/i3s-server/utils/create-scene-server.js.map +1 -0
- package/dist/esm/lib/utils/file-utils.js +1 -1
- package/dist/esm/lib/utils/file-utils.js.map +1 -1
- package/dist/esm/lib/utils/lod-conversion-utils.js.map +1 -1
- package/dist/esm/pgm-loader.js +1 -1
- package/dist/i3s-attributes-worker.js +2 -2
- package/dist/i3s-attributes-worker.js.map +2 -2
- package/dist/i3s-converter/helpers/batch-ids-extensions.js +2 -5
- package/dist/i3s-converter/helpers/coordinate-converter.d.ts +3 -4
- package/dist/i3s-converter/helpers/coordinate-converter.d.ts.map +1 -1
- package/dist/i3s-converter/helpers/coordinate-converter.js +8 -9
- package/dist/i3s-converter/helpers/geometry-converter.d.ts +9 -4
- package/dist/i3s-converter/helpers/geometry-converter.d.ts.map +1 -1
- package/dist/i3s-converter/helpers/geometry-converter.js +34 -12
- package/dist/i3s-converter/helpers/gltf-attributes.d.ts +22 -3
- package/dist/i3s-converter/helpers/gltf-attributes.d.ts.map +1 -1
- package/dist/i3s-converter/helpers/gltf-attributes.js +61 -18
- package/dist/i3s-converter/helpers/load-3d-tiles.d.ts +18 -0
- package/dist/i3s-converter/helpers/load-3d-tiles.d.ts.map +1 -0
- package/dist/i3s-converter/helpers/load-3d-tiles.js +53 -0
- package/dist/i3s-converter/helpers/node-index-document.d.ts +8 -0
- package/dist/i3s-converter/helpers/node-index-document.d.ts.map +1 -1
- package/dist/i3s-converter/helpers/node-index-document.js +20 -2
- package/dist/i3s-converter/helpers/node-pages.js +1 -1
- package/dist/i3s-converter/helpers/preprocess-3d-tiles.d.ts +23 -0
- package/dist/i3s-converter/helpers/preprocess-3d-tiles.d.ts.map +1 -0
- package/dist/i3s-converter/helpers/preprocess-3d-tiles.js +76 -0
- package/dist/i3s-converter/helpers/tileset-traversal.d.ts +25 -0
- package/dist/i3s-converter/helpers/tileset-traversal.d.ts.map +1 -0
- package/dist/i3s-converter/helpers/tileset-traversal.js +29 -0
- package/dist/i3s-converter/i3s-converter.d.ts +40 -40
- package/dist/i3s-converter/i3s-converter.d.ts.map +1 -1
- package/dist/i3s-converter/i3s-converter.js +150 -126
- package/dist/i3s-converter/types.d.ts +18 -0
- package/dist/i3s-converter/types.d.ts.map +1 -1
- package/dist/i3s-converter/types.js +15 -0
- package/dist/i3s-server/app.d.ts.map +1 -1
- package/dist/i3s-server/app.js +9 -1
- package/dist/i3s-server/controllers/slpk-controller.d.ts +3 -0
- package/dist/i3s-server/controllers/slpk-controller.d.ts.map +1 -0
- package/dist/i3s-server/controllers/slpk-controller.js +32 -0
- package/dist/i3s-server/routes/slpk-router.d.ts +3 -0
- package/dist/i3s-server/routes/slpk-router.d.ts.map +1 -0
- package/dist/i3s-server/routes/slpk-router.js +33 -0
- package/dist/i3s-server/utils/create-scene-server.d.ts +11 -0
- package/dist/i3s-server/utils/create-scene-server.d.ts.map +1 -0
- package/dist/i3s-server/utils/create-scene-server.js +14 -0
- package/dist/lib/utils/file-utils.d.ts.map +1 -1
- package/dist/lib/utils/file-utils.js +2 -1
- package/dist/lib/utils/lod-conversion-utils.d.ts +3 -2
- package/dist/lib/utils/lod-conversion-utils.d.ts.map +1 -1
- package/dist/lib/utils/lod-conversion-utils.js +1 -1
- package/package.json +15 -15
- package/src/3d-tiles-converter/3d-tiles-converter.ts +5 -5
- package/src/deps-installer/deps-installer.ts +3 -2
- package/src/i3s-converter/helpers/batch-ids-extensions.ts +2 -5
- package/src/i3s-converter/helpers/coordinate-converter.ts +11 -10
- package/src/i3s-converter/helpers/geometry-converter.ts +51 -19
- package/src/i3s-converter/helpers/gltf-attributes.ts +84 -21
- package/src/i3s-converter/helpers/load-3d-tiles.ts +68 -0
- package/src/i3s-converter/helpers/node-index-document.ts +22 -2
- package/src/i3s-converter/helpers/preprocess-3d-tiles.ts +81 -0
- package/src/i3s-converter/helpers/tileset-traversal.ts +51 -0
- package/src/i3s-converter/i3s-converter.ts +228 -178
- package/src/i3s-converter/types.ts +20 -0
- package/src/i3s-server/README.md +19 -0
- package/src/i3s-server/app.js +8 -1
- package/src/i3s-server/controllers/slpk-controller.js +38 -0
- package/src/i3s-server/routes/slpk-router.js +33 -0
- package/src/i3s-server/utils/create-scene-server.js +15 -0
- package/src/lib/utils/file-utils.ts +2 -1
- package/src/lib/utils/lod-conversion-utils.ts +6 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"batch-ids-extensions.js","names":["EXT_MESH_FEATURES","EXT_FEATURE_METADATA","handleBatchIdsExtensions","attributes","primitive","images","extensions","extensionName","extensionData","Object","entries","handleExtFeatureMetadataExtension","console","warn","extFeatureMetadata","_extFeatureMetadata$f","_featureIdAttribute$f","_featureIdAttribute$f2","_featureIdAttribute$f3","featureIdAttribute","featureIdAttributes","featureIds","attribute","batchIdsAttribute","value","hasOwnProperty","_attributes$POSITIONS","featuresCount","POSITIONS","length","generateImplicitFeatureIds","constant","divisor","featureIdTexture","featureIdTextures","_featureIdTexture$fea","_featureIdTexture$fea2","textureAttributeIndex","texture","texCoord","textCoordAttribute","concat","textureCoordinates","generateBatchIdsFromTexture","featureTexture","featureTextures","arguments","undefined","currentValue","devisorCounter","index","push","Array","fill","_featureIdTexture$fea3","_featureIdTexture$fea4","_featureIdTexture$fea5","CHANNELS_MAP","r","g","b","a","textureIndex","featureChannel","channels","image","batchIds","width","height","components","u","v","tx","Math","min","emod","ty","offset","batchId","Uint8Array","data","mimeType","n"],"sources":["../../../../src/i3s-converter/helpers/batch-ids-extensions.ts"],"sourcesContent":["import {GLTFAccessorPostprocessed, GLTFMeshPrimitivePostprocessed} from '@loaders.gl/gltf';\nimport type {NumericArray} from '@loaders.gl/loader-utils';\nimport type {\n GLTF_EXT_feature_metadata_attribute,\n GLTF_EXT_feature_metadata_primitive\n} from '@loaders.gl/gltf';\nimport {TypedArray} from '@math.gl/core';\nimport {TextureImageProperties} from '../../i3s-attributes-worker';\n\nconst EXT_MESH_FEATURES = 'EXT_mesh_features';\nconst EXT_FEATURE_METADATA = 'EXT_feature_metadata';\n\n/**\n * Getting batchIds from 3DTilesNext extensions.\n * @param attributes - gltf accessors\n * @param primitive - gltf primitive data\n * @param images - gltf texture images\n */\nexport function handleBatchIdsExtensions(\n attributes: {\n [key: string]: GLTFAccessorPostprocessed;\n },\n primitive: GLTFMeshPrimitivePostprocessed,\n images: (TextureImageProperties | null)[]\n): NumericArray {\n const extensions = primitive?.extensions;\n\n if (!extensions) {\n return [];\n }\n\n for (const [extensionName, extensionData] of Object.entries(extensions || {})) {\n switch (extensionName) {\n case EXT_FEATURE_METADATA:\n return handleExtFeatureMetadataExtension(\n attributes,\n extensionData as GLTF_EXT_feature_metadata_primitive,\n images\n );\n case EXT_MESH_FEATURES:\n console.warn('EXT_mesh_features extension is not supported yet');\n return [];\n default:\n return [];\n }\n }\n\n return [];\n}\n\n/**\n * Get batchIds from EXT_feature_metadata extension.\n * Docs - https://github.com/CesiumGS/glTF/tree/3d-tiles-next/extensions/2.0/Vendor/EXT_feature_metadata\n * @param attributes\n * @param extFeatureMetadata\n * @param textures\n */\nfunction handleExtFeatureMetadataExtension(\n attributes: {\n [key: string]: GLTFAccessorPostprocessed;\n },\n extFeatureMetadata: GLTF_EXT_feature_metadata_primitive,\n images: (TextureImageProperties | null)[]\n): NumericArray {\n // Take only first extension object to get batchIds attribute name.\n const featureIdAttribute = extFeatureMetadata?.featureIdAttributes?.[0];\n\n if (featureIdAttribute?.featureIds?.attribute) {\n const batchIdsAttribute = attributes[featureIdAttribute.featureIds.attribute];\n return batchIdsAttribute.value;\n }\n\n if (\n featureIdAttribute?.featureIds?.hasOwnProperty('constant') &&\n featureIdAttribute?.featureIds?.hasOwnProperty('divisor')\n ) {\n const featuresCount = attributes?.POSITIONS?.value.length / 3 || 0;\n return generateImplicitFeatureIds(\n featuresCount,\n featureIdAttribute.featureIds.constant,\n featureIdAttribute.featureIds.divisor\n );\n }\n\n // Take only first extension object to get batchIds attribute name.\n const featureIdTexture =\n extFeatureMetadata?.featureIdTextures && extFeatureMetadata?.featureIdTextures[0];\n\n if (featureIdTexture) {\n const textureAttributeIndex = featureIdTexture?.featureIds?.texture?.texCoord || 0;\n const textCoordAttribute = `TEXCOORD_${textureAttributeIndex}`;\n const textureCoordinates = attributes[textCoordAttribute].value;\n return generateBatchIdsFromTexture(featureIdTexture, textureCoordinates, images);\n }\n\n // Take only first extension texture to get batchIds from the root EXT_feature_metadata object.\n const featureTexture =\n extFeatureMetadata?.featureTextures && extFeatureMetadata?.featureTextures[0];\n\n /**\n * TODO need to get batchIds from root extension\n */\n if (featureTexture) {\n console.warn(\"EXT_feature_metadata doesn't yet support featureTextures in primitive\");\n return [];\n }\n\n return [];\n}\n\n/**\n * Generates implicit feature ids\n * Spec - https://github.com/CesiumGS/glTF/tree/3d-tiles-next/extensions/2.0/Vendor/EXT_feature_metadata#implicit-feature-ids\n * @param featuresCount\n * @param constant\n * @param devisor\n */\nfunction generateImplicitFeatureIds(\n featuresCount: number,\n constant: number = 0,\n divisor: number = 0\n): number[] {\n let featureIds: number[] = [];\n\n if (divisor > 0) {\n let currentValue = constant;\n let devisorCounter = divisor;\n\n for (let index = 0; index < featuresCount; index++) {\n featureIds.push(currentValue);\n\n devisorCounter -= 1;\n\n if (devisorCounter === 0) {\n currentValue++;\n devisorCounter = divisor;\n }\n }\n } else {\n featureIds = Array<number>(featuresCount).fill(constant, 0, featuresCount);\n }\n\n return featureIds;\n}\n\n/**\n * Get batchIds from texture.\n * @param primitive\n * @param featureIdTextures\n */\nfunction generateBatchIdsFromTexture(\n featureIdTexture: GLTF_EXT_feature_metadata_attribute,\n textureCoordinates: TypedArray,\n images: (TextureImageProperties | null)[]\n) {\n if (!images?.length) {\n return [];\n }\n\n const CHANNELS_MAP = {\n r: 0,\n g: 1,\n b: 2,\n a: 3\n };\n\n const textureIndex = featureIdTexture?.featureIds?.texture?.index;\n const featureChannel = featureIdTexture?.featureIds?.channels;\n\n if (!featureChannel || textureIndex === undefined) {\n return [];\n }\n\n const image = images[textureIndex];\n const batchIds: number[] = [];\n const channels = CHANNELS_MAP[featureChannel];\n\n if (image && image?.width && image?.height && image?.components) {\n for (let index = 0; index < textureCoordinates.length; index += 2) {\n const u = textureCoordinates[index];\n const v = textureCoordinates[index + 1];\n\n const tx = Math.min((emod(u) * image.width) | 0, image.width - 1);\n const ty = Math.min((emod(v) * image.height) | 0, image.height - 1);\n\n const offset = (ty * image.width + tx) * image.components + channels;\n const batchId = new Uint8Array(image.data)[offset];\n\n batchIds.push(batchId);\n }\n } else {\n console.warn(`Can't get batch Ids from ${image?.mimeType || ''} compressed texture`);\n }\n\n return batchIds;\n}\n\n/**\n * Handle UVs if they are out of range [0,1].\n * @param n\n * @param m\n */\nfunction emod(n: number): number {\n return ((n % 1) + 1) % 1;\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"batch-ids-extensions.js","names":["EXT_MESH_FEATURES","EXT_FEATURE_METADATA","handleBatchIdsExtensions","attributes","primitive","images","extensions","extensionName","extensionData","Object","entries","handleExtFeatureMetadataExtension","console","warn","extFeatureMetadata","_extFeatureMetadata$f","_featureIdAttribute$f","_featureIdAttribute$f2","_featureIdAttribute$f3","featureIdAttribute","featureIdAttributes","featureIds","attribute","batchIdsAttribute","value","hasOwnProperty","_attributes$POSITIONS","featuresCount","POSITIONS","length","generateImplicitFeatureIds","constant","divisor","featureIdTexture","featureIdTextures","_featureIdTexture$fea","_featureIdTexture$fea2","textureAttributeIndex","texture","texCoord","textCoordAttribute","concat","textureCoordinates","generateBatchIdsFromTexture","featureTexture","featureTextures","arguments","undefined","currentValue","devisorCounter","index","push","Array","fill","_featureIdTexture$fea3","_featureIdTexture$fea4","_featureIdTexture$fea5","CHANNELS_MAP","r","g","b","a","textureIndex","featureChannel","channels","image","batchIds","width","height","components","u","v","tx","Math","min","emod","ty","offset","batchId","Uint8Array","data","mimeType","n"],"sources":["../../../../src/i3s-converter/helpers/batch-ids-extensions.ts"],"sourcesContent":["import {GLTFAccessorPostprocessed, GLTFMeshPrimitivePostprocessed} from '@loaders.gl/gltf';\nimport type {NumericArray} from '@loaders.gl/loader-utils';\nimport type {\n GLTF_EXT_feature_metadata_attribute,\n GLTF_EXT_feature_metadata_primitive\n} from '@loaders.gl/gltf';\nimport {TypedArray} from '@math.gl/core';\nimport {TextureImageProperties} from '../../i3s-attributes-worker';\n\nconst EXT_MESH_FEATURES = 'EXT_mesh_features';\nconst EXT_FEATURE_METADATA = 'EXT_feature_metadata';\n\n/**\n * Getting batchIds from 3DTilesNext extensions.\n * @param attributes - gltf accessors\n * @param primitive - gltf primitive data\n * @param images - gltf texture images\n */\nexport function handleBatchIdsExtensions(\n attributes: {\n [key: string]: GLTFAccessorPostprocessed;\n },\n primitive: GLTFMeshPrimitivePostprocessed,\n images: (TextureImageProperties | null)[]\n): NumericArray {\n const extensions = primitive?.extensions;\n\n if (!extensions) {\n return [];\n }\n\n for (const [extensionName, extensionData] of Object.entries(extensions || {})) {\n switch (extensionName) {\n case EXT_FEATURE_METADATA:\n return handleExtFeatureMetadataExtension(\n attributes,\n extensionData as GLTF_EXT_feature_metadata_primitive,\n images\n );\n case EXT_MESH_FEATURES:\n console.warn('EXT_mesh_features extension is not supported yet');\n return [];\n default:\n return [];\n }\n }\n\n return [];\n}\n\n/**\n * Get batchIds from EXT_feature_metadata extension.\n * Docs - https://github.com/CesiumGS/glTF/tree/3d-tiles-next/extensions/2.0/Vendor/EXT_feature_metadata\n * @param attributes\n * @param extFeatureMetadata\n * @param textures\n */\nfunction handleExtFeatureMetadataExtension(\n attributes: {\n [key: string]: GLTFAccessorPostprocessed;\n },\n extFeatureMetadata: GLTF_EXT_feature_metadata_primitive,\n images: (TextureImageProperties | null)[]\n): NumericArray {\n // Take only first extension object to get batchIds attribute name.\n const featureIdAttribute = extFeatureMetadata?.featureIdAttributes?.[0];\n\n if (featureIdAttribute?.featureIds?.attribute) {\n const batchIdsAttribute = attributes[featureIdAttribute.featureIds.attribute];\n return batchIdsAttribute.value;\n }\n\n if (\n featureIdAttribute?.featureIds?.hasOwnProperty('constant') &&\n featureIdAttribute?.featureIds?.hasOwnProperty('divisor')\n ) {\n const featuresCount = attributes?.POSITIONS?.value.length / 3 || 0;\n return generateImplicitFeatureIds(\n featuresCount,\n featureIdAttribute.featureIds.constant,\n featureIdAttribute.featureIds.divisor\n );\n }\n\n // Take only first extension object to get batchIds attribute name.\n const featureIdTexture =\n extFeatureMetadata?.featureIdTextures && extFeatureMetadata?.featureIdTextures[0];\n\n if (featureIdTexture) {\n const textureAttributeIndex = featureIdTexture?.featureIds?.texture?.texCoord || 0;\n const textCoordAttribute = `TEXCOORD_${textureAttributeIndex}`;\n const textureCoordinates = attributes[textCoordAttribute].value;\n return generateBatchIdsFromTexture(featureIdTexture, textureCoordinates, images);\n }\n\n // Take only first extension texture to get batchIds from the root EXT_feature_metadata object.\n const featureTexture =\n extFeatureMetadata?.featureTextures && extFeatureMetadata?.featureTextures[0];\n\n if (featureTexture) {\n const batchIdsAttribute = attributes[featureTexture];\n return batchIdsAttribute.value;\n }\n\n return [];\n}\n\n/**\n * Generates implicit feature ids\n * Spec - https://github.com/CesiumGS/glTF/tree/3d-tiles-next/extensions/2.0/Vendor/EXT_feature_metadata#implicit-feature-ids\n * @param featuresCount\n * @param constant\n * @param devisor\n */\nfunction generateImplicitFeatureIds(\n featuresCount: number,\n constant: number = 0,\n divisor: number = 0\n): number[] {\n let featureIds: number[] = [];\n\n if (divisor > 0) {\n let currentValue = constant;\n let devisorCounter = divisor;\n\n for (let index = 0; index < featuresCount; index++) {\n featureIds.push(currentValue);\n\n devisorCounter -= 1;\n\n if (devisorCounter === 0) {\n currentValue++;\n devisorCounter = divisor;\n }\n }\n } else {\n featureIds = Array<number>(featuresCount).fill(constant, 0, featuresCount);\n }\n\n return featureIds;\n}\n\n/**\n * Get batchIds from texture.\n * @param primitive\n * @param featureIdTextures\n */\nfunction generateBatchIdsFromTexture(\n featureIdTexture: GLTF_EXT_feature_metadata_attribute,\n textureCoordinates: TypedArray,\n images: (TextureImageProperties | null)[]\n) {\n if (!images?.length) {\n return [];\n }\n\n const CHANNELS_MAP = {\n r: 0,\n g: 1,\n b: 2,\n a: 3\n };\n\n const textureIndex = featureIdTexture?.featureIds?.texture?.index;\n const featureChannel = featureIdTexture?.featureIds?.channels;\n\n if (!featureChannel || textureIndex === undefined) {\n return [];\n }\n\n const image = images[textureIndex];\n const batchIds: number[] = [];\n const channels = CHANNELS_MAP[featureChannel];\n\n if (image && image?.width && image?.height && image?.components) {\n for (let index = 0; index < textureCoordinates.length; index += 2) {\n const u = textureCoordinates[index];\n const v = textureCoordinates[index + 1];\n\n const tx = Math.min((emod(u) * image.width) | 0, image.width - 1);\n const ty = Math.min((emod(v) * image.height) | 0, image.height - 1);\n\n const offset = (ty * image.width + tx) * image.components + channels;\n const batchId = new Uint8Array(image.data)[offset];\n\n batchIds.push(batchId);\n }\n } else {\n console.warn(`Can't get batch Ids from ${image?.mimeType || ''} compressed texture`);\n }\n\n return batchIds;\n}\n\n/**\n * Handle UVs if they are out of range [0,1].\n * @param n\n * @param m\n */\nfunction emod(n: number): number {\n return ((n % 1) + 1) % 1;\n}\n"],"mappings":"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"}
|
|
@@ -1,19 +1,18 @@
|
|
|
1
1
|
import { Matrix3, Quaternion, Vector3 } from '@math.gl/core';
|
|
2
2
|
import { Ellipsoid } from '@math.gl/geospatial';
|
|
3
3
|
import { OrientedBoundingBox, makeOrientedBoundingBoxFromPoints, makeBoundingSphereFromPoints, BoundingSphere } from '@math.gl/culling';
|
|
4
|
-
export function createBoundingVolumes(
|
|
4
|
+
export function createBoundingVolumes(sourceBoundingVolume, geoidHeightModel) {
|
|
5
5
|
let radius;
|
|
6
6
|
let halfSize;
|
|
7
7
|
let quaternion;
|
|
8
|
-
const
|
|
9
|
-
const cartographicCenter = Ellipsoid.WGS84.cartesianToCartographic(boundingVolume.center, new Vector3());
|
|
8
|
+
const cartographicCenter = Ellipsoid.WGS84.cartesianToCartographic(sourceBoundingVolume.center, new Vector3());
|
|
10
9
|
cartographicCenter[2] = cartographicCenter[2] - geoidHeightModel.getHeight(cartographicCenter[1], cartographicCenter[0]);
|
|
11
|
-
if (
|
|
12
|
-
halfSize =
|
|
10
|
+
if (sourceBoundingVolume instanceof OrientedBoundingBox) {
|
|
11
|
+
halfSize = sourceBoundingVolume.halfSize;
|
|
13
12
|
radius = new Vector3(halfSize[0], halfSize[1], halfSize[2]).len();
|
|
14
|
-
quaternion =
|
|
13
|
+
quaternion = sourceBoundingVolume.quaternion;
|
|
15
14
|
} else {
|
|
16
|
-
radius =
|
|
15
|
+
radius = sourceBoundingVolume.radius;
|
|
17
16
|
halfSize = [radius, radius, radius];
|
|
18
17
|
quaternion = new Quaternion().fromMatrix3(new Matrix3([halfSize[0], 0, 0, 0, halfSize[1], 0, 0, 0, halfSize[2]])).normalize();
|
|
19
18
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"coordinate-converter.js","names":["Matrix3","Quaternion","Vector3","Ellipsoid","OrientedBoundingBox","makeOrientedBoundingBoxFromPoints","makeBoundingSphereFromPoints","BoundingSphere","createBoundingVolumes","tile","geoidHeightModel","radius","halfSize","quaternion","boundingVolume","cartographicCenter","WGS84","cartesianToCartographic","center","getHeight","len","fromMatrix3","normalize","mbs","obb","createBoundingVolumesFromGeometry","cartesianPositions","positionVectors","convertPositionsToVectors","geometryObb","geometryMbs","mbsCenter","obbCenter","positions","result","i","length","positionVector","push","convertBoundingVolumeToI3SFullExtent","sphere","getBoundingSphere","vertexMax","vertexMin","xmin","Math","min","xmax","max","ymin","ymax","zmin","zmax","createObbFromMbs","halfAxex"],"sources":["../../../../src/i3s-converter/helpers/coordinate-converter.ts"],"sourcesContent":["import type {BoundingVolumes, FullExtent, Mbs, Obb} from '@loaders.gl/i3s';\n\nimport {Matrix3, Quaternion, Vector3} from '@math.gl/core';\nimport {Ellipsoid} from '@math.gl/geospatial';\nimport {\n OrientedBoundingBox,\n makeOrientedBoundingBoxFromPoints,\n makeBoundingSphereFromPoints,\n BoundingSphere\n} from '@math.gl/culling';\nimport {Tile3D} from '@loaders.gl/tiles';\nimport {Geoid} from '@math.gl/geoid';\n\n/**\n * Create bounding volumes object from tile and geoid height model.\n * @param tile\n * @param geoidHeightModel\n * @returns - Bounding volumes object\n */\nexport function createBoundingVolumes(tile: Tile3D, geoidHeightModel: Geoid): BoundingVolumes {\n let radius;\n let halfSize;\n let quaternion;\n\n const boundingVolume = tile.boundingVolume;\n const cartographicCenter = Ellipsoid.WGS84.cartesianToCartographic(\n boundingVolume.center,\n new Vector3()\n );\n cartographicCenter[2] =\n cartographicCenter[2] -\n geoidHeightModel.getHeight(cartographicCenter[1], cartographicCenter[0]);\n if (boundingVolume instanceof OrientedBoundingBox) {\n halfSize = boundingVolume.halfSize;\n radius = new Vector3(halfSize[0], halfSize[1], halfSize[2]).len();\n quaternion = boundingVolume.quaternion;\n } else {\n radius = tile.boundingVolume.radius;\n halfSize = [radius, radius, radius];\n quaternion = new Quaternion()\n .fromMatrix3(new Matrix3([halfSize[0], 0, 0, 0, halfSize[1], 0, 0, 0, halfSize[2]]))\n .normalize();\n }\n\n return {\n mbs: [cartographicCenter[0], cartographicCenter[1], cartographicCenter[2], radius],\n obb: {\n center: [cartographicCenter[0], cartographicCenter[1], cartographicCenter[2]],\n halfSize,\n quaternion\n }\n };\n}\n\n/**\n * Generates bounding volumes from geometry positions\n * @param cartesianPositions\n * @param geoidHeightModel\n */\nexport function createBoundingVolumesFromGeometry(\n cartesianPositions: Float32Array,\n geoidHeightModel: Geoid\n): {mbs: Mbs; obb: Obb} {\n const positionVectors = convertPositionsToVectors(cartesianPositions);\n\n const geometryObb = makeOrientedBoundingBoxFromPoints(positionVectors);\n const geometryMbs = makeBoundingSphereFromPoints(positionVectors);\n\n let mbsCenter = Ellipsoid.WGS84.cartesianToCartographic(geometryMbs.center, new Vector3());\n let obbCenter = Ellipsoid.WGS84.cartesianToCartographic(geometryObb.center, new Vector3());\n\n mbsCenter[2] = mbsCenter[2] - geoidHeightModel.getHeight(mbsCenter[1], mbsCenter[0]);\n obbCenter[2] = obbCenter[2] - geoidHeightModel.getHeight(obbCenter[1], obbCenter[0]);\n\n return {\n mbs: [mbsCenter[0], mbsCenter[1], mbsCenter[2], geometryMbs.radius],\n obb: {\n center: obbCenter,\n halfSize: geometryObb.halfSize,\n quaternion: geometryObb.quaternion\n }\n };\n}\n\n/**\n * Create array of posisitons where each vertex is vector\n * @param {array} positions\n * @returns {Vector3[]}\n */\nexport function convertPositionsToVectors(positions: Float32Array): Vector3[] {\n const result: Vector3[] = [];\n\n for (let i = 0; i < positions.length; i += 3) {\n // TODO: (perf) new Vector3 is not optimal but required in `makeOrientedBoundingBoxFromPoints`.\n // modify `makeOrientedBoundingBoxFromPoints` to use scratch vectors\n const positionVector = new Vector3([positions[i], positions[i + 1], positions[i + 2]]);\n result.push(positionVector);\n }\n\n return result;\n}\n\n/**\n * Convert common coordinate to fullExtent https://github.com/Esri/i3s-spec/blob/master/docs/1.8/fullExtent.cmn.md\n * @param\n * @param boundingVolume\n * @returns - fullExtent object\n */\nexport function convertBoundingVolumeToI3SFullExtent(\n boundingVolume: OrientedBoundingBox | BoundingSphere\n): FullExtent {\n let sphere: BoundingSphere;\n if (boundingVolume instanceof BoundingSphere) {\n sphere = boundingVolume;\n } else {\n sphere = boundingVolume.getBoundingSphere();\n }\n const center: Vector3 = sphere.center;\n const radius: number = sphere.radius;\n const vertexMax = Ellipsoid.WGS84.cartesianToCartographic(\n new Vector3(center[0] + radius, center[1] + radius, center[2] + radius),\n new Vector3()\n );\n const vertexMin = Ellipsoid.WGS84.cartesianToCartographic(\n new Vector3(center[0] - radius, center[1] - radius, center[2] - radius),\n new Vector3()\n );\n\n // Converter sometimes returns min values that are bigger then max,\n // so we should check and take bigger value from max and smaller for nim\n return {\n xmin: Math.min(vertexMin[0], vertexMax[0]),\n xmax: Math.max(vertexMin[0], vertexMax[0]),\n ymin: Math.min(vertexMin[1], vertexMax[1]),\n ymax: Math.max(vertexMin[1], vertexMax[1]),\n zmin: Math.min(vertexMin[2], vertexMax[2]),\n zmax: Math.max(vertexMin[2], vertexMax[2])\n };\n}\n\n/**\n * Creates oriented boundinb box from mbs.\n * @param mbs - Minimum Bounding Sphere\n * @returns - Oriented BOunding Box\n */\nexport function createObbFromMbs(mbs: Mbs): Obb {\n const radius = mbs[3];\n const center = new Vector3(mbs[0], mbs[1], mbs[2]);\n const halfAxex = new Matrix3([radius, 0, 0, 0, radius, 0, 0, 0, radius]);\n return new OrientedBoundingBox(center, halfAxex);\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"coordinate-converter.js","names":["Matrix3","Quaternion","Vector3","Ellipsoid","OrientedBoundingBox","makeOrientedBoundingBoxFromPoints","makeBoundingSphereFromPoints","BoundingSphere","createBoundingVolumes","sourceBoundingVolume","geoidHeightModel","radius","halfSize","quaternion","cartographicCenter","WGS84","cartesianToCartographic","center","getHeight","len","fromMatrix3","normalize","mbs","obb","createBoundingVolumesFromGeometry","cartesianPositions","positionVectors","convertPositionsToVectors","geometryObb","geometryMbs","mbsCenter","obbCenter","positions","result","i","length","positionVector","push","convertBoundingVolumeToI3SFullExtent","boundingVolume","sphere","getBoundingSphere","vertexMax","vertexMin","xmin","Math","min","xmax","max","ymin","ymax","zmin","zmax","createObbFromMbs","halfAxex"],"sources":["../../../../src/i3s-converter/helpers/coordinate-converter.ts"],"sourcesContent":["import type {BoundingVolumes, FullExtent, Mbs, Obb} from '@loaders.gl/i3s';\n\nimport {Matrix3, Quaternion, Vector3} from '@math.gl/core';\nimport {Ellipsoid} from '@math.gl/geospatial';\nimport {\n OrientedBoundingBox,\n makeOrientedBoundingBoxFromPoints,\n makeBoundingSphereFromPoints,\n BoundingSphere\n} from '@math.gl/culling';\nimport {Geoid} from '@math.gl/geoid';\n\n/**\n * Create bounding volumes object from tile and geoid height model.\n * @param sourceBoundingVolume - initialized bounding volume of the source tile\n * @param geoidHeightModel - instance of Geoid class that converts elevation from geoidal to ellipsoidal and back\n * @returns - Bounding volumes object\n */\nexport function createBoundingVolumes(\n sourceBoundingVolume: OrientedBoundingBox | BoundingSphere,\n geoidHeightModel: Geoid\n): BoundingVolumes {\n let radius;\n let halfSize;\n let quaternion;\n\n const cartographicCenter = Ellipsoid.WGS84.cartesianToCartographic(\n sourceBoundingVolume.center,\n new Vector3()\n );\n cartographicCenter[2] =\n cartographicCenter[2] -\n geoidHeightModel.getHeight(cartographicCenter[1], cartographicCenter[0]);\n if (sourceBoundingVolume instanceof OrientedBoundingBox) {\n halfSize = sourceBoundingVolume.halfSize;\n radius = new Vector3(halfSize[0], halfSize[1], halfSize[2]).len();\n quaternion = sourceBoundingVolume.quaternion;\n } else {\n radius = sourceBoundingVolume.radius;\n halfSize = [radius, radius, radius];\n quaternion = new Quaternion()\n .fromMatrix3(new Matrix3([halfSize[0], 0, 0, 0, halfSize[1], 0, 0, 0, halfSize[2]]))\n .normalize();\n }\n\n return {\n mbs: [cartographicCenter[0], cartographicCenter[1], cartographicCenter[2], radius],\n obb: {\n center: [cartographicCenter[0], cartographicCenter[1], cartographicCenter[2]],\n halfSize,\n quaternion\n }\n };\n}\n\n/**\n * Generates bounding volumes from geometry positions\n * @param cartesianPositions\n * @param geoidHeightModel\n */\nexport function createBoundingVolumesFromGeometry(\n cartesianPositions: Float32Array,\n geoidHeightModel: Geoid\n): {mbs: Mbs; obb: Obb} {\n const positionVectors = convertPositionsToVectors(cartesianPositions);\n\n const geometryObb = makeOrientedBoundingBoxFromPoints(positionVectors);\n const geometryMbs = makeBoundingSphereFromPoints(positionVectors);\n\n let mbsCenter = Ellipsoid.WGS84.cartesianToCartographic(geometryMbs.center, new Vector3());\n let obbCenter = Ellipsoid.WGS84.cartesianToCartographic(geometryObb.center, new Vector3());\n\n mbsCenter[2] = mbsCenter[2] - geoidHeightModel.getHeight(mbsCenter[1], mbsCenter[0]);\n obbCenter[2] = obbCenter[2] - geoidHeightModel.getHeight(obbCenter[1], obbCenter[0]);\n\n return {\n mbs: [mbsCenter[0], mbsCenter[1], mbsCenter[2], geometryMbs.radius],\n obb: {\n center: obbCenter,\n halfSize: geometryObb.halfSize,\n quaternion: geometryObb.quaternion\n }\n };\n}\n\n/**\n * Create array of posisitons where each vertex is vector\n * @param {array} positions\n * @returns {Vector3[]}\n */\nexport function convertPositionsToVectors(positions: Float32Array): Vector3[] {\n const result: Vector3[] = [];\n\n for (let i = 0; i < positions.length; i += 3) {\n // TODO: (perf) new Vector3 is not optimal but required in `makeOrientedBoundingBoxFromPoints`.\n // modify `makeOrientedBoundingBoxFromPoints` to use scratch vectors\n const positionVector = new Vector3([positions[i], positions[i + 1], positions[i + 2]]);\n result.push(positionVector);\n }\n\n return result;\n}\n\n/**\n * Convert common coordinate to fullExtent https://github.com/Esri/i3s-spec/blob/master/docs/1.8/fullExtent.cmn.md\n * @param\n * @param boundingVolume\n * @returns - fullExtent object\n */\nexport function convertBoundingVolumeToI3SFullExtent(\n boundingVolume: OrientedBoundingBox | BoundingSphere\n): FullExtent {\n let sphere: BoundingSphere;\n if (boundingVolume instanceof BoundingSphere) {\n sphere = boundingVolume;\n } else {\n sphere = boundingVolume.getBoundingSphere();\n }\n const center: Vector3 = sphere.center;\n const radius: number = sphere.radius;\n const vertexMax = Ellipsoid.WGS84.cartesianToCartographic(\n new Vector3(center[0] + radius, center[1] + radius, center[2] + radius),\n new Vector3()\n );\n const vertexMin = Ellipsoid.WGS84.cartesianToCartographic(\n new Vector3(center[0] - radius, center[1] - radius, center[2] - radius),\n new Vector3()\n );\n\n // Converter sometimes returns min values that are bigger then max,\n // so we should check and take bigger value from max and smaller for nim\n return {\n xmin: Math.min(vertexMin[0], vertexMax[0]),\n xmax: Math.max(vertexMin[0], vertexMax[0]),\n ymin: Math.min(vertexMin[1], vertexMax[1]),\n ymax: Math.max(vertexMin[1], vertexMax[1]),\n zmin: Math.min(vertexMin[2], vertexMax[2]),\n zmax: Math.max(vertexMin[2], vertexMax[2])\n };\n}\n\n/**\n * Creates oriented boundinb box from mbs.\n * @param mbs - Minimum Bounding Sphere\n * @returns - Oriented BOunding Box\n */\nexport function createObbFromMbs(mbs: Mbs): Obb {\n const radius = mbs[3];\n const center = new Vector3(mbs[0], mbs[1], mbs[2]);\n const halfAxex = new Matrix3([radius, 0, 0, 0, radius, 0, 0, 0, radius]);\n return new OrientedBoundingBox(center, halfAxex);\n}\n"],"mappings":"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"}
|
|
@@ -25,11 +25,11 @@ const BATCHED_ID_POSSIBLE_ATTRIBUTE_NAMES = ['CUSTOM_ATTRIBUTE_2', '_BATCHID', '
|
|
|
25
25
|
const EXT_FEATURE_METADATA = 'EXT_feature_metadata';
|
|
26
26
|
const EXT_MESH_FEATURES = 'EXT_mesh_features';
|
|
27
27
|
let scratchVector = new Vector3();
|
|
28
|
-
export default async function convertB3dmToI3sGeometry(tileContent, addNodeToNodePage, propertyTable, featuresHashArray, attributeStorageInfo, draco, generateBoundingVolumes, shouldMergeMaterials, geoidHeightModel, workerSource) {
|
|
28
|
+
export default async function convertB3dmToI3sGeometry(tileContent, tileTransform, tileBoundingVolume, addNodeToNodePage, propertyTable, featuresHashArray, attributeStorageInfo, draco, generateBoundingVolumes, shouldMergeMaterials, geoidHeightModel, workerSource) {
|
|
29
29
|
var _tileContent$gltf;
|
|
30
30
|
const useCartesianPositions = generateBoundingVolumes;
|
|
31
31
|
const materialAndTextureList = await convertMaterials((_tileContent$gltf = tileContent.gltf) === null || _tileContent$gltf === void 0 ? void 0 : _tileContent$gltf.materials, shouldMergeMaterials);
|
|
32
|
-
const dataForAttributesConversion = prepareDataForAttributesConversion(tileContent);
|
|
32
|
+
const dataForAttributesConversion = prepareDataForAttributesConversion(tileContent, tileTransform, tileBoundingVolume);
|
|
33
33
|
const convertedAttributesMap = await convertAttributes(dataForAttributesConversion, materialAndTextureList, useCartesianPositions);
|
|
34
34
|
if (generateBoundingVolumes) {
|
|
35
35
|
_generateBoundingVolumesFromGeometry(convertedAttributesMap, geoidHeightModel);
|
|
@@ -241,7 +241,7 @@ function convertMesh(mesh, images, cartographicOrigin, cartesianModelMatrix, att
|
|
|
241
241
|
outputAttributes = attributesMap.get('default');
|
|
242
242
|
}
|
|
243
243
|
assert(outputAttributes !== null, 'Primitive - material mapping failed');
|
|
244
|
-
assert(primitive.mode === GL.TRIANGLES || primitive.mode === GL.TRIANGLE_STRIP, "Primitive - unsupported mode ".concat(primitive.mode));
|
|
244
|
+
assert(primitive.mode === undefined || primitive.mode === GL.TRIANGLES || primitive.mode === GL.TRIANGLE_STRIP, "Primitive - unsupported mode ".concat(primitive.mode));
|
|
245
245
|
const attributes = primitive.attributes;
|
|
246
246
|
if (!outputAttributes) {
|
|
247
247
|
continue;
|
|
@@ -826,6 +826,9 @@ function generateFeatureIndexAttribute(featureIndex, faceRange) {
|
|
|
826
826
|
return orderedFeatureIndices;
|
|
827
827
|
}
|
|
828
828
|
export function getPropertyTable(tileContent) {
|
|
829
|
+
if (!tileContent) {
|
|
830
|
+
return null;
|
|
831
|
+
}
|
|
829
832
|
const batchTableJson = tileContent === null || tileContent === void 0 ? void 0 : tileContent.batchTableJson;
|
|
830
833
|
if (batchTableJson) {
|
|
831
834
|
return batchTableJson;
|
|
@@ -873,10 +876,6 @@ function getPropertyTableExtension(tileContent) {
|
|
|
873
876
|
};
|
|
874
877
|
}
|
|
875
878
|
function getPropertyTableFromExtFeatureMetadata(extension) {
|
|
876
|
-
if (extension !== null && extension !== void 0 && extension.featureTextures) {
|
|
877
|
-
console.warn('The I3S converter does not yet support the EXT_feature_metadata feature textures');
|
|
878
|
-
return null;
|
|
879
|
-
}
|
|
880
879
|
if (extension !== null && extension !== void 0 && extension.featureTables) {
|
|
881
880
|
var _Object$keys;
|
|
882
881
|
const firstFeatureTableName = (_Object$keys = Object.keys(extension.featureTables)) === null || _Object$keys === void 0 ? void 0 : _Object$keys[0];
|
|
@@ -889,7 +888,19 @@ function getPropertyTableFromExtFeatureMetadata(extension) {
|
|
|
889
888
|
return propertyTable;
|
|
890
889
|
}
|
|
891
890
|
}
|
|
892
|
-
|
|
891
|
+
if (extension !== null && extension !== void 0 && extension.featureTextures) {
|
|
892
|
+
var _Object$keys2;
|
|
893
|
+
const firstTextureName = (_Object$keys2 = Object.keys(extension.featureTextures)) === null || _Object$keys2 === void 0 ? void 0 : _Object$keys2[0];
|
|
894
|
+
if (firstTextureName) {
|
|
895
|
+
const featureTable = extension === null || extension === void 0 ? void 0 : extension.featureTextures[firstTextureName];
|
|
896
|
+
const propertyTable = {};
|
|
897
|
+
for (const propertyName in featureTable.properties) {
|
|
898
|
+
propertyTable[propertyName] = featureTable.properties[propertyName].data;
|
|
899
|
+
}
|
|
900
|
+
return propertyTable;
|
|
901
|
+
}
|
|
902
|
+
}
|
|
903
|
+
console.warn("The I3S converter couldn't handle EXT_feature_metadata extension: There is neither featureTables, no featureTextures in the extension.");
|
|
893
904
|
return null;
|
|
894
905
|
}
|
|
895
906
|
//# sourceMappingURL=geometry-converter.js.map
|