@loaders.gl/i3s 4.2.0-alpha.1 → 4.2.0-alpha.2
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/arcgis-webscene-loader.js +1 -1
- package/dist/dist.dev.js +290 -59
- package/dist/i3s-attribute-loader.js +1 -1
- package/dist/i3s-building-scene-layer-loader.js +1 -1
- package/dist/i3s-content-loader.js +1 -1
- package/dist/i3s-content-worker-node.js +22 -22
- package/dist/i3s-content-worker-node.js.map +3 -3
- package/dist/i3s-content-worker.js +25 -8
- package/dist/i3s-loader.js +1 -1
- package/dist/i3s-node-page-loader.js +1 -1
- package/dist/i3s-slpk-loader.js +1 -1
- package/dist/index.cjs +54 -23
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/lib/helpers/i3s-nodepages-tiles.d.ts.map +1 -1
- package/dist/lib/helpers/i3s-nodepages-tiles.js +1 -1
- package/dist/lib/helpers/i3s-nodepages-tiles.js.map +1 -1
- package/dist/lib/parsers/parse-i3s-tile-content.d.ts.map +1 -1
- package/dist/lib/parsers/parse-i3s-tile-content.js +13 -1
- package/dist/lib/parsers/parse-i3s-tile-content.js.map +1 -1
- package/dist/lib/parsers/parse-slpk/parse-slpk.d.ts +1 -1
- package/dist/lib/parsers/parse-slpk/parse-slpk.d.ts.map +1 -1
- package/dist/lib/parsers/parse-slpk/parse-slpk.js +2 -2
- package/dist/lib/parsers/parse-slpk/parse-slpk.js.map +1 -1
- package/dist/lib/parsers/parse-slpk/slpk-archieve.d.ts +10 -6
- package/dist/lib/parsers/parse-slpk/slpk-archieve.d.ts.map +1 -1
- package/dist/lib/parsers/parse-slpk/slpk-archieve.js +23 -15
- package/dist/lib/parsers/parse-slpk/slpk-archieve.js.map +1 -1
- package/package.json +10 -10
- package/src/index.ts +1 -1
- package/src/lib/helpers/i3s-nodepages-tiles.ts +3 -1
- package/src/lib/parsers/parse-i3s-tile-content.ts +25 -2
- package/src/lib/parsers/parse-slpk/parse-slpk.ts +3 -2
- package/src/lib/parsers/parse-slpk/slpk-archieve.ts +34 -23
|
@@ -106,7 +106,7 @@
|
|
|
106
106
|
);
|
|
107
107
|
globalThis._loadersgl_.version = NPM_TAG;
|
|
108
108
|
} else {
|
|
109
|
-
globalThis._loadersgl_.version = "4.2.0-alpha.
|
|
109
|
+
globalThis._loadersgl_.version = "4.2.0-alpha.2";
|
|
110
110
|
}
|
|
111
111
|
}
|
|
112
112
|
return globalThis._loadersgl_.version;
|
|
@@ -1442,7 +1442,7 @@
|
|
|
1442
1442
|
var navigator_ = globalThis.navigator || {};
|
|
1443
1443
|
|
|
1444
1444
|
// ../../node_modules/@probe.gl/log/node_modules/@probe.gl/env/dist/utils/globals.js
|
|
1445
|
-
var VERSION2 = true ? "4.2.0-alpha.
|
|
1445
|
+
var VERSION2 = true ? "4.2.0-alpha.2" : "untranspiled source";
|
|
1446
1446
|
var isBrowser4 = isBrowser3();
|
|
1447
1447
|
|
|
1448
1448
|
// ../../node_modules/@probe.gl/log/dist/utils/local-storage.js
|
|
@@ -5310,7 +5310,7 @@
|
|
|
5310
5310
|
_defineProperty(Ellipsoid, "WGS84", new Ellipsoid(WGS84_RADIUS_X, WGS84_RADIUS_Y, WGS84_RADIUS_Z));
|
|
5311
5311
|
|
|
5312
5312
|
// ../images/src/lib/utils/version.ts
|
|
5313
|
-
var VERSION3 = true ? "4.2.0-alpha.
|
|
5313
|
+
var VERSION3 = true ? "4.2.0-alpha.2" : "latest";
|
|
5314
5314
|
|
|
5315
5315
|
// ../images/src/lib/category-api/image-type.ts
|
|
5316
5316
|
var parseImageNode = globalThis.loaders?.parseImageNode;
|
|
@@ -5716,7 +5716,7 @@
|
|
|
5716
5716
|
};
|
|
5717
5717
|
|
|
5718
5718
|
// ../draco/src/lib/utils/version.ts
|
|
5719
|
-
var VERSION4 = true ? "4.2.0-alpha.
|
|
5719
|
+
var VERSION4 = true ? "4.2.0-alpha.2" : "latest";
|
|
5720
5720
|
|
|
5721
5721
|
// ../draco/src/draco-loader.ts
|
|
5722
5722
|
var DracoLoader = {
|
|
@@ -6319,7 +6319,7 @@
|
|
|
6319
6319
|
}
|
|
6320
6320
|
|
|
6321
6321
|
// ../textures/src/lib/utils/version.ts
|
|
6322
|
-
var VERSION5 = true ? "4.2.0-alpha.
|
|
6322
|
+
var VERSION5 = true ? "4.2.0-alpha.2" : "latest";
|
|
6323
6323
|
|
|
6324
6324
|
// ../textures/src/lib/parsers/basis-module-loader.ts
|
|
6325
6325
|
var BASIS_EXTERNAL_LIBRARIES = {
|
|
@@ -7481,7 +7481,11 @@
|
|
|
7481
7481
|
texture: null
|
|
7482
7482
|
};
|
|
7483
7483
|
if (tileOptions.textureUrl) {
|
|
7484
|
-
const url = getUrlWithToken(
|
|
7484
|
+
const url = getUrlWithToken(
|
|
7485
|
+
getInternalPathFromUrl(tileOptions.textureUrl),
|
|
7486
|
+
// @ts-expect-error options is not properly typed
|
|
7487
|
+
options?.i3s?.token
|
|
7488
|
+
);
|
|
7485
7489
|
const loader = getLoaderForTextureFormat(tileOptions.textureFormat);
|
|
7486
7490
|
const fetchFunc = context?.fetch || fetch;
|
|
7487
7491
|
const response = await fetchFunc(url);
|
|
@@ -7519,6 +7523,18 @@
|
|
|
7519
7523
|
}
|
|
7520
7524
|
return await parseI3SNodeGeometry(arrayBuffer, content, tileOptions, tilesetOptions, options);
|
|
7521
7525
|
}
|
|
7526
|
+
function getInternalPathFromUrl(url) {
|
|
7527
|
+
const slpkUrlParts = url.split(".slpk");
|
|
7528
|
+
let filename2;
|
|
7529
|
+
if (slpkUrlParts.length === 1) {
|
|
7530
|
+
filename2 = url;
|
|
7531
|
+
} else if (slpkUrlParts.length === 2) {
|
|
7532
|
+
filename2 = slpkUrlParts[1].slice(1);
|
|
7533
|
+
} else {
|
|
7534
|
+
filename2 = url;
|
|
7535
|
+
}
|
|
7536
|
+
return filename2;
|
|
7537
|
+
}
|
|
7522
7538
|
async function parseI3SNodeGeometry(arrayBuffer, content, tileOptions, tilesetOptions, options) {
|
|
7523
7539
|
const contentByteLength = arrayBuffer.byteLength;
|
|
7524
7540
|
let attributes;
|
|
@@ -7583,7 +7599,8 @@
|
|
|
7583
7599
|
flattenFeatureIdsByFaceRanges(normalizedFeatureAttributes);
|
|
7584
7600
|
attributes = concatAttributes(normalizedVertexAttributes, normalizedFeatureAttributes);
|
|
7585
7601
|
}
|
|
7586
|
-
if (!options?.i3s?.coordinateSystem ||
|
|
7602
|
+
if (!options?.i3s?.coordinateSystem || // eslint-disable-next-line @typescript-eslint/no-unsafe-enum-comparison
|
|
7603
|
+
options.i3s.coordinateSystem === 2 /* METER_OFFSETS */) {
|
|
7587
7604
|
const enuMatrix = parsePositions(attributes.position, tileOptions);
|
|
7588
7605
|
content.modelMatrix = enuMatrix.invert();
|
|
7589
7606
|
content.coordinateSystem = 2 /* METER_OFFSETS */;
|
|
@@ -7847,7 +7864,7 @@
|
|
|
7847
7864
|
}
|
|
7848
7865
|
|
|
7849
7866
|
// src/i3s-content-loader.ts
|
|
7850
|
-
var VERSION6 = true ? "4.2.0-alpha.
|
|
7867
|
+
var VERSION6 = true ? "4.2.0-alpha.2" : "latest";
|
|
7851
7868
|
var I3SContentLoader = {
|
|
7852
7869
|
name: "I3S Content (Indexed Scene Layers)",
|
|
7853
7870
|
id: "i3s-content",
|
package/dist/i3s-loader.js
CHANGED
|
@@ -3,7 +3,7 @@ import { I3SContentLoader } from "./i3s-content-loader.js";
|
|
|
3
3
|
import { normalizeTileData, normalizeTilesetData } from "./lib/parsers/parse-i3s.js";
|
|
4
4
|
import { COORDINATE_SYSTEM } from "./lib/parsers/constants.js";
|
|
5
5
|
import { getUrlWithoutParams } from "./lib/utils/url-utils.js";
|
|
6
|
-
const VERSION = typeof "4.2.0-alpha.
|
|
6
|
+
const VERSION = typeof "4.2.0-alpha.2" !== 'undefined' ? "4.2.0-alpha.2" : 'latest';
|
|
7
7
|
const TILESET_REGEX = /layers\/[0-9]+$/;
|
|
8
8
|
const TILE_HEADER_REGEX = /nodes\/([0-9-]+|root)$/;
|
|
9
9
|
const SLPK_HEX = '504b0304';
|
package/dist/i3s-slpk-loader.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { DataViewFile } from '@loaders.gl/loader-utils';
|
|
2
2
|
import { parseSLPKArchive } from "./lib/parsers/parse-slpk/parse-slpk.js";
|
|
3
|
-
const VERSION = typeof "4.2.0-alpha.
|
|
3
|
+
const VERSION = typeof "4.2.0-alpha.2" !== 'undefined' ? "4.2.0-alpha.2" : 'latest';
|
|
4
4
|
export const SLPKLoader = {
|
|
5
5
|
name: 'I3S SLPK (Scene Layer Package)',
|
|
6
6
|
id: 'slpk',
|
package/dist/index.cjs
CHANGED
|
@@ -28,6 +28,7 @@ __export(src_exports, {
|
|
|
28
28
|
I3SLoader: () => I3SLoader,
|
|
29
29
|
I3SNodePageLoader: () => I3SNodePageLoader,
|
|
30
30
|
LayerError: () => LayerError,
|
|
31
|
+
SLPKArchive: () => SLPKArchive,
|
|
31
32
|
SLPKLoader: () => SLPKLoader,
|
|
32
33
|
customizeColors: () => customizeColors,
|
|
33
34
|
loadFeatureAttributes: () => loadFeatureAttributes,
|
|
@@ -165,7 +166,11 @@ async function parseI3STileContent(arrayBuffer, tileOptions, tilesetOptions, opt
|
|
|
165
166
|
texture: null
|
|
166
167
|
};
|
|
167
168
|
if (tileOptions.textureUrl) {
|
|
168
|
-
const url = getUrlWithToken(
|
|
169
|
+
const url = getUrlWithToken(
|
|
170
|
+
getInternalPathFromUrl(tileOptions.textureUrl),
|
|
171
|
+
// @ts-expect-error options is not properly typed
|
|
172
|
+
(_a = options == null ? void 0 : options.i3s) == null ? void 0 : _a.token
|
|
173
|
+
);
|
|
169
174
|
const loader = getLoaderForTextureFormat(tileOptions.textureFormat);
|
|
170
175
|
const fetchFunc = (context == null ? void 0 : context.fetch) || fetch;
|
|
171
176
|
const response = await fetchFunc(url);
|
|
@@ -203,6 +208,18 @@ async function parseI3STileContent(arrayBuffer, tileOptions, tilesetOptions, opt
|
|
|
203
208
|
}
|
|
204
209
|
return await parseI3SNodeGeometry(arrayBuffer, content, tileOptions, tilesetOptions, options);
|
|
205
210
|
}
|
|
211
|
+
function getInternalPathFromUrl(url) {
|
|
212
|
+
const slpkUrlParts = url.split(".slpk");
|
|
213
|
+
let filename;
|
|
214
|
+
if (slpkUrlParts.length === 1) {
|
|
215
|
+
filename = url;
|
|
216
|
+
} else if (slpkUrlParts.length === 2) {
|
|
217
|
+
filename = slpkUrlParts[1].slice(1);
|
|
218
|
+
} else {
|
|
219
|
+
filename = url;
|
|
220
|
+
}
|
|
221
|
+
return filename;
|
|
222
|
+
}
|
|
206
223
|
async function parseI3SNodeGeometry(arrayBuffer, content, tileOptions, tilesetOptions, options) {
|
|
207
224
|
var _a, _b;
|
|
208
225
|
const contentByteLength = arrayBuffer.byteLength;
|
|
@@ -268,7 +285,8 @@ async function parseI3SNodeGeometry(arrayBuffer, content, tileOptions, tilesetOp
|
|
|
268
285
|
flattenFeatureIdsByFaceRanges(normalizedFeatureAttributes);
|
|
269
286
|
attributes = concatAttributes(normalizedVertexAttributes, normalizedFeatureAttributes);
|
|
270
287
|
}
|
|
271
|
-
if (!((_b = options == null ? void 0 : options.i3s) == null ? void 0 : _b.coordinateSystem) ||
|
|
288
|
+
if (!((_b = options == null ? void 0 : options.i3s) == null ? void 0 : _b.coordinateSystem) || // eslint-disable-next-line @typescript-eslint/no-unsafe-enum-comparison
|
|
289
|
+
options.i3s.coordinateSystem === 2 /* METER_OFFSETS */) {
|
|
272
290
|
const enuMatrix = parsePositions(attributes.position, tileOptions);
|
|
273
291
|
content.modelMatrix = enuMatrix.invert();
|
|
274
292
|
content.coordinateSystem = 2 /* METER_OFFSETS */;
|
|
@@ -624,7 +642,7 @@ var I3SNodePagesTiles = class {
|
|
|
624
642
|
const pageIndex = Math.floor(id / this.nodesPerPage);
|
|
625
643
|
if (!this.nodePages[pageIndex] && !this.pendingNodePages[pageIndex]) {
|
|
626
644
|
const nodePageUrl = getUrlWithToken(
|
|
627
|
-
`${this.url}/nodepages/${pageIndex}`,
|
|
645
|
+
this.url.indexOf(".slpk") !== -1 ? `nodepages/${pageIndex}` : `${this.url}/nodepages/${pageIndex}`,
|
|
628
646
|
// @ts-expect-error this.options is not properly typed
|
|
629
647
|
(_a = this.options.i3s) == null ? void 0 : _a.token
|
|
630
648
|
);
|
|
@@ -1051,14 +1069,18 @@ var PATH_DESCRIPTIONS = [
|
|
|
1051
1069
|
extensions: ["/sharedResource.json.gz"]
|
|
1052
1070
|
}
|
|
1053
1071
|
];
|
|
1054
|
-
var SLPKArchive = class {
|
|
1055
|
-
|
|
1056
|
-
|
|
1057
|
-
|
|
1072
|
+
var SLPKArchive = class extends import_zip.IndexedArchive {
|
|
1073
|
+
/**
|
|
1074
|
+
* Constructor
|
|
1075
|
+
* @param fileProvider - instance of a binary data reader
|
|
1076
|
+
* @param hashTable - pre-loaded hashTable. If presented, getFile will skip reading the hash file
|
|
1077
|
+
* @param fileName - name of the archive. It is used to add to an URL of a loader context
|
|
1078
|
+
*/
|
|
1079
|
+
constructor(fileProvider, hashTable, fileName) {
|
|
1080
|
+
super(fileProvider, hashTable, fileName);
|
|
1058
1081
|
this._textEncoder = new TextEncoder();
|
|
1059
1082
|
this._textDecoder = new TextDecoder();
|
|
1060
1083
|
this._md5Hash = new import_crypto.MD5Hash();
|
|
1061
|
-
this.slpkArchive = slpkArchive;
|
|
1062
1084
|
this.hashTable = hashTable;
|
|
1063
1085
|
}
|
|
1064
1086
|
/**
|
|
@@ -1122,26 +1144,35 @@ var SLPKArchive = class {
|
|
|
1122
1144
|
* @returns buffer with the raw file data
|
|
1123
1145
|
*/
|
|
1124
1146
|
async getFileBytes(path) {
|
|
1125
|
-
|
|
1126
|
-
|
|
1127
|
-
|
|
1128
|
-
|
|
1129
|
-
|
|
1130
|
-
|
|
1131
|
-
|
|
1132
|
-
|
|
1133
|
-
|
|
1147
|
+
let compressedFile;
|
|
1148
|
+
if (this.hashTable) {
|
|
1149
|
+
const binaryPath = this._textEncoder.encode(path);
|
|
1150
|
+
const nameHash = await this._md5Hash.hash(binaryPath.buffer, "hex");
|
|
1151
|
+
const offset = this.hashTable[nameHash];
|
|
1152
|
+
if (offset === void 0) {
|
|
1153
|
+
return void 0;
|
|
1154
|
+
}
|
|
1155
|
+
const localFileHeader = await (0, import_zip.parseZipLocalFileHeader)(offset, this.fileProvider);
|
|
1156
|
+
if (!localFileHeader) {
|
|
1157
|
+
return void 0;
|
|
1158
|
+
}
|
|
1159
|
+
compressedFile = await this.fileProvider.slice(
|
|
1160
|
+
localFileHeader.fileDataOffset,
|
|
1161
|
+
localFileHeader.fileDataOffset + localFileHeader.compressedSize
|
|
1162
|
+
);
|
|
1163
|
+
} else {
|
|
1164
|
+
try {
|
|
1165
|
+
compressedFile = await this.getFileWithoutHash(path);
|
|
1166
|
+
} catch {
|
|
1167
|
+
compressedFile = void 0;
|
|
1168
|
+
}
|
|
1134
1169
|
}
|
|
1135
|
-
const compressedFile = this.slpkArchive.slice(
|
|
1136
|
-
localFileHeader.fileDataOffset,
|
|
1137
|
-
localFileHeader.fileDataOffset + localFileHeader.compressedSize
|
|
1138
|
-
);
|
|
1139
1170
|
return compressedFile;
|
|
1140
1171
|
}
|
|
1141
1172
|
};
|
|
1142
1173
|
|
|
1143
1174
|
// src/lib/parsers/parse-slpk/parse-slpk.ts
|
|
1144
|
-
async function parseSLPKArchive(fileProvider, cb) {
|
|
1175
|
+
async function parseSLPKArchive(fileProvider, cb, fileName) {
|
|
1145
1176
|
const hashCDOffset = await (0, import_zip2.searchFromTheEnd)(fileProvider, import_zip2.CD_HEADER_SIGNATURE);
|
|
1146
1177
|
const cdFileHeader = await (0, import_zip2.parseZipCDFileHeader)(hashCDOffset, fileProvider);
|
|
1147
1178
|
let hashTable;
|
|
@@ -1165,7 +1196,7 @@ async function parseSLPKArchive(fileProvider, cb) {
|
|
|
1165
1196
|
);
|
|
1166
1197
|
hashTable = (0, import_zip2.parseHashTable)(hashFile);
|
|
1167
1198
|
}
|
|
1168
|
-
return new SLPKArchive(fileProvider, hashTable);
|
|
1199
|
+
return new SLPKArchive(fileProvider, hashTable, fileName);
|
|
1169
1200
|
}
|
|
1170
1201
|
|
|
1171
1202
|
// src/i3s-slpk-loader.ts
|
package/dist/index.d.ts
CHANGED
|
@@ -8,7 +8,7 @@ export { I3SAttributeLoader, loadFeatureAttributes } from './i3s-attribute-loade
|
|
|
8
8
|
export { I3SBuildingSceneLayerLoader } from './i3s-building-scene-layer-loader';
|
|
9
9
|
export { I3SNodePageLoader } from './i3s-node-page-loader';
|
|
10
10
|
export { ArcGISWebSceneLoader } from './arcgis-webscene-loader';
|
|
11
|
-
export
|
|
11
|
+
export { SLPKArchive } from './lib/parsers/parse-slpk/slpk-archieve';
|
|
12
12
|
export { parseSLPKArchive } from './lib/parsers/parse-slpk/parse-slpk';
|
|
13
13
|
export { LayerError } from './lib/parsers/parse-arcgis-webscene';
|
|
14
14
|
export { customizeColors } from './lib/utils/customize-colors';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAIA,YAAY,EACV,eAAe,EACf,GAAG,EACH,GAAG,EACH,gBAAgB,EAChB,cAAc,EACd,aAAa,EACb,YAAY,EACZ,oBAAoB,EACpB,KAAK,EACL,SAAS,EACT,SAAS,EACT,mBAAmB,EACnB,YAAY,EACZ,aAAa,EACb,QAAQ,EACR,oBAAoB,EACpB,UAAU,EACV,eAAe,EACf,SAAS,EACT,MAAM,EACN,gBAAgB,EAChB,SAAS,EACT,qBAAqB,EACrB,qBAAqB,EACrB,sBAAsB,EACtB,UAAU,EACV,cAAc,EACd,SAAS,EACT,SAAS,EACT,UAAU,EACV,qBAAqB,EACrB,gBAAgB,EAChB,2BAA2B,EAC5B,MAAM,SAAS,CAAC;AACjB,YAAY,EAAC,gBAAgB,EAAC,MAAM,cAAc,CAAC;AAEnD,OAAO,EAAC,iBAAiB,EAAC,MAAM,yBAAyB,CAAC;AAE1D,OAAO,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AACvC,OAAO,EAAC,UAAU,EAAC,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAC,gBAAgB,EAAC,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAC,kBAAkB,EAAE,qBAAqB,EAAC,MAAM,wBAAwB,CAAC;AACjF,OAAO,EAAC,2BAA2B,EAAC,MAAM,mCAAmC,CAAC;AAC9E,OAAO,EAAC,iBAAiB,EAAC,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAC,oBAAoB,EAAC,MAAM,0BAA0B,CAAC;AAE9D,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAIA,YAAY,EACV,eAAe,EACf,GAAG,EACH,GAAG,EACH,gBAAgB,EAChB,cAAc,EACd,aAAa,EACb,YAAY,EACZ,oBAAoB,EACpB,KAAK,EACL,SAAS,EACT,SAAS,EACT,mBAAmB,EACnB,YAAY,EACZ,aAAa,EACb,QAAQ,EACR,oBAAoB,EACpB,UAAU,EACV,eAAe,EACf,SAAS,EACT,MAAM,EACN,gBAAgB,EAChB,SAAS,EACT,qBAAqB,EACrB,qBAAqB,EACrB,sBAAsB,EACtB,UAAU,EACV,cAAc,EACd,SAAS,EACT,SAAS,EACT,UAAU,EACV,qBAAqB,EACrB,gBAAgB,EAChB,2BAA2B,EAC5B,MAAM,SAAS,CAAC;AACjB,YAAY,EAAC,gBAAgB,EAAC,MAAM,cAAc,CAAC;AAEnD,OAAO,EAAC,iBAAiB,EAAC,MAAM,yBAAyB,CAAC;AAE1D,OAAO,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AACvC,OAAO,EAAC,UAAU,EAAC,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAC,gBAAgB,EAAC,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAC,kBAAkB,EAAE,qBAAqB,EAAC,MAAM,wBAAwB,CAAC;AACjF,OAAO,EAAC,2BAA2B,EAAC,MAAM,mCAAmC,CAAC;AAC9E,OAAO,EAAC,iBAAiB,EAAC,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAC,oBAAoB,EAAC,MAAM,0BAA0B,CAAC;AAE9D,OAAO,EAAC,WAAW,EAAC,MAAM,wCAAwC,CAAC;AACnE,OAAO,EAAC,gBAAgB,EAAC,MAAM,qCAAqC,CAAC;AACrE,OAAO,EAAC,UAAU,EAAC,MAAM,qCAAqC,CAAC;AAC/D,OAAO,EAAC,eAAe,EAAC,MAAM,8BAA8B,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -6,6 +6,7 @@ export { I3SAttributeLoader, loadFeatureAttributes } from "./i3s-attribute-loade
|
|
|
6
6
|
export { I3SBuildingSceneLayerLoader } from "./i3s-building-scene-layer-loader.js";
|
|
7
7
|
export { I3SNodePageLoader } from "./i3s-node-page-loader.js";
|
|
8
8
|
export { ArcGISWebSceneLoader } from "./arcgis-webscene-loader.js";
|
|
9
|
+
export { SLPKArchive } from "./lib/parsers/parse-slpk/slpk-archieve.js";
|
|
9
10
|
export { parseSLPKArchive } from "./lib/parsers/parse-slpk/parse-slpk.js";
|
|
10
11
|
export { LayerError } from "./lib/parsers/parse-arcgis-webscene.js";
|
|
11
12
|
export { customizeColors } from "./lib/utils/customize-colors.js";
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["COORDINATE_SYSTEM","I3SLoader","SLPKLoader","I3SContentLoader","I3SAttributeLoader","loadFeatureAttributes","I3SBuildingSceneLayerLoader","I3SNodePageLoader","ArcGISWebSceneLoader","parseSLPKArchive","LayerError","customizeColors"],"sources":["../src/index.ts"],"sourcesContent":["// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nexport type {\n BoundingVolumes,\n Mbs,\n Obb,\n I3STilesetHeader,\n I3STileContent,\n I3STileHeader,\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 OperationalLayer,\n TextureSetDefinitionFormats\n} from './types';\nexport type {I3SLoaderOptions} from './i3s-loader';\n\nexport {COORDINATE_SYSTEM} from './lib/parsers/constants';\n\nexport {I3SLoader} from './i3s-loader';\nexport {SLPKLoader} from './i3s-slpk-loader';\nexport {I3SContentLoader} from './i3s-content-loader';\nexport {I3SAttributeLoader, loadFeatureAttributes} from './i3s-attribute-loader';\nexport {I3SBuildingSceneLayerLoader} from './i3s-building-scene-layer-loader';\nexport {I3SNodePageLoader} from './i3s-node-page-loader';\nexport {ArcGISWebSceneLoader} from './arcgis-webscene-loader';\n\nexport
|
|
1
|
+
{"version":3,"file":"index.js","names":["COORDINATE_SYSTEM","I3SLoader","SLPKLoader","I3SContentLoader","I3SAttributeLoader","loadFeatureAttributes","I3SBuildingSceneLayerLoader","I3SNodePageLoader","ArcGISWebSceneLoader","SLPKArchive","parseSLPKArchive","LayerError","customizeColors"],"sources":["../src/index.ts"],"sourcesContent":["// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nexport type {\n BoundingVolumes,\n Mbs,\n Obb,\n I3STilesetHeader,\n I3STileContent,\n I3STileHeader,\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 OperationalLayer,\n TextureSetDefinitionFormats\n} from './types';\nexport type {I3SLoaderOptions} from './i3s-loader';\n\nexport {COORDINATE_SYSTEM} from './lib/parsers/constants';\n\nexport {I3SLoader} from './i3s-loader';\nexport {SLPKLoader} from './i3s-slpk-loader';\nexport {I3SContentLoader} from './i3s-content-loader';\nexport {I3SAttributeLoader, loadFeatureAttributes} from './i3s-attribute-loader';\nexport {I3SBuildingSceneLayerLoader} from './i3s-building-scene-layer-loader';\nexport {I3SNodePageLoader} from './i3s-node-page-loader';\nexport {ArcGISWebSceneLoader} from './arcgis-webscene-loader';\n\nexport {SLPKArchive} from './lib/parsers/parse-slpk/slpk-archieve';\nexport {parseSLPKArchive} from './lib/parsers/parse-slpk/parse-slpk';\nexport {LayerError} from './lib/parsers/parse-arcgis-webscene';\nexport {customizeColors} from './lib/utils/customize-colors';\n"],"mappings":"SAyCQA,iBAAiB;AAAA,SAEjBC,SAAS;AAAA,SACTC,UAAU;AAAA,SACVC,gBAAgB;AAAA,SAChBC,kBAAkB,EAAEC,qBAAqB;AAAA,SACzCC,2BAA2B;AAAA,SAC3BC,iBAAiB;AAAA,SACjBC,oBAAoB;AAAA,SAEpBC,WAAW;AAAA,SACXC,gBAAgB;AAAA,SAChBC,UAAU;AAAA,SACVC,eAAe"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"i3s-nodepages-tiles.d.ts","sourceRoot":"","sources":["../../../src/lib/helpers/i3s-nodepages-tiles.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAEL,QAAQ,EACR,UAAU,EAIV,gBAAgB,EAEhB,aAAa,EACb,YAAY,EACb,MAAM,aAAa,CAAC;AAErB;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,iBAAiB;IACpC,OAAO,EAAE,YAAY,CAAC;IACtB,SAAS,EAAE,QAAQ,EAAE,CAAM;IAC3B,gBAAgB,EAAE;QAAC,OAAO,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;QAAC,MAAM,EAAE,SAAS,GAAG,MAAM,CAAA;KAAC,EAAE,CAAM;IAClF,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,aAAa,CAAC;IACvB,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,iCAAiC,EAAE,CAAC;QAAC,MAAM,EAAE,gBAAgB,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAC,GAAG,IAAI,CAAC,EAAE,CAAM;IAC5F,gBAAgB,EAAE,MAAM,CAAC;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,CAAC,oBAAoB,CAA4B;IAExD;;;;;;OAMG;gBACS,OAAO,EAAE,YAAY,EAAE,GAAG,oBAAa,EAAE,OAAO,EAAE,aAAa;IAW3E;;;OAGG;IACG,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"i3s-nodepages-tiles.d.ts","sourceRoot":"","sources":["../../../src/lib/helpers/i3s-nodepages-tiles.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAEL,QAAQ,EACR,UAAU,EAIV,gBAAgB,EAEhB,aAAa,EACb,YAAY,EACb,MAAM,aAAa,CAAC;AAErB;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,iBAAiB;IACpC,OAAO,EAAE,YAAY,CAAC;IACtB,SAAS,EAAE,QAAQ,EAAE,CAAM;IAC3B,gBAAgB,EAAE;QAAC,OAAO,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;QAAC,MAAM,EAAE,SAAS,GAAG,MAAM,CAAA;KAAC,EAAE,CAAM;IAClF,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,aAAa,CAAC;IACvB,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,iCAAiC,EAAE,CAAC;QAAC,MAAM,EAAE,gBAAgB,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAC,GAAG,IAAI,CAAC,EAAE,CAAM;IAC5F,gBAAgB,EAAE,MAAM,CAAC;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,CAAC,oBAAoB,CAA4B;IAExD;;;;;;OAMG;gBACS,OAAO,EAAE,YAAY,EAAE,GAAG,oBAAa,EAAE,OAAO,EAAE,aAAa;IAW3E;;;OAGG;IACG,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAyBlD;;;OAGG;IAEG,qBAAqB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IAgE/D;;;;;;OAMG;IACH,OAAO,CAAC,aAAa;IA8BrB;;;;OAIG;IACH,OAAO,CAAC,eAAe;IAiBvB;;;;;;;OAOG;IACH,OAAO,CAAC,0BAA0B;IAuBlC;;;;OAIG;IACH,OAAO,CAAC,wCAAwC;IA2BhD;;;OAGG;IACH,OAAO,CAAC,0BAA0B;CAwBnC"}
|
|
@@ -32,7 +32,7 @@ export default class I3SNodePagesTiles {
|
|
|
32
32
|
const pageIndex = Math.floor(id / this.nodesPerPage);
|
|
33
33
|
if (!this.nodePages[pageIndex] && !this.pendingNodePages[pageIndex]) {
|
|
34
34
|
var _this$options$i3s;
|
|
35
|
-
const nodePageUrl = getUrlWithToken(`${this.url}/nodepages/${pageIndex}`, (_this$options$i3s = this.options.i3s) === null || _this$options$i3s === void 0 ? void 0 : _this$options$i3s.token);
|
|
35
|
+
const nodePageUrl = getUrlWithToken(this.url.indexOf('.slpk') !== -1 ? `nodepages/${pageIndex}` : `${this.url}/nodepages/${pageIndex}`, (_this$options$i3s = this.options.i3s) === null || _this$options$i3s === void 0 ? void 0 : _this$options$i3s.token);
|
|
36
36
|
this.pendingNodePages[pageIndex] = {
|
|
37
37
|
status: 'Pending',
|
|
38
38
|
promise: load(nodePageUrl, I3SNodePageLoader, this.options)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"i3s-nodepages-tiles.js","names":["load","getSupportedGPUTextureFormats","selectSupportedBasisFormat","I3SNodePageLoader","normalizeTileNonUrlData","getUrlWithToken","generateTilesetAttributeUrls","I3SNodePagesTiles","constructor","tileset","_tileset$nodePages","_tileset$nodePages2","url","arguments","length","undefined","options","nodePages","pendingNodePages","nodesPerPage","lodSelectionMetricType","textureDefinitionsSelectedFormats","nodesInNodePages","textureLoaderOptions","initSelectedFormatsForTextureDefinitions","getNodeById","id","pageIndex","Math","floor","_this$options$i3s","nodePageUrl","i3s","token","status","promise","nodes","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","meshGeometryData","result","geometryDefinition","geometryDefinitions","definition","geometryIndex","useDracoGeometry","geometryBuffers","findIndex","buffer","compressedAttributes","encoding","Boolean","metricType","maxError","sqrt","lodThreshold","PI","informationFromMaterial","_this$tileset$materia","materialDefinitions","_materialDefinition$p","_materialDefinition$p2","textureSetDefinitionIndex","pbrMetallicRoughness","baseColorTexture","textureSetDefinitionId","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 LodSelection,\n NodePage,\n NodeInPage,\n Obb,\n MeshMaterial,\n I3SMaterialDefinition,\n I3STextureFormat,\n MeshGeometry,\n I3STileHeader,\n SceneLayer3D\n} from '../../types';\n\n/**\n * class I3SNodePagesTiles - loads nodePages and form i3s tiles from them\n */\nexport default class I3SNodePagesTiles {\n tileset: SceneLayer3D;\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 url: string;\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 url - tileset url\n * @param options - i3s loader options\n */\n constructor(tileset: SceneLayer3D, url: string = '', options: LoaderOptions) {\n this.tileset = {...tileset}; // spread the tileset to avoid circular reference\n this.url = url;\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.url}/nodepages/${pageIndex}`,\n // @ts-expect-error this.options is not properly typed\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.url}/nodes/${node.mesh.material.resource}/textures/${textureData.name}`;\n }\n\n if (this.tileset.attributeStorageInfo) {\n attributeUrls = generateTilesetAttributeUrls(\n this.tileset,\n this.url,\n node.mesh.attribute.resource\n );\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 // @ts-expect-error this.options is not properly typed\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.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: SceneLayer3D): 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 // @ts-expect-error this.options is not properly typed\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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"}
|
|
1
|
+
{"version":3,"file":"i3s-nodepages-tiles.js","names":["load","getSupportedGPUTextureFormats","selectSupportedBasisFormat","I3SNodePageLoader","normalizeTileNonUrlData","getUrlWithToken","generateTilesetAttributeUrls","I3SNodePagesTiles","constructor","tileset","_tileset$nodePages","_tileset$nodePages2","url","arguments","length","undefined","options","nodePages","pendingNodePages","nodesPerPage","lodSelectionMetricType","textureDefinitionsSelectedFormats","nodesInNodePages","textureLoaderOptions","initSelectedFormatsForTextureDefinitions","getNodeById","id","pageIndex","Math","floor","_this$options$i3s","nodePageUrl","indexOf","i3s","token","status","promise","nodes","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","meshGeometryData","result","geometryDefinition","geometryDefinitions","definition","geometryIndex","useDracoGeometry","geometryBuffers","findIndex","buffer","compressedAttributes","encoding","Boolean","metricType","maxError","sqrt","lodThreshold","PI","informationFromMaterial","_this$tileset$materia","materialDefinitions","_materialDefinition$p","_materialDefinition$p2","textureSetDefinitionIndex","pbrMetallicRoughness","baseColorTexture","textureSetDefinitionId","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 LodSelection,\n NodePage,\n NodeInPage,\n Obb,\n MeshMaterial,\n I3SMaterialDefinition,\n I3STextureFormat,\n MeshGeometry,\n I3STileHeader,\n SceneLayer3D\n} from '../../types';\n\n/**\n * class I3SNodePagesTiles - loads nodePages and form i3s tiles from them\n */\nexport default class I3SNodePagesTiles {\n tileset: SceneLayer3D;\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 url: string;\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 url - tileset url\n * @param options - i3s loader options\n */\n constructor(tileset: SceneLayer3D, url: string = '', options: LoaderOptions) {\n this.tileset = {...tileset}; // spread the tileset to avoid circular reference\n this.url = url;\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.url.indexOf('.slpk') !== -1\n ? `nodepages/${pageIndex}`\n : `${this.url}/nodepages/${pageIndex}`,\n // @ts-expect-error this.options is not properly typed\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.url}/nodes/${node.mesh.material.resource}/textures/${textureData.name}`;\n }\n\n if (this.tileset.attributeStorageInfo) {\n attributeUrls = generateTilesetAttributeUrls(\n this.tileset,\n this.url,\n node.mesh.attribute.resource\n );\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 // @ts-expect-error this.options is not properly typed\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.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: SceneLayer3D): 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 // @ts-expect-error this.options is not properly typed\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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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parse-i3s-tile-content.d.ts","sourceRoot":"","sources":["../../../src/lib/parsers/parse-i3s-tile-content.ts"],"names":[],"mappings":"AAIA,OAAO,EAAC,aAAa,EAAE,aAAa,EAAmB,MAAM,0BAA0B,CAAC;AAKxF,OAAO,EAQL,cAAc,EACd,cAAc,EACd,iBAAiB,EAClB,MAAM,aAAa,CAAC;AAwBrB,wBAAsB,mBAAmB,CACvC,WAAW,EAAE,WAAW,EACxB,WAAW,EAAE,cAAc,EAC3B,cAAc,EAAE,iBAAiB,EACjC,OAAO,CAAC,EAAE,aAAa,EACvB,OAAO,CAAC,EAAE,aAAa,GACtB,OAAO,CAAC,cAAc,CAAC,
|
|
1
|
+
{"version":3,"file":"parse-i3s-tile-content.d.ts","sourceRoot":"","sources":["../../../src/lib/parsers/parse-i3s-tile-content.ts"],"names":[],"mappings":"AAIA,OAAO,EAAC,aAAa,EAAE,aAAa,EAAmB,MAAM,0BAA0B,CAAC;AAKxF,OAAO,EAQL,cAAc,EACd,cAAc,EACd,iBAAiB,EAClB,MAAM,aAAa,CAAC;AAwBrB,wBAAsB,mBAAmB,CACvC,WAAW,EAAE,WAAW,EACxB,WAAW,EAAE,cAAc,EAC3B,cAAc,EAAE,iBAAiB,EACjC,OAAO,CAAC,EAAE,aAAa,EACvB,OAAO,CAAC,EAAE,aAAa,GACtB,OAAO,CAAC,cAAc,CAAC,CAgEzB"}
|
|
@@ -36,7 +36,7 @@ export async function parseI3STileContent(arrayBuffer, tileOptions, tilesetOptio
|
|
|
36
36
|
};
|
|
37
37
|
if (tileOptions.textureUrl) {
|
|
38
38
|
var _options$i3s;
|
|
39
|
-
const url = getUrlWithToken(tileOptions.textureUrl, options === null || options === void 0 ? void 0 : (_options$i3s = options.i3s) === null || _options$i3s === void 0 ? void 0 : _options$i3s.token);
|
|
39
|
+
const url = getUrlWithToken(getInternalPathFromUrl(tileOptions.textureUrl), options === null || options === void 0 ? void 0 : (_options$i3s = options.i3s) === null || _options$i3s === void 0 ? void 0 : _options$i3s.token);
|
|
40
40
|
const loader = getLoaderForTextureFormat(tileOptions.textureFormat);
|
|
41
41
|
const fetchFunc = (context === null || context === void 0 ? void 0 : context.fetch) || fetch;
|
|
42
42
|
const response = await fetchFunc(url);
|
|
@@ -79,6 +79,18 @@ export async function parseI3STileContent(arrayBuffer, tileOptions, tilesetOptio
|
|
|
79
79
|
}
|
|
80
80
|
return await parseI3SNodeGeometry(arrayBuffer, content, tileOptions, tilesetOptions, options);
|
|
81
81
|
}
|
|
82
|
+
function getInternalPathFromUrl(url) {
|
|
83
|
+
const slpkUrlParts = url.split('.slpk');
|
|
84
|
+
let filename;
|
|
85
|
+
if (slpkUrlParts.length === 1) {
|
|
86
|
+
filename = url;
|
|
87
|
+
} else if (slpkUrlParts.length === 2) {
|
|
88
|
+
filename = slpkUrlParts[1].slice(1);
|
|
89
|
+
} else {
|
|
90
|
+
filename = url;
|
|
91
|
+
}
|
|
92
|
+
return filename;
|
|
93
|
+
}
|
|
82
94
|
async function parseI3SNodeGeometry(arrayBuffer, content, tileOptions, tilesetOptions, options) {
|
|
83
95
|
var _options$i3s2;
|
|
84
96
|
const contentByteLength = arrayBuffer.byteLength;
|