@loaders.gl/tile-converter 4.0.0-alpha.21 → 4.0.0-alpha.23
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/constants.d.ts +0 -2
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +1 -3
- package/dist/converter.min.js +114 -114
- package/dist/dist.min.js +2409 -1161
- package/dist/es5/constants.js +1 -5
- package/dist/es5/constants.js.map +1 -1
- package/dist/es5/deps-installer/deps-installer.js +1 -1
- package/dist/es5/i3s-converter/helpers/batch-ids-extensions.js +26 -11
- package/dist/es5/i3s-converter/helpers/batch-ids-extensions.js.map +1 -1
- package/dist/es5/i3s-converter/helpers/feature-attributes.js +14 -12
- package/dist/es5/i3s-converter/helpers/feature-attributes.js.map +1 -1
- package/dist/es5/i3s-converter/helpers/geometry-converter.js +61 -10
- package/dist/es5/i3s-converter/helpers/geometry-converter.js.map +1 -1
- package/dist/es5/i3s-converter/helpers/load-3d-tiles.js +70 -4
- package/dist/es5/i3s-converter/helpers/load-3d-tiles.js.map +1 -1
- package/dist/es5/i3s-converter/helpers/node-index-document.js +3 -2
- package/dist/es5/i3s-converter/helpers/node-index-document.js.map +1 -1
- package/dist/es5/i3s-converter/helpers/preprocess-3d-tiles.js +1 -2
- package/dist/es5/i3s-converter/helpers/preprocess-3d-tiles.js.map +1 -1
- package/dist/es5/i3s-converter/i3s-converter.js +70 -58
- package/dist/es5/i3s-converter/i3s-converter.js.map +1 -1
- package/dist/es5/i3s-server/controllers/slpk-controller.js +2 -2
- package/dist/es5/i3s-server/controllers/slpk-controller.js.map +1 -1
- package/dist/es5/pgm-loader.js +1 -1
- package/dist/es5/slpk-extractor/slpk-extractor.js +1 -1
- package/dist/es5/slpk-extractor/slpk-extractor.js.map +1 -1
- package/dist/esm/constants.js +0 -2
- package/dist/esm/constants.js.map +1 -1
- package/dist/esm/deps-installer/deps-installer.js +1 -1
- package/dist/esm/i3s-converter/helpers/batch-ids-extensions.js +21 -6
- package/dist/esm/i3s-converter/helpers/batch-ids-extensions.js.map +1 -1
- package/dist/esm/i3s-converter/helpers/feature-attributes.js +6 -4
- package/dist/esm/i3s-converter/helpers/feature-attributes.js.map +1 -1
- package/dist/esm/i3s-converter/helpers/geometry-converter.js +59 -8
- package/dist/esm/i3s-converter/helpers/geometry-converter.js.map +1 -1
- package/dist/esm/i3s-converter/helpers/load-3d-tiles.js +33 -4
- package/dist/esm/i3s-converter/helpers/load-3d-tiles.js.map +1 -1
- package/dist/esm/i3s-converter/helpers/node-index-document.js +2 -1
- package/dist/esm/i3s-converter/helpers/node-index-document.js.map +1 -1
- package/dist/esm/i3s-converter/helpers/preprocess-3d-tiles.js +1 -1
- package/dist/esm/i3s-converter/helpers/preprocess-3d-tiles.js.map +1 -1
- package/dist/esm/i3s-converter/i3s-converter.js +27 -22
- package/dist/esm/i3s-converter/i3s-converter.js.map +1 -1
- package/dist/esm/i3s-server/bin/i3s-server.min.js +71 -71
- package/dist/esm/i3s-server/controllers/slpk-controller.js +1 -1
- package/dist/esm/i3s-server/controllers/slpk-controller.js.map +1 -1
- package/dist/esm/pgm-loader.js +1 -1
- package/dist/esm/slpk-extractor/slpk-extractor.js +2 -1
- package/dist/esm/slpk-extractor/slpk-extractor.js.map +1 -1
- package/dist/i3s-converter/helpers/batch-ids-extensions.d.ts.map +1 -1
- package/dist/i3s-converter/helpers/batch-ids-extensions.js +37 -16
- package/dist/i3s-converter/helpers/feature-attributes.d.ts.map +1 -1
- package/dist/i3s-converter/helpers/feature-attributes.js +6 -4
- package/dist/i3s-converter/helpers/geometry-converter.d.ts +2 -2
- package/dist/i3s-converter/helpers/geometry-converter.d.ts.map +1 -1
- package/dist/i3s-converter/helpers/geometry-converter.js +93 -12
- package/dist/i3s-converter/helpers/load-3d-tiles.d.ts +15 -0
- package/dist/i3s-converter/helpers/load-3d-tiles.d.ts.map +1 -1
- package/dist/i3s-converter/helpers/load-3d-tiles.js +51 -5
- package/dist/i3s-converter/helpers/node-index-document.d.ts.map +1 -1
- package/dist/i3s-converter/helpers/node-index-document.js +4 -1
- package/dist/i3s-converter/helpers/preprocess-3d-tiles.js +2 -2
- package/dist/i3s-converter/i3s-converter.d.ts +1 -1
- package/dist/i3s-converter/i3s-converter.d.ts.map +1 -1
- package/dist/i3s-converter/i3s-converter.js +38 -17
- package/dist/i3s-server/controllers/slpk-controller.js +2 -2
- package/dist/slpk-extractor/slpk-extractor.d.ts.map +1 -1
- package/dist/slpk-extractor/slpk-extractor.js +2 -1
- package/dist/slpk-extractor.min.js +38 -38
- package/package.json +14 -14
- package/src/constants.ts +0 -3
- package/src/i3s-converter/helpers/batch-ids-extensions.ts +53 -14
- package/src/i3s-converter/helpers/feature-attributes.ts +8 -6
- package/src/i3s-converter/helpers/geometry-converter.ts +135 -12
- package/src/i3s-converter/helpers/load-3d-tiles.ts +61 -5
- package/src/i3s-converter/helpers/node-index-document.ts +5 -1
- package/src/i3s-converter/helpers/preprocess-3d-tiles.ts +1 -1
- package/src/i3s-converter/i3s-converter.ts +54 -22
- package/src/i3s-server/controllers/slpk-controller.ts +1 -1
- package/src/slpk-extractor/slpk-extractor.ts +2 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import '@loaders.gl/polyfills';
|
|
2
2
|
import { parseSLPK } from '@loaders.gl/i3s';
|
|
3
|
-
import { FileHandleFile } from '@loaders.gl/
|
|
3
|
+
import { FileHandleFile } from '@loaders.gl/loader-utils';
|
|
4
4
|
let slpkArchive;
|
|
5
5
|
export const loadArchive = async fullLayerPath => {
|
|
6
6
|
slpkArchive = await parseSLPK(await FileHandleFile.from(fullLayerPath), msg => console.log(msg));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"slpk-controller.js","names":["parseSLPK","FileHandleFile","slpkArchive","loadArchive","fullLayerPath","from","msg","console","log","getFileByUrl","url","trimmedPath","exec","uncompressedFile","Buffer","getFile","e"],"sources":["../../../../src/i3s-server/controllers/slpk-controller.ts"],"sourcesContent":["import '@loaders.gl/polyfills';\nimport {parseSLPK} from '@loaders.gl/i3s';\nimport {FileHandleFile} from '@loaders.gl/
|
|
1
|
+
{"version":3,"file":"slpk-controller.js","names":["parseSLPK","FileHandleFile","slpkArchive","loadArchive","fullLayerPath","from","msg","console","log","getFileByUrl","url","trimmedPath","exec","uncompressedFile","Buffer","getFile","e"],"sources":["../../../../src/i3s-server/controllers/slpk-controller.ts"],"sourcesContent":["import '@loaders.gl/polyfills';\nimport {parseSLPK} from '@loaders.gl/i3s';\nimport {FileHandleFile} from '@loaders.gl/loader-utils';\n\nlet slpkArchive;\n\n/**\n * Open SLPK file for reading and load HASH file\n * @param fullLayerPath - full path to SLPK file\n */\nexport const loadArchive = async (fullLayerPath: string): Promise<void> => {\n slpkArchive = await parseSLPK(await FileHandleFile.from(fullLayerPath), (msg) =>\n console.log(msg)\n );\n console.log('The server is ready to use');\n};\n\n/**\n * Get a file from SLPK\n * @param url - I3S HTTP URL\n * @returns - file content\n */\nexport async function getFileByUrl(url: string) {\n const trimmedPath = /^\\/?(.*)\\/?$/.exec(url);\n let uncompressedFile: Buffer | null = null;\n if (trimmedPath) {\n try {\n uncompressedFile = Buffer.from(await slpkArchive.getFile(trimmedPath[1], 'http'));\n } catch (e) {}\n }\n return uncompressedFile;\n}\n"],"mappings":"AAAA,OAAO,uBAAuB;AAC9B,SAAQA,SAAS,QAAO,iBAAiB;AACzC,SAAQC,cAAc,QAAO,0BAA0B;AAEvD,IAAIC,WAAW;AAMf,OAAO,MAAMC,WAAW,GAAG,MAAOC,aAAqB,IAAoB;EACzEF,WAAW,GAAG,MAAMF,SAAS,CAAC,MAAMC,cAAc,CAACI,IAAI,CAACD,aAAa,CAAC,EAAGE,GAAG,IAC1EC,OAAO,CAACC,GAAG,CAACF,GAAG,CACjB,CAAC;EACDC,OAAO,CAACC,GAAG,CAAC,4BAA4B,CAAC;AAC3C,CAAC;AAOD,OAAO,eAAeC,YAAYA,CAACC,GAAW,EAAE;EAC9C,MAAMC,WAAW,GAAG,cAAc,CAACC,IAAI,CAACF,GAAG,CAAC;EAC5C,IAAIG,gBAA+B,GAAG,IAAI;EAC1C,IAAIF,WAAW,EAAE;IACf,IAAI;MACFE,gBAAgB,GAAGC,MAAM,CAACT,IAAI,CAAC,MAAMH,WAAW,CAACa,OAAO,CAACJ,WAAW,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;IACnF,CAAC,CAAC,OAAOK,CAAC,EAAE,CAAC;EACf;EACA,OAAOH,gBAAgB;AACzB"}
|
package/dist/esm/pgm-loader.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { parsePGM } from '@math.gl/geoid';
|
|
2
|
-
const VERSION = typeof "4.0.0-alpha.
|
|
2
|
+
const VERSION = typeof "4.0.0-alpha.23" !== 'undefined' ? "4.0.0-alpha.23" : 'latest';
|
|
3
3
|
export const PGMLoader = {
|
|
4
4
|
name: 'PGM - Netpbm grayscale image format',
|
|
5
5
|
id: 'pgm',
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { isBrowser } from '@loaders.gl/core';
|
|
2
2
|
import { BROWSER_ERROR_MESSAGE } from '../constants';
|
|
3
3
|
import { path } from '@loaders.gl/loader-utils';
|
|
4
|
-
import { FileHandleFile
|
|
4
|
+
import { FileHandleFile } from '@loaders.gl/loader-utils';
|
|
5
|
+
import { parseZipLocalFileHeader } from '@loaders.gl/zip';
|
|
5
6
|
import { GZipCompression } from '@loaders.gl/compression';
|
|
6
7
|
import { writeFile } from '../lib/utils/file-utils';
|
|
7
8
|
const indexNames = ['3dSceneLayer.json.gz', '3dNodeIndexDocument.json.gz', 'sharedResource.json.gz'];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"slpk-extractor.js","names":["isBrowser","BROWSER_ERROR_MESSAGE","path","FileHandleFile","parseZipLocalFileHeader","GZipCompression","writeFile","indexNames","SLPKExtractor","extract","options","console","log","inputUrl","provider","from","localHeader","_localHeader","unGzip","name","correctIndexNames","fileName","data","slice","fileDataOffset","compressedSize","outputPath","includes","filename","join","dirname","parts","exec","concat","at","file","_file$name","test","_file$name2","compression","decompressedData","decompress","Promise","resolve","finalPath","dirName"],"sources":["../../../src/slpk-extractor/slpk-extractor.ts"],"sourcesContent":["import {isBrowser} from '@loaders.gl/core';\n\nimport {BROWSER_ERROR_MESSAGE} from '../constants';\nimport {path} from '@loaders.gl/loader-utils';\nimport {FileHandleFile
|
|
1
|
+
{"version":3,"file":"slpk-extractor.js","names":["isBrowser","BROWSER_ERROR_MESSAGE","path","FileHandleFile","parseZipLocalFileHeader","GZipCompression","writeFile","indexNames","SLPKExtractor","extract","options","console","log","inputUrl","provider","from","localHeader","_localHeader","unGzip","name","correctIndexNames","fileName","data","slice","fileDataOffset","compressedSize","outputPath","includes","filename","join","dirname","parts","exec","concat","at","file","_file$name","test","_file$name2","compression","decompressedData","decompress","Promise","resolve","finalPath","dirName"],"sources":["../../../src/slpk-extractor/slpk-extractor.ts"],"sourcesContent":["import {isBrowser} from '@loaders.gl/core';\n\nimport {BROWSER_ERROR_MESSAGE} from '../constants';\nimport {path} from '@loaders.gl/loader-utils';\nimport {FileHandleFile} from '@loaders.gl/loader-utils';\nimport {parseZipLocalFileHeader} from '@loaders.gl/zip';\nimport {GZipCompression} from '@loaders.gl/compression';\nimport {writeFile} from '../lib/utils/file-utils';\n\nconst indexNames = [\n '3dSceneLayer.json.gz',\n '3dNodeIndexDocument.json.gz',\n 'sharedResource.json.gz'\n];\n\n/**\n * Description of the file in the SLPK\n */\ntype File = {\n name: string | null;\n data: ArrayBuffer;\n};\n\n/**\n * Converter from slpk to i3s\n */\nexport default class SLPKExtractor {\n /**\n * Extract slpk to i3s\n * @param options\n * @param options.inputUrl the url to read SLPK file\n * @param options.outputPath the output filename\n */\n public async extract(options: {inputUrl: string; outputPath: string}): Promise<string> {\n if (isBrowser) {\n console.log(BROWSER_ERROR_MESSAGE);\n return BROWSER_ERROR_MESSAGE;\n }\n const {inputUrl} = options;\n\n const provider = await FileHandleFile.from(inputUrl);\n\n let localHeader = await parseZipLocalFileHeader(0n, provider);\n while (localHeader) {\n await this.writeFile(\n await this.unGzip({\n name: this.correctIndexNames(localHeader.fileName),\n data: await provider.slice(\n localHeader.fileDataOffset,\n localHeader.fileDataOffset + localHeader.compressedSize\n )\n }),\n options.outputPath\n );\n localHeader = await parseZipLocalFileHeader(\n localHeader.fileDataOffset + localHeader?.compressedSize,\n provider\n );\n }\n\n return 'success';\n }\n\n /**\n * Defines file name and path for i3s format\n * @param fileName initial file name and path\n */\n\n private correctIndexNames(fileName: string): string | null {\n if (indexNames.includes(path.filename(path.join('/', fileName)))) {\n return path.join(path.dirname(fileName), 'index.json.gz');\n }\n // finds path with name part and extention part\n let parts = /^(.*\\/[^\\/\\.]*)(\\..+)$/.exec(fileName);\n if (!parts) {\n return null;\n }\n return `${parts?.at(1)}/index${parts?.at(2)}`;\n }\n\n private async unGzip(file: File): Promise<File> {\n if (/\\.gz$/.test(file.name ?? '')) {\n const compression = new GZipCompression();\n\n const decompressedData = await compression.decompress(file.data);\n\n return {data: decompressedData, name: (file.name ?? '').slice(0, -3)};\n }\n return Promise.resolve(file);\n }\n\n private async writeFile(options: File, outputPath: string): Promise<void> {\n if (!options.name) {\n return;\n }\n const finalPath = path.join(outputPath, options.name);\n const dirName = path.dirname(finalPath);\n const fileName = path.filename(finalPath);\n await writeFile(dirName, options.data, fileName);\n }\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"batch-ids-extensions.d.ts","sourceRoot":"","sources":["../../../src/i3s-converter/helpers/batch-ids-extensions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,yBAAyB,EAAE,8BAA8B,EAAC,MAAM,kBAAkB,CAAC;AAC3F,OAAO,KAAK,EAAC,YAAY,EAAC,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"batch-ids-extensions.d.ts","sourceRoot":"","sources":["../../../src/i3s-converter/helpers/batch-ids-extensions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,yBAAyB,EAAE,8BAA8B,EAAC,MAAM,kBAAkB,CAAC;AAC3F,OAAO,KAAK,EAAC,YAAY,EAAC,MAAM,0BAA0B,CAAC;AAW3D,OAAO,EAAC,sBAAsB,EAAC,MAAM,UAAU,CAAC;AAGhD,OAAO,EAAC,kBAAkB,EAAC,MAAM,sBAAsB,CAAC;AAExD;;;;;GAKG;AACH,wBAAgB,yBAAyB,CACvC,WAAW,EAAE,kBAAkB,EAC/B,aAAa,CAAC,EAAE,MAAM,GACrB,MAAM,GAAG,IAAI,CAcf;AAED;;;;;;;GAOG;AACH,wBAAgB,wBAAwB,CACtC,UAAU,EAAE;IACV,CAAC,GAAG,EAAE,MAAM,GAAG,yBAAyB,CAAC;CAC1C,EACD,SAAS,EAAE,8BAA8B,EACzC,MAAM,EAAE,CAAC,sBAAsB,GAAG,IAAI,CAAC,EAAE,EACzC,cAAc,EAAE,MAAM,GAAG,IAAI,GAC5B,YAAY,CA6Bd"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.handleBatchIdsExtensions = exports.getTextureByMetadataClass = void 0;
|
|
4
|
-
const
|
|
4
|
+
const math_1 = require("@loaders.gl/math");
|
|
5
|
+
const gltf_1 = require("@loaders.gl/gltf");
|
|
5
6
|
/**
|
|
6
7
|
* Get featureTexture by metadataClass
|
|
7
8
|
* @param tileContent - 3d tile content
|
|
@@ -9,7 +10,7 @@ const constants_1 = require("../../constants");
|
|
|
9
10
|
* @returns featureTexture key
|
|
10
11
|
*/
|
|
11
12
|
function getTextureByMetadataClass(tileContent, metadataClass) {
|
|
12
|
-
const extFeatureMetadata = tileContent.gltf?.extensions?.[
|
|
13
|
+
const extFeatureMetadata = tileContent.gltf?.extensions?.[gltf_1.EXT_FEATURE_METADATA];
|
|
13
14
|
if (!extFeatureMetadata?.featureTextures) {
|
|
14
15
|
return null;
|
|
15
16
|
}
|
|
@@ -37,11 +38,12 @@ function handleBatchIdsExtensions(attributes, primitive, images, featureTexture)
|
|
|
37
38
|
}
|
|
38
39
|
for (const [extensionName, extensionData] of Object.entries(extensions || {})) {
|
|
39
40
|
switch (extensionName) {
|
|
40
|
-
case
|
|
41
|
+
case gltf_1.EXT_FEATURE_METADATA:
|
|
41
42
|
return handleExtFeatureMetadataExtension(attributes, extensionData, images, featureTexture);
|
|
42
|
-
case
|
|
43
|
-
|
|
44
|
-
|
|
43
|
+
case gltf_1.EXT_MESH_FEATURES:
|
|
44
|
+
return handleExtMeshFeaturesExtension(attributes, extensionData);
|
|
45
|
+
case gltf_1.EXT_STRUCTURAL_METADATA:
|
|
46
|
+
return handleExtStructuralMetadataExtension(attributes, extensionData);
|
|
45
47
|
default:
|
|
46
48
|
return [];
|
|
47
49
|
}
|
|
@@ -49,6 +51,33 @@ function handleBatchIdsExtensions(attributes, primitive, images, featureTexture)
|
|
|
49
51
|
return [];
|
|
50
52
|
}
|
|
51
53
|
exports.handleBatchIdsExtensions = handleBatchIdsExtensions;
|
|
54
|
+
function handleExtStructuralMetadataExtension(attributes, extStructuralMetadata) {
|
|
55
|
+
// Take only first extension object to get batchIds attribute name.
|
|
56
|
+
const dataAttributeNames = extStructuralMetadata?.dataAttributeNames;
|
|
57
|
+
if (dataAttributeNames?.length) {
|
|
58
|
+
// Let's use the first element of the array
|
|
59
|
+
// TODO: What to do with others if any?
|
|
60
|
+
const batchIdsAttribute = attributes[dataAttributeNames[0]];
|
|
61
|
+
return batchIdsAttribute.value;
|
|
62
|
+
}
|
|
63
|
+
return [];
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Getting batchIds from EXT_mesh_features extensions.
|
|
67
|
+
* @param attributes - gltf accessors
|
|
68
|
+
* @param extMeshFeatures - EXT_mesh_features extension
|
|
69
|
+
* @returns an array of attribute values
|
|
70
|
+
*/
|
|
71
|
+
function handleExtMeshFeaturesExtension(attributes, extMeshFeatures) {
|
|
72
|
+
const dataAttributeNames = extMeshFeatures?.dataAttributeNames;
|
|
73
|
+
if (dataAttributeNames?.length) {
|
|
74
|
+
// Let's use the first element of the array
|
|
75
|
+
// TODO: What to do with others if any?
|
|
76
|
+
const batchIdsAttribute = attributes[dataAttributeNames[0]];
|
|
77
|
+
return batchIdsAttribute.value;
|
|
78
|
+
}
|
|
79
|
+
return [];
|
|
80
|
+
}
|
|
52
81
|
/**
|
|
53
82
|
* Get batchIds from EXT_feature_metadata extension.
|
|
54
83
|
* Docs - https://github.com/CesiumGS/glTF/tree/3d-tiles-next/extensions/2.0/Vendor/EXT_feature_metadata
|
|
@@ -136,8 +165,8 @@ function generateBatchIdsFromTexture(featureIdTexture, textureCoordinates, image
|
|
|
136
165
|
for (let index = 0; index < textureCoordinates.length; index += 2) {
|
|
137
166
|
const u = textureCoordinates[index];
|
|
138
167
|
const v = textureCoordinates[index + 1];
|
|
139
|
-
const tx = Math.min((emod(u) * image.width) | 0, image.width - 1);
|
|
140
|
-
const ty = Math.min((emod(v) * image.height) | 0, image.height - 1);
|
|
168
|
+
const tx = Math.min(((0, math_1.emod)(u) * image.width) | 0, image.width - 1);
|
|
169
|
+
const ty = Math.min(((0, math_1.emod)(v) * image.height) | 0, image.height - 1);
|
|
141
170
|
const offset = (ty * image.width + tx) * image.components + channels;
|
|
142
171
|
const batchId = new Uint8Array(image.data)[offset];
|
|
143
172
|
batchIds.push(batchId);
|
|
@@ -148,11 +177,3 @@ function generateBatchIdsFromTexture(featureIdTexture, textureCoordinates, image
|
|
|
148
177
|
}
|
|
149
178
|
return batchIds;
|
|
150
179
|
}
|
|
151
|
-
/**
|
|
152
|
-
* Handle UVs if they are out of range [0,1].
|
|
153
|
-
* @param n
|
|
154
|
-
* @param m
|
|
155
|
-
*/
|
|
156
|
-
function emod(n) {
|
|
157
|
-
return ((n % 1) + 1) % 1;
|
|
158
|
-
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"feature-attributes.d.ts","sourceRoot":"","sources":["../../../src/i3s-converter/helpers/feature-attributes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,gBAAgB,EAAC,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EACL,SAAS,EACT,oBAAoB,EACpB,SAAS,EACT,KAAK,EAEL,SAAS,EACV,MAAM,iBAAiB,CAAC;AAEzB;;;;;;;;;;;;GAYG;AACH,wBAAgB,gCAAgC,CAC9C,UAAU,EAAE,MAAM,EAAE,EACpB,aAAa,EAAE,gBAAgB,GAC9B,gBAAgB,CAQlB;
|
|
1
|
+
{"version":3,"file":"feature-attributes.d.ts","sourceRoot":"","sources":["../../../src/i3s-converter/helpers/feature-attributes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,gBAAgB,EAAC,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EACL,SAAS,EACT,oBAAoB,EACpB,SAAS,EACT,KAAK,EAEL,SAAS,EACV,MAAM,iBAAiB,CAAC;AAEzB;;;;;;;;;;;;GAYG;AACH,wBAAgB,gCAAgC,CAC9C,UAAU,EAAE,MAAM,EAAE,EACpB,aAAa,EAAE,gBAAgB,GAC9B,gBAAgB,CAQlB;AAoBD;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CACnC,UAAU,EAAE,MAAM,EAAE,EACpB,aAAa,EAAE,gBAAgB,GAC9B,OAAO,CAUT;AAUD;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAUvE;AAED;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CACrC,cAAc,EAAE,MAAM,EACtB,GAAG,EAAE,MAAM,EACX,aAAa,EAAE,SAAS,GACvB,oBAAoB,CA0BtB;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,aAAa,EAAE,SAAS,GAAG,SAAS,CAazE;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,EAAE,kBAAkB,EAAE,SAAS,GAAG,KAAK,CAMtF;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,aAAa,EAAE,gBAAgB,GAAG,SAAS,CA8B1E"}
|
|
@@ -30,9 +30,11 @@ exports.flattenPropertyTableByFeatureIds = flattenPropertyTableByFeatureIds;
|
|
|
30
30
|
*/
|
|
31
31
|
function getPropertiesByFeatureIds(properties, featureIds) {
|
|
32
32
|
const resultProperties = [];
|
|
33
|
-
|
|
34
|
-
const
|
|
35
|
-
|
|
33
|
+
if (properties) {
|
|
34
|
+
for (const featureId of featureIds) {
|
|
35
|
+
const property = properties[featureId] || null;
|
|
36
|
+
resultProperties.push(property);
|
|
37
|
+
}
|
|
36
38
|
}
|
|
37
39
|
return resultProperties;
|
|
38
40
|
}
|
|
@@ -46,7 +48,7 @@ function getPropertiesByFeatureIds(properties, featureIds) {
|
|
|
46
48
|
function checkPropertiesLength(featureIds, propertyTable) {
|
|
47
49
|
let needFlatten = false;
|
|
48
50
|
for (const attribute of Object.values(propertyTable)) {
|
|
49
|
-
if (featureIds.length !== attribute.length) {
|
|
51
|
+
if (!featureIds || !attribute || featureIds.length !== attribute.length) {
|
|
50
52
|
needFlatten = true;
|
|
51
53
|
}
|
|
52
54
|
}
|
|
@@ -39,8 +39,8 @@ export declare function convertAttributes(attributesData: GLTFAttributesData, ma
|
|
|
39
39
|
* Find property table in tile
|
|
40
40
|
* For example it can be batchTable for b3dm files or property table in gLTF extension.
|
|
41
41
|
* @param tileContent - 3DTiles tile content
|
|
42
|
-
* @param metadataClass -
|
|
43
|
-
* @return batch table from b3dm / feature properties from EXT_FEATURE_METADATA
|
|
42
|
+
* @param metadataClass - user selected feature metadata class name
|
|
43
|
+
* @return batch table from b3dm / feature properties from EXT_FEATURE_METADATA, EXT_MESH_FEATURES or EXT_STRUCTURAL_METADATA
|
|
44
44
|
*/
|
|
45
45
|
export declare function getPropertyTable(tileContent: Tiles3DTileContent | null, metadataClass?: string): FeatureTableJson | null;
|
|
46
46
|
//# sourceMappingURL=geometry-converter.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"geometry-converter.d.ts","sourceRoot":"","sources":["../../../src/i3s-converter/helpers/geometry-converter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,gBAAgB,EAAE,kBAAkB,EAAC,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"geometry-converter.d.ts","sourceRoot":"","sources":["../../../src/i3s-converter/helpers/geometry-converter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,gBAAgB,EAAE,kBAAkB,EAAC,MAAM,sBAAsB,CAAC;AAa/E,OAAO,EAAU,OAAO,EAAU,MAAM,eAAe,CAAC;AAUxD,OAAO,EACL,mBAAmB,EACnB,qBAAqB,EACrB,sBAAsB,EAGvB,MAAM,UAAU,CAAC;AAClB,OAAO,EACL,oBAAoB,EAIrB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAC,KAAK,EAAC,MAAM,gBAAgB,CAAC;AAWrC,OAAO,KAAK,EAAC,kBAAkB,EAAgD,MAAM,UAAU,CAAC;AAEhG,OAAO,EAAC,cAAc,EAAE,mBAAmB,EAAC,MAAM,kBAAkB,CAAC;AAyBrE;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAA8B,wBAAwB,CACpD,WAAW,EAAE,kBAAkB,EAC/B,aAAa,EAAE,OAAO,EACtB,kBAAkB,EAAE,mBAAmB,GAAG,cAAc,EACxD,iBAAiB,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,EACxC,aAAa,EAAE,gBAAgB,GAAG,IAAI,EACtC,iBAAiB,EAAE,MAAM,EAAE,EAC3B,oBAAoB,EAAE,oBAAoB,EAAE,GAAG,SAAS,EACxD,KAAK,EAAE,OAAO,EACd,uBAAuB,EAAE,OAAO,EAChC,oBAAoB,EAAE,OAAO,EAC7B,gBAAgB,EAAE,KAAK,EACvB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EACjC,aAAa,CAAC,EAAE,MAAM,GACrB,OAAO,CAAC,qBAAqB,EAAE,GAAG,IAAI,CAAC,CAgEzC;AA6ID;;;;;;;;GAQG;AACH,wBAAsB,iBAAiB,CACrC,cAAc,EAAE,kBAAkB,EAClC,sBAAsB,EAAE,sBAAsB,EAAE,EAChD,qBAAqB,EAAE,OAAO,EAC9B,cAAc,EAAE,MAAM,GAAG,IAAI,GAC5B,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC,CAkD3C;AAisCD;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAC9B,WAAW,EAAE,kBAAkB,GAAG,IAAI,EACtC,aAAa,CAAC,EAAE,MAAM,GACrB,gBAAgB,GAAG,IAAI,CAsCzB"}
|
|
@@ -41,7 +41,7 @@ const batch_ids_extensions_1 = require("./batch-ids-extensions");
|
|
|
41
41
|
const feature_attributes_1 = require("./feature-attributes");
|
|
42
42
|
const math_1 = require("@loaders.gl/math");
|
|
43
43
|
const geometry_utils_1 = require("../../lib/utils/geometry-utils");
|
|
44
|
-
const
|
|
44
|
+
const gltf_1 = require("@loaders.gl/gltf");
|
|
45
45
|
// Spec - https://github.com/Esri/i3s-spec/blob/master/docs/1.7/pbrMetallicRoughness.cmn.md
|
|
46
46
|
const DEFAULT_ROUGHNESS_FACTOR = 1;
|
|
47
47
|
const DEFAULT_METALLIC_FACTOR = 1;
|
|
@@ -980,9 +980,11 @@ function convertPropertyTableToAttributeBuffers(featureIds, propertyTable, attri
|
|
|
980
980
|
};
|
|
981
981
|
for (const propertyName in propertyTableWithObjectIds) {
|
|
982
982
|
const type = getAttributeType(propertyName, attributeStorageInfo);
|
|
983
|
-
|
|
984
|
-
|
|
985
|
-
|
|
983
|
+
if (type) {
|
|
984
|
+
const value = propertyTableWithObjectIds[propertyName];
|
|
985
|
+
const attributeBuffer = generateAttributeBuffer(type, value);
|
|
986
|
+
attributeBuffers.push(attributeBuffer);
|
|
987
|
+
}
|
|
986
988
|
}
|
|
987
989
|
return attributeBuffers;
|
|
988
990
|
}
|
|
@@ -1017,6 +1019,14 @@ function generateAttributeBuffer(type, value) {
|
|
|
1017
1019
|
*/
|
|
1018
1020
|
function getAttributeType(key, attributeStorageInfo) {
|
|
1019
1021
|
const attribute = attributeStorageInfo.find((attr) => attr.name === key);
|
|
1022
|
+
if (!attribute) {
|
|
1023
|
+
console.error(`attribute is null, key=${key}, attributeStorageInfo=${JSON.stringify(attributeStorageInfo, null, 2)}`);
|
|
1024
|
+
return '';
|
|
1025
|
+
}
|
|
1026
|
+
if (!attribute.attributeValues) {
|
|
1027
|
+
console.error(`attributeValues is null, attribute=${attribute}`);
|
|
1028
|
+
return '';
|
|
1029
|
+
}
|
|
1020
1030
|
return attribute.attributeValues.valueType;
|
|
1021
1031
|
}
|
|
1022
1032
|
/**
|
|
@@ -1148,25 +1158,31 @@ function generateFeatureIndexAttribute(featureIndex, faceRange) {
|
|
|
1148
1158
|
* Find property table in tile
|
|
1149
1159
|
* For example it can be batchTable for b3dm files or property table in gLTF extension.
|
|
1150
1160
|
* @param tileContent - 3DTiles tile content
|
|
1151
|
-
* @param metadataClass -
|
|
1152
|
-
* @return batch table from b3dm / feature properties from EXT_FEATURE_METADATA
|
|
1161
|
+
* @param metadataClass - user selected feature metadata class name
|
|
1162
|
+
* @return batch table from b3dm / feature properties from EXT_FEATURE_METADATA, EXT_MESH_FEATURES or EXT_STRUCTURAL_METADATA
|
|
1153
1163
|
*/
|
|
1154
1164
|
function getPropertyTable(tileContent, metadataClass) {
|
|
1155
1165
|
if (!tileContent) {
|
|
1156
1166
|
return null;
|
|
1157
1167
|
}
|
|
1168
|
+
let propertyTable;
|
|
1158
1169
|
const batchTableJson = tileContent?.batchTableJson;
|
|
1159
1170
|
if (batchTableJson) {
|
|
1160
1171
|
return batchTableJson;
|
|
1161
1172
|
}
|
|
1162
1173
|
const { extensionName, extension } = getPropertyTableExtension(tileContent);
|
|
1163
1174
|
switch (extensionName) {
|
|
1164
|
-
case
|
|
1165
|
-
|
|
1166
|
-
return
|
|
1175
|
+
case gltf_1.EXT_MESH_FEATURES: {
|
|
1176
|
+
propertyTable = getPropertyTableFromExtMeshFeatures(extension, metadataClass);
|
|
1177
|
+
return propertyTable;
|
|
1167
1178
|
}
|
|
1168
|
-
case
|
|
1169
|
-
|
|
1179
|
+
case gltf_1.EXT_STRUCTURAL_METADATA: {
|
|
1180
|
+
propertyTable = getPropertyTableFromExtStructuralMetadata(extension, metadataClass);
|
|
1181
|
+
return propertyTable;
|
|
1182
|
+
}
|
|
1183
|
+
case gltf_1.EXT_FEATURE_METADATA: {
|
|
1184
|
+
propertyTable = getPropertyTableFromExtFeatureMetadata(extension, metadataClass);
|
|
1185
|
+
return propertyTable;
|
|
1170
1186
|
}
|
|
1171
1187
|
default:
|
|
1172
1188
|
return null;
|
|
@@ -1178,7 +1194,11 @@ exports.getPropertyTable = getPropertyTable;
|
|
|
1178
1194
|
* @param tileContent - 3DTiles tile content
|
|
1179
1195
|
*/
|
|
1180
1196
|
function getPropertyTableExtension(tileContent) {
|
|
1181
|
-
const extensionsWithPropertyTables = [
|
|
1197
|
+
const extensionsWithPropertyTables = [
|
|
1198
|
+
gltf_1.EXT_FEATURE_METADATA,
|
|
1199
|
+
gltf_1.EXT_STRUCTURAL_METADATA,
|
|
1200
|
+
gltf_1.EXT_MESH_FEATURES
|
|
1201
|
+
];
|
|
1182
1202
|
const extensionsUsed = tileContent?.gltf?.extensionsUsed;
|
|
1183
1203
|
if (!extensionsUsed) {
|
|
1184
1204
|
return { extensionName: null, extension: null };
|
|
@@ -1199,6 +1219,8 @@ function getPropertyTableExtension(tileContent) {
|
|
|
1199
1219
|
/**
|
|
1200
1220
|
* Handle EXT_feature_metadata to get property table
|
|
1201
1221
|
* @param extension - global level of EXT_FEATURE_METADATA extension
|
|
1222
|
+
* @param metadataClass - user selected feature metadata class name
|
|
1223
|
+
* @returns {FeatureTableJson | null} Property table or null if the extension can't be handled properly.
|
|
1202
1224
|
*/
|
|
1203
1225
|
function getPropertyTableFromExtFeatureMetadata(extension, metadataClass) {
|
|
1204
1226
|
if (extension?.featureTables) {
|
|
@@ -1238,3 +1260,62 @@ function getPropertyTableFromExtFeatureMetadata(extension, metadataClass) {
|
|
|
1238
1260
|
console.warn("The I3S converter couldn't handle EXT_feature_metadata extension: There is neither featureTables, no featureTextures in the extension.");
|
|
1239
1261
|
return null;
|
|
1240
1262
|
}
|
|
1263
|
+
/**
|
|
1264
|
+
* Handle EXT_structural_metadata to get property table
|
|
1265
|
+
* @param extension - global level of EXT_STRUCTURAL_METADATA extension
|
|
1266
|
+
* @param metadataClass - user selected feature metadata class name
|
|
1267
|
+
* @returns {FeatureTableJson | null} Property table or null if the extension can't be handled properly.
|
|
1268
|
+
*/
|
|
1269
|
+
function getPropertyTableFromExtStructuralMetadata(extension, metadataClass) {
|
|
1270
|
+
if (extension?.propertyTables) {
|
|
1271
|
+
/**
|
|
1272
|
+
* Take only first feature table to generate attributes storage info object.
|
|
1273
|
+
* TODO: Think about getting data from all feature tables?
|
|
1274
|
+
* It can be tricky just because 3dTiles is able to have multiple featureId attributes and multiple feature tables.
|
|
1275
|
+
* In I3S we should decide which featureIds attribute will be passed to geometry data.
|
|
1276
|
+
*/
|
|
1277
|
+
const firstPropertyTable = extension?.propertyTables[0];
|
|
1278
|
+
const propertyTableWithData = {};
|
|
1279
|
+
for (const propertyName in firstPropertyTable.properties) {
|
|
1280
|
+
propertyTableWithData[propertyName] = firstPropertyTable.properties[propertyName].data;
|
|
1281
|
+
}
|
|
1282
|
+
return propertyTableWithData;
|
|
1283
|
+
}
|
|
1284
|
+
if (extension?.propertyTextures) {
|
|
1285
|
+
/**
|
|
1286
|
+
* Take only first feature table to generate attributes storage info object.
|
|
1287
|
+
* TODO: Think about getting data from all feature tables?
|
|
1288
|
+
* It can be tricky just because 3dTiles is able to have multiple featureId attributes and multiple feature tables.
|
|
1289
|
+
* In I3S we should decide which featureIds attribute will be passed to geometry data.
|
|
1290
|
+
*/
|
|
1291
|
+
if (extension?.propertyTextures) {
|
|
1292
|
+
const firstPropertyTexture = extension?.propertyTextures[0];
|
|
1293
|
+
const propertyTableWithData = {};
|
|
1294
|
+
for (const propertyName in firstPropertyTexture.properties) {
|
|
1295
|
+
propertyTableWithData[propertyName] = firstPropertyTexture.properties[propertyName].data;
|
|
1296
|
+
}
|
|
1297
|
+
return propertyTableWithData;
|
|
1298
|
+
}
|
|
1299
|
+
}
|
|
1300
|
+
console.warn("The I3S converter couldn't handle EXT_structural_metadata extension: There is neither propertyTables, no propertyTextures in the extension.");
|
|
1301
|
+
return null;
|
|
1302
|
+
}
|
|
1303
|
+
/**
|
|
1304
|
+
* Handle EXT_mesh_features to get property table
|
|
1305
|
+
* @param extension - global level of EXT_MESH_FEATURES extension
|
|
1306
|
+
* @param metadataClass - user selected feature metadata class name
|
|
1307
|
+
* @returns {FeatureTableJson | null} Property table or null if the extension can't be handled properly.
|
|
1308
|
+
*/
|
|
1309
|
+
function getPropertyTableFromExtMeshFeatures(extension, metadataClass) {
|
|
1310
|
+
if (extension?.featureIds) {
|
|
1311
|
+
const firstFeatureId = extension?.featureIds[0];
|
|
1312
|
+
const propertyTableWithData = {};
|
|
1313
|
+
// When firstFeatureId.propertyTable is defined, the property data will be taken from EXT_structural_metadata extension
|
|
1314
|
+
if (!firstFeatureId.propertyTable) {
|
|
1315
|
+
console.warn('Should be implemented as we have the tileset with Ext_mesh_features not linked with EXT_structural_metadata extension');
|
|
1316
|
+
}
|
|
1317
|
+
return propertyTableWithData;
|
|
1318
|
+
}
|
|
1319
|
+
console.warn("The I3S converter couldn't handle EXT_mesh_features extension: There is no featureIds in the extension.");
|
|
1320
|
+
return null;
|
|
1321
|
+
}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { Tiles3DLoaderOptions, Tiles3DTileContent, Tiles3DTileJSONPostprocessed, Tiles3DTilesetJSONPostprocessed } from '@loaders.gl/3d-tiles';
|
|
2
|
+
import { LoaderWithParser } from '@loaders.gl/core';
|
|
2
3
|
/**
|
|
3
4
|
* Load nested 3DTiles tileset. If the sourceTile is not nested tileset - do nothing
|
|
4
5
|
* @param sourceTileset - source root tileset JSON
|
|
@@ -15,4 +16,18 @@ export declare const loadNestedTileset: (sourceTileset: Tiles3DTilesetJSONPostpr
|
|
|
15
16
|
* @returns - 3DTiles tile content or null
|
|
16
17
|
*/
|
|
17
18
|
export declare const loadTile3DContent: (sourceTileset: Tiles3DTilesetJSONPostprocessed | null, sourceTile: Tiles3DTileJSONPostprocessed, tilesetLoadOptions: Tiles3DLoaderOptions) => Promise<Tiles3DTileContent | null>;
|
|
19
|
+
/**
|
|
20
|
+
* Load a resource with load options and .3tz format support
|
|
21
|
+
* @param url - resource URL
|
|
22
|
+
* @param loader - loader to parse data (Tiles3DLoader / CesiumIonLoader)
|
|
23
|
+
* @param loadOptions - 3d-tiles loader options
|
|
24
|
+
* @returns 3d-tiles resource
|
|
25
|
+
*/
|
|
26
|
+
export declare function loadFromArchive(url: string, loader: LoaderWithParser, loadOptions: Tiles3DLoaderOptions): Promise<any>;
|
|
27
|
+
/**
|
|
28
|
+
* Check if tile is nested tileset
|
|
29
|
+
* @param tile - 3DTiles header data
|
|
30
|
+
* @returns true if tile is nested tileset
|
|
31
|
+
*/
|
|
32
|
+
export declare function isNestedTileset(tile: Tiles3DTileJSONPostprocessed): boolean;
|
|
18
33
|
//# sourceMappingURL=load-3d-tiles.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"load-3d-tiles.d.ts","sourceRoot":"","sources":["../../../src/i3s-converter/helpers/load-3d-tiles.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,oBAAoB,EACpB,kBAAkB,EAClB,4BAA4B,EAC5B,+BAA+B,EAChC,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"load-3d-tiles.d.ts","sourceRoot":"","sources":["../../../src/i3s-converter/helpers/load-3d-tiles.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,oBAAoB,EACpB,kBAAkB,EAClB,4BAA4B,EAC5B,+BAA+B,EAChC,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAC,gBAAgB,EAAO,MAAM,kBAAkB,CAAC;AAExD;;;;;;GAMG;AACH,eAAO,MAAM,iBAAiB,kBACb,+BAA+B,GAAG,IAAI,cACzC,4BAA4B,sBACpB,oBAAoB,KACvC,QAAQ,IAAI,CAsBd,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,iBAAiB,kBACb,+BAA+B,GAAG,IAAI,cACzC,4BAA4B,sBACpB,oBAAoB,KACvC,QAAQ,kBAAkB,GAAG,IAAI,CAqBnC,CAAC;AAEF;;;;;;GAMG;AACH,wBAAsB,eAAe,CACnC,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,gBAAgB,EACxB,WAAW,EAAE,oBAAoB,gBA0BlC;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,4BAA4B,WAEjE"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.loadTile3DContent = exports.loadNestedTileset = void 0;
|
|
3
|
+
exports.isNestedTileset = exports.loadFromArchive = exports.loadTile3DContent = exports.loadNestedTileset = void 0;
|
|
4
|
+
const _3d_tiles_1 = require("@loaders.gl/3d-tiles");
|
|
4
5
|
const core_1 = require("@loaders.gl/core");
|
|
5
6
|
/**
|
|
6
7
|
* Load nested 3DTiles tileset. If the sourceTile is not nested tileset - do nothing
|
|
@@ -10,7 +11,7 @@ const core_1 = require("@loaders.gl/core");
|
|
|
10
11
|
* @returns nothing
|
|
11
12
|
*/
|
|
12
13
|
const loadNestedTileset = async (sourceTileset, sourceTile, tilesetLoadOptions) => {
|
|
13
|
-
const isTileset = sourceTile
|
|
14
|
+
const isTileset = isNestedTileset(sourceTile);
|
|
14
15
|
if (!sourceTileset || !sourceTile.contentUrl || !isTileset) {
|
|
15
16
|
return;
|
|
16
17
|
}
|
|
@@ -21,7 +22,7 @@ const loadNestedTileset = async (sourceTileset, sourceTile, tilesetLoadOptions)
|
|
|
21
22
|
assetGltfUpAxis: (sourceTileset.asset && sourceTileset.asset.gltfUpAxis) || 'Y'
|
|
22
23
|
}
|
|
23
24
|
};
|
|
24
|
-
const tileContent = await (
|
|
25
|
+
const tileContent = await loadFromArchive(sourceTile.contentUrl, sourceTileset.loader, loadOptions);
|
|
25
26
|
if (tileContent.root) {
|
|
26
27
|
sourceTile.children = [tileContent.root];
|
|
27
28
|
}
|
|
@@ -35,7 +36,7 @@ exports.loadNestedTileset = loadNestedTileset;
|
|
|
35
36
|
* @returns - 3DTiles tile content or null
|
|
36
37
|
*/
|
|
37
38
|
const loadTile3DContent = async (sourceTileset, sourceTile, tilesetLoadOptions) => {
|
|
38
|
-
const isTileset = sourceTile
|
|
39
|
+
const isTileset = isNestedTileset(sourceTile);
|
|
39
40
|
if (!sourceTileset || !sourceTile.contentUrl || isTileset) {
|
|
40
41
|
return null;
|
|
41
42
|
}
|
|
@@ -47,7 +48,52 @@ const loadTile3DContent = async (sourceTileset, sourceTile, tilesetLoadOptions)
|
|
|
47
48
|
assetGltfUpAxis: (sourceTileset.asset && sourceTileset.asset.gltfUpAxis) || 'Y'
|
|
48
49
|
}
|
|
49
50
|
};
|
|
50
|
-
const tileContent = await (
|
|
51
|
+
const tileContent = await loadFromArchive(sourceTile.contentUrl, sourceTileset.loader, loadOptions);
|
|
51
52
|
return tileContent;
|
|
52
53
|
};
|
|
53
54
|
exports.loadTile3DContent = loadTile3DContent;
|
|
55
|
+
/**
|
|
56
|
+
* Load a resource with load options and .3tz format support
|
|
57
|
+
* @param url - resource URL
|
|
58
|
+
* @param loader - loader to parse data (Tiles3DLoader / CesiumIonLoader)
|
|
59
|
+
* @param loadOptions - 3d-tiles loader options
|
|
60
|
+
* @returns 3d-tiles resource
|
|
61
|
+
*/
|
|
62
|
+
async function loadFromArchive(url, loader, loadOptions) {
|
|
63
|
+
const tz3UrlParts = url.split('.3tz');
|
|
64
|
+
let filename;
|
|
65
|
+
// No '.3tz'. The file will be loaded with global fetch function
|
|
66
|
+
if (tz3UrlParts.length === 1) {
|
|
67
|
+
filename = null;
|
|
68
|
+
}
|
|
69
|
+
else if (tz3UrlParts.length === 2) {
|
|
70
|
+
filename = tz3UrlParts[1].slice(1);
|
|
71
|
+
if (filename === '') {
|
|
72
|
+
filename = 'tileset.json';
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
else {
|
|
76
|
+
throw new Error('Unexpected URL format');
|
|
77
|
+
}
|
|
78
|
+
if (filename) {
|
|
79
|
+
const tz3Path = `${tz3UrlParts[0]}.3tz`;
|
|
80
|
+
const fileSystem = new _3d_tiles_1.Tiles3DArchiveFileSystem(tz3Path);
|
|
81
|
+
const content = await (0, core_1.load)(filename, loader, {
|
|
82
|
+
...loadOptions,
|
|
83
|
+
fetch: fileSystem.fetch.bind(fileSystem)
|
|
84
|
+
});
|
|
85
|
+
await fileSystem.destroy();
|
|
86
|
+
return content;
|
|
87
|
+
}
|
|
88
|
+
return await (0, core_1.load)(url, loader, loadOptions);
|
|
89
|
+
}
|
|
90
|
+
exports.loadFromArchive = loadFromArchive;
|
|
91
|
+
/**
|
|
92
|
+
* Check if tile is nested tileset
|
|
93
|
+
* @param tile - 3DTiles header data
|
|
94
|
+
* @returns true if tile is nested tileset
|
|
95
|
+
*/
|
|
96
|
+
function isNestedTileset(tile) {
|
|
97
|
+
return tile?.type === 'json' || tile?.type === '3tz';
|
|
98
|
+
}
|
|
99
|
+
exports.isNestedTileset = isNestedTileset;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"node-index-document.d.ts","sourceRoot":"","sources":["../../../src/i3s-converter/helpers/node-index-document.ts"],"names":[],"mappings":"AACA,OAAO,EACL,eAAe,EACf,YAAY,EACZ,mBAAmB,EACnB,UAAU,EAEX,MAAM,iBAAiB,CAAC;AAIzB,OAAO,YAAY,MAAM,kBAAkB,CAAC;AAE5C,OAAO,EAAC,qBAAqB,EAAC,MAAM,UAAU,CAAC;AAE/C;;;;;GAKG;AACH,qBAAa,iBAAiB;IAC5B,cAAc;IACP,EAAE,EAAE,MAAM,CAAC;IAClB,uBAAuB;IAChB,QAAQ,EAAE,MAAM,CAAC;IACxB,+BAA+B;IACxB,IAAI,EAAE,mBAAmB,GAAG,IAAI,CAAQ;IAC/C,eAAe;IACR,QAAQ,EAAE,iBAAiB,EAAE,CAAM;IAC1C,yBAAyB;IACzB,OAAO,CAAC,SAAS,CAAe;IAEhC;;;OAGG;IACH,OAAO,CAAC,UAAU,CAAkB;IACpC,IAAI,SAAS,IAAI,OAAO,CAEvB;IAED;;;;OAIG;gBACS,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,YAAY;IAM/C;;;;OAIG;IACU,OAAO,CAAC,IAAI,EAAE,mBAAmB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAS3E;;;OAGG;IACU,WAAW,CAAC,UAAU,EAAE,iBAAiB,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IA0BxE;;OAEG;IACU,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAmC1C,+CAA+C;IAClC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAMlC,wBAAwB;IACxB,OAAO,CAAC,QAAQ;IAOhB;;;OAGG;YACW,KAAK;IAyBnB;;;OAGG;YACW,IAAI;IAalB;;OAEG;IACH,OAAO,CAAC,KAAK;IAIb;;;;;OAKG;WACU,cAAc,CACzB,eAAe,EAAE,eAAe,EAChC,SAAS,EAAE,YAAY,GACtB,OAAO,CAAC,iBAAiB,CAAC;IAM7B;;;;;;;;;OASG;WACU,UAAU,CACrB,UAAU,EAAE,iBAAiB,EAC7B,eAAe,EAAE,eAAe,EAChC,YAAY,EAAE,YAAY,EAAE,EAC5B,UAAU,EAAE,UAAU,EACtB,SAAS,EAAE,qBAAqB,EAChC,SAAS,EAAE,YAAY,GACtB,OAAO,CAAC,iBAAiB,CAAC;IAY7B;;;;OAIG;IACH,MAAM,CAAC,2BAA2B,CAAC,eAAe,EAAE,eAAe,GAAG,mBAAmB;IAqBzF;;;;;;;;;;OAUG;WACU,uBAAuB,CAClC,UAAU,EAAE,iBAAiB,EAC7B,eAAe,EAAE,eAAe,EAChC,YAAY,EAAE,YAAY,EAAE,EAC5B,UAAU,EAAE,UAAU,EACtB,SAAS,EAAE,qBAAqB,GAC/B,OAAO,CAAC,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"node-index-document.d.ts","sourceRoot":"","sources":["../../../src/i3s-converter/helpers/node-index-document.ts"],"names":[],"mappings":"AACA,OAAO,EACL,eAAe,EACf,YAAY,EACZ,mBAAmB,EACnB,UAAU,EAEX,MAAM,iBAAiB,CAAC;AAIzB,OAAO,YAAY,MAAM,kBAAkB,CAAC;AAE5C,OAAO,EAAC,qBAAqB,EAAC,MAAM,UAAU,CAAC;AAE/C;;;;;GAKG;AACH,qBAAa,iBAAiB;IAC5B,cAAc;IACP,EAAE,EAAE,MAAM,CAAC;IAClB,uBAAuB;IAChB,QAAQ,EAAE,MAAM,CAAC;IACxB,+BAA+B;IACxB,IAAI,EAAE,mBAAmB,GAAG,IAAI,CAAQ;IAC/C,eAAe;IACR,QAAQ,EAAE,iBAAiB,EAAE,CAAM;IAC1C,yBAAyB;IACzB,OAAO,CAAC,SAAS,CAAe;IAEhC;;;OAGG;IACH,OAAO,CAAC,UAAU,CAAkB;IACpC,IAAI,SAAS,IAAI,OAAO,CAEvB;IAED;;;;OAIG;gBACS,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,YAAY;IAM/C;;;;OAIG;IACU,OAAO,CAAC,IAAI,EAAE,mBAAmB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAS3E;;;OAGG;IACU,WAAW,CAAC,UAAU,EAAE,iBAAiB,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IA0BxE;;OAEG;IACU,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAmC1C,+CAA+C;IAClC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAMlC,wBAAwB;IACxB,OAAO,CAAC,QAAQ;IAOhB;;;OAGG;YACW,KAAK;IAyBnB;;;OAGG;YACW,IAAI;IAalB;;OAEG;IACH,OAAO,CAAC,KAAK;IAIb;;;;;OAKG;WACU,cAAc,CACzB,eAAe,EAAE,eAAe,EAChC,SAAS,EAAE,YAAY,GACtB,OAAO,CAAC,iBAAiB,CAAC;IAM7B;;;;;;;;;OASG;WACU,UAAU,CACrB,UAAU,EAAE,iBAAiB,EAC7B,eAAe,EAAE,eAAe,EAChC,YAAY,EAAE,YAAY,EAAE,EAC5B,UAAU,EAAE,UAAU,EACtB,SAAS,EAAE,qBAAqB,EAChC,SAAS,EAAE,YAAY,GACtB,OAAO,CAAC,iBAAiB,CAAC;IAY7B;;;;OAIG;IACH,MAAM,CAAC,2BAA2B,CAAC,eAAe,EAAE,eAAe,GAAG,mBAAmB;IAqBzF;;;;;;;;;;OAUG;WACU,uBAAuB,CAClC,UAAU,EAAE,iBAAiB,EAC7B,eAAe,EAAE,eAAe,EAChC,YAAY,EAAE,YAAY,EAAE,EAC5B,UAAU,EAAE,UAAU,EACtB,SAAS,EAAE,qBAAqB,GAC/B,OAAO,CAAC,mBAAmB,CAAC;CAgDhC"}
|
|
@@ -256,7 +256,10 @@ class NodeIndexDocument {
|
|
|
256
256
|
attributes.length &&
|
|
257
257
|
parentNode.converter.layers0?.attributeStorageInfo?.length) {
|
|
258
258
|
node.attributeData = [];
|
|
259
|
-
|
|
259
|
+
const minimumLength = attributes.length < parentNode.converter.layers0.attributeStorageInfo.length
|
|
260
|
+
? attributes.length
|
|
261
|
+
: parentNode.converter.layers0.attributeStorageInfo.length;
|
|
262
|
+
for (let index = 0; index < minimumLength; index++) {
|
|
260
263
|
const folderName = parentNode.converter.layers0.attributeStorageInfo[index].key;
|
|
261
264
|
node.attributeData.push({ href: `./attributes/${folderName}/0` });
|
|
262
265
|
}
|
|
@@ -4,7 +4,7 @@ exports.mergePreprocessData = exports.analyzeTileContent = exports.GLTF_PRIMITIV
|
|
|
4
4
|
const types_1 = require("../types");
|
|
5
5
|
const gltf_1 = require("@loaders.gl/gltf");
|
|
6
6
|
const core_1 = require("@loaders.gl/core");
|
|
7
|
-
const
|
|
7
|
+
const gltf_2 = require("@loaders.gl/gltf");
|
|
8
8
|
/**
|
|
9
9
|
* glTF primitive modes
|
|
10
10
|
* @see https://registry.khronos.org/glTF/specs/2.0/glTF-2.0.html#_mesh_primitive_mode
|
|
@@ -72,7 +72,7 @@ const getMeshTypesFromGltf = (gltfJson) => {
|
|
|
72
72
|
*/
|
|
73
73
|
const getMetadataClassesFromGltf = (gltfJson) => {
|
|
74
74
|
const result = new Set();
|
|
75
|
-
const classes = gltfJson.extensions?.[
|
|
75
|
+
const classes = gltfJson.extensions?.[gltf_2.EXT_FEATURE_METADATA]
|
|
76
76
|
?.schema?.classes;
|
|
77
77
|
if (classes) {
|
|
78
78
|
for (const classKey of Object.keys(classes)) {
|
|
@@ -147,7 +147,7 @@ export default class I3SConverter {
|
|
|
147
147
|
* @param boundingVolume - initialized bounding volume of the source tile
|
|
148
148
|
* @param tileContent - content of the source tile
|
|
149
149
|
* @param parentId - id of parent node in node pages
|
|
150
|
-
* @param propertyTable - batch table from b3dm / feature properties from EXT_FEATURE_METADATA
|
|
150
|
+
* @param propertyTable - batch table from b3dm / feature properties from EXT_FEATURE_METADATA, EXT_MESH_FEATURES or EXT_STRUCTURAL_METADATA
|
|
151
151
|
* @returns - converted node resources
|
|
152
152
|
*/
|
|
153
153
|
private _convertResources;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"i3s-converter.d.ts","sourceRoot":"","sources":["../../src/i3s-converter/i3s-converter.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAEV,oBAAoB,EAGpB,+BAA+B,EAChC,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EAAC,cAAc,EAAC,MAAM,0BAA0B,CAAC;AAC7D,OAAO,KAAK,EACV,YAAY,
|
|
1
|
+
{"version":3,"file":"i3s-converter.d.ts","sourceRoot":"","sources":["../../src/i3s-converter/i3s-converter.ts"],"names":[],"mappings":"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"}
|