@loaders.gl/i3s 3.3.0-alpha.4 → 3.3.0-alpha.6
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 +984 -1291
- package/dist/es5/arcgis-webscene-loader.js +2 -8
- package/dist/es5/arcgis-webscene-loader.js.map +1 -1
- package/dist/es5/bundle.js +0 -1
- package/dist/es5/bundle.js.map +1 -1
- package/dist/es5/i3s-attribute-loader.js +19 -60
- package/dist/es5/i3s-attribute-loader.js.map +1 -1
- package/dist/es5/i3s-building-scene-layer-loader.js +1 -10
- package/dist/es5/i3s-building-scene-layer-loader.js.map +1 -1
- package/dist/es5/i3s-content-loader.js +1 -14
- package/dist/es5/i3s-content-loader.js.map +1 -1
- package/dist/es5/i3s-loader.js +7 -45
- package/dist/es5/i3s-loader.js.map +1 -1
- package/dist/es5/i3s-node-page-loader.js +1 -12
- package/dist/es5/i3s-node-page-loader.js.map +1 -1
- package/dist/es5/index.js +12 -18
- package/dist/es5/index.js.map +1 -1
- package/dist/es5/lib/helpers/i3s-nodepages-tiles.js +18 -78
- package/dist/es5/lib/helpers/i3s-nodepages-tiles.js.map +1 -1
- package/dist/es5/lib/parsers/constants.js +2 -18
- package/dist/es5/lib/parsers/constants.js.map +1 -1
- package/dist/es5/lib/parsers/parse-arcgis-webscene.js +128 -30
- package/dist/es5/lib/parsers/parse-arcgis-webscene.js.map +1 -1
- package/dist/es5/lib/parsers/parse-i3s-attribute.js +1 -23
- package/dist/es5/lib/parsers/parse-i3s-attribute.js.map +1 -1
- package/dist/es5/lib/parsers/parse-i3s-building-scene-layer.js +8 -25
- package/dist/es5/lib/parsers/parse-i3s-building-scene-layer.js.map +1 -1
- package/dist/es5/lib/parsers/parse-i3s-tile-content.js +10 -124
- package/dist/es5/lib/parsers/parse-i3s-tile-content.js.map +1 -1
- package/dist/es5/lib/parsers/parse-i3s.js +5 -36
- package/dist/es5/lib/parsers/parse-i3s.js.map +1 -1
- package/dist/es5/lib/utils/convert-i3s-obb-to-mbs.js +0 -7
- package/dist/es5/lib/utils/convert-i3s-obb-to-mbs.js.map +1 -1
- package/dist/es5/lib/utils/customizeColors.js +4 -53
- package/dist/es5/lib/utils/customizeColors.js.map +1 -1
- package/dist/es5/lib/utils/url-utils.js +3 -8
- package/dist/es5/lib/utils/url-utils.js.map +1 -1
- package/dist/es5/types.js +0 -3
- package/dist/es5/types.js.map +1 -1
- package/dist/es5/workers/i3s-content-nodejs-worker.js +0 -3
- package/dist/es5/workers/i3s-content-nodejs-worker.js.map +1 -1
- package/dist/es5/workers/i3s-content-worker.js +0 -2
- package/dist/es5/workers/i3s-content-worker.js.map +1 -1
- package/dist/esm/arcgis-webscene-loader.js +3 -1
- package/dist/esm/arcgis-webscene-loader.js.map +1 -1
- package/dist/esm/bundle.js +1 -1
- package/dist/esm/bundle.js.map +1 -1
- package/dist/esm/i3s-attribute-loader.js +8 -25
- package/dist/esm/i3s-attribute-loader.js.map +1 -1
- package/dist/esm/i3s-building-scene-layer-loader.js +2 -3
- package/dist/esm/i3s-building-scene-layer-loader.js.map +1 -1
- package/dist/esm/i3s-content-loader.js +2 -4
- package/dist/esm/i3s-content-loader.js.map +1 -1
- package/dist/esm/i3s-loader.js +4 -13
- package/dist/esm/i3s-loader.js.map +1 -1
- package/dist/esm/i3s-node-page-loader.js +1 -2
- package/dist/esm/i3s-node-page-loader.js.map +1 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/lib/helpers/i3s-nodepages-tiles.js +2 -45
- package/dist/esm/lib/helpers/i3s-nodepages-tiles.js.map +1 -1
- package/dist/esm/lib/parsers/constants.js +1 -10
- package/dist/esm/lib/parsers/constants.js.map +1 -1
- package/dist/esm/lib/parsers/parse-arcgis-webscene.js +50 -11
- package/dist/esm/lib/parsers/parse-arcgis-webscene.js.map +1 -1
- package/dist/esm/lib/parsers/parse-i3s-attribute.js +1 -8
- package/dist/esm/lib/parsers/parse-i3s-attribute.js.map +1 -1
- package/dist/esm/lib/parsers/parse-i3s-building-scene-layer.js +1 -4
- package/dist/esm/lib/parsers/parse-i3s-building-scene-layer.js.map +1 -1
- package/dist/esm/lib/parsers/parse-i3s-tile-content.js +23 -71
- package/dist/esm/lib/parsers/parse-i3s-tile-content.js.map +1 -1
- package/dist/esm/lib/parsers/parse-i3s.js +15 -17
- package/dist/esm/lib/parsers/parse-i3s.js.map +1 -1
- package/dist/esm/lib/utils/convert-i3s-obb-to-mbs.js.map +1 -1
- package/dist/esm/lib/utils/customizeColors.js +24 -36
- package/dist/esm/lib/utils/customizeColors.js.map +1 -1
- package/dist/esm/lib/utils/url-utils.js +5 -5
- package/dist/esm/lib/utils/url-utils.js.map +1 -1
- package/dist/esm/types.js +0 -3
- package/dist/esm/types.js.map +1 -1
- package/dist/esm/workers/i3s-content-nodejs-worker.js.map +1 -1
- package/dist/esm/workers/i3s-content-worker.js.map +1 -1
- package/dist/i3s-content-nodejs-worker.js +61 -60
- package/dist/i3s-content-nodejs-worker.js.map +3 -3
- package/dist/i3s-content-worker.js +490 -1020
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/lib/parsers/parse-arcgis-webscene.d.ts.map +1 -1
- package/dist/lib/parsers/parse-arcgis-webscene.js +49 -7
- package/dist/types.d.ts +2 -1
- package/dist/types.d.ts.map +1 -1
- package/package.json +8 -8
- package/src/index.ts +6 -1
- package/src/lib/parsers/parse-arcgis-webscene.ts +57 -7
- package/src/types.ts +2 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"i3s-building-scene-layer-loader.js","names":["parseBuildingSceneLayer","VERSION","I3SBuildingSceneLayerLoader","name","id","module","version","mimeTypes","parse","extensions","options","data","context","url","Error"],"sources":["../../src/i3s-building-scene-layer-loader.ts"],"sourcesContent":["import type {LoaderWithParser, LoaderOptions, LoaderContext} from '@loaders.gl/loader-utils';\nimport type {BuildingSceneLayerTileset} from './types';\n\nimport {parseBuildingSceneLayer} from './lib/parsers/parse-i3s-building-scene-layer';\n\n// __VERSION__ is injected by babel-plugin-version-inline\n// @ts-ignore TS2304: Cannot find name '__VERSION__'.\n\nconst VERSION = typeof __VERSION__ !== 'undefined' ? __VERSION__ : 'beta';\n/**\n * Loader for I3S - Building Scene Layer\n */\nexport const I3SBuildingSceneLayerLoader: LoaderWithParser = {\n name: 'I3S Building Scene Layer',\n id: 'i3s-building-scene-layer',\n module: 'i3s',\n version: VERSION,\n mimeTypes: ['application/json'],\n parse,\n extensions: ['json'],\n options: {}\n};\n\nasync function parse(\n data: ArrayBuffer,\n options?: LoaderOptions,\n context?: LoaderContext\n): Promise<BuildingSceneLayerTileset> {\n if (!context?.url) {\n throw new Error('Url is not provided');\n }\n\n return parseBuildingSceneLayer(data, context.url);\n}\n"],"mappings":"AAGA,SAAQA,uBAAuB,QAAO,8CAA8C;;AAKpF,MAAMC,OAAO,GAAG,sBAAkB,KAAK,WAAW,qBAAiB,MAAM;AAIzE,OAAO,MAAMC,2BAA6C,GAAG;EAC3DC,IAAI,EAAE,0BAA0B;EAChCC,EAAE,EAAE,0BAA0B;EAC9BC,MAAM,EAAE,KAAK;EACbC,OAAO,EAAEL,OAAO;EAChBM,SAAS,EAAE,CAAC,kBAAkB,CAAC;EAC/BC,KAAK;EACLC,UAAU,EAAE,CAAC,MAAM,CAAC;EACpBC,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,eAAeF,KAAK,CAClBG,IAAiB,EACjBD,OAAuB,EACvBE,OAAuB,EACa;EACpC,IAAI,EAACA,OAAO,aAAPA,OAAO,eAAPA,OAAO,CAAEC,GAAG,GAAE;IACjB,MAAM,IAAIC,KAAK,CAAC,qBAAqB,CAAC;EACxC;EAEA,OAAOd,uBAAuB,CAACW,IAAI,EAAEC,OAAO,CAACC,GAAG,CAAC;AACnD"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { isBrowser } from '@loaders.gl/worker-utils';
|
|
2
2
|
import { parseI3STileContent } from './lib/parsers/parse-i3s-tile-content';
|
|
3
|
-
|
|
3
|
+
|
|
4
|
+
const VERSION = typeof "3.3.0-alpha.6" !== 'undefined' ? "3.3.0-alpha.6" : 'beta';
|
|
4
5
|
export const I3SContentLoader = {
|
|
5
6
|
name: 'I3S Content (Indexed Scene Layers)',
|
|
6
7
|
id: isBrowser ? 'i3s-content' : 'i3s-content-nodejs',
|
|
@@ -14,7 +15,6 @@ export const I3SContentLoader = {
|
|
|
14
15
|
'i3s-content': {}
|
|
15
16
|
}
|
|
16
17
|
};
|
|
17
|
-
|
|
18
18
|
async function parse(data, options, context) {
|
|
19
19
|
const {
|
|
20
20
|
tile,
|
|
@@ -24,11 +24,9 @@ async function parse(data, options, context) {
|
|
|
24
24
|
} = (options === null || options === void 0 ? void 0 : options.i3s) || {};
|
|
25
25
|
const tileOptions = _tileOptions || tile;
|
|
26
26
|
const tilesetOptions = _tilesetOptions || tileset;
|
|
27
|
-
|
|
28
27
|
if (!tileOptions || !tilesetOptions) {
|
|
29
28
|
return null;
|
|
30
29
|
}
|
|
31
|
-
|
|
32
30
|
return await parseI3STileContent(data, tileOptions, tilesetOptions, options, context);
|
|
33
31
|
}
|
|
34
32
|
//# sourceMappingURL=i3s-content-loader.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"i3s-content-loader.js","names":["isBrowser","parseI3STileContent","VERSION","I3SContentLoader","name","id","module","worker","version","mimeTypes","parse","extensions","options","data","context","tile","_tileOptions","tileset","_tilesetOptions","i3s","tileOptions","tilesetOptions"],"sources":["../../src/i3s-content-loader.ts"],"sourcesContent":["import {isBrowser} from '@loaders.gl/worker-utils';\nimport type {LoaderWithParser, LoaderContext} from '@loaders.gl/loader-utils';\nimport type {I3SLoaderOptions} from './i3s-loader';\nimport {parseI3STileContent} from './lib/parsers/parse-i3s-tile-content';\nimport {I3STileOptions, I3STilesetOptions} from './types';\n\n// __VERSION__ is injected by babel-plugin-version-inline\n// @ts-ignore TS2304: Cannot find name '__VERSION__'.\n\nconst VERSION = typeof __VERSION__ !== 'undefined' ? __VERSION__ : 'beta';\n/**\n * Loader for I3S - Indexed 3D Scene Layer\n */\nexport const I3SContentLoader: LoaderWithParser = {\n name: 'I3S Content (Indexed Scene Layers)',\n id: isBrowser ? 'i3s-content' : 'i3s-content-nodejs',\n module: 'i3s',\n worker: true,\n version: VERSION,\n mimeTypes: ['application/octet-stream'],\n parse,\n extensions: ['bin'],\n options: {\n 'i3s-content': {}\n }\n};\n\nasync function parse(data, options?: I3SLoaderOptions, context?: LoaderContext) {\n const {tile, _tileOptions, tileset, _tilesetOptions} = options?.i3s || {};\n const tileOptions = _tileOptions || tile;\n const tilesetOptions = _tilesetOptions || tileset;\n if (!tileOptions || !tilesetOptions) {\n return null;\n }\n return await parseI3STileContent(\n data,\n tileOptions as I3STileOptions,\n tilesetOptions as I3STilesetOptions,\n options,\n context\n );\n}\n"],"mappings":"AAAA,SAAQA,SAAS,QAAO,0BAA0B;AAGlD,SAAQC,mBAAmB,QAAO,sCAAsC;;AAMxE,MAAMC,OAAO,GAAG,sBAAkB,KAAK,WAAW,qBAAiB,MAAM;AAIzE,OAAO,MAAMC,gBAAkC,GAAG;EAChDC,IAAI,EAAE,oCAAoC;EAC1CC,EAAE,EAAEL,SAAS,GAAG,aAAa,GAAG,oBAAoB;EACpDM,MAAM,EAAE,KAAK;EACbC,MAAM,EAAE,IAAI;EACZC,OAAO,EAAEN,OAAO;EAChBO,SAAS,EAAE,CAAC,0BAA0B,CAAC;EACvCC,KAAK;EACLC,UAAU,EAAE,CAAC,KAAK,CAAC;EACnBC,OAAO,EAAE;IACP,aAAa,EAAE,CAAC;EAClB;AACF,CAAC;AAED,eAAeF,KAAK,CAACG,IAAI,EAAED,OAA0B,EAAEE,OAAuB,EAAE;EAC9E,MAAM;IAACC,IAAI;IAAEC,YAAY;IAAEC,OAAO;IAAEC;EAAe,CAAC,GAAG,CAAAN,OAAO,aAAPA,OAAO,uBAAPA,OAAO,CAAEO,GAAG,KAAI,CAAC,CAAC;EACzE,MAAMC,WAAW,GAAGJ,YAAY,IAAID,IAAI;EACxC,MAAMM,cAAc,GAAGH,eAAe,IAAID,OAAO;EACjD,IAAI,CAACG,WAAW,IAAI,CAACC,cAAc,EAAE;IACnC,OAAO,IAAI;EACb;EACA,OAAO,MAAMpB,mBAAmB,CAC9BY,IAAI,EACJO,WAAW,EACXC,cAAc,EACdT,OAAO,EACPE,OAAO,CACR;AACH"}
|
package/dist/esm/i3s-loader.js
CHANGED
|
@@ -2,7 +2,7 @@ import { parse } from '@loaders.gl/core';
|
|
|
2
2
|
import { I3SContentLoader } from './i3s-content-loader';
|
|
3
3
|
import { normalizeTileData, normalizeTilesetData } from './lib/parsers/parse-i3s';
|
|
4
4
|
import { COORDINATE_SYSTEM } from './lib/parsers/constants';
|
|
5
|
-
const VERSION = typeof "3.3.0-alpha.
|
|
5
|
+
const VERSION = typeof "3.3.0-alpha.6" !== 'undefined' ? "3.3.0-alpha.6" : 'latest';
|
|
6
6
|
const TILESET_REGEX = /layers\/[0-9]+$/;
|
|
7
7
|
const TILE_HEADER_REGEX = /nodes\/([0-9-]+|root)$/;
|
|
8
8
|
const SLPK_HEX = '504b0304';
|
|
@@ -31,8 +31,9 @@ export const I3SLoader = {
|
|
|
31
31
|
}
|
|
32
32
|
}
|
|
33
33
|
};
|
|
34
|
-
|
|
35
|
-
|
|
34
|
+
async function parseI3S(data) {
|
|
35
|
+
let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
36
|
+
let context = arguments.length > 2 ? arguments[2] : undefined;
|
|
36
37
|
const url = context.url;
|
|
37
38
|
options.i3s = options.i3s || {};
|
|
38
39
|
const magicNumber = getMagicNumber(data);
|
|
@@ -42,21 +43,17 @@ async function parseI3S(data, options = {}, context) {
|
|
|
42
43
|
}
|
|
43
44
|
|
|
44
45
|
let isTileset;
|
|
45
|
-
|
|
46
46
|
if (options.i3s.isTileset === 'auto') {
|
|
47
47
|
isTileset = TILESET_REGEX.test(url);
|
|
48
48
|
} else {
|
|
49
49
|
isTileset = options.i3s.isTileset;
|
|
50
50
|
}
|
|
51
|
-
|
|
52
51
|
let isTileHeader;
|
|
53
|
-
|
|
54
52
|
if (options.isTileHeader === 'auto') {
|
|
55
53
|
isTileHeader = TILE_HEADER_REGEX.test(url);
|
|
56
54
|
} else {
|
|
57
55
|
isTileHeader = options.i3s.isTileHeader;
|
|
58
56
|
}
|
|
59
|
-
|
|
60
57
|
if (isTileset) {
|
|
61
58
|
data = await parseTileset(data, options, context);
|
|
62
59
|
} else if (isTileHeader) {
|
|
@@ -64,31 +61,25 @@ async function parseI3S(data, options = {}, context) {
|
|
|
64
61
|
} else {
|
|
65
62
|
data = await parseTileContent(data, options);
|
|
66
63
|
}
|
|
67
|
-
|
|
68
64
|
return data;
|
|
69
65
|
}
|
|
70
|
-
|
|
71
66
|
async function parseTileContent(arrayBuffer, options) {
|
|
72
67
|
return await parse(arrayBuffer, I3SContentLoader, options);
|
|
73
68
|
}
|
|
74
|
-
|
|
75
69
|
async function parseTileset(data, options, context) {
|
|
76
70
|
const tilesetJson = JSON.parse(new TextDecoder().decode(data));
|
|
77
71
|
tilesetJson.loader = I3SLoader;
|
|
78
72
|
await normalizeTilesetData(tilesetJson, options, context);
|
|
79
73
|
return tilesetJson;
|
|
80
74
|
}
|
|
81
|
-
|
|
82
75
|
async function parseTile(data, context) {
|
|
83
76
|
data = JSON.parse(new TextDecoder().decode(data));
|
|
84
77
|
return normalizeTileData(data, context);
|
|
85
78
|
}
|
|
86
|
-
|
|
87
79
|
function getMagicNumber(data) {
|
|
88
80
|
if (data instanceof ArrayBuffer) {
|
|
89
81
|
return [...new Uint8Array(data, 0, 4)].map(value => value.toString(16).padStart(2, '0')).join('');
|
|
90
82
|
}
|
|
91
|
-
|
|
92
83
|
return null;
|
|
93
84
|
}
|
|
94
85
|
//# sourceMappingURL=i3s-loader.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"i3s-loader.js","names":["parse","I3SContentLoader","normalizeTileData","normalizeTilesetData","COORDINATE_SYSTEM","VERSION","TILESET_REGEX","TILE_HEADER_REGEX","SLPK_HEX","I3SLoader","name","id","module","version","mimeTypes","parseI3S","extensions","options","i3s","token","isTileset","isTileHeader","tile","tileset","_tileOptions","_tilesetOptions","useDracoGeometry","useCompressedTextures","decodeTextures","coordinateSystem","METER_OFFSETS","colorsByAttribute","data","context","url","magicNumber","getMagicNumber","Error","test","parseTileset","parseTile","parseTileContent","arrayBuffer","tilesetJson","JSON","TextDecoder","decode","loader","ArrayBuffer","Uint8Array","map","value","toString","padStart","join"],"sources":["../../src/i3s-loader.ts"],"sourcesContent":["import type {LoaderWithParser} from '@loaders.gl/loader-utils';\nimport {parse} from '@loaders.gl/core';\nimport {I3SContentLoader} from './i3s-content-loader';\nimport {normalizeTileData, normalizeTilesetData} from './lib/parsers/parse-i3s';\nimport {COORDINATE_SYSTEM} from './lib/parsers/constants';\nimport {I3SParseOptions} from './types';\nimport {LoaderOptions} from './../../loader-utils/src/types';\n\n// __VERSION__ is injected by babel-plugin-version-inline\n// @ts-ignore TS2304: Cannot find name '__VERSION__'.\nconst VERSION = typeof __VERSION__ !== 'undefined' ? __VERSION__ : 'latest';\n\nconst TILESET_REGEX = /layers\\/[0-9]+$/;\nconst TILE_HEADER_REGEX = /nodes\\/([0-9-]+|root)$/;\nconst SLPK_HEX = '504b0304';\n\nexport type I3SLoaderOptions = LoaderOptions & {\n i3s?: I3SParseOptions;\n};\n\n/**\n * Loader for I3S - Indexed 3D Scene Layer\n */\nexport const I3SLoader: LoaderWithParser = {\n name: 'I3S (Indexed Scene Layers)',\n id: 'i3s',\n module: 'i3s',\n version: VERSION,\n mimeTypes: ['application/octet-stream'],\n parse: parseI3S,\n extensions: ['bin'],\n options: {\n i3s: {\n token: null,\n isTileset: 'auto',\n isTileHeader: 'auto',\n tile: null,\n tileset: null,\n _tileOptions: null,\n _tilesetOptions: null,\n useDracoGeometry: true,\n useCompressedTextures: true,\n decodeTextures: true,\n coordinateSystem: COORDINATE_SYSTEM.METER_OFFSETS,\n colorsByAttribute: null\n }\n }\n};\n\nasync function parseI3S(data, options: I3SLoaderOptions = {}, context) {\n const url = context.url;\n options.i3s = options.i3s || {};\n const magicNumber = getMagicNumber(data);\n\n // check if file is slpk\n if (magicNumber === SLPK_HEX) {\n throw new Error('Files with .slpk extention currently are not supported by I3SLoader');\n }\n\n // auto detect file type based on url\n let isTileset;\n if (options.i3s.isTileset === 'auto') {\n isTileset = TILESET_REGEX.test(url);\n } else {\n isTileset = options.i3s.isTileset;\n }\n\n let isTileHeader;\n if (options.isTileHeader === 'auto') {\n isTileHeader = TILE_HEADER_REGEX.test(url);\n } else {\n isTileHeader = options.i3s.isTileHeader;\n }\n\n if (isTileset) {\n data = await parseTileset(data, options, context);\n } else if (isTileHeader) {\n data = await parseTile(data, context);\n } else {\n data = await parseTileContent(data, options);\n }\n\n return data;\n}\n\nasync function parseTileContent(arrayBuffer, options: I3SLoaderOptions) {\n return await parse(arrayBuffer, I3SContentLoader, options);\n}\n\nasync function parseTileset(data, options: I3SLoaderOptions, context) {\n const tilesetJson = JSON.parse(new TextDecoder().decode(data));\n // eslint-disable-next-line no-use-before-define\n tilesetJson.loader = I3SLoader;\n await normalizeTilesetData(tilesetJson, options, context);\n\n return tilesetJson;\n}\n\nasync function parseTile(data, context) {\n data = JSON.parse(new TextDecoder().decode(data));\n return normalizeTileData(data, context);\n}\n\nfunction getMagicNumber(data) {\n if (data instanceof ArrayBuffer) {\n // slice binary data (4 bytes from the beginning) and transform it to hexadecimal numeral system\n return [...new Uint8Array(data, 0, 4)]\n .map((value) => value.toString(16).padStart(2, '0'))\n .join('');\n }\n return null;\n}\n"],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
const VERSION = typeof "3.3.0-alpha.4" !== 'undefined' ? "3.3.0-alpha.4" : 'latest';
|
|
2
1
|
|
|
2
|
+
const VERSION = typeof "3.3.0-alpha.6" !== 'undefined' ? "3.3.0-alpha.6" : 'latest';
|
|
3
3
|
async function parseNodePage(data) {
|
|
4
4
|
return JSON.parse(new TextDecoder().decode(data));
|
|
5
5
|
}
|
|
@@ -14,7 +14,6 @@ export const I3SNodePageLoader = {
|
|
|
14
14
|
extensions: ['json'],
|
|
15
15
|
options: {}
|
|
16
16
|
};
|
|
17
|
-
|
|
18
17
|
async function parse(data) {
|
|
19
18
|
data = parseNodePage(data);
|
|
20
19
|
return data;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"i3s-node-page-loader.js","names":["VERSION","parseNodePage","data","JSON","parse","TextDecoder","decode","I3SNodePageLoader","name","id","module","version","mimeTypes","extensions","options"],"sources":["../../src/i3s-node-page-loader.ts"],"sourcesContent":["import type {LoaderWithParser} from '@loaders.gl/loader-utils';\n\n// __VERSION__ is injected by babel-plugin-version-inline\n// @ts-ignore TS2304: Cannot find name '__VERSION__'.\nconst VERSION = typeof __VERSION__ !== 'undefined' ? __VERSION__ : 'latest';\n\nasync function parseNodePage(data) {\n return JSON.parse(new TextDecoder().decode(data));\n}\n\n/**\n * Loader for I3S node pages\n */\nexport const I3SNodePageLoader: LoaderWithParser = {\n name: 'I3S Node Page',\n id: 'i3s-node-page',\n module: 'i3s',\n version: VERSION,\n mimeTypes: ['application/json'],\n parse,\n extensions: ['json'],\n options: {}\n};\n\nasync function parse(data) {\n data = parseNodePage(data);\n return data;\n}\n"],"mappings":";AAIA,MAAMA,OAAO,GAAG,sBAAkB,KAAK,WAAW,qBAAiB,QAAQ;AAE3E,eAAeC,aAAa,CAACC,IAAI,EAAE;EACjC,OAAOC,IAAI,CAACC,KAAK,CAAC,IAAIC,WAAW,EAAE,CAACC,MAAM,CAACJ,IAAI,CAAC,CAAC;AACnD;;AAKA,OAAO,MAAMK,iBAAmC,GAAG;EACjDC,IAAI,EAAE,eAAe;EACrBC,EAAE,EAAE,eAAe;EACnBC,MAAM,EAAE,KAAK;EACbC,OAAO,EAAEX,OAAO;EAChBY,SAAS,EAAE,CAAC,kBAAkB,CAAC;EAC/BR,KAAK;EACLS,UAAU,EAAE,CAAC,MAAM,CAAC;EACpBC,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,eAAeV,KAAK,CAACF,IAAI,EAAE;EACzBA,IAAI,GAAGD,aAAa,CAACC,IAAI,CAAC;EAC1B,OAAOA,IAAI;AACb"}
|
package/dist/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"index.js","names":["I3SLoader","I3SContentLoader","I3SAttributeLoader","loadFeatureAttributes","I3SBuildingSceneLayerLoader","ArcGisWebSceneLoader","COORDINATE_SYSTEM"],"sources":["../../src/index.ts"],"sourcesContent":["export {I3SLoader} from './i3s-loader';\nexport {I3SContentLoader} from './i3s-content-loader';\nexport {I3SAttributeLoader, loadFeatureAttributes} from './i3s-attribute-loader';\nexport {I3SBuildingSceneLayerLoader} from './i3s-building-scene-layer-loader';\nexport {ArcGisWebSceneLoader} from './arcgis-webscene-loader';\nexport type {\n BoundingVolumes,\n Mbs,\n Obb,\n SceneLayer3D,\n AttributeStorageInfo,\n Field,\n ESRIField,\n PopupInfo,\n Node3DIndexDocument,\n LodSelection,\n NodeReference,\n Resource,\n MaxScreenThresholdSQ,\n NodeInPage,\n SharedResources,\n Attribute,\n Extent,\n FeatureAttribute,\n FieldInfo,\n I3SMaterialDefinition,\n TextureDefinitionInfo,\n MaterialDefinitionInfo,\n FullExtent,\n StatisticsInfo,\n StatsInfo,\n Histogram,\n ValueCount,\n BuildingSceneSublayer,\n DATA_TYPE,\n OperationalLayer\n} from './types';\nexport {COORDINATE_SYSTEM} from './lib/parsers/constants';\n"],"mappings":"AAAA,SAAQA,SAAS,QAAO,cAAc;AACtC,SAAQC,gBAAgB,QAAO,sBAAsB;AACrD,SAAQC,kBAAkB,EAAEC,qBAAqB,QAAO,wBAAwB;AAChF,SAAQC,2BAA2B,QAAO,mCAAmC;AAC7E,SAAQC,oBAAoB,QAAO,0BAA0B;AAiC7D,SAAQC,iBAAiB,QAAO,yBAAyB"}
|
|
@@ -7,26 +7,17 @@ import { getUrlWithToken, generateTilesetAttributeUrls } from '../utils/url-util
|
|
|
7
7
|
export default class I3SNodePagesTiles {
|
|
8
8
|
constructor(tileset, options) {
|
|
9
9
|
var _tileset$nodePages, _tileset$nodePages2;
|
|
10
|
-
|
|
11
10
|
_defineProperty(this, "tileset", void 0);
|
|
12
|
-
|
|
13
11
|
_defineProperty(this, "nodePages", []);
|
|
14
|
-
|
|
15
12
|
_defineProperty(this, "pendingNodePages", []);
|
|
16
|
-
|
|
17
13
|
_defineProperty(this, "nodesPerPage", void 0);
|
|
18
|
-
|
|
19
14
|
_defineProperty(this, "options", void 0);
|
|
20
|
-
|
|
21
15
|
_defineProperty(this, "lodSelectionMetricType", void 0);
|
|
22
|
-
|
|
23
16
|
_defineProperty(this, "textureDefinitionsSelectedFormats", []);
|
|
24
|
-
|
|
25
17
|
_defineProperty(this, "nodesInNodePages", void 0);
|
|
26
|
-
|
|
27
18
|
_defineProperty(this, "textureLoaderOptions", {});
|
|
28
|
-
|
|
29
|
-
|
|
19
|
+
this.tileset = {
|
|
20
|
+
...tileset
|
|
30
21
|
};
|
|
31
22
|
this.nodesPerPage = ((_tileset$nodePages = tileset.nodePages) === null || _tileset$nodePages === void 0 ? void 0 : _tileset$nodePages.nodesPerPage) || 64;
|
|
32
23
|
this.lodSelectionMetricType = (_tileset$nodePages2 = tileset.nodePages) === null || _tileset$nodePages2 === void 0 ? void 0 : _tileset$nodePages2.lodSelectionMetricType;
|
|
@@ -37,10 +28,8 @@ export default class I3SNodePagesTiles {
|
|
|
37
28
|
|
|
38
29
|
async getNodeById(id) {
|
|
39
30
|
const pageIndex = Math.floor(id / this.nodesPerPage);
|
|
40
|
-
|
|
41
31
|
if (!this.nodePages[pageIndex] && !this.pendingNodePages[pageIndex]) {
|
|
42
32
|
var _this$options$i3s;
|
|
43
|
-
|
|
44
33
|
const nodePageUrl = getUrlWithToken("".concat(this.tileset.url, "/nodepages/").concat(pageIndex), (_this$options$i3s = this.options.i3s) === null || _this$options$i3s === void 0 ? void 0 : _this$options$i3s.token);
|
|
45
34
|
this.pendingNodePages[pageIndex] = {
|
|
46
35
|
status: 'Pending',
|
|
@@ -50,11 +39,9 @@ export default class I3SNodePagesTiles {
|
|
|
50
39
|
this.nodesInNodePages += this.nodePages[pageIndex].nodes.length;
|
|
51
40
|
this.pendingNodePages[pageIndex].status = 'Done';
|
|
52
41
|
}
|
|
53
|
-
|
|
54
42
|
if (this.pendingNodePages[pageIndex].status === 'Pending') {
|
|
55
43
|
this.nodePages[pageIndex] = await this.pendingNodePages[pageIndex].promise;
|
|
56
44
|
}
|
|
57
|
-
|
|
58
45
|
const nodeIndex = id % this.nodesPerPage;
|
|
59
46
|
return this.nodePages[pageIndex].nodes[nodeIndex];
|
|
60
47
|
}
|
|
@@ -63,27 +50,22 @@ export default class I3SNodePagesTiles {
|
|
|
63
50
|
const node = await this.getNodeById(id);
|
|
64
51
|
const children = [];
|
|
65
52
|
const childNodesPromises = [];
|
|
66
|
-
|
|
67
53
|
for (const child of node.children || []) {
|
|
68
54
|
childNodesPromises.push(this.getNodeById(child));
|
|
69
55
|
}
|
|
70
|
-
|
|
71
56
|
const childNodes = await Promise.all(childNodesPromises);
|
|
72
|
-
|
|
73
57
|
for (const childNode of childNodes) {
|
|
74
58
|
children.push({
|
|
75
59
|
id: childNode.index.toString(),
|
|
76
60
|
obb: childNode.obb
|
|
77
61
|
});
|
|
78
62
|
}
|
|
79
|
-
|
|
80
63
|
let contentUrl;
|
|
81
64
|
let textureUrl;
|
|
82
65
|
let materialDefinition;
|
|
83
66
|
let textureFormat = 'jpg';
|
|
84
67
|
let attributeUrls = [];
|
|
85
68
|
let isDracoGeometry = false;
|
|
86
|
-
|
|
87
69
|
if (node && node.mesh) {
|
|
88
70
|
const {
|
|
89
71
|
url,
|
|
@@ -99,16 +81,13 @@ export default class I3SNodePagesTiles {
|
|
|
99
81
|
} = this.getInformationFromMaterial(node.mesh.material);
|
|
100
82
|
materialDefinition = nodeMaterialDefinition;
|
|
101
83
|
textureFormat = textureData.format || textureFormat;
|
|
102
|
-
|
|
103
84
|
if (textureData.name) {
|
|
104
85
|
textureUrl = "".concat(this.tileset.url, "/nodes/").concat(node.mesh.material.resource, "/textures/").concat(textureData.name);
|
|
105
86
|
}
|
|
106
|
-
|
|
107
87
|
if (this.tileset.attributeStorageInfo) {
|
|
108
88
|
attributeUrls = generateTilesetAttributeUrls(this.tileset, node.mesh.attribute.resource);
|
|
109
89
|
}
|
|
110
90
|
}
|
|
111
|
-
|
|
112
91
|
const lodSelection = this.getLodSelection(node);
|
|
113
92
|
return normalizeTileNonUrlData({
|
|
114
93
|
id: id.toString(),
|
|
@@ -129,15 +108,12 @@ export default class I3SNodePagesTiles {
|
|
|
129
108
|
let result = null;
|
|
130
109
|
const geometryDefinition = this.tileset.geometryDefinitions[meshGeometryData.definition];
|
|
131
110
|
let geometryIndex = -1;
|
|
132
|
-
|
|
133
111
|
if (this.options.i3s && this.options.i3s.useDracoGeometry) {
|
|
134
112
|
geometryIndex = geometryDefinition.geometryBuffers.findIndex(buffer => buffer.compressedAttributes && buffer.compressedAttributes.encoding === 'draco');
|
|
135
113
|
}
|
|
136
|
-
|
|
137
114
|
if (geometryIndex === -1) {
|
|
138
115
|
geometryIndex = geometryDefinition.geometryBuffers.findIndex(buffer => !buffer.compressedAttributes);
|
|
139
116
|
}
|
|
140
|
-
|
|
141
117
|
if (geometryIndex !== -1) {
|
|
142
118
|
const isDracoGeometry = Boolean(geometryDefinition.geometryBuffers[geometryIndex].compressedAttributes);
|
|
143
119
|
result = {
|
|
@@ -145,20 +121,17 @@ export default class I3SNodePagesTiles {
|
|
|
145
121
|
isDracoGeometry
|
|
146
122
|
};
|
|
147
123
|
}
|
|
148
|
-
|
|
149
124
|
return result;
|
|
150
125
|
}
|
|
151
126
|
|
|
152
127
|
getLodSelection(node) {
|
|
153
128
|
const lodSelection = [];
|
|
154
|
-
|
|
155
129
|
if (this.lodSelectionMetricType === 'maxScreenThresholdSQ') {
|
|
156
130
|
lodSelection.push({
|
|
157
131
|
metricType: 'maxScreenThreshold',
|
|
158
132
|
maxError: Math.sqrt(node.lodThreshold / (Math.PI * 0.25))
|
|
159
133
|
});
|
|
160
134
|
}
|
|
161
|
-
|
|
162
135
|
lodSelection.push({
|
|
163
136
|
metricType: this.lodSelectionMetricType,
|
|
164
137
|
maxError: node.lodThreshold
|
|
@@ -172,24 +145,18 @@ export default class I3SNodePagesTiles {
|
|
|
172
145
|
name: null
|
|
173
146
|
}
|
|
174
147
|
};
|
|
175
|
-
|
|
176
148
|
if (material) {
|
|
177
149
|
var _this$tileset$materia;
|
|
178
|
-
|
|
179
150
|
const materialDefinition = (_this$tileset$materia = this.tileset.materialDefinitions) === null || _this$tileset$materia === void 0 ? void 0 : _this$tileset$materia[material.definition];
|
|
180
|
-
|
|
181
151
|
if (materialDefinition) {
|
|
182
152
|
var _materialDefinition$p, _materialDefinition$p2;
|
|
183
|
-
|
|
184
153
|
informationFromMaterial.materialDefinition = materialDefinition;
|
|
185
154
|
const textureSetDefinitionIndex = materialDefinition === null || materialDefinition === void 0 ? void 0 : (_materialDefinition$p = materialDefinition.pbrMetallicRoughness) === null || _materialDefinition$p === void 0 ? void 0 : (_materialDefinition$p2 = _materialDefinition$p.baseColorTexture) === null || _materialDefinition$p2 === void 0 ? void 0 : _materialDefinition$p2.textureSetDefinitionId;
|
|
186
|
-
|
|
187
155
|
if (typeof textureSetDefinitionIndex === 'number') {
|
|
188
156
|
informationFromMaterial.textureData = this.textureDefinitionsSelectedFormats[textureSetDefinitionIndex] || informationFromMaterial.textureData;
|
|
189
157
|
}
|
|
190
158
|
}
|
|
191
159
|
}
|
|
192
|
-
|
|
193
160
|
return informationFromMaterial;
|
|
194
161
|
}
|
|
195
162
|
|
|
@@ -197,20 +164,16 @@ export default class I3SNodePagesTiles {
|
|
|
197
164
|
this.textureDefinitionsSelectedFormats = [];
|
|
198
165
|
const possibleI3sFormats = this.getSupportedTextureFormats();
|
|
199
166
|
const textureSetDefinitions = tileset.textureSetDefinitions || [];
|
|
200
|
-
|
|
201
167
|
for (const textureSetDefinition of textureSetDefinitions) {
|
|
202
168
|
const formats = textureSetDefinition && textureSetDefinition.formats || [];
|
|
203
169
|
let selectedFormat = null;
|
|
204
|
-
|
|
205
170
|
for (const i3sFormat of possibleI3sFormats) {
|
|
206
171
|
const format = formats.find(value => value.format === i3sFormat);
|
|
207
|
-
|
|
208
172
|
if (format) {
|
|
209
173
|
selectedFormat = format;
|
|
210
174
|
break;
|
|
211
175
|
}
|
|
212
176
|
}
|
|
213
|
-
|
|
214
177
|
if (selectedFormat && selectedFormat.format === 'ktx2') {
|
|
215
178
|
this.textureLoaderOptions.basis = {
|
|
216
179
|
format: selectSupportedBasisFormat(),
|
|
@@ -218,32 +181,26 @@ export default class I3SNodePagesTiles {
|
|
|
218
181
|
module: 'encoder'
|
|
219
182
|
};
|
|
220
183
|
}
|
|
221
|
-
|
|
222
184
|
this.textureDefinitionsSelectedFormats.push(selectedFormat);
|
|
223
185
|
}
|
|
224
186
|
}
|
|
225
187
|
|
|
226
188
|
getSupportedTextureFormats() {
|
|
227
189
|
const formats = [];
|
|
228
|
-
|
|
229
190
|
if (!this.options.i3s || this.options.i3s.useCompressedTextures) {
|
|
230
191
|
const supportedCompressedFormats = getSupportedGPUTextureFormats();
|
|
231
|
-
|
|
232
192
|
if (supportedCompressedFormats.has('etc2')) {
|
|
233
193
|
formats.push('ktx-etc2');
|
|
234
194
|
}
|
|
235
|
-
|
|
236
195
|
if (supportedCompressedFormats.has('dxt')) {
|
|
237
196
|
formats.push('dds');
|
|
238
197
|
}
|
|
239
198
|
|
|
240
199
|
formats.push('ktx2');
|
|
241
200
|
}
|
|
242
|
-
|
|
243
201
|
formats.push('jpg');
|
|
244
202
|
formats.push('png');
|
|
245
203
|
return formats;
|
|
246
204
|
}
|
|
247
|
-
|
|
248
205
|
}
|
|
249
206
|
//# sourceMappingURL=i3s-nodepages-tiles.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/lib/helpers/i3s-nodepages-tiles.ts"],"names":["load","getSupportedGPUTextureFormats","selectSupportedBasisFormat","I3SNodePageLoader","normalizeTileNonUrlData","getUrlWithToken","generateTilesetAttributeUrls","I3SNodePagesTiles","constructor","tileset","options","nodesPerPage","nodePages","lodSelectionMetricType","nodesInNodePages","initSelectedFormatsForTextureDefinitions","getNodeById","id","pageIndex","Math","floor","pendingNodePages","nodePageUrl","url","i3s","token","status","promise","nodes","length","nodeIndex","formTileFromNodePages","node","children","childNodesPromises","child","push","childNodes","Promise","all","childNode","index","toString","obb","contentUrl","textureUrl","materialDefinition","textureFormat","attributeUrls","isDracoGeometry","mesh","isDracoGeometryResult","geometry","getContentUrl","textureData","nodeMaterialDefinition","getInformationFromMaterial","material","format","name","resource","attributeStorageInfo","attribute","lodSelection","getLodSelection","textureLoaderOptions","meshGeometryData","result","geometryDefinition","geometryDefinitions","definition","geometryIndex","useDracoGeometry","geometryBuffers","findIndex","buffer","compressedAttributes","encoding","Boolean","metricType","maxError","sqrt","lodThreshold","PI","informationFromMaterial","materialDefinitions","textureSetDefinitionIndex","pbrMetallicRoughness","baseColorTexture","textureSetDefinitionId","textureDefinitionsSelectedFormats","possibleI3sFormats","getSupportedTextureFormats","textureSetDefinitions","textureSetDefinition","formats","selectedFormat","i3sFormat","find","value","basis","containerFormat","module","useCompressedTextures","supportedCompressedFormats","has"],"mappings":";AAAA,SAAQA,IAAR,QAAmB,kBAAnB;AACA,SAAQC,6BAAR,EAAuCC,0BAAvC,QAAwE,sBAAxE;AACA,SAAQC,iBAAR,QAAgC,4BAAhC;AACA,SAAQC,uBAAR,QAAsC,sBAAtC;AACA,SAAQC,eAAR,EAAyBC,4BAAzB,QAA4D,oBAA5D;AAkBA,eAAe,MAAMC,iBAAN,CAAwB;AAiBrCC,EAAAA,WAAW,CAACC,OAAD,EAA4BC,OAA5B,EAAoD;AAAA;;AAAA;;AAAA,uCAfvC,EAeuC;;AAAA,8CAdgB,EAchB;;AAAA;;AAAA;;AAAA;;AAAA,+DAV0B,EAU1B;;AAAA;;AAAA,kDARV,EAQU;;AAC7D,SAAKD,OAAL,GAAe,EAAC,GAAGA;AAAJ,KAAf;AACA,SAAKE,YAAL,GAAoB,uBAAAF,OAAO,CAACG,SAAR,0EAAmBD,YAAnB,KAAmC,EAAvD;AACA,SAAKE,sBAAL,0BAA8BJ,OAAO,CAACG,SAAtC,wDAA8B,oBAAmBC,sBAAjD;AACA,SAAKH,OAAL,GAAeA,OAAf;AACA,SAAKI,gBAAL,GAAwB,CAAxB;AAEA,SAAKC,wCAAL,CAA8CN,OAA9C;AACD;;AAMgB,QAAXO,WAAW,CAACC,EAAD,EAAkC;AACjD,UAAMC,SAAS,GAAGC,IAAI,CAACC,KAAL,CAAWH,EAAE,GAAG,KAAKN,YAArB,CAAlB;;AACA,QAAI,CAAC,KAAKC,SAAL,CAAeM,SAAf,CAAD,IAA8B,CAAC,KAAKG,gBAAL,CAAsBH,SAAtB,CAAnC,EAAqE;AAAA;;AACnE,YAAMI,WAAW,GAAGjB,eAAe,WAC9B,KAAKI,OAAL,CAAac,GADiB,wBACAL,SADA,wBAEjC,KAAKR,OAAL,CAAac,GAFoB,sDAEjC,kBAAkBC,KAFe,CAAnC;AAIA,WAAKJ,gBAAL,CAAsBH,SAAtB,IAAmC;AACjCQ,QAAAA,MAAM,EAAE,SADyB;AAEjCC,QAAAA,OAAO,EAAE3B,IAAI,CAACsB,WAAD,EAAcnB,iBAAd,EAAiC,KAAKO,OAAtC;AAFoB,OAAnC;AAIA,WAAKE,SAAL,CAAeM,SAAf,IAA4B,MAAM,KAAKG,gBAAL,CAAsBH,SAAtB,EAAiCS,OAAnE;AACA,WAAKb,gBAAL,IAAyB,KAAKF,SAAL,CAAeM,SAAf,EAA0BU,KAA1B,CAAgCC,MAAzD;AACA,WAAKR,gBAAL,CAAsBH,SAAtB,EAAiCQ,MAAjC,GAA0C,MAA1C;AACD;;AACD,QAAI,KAAKL,gBAAL,CAAsBH,SAAtB,EAAiCQ,MAAjC,KAA4C,SAAhD,EAA2D;AACzD,WAAKd,SAAL,CAAeM,SAAf,IAA4B,MAAM,KAAKG,gBAAL,CAAsBH,SAAtB,EAAiCS,OAAnE;AACD;;AACD,UAAMG,SAAS,GAAGb,EAAE,GAAG,KAAKN,YAA5B;AACA,WAAO,KAAKC,SAAL,CAAeM,SAAf,EAA0BU,KAA1B,CAAgCE,SAAhC,CAAP;AACD;;AAO0B,QAArBC,qBAAqB,CAACd,EAAD,EAAqC;AAC9D,UAAMe,IAAgB,GAAG,MAAM,KAAKhB,WAAL,CAAiBC,EAAjB,CAA/B;AACA,UAAMgB,QAAkC,GAAG,EAA3C;AACA,UAAMC,kBAAyC,GAAG,EAAlD;;AACA,SAAK,MAAMC,KAAX,IAAoBH,IAAI,CAACC,QAAL,IAAiB,EAArC,EAAyC;AACvCC,MAAAA,kBAAkB,CAACE,IAAnB,CAAwB,KAAKpB,WAAL,CAAiBmB,KAAjB,CAAxB;AACD;;AAED,UAAME,UAAU,GAAG,MAAMC,OAAO,CAACC,GAAR,CAAYL,kBAAZ,CAAzB;;AACA,SAAK,MAAMM,SAAX,IAAwBH,UAAxB,EAAoC;AAClCJ,MAAAA,QAAQ,CAACG,IAAT,CAAc;AACZnB,QAAAA,EAAE,EAAEuB,SAAS,CAACC,KAAV,CAAgBC,QAAhB,EADQ;AAEZC,QAAAA,GAAG,EAAEH,SAAS,CAACG;AAFH,OAAd;AAID;;AAED,QAAIC,UAAJ;AACA,QAAIC,UAAJ;AACA,QAAIC,kBAAJ;AACA,QAAIC,aAA+B,GAAG,KAAtC;AACA,QAAIC,aAAuB,GAAG,EAA9B;AACA,QAAIC,eAAwB,GAAG,KAA/B;;AAEA,QAAIjB,IAAI,IAAIA,IAAI,CAACkB,IAAjB,EAAuB;AAErB,YAAM;AAAC3B,QAAAA,GAAD;AAAM0B,QAAAA,eAAe,EAAEE;AAAvB,UAAiDnB,IAAI,CAACkB,IAAL,CAAUE,QAAV,IACrD,KAAKC,aAAL,CAAmBrB,IAAI,CAACkB,IAAL,CAAUE,QAA7B,CADoD,IACT;AAACH,QAAAA,eAAe,EAAE;AAAlB,OAD7C;AAEAL,MAAAA,UAAU,GAAGrB,GAAb;AACA0B,MAAAA,eAAe,GAAGE,qBAAlB;AAEA,YAAM;AAACG,QAAAA,WAAD;AAAcR,QAAAA,kBAAkB,EAAES;AAAlC,UACJ,KAAKC,0BAAL,CAAgCxB,IAAI,CAACkB,IAAL,CAAUO,QAA1C,CADF;AAEAX,MAAAA,kBAAkB,GAAGS,sBAArB;AACAR,MAAAA,aAAa,GAAGO,WAAW,CAACI,MAAZ,IAAsBX,aAAtC;;AACA,UAAIO,WAAW,CAACK,IAAhB,EAAsB;AACpBd,QAAAA,UAAU,aAAM,KAAKpC,OAAL,CAAac,GAAnB,oBAAgCS,IAAI,CAACkB,IAAL,CAAUO,QAAV,CAAmBG,QAAnD,uBAAwEN,WAAW,CAACK,IAApF,CAAV;AACD;;AAED,UAAI,KAAKlD,OAAL,CAAaoD,oBAAjB,EAAuC;AACrCb,QAAAA,aAAa,GAAG1C,4BAA4B,CAAC,KAAKG,OAAN,EAAeuB,IAAI,CAACkB,IAAL,CAAUY,SAAV,CAAoBF,QAAnC,CAA5C;AACD;AACF;;AAED,UAAMG,YAAY,GAAG,KAAKC,eAAL,CAAqBhC,IAArB,CAArB;AAEA,WAAO5B,uBAAuB,CAAC;AAC7Ba,MAAAA,EAAE,EAAEA,EAAE,CAACyB,QAAH,EADyB;AAE7BqB,MAAAA,YAF6B;AAG7BpB,MAAAA,GAAG,EAAEX,IAAI,CAACW,GAHmB;AAI7BC,MAAAA,UAJ6B;AAK7BC,MAAAA,UAL6B;AAM7BG,MAAAA,aAN6B;AAO7BF,MAAAA,kBAP6B;AAQ7BC,MAAAA,aAR6B;AAS7BkB,MAAAA,oBAAoB,EAAE,KAAKA,oBATE;AAU7BhC,MAAAA,QAV6B;AAW7BgB,MAAAA;AAX6B,KAAD,CAA9B;AAaD;;AASOI,EAAAA,aAAa,CAACa,gBAAD,EAAiC;AACpD,QAAIC,MAAsD,GAAG,IAA7D;AAEA,UAAMC,kBAAkB,GAAG,KAAK3D,OAAL,CAAa4D,mBAAb,CAAiCH,gBAAgB,CAACI,UAAlD,CAA3B;AACA,QAAIC,aAAa,GAAG,CAAC,CAArB;;AAEA,QAAI,KAAK7D,OAAL,CAAac,GAAb,IAAoB,KAAKd,OAAL,CAAac,GAAb,CAAiBgD,gBAAzC,EAA2D;AACzDD,MAAAA,aAAa,GAAGH,kBAAkB,CAACK,eAAnB,CAAmCC,SAAnC,CACbC,MAAD,IAAYA,MAAM,CAACC,oBAAP,IAA+BD,MAAM,CAACC,oBAAP,CAA4BC,QAA5B,KAAyC,OADtE,CAAhB;AAGD;;AAED,QAAIN,aAAa,KAAK,CAAC,CAAvB,EAA0B;AACxBA,MAAAA,aAAa,GAAGH,kBAAkB,CAACK,eAAnB,CAAmCC,SAAnC,CACbC,MAAD,IAAY,CAACA,MAAM,CAACC,oBADN,CAAhB;AAGD;;AACD,QAAIL,aAAa,KAAK,CAAC,CAAvB,EAA0B;AACxB,YAAMtB,eAAe,GAAG6B,OAAO,CAC7BV,kBAAkB,CAACK,eAAnB,CAAmCF,aAAnC,EAAkDK,oBADrB,CAA/B;AAGAT,MAAAA,MAAM,GAAG;AACP5C,QAAAA,GAAG,YAAK,KAAKd,OAAL,CAAac,GAAlB,oBAA+B2C,gBAAgB,CAACN,QAAhD,yBAAuEW,aAAvE,CADI;AAEPtB,QAAAA;AAFO,OAAT;AAID;;AACD,WAAOkB,MAAP;AACD;;AAOOH,EAAAA,eAAe,CAAChC,IAAD,EAAmC;AACxD,UAAM+B,YAA4B,GAAG,EAArC;;AACA,QAAI,KAAKlD,sBAAL,KAAgC,sBAApC,EAA4D;AAC1DkD,MAAAA,YAAY,CAAC3B,IAAb,CAAkB;AAChB2C,QAAAA,UAAU,EAAE,oBADI;AAGhBC,QAAAA,QAAQ,EAAE7D,IAAI,CAAC8D,IAAL,CAAUjD,IAAI,CAACkD,YAAL,IAAqB/D,IAAI,CAACgE,EAAL,GAAU,IAA/B,CAAV;AAHM,OAAlB;AAKD;;AACDpB,IAAAA,YAAY,CAAC3B,IAAb,CAAkB;AAChB2C,MAAAA,UAAU,EAAE,KAAKlE,sBADD;AAGhBmE,MAAAA,QAAQ,EAAEhD,IAAI,CAACkD;AAHC,KAAlB;AAKA,WAAOnB,YAAP;AACD;;AAUOP,EAAAA,0BAA0B,CAACC,QAAD,EAAyB;AACzD,UAAM2B,uBAGL,GAAG;AAAC9B,MAAAA,WAAW,EAAE;AAACK,QAAAA,IAAI,EAAE;AAAP;AAAd,KAHJ;;AAKA,QAAIF,QAAJ,EAAc;AAAA;;AACZ,YAAMX,kBAAkB,4BAAG,KAAKrC,OAAL,CAAa4E,mBAAhB,0DAAG,sBAAmC5B,QAAQ,CAACa,UAA5C,CAA3B;;AACA,UAAIxB,kBAAJ,EAAwB;AAAA;;AACtBsC,QAAAA,uBAAuB,CAACtC,kBAAxB,GAA6CA,kBAA7C;AACA,cAAMwC,yBAAyB,GAC7BxC,kBAD6B,aAC7BA,kBAD6B,gDAC7BA,kBAAkB,CAAEyC,oBADS,oFAC7B,sBAA0CC,gBADb,2DAC7B,uBAA4DC,sBAD9D;;AAGA,YAAI,OAAOH,yBAAP,KAAqC,QAAzC,EAAmD;AACjDF,UAAAA,uBAAuB,CAAC9B,WAAxB,GACE,KAAKoC,iCAAL,CAAuCJ,yBAAvC,KACAF,uBAAuB,CAAC9B,WAF1B;AAGD;AACF;AACF;;AACD,WAAO8B,uBAAP;AACD;;AAOOrE,EAAAA,wCAAwC,CAACN,OAAD,EAAkC;AAChF,SAAKiF,iCAAL,GAAyC,EAAzC;AACA,UAAMC,kBAAkB,GAAG,KAAKC,0BAAL,EAA3B;AACA,UAAMC,qBAAqB,GAAGpF,OAAO,CAACoF,qBAAR,IAAiC,EAA/D;;AACA,SAAK,MAAMC,oBAAX,IAAmCD,qBAAnC,EAA0D;AACxD,YAAME,OAAO,GAAID,oBAAoB,IAAIA,oBAAoB,CAACC,OAA9C,IAA0D,EAA1E;AACA,UAAIC,cAA+D,GAAG,IAAtE;;AACA,WAAK,MAAMC,SAAX,IAAwBN,kBAAxB,EAA4C;AAC1C,cAAMjC,MAAM,GAAGqC,OAAO,CAACG,IAAR,CAAcC,KAAD,IAAWA,KAAK,CAACzC,MAAN,KAAiBuC,SAAzC,CAAf;;AACA,YAAIvC,MAAJ,EAAY;AACVsC,UAAAA,cAAc,GAAGtC,MAAjB;AACA;AACD;AACF;;AAED,UAAIsC,cAAc,IAAIA,cAAc,CAACtC,MAAf,KAA0B,MAAhD,EAAwD;AACtD,aAAKO,oBAAL,CAA0BmC,KAA1B,GAAkC;AAChC1C,UAAAA,MAAM,EAAExD,0BAA0B,EADF;AAEhCmG,UAAAA,eAAe,EAAE,MAFe;AAGhCC,UAAAA,MAAM,EAAE;AAHwB,SAAlC;AAKD;;AAED,WAAKZ,iCAAL,CAAuCtD,IAAvC,CAA4C4D,cAA5C;AACD;AACF;;AAMOJ,EAAAA,0BAA0B,GAAuB;AACvD,UAAMG,OAA2B,GAAG,EAApC;;AACA,QAAI,CAAC,KAAKrF,OAAL,CAAac,GAAd,IAAqB,KAAKd,OAAL,CAAac,GAAb,CAAiB+E,qBAA1C,EAAiE;AAE/D,YAAMC,0BAA0B,GAAGvG,6BAA6B,EAAhE;;AAGA,UAAIuG,0BAA0B,CAACC,GAA3B,CAA+B,MAA/B,CAAJ,EAA4C;AAC1CV,QAAAA,OAAO,CAAC3D,IAAR,CAAa,UAAb;AACD;;AACD,UAAIoE,0BAA0B,CAACC,GAA3B,CAA+B,KAA/B,CAAJ,EAA2C;AACzCV,QAAAA,OAAO,CAAC3D,IAAR,CAAa,KAAb;AACD;;AAID2D,MAAAA,OAAO,CAAC3D,IAAR,CAAa,MAAb;AACD;;AAED2D,IAAAA,OAAO,CAAC3D,IAAR,CAAa,KAAb;AACA2D,IAAAA,OAAO,CAAC3D,IAAR,CAAa,KAAb;AACA,WAAO2D,OAAP;AACD;;AAzQoC","sourcesContent":["import {load} from '@loaders.gl/core';\nimport {getSupportedGPUTextureFormats, selectSupportedBasisFormat} from '@loaders.gl/textures';\nimport {I3SNodePageLoader} from '../../i3s-node-page-loader';\nimport {normalizeTileNonUrlData} from '../parsers/parse-i3s';\nimport {getUrlWithToken, generateTilesetAttributeUrls} from '../utils/url-utils';\nimport type {LoaderOptions} from '@loaders.gl/loader-utils';\nimport {\n I3STilesetHeader,\n LodSelection,\n NodePage,\n NodeInPage,\n Obb,\n MeshMaterial,\n I3SMaterialDefinition,\n I3STextureFormat,\n MeshGeometry,\n I3STileHeader\n} from '../../types';\n\n/**\n * class I3SNodePagesTiles - loads nodePages and form i3s tiles from them\n */\nexport default class I3SNodePagesTiles {\n tileset: I3STilesetHeader;\n nodePages: NodePage[] = [];\n pendingNodePages: {promise: Promise<NodePage>; status: 'Pending' | 'Done'}[] = [];\n nodesPerPage: number;\n options: LoaderOptions;\n lodSelectionMetricType?: string;\n textureDefinitionsSelectedFormats: ({format: I3STextureFormat; name: string} | null)[] = [];\n nodesInNodePages: number;\n private textureLoaderOptions: {[key: string]: any} = {};\n\n /**\n * @constructs\n * Create a I3SNodePagesTiles instance.\n * @param tileset - i3s tileset header ('layers/0')\n * @param options - i3s loader options\n */\n constructor(tileset: I3STilesetHeader, options: LoaderOptions) {\n this.tileset = {...tileset}; // spread the tileset to avoid circular reference\n this.nodesPerPage = tileset.nodePages?.nodesPerPage || 64;\n this.lodSelectionMetricType = tileset.nodePages?.lodSelectionMetricType;\n this.options = options;\n this.nodesInNodePages = 0;\n\n this.initSelectedFormatsForTextureDefinitions(tileset);\n }\n\n /**\n * Loads some nodePage and return a particular node from it\n * @param id - id of node through all node pages\n */\n async getNodeById(id: number): Promise<NodeInPage> {\n const pageIndex = Math.floor(id / this.nodesPerPage);\n if (!this.nodePages[pageIndex] && !this.pendingNodePages[pageIndex]) {\n const nodePageUrl = getUrlWithToken(\n `${this.tileset.url}/nodepages/${pageIndex}`,\n this.options.i3s?.token\n );\n this.pendingNodePages[pageIndex] = {\n status: 'Pending',\n promise: load(nodePageUrl, I3SNodePageLoader, this.options)\n };\n this.nodePages[pageIndex] = await this.pendingNodePages[pageIndex].promise;\n this.nodesInNodePages += this.nodePages[pageIndex].nodes.length;\n this.pendingNodePages[pageIndex].status = 'Done';\n }\n if (this.pendingNodePages[pageIndex].status === 'Pending') {\n this.nodePages[pageIndex] = await this.pendingNodePages[pageIndex].promise;\n }\n const nodeIndex = id % this.nodesPerPage;\n return this.nodePages[pageIndex].nodes[nodeIndex];\n }\n\n /**\n * Forms tile header using node and tileset data\n * @param id - id of node through all node pages\n */\n // eslint-disable-next-line complexity, max-statements\n async formTileFromNodePages(id: number): Promise<I3STileHeader> {\n const node: NodeInPage = await this.getNodeById(id);\n const children: {id: string; obb: Obb}[] = [];\n const childNodesPromises: Promise<NodeInPage>[] = [];\n for (const child of node.children || []) {\n childNodesPromises.push(this.getNodeById(child));\n }\n\n const childNodes = await Promise.all(childNodesPromises);\n for (const childNode of childNodes) {\n children.push({\n id: childNode.index.toString(),\n obb: childNode.obb\n });\n }\n\n let contentUrl: string | undefined;\n let textureUrl: string | undefined;\n let materialDefinition: I3SMaterialDefinition | undefined;\n let textureFormat: I3STextureFormat = 'jpg';\n let attributeUrls: string[] = [];\n let isDracoGeometry: boolean = false;\n\n if (node && node.mesh) {\n // Get geometry resource URL and type (compressed / non-compressed)\n const {url, isDracoGeometry: isDracoGeometryResult} = (node.mesh.geometry &&\n this.getContentUrl(node.mesh.geometry)) || {isDracoGeometry: false};\n contentUrl = url;\n isDracoGeometry = isDracoGeometryResult;\n\n const {textureData, materialDefinition: nodeMaterialDefinition} =\n this.getInformationFromMaterial(node.mesh.material);\n materialDefinition = nodeMaterialDefinition;\n textureFormat = textureData.format || textureFormat;\n if (textureData.name) {\n textureUrl = `${this.tileset.url}/nodes/${node.mesh.material.resource}/textures/${textureData.name}`;\n }\n\n if (this.tileset.attributeStorageInfo) {\n attributeUrls = generateTilesetAttributeUrls(this.tileset, node.mesh.attribute.resource);\n }\n }\n\n const lodSelection = this.getLodSelection(node);\n\n return normalizeTileNonUrlData({\n id: id.toString(),\n lodSelection,\n obb: node.obb,\n contentUrl,\n textureUrl,\n attributeUrls,\n materialDefinition,\n textureFormat,\n textureLoaderOptions: this.textureLoaderOptions,\n children,\n isDracoGeometry\n });\n }\n\n /**\n * Forms url and type of geometry resource by nodepage's data and `geometryDefinitions` in the tileset\n * @param - data about the node's mesh from the nodepage\n * @returns -\n * {string} url - url to the geometry resource\n * {boolean} isDracoGeometry - whether the geometry resource contain DRACO compressed geometry\n */\n private getContentUrl(meshGeometryData: MeshGeometry) {\n let result: {url: string; isDracoGeometry: boolean} | null = null;\n // @ts-ignore\n const geometryDefinition = this.tileset.geometryDefinitions[meshGeometryData.definition];\n let geometryIndex = -1;\n // Try to find DRACO geometryDefinition of `useDracoGeometry` option is set\n if (this.options.i3s && this.options.i3s.useDracoGeometry) {\n geometryIndex = geometryDefinition.geometryBuffers.findIndex(\n (buffer) => buffer.compressedAttributes && buffer.compressedAttributes.encoding === 'draco'\n );\n }\n // If DRACO geometry is not applicable try to select non-compressed geometry\n if (geometryIndex === -1) {\n geometryIndex = geometryDefinition.geometryBuffers.findIndex(\n (buffer) => !buffer.compressedAttributes\n );\n }\n if (geometryIndex !== -1) {\n const isDracoGeometry = Boolean(\n geometryDefinition.geometryBuffers[geometryIndex].compressedAttributes\n );\n result = {\n url: `${this.tileset.url}/nodes/${meshGeometryData.resource}/geometries/${geometryIndex}`,\n isDracoGeometry\n };\n }\n return result;\n }\n\n /**\n * Forms 1.6 compatible LOD selection object from a nodepage's node data\n * @param node - a node from nodepage\n * @returns- Array of LodSelection\n */\n private getLodSelection(node: NodeInPage): LodSelection[] {\n const lodSelection: LodSelection[] = [];\n if (this.lodSelectionMetricType === 'maxScreenThresholdSQ') {\n lodSelection.push({\n metricType: 'maxScreenThreshold',\n // @ts-ignore\n maxError: Math.sqrt(node.lodThreshold / (Math.PI * 0.25))\n });\n }\n lodSelection.push({\n metricType: this.lodSelectionMetricType,\n // @ts-ignore\n maxError: node.lodThreshold\n });\n return lodSelection;\n }\n\n /**\n * Returns information about texture and material from `materialDefinitions`\n * @param material - material data from nodepage\n * @returns - Couple {textureData, materialDefinition}\n * {string} textureData.name - path name of the texture\n * {string} textureData.format - format of the texture\n * materialDefinition - PBR-like material definition from `materialDefinitions`\n */\n private getInformationFromMaterial(material: MeshMaterial) {\n const informationFromMaterial: {\n textureData: {name: string | null; format?: I3STextureFormat};\n materialDefinition?: I3SMaterialDefinition;\n } = {textureData: {name: null}};\n\n if (material) {\n const materialDefinition = this.tileset.materialDefinitions?.[material.definition];\n if (materialDefinition) {\n informationFromMaterial.materialDefinition = materialDefinition;\n const textureSetDefinitionIndex =\n materialDefinition?.pbrMetallicRoughness?.baseColorTexture?.textureSetDefinitionId;\n\n if (typeof textureSetDefinitionIndex === 'number') {\n informationFromMaterial.textureData =\n this.textureDefinitionsSelectedFormats[textureSetDefinitionIndex] ||\n informationFromMaterial.textureData;\n }\n }\n }\n return informationFromMaterial;\n }\n\n /**\n * Sets preferable and supported format for each textureDefinition of the tileset\n * @param tileset - I3S layer data\n * @returns\n */\n private initSelectedFormatsForTextureDefinitions(tileset: I3STilesetHeader): void {\n this.textureDefinitionsSelectedFormats = [];\n const possibleI3sFormats = this.getSupportedTextureFormats();\n const textureSetDefinitions = tileset.textureSetDefinitions || [];\n for (const textureSetDefinition of textureSetDefinitions) {\n const formats = (textureSetDefinition && textureSetDefinition.formats) || [];\n let selectedFormat: {name: string; format: I3STextureFormat} | null = null;\n for (const i3sFormat of possibleI3sFormats) {\n const format = formats.find((value) => value.format === i3sFormat);\n if (format) {\n selectedFormat = format;\n break;\n }\n }\n // For I3S 1.8 need to define basis target format to decode\n if (selectedFormat && selectedFormat.format === 'ktx2') {\n this.textureLoaderOptions.basis = {\n format: selectSupportedBasisFormat(),\n containerFormat: 'ktx2',\n module: 'encoder'\n };\n }\n\n this.textureDefinitionsSelectedFormats.push(selectedFormat);\n }\n }\n\n /**\n * Returns the array of supported texture format\n * @returns list of format strings\n */\n private getSupportedTextureFormats(): I3STextureFormat[] {\n const formats: I3STextureFormat[] = [];\n if (!this.options.i3s || this.options.i3s.useCompressedTextures) {\n // I3S 1.7 selection\n const supportedCompressedFormats = getSupportedGPUTextureFormats();\n // List of possible in i3s formats:\n // https://github.com/Esri/i3s-spec/blob/master/docs/1.7/textureSetDefinitionFormat.cmn.md\n if (supportedCompressedFormats.has('etc2')) {\n formats.push('ktx-etc2');\n }\n if (supportedCompressedFormats.has('dxt')) {\n formats.push('dds');\n }\n\n // I3S 1.8 selection\n // ktx2 wraps basis texture which at the edge case can be decoded as uncompressed image\n formats.push('ktx2');\n }\n\n formats.push('jpg');\n formats.push('png');\n return formats;\n }\n}\n"],"file":"i3s-nodepages-tiles.js"}
|
|
1
|
+
{"version":3,"file":"i3s-nodepages-tiles.js","names":["load","getSupportedGPUTextureFormats","selectSupportedBasisFormat","I3SNodePageLoader","normalizeTileNonUrlData","getUrlWithToken","generateTilesetAttributeUrls","I3SNodePagesTiles","constructor","tileset","options","nodesPerPage","nodePages","lodSelectionMetricType","nodesInNodePages","initSelectedFormatsForTextureDefinitions","getNodeById","id","pageIndex","Math","floor","pendingNodePages","nodePageUrl","url","i3s","token","status","promise","nodes","length","nodeIndex","formTileFromNodePages","node","children","childNodesPromises","child","push","childNodes","Promise","all","childNode","index","toString","obb","contentUrl","textureUrl","materialDefinition","textureFormat","attributeUrls","isDracoGeometry","mesh","isDracoGeometryResult","geometry","getContentUrl","textureData","nodeMaterialDefinition","getInformationFromMaterial","material","format","name","resource","attributeStorageInfo","attribute","lodSelection","getLodSelection","textureLoaderOptions","meshGeometryData","result","geometryDefinition","geometryDefinitions","definition","geometryIndex","useDracoGeometry","geometryBuffers","findIndex","buffer","compressedAttributes","encoding","Boolean","metricType","maxError","sqrt","lodThreshold","PI","informationFromMaterial","materialDefinitions","textureSetDefinitionIndex","pbrMetallicRoughness","baseColorTexture","textureSetDefinitionId","textureDefinitionsSelectedFormats","possibleI3sFormats","getSupportedTextureFormats","textureSetDefinitions","textureSetDefinition","formats","selectedFormat","i3sFormat","find","value","basis","containerFormat","module","useCompressedTextures","supportedCompressedFormats","has"],"sources":["../../../../src/lib/helpers/i3s-nodepages-tiles.ts"],"sourcesContent":["import {load} from '@loaders.gl/core';\nimport {getSupportedGPUTextureFormats, selectSupportedBasisFormat} from '@loaders.gl/textures';\nimport {I3SNodePageLoader} from '../../i3s-node-page-loader';\nimport {normalizeTileNonUrlData} from '../parsers/parse-i3s';\nimport {getUrlWithToken, generateTilesetAttributeUrls} from '../utils/url-utils';\nimport type {LoaderOptions} from '@loaders.gl/loader-utils';\nimport {\n I3STilesetHeader,\n LodSelection,\n NodePage,\n NodeInPage,\n Obb,\n MeshMaterial,\n I3SMaterialDefinition,\n I3STextureFormat,\n MeshGeometry,\n I3STileHeader\n} from '../../types';\n\n/**\n * class I3SNodePagesTiles - loads nodePages and form i3s tiles from them\n */\nexport default class I3SNodePagesTiles {\n tileset: I3STilesetHeader;\n nodePages: NodePage[] = [];\n pendingNodePages: {promise: Promise<NodePage>; status: 'Pending' | 'Done'}[] = [];\n nodesPerPage: number;\n options: LoaderOptions;\n lodSelectionMetricType?: string;\n textureDefinitionsSelectedFormats: ({format: I3STextureFormat; name: string} | null)[] = [];\n nodesInNodePages: number;\n private textureLoaderOptions: {[key: string]: any} = {};\n\n /**\n * @constructs\n * Create a I3SNodePagesTiles instance.\n * @param tileset - i3s tileset header ('layers/0')\n * @param options - i3s loader options\n */\n constructor(tileset: I3STilesetHeader, options: LoaderOptions) {\n this.tileset = {...tileset}; // spread the tileset to avoid circular reference\n this.nodesPerPage = tileset.nodePages?.nodesPerPage || 64;\n this.lodSelectionMetricType = tileset.nodePages?.lodSelectionMetricType;\n this.options = options;\n this.nodesInNodePages = 0;\n\n this.initSelectedFormatsForTextureDefinitions(tileset);\n }\n\n /**\n * Loads some nodePage and return a particular node from it\n * @param id - id of node through all node pages\n */\n async getNodeById(id: number): Promise<NodeInPage> {\n const pageIndex = Math.floor(id / this.nodesPerPage);\n if (!this.nodePages[pageIndex] && !this.pendingNodePages[pageIndex]) {\n const nodePageUrl = getUrlWithToken(\n `${this.tileset.url}/nodepages/${pageIndex}`,\n this.options.i3s?.token\n );\n this.pendingNodePages[pageIndex] = {\n status: 'Pending',\n promise: load(nodePageUrl, I3SNodePageLoader, this.options)\n };\n this.nodePages[pageIndex] = await this.pendingNodePages[pageIndex].promise;\n this.nodesInNodePages += this.nodePages[pageIndex].nodes.length;\n this.pendingNodePages[pageIndex].status = 'Done';\n }\n if (this.pendingNodePages[pageIndex].status === 'Pending') {\n this.nodePages[pageIndex] = await this.pendingNodePages[pageIndex].promise;\n }\n const nodeIndex = id % this.nodesPerPage;\n return this.nodePages[pageIndex].nodes[nodeIndex];\n }\n\n /**\n * Forms tile header using node and tileset data\n * @param id - id of node through all node pages\n */\n // eslint-disable-next-line complexity, max-statements\n async formTileFromNodePages(id: number): Promise<I3STileHeader> {\n const node: NodeInPage = await this.getNodeById(id);\n const children: {id: string; obb: Obb}[] = [];\n const childNodesPromises: Promise<NodeInPage>[] = [];\n for (const child of node.children || []) {\n childNodesPromises.push(this.getNodeById(child));\n }\n\n const childNodes = await Promise.all(childNodesPromises);\n for (const childNode of childNodes) {\n children.push({\n id: childNode.index.toString(),\n obb: childNode.obb\n });\n }\n\n let contentUrl: string | undefined;\n let textureUrl: string | undefined;\n let materialDefinition: I3SMaterialDefinition | undefined;\n let textureFormat: I3STextureFormat = 'jpg';\n let attributeUrls: string[] = [];\n let isDracoGeometry: boolean = false;\n\n if (node && node.mesh) {\n // Get geometry resource URL and type (compressed / non-compressed)\n const {url, isDracoGeometry: isDracoGeometryResult} = (node.mesh.geometry &&\n this.getContentUrl(node.mesh.geometry)) || {isDracoGeometry: false};\n contentUrl = url;\n isDracoGeometry = isDracoGeometryResult;\n\n const {textureData, materialDefinition: nodeMaterialDefinition} =\n this.getInformationFromMaterial(node.mesh.material);\n materialDefinition = nodeMaterialDefinition;\n textureFormat = textureData.format || textureFormat;\n if (textureData.name) {\n textureUrl = `${this.tileset.url}/nodes/${node.mesh.material.resource}/textures/${textureData.name}`;\n }\n\n if (this.tileset.attributeStorageInfo) {\n attributeUrls = generateTilesetAttributeUrls(this.tileset, node.mesh.attribute.resource);\n }\n }\n\n const lodSelection = this.getLodSelection(node);\n\n return normalizeTileNonUrlData({\n id: id.toString(),\n lodSelection,\n obb: node.obb,\n contentUrl,\n textureUrl,\n attributeUrls,\n materialDefinition,\n textureFormat,\n textureLoaderOptions: this.textureLoaderOptions,\n children,\n isDracoGeometry\n });\n }\n\n /**\n * Forms url and type of geometry resource by nodepage's data and `geometryDefinitions` in the tileset\n * @param - data about the node's mesh from the nodepage\n * @returns -\n * {string} url - url to the geometry resource\n * {boolean} isDracoGeometry - whether the geometry resource contain DRACO compressed geometry\n */\n private getContentUrl(meshGeometryData: MeshGeometry) {\n let result: {url: string; isDracoGeometry: boolean} | null = null;\n // @ts-ignore\n const geometryDefinition = this.tileset.geometryDefinitions[meshGeometryData.definition];\n let geometryIndex = -1;\n // Try to find DRACO geometryDefinition of `useDracoGeometry` option is set\n if (this.options.i3s && this.options.i3s.useDracoGeometry) {\n geometryIndex = geometryDefinition.geometryBuffers.findIndex(\n (buffer) => buffer.compressedAttributes && buffer.compressedAttributes.encoding === 'draco'\n );\n }\n // If DRACO geometry is not applicable try to select non-compressed geometry\n if (geometryIndex === -1) {\n geometryIndex = geometryDefinition.geometryBuffers.findIndex(\n (buffer) => !buffer.compressedAttributes\n );\n }\n if (geometryIndex !== -1) {\n const isDracoGeometry = Boolean(\n geometryDefinition.geometryBuffers[geometryIndex].compressedAttributes\n );\n result = {\n url: `${this.tileset.url}/nodes/${meshGeometryData.resource}/geometries/${geometryIndex}`,\n isDracoGeometry\n };\n }\n return result;\n }\n\n /**\n * Forms 1.6 compatible LOD selection object from a nodepage's node data\n * @param node - a node from nodepage\n * @returns- Array of LodSelection\n */\n private getLodSelection(node: NodeInPage): LodSelection[] {\n const lodSelection: LodSelection[] = [];\n if (this.lodSelectionMetricType === 'maxScreenThresholdSQ') {\n lodSelection.push({\n metricType: 'maxScreenThreshold',\n // @ts-ignore\n maxError: Math.sqrt(node.lodThreshold / (Math.PI * 0.25))\n });\n }\n lodSelection.push({\n metricType: this.lodSelectionMetricType,\n // @ts-ignore\n maxError: node.lodThreshold\n });\n return lodSelection;\n }\n\n /**\n * Returns information about texture and material from `materialDefinitions`\n * @param material - material data from nodepage\n * @returns - Couple {textureData, materialDefinition}\n * {string} textureData.name - path name of the texture\n * {string} textureData.format - format of the texture\n * materialDefinition - PBR-like material definition from `materialDefinitions`\n */\n private getInformationFromMaterial(material: MeshMaterial) {\n const informationFromMaterial: {\n textureData: {name: string | null; format?: I3STextureFormat};\n materialDefinition?: I3SMaterialDefinition;\n } = {textureData: {name: null}};\n\n if (material) {\n const materialDefinition = this.tileset.materialDefinitions?.[material.definition];\n if (materialDefinition) {\n informationFromMaterial.materialDefinition = materialDefinition;\n const textureSetDefinitionIndex =\n materialDefinition?.pbrMetallicRoughness?.baseColorTexture?.textureSetDefinitionId;\n\n if (typeof textureSetDefinitionIndex === 'number') {\n informationFromMaterial.textureData =\n this.textureDefinitionsSelectedFormats[textureSetDefinitionIndex] ||\n informationFromMaterial.textureData;\n }\n }\n }\n return informationFromMaterial;\n }\n\n /**\n * Sets preferable and supported format for each textureDefinition of the tileset\n * @param tileset - I3S layer data\n * @returns\n */\n private initSelectedFormatsForTextureDefinitions(tileset: I3STilesetHeader): void {\n this.textureDefinitionsSelectedFormats = [];\n const possibleI3sFormats = this.getSupportedTextureFormats();\n const textureSetDefinitions = tileset.textureSetDefinitions || [];\n for (const textureSetDefinition of textureSetDefinitions) {\n const formats = (textureSetDefinition && textureSetDefinition.formats) || [];\n let selectedFormat: {name: string; format: I3STextureFormat} | null = null;\n for (const i3sFormat of possibleI3sFormats) {\n const format = formats.find((value) => value.format === i3sFormat);\n if (format) {\n selectedFormat = format;\n break;\n }\n }\n // For I3S 1.8 need to define basis target format to decode\n if (selectedFormat && selectedFormat.format === 'ktx2') {\n this.textureLoaderOptions.basis = {\n format: selectSupportedBasisFormat(),\n containerFormat: 'ktx2',\n module: 'encoder'\n };\n }\n\n this.textureDefinitionsSelectedFormats.push(selectedFormat);\n }\n }\n\n /**\n * Returns the array of supported texture format\n * @returns list of format strings\n */\n private getSupportedTextureFormats(): I3STextureFormat[] {\n const formats: I3STextureFormat[] = [];\n if (!this.options.i3s || this.options.i3s.useCompressedTextures) {\n // I3S 1.7 selection\n const supportedCompressedFormats = getSupportedGPUTextureFormats();\n // List of possible in i3s formats:\n // https://github.com/Esri/i3s-spec/blob/master/docs/1.7/textureSetDefinitionFormat.cmn.md\n if (supportedCompressedFormats.has('etc2')) {\n formats.push('ktx-etc2');\n }\n if (supportedCompressedFormats.has('dxt')) {\n formats.push('dds');\n }\n\n // I3S 1.8 selection\n // ktx2 wraps basis texture which at the edge case can be decoded as uncompressed image\n formats.push('ktx2');\n }\n\n formats.push('jpg');\n formats.push('png');\n return formats;\n }\n}\n"],"mappings":"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"}
|
|
@@ -4,19 +4,14 @@ export function getConstructorForDataFormat(dataType) {
|
|
|
4
4
|
switch (dataType) {
|
|
5
5
|
case DATA_TYPE.UInt8:
|
|
6
6
|
return Uint8Array;
|
|
7
|
-
|
|
8
7
|
case DATA_TYPE.UInt16:
|
|
9
8
|
return Uint16Array;
|
|
10
|
-
|
|
11
9
|
case DATA_TYPE.UInt32:
|
|
12
10
|
return Uint32Array;
|
|
13
|
-
|
|
14
11
|
case DATA_TYPE.Float32:
|
|
15
12
|
return Float32Array;
|
|
16
|
-
|
|
17
13
|
case DATA_TYPE.UInt64:
|
|
18
14
|
return Float64Array;
|
|
19
|
-
|
|
20
15
|
default:
|
|
21
16
|
throw new Error("parse i3s tile content: unknown type of data: ".concat(dataType));
|
|
22
17
|
}
|
|
@@ -32,21 +27,17 @@ export function sizeOf(dataType) {
|
|
|
32
27
|
switch (dataType) {
|
|
33
28
|
case DATA_TYPE.UInt8:
|
|
34
29
|
return 1;
|
|
35
|
-
|
|
36
30
|
case DATA_TYPE.UInt16:
|
|
37
31
|
case DATA_TYPE.Int16:
|
|
38
32
|
return 2;
|
|
39
|
-
|
|
40
33
|
case DATA_TYPE.UInt32:
|
|
41
34
|
case DATA_TYPE.Int32:
|
|
42
35
|
case DATA_TYPE.Float32:
|
|
43
36
|
return 4;
|
|
44
|
-
|
|
45
37
|
case DATA_TYPE.UInt64:
|
|
46
38
|
case DATA_TYPE.Int64:
|
|
47
39
|
case DATA_TYPE.Float64:
|
|
48
40
|
return 8;
|
|
49
|
-
|
|
50
41
|
default:
|
|
51
42
|
throw new Error("parse i3s tile content: unknown size of data: ".concat(dataType));
|
|
52
43
|
}
|
|
@@ -55,8 +46,8 @@ export const STRING_ATTRIBUTE_TYPE = 'String';
|
|
|
55
46
|
export const OBJECT_ID_ATTRIBUTE_TYPE = 'Oid32';
|
|
56
47
|
export const FLOAT_64_TYPE = 'Float64';
|
|
57
48
|
export const INT_16_ATTRIBUTE_TYPE = 'Int16';
|
|
58
|
-
export let COORDINATE_SYSTEM;
|
|
59
49
|
|
|
50
|
+
export let COORDINATE_SYSTEM;
|
|
60
51
|
(function (COORDINATE_SYSTEM) {
|
|
61
52
|
COORDINATE_SYSTEM[COORDINATE_SYSTEM["DEFAULT"] = -1] = "DEFAULT";
|
|
62
53
|
COORDINATE_SYSTEM[COORDINATE_SYSTEM["LNGLAT"] = 1] = "LNGLAT";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"constants.js","names":["GL","DATA_TYPE","getConstructorForDataFormat","dataType","UInt8","Uint8Array","UInt16","Uint16Array","UInt32","Uint32Array","Float32","Float32Array","UInt64","Float64Array","Error","GL_TYPE_MAP","UNSIGNED_BYTE","UNSIGNED_INT","FLOAT","DOUBLE","sizeOf","Int16","Int32","Int64","Float64","STRING_ATTRIBUTE_TYPE","OBJECT_ID_ATTRIBUTE_TYPE","FLOAT_64_TYPE","INT_16_ATTRIBUTE_TYPE","COORDINATE_SYSTEM"],"sources":["../../../../src/lib/parsers/constants.ts"],"sourcesContent":["import GL from '@luma.gl/constants';\nimport {DATA_TYPE} from '../../types';\n\nexport function getConstructorForDataFormat(dataType: string) {\n switch (dataType) {\n case DATA_TYPE.UInt8:\n return Uint8Array;\n case DATA_TYPE.UInt16:\n return Uint16Array;\n case DATA_TYPE.UInt32:\n return Uint32Array;\n case DATA_TYPE.Float32:\n return Float32Array;\n case DATA_TYPE.UInt64:\n return Float64Array;\n default:\n throw new Error(`parse i3s tile content: unknown type of data: ${dataType}`);\n }\n}\n\nexport const GL_TYPE_MAP: {[key: string]: number} = {\n UInt8: GL.UNSIGNED_BYTE,\n UInt16: GL.UNSIGNED_INT,\n Float32: GL.FLOAT,\n UInt32: GL.UNSIGNED_INT,\n UInt64: GL.DOUBLE\n};\n/**\n * Returns how many bytes a type occupies\n * @param dataType\n * @returns\n */\nexport function sizeOf(dataType: string): number {\n switch (dataType) {\n case DATA_TYPE.UInt8:\n return 1;\n case DATA_TYPE.UInt16:\n case DATA_TYPE.Int16:\n return 2;\n case DATA_TYPE.UInt32:\n case DATA_TYPE.Int32:\n case DATA_TYPE.Float32:\n return 4;\n case DATA_TYPE.UInt64:\n case DATA_TYPE.Int64:\n case DATA_TYPE.Float64:\n return 8;\n default:\n throw new Error(`parse i3s tile content: unknown size of data: ${dataType}`);\n }\n}\n\nexport const STRING_ATTRIBUTE_TYPE = 'String';\nexport const OBJECT_ID_ATTRIBUTE_TYPE = 'Oid32';\nexport const FLOAT_64_TYPE = 'Float64';\nexport const INT_16_ATTRIBUTE_TYPE = 'Int16';\n\n// https://github.com/visgl/deck.gl/blob/9548f43cba2234a1f4877b6b17f6c88eb35b2e08/modules/core/src/lib/constants.js#L27\n// Describes the format of positions\nexport enum COORDINATE_SYSTEM {\n /**\n * `LNGLAT` if rendering into a geospatial viewport, `CARTESIAN` otherwise\n */\n DEFAULT = -1,\n /**\n * Positions are interpreted as [lng, lat, elevation]\n * lng lat are degrees, elevation is meters. distances as meters.\n */\n LNGLAT = 1,\n /**\n * Positions are interpreted as meter offsets, distances as meters\n */\n METER_OFFSETS = 2,\n /**\n * Positions are interpreted as lng lat offsets: [deltaLng, deltaLat, elevation]\n * deltaLng, deltaLat are delta degrees, elevation is meters.\n * distances as meters.\n */\n LNGLAT_OFFSETS = 3,\n /**\n * Non-geospatial\n */\n CARTESIAN = 0\n}\n"],"mappings":"AAAA,OAAOA,EAAE,MAAM,oBAAoB;AACnC,SAAQC,SAAS,QAAO,aAAa;AAErC,OAAO,SAASC,2BAA2B,CAACC,QAAgB,EAAE;EAC5D,QAAQA,QAAQ;IACd,KAAKF,SAAS,CAACG,KAAK;MAClB,OAAOC,UAAU;IACnB,KAAKJ,SAAS,CAACK,MAAM;MACnB,OAAOC,WAAW;IACpB,KAAKN,SAAS,CAACO,MAAM;MACnB,OAAOC,WAAW;IACpB,KAAKR,SAAS,CAACS,OAAO;MACpB,OAAOC,YAAY;IACrB,KAAKV,SAAS,CAACW,MAAM;MACnB,OAAOC,YAAY;IACrB;MACE,MAAM,IAAIC,KAAK,yDAAkDX,QAAQ,EAAG;EAAC;AAEnF;AAEA,OAAO,MAAMY,WAAoC,GAAG;EAClDX,KAAK,EAAEJ,EAAE,CAACgB,aAAa;EACvBV,MAAM,EAAEN,EAAE,CAACiB,YAAY;EACvBP,OAAO,EAAEV,EAAE,CAACkB,KAAK;EACjBV,MAAM,EAAER,EAAE,CAACiB,YAAY;EACvBL,MAAM,EAAEZ,EAAE,CAACmB;AACb,CAAC;AAMD,OAAO,SAASC,MAAM,CAACjB,QAAgB,EAAU;EAC/C,QAAQA,QAAQ;IACd,KAAKF,SAAS,CAACG,KAAK;MAClB,OAAO,CAAC;IACV,KAAKH,SAAS,CAACK,MAAM;IACrB,KAAKL,SAAS,CAACoB,KAAK;MAClB,OAAO,CAAC;IACV,KAAKpB,SAAS,CAACO,MAAM;IACrB,KAAKP,SAAS,CAACqB,KAAK;IACpB,KAAKrB,SAAS,CAACS,OAAO;MACpB,OAAO,CAAC;IACV,KAAKT,SAAS,CAACW,MAAM;IACrB,KAAKX,SAAS,CAACsB,KAAK;IACpB,KAAKtB,SAAS,CAACuB,OAAO;MACpB,OAAO,CAAC;IACV;MACE,MAAM,IAAIV,KAAK,yDAAkDX,QAAQ,EAAG;EAAC;AAEnF;AAEA,OAAO,MAAMsB,qBAAqB,GAAG,QAAQ;AAC7C,OAAO,MAAMC,wBAAwB,GAAG,OAAO;AAC/C,OAAO,MAAMC,aAAa,GAAG,SAAS;AACtC,OAAO,MAAMC,qBAAqB,GAAG,OAAO;;AAI5C,WAAYC,iBAAiB;AAwB5B,WAxBWA,iBAAiB;EAAjBA,iBAAiB,CAAjBA,iBAAiB;EAAjBA,iBAAiB,CAAjBA,iBAAiB;EAAjBA,iBAAiB,CAAjBA,iBAAiB;EAAjBA,iBAAiB,CAAjBA,iBAAiB;EAAjBA,iBAAiB,CAAjBA,iBAAiB;AAAA,GAAjBA,iBAAiB,KAAjBA,iBAAiB"}
|