@loaders.gl/i3s 4.0.0-alpha.17 → 4.0.0-alpha.18

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.
Files changed (57) hide show
  1. package/dist/dist.min.js +94 -51
  2. package/dist/es5/arcgis-webscene-loader.js +1 -1
  3. package/dist/es5/i3s-attribute-loader.js +1 -1
  4. package/dist/es5/i3s-building-scene-layer-loader.js +1 -1
  5. package/dist/es5/i3s-content-loader.js +1 -1
  6. package/dist/es5/i3s-loader.js +6 -6
  7. package/dist/es5/i3s-loader.js.map +1 -1
  8. package/dist/es5/i3s-node-page-loader.js +1 -1
  9. package/dist/es5/i3s-slpk-loader.js +1 -1
  10. package/dist/es5/index.js.map +1 -1
  11. package/dist/es5/lib/helpers/i3s-nodepages-tiles.js +9 -5
  12. package/dist/es5/lib/helpers/i3s-nodepages-tiles.js.map +1 -1
  13. package/dist/es5/lib/parsers/parse-i3s.js +29 -19
  14. package/dist/es5/lib/parsers/parse-i3s.js.map +1 -1
  15. package/dist/es5/lib/utils/url-utils.js +3 -3
  16. package/dist/es5/lib/utils/url-utils.js.map +1 -1
  17. package/dist/es5/types.js.map +1 -1
  18. package/dist/esm/arcgis-webscene-loader.js +1 -1
  19. package/dist/esm/i3s-attribute-loader.js +1 -1
  20. package/dist/esm/i3s-building-scene-layer-loader.js +1 -1
  21. package/dist/esm/i3s-content-loader.js +1 -1
  22. package/dist/esm/i3s-loader.js +3 -4
  23. package/dist/esm/i3s-loader.js.map +1 -1
  24. package/dist/esm/i3s-node-page-loader.js +1 -1
  25. package/dist/esm/i3s-slpk-loader.js +1 -1
  26. package/dist/esm/index.js.map +1 -1
  27. package/dist/esm/lib/helpers/i3s-nodepages-tiles.js +9 -5
  28. package/dist/esm/lib/helpers/i3s-nodepages-tiles.js.map +1 -1
  29. package/dist/esm/lib/parsers/parse-i3s.js +20 -10
  30. package/dist/esm/lib/parsers/parse-i3s.js.map +1 -1
  31. package/dist/esm/lib/utils/url-utils.js +2 -3
  32. package/dist/esm/lib/utils/url-utils.js.map +1 -1
  33. package/dist/esm/types.js.map +1 -1
  34. package/dist/i3s-content-worker-node.js +47 -47
  35. package/dist/i3s-content-worker-node.js.map +3 -3
  36. package/dist/i3s-content-worker.js +50 -19
  37. package/dist/i3s-loader.js +2 -4
  38. package/dist/index.d.ts +2 -1
  39. package/dist/index.d.ts.map +1 -1
  40. package/dist/lib/helpers/i3s-nodepages-tiles.d.ts +5 -3
  41. package/dist/lib/helpers/i3s-nodepages-tiles.d.ts.map +1 -1
  42. package/dist/lib/helpers/i3s-nodepages-tiles.js +7 -5
  43. package/dist/lib/parsers/parse-i3s.d.ts +2 -2
  44. package/dist/lib/parsers/parse-i3s.d.ts.map +1 -1
  45. package/dist/lib/parsers/parse-i3s.js +21 -12
  46. package/dist/lib/utils/url-utils.d.ts +5 -4
  47. package/dist/lib/utils/url-utils.d.ts.map +1 -1
  48. package/dist/lib/utils/url-utils.js +5 -4
  49. package/dist/types.d.ts +102 -34
  50. package/dist/types.d.ts.map +1 -1
  51. package/package.json +9 -9
  52. package/src/i3s-loader.ts +2 -4
  53. package/src/index.ts +4 -0
  54. package/src/lib/helpers/i3s-nodepages-tiles.ts +16 -9
  55. package/src/lib/parsers/parse-i3s.ts +25 -16
  56. package/src/lib/utils/url-utils.ts +6 -5
  57. package/src/types.ts +99 -35
@@ -32,6 +32,12 @@
32
32
  }
33
33
  });
34
34
 
35
+ // (disabled):../core/src/lib/fetch/fetch-file.node
36
+ var require_fetch_file = __commonJS({
37
+ "(disabled):../core/src/lib/fetch/fetch-file.node"() {
38
+ }
39
+ });
40
+
35
41
  // ../loader-utils/src/lib/env-utils/assert.ts
