@loaders.gl/3d-tiles 3.2.5 → 3.3.0-alpha.1

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 CHANGED
@@ -14,8 +14,8 @@
14
14
  };
15
15
  var __export = (target, all) => {
16
16
  __markAsModule(target);
17
- for (var name8 in all)
18
- __defProp(target, name8, { get: all[name8], enumerable: true });
17
+ for (var name9 in all)
18
+ __defProp(target, name9, { get: all[name9], enumerable: true });
19
19
  };
20
20
  var __reExport = (target, module2, desc) => {
21
21
  if (module2 && typeof module2 === "object" || typeof module2 === "function") {
@@ -64,7 +64,7 @@
64
64
  var DEFAULT_VERSION, VERSION;
65
65
  var init_version = __esm({
66
66
  "../worker-utils/src/lib/env-utils/version.ts"() {
67
- DEFAULT_VERSION = "latest";
67
+ DEFAULT_VERSION = "beta";
68
68
  VERSION = typeof __VERSION__ !== "undefined" ? __VERSION__ : DEFAULT_VERSION;
69
69
  if (typeof __VERSION__ === "undefined") {
70
70
  console.error("loaders.gl: The __VERSION__ variable is not injected using babel plugin. Latest unstable workers would be fetched from the CDN.");
@@ -252,9 +252,9 @@
252
252
  constructor(props) {
253
253
  this.terminated = false;
254
254
  this._loadableURL = "";
255
- const { name: name8, source, url } = props;
255
+ const { name: name9, source, url } = props;
256
256
  assert3(source || url);
257
- this.name = name8;
257
+ this.name = name9;
258
258
  this.source = source;
259
259
  this.url = url;
260
260
  this.onMessage = NOOP;
@@ -379,9 +379,9 @@
379
379
  this.onDebug = props.onDebug;
380
380
  }
381
381
  }
382
- async startJob(name8, onMessage2 = (job, type, data) => job.done(data), onError = (job, error) => job.error(error)) {
382
+ async startJob(name9, onMessage2 = (job, type, data) => job.done(data), onError = (job, error) => job.error(error)) {
383
383
  const startPromise = new Promise((onStart) => {
384
- this.jobQueue.push({ name: name8, onMessage: onMessage2, onError, onStart });
384
+ this.jobQueue.push({ name: name9, onMessage: onMessage2, onError, onStart });
385
385
  return this;
386
386
  });
387
387
  this._startQueuedJob();
@@ -432,8 +432,8 @@
432
432
  }
433
433
  if (this.count < this._getMaxConcurrency()) {
434
434
  this.count++;
435
- const name8 = `${this.name.toLowerCase()} (#${this.count} of ${this.maxConcurrency})`;
436
- return new WorkerThread({ name: name8, source: this.source, url: this.url });
435
+ const name9 = `${this.name.toLowerCase()} (#${this.count} of ${this.maxConcurrency})`;
436
+ return new WorkerThread({ name: name9, source: this.source, url: this.url });
437
437
  }
438
438
  return null;
439
439
  }
@@ -485,16 +485,16 @@
485
485
  }
486
486
  }
487
487
  getWorkerPool(options) {
488
- const { name: name8, source, url } = options;
489
- let workerPool = this.workerPools.get(name8);
488
+ const { name: name9, source, url } = options;
489
+ let workerPool = this.workerPools.get(name9);
490
490
  if (!workerPool) {
491
491
  workerPool = new WorkerPool({
492
- name: name8,
492
+ name: name9,
493
493
  source,
494
494
  url
495
495
  });
496
496
  workerPool.setProps(this._getWorkerPoolProps());
497
- this.workerPools.set(name8, workerPool);
497
+ this.workerPools.set(name9, workerPool);
498
498
  }
499
499
  return workerPool;
500
500
  }
@@ -536,7 +536,7 @@
536
536
  var init_get_worker_url = __esm({
537
537
  "../worker-utils/src/lib/worker-api/get-worker-url.ts"() {
538
538
  init_assert2();
539
- NPM_TAG = "latest";
539
+ NPM_TAG = "beta";
540
540
  }
541
541
  });
542
542
 
@@ -634,7 +634,7 @@
634
634
  node = __toModule(require_require_utils());
635
635
  init_assert2();
636
636
  init_version();
637
- LATEST = "latest";
637
+ LATEST = "beta";
638
638
  VERSION2 = typeof VERSION !== "undefined" ? VERSION : LATEST;
639
639
  loadLibraryPromises = {};
640
640
  }
@@ -663,10 +663,10 @@
663
663
  return loader.worker && options?.worker;
664
664
  }
665
665
  async function parseWithWorker(loader, data, options, context, parseOnMainThread) {
666
- const name8 = loader.id;
666
+ const name9 = loader.id;
667
667
  const url = getWorkerURL(loader, options);
668
668
  const workerFarm = WorkerFarm.getWorkerFarm(options);
669
- const workerPool = workerFarm.getWorkerPool({ name: name8, url });
669
+ const workerPool = workerFarm.getWorkerPool({ name: name9, url });
670
670
  options = JSON.parse(JSON.stringify(options));
671
671
  context = JSON.parse(JSON.stringify(context || {}));
672
672
  const job = await workerPool.startJob("process-on-worker", onMessage.bind(null, parseOnMainThread));
@@ -4670,7 +4670,7 @@
4670
4670
  const propNames = Object.getOwnPropertyNames(proto);
4671
4671
  for (const key of propNames) {
4672
4672
  if (typeof obj[key] === "function") {
4673
- if (!predefined.find((name8) => key === name8)) {
4673
+ if (!predefined.find((name9) => key === name9)) {
4674
4674
  obj[key] = obj[key].bind(obj);
4675
4675
  }
4676
4676
  }
@@ -5564,7 +5564,7 @@
5564
5564
  const propNames = Object.getOwnPropertyNames(proto);
5565
5565
  for (const key of propNames) {
5566
5566
  if (typeof obj[key] === "function") {
5567
- if (!predefined.find((name8) => key === name8)) {
5567
+ if (!predefined.find((name9) => key === name9)) {
5568
5568
  obj[key] = obj[key].bind(obj);
5569
5569
  }
5570
5570
  }
@@ -6692,8 +6692,8 @@
6692
6692
  }
6693
6693
  select(...columnNames) {
6694
6694
  const nameMap = Object.create(null);
6695
- for (const name8 of columnNames) {
6696
- nameMap[name8] = true;
6695
+ for (const name9 of columnNames) {
6696
+ nameMap[name9] = true;
6697
6697
  }
6698
6698
  const selectedFields = this.fields.filter((field) => nameMap[field.name]);
6699
6699
  return new Schema(selectedFields, this.metadata);
@@ -6731,8 +6731,8 @@
6731
6731
  var init_field = __esm({
6732
6732
  "../schema/src/lib/schema/impl/field.ts"() {
6733
6733
  Field = class {
6734
- constructor(name8, type, nullable = false, metadata = new Map()) {
6735
- this.name = name8;
6734
+ constructor(name9, type, nullable = false, metadata = new Map()) {
6735
+ this.name = name9;
6736
6736
  this.type = type;
6737
6737
  this.nullable = nullable;
6738
6738
  this.metadata = metadata;
@@ -7719,8 +7719,8 @@
7719
7719
  }
7720
7720
  throw new Error(ERR_TYPE_CONVERSION);
7721
7721
  }
7722
- static fromName(name8) {
7723
- const glType = NAME_TO_GL_TYPE[name8];
7722
+ static fromName(name9) {
7723
+ const glType = NAME_TO_GL_TYPE[name9];
7724
7724
  if (!glType) {
7725
7725
  throw new Error(ERR_TYPE_CONVERSION);
7726
7726
  }
@@ -8279,10 +8279,10 @@
8279
8279
  }
8280
8280
  return void 0;
8281
8281
  }
8282
- hasProperty(batchId, name8) {
8282
+ hasProperty(batchId, name9) {
8283
8283
  this._checkBatchId(batchId);
8284
- assert2(typeof name8 === "string", name8);
8285
- return defined2(this._properties[name8]) || this._hasPropertyInHierarchy(batchId, name8);
8284
+ assert2(typeof name9 === "string", name9);
8285
+ return defined2(this._properties[name9]) || this._hasPropertyInHierarchy(batchId, name9);
8286
8286
  }
8287
8287
  getPropertyNames(batchId, results) {
8288
8288
  this._checkBatchId(batchId);
@@ -8295,47 +8295,47 @@
8295
8295
  }
8296
8296
  return results;
8297
8297
  }
8298
- getProperty(batchId, name8) {
8298
+ getProperty(batchId, name9) {
8299
8299
  this._checkBatchId(batchId);
8300
- assert2(typeof name8 === "string", name8);
8300
+ assert2(typeof name9 === "string", name9);
8301
8301
  if (this._binaryProperties) {
8302
- const binaryProperty = this._binaryProperties[name8];
8302
+ const binaryProperty = this._binaryProperties[name9];
8303
8303
  if (defined2(binaryProperty)) {
8304
8304
  return this._getBinaryProperty(binaryProperty, batchId);
8305
8305
  }
8306
8306
  }
8307
- const propertyValues = this._properties[name8];
8307
+ const propertyValues = this._properties[name9];
8308
8308
  if (defined2(propertyValues)) {
8309
8309
  return clone3(propertyValues[batchId], true);
8310
8310
  }
8311
8311
  if (this._hierarchy) {
8312
- const hierarchyProperty = this._getHierarchyProperty(batchId, name8);
8312
+ const hierarchyProperty = this._getHierarchyProperty(batchId, name9);
8313
8313
  if (defined2(hierarchyProperty)) {
8314
8314
  return hierarchyProperty;
8315
8315
  }
8316
8316
  }
8317
8317
  return void 0;
8318
8318
  }
8319
- setProperty(batchId, name8, value) {
8319
+ setProperty(batchId, name9, value) {
8320
8320
  const featureCount = this.featureCount;
8321
8321
  this._checkBatchId(batchId);
8322
- assert2(typeof name8 === "string", name8);
8322
+ assert2(typeof name9 === "string", name9);
8323
8323
  if (this._binaryProperties) {
8324
- const binaryProperty = this._binaryProperties[name8];
8324
+ const binaryProperty = this._binaryProperties[name9];
8325
8325
  if (binaryProperty) {
8326
8326
  this._setBinaryProperty(binaryProperty, batchId, value);
8327
8327
  return;
8328
8328
  }
8329
8329
  }
8330
8330
  if (this._hierarchy) {
8331
- if (this._setHierarchyProperty(this, batchId, name8, value)) {
8331
+ if (this._setHierarchyProperty(this, batchId, name9, value)) {
8332
8332
  return;
8333
8333
  }
8334
8334
  }
8335
- let propertyValues = this._properties[name8];
8335
+ let propertyValues = this._properties[name9];
8336
8336
  if (!defined2(propertyValues)) {
8337
- this._properties[name8] = new Array(featureCount);
8338
- propertyValues = this._properties[name8];
8337
+ this._properties[name9] = new Array(featureCount);
8338
+ propertyValues = this._properties[name9];
8339
8339
  }
8340
8340
  propertyValues[batchId] = clone3(value, true);
8341
8341
  }
@@ -8353,21 +8353,21 @@
8353
8353
  }
8354
8354
  _initializeBinaryProperties() {
8355
8355
  let binaryProperties = null;
8356
- for (const name8 in this._properties) {
8357
- const property = this._properties[name8];
8358
- const binaryProperty = this._initializeBinaryProperty(name8, property);
8356
+ for (const name9 in this._properties) {
8357
+ const property = this._properties[name9];
8358
+ const binaryProperty = this._initializeBinaryProperty(name9, property);
8359
8359
  if (binaryProperty) {
8360
8360
  binaryProperties = binaryProperties || {};
8361
- binaryProperties[name8] = binaryProperty;
8361
+ binaryProperties[name9] = binaryProperty;
8362
8362
  }
8363
8363
  }
8364
8364
  return binaryProperties;
8365
8365
  }
8366
- _initializeBinaryProperty(name8, property) {
8366
+ _initializeBinaryProperty(name9, property) {
8367
8367
  if ("byteOffset" in property) {
8368
8368
  const tile3DAccessor = property;
8369
- assert2(this.binary, `Property ${name8} requires a batch table binary.`);
8370
- assert2(tile3DAccessor.type, `Property ${name8} requires a type.`);
8369
+ assert2(this.binary, `Property ${name9} requires a batch table binary.`);
8370
+ assert2(tile3DAccessor.type, `Property ${name9} requires a type.`);
8371
8371
  const accessor = createTypedArrayFromAccessor(tile3DAccessor, this.binary.buffer, this.binary.byteOffset | 0, this.featureCount);
8372
8372
  return {
8373
8373
  typedArray: accessor.values,
@@ -8378,14 +8378,14 @@
8378
8378
  }
8379
8379
  return null;
8380
8380
  }
8381
- _hasPropertyInHierarchy(batchId, name8) {
8381
+ _hasPropertyInHierarchy(batchId, name9) {
8382
8382
  if (!this._hierarchy) {
8383
8383
  return false;
8384
8384
  }
8385
8385
  const result = traverseHierarchy(this._hierarchy, batchId, (hierarchy, instanceIndex) => {
8386
8386
  const classId = hierarchy.classIds[instanceIndex];
8387
8387
  const instances = hierarchy.classes[classId].instances;
8388
- return defined2(instances[name8]);
8388
+ return defined2(instances[name9]);
8389
8389
  });
8390
8390
  return defined2(result);
8391
8391
  }
@@ -8393,21 +8393,21 @@
8393
8393
  traverseHierarchy(this._hierarchy, batchId, (hierarchy, instanceIndex) => {
8394
8394
  const classId = hierarchy.classIds[instanceIndex];
8395
8395
  const instances = hierarchy.classes[classId].instances;
8396
- for (const name8 in instances) {
8397
- if (instances.hasOwnProperty(name8)) {
8398
- if (results.indexOf(name8) === -1) {
8399
- results.push(name8);
8396
+ for (const name9 in instances) {
8397
+ if (instances.hasOwnProperty(name9)) {
8398
+ if (results.indexOf(name9) === -1) {
8399
+ results.push(name9);
8400
8400
  }
8401
8401
  }
8402
8402
  }
8403
8403
  });
8404
8404
  }
8405
- _getHierarchyProperty(batchId, name8) {
8405
+ _getHierarchyProperty(batchId, name9) {
8406
8406
  return traverseHierarchy(this._hierarchy, batchId, (hierarchy, instanceIndex) => {
8407
8407
  const classId = hierarchy.classIds[instanceIndex];
8408
8408
  const instanceClass = hierarchy.classes[classId];
8409
8409
  const indexInClass = hierarchy.classIndexes[instanceIndex];
8410
- const propertyValues = instanceClass.instances[name8];
8410
+ const propertyValues = instanceClass.instances[name9];
8411
8411
  if (defined2(propertyValues)) {
8412
8412
  if (defined2(propertyValues.typedArray)) {
8413
8413
  return this._getBinaryProperty(propertyValues, indexInClass);
@@ -8417,14 +8417,14 @@
8417
8417
  return null;
8418
8418
  });
8419
8419
  }
8420
- _setHierarchyProperty(batchTable, batchId, name8, value) {
8420
+ _setHierarchyProperty(batchTable, batchId, name9, value) {
8421
8421
  const result = traverseHierarchy(this._hierarchy, batchId, (hierarchy, instanceIndex) => {
8422
8422
  const classId = hierarchy.classIds[instanceIndex];
8423
8423
  const instanceClass = hierarchy.classes[classId];
8424
8424
  const indexInClass = hierarchy.classIndexes[instanceIndex];
8425
- const propertyValues = instanceClass.instances[name8];
8425
+ const propertyValues = instanceClass.instances[name9];
8426
8426
  if (defined2(propertyValues)) {
8427
- assert2(instanceIndex === batchId, `Inherited property "${name8}" is read-only.`);
8427
+ assert2(instanceIndex === batchId, `Inherited property "${name9}" is read-only.`);
8428
8428
  if (defined2(propertyValues.typedArray)) {
8429
8429
  this._setBinaryProperty(propertyValues, indexInClass, value);
8430
8430
  } else {
@@ -8876,7 +8876,7 @@
8876
8876
  var VERSION8;
8877
8877
  var init_version5 = __esm({
8878
8878
  "../textures/src/lib/utils/version.ts"() {
8879
- VERSION8 = typeof __VERSION__ !== "undefined" ? __VERSION__ : "latest";
8879
+ VERSION8 = typeof __VERSION__ !== "undefined" ? __VERSION__ : "beta";
8880
8880
  }
8881
8881
  });
8882
8882
 
@@ -9948,12 +9948,12 @@
9948
9948
  return extras[key];
9949
9949
  }
9950
9950
  getExtension(extensionName) {
9951
- const isExtension = this.getUsedExtensions().find((name8) => name8 === extensionName);
9951
+ const isExtension = this.getUsedExtensions().find((name9) => name9 === extensionName);
9952
9952
  const extensions = this.json.extensions || {};
9953
9953
  return isExtension ? extensions[extensionName] || true : null;
9954
9954
  }
9955
9955
  getRequiredExtension(extensionName) {
9956
- const isRequired = this.getRequiredExtensions().find((name8) => name8 === extensionName);
9956
+ const isRequired = this.getRequiredExtensions().find((name9) => name9 === extensionName);
9957
9957
  return isRequired ? this.getExtension(extensionName) : null;
9958
9958
  }
9959
9959
  getRequiredExtensions() {
@@ -10607,11 +10607,11 @@
10607
10607
  // ../gltf/src/lib/gltf-utils/gltf-attribute-utils.ts
10608
10608
  function getGLTFAccessors(attributes) {
10609
10609
  const accessors = {};
10610
- for (const name8 in attributes) {
10611
- const attribute = attributes[name8];
10612
- if (name8 !== "indices") {
10610
+ for (const name9 in attributes) {
10611
+ const attribute = attributes[name9];
10612
+ if (name9 !== "indices") {
10613
10613
  const glTFAccessor = getGLTFAccessor(attribute);
10614
- accessors[name8] = glTFAccessor;
10614
+ accessors[name9] = glTFAccessor;
10615
10615
  }
10616
10616
  }
10617
10617
  return accessors;
@@ -10774,14 +10774,201 @@
10774
10774
  }
10775
10775
  });
10776
10776
 
10777
+ // ../gltf/src/lib/gltf-utils/gltf-constants.ts
10778
+ var COMPONENTS, BYTES;
10779
+ var init_gltf_constants = __esm({
10780
+ "../gltf/src/lib/gltf-utils/gltf-constants.ts"() {
10781
+ COMPONENTS = {
10782
+ SCALAR: 1,
10783
+ VEC2: 2,
10784
+ VEC3: 3,
10785
+ VEC4: 4,
10786
+ MAT2: 4,
10787
+ MAT3: 9,
10788
+ MAT4: 16
10789
+ };
10790
+ BYTES = {
10791
+ 5120: 1,
10792
+ 5121: 1,
10793
+ 5122: 2,
10794
+ 5123: 2,
10795
+ 5125: 4,
10796
+ 5126: 4
10797
+ };
10798
+ }
10799
+ });
10800
+
10801
+ // ../gltf/src/lib/extensions/KHR_texture_transform.ts
10802
+ var KHR_texture_transform_exports = {};
10803
+ __export(KHR_texture_transform_exports, {
10804
+ decode: () => decode4,
10805
+ name: () => name5
10806
+ });
10807
+ async function decode4(gltfData, options) {
10808
+ const gltfScenegraph = new GLTFScenegraph(gltfData);
10809
+ const extension = gltfScenegraph.getExtension(EXT_MESHOPT_TRANSFORM);
10810
+ if (!extension) {
10811
+ return;
10812
+ }
10813
+ const materials = gltfData.json.materials || [];
10814
+ for (let i2 = 0; i2 < materials.length; i2++) {
10815
+ transformTexCoords(i2, gltfData);
10816
+ }
10817
+ }
10818
+ function transformTexCoords(materialIndex, gltfData) {
10819
+ const processedTexCoords = [];
10820
+ const material = gltfData.json.materials?.[materialIndex];
10821
+ const baseColorTexture = material?.pbrMetallicRoughness?.baseColorTexture;
10822
+ if (baseColorTexture) {
10823
+ transformPrimitives(gltfData, materialIndex, baseColorTexture, processedTexCoords);
10824
+ }
10825
+ const emisiveTexture = material?.emissiveTexture;
10826
+ if (emisiveTexture) {
10827
+ transformPrimitives(gltfData, materialIndex, emisiveTexture, processedTexCoords);
10828
+ }
10829
+ const normalTexture = material?.normalTexture;
10830
+ if (normalTexture) {
10831
+ transformPrimitives(gltfData, materialIndex, normalTexture, processedTexCoords);
10832
+ }
10833
+ const occlusionTexture = material?.occlusionTexture;
10834
+ if (occlusionTexture) {
10835
+ transformPrimitives(gltfData, materialIndex, occlusionTexture, processedTexCoords);
10836
+ }
10837
+ const metallicRoughnessTexture = material?.pbrMetallicRoughness?.metallicRoughnessTexture;
10838
+ if (metallicRoughnessTexture) {
10839
+ transformPrimitives(gltfData, materialIndex, metallicRoughnessTexture, processedTexCoords);
10840
+ }
10841
+ }
10842
+ function transformPrimitives(gltfData, materialIndex, texture, processedTexCoords) {
10843
+ const transformParameters = getTransformParameters(texture, processedTexCoords);
10844
+ if (!transformParameters) {
10845
+ return;
10846
+ }
10847
+ const meshes = gltfData.json.meshes || [];
10848
+ for (const mesh of meshes) {
10849
+ for (const primitive of mesh.primitives) {
10850
+ const material = primitive.material;
10851
+ if (Number.isFinite(material) && materialIndex === material) {
10852
+ transformPrimitive(gltfData, primitive, transformParameters);
10853
+ }
10854
+ }
10855
+ }
10856
+ }
10857
+ function getTransformParameters(texture, processedTexCoords) {
10858
+ const textureInfo = texture.extensions?.[EXT_MESHOPT_TRANSFORM];
10859
+ const { texCoord: originalTexCoord = 0 } = texture;
10860
+ const { texCoord = originalTexCoord } = textureInfo;
10861
+ const isProcessed = processedTexCoords.findIndex(([original, newTexCoord]) => original === originalTexCoord && newTexCoord === texCoord) !== -1;
10862
+ if (!isProcessed) {
10863
+ const matrix = makeTransformationMatrix(textureInfo);
10864
+ if (originalTexCoord !== texCoord) {
10865
+ texture.texCoord = texCoord;
10866
+ }
10867
+ processedTexCoords.push([originalTexCoord, texCoord]);
10868
+ return { originalTexCoord, texCoord, matrix };
10869
+ }
10870
+ return null;
10871
+ }
10872
+ function transformPrimitive(gltfData, primitive, transformParameters) {
10873
+ const { originalTexCoord, texCoord, matrix } = transformParameters;
10874
+ const texCoordAccessor = primitive.attributes[`TEXCOORD_${originalTexCoord}`];
10875
+ if (Number.isFinite(texCoordAccessor)) {
10876
+ const accessor = gltfData.json.accessors?.[texCoordAccessor];
10877
+ if (accessor && accessor.bufferView) {
10878
+ const bufferView = gltfData.json.bufferViews?.[accessor.bufferView];
10879
+ if (bufferView) {
10880
+ const { arrayBuffer, byteOffset: bufferByteOffset } = gltfData.buffers[bufferView.buffer];
10881
+ const byteOffset = (bufferByteOffset || 0) + (accessor.byteOffset || 0) + (bufferView.byteOffset || 0);
10882
+ const { ArrayType, length: length4 } = getAccessorArrayTypeAndLength(accessor, bufferView);
10883
+ const bytes = BYTES[accessor.componentType];
10884
+ const components = COMPONENTS[accessor.type];
10885
+ const elementAddressScale = bufferView.byteStride || bytes * components;
10886
+ const result = new Float32Array(length4);
10887
+ for (let i2 = 0; i2 < accessor.count; i2++) {
10888
+ const uv = new ArrayType(arrayBuffer, byteOffset + i2 * elementAddressScale, 2);
10889
+ scratchVector5.set(uv[0], uv[1], 1);
10890
+ scratchVector5.transformByMatrix3(matrix);
10891
+ result.set([scratchVector5[0], scratchVector5[1]], i2 * components);
10892
+ }
10893
+ if (originalTexCoord === texCoord) {
10894
+ updateGltf(accessor, bufferView, gltfData.buffers, result);
10895
+ } else {
10896
+ createAttribute(texCoord, accessor, primitive, gltfData, result);
10897
+ }
10898
+ }
10899
+ }
10900
+ }
10901
+ }
10902
+ function updateGltf(accessor, bufferView, buffers, newTexCoordArray) {
10903
+ accessor.componentType = 5126;
10904
+ buffers.push({
10905
+ arrayBuffer: newTexCoordArray.buffer,
10906
+ byteOffset: 0,
10907
+ byteLength: newTexCoordArray.buffer.byteLength
10908
+ });
10909
+ bufferView.buffer = buffers.length - 1;
10910
+ bufferView.byteLength = newTexCoordArray.buffer.byteLength;
10911
+ bufferView.byteOffset = 0;
10912
+ delete bufferView.byteStride;
10913
+ }
10914
+ function createAttribute(newTexCoord, originalAccessor, primitive, gltfData, newTexCoordArray) {
10915
+ gltfData.buffers.push({
10916
+ arrayBuffer: newTexCoordArray.buffer,
10917
+ byteOffset: 0,
10918
+ byteLength: newTexCoordArray.buffer.byteLength
10919
+ });
10920
+ const bufferViews = gltfData.json.bufferViews;
10921
+ if (!bufferViews) {
10922
+ return;
10923
+ }
10924
+ bufferViews.push({
10925
+ buffer: gltfData.buffers.length - 1,
10926
+ byteLength: newTexCoordArray.buffer.byteLength,
10927
+ byteOffset: 0
10928
+ });
10929
+ const accessors = gltfData.json.accessors;
10930
+ if (!accessors) {
10931
+ return;
10932
+ }
10933
+ accessors.push({
10934
+ bufferView: bufferViews?.length - 1,
10935
+ byteOffset: 0,
10936
+ componentType: 5126,
10937
+ count: originalAccessor.count,
10938
+ type: "VEC2"
10939
+ });
10940
+ primitive.attributes[`TEXCOORD_${newTexCoord}`] = accessors.length - 1;
10941
+ }
10942
+ function makeTransformationMatrix(extensionData) {
10943
+ const { offset = [0, 0], rotation = 0, scale: scale5 = [1, 1] } = extensionData;
10944
+ const translationMatirx = new Matrix3().set(1, 0, 0, 0, 1, 0, offset[0], offset[1], 1);
10945
+ const rotationMatirx = scratchRotationMatrix.set(Math.cos(rotation), Math.sin(rotation), 0, -Math.sin(rotation), Math.cos(rotation), 0, 0, 0, 1);
10946
+ const scaleMatrix = scratchScaleMatrix.set(scale5[0], 0, 0, 0, scale5[1], 0, 0, 0, 1);
10947
+ return translationMatirx.multiplyRight(rotationMatirx).multiplyRight(scaleMatrix);
10948
+ }
10949
+ var EXT_MESHOPT_TRANSFORM, name5, scratchVector5, scratchRotationMatrix, scratchScaleMatrix;
10950
+ var init_KHR_texture_transform = __esm({
10951
+ "../gltf/src/lib/extensions/KHR_texture_transform.ts"() {
10952
+ init_esm();
10953
+ init_gltf_utils();
10954
+ init_gltf_constants();
10955
+ init_gltf_scenegraph();
10956
+ EXT_MESHOPT_TRANSFORM = "KHR_texture_transform";
10957
+ name5 = EXT_MESHOPT_TRANSFORM;
10958
+ scratchVector5 = new Vector3();
10959
+ scratchRotationMatrix = new Matrix3();
10960
+ scratchScaleMatrix = new Matrix3();
10961
+ }
10962
+ });
10963
+
10777
10964
  // ../gltf/src/lib/extensions/deprecated/KHR_lights_punctual.ts
10778
10965
  var KHR_lights_punctual_exports = {};
10779
10966
  __export(KHR_lights_punctual_exports, {
10780
- decode: () => decode4,
10967
+ decode: () => decode5,
10781
10968
  encode: () => encode2,
10782
- name: () => name5
10969
+ name: () => name6
10783
10970
  });
10784
- async function decode4(gltfData) {
10971
+ async function decode5(gltfData) {
10785
10972
  const gltfScenegraph = new GLTFScenegraph(gltfData);
10786
10973
  const { json } = gltfScenegraph;
10787
10974
  const extension = gltfScenegraph.getExtension(KHR_LIGHTS_PUNCTUAL);
@@ -10814,24 +11001,24 @@
10814
11001
  delete gltfScenegraph.json.lights;
10815
11002
  }
10816
11003
  }
10817
- var KHR_LIGHTS_PUNCTUAL, name5;
11004
+ var KHR_LIGHTS_PUNCTUAL, name6;
10818
11005
  var init_KHR_lights_punctual = __esm({
10819
11006
  "../gltf/src/lib/extensions/deprecated/KHR_lights_punctual.ts"() {
10820
11007
  init_assert8();
10821
11008
  init_gltf_scenegraph();
10822
11009
  KHR_LIGHTS_PUNCTUAL = "KHR_lights_punctual";
10823
- name5 = KHR_LIGHTS_PUNCTUAL;
11010
+ name6 = KHR_LIGHTS_PUNCTUAL;
10824
11011
  }
10825
11012
  });
10826
11013
 
10827
11014
  // ../gltf/src/lib/extensions/deprecated/KHR_materials_unlit.ts
10828
11015
  var KHR_materials_unlit_exports = {};
10829
11016
  __export(KHR_materials_unlit_exports, {
10830
- decode: () => decode5,
11017
+ decode: () => decode6,
10831
11018
  encode: () => encode3,
10832
- name: () => name6
11019
+ name: () => name7
10833
11020
  });
10834
- async function decode5(gltfData) {
11021
+ async function decode6(gltfData) {
10835
11022
  const gltfScenegraph = new GLTFScenegraph(gltfData);
10836
11023
  const { json } = gltfScenegraph;
10837
11024
  gltfScenegraph.removeExtension(KHR_MATERIALS_UNLIT);
@@ -10856,23 +11043,23 @@
10856
11043
  }
10857
11044
  }
10858
11045
  }
10859
- var KHR_MATERIALS_UNLIT, name6;
11046
+ var KHR_MATERIALS_UNLIT, name7;
10860
11047
  var init_KHR_materials_unlit = __esm({
10861
11048
  "../gltf/src/lib/extensions/deprecated/KHR_materials_unlit.ts"() {
10862
11049
  init_gltf_scenegraph();
10863
11050
  KHR_MATERIALS_UNLIT = "KHR_materials_unlit";
10864
- name6 = KHR_MATERIALS_UNLIT;
11051
+ name7 = KHR_MATERIALS_UNLIT;
10865
11052
  }
10866
11053
  });
10867
11054
 
10868
11055
  // ../gltf/src/lib/extensions/deprecated/KHR_techniques_webgl.ts
10869
11056
  var KHR_techniques_webgl_exports = {};
10870
11057
  __export(KHR_techniques_webgl_exports, {
10871
- decode: () => decode6,
11058
+ decode: () => decode7,
10872
11059
  encode: () => encode4,
10873
- name: () => name7
11060
+ name: () => name8
10874
11061
  });
10875
- async function decode6(gltfData) {
11062
+ async function decode7(gltfData) {
10876
11063
  const gltfScenegraph = new GLTFScenegraph(gltfData);
10877
11064
  const { json } = gltfScenegraph;
10878
11065
  const extension = gltfScenegraph.getExtension(KHR_TECHNIQUES_WEBGL);
@@ -10924,12 +11111,12 @@
10924
11111
  });
10925
11112
  return values;
10926
11113
  }
10927
- var KHR_TECHNIQUES_WEBGL, name7;
11114
+ var KHR_TECHNIQUES_WEBGL, name8;
10928
11115
  var init_KHR_techniques_webgl = __esm({
10929
11116
  "../gltf/src/lib/extensions/deprecated/KHR_techniques_webgl.ts"() {
10930
11117
  init_gltf_scenegraph();
10931
11118
  KHR_TECHNIQUES_WEBGL = "KHR_techniques_webgl";
10932
- name7 = KHR_TECHNIQUES_WEBGL;
11119
+ name8 = KHR_TECHNIQUES_WEBGL;
10933
11120
  }
10934
11121
  });
10935
11122
 
@@ -10958,6 +11145,7 @@
10958
11145
  init_EXT_texture_webp();
10959
11146
  init_KHR_texture_basisu();
10960
11147
  init_KHR_draco_mesh_compression();
11148
+ init_KHR_texture_transform();
10961
11149
  init_KHR_lights_punctual();
10962
11150
  init_KHR_materials_unlit();
10963
11151
  init_KHR_techniques_webgl();
@@ -10968,7 +11156,8 @@
10968
11156
  KHR_draco_mesh_compression_exports,
10969
11157
  KHR_lights_punctual_exports,
10970
11158
  KHR_materials_unlit_exports,
10971
- KHR_techniques_webgl_exports
11159
+ KHR_techniques_webgl_exports,
11160
+ KHR_texture_transform_exports
10972
11161
  ];
10973
11162
  }
10974
11163
  });
@@ -11199,20 +11388,20 @@
11199
11388
 
11200
11389
  // ../gltf/src/lib/api/post-process-gltf.ts
11201
11390
  function getBytesFromComponentType(componentType) {
11202
- return BYTES[componentType];
11391
+ return BYTES2[componentType];
11203
11392
  }
11204
11393
  function getSizeFromAccessorType(type) {
11205
- return COMPONENTS[type];
11394
+ return COMPONENTS2[type];
11206
11395
  }
11207
11396
  function postProcessGLTF(gltf, options) {
11208
11397
  return new GLTFPostProcessor().postProcess(gltf, options);
11209
11398
  }
11210
- var COMPONENTS, BYTES, GL_SAMPLER, SAMPLER_PARAMETER_GLTF_TO_GL, DEFAULT_SAMPLER, GLTFPostProcessor;
11399
+ var COMPONENTS2, BYTES2, GL_SAMPLER, SAMPLER_PARAMETER_GLTF_TO_GL, DEFAULT_SAMPLER, GLTFPostProcessor;
11211
11400
  var init_post_process_gltf = __esm({
11212
11401
  "../gltf/src/lib/api/post-process-gltf.ts"() {
11213
11402
  init_assert8();
11214
11403
  init_gltf_utils();
11215
- COMPONENTS = {
11404
+ COMPONENTS2 = {
11216
11405
  SCALAR: 1,
11217
11406
  VEC2: 2,
11218
11407
  VEC3: 3,
@@ -11221,7 +11410,7 @@
11221
11410
  MAT3: 9,
11222
11411
  MAT4: 16
11223
11412
  };
11224
- BYTES = {
11413
+ BYTES2 = {
11225
11414
  5120: 1,
11226
11415
  5121: 1,
11227
11416
  5122: 2,
@@ -12160,8 +12349,8 @@
12160
12349
  }
12161
12350
  return subtree;
12162
12351
  }
12163
- async function getExplicitBitstream(subtree, name8, internalBinaryBuffer) {
12164
- const bufferViewIndex = subtree[name8].bufferView;
12352
+ async function getExplicitBitstream(subtree, name9, internalBinaryBuffer) {
12353
+ const bufferViewIndex = subtree[name9].bufferView;
12165
12354
  const bufferView = subtree.bufferViews[bufferViewIndex];
12166
12355
  const buffer = subtree.buffers[bufferView.buffer];
12167
12356
  if (buffer.uri) {
@@ -12418,13 +12607,23 @@
12418
12607
  return refine;
12419
12608
  }
12420
12609
  }
12610
+ function resolveUri(uri, basePath) {
12611
+ const urlSchemeRegex = /^[a-z][0-9a-z+.-]*:/i;
12612
+ if (urlSchemeRegex.test(basePath)) {
12613
+ const url = new URL(uri, `${basePath}/`);
12614
+ return decodeURI(url.toString());
12615
+ } else if (uri.startsWith("/")) {
12616
+ return uri;
12617
+ }
12618
+ return `${basePath}/${uri}`;
12619
+ }
12421
12620
  function normalizeTileData(tile, options) {
12422
12621
  if (!tile) {
12423
12622
  return null;
12424
12623
  }
12425
12624
  if (tile.content) {
12426
12625
  const contentUri = tile.content.uri || tile.content.url;
12427
- tile.contentUrl = `${options.basePath}/${contentUri}`;
12626
+ tile.contentUrl = resolveUri(contentUri, options.basePath);
12428
12627
  }
12429
12628
  tile.id = tile.contentUrl;
12430
12629
  tile.lodMetricType = LOD_METRIC_TYPE.GEOMETRIC_ERROR;
@@ -12462,9 +12661,9 @@
12462
12661
  subtrees: { uri: subtreesUriTemplate }
12463
12662
  } = implicitTilingExtension;
12464
12663
  const subtreeUrl = replaceContentUrlTemplate(subtreesUriTemplate, 0, 0, 0, 0);
12465
- const rootSubtreeUrl = `${basePath}/${subtreeUrl}`;
12664
+ const rootSubtreeUrl = resolveUri(subtreeUrl, basePath);
12466
12665
  const rootSubtree = await load(rootSubtreeUrl, Tile3DSubtreeLoader);
12467
- const contentUrlTemplate = `${basePath}/${tileset.root.content.uri}`;
12666
+ const contentUrlTemplate = resolveUri(tileset.root.content.uri, basePath);
12468
12667
  const refine = tileset.root.refine;
12469
12668
  const rootLodMetricValue = tileset.root.geometricError;
12470
12669
  const rootBoundingVolume = tileset.root.boundingVolume;
@@ -66,6 +66,19 @@ function getRefine(refine) {
66
66
  }
67
67
  }
68
68
 
69
+ function resolveUri(uri, basePath) {
70
+ var urlSchemeRegex = /^[a-z][0-9a-z+.-]*:/i;
71
+
72
+ if (urlSchemeRegex.test(basePath)) {
73
+ var url = new URL(uri, "".concat(basePath, "/"));
74
+ return decodeURI(url.toString());
75
+ } else if (uri.startsWith('/')) {
76
+ return uri;
77
+ }
78
+
79
+ return "".concat(basePath, "/").concat(uri);
80
+ }
81
+
69
82
  function normalizeTileData(tile, options) {
70
83
  if (!tile) {
71
84
  return null;
@@ -73,7 +86,7 @@ function normalizeTileData(tile, options) {
73
86
 
74
87
  if (tile.content) {
75
88
  var contentUri = tile.content.uri || tile.content.url;
76
- tile.contentUrl = "".concat(options.basePath, "/").concat(contentUri);
89
+ tile.contentUrl = resolveUri(contentUri, options.basePath);
77
90
  }
78
91
 
79
92
  tile.id = tile.contentUrl;
@@ -139,13 +152,13 @@ function _normalizeImplicitTileHeaders() {
139
152
  implicitTilingExtension = tileset.root.extensions['3DTILES_implicit_tiling'];
140
153
  subdivisionScheme = implicitTilingExtension.subdivisionScheme, maximumLevel = implicitTilingExtension.maximumLevel, subtreeLevels = implicitTilingExtension.subtreeLevels, subtreesUriTemplate = implicitTilingExtension.subtrees.uri;
141
154
  subtreeUrl = (0, _parse3dImplicitTiles.replaceContentUrlTemplate)(subtreesUriTemplate, 0, 0, 0, 0);
142
- rootSubtreeUrl = "".concat(basePath, "/").concat(subtreeUrl);
155
+ rootSubtreeUrl = resolveUri(subtreeUrl, basePath);
143
156
  _context.next = 9;
144
157
  return (0, _core.load)(rootSubtreeUrl, _tile3dSubtreeLoader.Tile3DSubtreeLoader);
145
158
 
146
159
  case 9:
147
160
  rootSubtree = _context.sent;
148
- contentUrlTemplate = "".concat(basePath, "/").concat(tileset.root.content.uri);
161
+ contentUrlTemplate = resolveUri(tileset.root.content.uri, basePath);
149
162
  refine = tileset.root.refine;
150
163
  rootLodMetricValue = tileset.root.geometricError;
151
164
  rootBoundingVolume = tileset.root.boundingVolume;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/lib/parsers/parse-3d-tile-header.ts"],"names":["getTileType","tile","contentUrl","TILE_TYPE","EMPTY","fileExtension","split","pop","POINTCLOUD","SCENEGRAPH","getRefine","refine","TILE_REFINEMENT","REPLACE","ADD","normalizeTileData","options","content","contentUri","uri","url","basePath","id","lodMetricType","LOD_METRIC_TYPE","GEOMETRIC_ERROR","lodMetricValue","geometricError","transformMatrix","transform","type","normalizeTileHeaders","tileset","root","stack","push","length","children","childHeader","normalizeImplicitTileHeaders","implicitTilingExtension","extensions","subdivisionScheme","maximumLevel","subtreeLevels","subtreesUriTemplate","subtrees","subtreeUrl","rootSubtreeUrl","Tile3DSubtreeLoader","rootSubtree","contentUrlTemplate","rootLodMetricValue","rootBoundingVolume","boundingVolume","normalizeImplicitTileData","subtree","replace"],"mappings":"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","sourcesContent":["import {Tile3DSubtreeLoader} from '../../tile-3d-subtree-loader';\nimport {load} from '@loaders.gl/core';\nimport {Tileset3D, LOD_METRIC_TYPE, TILE_REFINEMENT, TILE_TYPE} from '@loaders.gl/tiles';\nimport {Subtree} from '../../types';\nimport {parseImplicitTiles, replaceContentUrlTemplate} from './helpers/parse-3d-implicit-tiles';\n\nfunction getTileType(tile) {\n if (!tile.contentUrl) {\n return TILE_TYPE.EMPTY;\n }\n\n const contentUrl = tile.contentUrl;\n const fileExtension = contentUrl.split('.').pop();\n switch (fileExtension) {\n case 'pnts':\n return TILE_TYPE.POINTCLOUD;\n case 'i3dm':\n case 'b3dm':\n case 'glb':\n case 'gltf':\n return TILE_TYPE.SCENEGRAPH;\n default:\n return fileExtension;\n }\n}\n\nfunction getRefine(refine) {\n switch (refine) {\n case 'REPLACE':\n case 'replace':\n return TILE_REFINEMENT.REPLACE;\n case 'ADD':\n case 'add':\n return TILE_REFINEMENT.ADD;\n default:\n return refine;\n }\n}\n\nexport function normalizeTileData(tile, options) {\n if (!tile) {\n return null;\n }\n if (tile.content) {\n const contentUri = tile.content.uri || tile.content.url;\n tile.contentUrl = `${options.basePath}/${contentUri}`;\n }\n tile.id = tile.contentUrl;\n tile.lodMetricType = LOD_METRIC_TYPE.GEOMETRIC_ERROR;\n tile.lodMetricValue = tile.geometricError;\n tile.transformMatrix = tile.transform;\n tile.type = getTileType(tile);\n tile.refine = getRefine(tile.refine);\n\n return tile;\n}\n\n// normalize tile headers\nexport function normalizeTileHeaders(tileset) {\n const basePath = tileset.basePath;\n const root = normalizeTileData(tileset.root, tileset);\n\n const stack: any[] = [];\n stack.push(root);\n\n while (stack.length > 0) {\n const tile = stack.pop() || {};\n const children = tile.children || [];\n for (const childHeader of children) {\n normalizeTileData(childHeader, {basePath});\n stack.push(childHeader);\n }\n }\n\n return root;\n}\n\n/**\n * Do normalisation of implicit tile headers\n * TODO Check if Tile3D class can be a return type here.\n * @param tileset\n */\nexport async function normalizeImplicitTileHeaders(tileset: Tileset3D) {\n if (!tileset.root) {\n return null;\n }\n\n const basePath = tileset.basePath;\n const implicitTilingExtension = tileset.root.extensions['3DTILES_implicit_tiling'];\n const {\n subdivisionScheme,\n maximumLevel,\n subtreeLevels,\n subtrees: {uri: subtreesUriTemplate}\n } = implicitTilingExtension;\n const subtreeUrl = replaceContentUrlTemplate(subtreesUriTemplate, 0, 0, 0, 0);\n const rootSubtreeUrl = `${basePath}/${subtreeUrl}`;\n const rootSubtree = await load(rootSubtreeUrl, Tile3DSubtreeLoader);\n const contentUrlTemplate = `${basePath}/${tileset.root.content.uri}`;\n const refine = tileset.root.refine;\n // @ts-ignore\n const rootLodMetricValue = tileset.root.geometricError;\n const rootBoundingVolume = tileset.root.boundingVolume;\n\n const options = {\n contentUrlTemplate,\n subtreesUriTemplate,\n subdivisionScheme,\n subtreeLevels,\n maximumLevel,\n refine,\n basePath,\n lodMetricType: LOD_METRIC_TYPE.GEOMETRIC_ERROR,\n rootLodMetricValue,\n rootBoundingVolume,\n getTileType,\n getRefine\n };\n\n return await normalizeImplicitTileData(tileset.root, rootSubtree, options);\n}\n\n/**\n * Do implicit data normalisation to create hierarchical tile structure\n * @param tile\n * @param rootSubtree\n * @param options\n * @returns\n */\nexport async function normalizeImplicitTileData(tile, rootSubtree: Subtree, options: any) {\n if (!tile) {\n return null;\n }\n\n tile.lodMetricType = LOD_METRIC_TYPE.GEOMETRIC_ERROR;\n tile.lodMetricValue = tile.geometricError;\n tile.transformMatrix = tile.transform;\n\n const {children, contentUrl} = await parseImplicitTiles({subtree: rootSubtree, options});\n\n if (contentUrl) {\n tile.contentUrl = contentUrl;\n tile.content = {uri: contentUrl.replace(`${options.basePath}/`, '')};\n }\n\n tile.refine = getRefine(tile.refine);\n tile.type = getTileType(tile);\n tile.children = children;\n tile.id = tile.contentUrl;\n\n return tile;\n}\n"],"file":"parse-3d-tile-header.js"}
1
+ {"version":3,"sources":["../../../../src/lib/parsers/parse-3d-tile-header.ts"],"names":["getTileType","tile","contentUrl","TILE_TYPE","EMPTY","fileExtension","split","pop","POINTCLOUD","SCENEGRAPH","getRefine","refine","TILE_REFINEMENT","REPLACE","ADD","resolveUri","uri","basePath","urlSchemeRegex","test","url","URL","decodeURI","toString","startsWith","normalizeTileData","options","content","contentUri","id","lodMetricType","LOD_METRIC_TYPE","GEOMETRIC_ERROR","lodMetricValue","geometricError","transformMatrix","transform","type","normalizeTileHeaders","tileset","root","stack","push","length","children","childHeader","normalizeImplicitTileHeaders","implicitTilingExtension","extensions","subdivisionScheme","maximumLevel","subtreeLevels","subtreesUriTemplate","subtrees","subtreeUrl","rootSubtreeUrl","Tile3DSubtreeLoader","rootSubtree","contentUrlTemplate","rootLodMetricValue","rootBoundingVolume","boundingVolume","normalizeImplicitTileData","subtree","replace"],"mappings":"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","sourcesContent":["import {Tile3DSubtreeLoader} from '../../tile-3d-subtree-loader';\nimport {load} from '@loaders.gl/core';\nimport {Tileset3D, LOD_METRIC_TYPE, TILE_REFINEMENT, TILE_TYPE} from '@loaders.gl/tiles';\nimport {Subtree} from '../../types';\nimport {parseImplicitTiles, replaceContentUrlTemplate} from './helpers/parse-3d-implicit-tiles';\n\nfunction getTileType(tile) {\n if (!tile.contentUrl) {\n return TILE_TYPE.EMPTY;\n }\n\n const contentUrl = tile.contentUrl;\n const fileExtension = contentUrl.split('.').pop();\n switch (fileExtension) {\n case 'pnts':\n return TILE_TYPE.POINTCLOUD;\n case 'i3dm':\n case 'b3dm':\n case 'glb':\n case 'gltf':\n return TILE_TYPE.SCENEGRAPH;\n default:\n return fileExtension;\n }\n}\n\nfunction getRefine(refine) {\n switch (refine) {\n case 'REPLACE':\n case 'replace':\n return TILE_REFINEMENT.REPLACE;\n case 'ADD':\n case 'add':\n return TILE_REFINEMENT.ADD;\n default:\n return refine;\n }\n}\n\nfunction resolveUri(uri, basePath) {\n // url scheme per RFC3986\n const urlSchemeRegex = /^[a-z][0-9a-z+.-]*:/i;\n\n if (urlSchemeRegex.test(basePath)) {\n const url = new URL(uri, `${basePath}/`);\n return decodeURI(url.toString());\n } else if (uri.startsWith('/')) {\n return uri;\n }\n\n return `${basePath}/${uri}`;\n}\n\nexport function normalizeTileData(tile, options) {\n if (!tile) {\n return null;\n }\n if (tile.content) {\n const contentUri = tile.content.uri || tile.content.url;\n tile.contentUrl = resolveUri(contentUri, options.basePath);\n }\n tile.id = tile.contentUrl;\n tile.lodMetricType = LOD_METRIC_TYPE.GEOMETRIC_ERROR;\n tile.lodMetricValue = tile.geometricError;\n tile.transformMatrix = tile.transform;\n tile.type = getTileType(tile);\n tile.refine = getRefine(tile.refine);\n\n return tile;\n}\n\n// normalize tile headers\nexport function normalizeTileHeaders(tileset) {\n const basePath = tileset.basePath;\n const root = normalizeTileData(tileset.root, tileset);\n\n const stack: any[] = [];\n stack.push(root);\n\n while (stack.length > 0) {\n const tile = stack.pop() || {};\n const children = tile.children || [];\n for (const childHeader of children) {\n normalizeTileData(childHeader, {basePath});\n stack.push(childHeader);\n }\n }\n\n return root;\n}\n\n/**\n * Do normalisation of implicit tile headers\n * TODO Check if Tile3D class can be a return type here.\n * @param tileset\n */\nexport async function normalizeImplicitTileHeaders(tileset: Tileset3D) {\n if (!tileset.root) {\n return null;\n }\n\n const basePath = tileset.basePath;\n const implicitTilingExtension = tileset.root.extensions['3DTILES_implicit_tiling'];\n const {\n subdivisionScheme,\n maximumLevel,\n subtreeLevels,\n subtrees: {uri: subtreesUriTemplate}\n } = implicitTilingExtension;\n const subtreeUrl = replaceContentUrlTemplate(subtreesUriTemplate, 0, 0, 0, 0);\n const rootSubtreeUrl = resolveUri(subtreeUrl, basePath);\n const rootSubtree = await load(rootSubtreeUrl, Tile3DSubtreeLoader);\n const contentUrlTemplate = resolveUri(tileset.root.content.uri, basePath);\n const refine = tileset.root.refine;\n // @ts-ignore\n const rootLodMetricValue = tileset.root.geometricError;\n const rootBoundingVolume = tileset.root.boundingVolume;\n\n const options = {\n contentUrlTemplate,\n subtreesUriTemplate,\n subdivisionScheme,\n subtreeLevels,\n maximumLevel,\n refine,\n basePath,\n lodMetricType: LOD_METRIC_TYPE.GEOMETRIC_ERROR,\n rootLodMetricValue,\n rootBoundingVolume,\n getTileType,\n getRefine\n };\n\n return await normalizeImplicitTileData(tileset.root, rootSubtree, options);\n}\n\n/**\n * Do implicit data normalisation to create hierarchical tile structure\n * @param tile\n * @param rootSubtree\n * @param options\n * @returns\n */\nexport async function normalizeImplicitTileData(tile, rootSubtree: Subtree, options: any) {\n if (!tile) {\n return null;\n }\n\n tile.lodMetricType = LOD_METRIC_TYPE.GEOMETRIC_ERROR;\n tile.lodMetricValue = tile.geometricError;\n tile.transformMatrix = tile.transform;\n\n const {children, contentUrl} = await parseImplicitTiles({subtree: rootSubtree, options});\n\n if (contentUrl) {\n tile.contentUrl = contentUrl;\n tile.content = {uri: contentUrl.replace(`${options.basePath}/`, '')};\n }\n\n tile.refine = getRefine(tile.refine);\n tile.type = getTileType(tile);\n tile.children = children;\n tile.id = tile.contentUrl;\n\n return tile;\n}\n"],"file":"parse-3d-tile-header.js"}
@@ -4,6 +4,6 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.VERSION = void 0;
7
- var VERSION = typeof "3.2.5" !== 'undefined' ? "3.2.5" : 'latest';
7
+ var VERSION = typeof "3.3.0-alpha.1" !== 'undefined' ? "3.3.0-alpha.1" : 'latest';
8
8
  exports.VERSION = VERSION;
9
9
  //# sourceMappingURL=version.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/lib/utils/version.ts"],"names":["VERSION"],"mappings":";;;;;;AAGO,IAAMA,OAAO,GAAG,mBAAuB,WAAvB,aAAmD,QAAnE","sourcesContent":["// Version constant cannot be imported, it needs to correspond to the build version of **this** module.\n// __VERSION__ is injected by babel-plugin-version-inline\n// @ts-ignore TS2304: Cannot find name '__VERSION__'.\nexport const VERSION = typeof __VERSION__ !== 'undefined' ? __VERSION__ : 'latest';\n"],"file":"version.js"}
1
+ {"version":3,"sources":["../../../../src/lib/utils/version.ts"],"names":["VERSION"],"mappings":";;;;;;AAGO,IAAMA,OAAO,GAAG,2BAAuB,WAAvB,qBAAmD,QAAnE","sourcesContent":["// Version constant cannot be imported, it needs to correspond to the build version of **this** module.\n// __VERSION__ is injected by babel-plugin-version-inline\n// @ts-ignore TS2304: Cannot find name '__VERSION__'.\nexport const VERSION = typeof __VERSION__ !== 'undefined' ? __VERSION__ : 'latest';\n"],"file":"version.js"}
@@ -41,6 +41,19 @@ function getRefine(refine) {
41
41
  }
42
42
  }
43
43
 
44
+ function resolveUri(uri, basePath) {
45
+ const urlSchemeRegex = /^[a-z][0-9a-z+.-]*:/i;
46
+
47
+ if (urlSchemeRegex.test(basePath)) {
48
+ const url = new URL(uri, "".concat(basePath, "/"));
49
+ return decodeURI(url.toString());
50
+ } else if (uri.startsWith('/')) {
51
+ return uri;
52
+ }
53
+
54
+ return "".concat(basePath, "/").concat(uri);
55
+ }
56
+
44
57
  export function normalizeTileData(tile, options) {
45
58
  if (!tile) {
46
59
  return null;
@@ -48,7 +61,7 @@ export function normalizeTileData(tile, options) {
48
61
 
49
62
  if (tile.content) {
50
63
  const contentUri = tile.content.uri || tile.content.url;
51
- tile.contentUrl = "".concat(options.basePath, "/").concat(contentUri);
64
+ tile.contentUrl = resolveUri(contentUri, options.basePath);
52
65
  }
53
66
 
54
67
  tile.id = tile.contentUrl;
@@ -95,9 +108,9 @@ export async function normalizeImplicitTileHeaders(tileset) {
95
108
  }
96
109
  } = implicitTilingExtension;
97
110
  const subtreeUrl = replaceContentUrlTemplate(subtreesUriTemplate, 0, 0, 0, 0);
98
- const rootSubtreeUrl = "".concat(basePath, "/").concat(subtreeUrl);
111
+ const rootSubtreeUrl = resolveUri(subtreeUrl, basePath);
99
112
  const rootSubtree = await load(rootSubtreeUrl, Tile3DSubtreeLoader);
100
- const contentUrlTemplate = "".concat(basePath, "/").concat(tileset.root.content.uri);
113
+ const contentUrlTemplate = resolveUri(tileset.root.content.uri, basePath);
101
114
  const refine = tileset.root.refine;
102
115
  const rootLodMetricValue = tileset.root.geometricError;
103
116
  const rootBoundingVolume = tileset.root.boundingVolume;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/lib/parsers/parse-3d-tile-header.ts"],"names":["Tile3DSubtreeLoader","load","LOD_METRIC_TYPE","TILE_REFINEMENT","TILE_TYPE","parseImplicitTiles","replaceContentUrlTemplate","getTileType","tile","contentUrl","EMPTY","fileExtension","split","pop","POINTCLOUD","SCENEGRAPH","getRefine","refine","REPLACE","ADD","normalizeTileData","options","content","contentUri","uri","url","basePath","id","lodMetricType","GEOMETRIC_ERROR","lodMetricValue","geometricError","transformMatrix","transform","type","normalizeTileHeaders","tileset","root","stack","push","length","children","childHeader","normalizeImplicitTileHeaders","implicitTilingExtension","extensions","subdivisionScheme","maximumLevel","subtreeLevels","subtrees","subtreesUriTemplate","subtreeUrl","rootSubtreeUrl","rootSubtree","contentUrlTemplate","rootLodMetricValue","rootBoundingVolume","boundingVolume","normalizeImplicitTileData","subtree","replace"],"mappings":"AAAA,SAAQA,mBAAR,QAAkC,8BAAlC;AACA,SAAQC,IAAR,QAAmB,kBAAnB;AACA,SAAmBC,eAAnB,EAAoCC,eAApC,EAAqDC,SAArD,QAAqE,mBAArE;AAEA,SAAQC,kBAAR,EAA4BC,yBAA5B,QAA4D,mCAA5D;;AAEA,SAASC,WAAT,CAAqBC,IAArB,EAA2B;AACzB,MAAI,CAACA,IAAI,CAACC,UAAV,EAAsB;AACpB,WAAOL,SAAS,CAACM,KAAjB;AACD;;AAED,QAAMD,UAAU,GAAGD,IAAI,CAACC,UAAxB;AACA,QAAME,aAAa,GAAGF,UAAU,CAACG,KAAX,CAAiB,GAAjB,EAAsBC,GAAtB,EAAtB;;AACA,UAAQF,aAAR;AACE,SAAK,MAAL;AACE,aAAOP,SAAS,CAACU,UAAjB;;AACF,SAAK,MAAL;AACA,SAAK,MAAL;AACA,SAAK,KAAL;AACA,SAAK,MAAL;AACE,aAAOV,SAAS,CAACW,UAAjB;;AACF;AACE,aAAOJ,aAAP;AATJ;AAWD;;AAED,SAASK,SAAT,CAAmBC,MAAnB,EAA2B;AACzB,UAAQA,MAAR;AACE,SAAK,SAAL;AACA,SAAK,SAAL;AACE,aAAOd,eAAe,CAACe,OAAvB;;AACF,SAAK,KAAL;AACA,SAAK,KAAL;AACE,aAAOf,eAAe,CAACgB,GAAvB;;AACF;AACE,aAAOF,MAAP;AARJ;AAUD;;AAED,OAAO,SAASG,iBAAT,CAA2BZ,IAA3B,EAAiCa,OAAjC,EAA0C;AAC/C,MAAI,CAACb,IAAL,EAAW;AACT,WAAO,IAAP;AACD;;AACD,MAAIA,IAAI,CAACc,OAAT,EAAkB;AAChB,UAAMC,UAAU,GAAGf,IAAI,CAACc,OAAL,CAAaE,GAAb,IAAoBhB,IAAI,CAACc,OAAL,CAAaG,GAApD;AACAjB,IAAAA,IAAI,CAACC,UAAL,aAAqBY,OAAO,CAACK,QAA7B,cAAyCH,UAAzC;AACD;;AACDf,EAAAA,IAAI,CAACmB,EAAL,GAAUnB,IAAI,CAACC,UAAf;AACAD,EAAAA,IAAI,CAACoB,aAAL,GAAqB1B,eAAe,CAAC2B,eAArC;AACArB,EAAAA,IAAI,CAACsB,cAAL,GAAsBtB,IAAI,CAACuB,cAA3B;AACAvB,EAAAA,IAAI,CAACwB,eAAL,GAAuBxB,IAAI,CAACyB,SAA5B;AACAzB,EAAAA,IAAI,CAAC0B,IAAL,GAAY3B,WAAW,CAACC,IAAD,CAAvB;AACAA,EAAAA,IAAI,CAACS,MAAL,GAAcD,SAAS,CAACR,IAAI,CAACS,MAAN,CAAvB;AAEA,SAAOT,IAAP;AACD;AAGD,OAAO,SAAS2B,oBAAT,CAA8BC,OAA9B,EAAuC;AAC5C,QAAMV,QAAQ,GAAGU,OAAO,CAACV,QAAzB;AACA,QAAMW,IAAI,GAAGjB,iBAAiB,CAACgB,OAAO,CAACC,IAAT,EAAeD,OAAf,CAA9B;AAEA,QAAME,KAAY,GAAG,EAArB;AACAA,EAAAA,KAAK,CAACC,IAAN,CAAWF,IAAX;;AAEA,SAAOC,KAAK,CAACE,MAAN,GAAe,CAAtB,EAAyB;AACvB,UAAMhC,IAAI,GAAG8B,KAAK,CAACzB,GAAN,MAAe,EAA5B;AACA,UAAM4B,QAAQ,GAAGjC,IAAI,CAACiC,QAAL,IAAiB,EAAlC;;AACA,SAAK,MAAMC,WAAX,IAA0BD,QAA1B,EAAoC;AAClCrB,MAAAA,iBAAiB,CAACsB,WAAD,EAAc;AAAChB,QAAAA;AAAD,OAAd,CAAjB;AACAY,MAAAA,KAAK,CAACC,IAAN,CAAWG,WAAX;AACD;AACF;;AAED,SAAOL,IAAP;AACD;AAOD,OAAO,eAAeM,4BAAf,CAA4CP,OAA5C,EAAgE;AACrE,MAAI,CAACA,OAAO,CAACC,IAAb,EAAmB;AACjB,WAAO,IAAP;AACD;;AAED,QAAMX,QAAQ,GAAGU,OAAO,CAACV,QAAzB;AACA,QAAMkB,uBAAuB,GAAGR,OAAO,CAACC,IAAR,CAAaQ,UAAb,CAAwB,yBAAxB,CAAhC;AACA,QAAM;AACJC,IAAAA,iBADI;AAEJC,IAAAA,YAFI;AAGJC,IAAAA,aAHI;AAIJC,IAAAA,QAAQ,EAAE;AAACzB,MAAAA,GAAG,EAAE0B;AAAN;AAJN,MAKFN,uBALJ;AAMA,QAAMO,UAAU,GAAG7C,yBAAyB,CAAC4C,mBAAD,EAAsB,CAAtB,EAAyB,CAAzB,EAA4B,CAA5B,EAA+B,CAA/B,CAA5C;AACA,QAAME,cAAc,aAAM1B,QAAN,cAAkByB,UAAlB,CAApB;AACA,QAAME,WAAW,GAAG,MAAMpD,IAAI,CAACmD,cAAD,EAAiBpD,mBAAjB,CAA9B;AACA,QAAMsD,kBAAkB,aAAM5B,QAAN,cAAkBU,OAAO,CAACC,IAAR,CAAaf,OAAb,CAAqBE,GAAvC,CAAxB;AACA,QAAMP,MAAM,GAAGmB,OAAO,CAACC,IAAR,CAAapB,MAA5B;AAEA,QAAMsC,kBAAkB,GAAGnB,OAAO,CAACC,IAAR,CAAaN,cAAxC;AACA,QAAMyB,kBAAkB,GAAGpB,OAAO,CAACC,IAAR,CAAaoB,cAAxC;AAEA,QAAMpC,OAAO,GAAG;AACdiC,IAAAA,kBADc;AAEdJ,IAAAA,mBAFc;AAGdJ,IAAAA,iBAHc;AAIdE,IAAAA,aAJc;AAKdD,IAAAA,YALc;AAMd9B,IAAAA,MANc;AAOdS,IAAAA,QAPc;AAQdE,IAAAA,aAAa,EAAE1B,eAAe,CAAC2B,eARjB;AASd0B,IAAAA,kBATc;AAUdC,IAAAA,kBAVc;AAWdjD,IAAAA,WAXc;AAYdS,IAAAA;AAZc,GAAhB;AAeA,SAAO,MAAM0C,yBAAyB,CAACtB,OAAO,CAACC,IAAT,EAAegB,WAAf,EAA4BhC,OAA5B,CAAtC;AACD;AASD,OAAO,eAAeqC,yBAAf,CAAyClD,IAAzC,EAA+C6C,WAA/C,EAAqEhC,OAArE,EAAmF;AACxF,MAAI,CAACb,IAAL,EAAW;AACT,WAAO,IAAP;AACD;;AAEDA,EAAAA,IAAI,CAACoB,aAAL,GAAqB1B,eAAe,CAAC2B,eAArC;AACArB,EAAAA,IAAI,CAACsB,cAAL,GAAsBtB,IAAI,CAACuB,cAA3B;AACAvB,EAAAA,IAAI,CAACwB,eAAL,GAAuBxB,IAAI,CAACyB,SAA5B;AAEA,QAAM;AAACQ,IAAAA,QAAD;AAAWhC,IAAAA;AAAX,MAAyB,MAAMJ,kBAAkB,CAAC;AAACsD,IAAAA,OAAO,EAAEN,WAAV;AAAuBhC,IAAAA;AAAvB,GAAD,CAAvD;;AAEA,MAAIZ,UAAJ,EAAgB;AACdD,IAAAA,IAAI,CAACC,UAAL,GAAkBA,UAAlB;AACAD,IAAAA,IAAI,CAACc,OAAL,GAAe;AAACE,MAAAA,GAAG,EAAEf,UAAU,CAACmD,OAAX,WAAsBvC,OAAO,CAACK,QAA9B,QAA2C,EAA3C;AAAN,KAAf;AACD;;AAEDlB,EAAAA,IAAI,CAACS,MAAL,GAAcD,SAAS,CAACR,IAAI,CAACS,MAAN,CAAvB;AACAT,EAAAA,IAAI,CAAC0B,IAAL,GAAY3B,WAAW,CAACC,IAAD,CAAvB;AACAA,EAAAA,IAAI,CAACiC,QAAL,GAAgBA,QAAhB;AACAjC,EAAAA,IAAI,CAACmB,EAAL,GAAUnB,IAAI,CAACC,UAAf;AAEA,SAAOD,IAAP;AACD","sourcesContent":["import {Tile3DSubtreeLoader} from '../../tile-3d-subtree-loader';\nimport {load} from '@loaders.gl/core';\nimport {Tileset3D, LOD_METRIC_TYPE, TILE_REFINEMENT, TILE_TYPE} from '@loaders.gl/tiles';\nimport {Subtree} from '../../types';\nimport {parseImplicitTiles, replaceContentUrlTemplate} from './helpers/parse-3d-implicit-tiles';\n\nfunction getTileType(tile) {\n if (!tile.contentUrl) {\n return TILE_TYPE.EMPTY;\n }\n\n const contentUrl = tile.contentUrl;\n const fileExtension = contentUrl.split('.').pop();\n switch (fileExtension) {\n case 'pnts':\n return TILE_TYPE.POINTCLOUD;\n case 'i3dm':\n case 'b3dm':\n case 'glb':\n case 'gltf':\n return TILE_TYPE.SCENEGRAPH;\n default:\n return fileExtension;\n }\n}\n\nfunction getRefine(refine) {\n switch (refine) {\n case 'REPLACE':\n case 'replace':\n return TILE_REFINEMENT.REPLACE;\n case 'ADD':\n case 'add':\n return TILE_REFINEMENT.ADD;\n default:\n return refine;\n }\n}\n\nexport function normalizeTileData(tile, options) {\n if (!tile) {\n return null;\n }\n if (tile.content) {\n const contentUri = tile.content.uri || tile.content.url;\n tile.contentUrl = `${options.basePath}/${contentUri}`;\n }\n tile.id = tile.contentUrl;\n tile.lodMetricType = LOD_METRIC_TYPE.GEOMETRIC_ERROR;\n tile.lodMetricValue = tile.geometricError;\n tile.transformMatrix = tile.transform;\n tile.type = getTileType(tile);\n tile.refine = getRefine(tile.refine);\n\n return tile;\n}\n\n// normalize tile headers\nexport function normalizeTileHeaders(tileset) {\n const basePath = tileset.basePath;\n const root = normalizeTileData(tileset.root, tileset);\n\n const stack: any[] = [];\n stack.push(root);\n\n while (stack.length > 0) {\n const tile = stack.pop() || {};\n const children = tile.children || [];\n for (const childHeader of children) {\n normalizeTileData(childHeader, {basePath});\n stack.push(childHeader);\n }\n }\n\n return root;\n}\n\n/**\n * Do normalisation of implicit tile headers\n * TODO Check if Tile3D class can be a return type here.\n * @param tileset\n */\nexport async function normalizeImplicitTileHeaders(tileset: Tileset3D) {\n if (!tileset.root) {\n return null;\n }\n\n const basePath = tileset.basePath;\n const implicitTilingExtension = tileset.root.extensions['3DTILES_implicit_tiling'];\n const {\n subdivisionScheme,\n maximumLevel,\n subtreeLevels,\n subtrees: {uri: subtreesUriTemplate}\n } = implicitTilingExtension;\n const subtreeUrl = replaceContentUrlTemplate(subtreesUriTemplate, 0, 0, 0, 0);\n const rootSubtreeUrl = `${basePath}/${subtreeUrl}`;\n const rootSubtree = await load(rootSubtreeUrl, Tile3DSubtreeLoader);\n const contentUrlTemplate = `${basePath}/${tileset.root.content.uri}`;\n const refine = tileset.root.refine;\n // @ts-ignore\n const rootLodMetricValue = tileset.root.geometricError;\n const rootBoundingVolume = tileset.root.boundingVolume;\n\n const options = {\n contentUrlTemplate,\n subtreesUriTemplate,\n subdivisionScheme,\n subtreeLevels,\n maximumLevel,\n refine,\n basePath,\n lodMetricType: LOD_METRIC_TYPE.GEOMETRIC_ERROR,\n rootLodMetricValue,\n rootBoundingVolume,\n getTileType,\n getRefine\n };\n\n return await normalizeImplicitTileData(tileset.root, rootSubtree, options);\n}\n\n/**\n * Do implicit data normalisation to create hierarchical tile structure\n * @param tile\n * @param rootSubtree\n * @param options\n * @returns\n */\nexport async function normalizeImplicitTileData(tile, rootSubtree: Subtree, options: any) {\n if (!tile) {\n return null;\n }\n\n tile.lodMetricType = LOD_METRIC_TYPE.GEOMETRIC_ERROR;\n tile.lodMetricValue = tile.geometricError;\n tile.transformMatrix = tile.transform;\n\n const {children, contentUrl} = await parseImplicitTiles({subtree: rootSubtree, options});\n\n if (contentUrl) {\n tile.contentUrl = contentUrl;\n tile.content = {uri: contentUrl.replace(`${options.basePath}/`, '')};\n }\n\n tile.refine = getRefine(tile.refine);\n tile.type = getTileType(tile);\n tile.children = children;\n tile.id = tile.contentUrl;\n\n return tile;\n}\n"],"file":"parse-3d-tile-header.js"}
1
+ {"version":3,"sources":["../../../../src/lib/parsers/parse-3d-tile-header.ts"],"names":["Tile3DSubtreeLoader","load","LOD_METRIC_TYPE","TILE_REFINEMENT","TILE_TYPE","parseImplicitTiles","replaceContentUrlTemplate","getTileType","tile","contentUrl","EMPTY","fileExtension","split","pop","POINTCLOUD","SCENEGRAPH","getRefine","refine","REPLACE","ADD","resolveUri","uri","basePath","urlSchemeRegex","test","url","URL","decodeURI","toString","startsWith","normalizeTileData","options","content","contentUri","id","lodMetricType","GEOMETRIC_ERROR","lodMetricValue","geometricError","transformMatrix","transform","type","normalizeTileHeaders","tileset","root","stack","push","length","children","childHeader","normalizeImplicitTileHeaders","implicitTilingExtension","extensions","subdivisionScheme","maximumLevel","subtreeLevels","subtrees","subtreesUriTemplate","subtreeUrl","rootSubtreeUrl","rootSubtree","contentUrlTemplate","rootLodMetricValue","rootBoundingVolume","boundingVolume","normalizeImplicitTileData","subtree","replace"],"mappings":"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","sourcesContent":["import {Tile3DSubtreeLoader} from '../../tile-3d-subtree-loader';\nimport {load} from '@loaders.gl/core';\nimport {Tileset3D, LOD_METRIC_TYPE, TILE_REFINEMENT, TILE_TYPE} from '@loaders.gl/tiles';\nimport {Subtree} from '../../types';\nimport {parseImplicitTiles, replaceContentUrlTemplate} from './helpers/parse-3d-implicit-tiles';\n\nfunction getTileType(tile) {\n if (!tile.contentUrl) {\n return TILE_TYPE.EMPTY;\n }\n\n const contentUrl = tile.contentUrl;\n const fileExtension = contentUrl.split('.').pop();\n switch (fileExtension) {\n case 'pnts':\n return TILE_TYPE.POINTCLOUD;\n case 'i3dm':\n case 'b3dm':\n case 'glb':\n case 'gltf':\n return TILE_TYPE.SCENEGRAPH;\n default:\n return fileExtension;\n }\n}\n\nfunction getRefine(refine) {\n switch (refine) {\n case 'REPLACE':\n case 'replace':\n return TILE_REFINEMENT.REPLACE;\n case 'ADD':\n case 'add':\n return TILE_REFINEMENT.ADD;\n default:\n return refine;\n }\n}\n\nfunction resolveUri(uri, basePath) {\n // url scheme per RFC3986\n const urlSchemeRegex = /^[a-z][0-9a-z+.-]*:/i;\n\n if (urlSchemeRegex.test(basePath)) {\n const url = new URL(uri, `${basePath}/`);\n return decodeURI(url.toString());\n } else if (uri.startsWith('/')) {\n return uri;\n }\n\n return `${basePath}/${uri}`;\n}\n\nexport function normalizeTileData(tile, options) {\n if (!tile) {\n return null;\n }\n if (tile.content) {\n const contentUri = tile.content.uri || tile.content.url;\n tile.contentUrl = resolveUri(contentUri, options.basePath);\n }\n tile.id = tile.contentUrl;\n tile.lodMetricType = LOD_METRIC_TYPE.GEOMETRIC_ERROR;\n tile.lodMetricValue = tile.geometricError;\n tile.transformMatrix = tile.transform;\n tile.type = getTileType(tile);\n tile.refine = getRefine(tile.refine);\n\n return tile;\n}\n\n// normalize tile headers\nexport function normalizeTileHeaders(tileset) {\n const basePath = tileset.basePath;\n const root = normalizeTileData(tileset.root, tileset);\n\n const stack: any[] = [];\n stack.push(root);\n\n while (stack.length > 0) {\n const tile = stack.pop() || {};\n const children = tile.children || [];\n for (const childHeader of children) {\n normalizeTileData(childHeader, {basePath});\n stack.push(childHeader);\n }\n }\n\n return root;\n}\n\n/**\n * Do normalisation of implicit tile headers\n * TODO Check if Tile3D class can be a return type here.\n * @param tileset\n */\nexport async function normalizeImplicitTileHeaders(tileset: Tileset3D) {\n if (!tileset.root) {\n return null;\n }\n\n const basePath = tileset.basePath;\n const implicitTilingExtension = tileset.root.extensions['3DTILES_implicit_tiling'];\n const {\n subdivisionScheme,\n maximumLevel,\n subtreeLevels,\n subtrees: {uri: subtreesUriTemplate}\n } = implicitTilingExtension;\n const subtreeUrl = replaceContentUrlTemplate(subtreesUriTemplate, 0, 0, 0, 0);\n const rootSubtreeUrl = resolveUri(subtreeUrl, basePath);\n const rootSubtree = await load(rootSubtreeUrl, Tile3DSubtreeLoader);\n const contentUrlTemplate = resolveUri(tileset.root.content.uri, basePath);\n const refine = tileset.root.refine;\n // @ts-ignore\n const rootLodMetricValue = tileset.root.geometricError;\n const rootBoundingVolume = tileset.root.boundingVolume;\n\n const options = {\n contentUrlTemplate,\n subtreesUriTemplate,\n subdivisionScheme,\n subtreeLevels,\n maximumLevel,\n refine,\n basePath,\n lodMetricType: LOD_METRIC_TYPE.GEOMETRIC_ERROR,\n rootLodMetricValue,\n rootBoundingVolume,\n getTileType,\n getRefine\n };\n\n return await normalizeImplicitTileData(tileset.root, rootSubtree, options);\n}\n\n/**\n * Do implicit data normalisation to create hierarchical tile structure\n * @param tile\n * @param rootSubtree\n * @param options\n * @returns\n */\nexport async function normalizeImplicitTileData(tile, rootSubtree: Subtree, options: any) {\n if (!tile) {\n return null;\n }\n\n tile.lodMetricType = LOD_METRIC_TYPE.GEOMETRIC_ERROR;\n tile.lodMetricValue = tile.geometricError;\n tile.transformMatrix = tile.transform;\n\n const {children, contentUrl} = await parseImplicitTiles({subtree: rootSubtree, options});\n\n if (contentUrl) {\n tile.contentUrl = contentUrl;\n tile.content = {uri: contentUrl.replace(`${options.basePath}/`, '')};\n }\n\n tile.refine = getRefine(tile.refine);\n tile.type = getTileType(tile);\n tile.children = children;\n tile.id = tile.contentUrl;\n\n return tile;\n}\n"],"file":"parse-3d-tile-header.js"}
@@ -1,2 +1,2 @@
1
- export const VERSION = typeof "3.2.5" !== 'undefined' ? "3.2.5" : 'latest';
1
+ export const VERSION = typeof "3.3.0-alpha.1" !== 'undefined' ? "3.3.0-alpha.1" : 'latest';
2
2
  //# sourceMappingURL=version.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/lib/utils/version.ts"],"names":["VERSION"],"mappings":"AAGA,OAAO,MAAMA,OAAO,GAAG,mBAAuB,WAAvB,aAAmD,QAAnE","sourcesContent":["// Version constant cannot be imported, it needs to correspond to the build version of **this** module.\n// __VERSION__ is injected by babel-plugin-version-inline\n// @ts-ignore TS2304: Cannot find name '__VERSION__'.\nexport const VERSION = typeof __VERSION__ !== 'undefined' ? __VERSION__ : 'latest';\n"],"file":"version.js"}
1
+ {"version":3,"sources":["../../../../src/lib/utils/version.ts"],"names":["VERSION"],"mappings":"AAGA,OAAO,MAAMA,OAAO,GAAG,2BAAuB,WAAvB,qBAAmD,QAAnE","sourcesContent":["// Version constant cannot be imported, it needs to correspond to the build version of **this** module.\n// __VERSION__ is injected by babel-plugin-version-inline\n// @ts-ignore TS2304: Cannot find name '__VERSION__'.\nexport const VERSION = typeof __VERSION__ !== 'undefined' ? __VERSION__ : 'latest';\n"],"file":"version.js"}
@@ -1 +1 @@
1
- {"version":3,"file":"parse-3d-tile-header.d.ts","sourceRoot":"","sources":["../../../src/lib/parsers/parse-3d-tile-header.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,SAAS,EAA8C,MAAM,mBAAmB,CAAC;AACzF,OAAO,EAAC,OAAO,EAAC,MAAM,aAAa,CAAC;AAoCpC,wBAAgB,iBAAiB,CAAC,IAAI,KAAA,EAAE,OAAO,KAAA,OAgB9C;AAGD,wBAAgB,oBAAoB,CAAC,OAAO,KAAA,OAiB3C;AAED;;;;GAIG;AACH,wBAAsB,4BAA4B,CAAC,OAAO,EAAE,SAAS,gBAsCpE;AAED;;;;;;GAMG;AACH,wBAAsB,yBAAyB,CAAC,IAAI,KAAA,EAAE,WAAW,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,gBAsBvF"}
1
+ {"version":3,"file":"parse-3d-tile-header.d.ts","sourceRoot":"","sources":["../../../src/lib/parsers/parse-3d-tile-header.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,SAAS,EAA8C,MAAM,mBAAmB,CAAC;AACzF,OAAO,EAAC,OAAO,EAAC,MAAM,aAAa,CAAC;AAkDpC,wBAAgB,iBAAiB,CAAC,IAAI,KAAA,EAAE,OAAO,KAAA,OAgB9C;AAGD,wBAAgB,oBAAoB,CAAC,OAAO,KAAA,OAiB3C;AAED;;;;GAIG;AACH,wBAAsB,4BAA4B,CAAC,OAAO,EAAE,SAAS,gBAsCpE;AAED;;;;;;GAMG;AACH,wBAAsB,yBAAyB,CAAC,IAAI,KAAA,EAAE,WAAW,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,gBAsBvF"}
@@ -35,13 +35,25 @@ function getRefine(refine) {
35
35
  return refine;
36
36
  }
37
37
  }
38
+ function resolveUri(uri, basePath) {
39
+ // url scheme per RFC3986
40
+ const urlSchemeRegex = /^[a-z][0-9a-z+.-]*:/i;
41
+ if (urlSchemeRegex.test(basePath)) {
42
+ const url = new URL(uri, `${basePath}/`);
43
+ return decodeURI(url.toString());
44
+ }
45
+ else if (uri.startsWith('/')) {
46
+ return uri;
47
+ }
48
+ return `${basePath}/${uri}`;
49
+ }
38
50
  function normalizeTileData(tile, options) {
39
51
  if (!tile) {
40
52
  return null;
41
53
  }
42
54
  if (tile.content) {
43
55
  const contentUri = tile.content.uri || tile.content.url;
44
- tile.contentUrl = `${options.basePath}/${contentUri}`;
56
+ tile.contentUrl = resolveUri(contentUri, options.basePath);
45
57
  }
46
58
  tile.id = tile.contentUrl;
47
59
  tile.lodMetricType = tiles_1.LOD_METRIC_TYPE.GEOMETRIC_ERROR;
@@ -82,9 +94,9 @@ async function normalizeImplicitTileHeaders(tileset) {
82
94
  const implicitTilingExtension = tileset.root.extensions['3DTILES_implicit_tiling'];
83
95
  const { subdivisionScheme, maximumLevel, subtreeLevels, subtrees: { uri: subtreesUriTemplate } } = implicitTilingExtension;
84
96
  const subtreeUrl = (0, parse_3d_implicit_tiles_1.replaceContentUrlTemplate)(subtreesUriTemplate, 0, 0, 0, 0);
85
- const rootSubtreeUrl = `${basePath}/${subtreeUrl}`;
97
+ const rootSubtreeUrl = resolveUri(subtreeUrl, basePath);
86
98
  const rootSubtree = await (0, core_1.load)(rootSubtreeUrl, tile_3d_subtree_loader_1.Tile3DSubtreeLoader);
87
- const contentUrlTemplate = `${basePath}/${tileset.root.content.uri}`;
99
+ const contentUrlTemplate = resolveUri(tileset.root.content.uri, basePath);
88
100
  const refine = tileset.root.refine;
89
101
  // @ts-ignore
90
102
  const rootLodMetricValue = tileset.root.geometricError;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@loaders.gl/3d-tiles",
3
- "version": "3.2.5",
3
+ "version": "3.3.0-alpha.1",
4
4
  "description": "3D Tiles, an open standard for streaming massive heterogeneous 3D geospatial datasets.",
5
5
  "license": "MIT",
6
6
  "publishConfig": {
@@ -34,16 +34,16 @@
34
34
  "build-bundle": "esbuild src/bundle.ts --bundle --outfile=dist/dist.min.js"
35
35
  },
36
36
  "dependencies": {
37
- "@loaders.gl/draco": "3.2.5",
38
- "@loaders.gl/gltf": "3.2.5",
39
- "@loaders.gl/loader-utils": "3.2.5",
40
- "@loaders.gl/math": "3.2.5",
41
- "@loaders.gl/tiles": "3.2.5",
37
+ "@loaders.gl/draco": "3.3.0-alpha.1",
38
+ "@loaders.gl/gltf": "3.3.0-alpha.1",
39
+ "@loaders.gl/loader-utils": "3.3.0-alpha.1",
40
+ "@loaders.gl/math": "3.3.0-alpha.1",
41
+ "@loaders.gl/tiles": "3.3.0-alpha.1",
42
42
  "@math.gl/core": "^3.5.1",
43
43
  "@math.gl/geospatial": "^3.5.1"
44
44
  },
45
45
  "peerDependencies": {
46
46
  "@loaders.gl/core": "^3.2.0"
47
47
  },
48
- "gitHead": "1c084200e8b87479d06526c7107e75c6bff8968b"
48
+ "gitHead": "85ed2df7d17dd0d204c8bd8feb44779f70bc693b"
49
49
  }
@@ -37,13 +37,27 @@ function getRefine(refine) {
37
37
  }
38
38
  }
39
39
 
40
+ function resolveUri(uri, basePath) {
41
+ // url scheme per RFC3986
42
+ const urlSchemeRegex = /^[a-z][0-9a-z+.-]*:/i;
43
+
44
+ if (urlSchemeRegex.test(basePath)) {
45
+ const url = new URL(uri, `${basePath}/`);
46
+ return decodeURI(url.toString());
47
+ } else if (uri.startsWith('/')) {
48
+ return uri;
49
+ }
50
+
51
+ return `${basePath}/${uri}`;
52
+ }
53
+
40
54
  export function normalizeTileData(tile, options) {
41
55
  if (!tile) {
42
56
  return null;
43
57
  }
44
58
  if (tile.content) {
45
59
  const contentUri = tile.content.uri || tile.content.url;
46
- tile.contentUrl = `${options.basePath}/${contentUri}`;
60
+ tile.contentUrl = resolveUri(contentUri, options.basePath);
47
61
  }
48
62
  tile.id = tile.contentUrl;
49
63
  tile.lodMetricType = LOD_METRIC_TYPE.GEOMETRIC_ERROR;
@@ -94,9 +108,9 @@ export async function normalizeImplicitTileHeaders(tileset: Tileset3D) {
94
108
  subtrees: {uri: subtreesUriTemplate}
95
109
  } = implicitTilingExtension;
96
110
  const subtreeUrl = replaceContentUrlTemplate(subtreesUriTemplate, 0, 0, 0, 0);
97
- const rootSubtreeUrl = `${basePath}/${subtreeUrl}`;
111
+ const rootSubtreeUrl = resolveUri(subtreeUrl, basePath);
98
112
  const rootSubtree = await load(rootSubtreeUrl, Tile3DSubtreeLoader);
99
- const contentUrlTemplate = `${basePath}/${tileset.root.content.uri}`;
113
+ const contentUrlTemplate = resolveUri(tileset.root.content.uri, basePath);
100
114
  const refine = tileset.root.refine;
101
115
  // @ts-ignore
102
116
  const rootLodMetricValue = tileset.root.geometricError;