36
42
  function assert(condition, message) {
37
43
  if (!condition) {
@@ -55,7 +61,7 @@
55
61
  var nodeVersion = matches && parseFloat(matches[1]) || 0;
56
62
 
57
63
  // ../worker-utils/src/lib/env-utils/version.ts
58
- var VERSION = true ? "4.0.0-alpha.17" : DEFAULT_VERSION;
64
+ var VERSION = true ? "4.0.0-alpha.18" : DEFAULT_VERSION;
59
65
  if (false) {
60
66
  console.error("loaders.gl: The __VERSION__ variable is not injected using babel plugin. Latest unstable workers would be fetched from the CDN.");
61
67
  }
@@ -587,8 +593,7 @@
587
593
  }
588
594
  async function loadLibraryFromFile(libraryUrl) {
589
595
  if (libraryUrl.endsWith("wasm")) {
590
- const response2 = await fetch(libraryUrl);
591
- return await response2.arrayBuffer();
596
+ return await loadAsArrayBuffer(libraryUrl);
592
597
  }
593
598
  if (!isBrowser2) {
594
599
  try {
@@ -600,8 +605,7 @@
600
605
  if (isWorker) {
601
606
  return importScripts(libraryUrl);
602
607
  }
603
- const response = await fetch(libraryUrl);
604
- const scriptSource = await response.text();
608
+ const scriptSource = await loadAsText(libraryUrl);
605
609
  return loadLibraryFromString(scriptSource, libraryUrl);
606
610
  }
607
611
  function loadLibraryFromString(scriptSource, id) {
@@ -622,6 +626,20 @@
622
626
  document.body.appendChild(script);
623
627
  return null;
624
628
  }
629
+ async function loadAsArrayBuffer(url) {
630
+ if (!node.readFileAsArrayBuffer || url.startsWith("http")) {
631
+ const response = await fetch(url);
632
+ return await response.arrayBuffer();
633
+ }
634
+ return await node.readFileAsArrayBuffer(url);
635
+ }
636
+ async function loadAsText(url) {
637
+ if (!node.readFileAsText || url.startsWith("http")) {
638
+ const response = await fetch(url);
639
+ return await response.text();
640
+ }
641
+ return await node.readFileAsText(url);
642
+ }
625
643
 
626
644
  // ../loader-utils/src/lib/worker-loader-utils/create-loader-worker.ts
627
645
  var requestId = 0;
@@ -1191,9 +1209,22 @@
1191
1209
  }
1192
1210
 
1193
1211
  // ../core/src/lib/fetch/fetch-file.ts
1212
+ var node3 = __toModule(require_fetch_file());
1213
+ function isNodePath(url) {
1214
+ return !isRequestURL(url) && !isDataURL(url);
1215
+ }
1216
+ function isRequestURL(url) {
1217
+ return url.startsWith("http:") || url.startsWith("https:");
1218
+ }
1219
+ function isDataURL(url) {
1220
+ return url.startsWith("data:");
1221
+ }
1194
1222
  async function fetchFile(urlOrData, fetchOptions) {
1195
1223
  if (typeof urlOrData === "string") {
1196
1224
  const url = resolvePath(urlOrData);
1225
+ if (isNodePath(url) && node3?.fetchFileNode) {
1226
+ return node3.fetchFileNode(url, fetchOptions);
1227
+ }
1197
1228
  return await fetch(url, fetchOptions);
1198
1229
  }
1199
1230
  return await makeResponse(urlOrData);
@@ -1230,7 +1261,7 @@
1230
1261
  var navigator_ = globalThis.navigator || {};
1231
1262
 
1232
1263
  // ../../node_modules/@probe.gl/log/node_modules/@probe.gl/env/dist/utils/globals.js
1233
- var VERSION3 = true ? "4.0.0-alpha.17" : "untranspiled source";
1264
+ var VERSION3 = true ? "4.0.0-alpha.18" : "untranspiled source";
1234
1265
  var isBrowser4 = isBrowser3();
1235
1266
 
1236
1267
  // ../../node_modules/@probe.gl/log/dist/utils/local-storage.js
@@ -4578,7 +4609,7 @@
4578
4609
  _defineProperty(Ellipsoid, "WGS84", new Ellipsoid(WGS84_RADIUS_X, WGS84_RADIUS_Y, WGS84_RADIUS_Z));
4579
4610
 
4580
4611
  // ../images/src/lib/utils/version.ts
4581
- var VERSION4 = true ? "4.0.0-alpha.17" : "latest";
4612
+ var VERSION4 = true ? "4.0.0-alpha.18" : "latest";
4582
4613
 
4583
4614
  // ../images/src/lib/category-api/image-type.ts
4584
4615
  var { _parseImageNode } = globalThis;
@@ -4975,7 +5006,7 @@
4975
5006
  };
4976
5007
 
4977
5008
  // ../draco/src/lib/utils/version.ts
4978
- var VERSION5 = true ? "4.0.0-alpha.17" : "latest";
5009
+ var VERSION5 = true ? "4.0.0-alpha.18" : "latest";
4979
5010
 
4980
5011
  // ../draco/src/draco-loader.ts
4981
5012
  var DEFAULT_DRACO_OPTIONS = {
@@ -5520,22 +5551,22 @@
5520
5551
  }
5521
5552
 
5522
5553
  // ../textures/src/lib/utils/version.ts
5523
- var VERSION6 = true ? "4.0.0-alpha.17" : "beta";
5554
+ var VERSION6 = true ? "4.0.0-alpha.18" : "beta";
5524
5555
 
5525
5556
  // ../textures/src/lib/parsers/basis-module-loader.ts
5526
- var VERSION7 = true ? "4.0.0-alpha.17" : "beta";
5557
+ var VERSION7 = true ? "4.0.0-alpha.18" : "beta";
5527
5558
  var BASIS_CDN_ENCODER_WASM = `https://unpkg.com/@loaders.gl/textures@${VERSION7}/dist/libs/basis_encoder.wasm`;
5528
5559
  var BASIS_CDN_ENCODER_JS = `https://unpkg.com/@loaders.gl/textures@${VERSION7}/dist/libs/basis_encoder.js`;
5529
5560
  var loadBasisTranscoderPromise;
5530
- async function loadBasisTrascoderModule(options) {
5561
+ async function loadBasisTranscoderModule(options) {
5531
5562
  const modules = options.modules || {};
5532
5563
  if (modules.basis) {
5533
5564
  return modules.basis;
5534
5565
  }
5535
- loadBasisTranscoderPromise = loadBasisTranscoderPromise || loadBasisTrascoder(options);
5566
+ loadBasisTranscoderPromise = loadBasisTranscoderPromise || loadBasisTranscoder(options);
5536
5567
  return await loadBasisTranscoderPromise;
5537
5568
  }
5538
- async function loadBasisTrascoder(options) {
5569
+ async function loadBasisTranscoder(options) {
5539
5570
  let BASIS = null;
5540
5571
  let wasmBinary = null;
5541
5572
  [BASIS, wasmBinary] = await Promise.all([
@@ -5543,9 +5574,9 @@
5543
5574
  await loadLibrary("basis_transcoder.wasm", "textures", options)
5544
5575
  ]);
5545
5576
  BASIS = BASIS || globalThis.BASIS;
5546
- return await initializeBasisTrascoderModule(BASIS, wasmBinary);
5577
+ return await initializeBasisTranscoderModule(BASIS, wasmBinary);
5547
5578
  }
5548
- function initializeBasisTrascoderModule(BasisModule, wasmBinary) {
5579
+ function initializeBasisTranscoderModule(BasisModule, wasmBinary) {
5549
5580
  const options = {};
5550
5581
  if (wasmBinary) {
5551
5582
  options.wasmBinary = wasmBinary;
@@ -5981,7 +6012,7 @@
5981
6012
  const fileConstructors = await loadBasisEncoderModule(options);
5982
6013
  return parseKTX2File(fileConstructors.KTX2File, data, options);
5983
6014
  }
5984
- const { BasisFile } = await loadBasisTrascoderModule(options);
6015
+ const { BasisFile } = await loadBasisTranscoderModule(options);
5985
6016
  return parseBasisFile(BasisFile, data, options);
5986
6017
  }
5987
6018
  switch (options.basis.module) {
@@ -5996,7 +6027,7 @@
5996
6027
  }
5997
6028
  case "transcoder":
5998
6029
  default:
5999
- const { BasisFile } = await loadBasisTrascoderModule(options);
6030
+ const { BasisFile } = await loadBasisTranscoderModule(options);
6000
6031
  return parseBasisFile(BasisFile, data, options);
6001
6032
  }
6002
6033
  }
@@ -7209,7 +7240,7 @@
7209
7240
  }
7210
7241
 
7211
7242
  // src/i3s-attribute-loader.ts
7212
- var VERSION8 = true ? "4.0.0-alpha.17" : "latest";
7243
+ var VERSION8 = true ? "4.0.0-alpha.18" : "latest";
7213
7244
  var I3SAttributeLoader = {
7214
7245
  name: "I3S Attribute",
7215
7246
  id: "i3s-attribute",
@@ -7672,7 +7703,7 @@
7672
7703
  }
7673
7704
 
7674
7705
  // src/i3s-content-loader.ts
7675
- var VERSION9 = true ? "4.0.0-alpha.17" : "beta";
7706
+ var VERSION9 = true ? "4.0.0-alpha.18" : "beta";
7676
7707
  var I3SContentLoader = {
7677
7708
  name: "I3S Content (Indexed Scene Layers)",
7678
7709
  id: "i3s-content",
@@ -82,10 +82,8 @@ async function parseTileset(data, options, context) {
82
82
  if (tilesetJson?.layerType === POINT_CLOUD) {
83
83
  throw new Error('Point Cloud layers currently are not supported by I3SLoader');
84
84
  }
85
- // eslint-disable-next-line no-use-before-define
86
- tilesetJson.loader = exports.I3SLoader;
87
- await (0, parse_i3s_1.normalizeTilesetData)(tilesetJson, options, context);
88
- return tilesetJson;
85
+ const tilesetPostprocessed = await (0, parse_i3s_1.normalizeTilesetData)(tilesetJson, options, context);
86
+ return tilesetPostprocessed;
89
87
  }
90
88
  async function parseTile(data, context) {
91
89
  data = JSON.parse(new TextDecoder().decode(data));
package/dist/index.d.ts CHANGED
@@ -1,5 +1,6 @@
1
- export type { BoundingVolumes, Mbs, Obb, SceneLayer3D, AttributeStorageInfo, Field, ESRIField, PopupInfo, Node3DIndexDocument, LodSelection, NodeReference, Resource, MaxScreenThresholdSQ, NodeInPage, SharedResources, Attribute, Extent, FeatureAttribute, FieldInfo, I3SMaterialDefinition, TextureDefinitionInfo, MaterialDefinitionInfo, FullExtent, StatisticsInfo, StatsInfo, Histogram, ValueCount, BuildingSceneSublayer, OperationalLayer, TextureSetDefinitionFormats } from './types';
1
+ export type { BoundingVolumes, Mbs, Obb, I3STilesetHeader, I3STileContent, I3STileHeader, SceneLayer3D, AttributeStorageInfo, Field, ESRIField, PopupInfo, Node3DIndexDocument, LodSelection, NodeReference, Resource, MaxScreenThresholdSQ, NodeInPage, SharedResources, Attribute, Extent, FeatureAttribute, FieldInfo, I3SMaterialDefinition, TextureDefinitionInfo, MaterialDefinitionInfo, FullExtent, StatisticsInfo, StatsInfo, Histogram, ValueCount, BuildingSceneSublayer, OperationalLayer, TextureSetDefinitionFormats } from './types';
2
2
  export type { FileProvider } from './lib/parsers/parse-zip/file-provider';
3
+ export type { I3SLoaderOptions } from './i3s-loader';
3
4
  export { COORDINATE_SYSTEM } from './lib/parsers/constants';
4
5
  export { I3SLoader } from './i3s-loader';
5
6
  export { SLPKLoader } from './i3s-slpk-loader';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,YAAY,EACV,eAAe,EACf,GAAG,EACH,GAAG,EACH,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,YAAY,EAAC,MAAM,uCAAuC,CAAC;AAExE,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;AAC9D,OAAO,EAAC,uBAAuB,EAAC,MAAM,2CAA2C,CAAC;AAClF,OAAO,EAAC,SAAS,EAAC,MAAM,qCAAqC,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,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,YAAY,EAAC,MAAM,uCAAuC,CAAC;AACxE,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;AAC9D,OAAO,EAAC,uBAAuB,EAAC,MAAM,2CAA2C,CAAC;AAClF,OAAO,EAAC,SAAS,EAAC,MAAM,qCAAqC,CAAC"}
@@ -1,10 +1,10 @@
1
1
  import type { LoaderOptions } from '@loaders.gl/loader-utils';
2
- import { I3STilesetHeader, NodePage, NodeInPage, I3STextureFormat, I3STileHeader } from '../../types';
2
+ import { NodePage, NodeInPage, I3STextureFormat, I3STileHeader, SceneLayer3D } from '../../types';
3
3
  /**
4
4
  * class I3SNodePagesTiles - loads nodePages and form i3s tiles from them
5
5
  */
6
6
  export default class I3SNodePagesTiles {
7
- tileset: I3STilesetHeader;
7
+ tileset: SceneLayer3D;
8
8
  nodePages: NodePage[];
9
9
  pendingNodePages: {
10
10
  promise: Promise<NodePage>;
@@ -18,14 +18,16 @@ export default class I3SNodePagesTiles {
18
18
  name: string;
19
19
  } | null)[];
20
20
  nodesInNodePages: number;
21
+ url: string;
21
22
  private textureLoaderOptions;
22
23
  /**
23
24
  * @constructs
24
25
  * Create a I3SNodePagesTiles instance.
25
26
  * @param tileset - i3s tileset header ('layers/0')
27
+ * @param url - tileset url
26
28
  * @param options - i3s loader options
27
29
  */
28
- constructor(tileset: I3STilesetHeader, options: LoaderOptions);
30
+ constructor(tileset: SceneLayer3D, url: string | undefined, options: LoaderOptions);
29
31
  /**
30
32
  * Loads some nodePage and return a particular node from it
31
33
  * @param id - id of node through all node pages
@@ -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,EACL,gBAAgB,EAEhB,QAAQ,EACR,UAAU,EAIV,gBAAgB,EAEhB,aAAa,EACd,MAAM,aAAa,CAAC;AAErB;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,iBAAiB;IACpC,OAAO,EAAE,gBAAgB,CAAC;IAC1B,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,OAAO,CAAC,oBAAoB,CAA4B;IAExD;;;;;OAKG;gBACS,OAAO,EAAE,gBAAgB,EAAE,OAAO,EAAE,aAAa;IAU7D;;;OAGG;IACG,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAuBlD;;;OAGG;IAEG,qBAAqB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IA4D/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"}
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;IAuBlD;;;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"}
@@ -13,14 +13,16 @@ class I3SNodePagesTiles {
13
13
  * @constructs
14
14
  * Create a I3SNodePagesTiles instance.
15
15
  * @param tileset - i3s tileset header ('layers/0')
16
+ * @param url - tileset url
16
17
  * @param options - i3s loader options
17
18
  */
18
- constructor(tileset, options) {
19
+ constructor(tileset, url = '', options) {
19
20
  this.nodePages = [];
20
21
  this.pendingNodePages = [];
21
22
  this.textureDefinitionsSelectedFormats = [];
22
23
  this.textureLoaderOptions = {};
23
24
  this.tileset = { ...tileset }; // spread the tileset to avoid circular reference
25
+ this.url = url;
24
26
  this.nodesPerPage = tileset.nodePages?.nodesPerPage || 64;
25
27
  this.lodSelectionMetricType = tileset.nodePages?.lodSelectionMetricType;
26
28
  this.options = options;
@@ -34,7 +36,7 @@ class I3SNodePagesTiles {
34
36
  async getNodeById(id) {
35
37
  const pageIndex = Math.floor(id / this.nodesPerPage);
36
38
  if (!this.nodePages[pageIndex] && !this.pendingNodePages[pageIndex]) {
37
- const nodePageUrl = (0, url_utils_1.getUrlWithToken)(`${this.tileset.url}/nodepages/${pageIndex}`,
39
+ const nodePageUrl = (0, url_utils_1.getUrlWithToken)(`${this.url}/nodepages/${pageIndex}`,
38
40
  // @ts-expect-error this.options is not properly typed
39
41
  this.options.i3s?.token);
40
42
  this.pendingNodePages[pageIndex] = {
@@ -86,10 +88,10 @@ class I3SNodePagesTiles {
86
88
  materialDefinition = nodeMaterialDefinition;
87
89
  textureFormat = textureData.format || textureFormat;
88
90
  if (textureData.name) {
89
- textureUrl = `${this.tileset.url}/nodes/${node.mesh.material.resource}/textures/${textureData.name}`;
91
+ textureUrl = `${this.url}/nodes/${node.mesh.material.resource}/textures/${textureData.name}`;
90
92
  }
91
93
  if (this.tileset.attributeStorageInfo) {
92
- attributeUrls = (0, url_utils_1.generateTilesetAttributeUrls)(this.tileset, node.mesh.attribute.resource);
94
+ attributeUrls = (0, url_utils_1.generateTilesetAttributeUrls)(this.tileset, this.url, node.mesh.attribute.resource);
93
95
  }
94
96
  }
95
97
  const lodSelection = this.getLodSelection(node);
@@ -131,7 +133,7 @@ class I3SNodePagesTiles {
131
133
  if (geometryIndex !== -1) {
132
134
  const isDracoGeometry = Boolean(geometryDefinition.geometryBuffers[geometryIndex].compressedAttributes);
133
135
  result = {
134
- url: `${this.tileset.url}/nodes/${meshGeometryData.resource}/geometries/${geometryIndex}`,
136
+ url: `${this.url}/nodes/${meshGeometryData.resource}/geometries/${geometryIndex}`,
135
137
  isDracoGeometry
136
138
  };
137
139
  }
@@ -1,6 +1,6 @@
1
- import { I3STilesetHeader, I3STileHeader, I3SMinimalNodeData, Node3DIndexDocument } from '../../types';
1
+ import { I3STilesetHeader, I3STileHeader, I3SMinimalNodeData, Node3DIndexDocument, SceneLayer3D } from '../../types';
2
2
  import type { LoaderOptions, LoaderContext } from '@loaders.gl/loader-utils';
3
3
  export declare function normalizeTileData(tile: Node3DIndexDocument, context: LoaderContext): I3STileHeader;
4
4
  export declare function normalizeTileNonUrlData(tile: I3SMinimalNodeData): I3STileHeader;
5
- export declare function normalizeTilesetData(tileset: I3STilesetHeader, options: LoaderOptions, context: LoaderContext): Promise<void>;
5
+ export declare function normalizeTilesetData(tileset: SceneLayer3D, options: LoaderOptions, context: LoaderContext): Promise<I3STilesetHeader>;
6
6
  //# sourceMappingURL=parse-i3s.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"parse-i3s.d.ts","sourceRoot":"","sources":["../../../src/lib/parsers/parse-i3s.ts"],"names":[],"mappings":"AAMA,OAAO,EACL,gBAAgB,EAChB,aAAa,EAEb,kBAAkB,EAClB,mBAAmB,EACpB,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAC,aAAa,EAAE,aAAa,EAAC,MAAM,0BAA0B,CAAC;AAE3E,wBAAgB,iBAAiB,CAAC,IAAI,EAAG,mBAAmB,EAAE,OAAO,EAAE,aAAa,GAAG,aAAa,CAyBnG;AAED,wBAAgB,uBAAuB,CAAC,IAAI,EAAG,kBAAkB,GAAG,aAAa,CAmChF;AAED,wBAAsB,oBAAoB,CAAC,OAAO,EAAG,gBAAgB,EAAE,OAAO,EAAG,aAAa,EAAE,OAAO,EAAE,aAAa,iBA0BrH"}
1
+ {"version":3,"file":"parse-i3s.d.ts","sourceRoot":"","sources":["../../../src/lib/parsers/parse-i3s.ts"],"names":[],"mappings":"AAMA,OAAO,EACL,gBAAgB,EAChB,aAAa,EAEb,kBAAkB,EAClB,mBAAmB,EACnB,YAAY,EACb,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAC,aAAa,EAAE,aAAa,EAAC,MAAM,0BAA0B,CAAC;AAG3E,wBAAgB,iBAAiB,CAAC,IAAI,EAAG,mBAAmB,EAAE,OAAO,EAAE,aAAa,GAAG,aAAa,CA6BnG;AAED,wBAAgB,uBAAuB,CAAC,IAAI,EAAG,kBAAkB,GAAG,aAAa,CAkChF;AAED,wBAAsB,oBAAoB,CAAC,OAAO,EAAG,YAAY,EAAE,OAAO,EAAG,aAAa,EAAE,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,gBAAgB,CAAC,CA8B7I"}
@@ -10,6 +10,7 @@ const core_1 = require("@loaders.gl/core");
10
10
  const tiles_1 = require("@loaders.gl/tiles");
11
11
  const i3s_nodepages_tiles_1 = __importDefault(require("../helpers/i3s-nodepages-tiles"));
12
12
  const url_utils_1 = require("../utils/url-utils");
13
+ const i3s_loader_1 = require("../../i3s-loader");
13
14
  function normalizeTileData(tile, context) {
14
15
  const url = context.url || '';
15
16
  let contentUrl;
@@ -24,11 +25,14 @@ function normalizeTileData(tile, context) {
24
25
  if (tile.attributeData) {
25
26
  attributeUrls = (0, url_utils_1.generateTileAttributeUrls)(url, tile);
26
27
  }
28
+ const children = tile.children || [];
27
29
  return normalizeTileNonUrlData({
28
30
  ...tile,
31
+ children,
29
32
  url,
30
33
  contentUrl,
31
34
  textureUrl,
35
+ textureFormat: 'jpg',
32
36
  attributeUrls,
33
37
  isDracoGeometry: false
34
38
  });
@@ -57,26 +61,27 @@ function normalizeTileNonUrlData(tile) {
57
61
  }
58
62
  const lodMetricType = tile.lodSelection?.[0].metricType;
59
63
  const lodMetricValue = tile.lodSelection?.[0].maxError;
60
- const transformMatrix = tile.transform;
61
64
  const type = tiles_1.TILE_TYPE.MESH;
62
65
  /**
63
66
  * I3S specification supports only REPLACE
64
67
  */
65
68
  const refine = tiles_1.TILE_REFINEMENT.REPLACE;
66
- return { ...tile, mbs, boundingVolume, lodMetricType, lodMetricValue, transformMatrix, type, refine };
69
+ return { ...tile, mbs, boundingVolume, lodMetricType, lodMetricValue, type, refine };
67
70
  }
68
71
  exports.normalizeTileNonUrlData = normalizeTileNonUrlData;
69
72
  async function normalizeTilesetData(tileset, options, context) {
70
- tileset.url = context.url;
73
+ const url = context.url;
74
+ let nodePagesTile;
75
+ let root;
71
76
  if (tileset.nodePages) {
72
- tileset.nodePagesTile = new i3s_nodepages_tiles_1.default(tileset, options);
73
- tileset.root = tileset.nodePagesTile.formTileFromNodePages(0);
77
+ nodePagesTile = new i3s_nodepages_tiles_1.default(tileset, url, options);
78
+ root = await nodePagesTile.formTileFromNodePages(0);
74
79
  }
75
80
  else {
76
81
  // @ts-expect-error options is not properly typed
77
82
  const rootNodeUrl = (0, url_utils_1.getUrlWithToken)(`${tileset.url}/nodes/root`, options.i3s?.token);
78
83
  // eslint-disable-next-line no-use-before-define
79
- tileset.root = await (0, core_1.load)(rootNodeUrl, tileset.loader, {
84
+ root = await (0, core_1.load)(rootNodeUrl, i3s_loader_1.I3SLoader, {
80
85
  ...options,
81
86
  i3s: {
82
87
  // @ts-expect-error options is not properly typed
@@ -85,11 +90,15 @@ async function normalizeTilesetData(tileset, options, context) {
85
90
  }
86
91
  });
87
92
  }
88
- // base path that non-absolute paths in tileset are relative to.
89
- tileset.basePath = tileset.url;
90
- tileset.type = tiles_1.TILESET_TYPE.I3S;
91
- // populate from root node
92
- tileset.lodMetricType = tileset.root.lodMetricType;
93
- tileset.lodMetricValue = tileset.root.lodMetricValue;
93
+ return {
94
+ ...tileset,
95
+ url,
96
+ basePath: url,
97
+ type: tiles_1.TILESET_TYPE.I3S,
98
+ nodePagesTile,
99
+ root,
100
+ lodMetricType: root.lodMetricType,
101
+ lodMetricValue: root.lodMetricValue
102
+ };
94
103
  }
95
104
  exports.normalizeTilesetData = normalizeTilesetData;
@@ -1,4 +1,4 @@
1
- import { Node3DIndexDocument } from '../../types';
1
+ import { Node3DIndexDocument, SceneLayer3D } from '../../types';
2
2
  /**
3
3
  * Generates url with token if it is exists.
4
4
  * @param url
@@ -14,9 +14,10 @@ export declare function getUrlWithToken(url: string, token?: string | null): str
14
14
  export declare function generateTileAttributeUrls(url: string, tile: Node3DIndexDocument): string[];
15
15
  /**
16
16
  * Generates attribute urls for tileset based on tileset and resource
17
- * @param {Object} tileset
18
- * @param {number} resource
17
+ * @param tileset - tileset metadata
18
+ * @param url - tileset base url
19
+ * @param resource - resource id per I3S spec
19
20
  * @returns {Array}
20
21
  */
21
- export declare function generateTilesetAttributeUrls(tileset: any, resource: any): string[];
22
+ export declare function generateTilesetAttributeUrls(tileset: SceneLayer3D, url: string, resource: number): string[];
22
23
  //# sourceMappingURL=url-utils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"url-utils.d.ts","sourceRoot":"","sources":["../../../src/lib/utils/url-utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,mBAAmB,EAAC,MAAM,aAAa,CAAC;AAEhD;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,GAAE,MAAM,GAAG,IAAW,GAAG,MAAM,CAEhF;AAED;;;;GAIG;AACH,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,mBAAmB,GAAG,MAAM,EAAE,CAU1F;AAED;;;;;GAKG;AACH,wBAAgB,4BAA4B,CAAC,OAAO,KAAA,EAAE,QAAQ,KAAA,YAU7D"}
1
+ {"version":3,"file":"url-utils.d.ts","sourceRoot":"","sources":["../../../src/lib/utils/url-utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,mBAAmB,EAAE,YAAY,EAAC,MAAM,aAAa,CAAC;AAE9D;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,GAAE,MAAM,GAAG,IAAW,GAAG,MAAM,CAEhF;AAED;;;;GAIG;AACH,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,mBAAmB,GAAG,MAAM,EAAE,CAU1F;AAED;;;;;;GAMG;AACH,wBAAgB,4BAA4B,CAAC,OAAO,EAAE,YAAY,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,YAUhG"}
@@ -28,13 +28,14 @@ function generateTileAttributeUrls(url, tile) {
28
28
  exports.generateTileAttributeUrls = generateTileAttributeUrls;
29
29
  /**
30
30
  * Generates attribute urls for tileset based on tileset and resource
31
- * @param {Object} tileset
32
- * @param {number} resource
31
+ * @param tileset - tileset metadata
32
+ * @param url - tileset base url
33
+ * @param resource - resource id per I3S spec
33
34
  * @returns {Array}
34
35
  */
35
- function generateTilesetAttributeUrls(tileset, resource) {
36
+ function generateTilesetAttributeUrls(tileset, url, resource) {
36
37
  const attributeUrls = [];
37
- const { attributeStorageInfo, url } = tileset;
38
+ const { attributeStorageInfo = [] } = tileset;
38
39
  for (let index = 0; index < attributeStorageInfo.length; index++) {
39
40
  const fileName = attributeStorageInfo[index].key;
40
41
  attributeUrls.push(`${url}/nodes/${resource}/attributes/${fileName}/0`);
package/dist/types.d.ts CHANGED
@@ -1,14 +1,26 @@
1
1
  import type { Matrix4, Quaternion, Vector3 } from '@math.gl/core';
2
2
  import type { TypedArray, MeshAttribute, TextureLevel } from '@loaders.gl/schema';
3
- import { Tile3D, Tileset3D } from '@loaders.gl/tiles';
3
+ import { TILESET_TYPE, TILE_REFINEMENT, TILE_TYPE, Tile3D, Tileset3D } from '@loaders.gl/tiles';
4
+ import I3SNodePagesTiles from './lib/helpers/i3s-nodepages-tiles';
4
5
  export type COLOR = [number, number, number, number];
5
6
  /**
6
- * spec - https://github.com/Esri/i3s-spec/blob/master/docs/1.8/3DSceneLayer.cmn.md
7
+ * Extension of SceneLayer3D JSON with postprocessed loader data
7
8
  */
8
9
  export interface I3STilesetHeader extends SceneLayer3D {
9
10
  /** Not in spec, but is necessary for woking */
10
11
  url?: string;
11
- [key: string]: any;
12
+ /** Base path that non-absolute paths in tileset are relative to. */
13
+ basePath?: string;
14
+ /** root node metadata */
15
+ root: I3STileHeader;
16
+ /** instance of the NodePages to tiles loader */
17
+ nodePagesTile?: I3SNodePagesTiles;
18
+ /** Type of the tileset */
19
+ type: TILESET_TYPE.I3S;
20
+ /** LOD metric type per I3S spec*/
21
+ lodMetricType?: string;
22
+ /** LOD metric value */
23
+ lodMetricValue?: number;
12
24
  }
13
25
  /** https://github.com/Esri/i3s-spec/blob/master/docs/1.8/nodePage.cmn.md */
14
26
  export type NodePage = {
@@ -53,18 +65,64 @@ type meshAttribute = {
53
65
  /** The resource identifier to be used to locate attribute resources of this mesh. i.e. layers/0/nodes/<resource id>/attributes/... */
54
66
  resource: number;
55
67
  };
68
+ /**
69
+ * Texture format
70
+ * @see https://github.com/Esri/i3s-spec/blob/master/docs/1.7/textureSetDefinitionFormat.cmn.md
71
+ */
56
72
  export type I3STextureFormat = 'jpg' | 'png' | 'ktx-etc2' | 'dds' | 'ktx2';
57
- export type I3STileHeader = {
58
- isDracoGeometry: boolean;
59
- textureUrl?: string;
60
- url?: string;
61
- textureFormat?: I3STextureFormat;
62
- textureLoaderOptions?: any;
63
- materialDefinition?: I3SMaterialDefinition;
73
+ /** Postprocessed I3S Node */
74
+ export type I3STileHeader = I3SMinimalNodeData & {
75
+ /** MBS per I3S spec */
64
76
  mbs: Mbs;
65
- obb?: Obb;
77
+ /** Material definition from the layer metadata per I3S spec */
78
+ materialDefinition?: I3SMaterialDefinition;
79
+ /** Bounding volume converted to 3DTiles format. It is generic for `tile` module */
80
+ boundingVolume: {
81
+ box?: number[];
82
+ sphere?: number[];
83
+ };
84
+ /** LOD metric selected for usage */
85
+ lodMetricType?: string;
86
+ /** LOD metric value */
87
+ lodMetricValue?: number;
88
+ /** Tile content type */
89
+ type: TILE_TYPE.MESH;
90
+ /** Tile refinement type. I3S supports only `REPLACE` */
91
+ refine: TILE_REFINEMENT.REPLACE;
92
+ };
93
+ /**
94
+ * Minimal I3S node data is needed for loading
95
+ * These data can come from 3DNodeIndexDocument (I3S spec) or from `I3SNodePagesTiles` instance
96
+ * @see https://github.com/Esri/i3s-spec/blob/master/docs/1.7/3DNodeIndexDocument.cmn.md
97
+ */
98
+ export type I3SMinimalNodeData = {
99
+ /** Node ID */
100
+ id: string;
101
+ /** Node base path */
102
+ url?: string;
103
+ /** LOD selection metrics */
66
104
  lodSelection?: LodSelection[];
67
- [key: string]: any;
105
+ obb?: Obb;
106
+ /** MBS per I3S spec */
107
+ mbs?: Mbs;
108
+ /** Geometry content URL */
109
+ contentUrl?: string;
110
+ /** Texture image URL */
111
+ textureUrl?: string;
112
+ /** Feature attributes URLs */
113
+ attributeUrls?: string[];
114
+ /** Material definition from I3S layer metadata */
115
+ materialDefinition?: I3SMaterialDefinition;
116
+ /** Texture format per I3S spec */
117
+ textureFormat: I3STextureFormat;
118
+ /** Loader options for texture loader. The loader might be `CompressedTextureLoader` for `dds`, BasisLoader for `ktx2` or ImageLoader for `jpg`and `png` */
119
+ textureLoaderOptions?: {
120
+ [key: string]: any;
121
+ };
122
+ /** Child Nodes references */
123
+ children: NodeReference[];
124
+ /** Is the node has Draco compressed geometry */
125
+ isDracoGeometry: boolean;
68
126
  };
69
127
  export type I3SParseOptions = {
70
128
  /** ArcGIS access token */
@@ -89,13 +147,20 @@ export type I3SParseOptions = {
89
147
  * Supported coordinate systems: METER_OFFSETS, LNGLAT_OFFSETS
90
148
  */
91
149
  coordinateSystem?: number;
150
+ /** Options to colorize 3DObjects by attribute value */
92
151
  colorsByAttribute?: {
152
+ /** Feature attribute name */
93
153
  attributeName: string;
154
+ /** Minimum attribute value */
94
155
  minValue: number;
156
+ /** Maximum attribute value */
95
157
  maxValue: number;
158
+ /** Minimum color. 3DObject will be colorized with gradient from `minColor to `maxColor` */
96
159
  minColor: COLOR;
160
+ /** Maximum color. 3DObject will be colorized with gradient from `minColor to `maxColor` */
97
161
  maxColor: COLOR;
98
- mode: string;
162
+ /** Colorization mode. `replace` - replace vertex colors with a new colors, `multiply` - multiply vertex colors with new colors */
163
+ mode: 'multiply' | 'replace';
99
164
  };
100
165
  /** @deprecated */
101
166
  tile?: Tile3D | I3STileOptions;
@@ -139,11 +204,19 @@ export type BoundingVolumes = {
139
204
  mbs: Mbs;
140
205
  obb: Obb;
141
206
  };
207
+ /**
208
+ * Oriented bounding box per I3S spec
209
+ * @see https://github.com/Esri/i3s-spec/blob/master/docs/1.7/obb.cmn.md
210
+ */
142
211
  export type Obb = {
143
212
  center: number[] | Vector3;
144
213
  halfSize: number[] | Vector3;
145
214
  quaternion: number[] | Quaternion;
146
215
  };
216
+ /**
217
+ * Minimum bounding sphere per I3S spec
218
+ * @see https://github.com/Esri/i3s-spec/blob/master/docs/1.7/3DNodeIndexDocument.cmn.md#properties
219
+ */
147
220
  export type Mbs = [number, number, number, number];
148
221
  /** SceneLayer3D based on I3S specification - https://github.com/Esri/i3s-spec/blob/master/docs/1.8/3DSceneLayer.cmn.md */
149
222
  export type SceneLayer3D = {
@@ -345,36 +418,31 @@ export type Node3DIndexDocument = {
345
418
  expires?: string;
346
419
  };
347
420
  /**
348
- * Minimal I3S node data is needed for loading
421
+ * LOD selection metrics per I3S spec
422
+ * @see https://github.com/Esri/i3s-spec/blob/master/docs/1.7/lodSelection.cmn.md
349
423
  */
350
- export type I3SMinimalNodeData = {
351
- id: string;
352
- url?: string;
353
- transform?: number[];
354
- lodSelection?: LodSelection[];
355
- obb?: Obb;
356
- mbs?: Mbs;
357
- contentUrl?: string;
358
- textureUrl?: string;
359
- attributeUrls?: string[];
360
- materialDefinition?: I3SMaterialDefinition;
361
- textureFormat?: I3STextureFormat;
362
- textureLoaderOptions?: {
363
- [key: string]: any;
364
- };
365
- children?: NodeReference[];
366
- isDracoGeometry: boolean;
367
- };
368
424
  export type LodSelection = {
425
+ /** */
369
426
  metricType?: string;
370
427
  maxError: number;
371
428
  };
429
+ /**
430
+ * Node reference per I3S spec
431
+ * @see https://github.com/Esri/i3s-spec/blob/master/docs/1.7/nodeReference.cmn.md
432
+ */
372
433
  export type NodeReference = {
434
+ /** Tree Key ID of the referenced node represented as string. */
373
435
  id: string;
436
+ /** Version (store update session ID) of the referenced node. */
374
437
  version?: string;
438
+ /** An array of four doubles, corresponding to x, y, z and radius of the minimum bounding sphere of a node. */
375
439
  mbs?: Mbs;
440
+ /** Describes oriented bounding box. */
376
441
  obb?: Obb;
442
+ /** Number of values per element. */
377
443
  href?: string;
444
+ /** Number of features in the referenced node and its descendants, down to the leaf nodes. */
445
+ featureCount?: number;
378
446
  };
379
447
  export type Resource = {
380
448
  href: string;
@@ -716,7 +784,7 @@ type TextureSetDefinition = {
716
784
  };
717
785
  /** Spec - https://github.com/Esri/i3s-spec/blob/master/docs/1.8/geometryDefinition.cmn.md */
718
786
  type GeometryDefinition = {
719
- topology: 'triangle' | string;
787
+ topology?: 'triangle';
720
788
  geometryBuffers: GeometryBuffer[];
721
789
  };
722
790
  /** Spec - https://github.com/Esri/i3s-spec/blob/master/docs/1.8/geometryBuffer.cmn.md */
@@ -738,7 +806,7 @@ type GeometryBufferItem = {
738
806
  type: string;
739
807
  component: number;
740
808
  encoding?: string;
741
- binding: string;
809
+ binding?: string;
742
810
  };
743
811
  type AttributeValue = {
744
812
  valueType: string;