@loaders.gl/i3s 3.2.0-alpha.2 → 3.2.0-alpha.3

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
@@ -674,10 +674,12 @@
674
674
  const workerFarm = WorkerFarm.getWorkerFarm(options);
675
675
  const workerPool = workerFarm.getWorkerPool({ name, url });
676
676
  options = JSON.parse(JSON.stringify(options));
677
+ context = JSON.parse(JSON.stringify(context || {}));
677
678
  const job = await workerPool.startJob("process-on-worker", onMessage.bind(null, parseOnMainThread));
678
679
  job.postMessage("process", {
679
680
  input: data,
680
- options
681
+ options,
682
+ context
681
683
  });
682
684
  const result = await job.result;
683
685
  return await result.result;
@@ -3024,6 +3026,12 @@
3024
3026
  }
3025
3027
  async function parseWithLoader(loader, data, options, context) {
3026
3028
  validateWorkerVersion(loader);
3029
+ if (isResponse(data)) {
3030
+ const response = data;
3031
+ const { ok, redirected, status, statusText, type, url } = response;
3032
+ const headers = Object.fromEntries(response.headers.entries());
3033
+ context.response = { headers, ok, redirected, status, statusText, type, url };
3034
+ }
3027
3035
  data = await getArrayBufferOrStringFromData(data, loader, options);
3028
3036
  if (loader.parseTextSync && typeof data === "string") {
3029
3037
  options.dataType = "text";
@@ -3046,6 +3054,7 @@
3046
3054
  init_src();
3047
3055
  init_src2();
3048
3056
  init_normalize_loader();
3057
+ init_is_type();
3049
3058
  init_option_utils();
3050
3059
  init_get_data();
3051
3060
  init_loader_context();
@@ -9594,6 +9603,7 @@
9594
9603
  return tile;
9595
9604
  }
9596
9605
  const content = tile.content;
9606
+ const contentByteLength = arrayBuffer.byteLength;
9597
9607
  let attributes;
9598
9608
  let vertexCount;
9599
9609
  let byteOffset = 0;
@@ -9669,7 +9679,7 @@
9669
9679
  }
9670
9680
  }
9671
9681
  content.vertexCount = vertexCount;
9672
- content.byteLength = arrayBuffer.byteLength;
9682
+ content.byteLength = contentByteLength;
9673
9683
  return tile;
9674
9684
  }
9675
9685
  function updateAttributesMetadata(attributes, decompressedGeometry) {
@@ -24,7 +24,7 @@ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (O
24
24
 
25
25
  function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
26
26
 
27
- var VERSION = typeof "3.2.0-alpha.2" !== 'undefined' ? "3.2.0-alpha.2" : 'latest';
27
+ var VERSION = typeof "3.2.0-alpha.3" !== 'undefined' ? "3.2.0-alpha.3" : 'latest';
28
28
  var EMPTY_VALUE = '';
29
29
  var REJECTED_STATUS = 'rejected';
30
30
  var I3SAttributeLoader = {
@@ -13,7 +13,7 @@ var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/
13
13
 
14
14
  var _parseI3sBuildingSceneLayer = require("./lib/parsers/parse-i3s-building-scene-layer");
15
15
 
16
- var VERSION = typeof "3.2.0-alpha.2" !== 'undefined' ? "3.2.0-alpha.2" : 'beta';
16
+ var VERSION = typeof "3.2.0-alpha.3" !== 'undefined' ? "3.2.0-alpha.3" : 'beta';
17
17
  var I3SBuildingSceneLayerLoader = {
18
18
  name: 'I3S Building Scene Layer',
19
19
  id: 'i3s-building-scene-layer',
@@ -13,7 +13,7 @@ var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/
13
13
 
14
14
  var _parseI3sTileContent = require("./lib/parsers/parse-i3s-tile-content");
15
15
 
16
- var VERSION = typeof "3.2.0-alpha.2" !== 'undefined' ? "3.2.0-alpha.2" : 'beta';
16
+ var VERSION = typeof "3.2.0-alpha.3" !== 'undefined' ? "3.2.0-alpha.3" : 'beta';
17
17
  var I3SContentLoader = {
18
18
  name: 'I3S Content (Indexed Scene Layers)',
19
19
  id: 'i3s-content',
@@ -21,7 +21,7 @@ var _parseI3s = require("./lib/parsers/parse-i3s");
21
21
 
22
22
  var _constants = require("./lib/parsers/constants");
23
23
 
24
- var VERSION = typeof "3.2.0-alpha.2" !== 'undefined' ? "3.2.0-alpha.2" : 'latest';
24
+ var VERSION = typeof "3.2.0-alpha.3" !== 'undefined' ? "3.2.0-alpha.3" : 'latest';
25
25
  var TILESET_REGEX = /layers\/[0-9]+$/;
26
26
  var TILE_HEADER_REGEX = /nodes\/([0-9-]+|root)$/;
27
27
  var SLPK_HEX = '504b0304';
@@ -11,7 +11,7 @@ var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"))
11
11
 
12
12
  var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
13
13
 
14
- var VERSION = typeof "3.2.0-alpha.2" !== 'undefined' ? "3.2.0-alpha.2" : 'latest';
14
+ var VERSION = typeof "3.2.0-alpha.3" !== 'undefined' ? "3.2.0-alpha.3" : 'latest';
15
15
 
16
16
  function parseNodePage(_x) {
17
17
  return _parseNodePage.apply(this, arguments);
@@ -196,7 +196,7 @@ function _parseI3SNodeGeometry() {
196
196
  _parseI3SNodeGeometry = (0, _asyncToGenerator2.default)(_regenerator.default.mark(function _callee2(arrayBuffer, tile, tileset, options) {
197
197
  var _options$i3s2;
198
198
 
199
- var content, attributes, vertexCount, byteOffset, featureCount, indices, _decompressedGeometry, decompressedGeometry, _decompressedGeometry2, POSITION, NORMAL, COLOR_0, TEXCOORD_0, featureIndex, uvRegion, featureIds, _tileset$store$defaul, vertexAttributes, attributesOrder, featureAttributes, featureAttributeOrder, headers, _normalizeAttributes, normalizedVertexAttributes, offset, _normalizeAttributes2, normalizedFeatureAttributes, enuMatrix, attributeIndex;
199
+ var content, contentByteLength, attributes, vertexCount, byteOffset, featureCount, indices, _decompressedGeometry, decompressedGeometry, _decompressedGeometry2, POSITION, NORMAL, COLOR_0, TEXCOORD_0, featureIndex, uvRegion, featureIds, _tileset$store$defaul, vertexAttributes, attributesOrder, featureAttributes, featureAttributeOrder, headers, _normalizeAttributes, normalizedVertexAttributes, offset, _normalizeAttributes2, normalizedFeatureAttributes, enuMatrix, attributeIndex;
200
200
 
201
201
  return _regenerator.default.wrap(function _callee2$(_context2) {
202
202
  while (1) {
@@ -211,22 +211,23 @@ function _parseI3SNodeGeometry() {
211
211
 
212
212
  case 2:
213
213
  content = tile.content;
214
+ contentByteLength = arrayBuffer.byteLength;
214
215
  byteOffset = 0;
215
216
  featureCount = 0;
216
217
 
217
218
  if (!tile.isDracoGeometry) {
218
- _context2.next = 18;
219
+ _context2.next = 19;
219
220
  break;
220
221
  }
221
222
 
222
- _context2.next = 8;
223
+ _context2.next = 9;
223
224
  return (0, _core.parse)(arrayBuffer, _draco.DracoLoader, {
224
225
  draco: {
225
226
  attributeNameEntry: I3S_ATTRIBUTE_TYPE
226
227
  }
227
228
  });
228
229
 
229
- case 8:
230
+ case 9:
230
231
  decompressedGeometry = _context2.sent;
231
232
  vertexCount = decompressedGeometry.header.vertexCount;
232
233
  indices = (_decompressedGeometry = decompressedGeometry.indices) === null || _decompressedGeometry === void 0 ? void 0 : _decompressedGeometry.value;
@@ -246,10 +247,10 @@ function _parseI3SNodeGeometry() {
246
247
  flattenFeatureIdsByFeatureIndices(attributes, featureIds);
247
248
  }
248
249
 
249
- _context2.next = 27;
250
+ _context2.next = 28;
250
251
  break;
251
252
 
252
- case 18:
253
+ case 19:
253
254
  _tileset$store$defaul = tileset.store.defaultGeometrySchema, vertexAttributes = _tileset$store$defaul.vertexAttributes, attributesOrder = _tileset$store$defaul.ordering, featureAttributes = _tileset$store$defaul.featureAttributes, featureAttributeOrder = _tileset$store$defaul.featureAttributeOrder;
254
255
  headers = parseHeaders(tileset, arrayBuffer);
255
256
  byteOffset = headers.byteOffset;
@@ -260,7 +261,7 @@ function _parseI3SNodeGeometry() {
260
261
  flattenFeatureIdsByFaceRanges(normalizedFeatureAttributes);
261
262
  attributes = concatAttributes(normalizedVertexAttributes, normalizedFeatureAttributes);
262
263
 
263
- case 27:
264
+ case 28:
264
265
  if (!(options !== null && options !== void 0 && (_options$i3s2 = options.i3s) !== null && _options$i3s2 !== void 0 && _options$i3s2.coordinateSystem) || options.i3s.coordinateSystem === _constants.COORDINATE_SYSTEM.METER_OFFSETS) {
265
266
  enuMatrix = parsePositions(attributes.position, tile);
266
267
  content.modelMatrix = enuMatrix.invert();
@@ -290,10 +291,10 @@ function _parseI3SNodeGeometry() {
290
291
  }
291
292
 
292
293
  content.vertexCount = vertexCount;
293
- content.byteLength = arrayBuffer.byteLength;
294
+ content.byteLength = contentByteLength;
294
295
  return _context2.abrupt("return", tile);
295
296
 
296
- case 35:
297
+ case 36:
297
298
  case "end":
298
299
  return _context2.stop();
299
300
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/lib/parsers/parse-i3s-tile-content.ts"],"names":["scratchVector","Vector3","getLoaderForTextureFormat","textureFormat","CompressedTextureLoader","BasisLoader","ImageLoader","I3S_ATTRIBUTE_TYPE","parseI3STileContent","arrayBuffer","tile","tileset","options","context","content","featureIds","attributes","textureUrl","url","i3s","token","loader","fetch","response","decodeTextures","textureLoaderOptions","image","type","parse","texture","compressed","mipmaps","width","height","data","material","makePbrMaterial","materialDefinition","parseI3SNodeGeometry","byteOffset","featureCount","isDracoGeometry","DracoLoader","draco","attributeNameEntry","decompressedGeometry","vertexCount","header","indices","value","POSITION","NORMAL","COLOR_0","TEXCOORD_0","featureIndex","uvRegion","position","normal","color","uv0","id","updateAttributesMetadata","getFeatureIdsFromFeatureIndexMetadata","flattenFeatureIdsByFeatureIndices","store","defaultGeometrySchema","vertexAttributes","attributesOrder","ordering","featureAttributes","featureAttributeOrder","headers","parseHeaders","normalizeAttributes","normalizedVertexAttributes","offset","normalizedFeatureAttributes","flattenFeatureIdsByFaceRanges","concatAttributes","coordinateSystem","COORDINATE_SYSTEM","METER_OFFSETS","enuMatrix","parsePositions","modelMatrix","invert","getModelMatrix","LNGLAT_OFFSETS","positions","normals","colors","normalizeAttribute","texCoords","uvRegions","attributeIndex","byteLength","key","loaderData","dracoAttribute","name","metadata","attribute","normalized","property","TypedArrayTypeHeader","HeaderAttributeProperty","attributeCount","valueType","valuesPerElement","buffer","slice","parseUint64Values","TypedArrayType","GL_TYPE_MAP","size","elementsCount","attributeSize","values","dataView","DataView","index","left","getUint32","right","push","Uint32Array","mbs","Matrix4","cartographicOrigin","cartesianOrigin","Ellipsoid","WGS84","cartographicToCartesian","eastNorthUpToFixedFrame","offsetsToCartesians","vertices","Float64Array","length","scaleX","double","scaleY","i","x","y","z","subarray","pbrMaterial","pbrMetallicRoughness","baseColorFactor","baseColorTexture","texCoord","alphaCutoff","alphaMode","toUpperCase","emissiveFactor","convertColorFormat","setMaterialTexture","colorFactor","normalizedColor","source","emissiveTexture","metallicRoughnessTexture","normalTexture","occlusionTexture","faceRange","range","featureIdsLength","orderedFeatureIndices","startIndex","fillId","Number","endValue","prevValue","trianglesCount","endIndex","fill","featureIndices","result","Float32Array","intArray"],"mappings":"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","sourcesContent":["import type {TypedArray} from '@loaders.gl/schema';\nimport {load, parse} from '@loaders.gl/core';\nimport {Vector3, Matrix4} from '@math.gl/core';\nimport {Ellipsoid} from '@math.gl/geospatial';\nimport type {LoaderOptions, LoaderContext} from '@loaders.gl/loader-utils';\nimport {ImageLoader} from '@loaders.gl/images';\nimport {DracoLoader, DracoMesh} from '@loaders.gl/draco';\nimport {BasisLoader, CompressedTextureLoader} from '@loaders.gl/textures';\n\nimport {\n I3STilesetHeader,\n I3STileHeader,\n FeatureAttribute,\n VertexAttribute,\n I3SMeshAttributes,\n I3SMeshAttribute,\n TileContentTexture,\n HeaderAttributeProperty,\n I3SMaterialDefinition\n} from '../../types';\nimport {getUrlWithToken} from '../utils/url-utils';\n\nimport {GL_TYPE_MAP, getConstructorForDataFormat, sizeOf, COORDINATE_SYSTEM} from './constants';\n\nconst scratchVector = new Vector3([0, 0, 0]);\n\nfunction getLoaderForTextureFormat(textureFormat?: 'jpg' | 'png' | 'ktx-etc2' | 'dds' | 'ktx2') {\n switch (textureFormat) {\n case 'ktx-etc2':\n case 'dds':\n return CompressedTextureLoader;\n case 'ktx2':\n return BasisLoader;\n case 'jpg':\n case 'png':\n default:\n return ImageLoader;\n }\n}\n\nconst I3S_ATTRIBUTE_TYPE = 'i3s-attribute-type';\n\nexport async function parseI3STileContent(\n arrayBuffer: ArrayBuffer,\n tile: I3STileHeader,\n tileset: I3STilesetHeader,\n options?: LoaderOptions,\n context?: LoaderContext\n) {\n tile.content = tile.content || {};\n tile.content.featureIds = tile.content.featureIds || null;\n\n tile.content.attributes = {};\n\n if (tile.textureUrl) {\n const url = getUrlWithToken(tile.textureUrl, options?.i3s?.token);\n const loader = getLoaderForTextureFormat(tile.textureFormat);\n const response = await fetch(url);\n const arrayBuffer = await response.arrayBuffer();\n\n if (options?.i3s.decodeTextures) {\n if (loader === ImageLoader) {\n const options = {...tile.textureLoaderOptions, image: {type: 'data'}};\n try {\n // @ts-ignore context must be defined\n // Image constructor is not supported in worker thread.\n // Do parsing image data on the main thread by using context to avoid worker issues.\n tile.content.texture = await context.parse(arrayBuffer, options);\n } catch (e) {\n // context object is different between worker and node.js conversion script.\n // To prevent error we parse data in ordinary way if it is not parsed by using context.\n tile.content.texture = await parse(arrayBuffer, loader, options);\n }\n } else if (loader === CompressedTextureLoader || loader === BasisLoader) {\n let texture = await load(arrayBuffer, loader, tile.textureLoaderOptions);\n if (loader === BasisLoader) {\n texture = texture[0];\n }\n tile.content.texture = {\n compressed: true,\n mipmaps: false,\n width: texture[0].width,\n height: texture[0].height,\n data: texture\n };\n }\n } else {\n tile.content.texture = arrayBuffer;\n }\n }\n\n tile.content.material = makePbrMaterial(tile.materialDefinition, tile.content.texture);\n if (tile.content.material) {\n tile.content.texture = null;\n }\n\n return await parseI3SNodeGeometry(arrayBuffer, tile, tileset, options);\n}\n\n/* eslint-disable max-statements */\nasync function parseI3SNodeGeometry(\n arrayBuffer: ArrayBuffer,\n tile: I3STileHeader,\n tileset: I3STilesetHeader,\n options?: LoaderOptions\n) {\n if (!tile.content) {\n return tile;\n }\n\n const content = tile.content;\n let attributes: I3SMeshAttributes;\n let vertexCount: number;\n let byteOffset: number = 0;\n let featureCount: number = 0;\n let indices: TypedArray | undefined;\n\n if (tile.isDracoGeometry) {\n const decompressedGeometry: DracoMesh = await parse(arrayBuffer, DracoLoader, {\n draco: {\n attributeNameEntry: I3S_ATTRIBUTE_TYPE\n }\n });\n // @ts-expect-error\n vertexCount = decompressedGeometry.header.vertexCount;\n indices = decompressedGeometry.indices?.value;\n const {\n POSITION,\n NORMAL,\n COLOR_0,\n TEXCOORD_0,\n ['feature-index']: featureIndex,\n ['uv-region']: uvRegion\n } = decompressedGeometry.attributes;\n\n attributes = {\n position: POSITION,\n normal: NORMAL,\n color: COLOR_0,\n uv0: TEXCOORD_0,\n uvRegion,\n id: featureIndex\n };\n\n updateAttributesMetadata(attributes, decompressedGeometry);\n\n const featureIds = getFeatureIdsFromFeatureIndexMetadata(featureIndex);\n\n if (featureIds) {\n flattenFeatureIdsByFeatureIndices(attributes, featureIds);\n }\n } else {\n const {\n vertexAttributes,\n ordering: attributesOrder,\n featureAttributes,\n featureAttributeOrder\n } = tileset.store.defaultGeometrySchema;\n // First 8 bytes reserved for header (vertexCount and featureCount)\n const headers = parseHeaders(tileset, arrayBuffer);\n byteOffset = headers.byteOffset;\n vertexCount = headers.vertexCount;\n featureCount = headers.featureCount;\n // Getting vertex attributes such as positions, normals, colors, etc...\n const {attributes: normalizedVertexAttributes, byteOffset: offset} = normalizeAttributes(\n arrayBuffer,\n byteOffset,\n vertexAttributes,\n vertexCount,\n attributesOrder\n );\n\n // Getting feature attributes such as featureIds and faceRange\n const {attributes: normalizedFeatureAttributes} = normalizeAttributes(\n arrayBuffer,\n offset,\n featureAttributes,\n featureCount,\n featureAttributeOrder\n );\n\n flattenFeatureIdsByFaceRanges(normalizedFeatureAttributes);\n attributes = concatAttributes(normalizedVertexAttributes, normalizedFeatureAttributes);\n }\n\n if (\n !options?.i3s?.coordinateSystem ||\n options.i3s.coordinateSystem === COORDINATE_SYSTEM.METER_OFFSETS\n ) {\n const enuMatrix = parsePositions(attributes.position, tile);\n content.modelMatrix = enuMatrix.invert();\n content.coordinateSystem = COORDINATE_SYSTEM.METER_OFFSETS;\n } else {\n content.modelMatrix = getModelMatrix(attributes.position);\n content.coordinateSystem = COORDINATE_SYSTEM.LNGLAT_OFFSETS;\n }\n\n content.attributes = {\n positions: attributes.position,\n normals: attributes.normal,\n colors: normalizeAttribute(attributes.color), // Normalize from UInt8\n texCoords: attributes.uv0,\n uvRegions: normalizeAttribute(attributes.uvRegion) // Normalize from UInt16\n };\n content.indices = indices || null;\n\n if (attributes.id && attributes.id.value) {\n tile.content.featureIds = attributes.id.value;\n }\n\n // Remove undefined attributes\n for (const attributeIndex in content.attributes) {\n if (!content.attributes[attributeIndex]) {\n delete content.attributes[attributeIndex];\n }\n }\n\n content.vertexCount = vertexCount;\n content.byteLength = arrayBuffer.byteLength;\n\n return tile;\n}\n\n/**\n * Update attributes with metadata from decompressed geometry.\n * @param decompressedGeometry\n * @param attributes\n */\nfunction updateAttributesMetadata(\n attributes: I3SMeshAttributes,\n decompressedGeometry: DracoMesh\n): void {\n for (const key in decompressedGeometry.loaderData.attributes) {\n const dracoAttribute = decompressedGeometry.loaderData.attributes[key];\n\n switch (dracoAttribute.name) {\n case 'POSITION':\n attributes.position.metadata = dracoAttribute.metadata;\n break;\n case 'feature-index':\n attributes.id.metadata = dracoAttribute.metadata;\n break;\n default:\n break;\n }\n }\n}\n\n/**\n * Do concatenation of attribute objects.\n * Done as separate fucntion to avoid ts errors.\n * @param normalizedVertexAttributes\n * @param normalizedFeatureAttributes\n * @returns - result of attributes concatenation.\n */\nfunction concatAttributes(\n normalizedVertexAttributes: I3SMeshAttributes,\n normalizedFeatureAttributes: I3SMeshAttributes\n): I3SMeshAttributes {\n return {...normalizedVertexAttributes, ...normalizedFeatureAttributes};\n}\n\n/**\n * Normalize attribute to range [0..1] . Eg. convert colors buffer from [255,255,255,255] to [1,1,1,1]\n * @param attribute - geometry attribute\n * @returns - geometry attribute in right format\n */\nfunction normalizeAttribute(attribute: I3SMeshAttribute): I3SMeshAttribute {\n if (!attribute) {\n return attribute;\n }\n attribute.normalized = true;\n return attribute;\n}\n\nfunction parseHeaders(tileset: I3STilesetHeader, arrayBuffer: ArrayBuffer) {\n let byteOffset = 0;\n // First 8 bytes reserved for header (vertexCount and featurecount)\n let vertexCount = 0;\n let featureCount = 0;\n for (const {property, type} of tileset.store.defaultGeometrySchema.header) {\n const TypedArrayTypeHeader = getConstructorForDataFormat(type);\n switch (property) {\n case HeaderAttributeProperty.vertexCount:\n vertexCount = new TypedArrayTypeHeader(arrayBuffer, 0, 4)[0];\n byteOffset += sizeOf(type);\n break;\n case HeaderAttributeProperty.featureCount:\n featureCount = new TypedArrayTypeHeader(arrayBuffer, 4, 4)[0];\n byteOffset += sizeOf(type);\n break;\n default:\n break;\n }\n }\n\n return {\n vertexCount,\n featureCount,\n byteOffset\n };\n}\n\n/* eslint-enable max-statements */\n\nfunction normalizeAttributes(\n arrayBuffer: ArrayBuffer,\n byteOffset: number,\n vertexAttributes: VertexAttribute | FeatureAttribute,\n attributeCount: number,\n attributesOrder: string[]\n) {\n const attributes: I3SMeshAttributes = {};\n\n // the order of attributes depend on the order being added to the vertexAttributes object\n for (const attribute of attributesOrder) {\n if (vertexAttributes[attribute]) {\n const {valueType, valuesPerElement}: {valueType: string; valuesPerElement: number} =\n vertexAttributes[attribute];\n // protect from arrayBuffer read overunns by NOT assuming node has regions always even though its declared in defaultGeometrySchema.\n // In i3s 1.6: client is required to decide that based on ./shared resource of the node (materialDefinitions.[Mat_id].params.vertexRegions == true)\n // In i3s 1.7 the property has been rolled into the 3d scene layer json/node pages.\n // Code below does not account when the bytelength is actually bigger than\n // the calculated value (b\\c the tile potentially could have mesh segmentation information).\n // In those cases tiles without regions could fail or have garbage values.\n if (\n byteOffset + attributeCount * valuesPerElement * sizeOf(valueType) <=\n arrayBuffer.byteLength\n ) {\n const buffer = arrayBuffer.slice(byteOffset);\n let value: TypedArray;\n\n if (valueType === 'UInt64') {\n value = parseUint64Values(buffer, attributeCount * valuesPerElement, sizeOf(valueType));\n } else {\n const TypedArrayType = getConstructorForDataFormat(valueType);\n value = new TypedArrayType(buffer, 0, attributeCount * valuesPerElement);\n }\n\n attributes[attribute] = {\n value,\n type: GL_TYPE_MAP[valueType],\n size: valuesPerElement\n };\n\n switch (attribute) {\n case 'color':\n attributes.color.normalized = true;\n break;\n case 'position':\n case 'region':\n case 'normal':\n default:\n }\n\n byteOffset = byteOffset + attributeCount * valuesPerElement * sizeOf(valueType);\n } else if (attribute !== 'uv0') {\n break;\n }\n }\n }\n\n return {attributes, byteOffset};\n}\n\n/**\n * Parse buffer to return array of uint64 values\n *\n * @param buffer\n * @param elementsCount\n * @returns 64-bit array of values until precision is lost after Number.MAX_SAFE_INTEGER\n */\nfunction parseUint64Values(\n buffer: ArrayBuffer,\n elementsCount: number,\n attributeSize: number\n): Uint32Array {\n const values: number[] = [];\n const dataView = new DataView(buffer);\n let offset = 0;\n\n for (let index = 0; index < elementsCount; index++) {\n // split 64-bit number into two 32-bit parts\n const left = dataView.getUint32(offset, true);\n const right = dataView.getUint32(offset + 4, true);\n // combine the two 32-bit values\n const value = left + 2 ** 32 * right;\n\n values.push(value);\n offset += attributeSize;\n }\n\n return new Uint32Array(values);\n}\n\nfunction parsePositions(attribute: I3SMeshAttribute, tile: I3STileHeader): Matrix4 {\n const mbs = tile.mbs;\n const value = attribute.value;\n const metadata = attribute.metadata;\n const enuMatrix = new Matrix4();\n const cartographicOrigin = new Vector3(mbs[0], mbs[1], mbs[2]);\n const cartesianOrigin = new Vector3();\n Ellipsoid.WGS84.cartographicToCartesian(cartographicOrigin, cartesianOrigin);\n Ellipsoid.WGS84.eastNorthUpToFixedFrame(cartesianOrigin, enuMatrix);\n attribute.value = offsetsToCartesians(value, metadata, cartographicOrigin);\n\n return enuMatrix;\n}\n\n/**\n * Converts position coordinates to absolute cartesian coordinates\n * @param vertices - \"position\" attribute data\n * @param metadata - When the geometry is DRACO compressed, contain position attribute's metadata\n * https://github.com/Esri/i3s-spec/blob/master/docs/1.7/compressedAttributes.cmn.md\n * @param cartographicOrigin - Cartographic origin coordinates\n * @returns - converted \"position\" data\n */\nfunction offsetsToCartesians(\n vertices: number[] | TypedArray,\n metadata: any = {},\n cartographicOrigin: Vector3\n): Float64Array {\n const positions = new Float64Array(vertices.length);\n const scaleX = (metadata['i3s-scale_x'] && metadata['i3s-scale_x'].double) || 1;\n const scaleY = (metadata['i3s-scale_y'] && metadata['i3s-scale_y'].double) || 1;\n for (let i = 0; i < positions.length; i += 3) {\n positions[i] = vertices[i] * scaleX + cartographicOrigin.x;\n positions[i + 1] = vertices[i + 1] * scaleY + cartographicOrigin.y;\n positions[i + 2] = vertices[i + 2] + cartographicOrigin.z;\n }\n\n for (let i = 0; i < positions.length; i += 3) {\n // @ts-ignore\n Ellipsoid.WGS84.cartographicToCartesian(positions.subarray(i, i + 3), scratchVector);\n positions[i] = scratchVector.x;\n positions[i + 1] = scratchVector.y;\n positions[i + 2] = scratchVector.z;\n }\n\n return positions;\n}\n\n/**\n * Get model matrix for loaded vertices\n * @param positions positions attribute\n * @returns Matrix4 - model matrix for geometry transformation\n */\nfunction getModelMatrix(positions: I3SMeshAttribute): Matrix4 {\n const metadata = positions.metadata;\n const scaleX: number = metadata?.['i3s-scale_x']?.double || 1;\n const scaleY: number = metadata?.['i3s-scale_y']?.double || 1;\n const modelMatrix = new Matrix4();\n modelMatrix[0] = scaleX;\n modelMatrix[5] = scaleY;\n return modelMatrix;\n}\n\n/**\n * Makes a glTF-compatible PBR material from an I3S material definition\n * @param materialDefinition - i3s material definition\n * https://github.com/Esri/i3s-spec/blob/master/docs/1.7/materialDefinitions.cmn.md\n * @param texture - texture image\n * @returns {object}\n */\nfunction makePbrMaterial(materialDefinition?: I3SMaterialDefinition, texture?: TileContentTexture) {\n let pbrMaterial;\n if (materialDefinition) {\n pbrMaterial = {\n ...materialDefinition,\n pbrMetallicRoughness: materialDefinition.pbrMetallicRoughness\n ? {...materialDefinition.pbrMetallicRoughness}\n : {baseColorFactor: [255, 255, 255, 255]}\n };\n } else {\n pbrMaterial = {\n pbrMetallicRoughness: {}\n };\n if (texture) {\n pbrMaterial.pbrMetallicRoughness.baseColorTexture = {texCoord: 0};\n } else {\n pbrMaterial.pbrMetallicRoughness.baseColorFactor = [255, 255, 255, 255];\n }\n }\n\n // Set default 0.25 per spec https://github.com/Esri/i3s-spec/blob/master/docs/1.7/materialDefinitions.cmn.md\n pbrMaterial.alphaCutoff = pbrMaterial.alphaCutoff || 0.25;\n\n if (pbrMaterial.alphaMode) {\n // I3S contain alphaMode in lowerCase\n pbrMaterial.alphaMode = pbrMaterial.alphaMode.toUpperCase();\n }\n\n // Convert colors from [255,255,255,255] to [1,1,1,1]\n if (pbrMaterial.emissiveFactor) {\n pbrMaterial.emissiveFactor = convertColorFormat(pbrMaterial.emissiveFactor);\n }\n if (pbrMaterial.pbrMetallicRoughness && pbrMaterial.pbrMetallicRoughness.baseColorFactor) {\n pbrMaterial.pbrMetallicRoughness.baseColorFactor = convertColorFormat(\n pbrMaterial.pbrMetallicRoughness.baseColorFactor\n );\n }\n\n if (texture) {\n setMaterialTexture(pbrMaterial, texture);\n }\n\n return pbrMaterial;\n}\n\n/**\n * Convert color from [255,255,255,255] to [1,1,1,1]\n * @param colorFactor - color array\n * @returns - new color array\n */\nfunction convertColorFormat(colorFactor: number[]): number[] {\n const normalizedColor = [...colorFactor];\n for (let index = 0; index < colorFactor.length; index++) {\n normalizedColor[index] = colorFactor[index] / 255;\n }\n return normalizedColor;\n}\n\n/**\n * Set texture in PBR material\n * @param {object} material - i3s material definition\n * @param image - texture image\n * @returns\n */\nfunction setMaterialTexture(material, image: TileContentTexture): void {\n const texture = {source: {image}};\n // I3SLoader now support loading only one texture. This elseif sequence will assign this texture to one of\n // properties defined in materialDefinition\n if (material.pbrMetallicRoughness && material.pbrMetallicRoughness.baseColorTexture) {\n material.pbrMetallicRoughness.baseColorTexture = {\n ...material.pbrMetallicRoughness.baseColorTexture,\n texture\n };\n } else if (material.emissiveTexture) {\n material.emissiveTexture = {...material.emissiveTexture, texture};\n } else if (\n material.pbrMetallicRoughness &&\n material.pbrMetallicRoughness.metallicRoughnessTexture\n ) {\n material.pbrMetallicRoughness.metallicRoughnessTexture = {\n ...material.pbrMetallicRoughness.metallicRoughnessTexture,\n texture\n };\n } else if (material.normalTexture) {\n material.normalTexture = {...material.normalTexture, texture};\n } else if (material.occlusionTexture) {\n material.occlusionTexture = {...material.occlusionTexture, texture};\n }\n}\n\n/**\n * Flatten feature ids using face ranges\n * @param normalizedFeatureAttributes\n * @returns\n */\nfunction flattenFeatureIdsByFaceRanges(normalizedFeatureAttributes: I3SMeshAttributes): void {\n const {id, faceRange} = normalizedFeatureAttributes;\n\n if (!id || !faceRange) {\n return;\n }\n\n const featureIds = id.value;\n const range = faceRange.value;\n const featureIdsLength = range[range.length - 1] + 1;\n const orderedFeatureIndices = new Uint32Array(featureIdsLength * 3);\n\n let featureIndex = 0;\n let startIndex = 0;\n\n for (let index = 1; index < range.length; index += 2) {\n const fillId = Number(featureIds[featureIndex]);\n const endValue = range[index];\n const prevValue = range[index - 1];\n const trianglesCount = endValue - prevValue + 1;\n const endIndex = startIndex + trianglesCount * 3;\n\n orderedFeatureIndices.fill(fillId, startIndex, endIndex);\n\n featureIndex++;\n startIndex = endIndex;\n }\n\n normalizedFeatureAttributes.id.value = orderedFeatureIndices;\n}\n\n/**\n * Flatten feature ids using featureIndices\n * @param attributes\n * @param featureIds\n * @returns\n */\nfunction flattenFeatureIdsByFeatureIndices(\n attributes: I3SMeshAttributes,\n featureIds: Int32Array\n): void {\n const featureIndices = attributes.id.value;\n const result = new Float32Array(featureIndices.length);\n\n for (let index = 0; index < featureIndices.length; index++) {\n result[index] = featureIds[featureIndices[index]];\n }\n\n attributes.id.value = result;\n}\n\n/**\n * Flatten feature ids using featureIndices\n * @param featureIndex\n * @returns\n */\nfunction getFeatureIdsFromFeatureIndexMetadata(\n featureIndex: I3SMeshAttribute\n): Int32Array | undefined {\n return featureIndex?.metadata?.['i3s-feature-ids']?.intArray;\n}\n"],"file":"parse-i3s-tile-content.js"}
1
+ {"version":3,"sources":["../../../../src/lib/parsers/parse-i3s-tile-content.ts"],"names":["scratchVector","Vector3","getLoaderForTextureFormat","textureFormat","CompressedTextureLoader","BasisLoader","ImageLoader","I3S_ATTRIBUTE_TYPE","parseI3STileContent","arrayBuffer","tile","tileset","options","context","content","featureIds","attributes","textureUrl","url","i3s","token","loader","fetch","response","decodeTextures","textureLoaderOptions","image","type","parse","texture","compressed","mipmaps","width","height","data","material","makePbrMaterial","materialDefinition","parseI3SNodeGeometry","contentByteLength","byteLength","byteOffset","featureCount","isDracoGeometry","DracoLoader","draco","attributeNameEntry","decompressedGeometry","vertexCount","header","indices","value","POSITION","NORMAL","COLOR_0","TEXCOORD_0","featureIndex","uvRegion","position","normal","color","uv0","id","updateAttributesMetadata","getFeatureIdsFromFeatureIndexMetadata","flattenFeatureIdsByFeatureIndices","store","defaultGeometrySchema","vertexAttributes","attributesOrder","ordering","featureAttributes","featureAttributeOrder","headers","parseHeaders","normalizeAttributes","normalizedVertexAttributes","offset","normalizedFeatureAttributes","flattenFeatureIdsByFaceRanges","concatAttributes","coordinateSystem","COORDINATE_SYSTEM","METER_OFFSETS","enuMatrix","parsePositions","modelMatrix","invert","getModelMatrix","LNGLAT_OFFSETS","positions","normals","colors","normalizeAttribute","texCoords","uvRegions","attributeIndex","key","loaderData","dracoAttribute","name","metadata","attribute","normalized","property","TypedArrayTypeHeader","HeaderAttributeProperty","attributeCount","valueType","valuesPerElement","buffer","slice","parseUint64Values","TypedArrayType","GL_TYPE_MAP","size","elementsCount","attributeSize","values","dataView","DataView","index","left","getUint32","right","push","Uint32Array","mbs","Matrix4","cartographicOrigin","cartesianOrigin","Ellipsoid","WGS84","cartographicToCartesian","eastNorthUpToFixedFrame","offsetsToCartesians","vertices","Float64Array","length","scaleX","double","scaleY","i","x","y","z","subarray","pbrMaterial","pbrMetallicRoughness","baseColorFactor","baseColorTexture","texCoord","alphaCutoff","alphaMode","toUpperCase","emissiveFactor","convertColorFormat","setMaterialTexture","colorFactor","normalizedColor","source","emissiveTexture","metallicRoughnessTexture","normalTexture","occlusionTexture","faceRange","range","featureIdsLength","orderedFeatureIndices","startIndex","fillId","Number","endValue","prevValue","trianglesCount","endIndex","fill","featureIndices","result","Float32Array","intArray"],"mappings":";;;;;;;;;;;;;;;;;AACA;;AACA;;AACA;;AAEA;;AACA;;AACA;;AAEA;;AAWA;;AAEA;;;;;;;;;;;;AAEA,IAAMA,aAAa,GAAG,IAAIC,cAAJ,CAAY,CAAC,CAAD,EAAI,CAAJ,EAAO,CAAP,CAAZ,CAAtB;;AAEA,SAASC,yBAAT,CAAmCC,aAAnC,EAAgG;AAC9F,UAAQA,aAAR;AACE,SAAK,UAAL;AACA,SAAK,KAAL;AACE,aAAOC,iCAAP;;AACF,SAAK,MAAL;AACE,aAAOC,qBAAP;;AACF,SAAK,KAAL;AACA,SAAK,KAAL;AACA;AACE,aAAOC,mBAAP;AATJ;AAWD;;AAED,IAAMC,kBAAkB,GAAG,oBAA3B;;SAEsBC,mB;;;;;mFAAf,iBACLC,WADK,EAELC,IAFK,EAGLC,OAHK,EAILC,OAJK,EAKLC,OALK;AAAA;;AAAA;AAAA;AAAA;AAAA;AAOLH,YAAAA,IAAI,CAACI,OAAL,GAAeJ,IAAI,CAACI,OAAL,IAAgB,EAA/B;AACAJ,YAAAA,IAAI,CAACI,OAAL,CAAaC,UAAb,GAA0BL,IAAI,CAACI,OAAL,CAAaC,UAAb,IAA2B,IAArD;AAEAL,YAAAA,IAAI,CAACI,OAAL,CAAaE,UAAb,GAA0B,EAA1B;;AAVK,iBAYDN,IAAI,CAACO,UAZJ;AAAA;AAAA;AAAA;;AAaGC,YAAAA,GAbH,GAaS,+BAAgBR,IAAI,CAACO,UAArB,EAAiCL,OAAjC,aAAiCA,OAAjC,uCAAiCA,OAAO,CAAEO,GAA1C,iDAAiC,aAAcC,KAA/C,CAbT;AAcGC,YAAAA,MAdH,GAcYnB,yBAAyB,CAACQ,IAAI,CAACP,aAAN,CAdrC;AAAA;AAAA,mBAeoBmB,KAAK,CAACJ,GAAD,CAfzB;;AAAA;AAeGK,YAAAA,QAfH;AAAA;AAAA,mBAgBuBA,QAAQ,CAACd,WAAT,EAhBvB;;AAAA;AAgBGA,YAAAA,YAhBH;;AAAA,kBAkBCG,OAlBD,aAkBCA,OAlBD,eAkBCA,OAAO,CAAEO,GAAT,CAAaK,cAlBd;AAAA;AAAA;AAAA;;AAAA,kBAmBGH,MAAM,KAAKf,mBAnBd;AAAA;AAAA;AAAA;;AAoBOM,YAAAA,QApBP,mCAoBqBF,IAAI,CAACe,oBApB1B;AAoBgDC,cAAAA,KAAK,EAAE;AAACC,gBAAAA,IAAI,EAAE;AAAP;AApBvD;AAAA;AAAA;AAAA,mBAyBgCd,OAAO,CAACe,KAAR,CAAcnB,YAAd,EAA2BG,QAA3B,CAzBhC;;AAAA;AAyBGF,YAAAA,IAAI,CAACI,OAAL,CAAae,OAzBhB;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA,mBA6BgC,iBAAMpB,YAAN,EAAmBY,MAAnB,EAA2BT,QAA3B,CA7BhC;;AAAA;AA6BGF,YAAAA,IAAI,CAACI,OAAL,CAAae,OA7BhB;;AAAA;AAAA;AAAA;;AAAA;AAAA,kBA+BUR,MAAM,KAAKjB,iCAAX,IAAsCiB,MAAM,KAAKhB,qBA/B3D;AAAA;AAAA;AAAA;;AAAA;AAAA,mBAgCqB,gBAAKI,YAAL,EAAkBY,MAAlB,EAA0BX,IAAI,CAACe,oBAA/B,CAhCrB;;AAAA;AAgCKI,YAAAA,OAhCL;;AAiCC,gBAAIR,MAAM,KAAKhB,qBAAf,EAA4B;AAC1BwB,cAAAA,OAAO,GAAGA,OAAO,CAAC,CAAD,CAAjB;AACD;;AACDnB,YAAAA,IAAI,CAACI,OAAL,CAAae,OAAb,GAAuB;AACrBC,cAAAA,UAAU,EAAE,IADS;AAErBC,cAAAA,OAAO,EAAE,KAFY;AAGrBC,cAAAA,KAAK,EAAEH,OAAO,CAAC,CAAD,CAAP,CAAWG,KAHG;AAIrBC,cAAAA,MAAM,EAAEJ,OAAO,CAAC,CAAD,CAAP,CAAWI,MAJE;AAKrBC,cAAAA,IAAI,EAAEL;AALe,aAAvB;;AApCD;AAAA;AAAA;;AAAA;AA6CDnB,YAAAA,IAAI,CAACI,OAAL,CAAae,OAAb,GAAuBpB,YAAvB;;AA7CC;AAiDLC,YAAAA,IAAI,CAACI,OAAL,CAAaqB,QAAb,GAAwBC,eAAe,CAAC1B,IAAI,CAAC2B,kBAAN,EAA0B3B,IAAI,CAACI,OAAL,CAAae,OAAvC,CAAvC;;AACA,gBAAInB,IAAI,CAACI,OAAL,CAAaqB,QAAjB,EAA2B;AACzBzB,cAAAA,IAAI,CAACI,OAAL,CAAae,OAAb,GAAuB,IAAvB;AACD;;AApDI;AAAA,mBAsDQS,oBAAoB,CAAC7B,WAAD,EAAcC,IAAd,EAAoBC,OAApB,EAA6BC,OAA7B,CAtD5B;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,G;;;;SA0DQ0B,oB;;;;;oFAAf,kBACE7B,WADF,EAEEC,IAFF,EAGEC,OAHF,EAIEC,OAJF;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA,gBAMOF,IAAI,CAACI,OANZ;AAAA;AAAA;AAAA;;AAAA,8CAOWJ,IAPX;;AAAA;AAUQI,YAAAA,OAVR,GAUkBJ,IAAI,CAACI,OAVvB;AAWQyB,YAAAA,iBAXR,GAW4B9B,WAAW,CAAC+B,UAXxC;AAcMC,YAAAA,UAdN,GAc2B,CAd3B;AAeMC,YAAAA,YAfN,GAe6B,CAf7B;;AAAA,iBAkBMhC,IAAI,CAACiC,eAlBX;AAAA;AAAA;AAAA;;AAAA;AAAA,mBAmBkD,iBAAMlC,WAAN,EAAmBmC,kBAAnB,EAAgC;AAC5EC,cAAAA,KAAK,EAAE;AACLC,gBAAAA,kBAAkB,EAAEvC;AADf;AADqE,aAAhC,CAnBlD;;AAAA;AAmBUwC,YAAAA,oBAnBV;AAyBIC,YAAAA,WAAW,GAAGD,oBAAoB,CAACE,MAArB,CAA4BD,WAA1C;AACAE,YAAAA,OAAO,4BAAGH,oBAAoB,CAACG,OAAxB,0DAAG,sBAA8BC,KAAxC;AA1BJ,qCAkCQJ,oBAAoB,CAAC/B,UAlC7B,EA4BMoC,QA5BN,0BA4BMA,QA5BN,EA6BMC,MA7BN,0BA6BMA,MA7BN,EA8BMC,OA9BN,0BA8BMA,OA9BN,EA+BMC,UA/BN,0BA+BMA,UA/BN,EAgCyBC,YAhCzB,0BAgCO,eAhCP,GAiCqBC,QAjCrB,0BAiCO,WAjCP;AAoCIzC,YAAAA,UAAU,GAAG;AACX0C,cAAAA,QAAQ,EAAEN,QADC;AAEXO,cAAAA,MAAM,EAAEN,MAFG;AAGXO,cAAAA,KAAK,EAAEN,OAHI;AAIXO,cAAAA,GAAG,EAAEN,UAJM;AAKXE,cAAAA,QAAQ,EAARA,QALW;AAMXK,cAAAA,EAAE,EAAEN;AANO,aAAb;AASAO,YAAAA,wBAAwB,CAAC/C,UAAD,EAAa+B,oBAAb,CAAxB;AAEMhC,YAAAA,UA/CV,GA+CuBiD,qCAAqC,CAACR,YAAD,CA/C5D;;AAiDI,gBAAIzC,UAAJ,EAAgB;AACdkD,cAAAA,iCAAiC,CAACjD,UAAD,EAAaD,UAAb,CAAjC;AACD;;AAnDL;AAAA;;AAAA;AAAA,oCA0DQJ,OAAO,CAACuD,KAAR,CAAcC,qBA1DtB,EAsDMC,gBAtDN,yBAsDMA,gBAtDN,EAuDgBC,eAvDhB,yBAuDMC,QAvDN,EAwDMC,iBAxDN,yBAwDMA,iBAxDN,EAyDMC,qBAzDN,yBAyDMA,qBAzDN;AA4DUC,YAAAA,OA5DV,GA4DoBC,YAAY,CAAC/D,OAAD,EAAUF,WAAV,CA5DhC;AA6DIgC,YAAAA,UAAU,GAAGgC,OAAO,CAAChC,UAArB;AACAO,YAAAA,WAAW,GAAGyB,OAAO,CAACzB,WAAtB;AACAN,YAAAA,YAAY,GAAG+B,OAAO,CAAC/B,YAAvB;AA/DJ,mCAiEyEiC,mBAAmB,CACtFlE,WADsF,EAEtFgC,UAFsF,EAGtF2B,gBAHsF,EAItFpB,WAJsF,EAKtFqB,eALsF,CAjE5F,EAiEuBO,0BAjEvB,wBAiEW5D,UAjEX,EAiE+D6D,MAjE/D,wBAiEmDpC,UAjEnD;AAAA,oCA0EsDkC,mBAAmB,CACnElE,WADmE,EAEnEoE,MAFmE,EAGnEN,iBAHmE,EAInE7B,YAJmE,EAKnE8B,qBALmE,CA1EzE,EA0EuBM,2BA1EvB,yBA0EW9D,UA1EX;AAkFI+D,YAAAA,6BAA6B,CAACD,2BAAD,CAA7B;AACA9D,YAAAA,UAAU,GAAGgE,gBAAgB,CAACJ,0BAAD,EAA6BE,2BAA7B,CAA7B;;AAnFJ;AAsFE,gBACE,EAAClE,OAAD,aAACA,OAAD,gCAACA,OAAO,CAAEO,GAAV,0CAAC,cAAc8D,gBAAf,KACArE,OAAO,CAACO,GAAR,CAAY8D,gBAAZ,KAAiCC,6BAAkBC,aAFrD,EAGE;AACMC,cAAAA,SADN,GACkBC,cAAc,CAACrE,UAAU,CAAC0C,QAAZ,EAAsBhD,IAAtB,CADhC;AAEAI,cAAAA,OAAO,CAACwE,WAAR,GAAsBF,SAAS,CAACG,MAAV,EAAtB;AACAzE,cAAAA,OAAO,CAACmE,gBAAR,GAA2BC,6BAAkBC,aAA7C;AACD,aAPD,MAOO;AACLrE,cAAAA,OAAO,CAACwE,WAAR,GAAsBE,cAAc,CAACxE,UAAU,CAAC0C,QAAZ,CAApC;AACA5C,cAAAA,OAAO,CAACmE,gBAAR,GAA2BC,6BAAkBO,cAA7C;AACD;;AAED3E,YAAAA,OAAO,CAACE,UAAR,GAAqB;AACnB0E,cAAAA,SAAS,EAAE1E,UAAU,CAAC0C,QADH;AAEnBiC,cAAAA,OAAO,EAAE3E,UAAU,CAAC2C,MAFD;AAGnBiC,cAAAA,MAAM,EAAEC,kBAAkB,CAAC7E,UAAU,CAAC4C,KAAZ,CAHP;AAInBkC,cAAAA,SAAS,EAAE9E,UAAU,CAAC6C,GAJH;AAKnBkC,cAAAA,SAAS,EAAEF,kBAAkB,CAAC7E,UAAU,CAACyC,QAAZ;AALV,aAArB;AAOA3C,YAAAA,OAAO,CAACoC,OAAR,GAAkBA,OAAO,IAAI,IAA7B;;AAEA,gBAAIlC,UAAU,CAAC8C,EAAX,IAAiB9C,UAAU,CAAC8C,EAAX,CAAcX,KAAnC,EAA0C;AACxCzC,cAAAA,IAAI,CAACI,OAAL,CAAaC,UAAb,GAA0BC,UAAU,CAAC8C,EAAX,CAAcX,KAAxC;AACD;;AAGD,iBAAW6C,cAAX,IAA6BlF,OAAO,CAACE,UAArC,EAAiD;AAC/C,kBAAI,CAACF,OAAO,CAACE,UAAR,CAAmBgF,cAAnB,CAAL,EAAyC;AACvC,uBAAOlF,OAAO,CAACE,UAAR,CAAmBgF,cAAnB,CAAP;AACD;AACF;;AAEDlF,YAAAA,OAAO,CAACkC,WAAR,GAAsBA,WAAtB;AACAlC,YAAAA,OAAO,CAAC0B,UAAR,GAAqBD,iBAArB;AAvHF,8CAyHS7B,IAzHT;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,G;;;;AAiIA,SAASqD,wBAAT,CACE/C,UADF,EAEE+B,oBAFF,EAGQ;AACN,OAAK,IAAMkD,GAAX,IAAkBlD,oBAAoB,CAACmD,UAArB,CAAgClF,UAAlD,EAA8D;AAC5D,QAAMmF,cAAc,GAAGpD,oBAAoB,CAACmD,UAArB,CAAgClF,UAAhC,CAA2CiF,GAA3C,CAAvB;;AAEA,YAAQE,cAAc,CAACC,IAAvB;AACE,WAAK,UAAL;AACEpF,QAAAA,UAAU,CAAC0C,QAAX,CAAoB2C,QAApB,GAA+BF,cAAc,CAACE,QAA9C;AACA;;AACF,WAAK,eAAL;AACErF,QAAAA,UAAU,CAAC8C,EAAX,CAAcuC,QAAd,GAAyBF,cAAc,CAACE,QAAxC;AACA;;AACF;AACE;AARJ;AAUD;AACF;;AASD,SAASrB,gBAAT,CACEJ,0BADF,EAEEE,2BAFF,EAGqB;AACnB,yCAAWF,0BAAX,GAA0CE,2BAA1C;AACD;;AAOD,SAASe,kBAAT,CAA4BS,SAA5B,EAA2E;AACzE,MAAI,CAACA,SAAL,EAAgB;AACd,WAAOA,SAAP;AACD;;AACDA,EAAAA,SAAS,CAACC,UAAV,GAAuB,IAAvB;AACA,SAAOD,SAAP;AACD;;AAED,SAAS5B,YAAT,CAAsB/D,OAAtB,EAAiDF,WAAjD,EAA2E;AACzE,MAAIgC,UAAU,GAAG,CAAjB;AAEA,MAAIO,WAAW,GAAG,CAAlB;AACA,MAAIN,YAAY,GAAG,CAAnB;;AAJyE,6CAK1C/B,OAAO,CAACuD,KAAR,CAAcC,qBAAd,CAAoClB,MALM;AAAA;;AAAA;AAKzE,wDAA2E;AAAA;AAAA,UAA/DuD,QAA+D,eAA/DA,QAA+D;AAAA,UAArD7E,IAAqD,eAArDA,IAAqD;AACzE,UAAM8E,oBAAoB,GAAG,4CAA4B9E,IAA5B,CAA7B;;AACA,cAAQ6E,QAAR;AACE,aAAKE,+BAAwB1D,WAA7B;AACEA,UAAAA,WAAW,GAAG,IAAIyD,oBAAJ,CAAyBhG,WAAzB,EAAsC,CAAtC,EAAyC,CAAzC,EAA4C,CAA5C,CAAd;AACAgC,UAAAA,UAAU,IAAI,uBAAOd,IAAP,CAAd;AACA;;AACF,aAAK+E,+BAAwBhE,YAA7B;AACEA,UAAAA,YAAY,GAAG,IAAI+D,oBAAJ,CAAyBhG,WAAzB,EAAsC,CAAtC,EAAyC,CAAzC,EAA4C,CAA5C,CAAf;AACAgC,UAAAA,UAAU,IAAI,uBAAOd,IAAP,CAAd;AACA;;AACF;AACE;AAVJ;AAYD;AAnBwE;AAAA;AAAA;AAAA;AAAA;;AAqBzE,SAAO;AACLqB,IAAAA,WAAW,EAAXA,WADK;AAELN,IAAAA,YAAY,EAAZA,YAFK;AAGLD,IAAAA,UAAU,EAAVA;AAHK,GAAP;AAKD;;AAID,SAASkC,mBAAT,CACElE,WADF,EAEEgC,UAFF,EAGE2B,gBAHF,EAIEuC,cAJF,EAKEtC,eALF,EAME;AACA,MAAMrD,UAA6B,GAAG,EAAtC;;AADA,8CAIwBqD,eAJxB;AAAA;;AAAA;AAIA,2DAAyC;AAAA,UAA9BiC,SAA8B;;AACvC,UAAIlC,gBAAgB,CAACkC,SAAD,CAApB,EAAiC;AAC/B,oCACElC,gBAAgB,CAACkC,SAAD,CADlB;AAAA,YAAOM,SAAP,yBAAOA,SAAP;AAAA,YAAkBC,gBAAlB,yBAAkBA,gBAAlB;;AAQA,YACEpE,UAAU,GAAGkE,cAAc,GAAGE,gBAAjB,GAAoC,uBAAOD,SAAP,CAAjD,IACAnG,WAAW,CAAC+B,UAFd,EAGE;AACA,cAAMsE,MAAM,GAAGrG,WAAW,CAACsG,KAAZ,CAAkBtE,UAAlB,CAAf;AACA,cAAIU,KAAiB,SAArB;;AAEA,cAAIyD,SAAS,KAAK,QAAlB,EAA4B;AAC1BzD,YAAAA,KAAK,GAAG6D,iBAAiB,CAACF,MAAD,EAASH,cAAc,GAAGE,gBAA1B,EAA4C,uBAAOD,SAAP,CAA5C,CAAzB;AACD,WAFD,MAEO;AACL,gBAAMK,cAAc,GAAG,4CAA4BL,SAA5B,CAAvB;AACAzD,YAAAA,KAAK,GAAG,IAAI8D,cAAJ,CAAmBH,MAAnB,EAA2B,CAA3B,EAA8BH,cAAc,GAAGE,gBAA/C,CAAR;AACD;;AAED7F,UAAAA,UAAU,CAACsF,SAAD,CAAV,GAAwB;AACtBnD,YAAAA,KAAK,EAALA,KADsB;AAEtBxB,YAAAA,IAAI,EAAEuF,uBAAYN,SAAZ,CAFgB;AAGtBO,YAAAA,IAAI,EAAEN;AAHgB,WAAxB;;AAMA,kBAAQP,SAAR;AACE,iBAAK,OAAL;AACEtF,cAAAA,UAAU,CAAC4C,KAAX,CAAiB2C,UAAjB,GAA8B,IAA9B;AACA;;AACF,iBAAK,UAAL;AACA,iBAAK,QAAL;AACA,iBAAK,QAAL;AACA;AAPF;;AAUA9D,UAAAA,UAAU,GAAGA,UAAU,GAAGkE,cAAc,GAAGE,gBAAjB,GAAoC,uBAAOD,SAAP,CAA9D;AACD,SA/BD,MA+BO,IAAIN,SAAS,KAAK,KAAlB,EAAyB;AAC9B;AACD;AACF;AACF;AAjDD;AAAA;AAAA;AAAA;AAAA;;AAmDA,SAAO;AAACtF,IAAAA,UAAU,EAAVA,UAAD;AAAayB,IAAAA,UAAU,EAAVA;AAAb,GAAP;AACD;;AASD,SAASuE,iBAAT,CACEF,MADF,EAEEM,aAFF,EAGEC,aAHF,EAIe;AACb,MAAMC,MAAgB,GAAG,EAAzB;AACA,MAAMC,QAAQ,GAAG,IAAIC,QAAJ,CAAaV,MAAb,CAAjB;AACA,MAAIjC,MAAM,GAAG,CAAb;;AAEA,OAAK,IAAI4C,KAAK,GAAG,CAAjB,EAAoBA,KAAK,GAAGL,aAA5B,EAA2CK,KAAK,EAAhD,EAAoD;AAElD,QAAMC,IAAI,GAAGH,QAAQ,CAACI,SAAT,CAAmB9C,MAAnB,EAA2B,IAA3B,CAAb;AACA,QAAM+C,KAAK,GAAGL,QAAQ,CAACI,SAAT,CAAmB9C,MAAM,GAAG,CAA5B,EAA+B,IAA/B,CAAd;AAEA,QAAM1B,KAAK,GAAGuE,IAAI,GAAG,YAAK,EAAL,IAAUE,KAA/B;AAEAN,IAAAA,MAAM,CAACO,IAAP,CAAY1E,KAAZ;AACA0B,IAAAA,MAAM,IAAIwC,aAAV;AACD;;AAED,SAAO,IAAIS,WAAJ,CAAgBR,MAAhB,CAAP;AACD;;AAED,SAASjC,cAAT,CAAwBiB,SAAxB,EAAqD5F,IAArD,EAAmF;AACjF,MAAMqH,GAAG,GAAGrH,IAAI,CAACqH,GAAjB;AACA,MAAM5E,KAAK,GAAGmD,SAAS,CAACnD,KAAxB;AACA,MAAMkD,QAAQ,GAAGC,SAAS,CAACD,QAA3B;AACA,MAAMjB,SAAS,GAAG,IAAI4C,cAAJ,EAAlB;AACA,MAAMC,kBAAkB,GAAG,IAAIhI,cAAJ,CAAY8H,GAAG,CAAC,CAAD,CAAf,EAAoBA,GAAG,CAAC,CAAD,CAAvB,EAA4BA,GAAG,CAAC,CAAD,CAA/B,CAA3B;AACA,MAAMG,eAAe,GAAG,IAAIjI,cAAJ,EAAxB;;AACAkI,wBAAUC,KAAV,CAAgBC,uBAAhB,CAAwCJ,kBAAxC,EAA4DC,eAA5D;;AACAC,wBAAUC,KAAV,CAAgBE,uBAAhB,CAAwCJ,eAAxC,EAAyD9C,SAAzD;;AACAkB,EAAAA,SAAS,CAACnD,KAAV,GAAkBoF,mBAAmB,CAACpF,KAAD,EAAQkD,QAAR,EAAkB4B,kBAAlB,CAArC;AAEA,SAAO7C,SAAP;AACD;;AAUD,SAASmD,mBAAT,CACEC,QADF,EAIgB;AAAA,MAFdnC,QAEc,uEAFE,EAEF;AAAA,MADd4B,kBACc;AACd,MAAMvC,SAAS,GAAG,IAAI+C,YAAJ,CAAiBD,QAAQ,CAACE,MAA1B,CAAlB;AACA,MAAMC,MAAM,GAAItC,QAAQ,CAAC,aAAD,CAAR,IAA2BA,QAAQ,CAAC,aAAD,CAAR,CAAwBuC,MAApD,IAA+D,CAA9E;AACA,MAAMC,MAAM,GAAIxC,QAAQ,CAAC,aAAD,CAAR,IAA2BA,QAAQ,CAAC,aAAD,CAAR,CAAwBuC,MAApD,IAA+D,CAA9E;;AACA,OAAK,IAAIE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGpD,SAAS,CAACgD,MAA9B,EAAsCI,CAAC,IAAI,CAA3C,EAA8C;AAC5CpD,IAAAA,SAAS,CAACoD,CAAD,CAAT,GAAeN,QAAQ,CAACM,CAAD,CAAR,GAAcH,MAAd,GAAuBV,kBAAkB,CAACc,CAAzD;AACArD,IAAAA,SAAS,CAACoD,CAAC,GAAG,CAAL,CAAT,GAAmBN,QAAQ,CAACM,CAAC,GAAG,CAAL,CAAR,GAAkBD,MAAlB,GAA2BZ,kBAAkB,CAACe,CAAjE;AACAtD,IAAAA,SAAS,CAACoD,CAAC,GAAG,CAAL,CAAT,GAAmBN,QAAQ,CAACM,CAAC,GAAG,CAAL,CAAR,GAAkBb,kBAAkB,CAACgB,CAAxD;AACD;;AAED,OAAK,IAAIH,EAAC,GAAG,CAAb,EAAgBA,EAAC,GAAGpD,SAAS,CAACgD,MAA9B,EAAsCI,EAAC,IAAI,CAA3C,EAA8C;AAE5CX,0BAAUC,KAAV,CAAgBC,uBAAhB,CAAwC3C,SAAS,CAACwD,QAAV,CAAmBJ,EAAnB,EAAsBA,EAAC,GAAG,CAA1B,CAAxC,EAAsE9I,aAAtE;;AACA0F,IAAAA,SAAS,CAACoD,EAAD,CAAT,GAAe9I,aAAa,CAAC+I,CAA7B;AACArD,IAAAA,SAAS,CAACoD,EAAC,GAAG,CAAL,CAAT,GAAmB9I,aAAa,CAACgJ,CAAjC;AACAtD,IAAAA,SAAS,CAACoD,EAAC,GAAG,CAAL,CAAT,GAAmB9I,aAAa,CAACiJ,CAAjC;AACD;;AAED,SAAOvD,SAAP;AACD;;AAOD,SAASF,cAAT,CAAwBE,SAAxB,EAA8D;AAAA;;AAC5D,MAAMW,QAAQ,GAAGX,SAAS,CAACW,QAA3B;AACA,MAAMsC,MAAc,GAAG,CAAAtC,QAAQ,SAAR,IAAAA,QAAQ,WAAR,oCAAAA,QAAQ,CAAG,aAAH,CAAR,8EAA2BuC,MAA3B,KAAqC,CAA5D;AACA,MAAMC,MAAc,GAAG,CAAAxC,QAAQ,SAAR,IAAAA,QAAQ,WAAR,oCAAAA,QAAQ,CAAG,aAAH,CAAR,8EAA2BuC,MAA3B,KAAqC,CAA5D;AACA,MAAMtD,WAAW,GAAG,IAAI0C,cAAJ,EAApB;AACA1C,EAAAA,WAAW,CAAC,CAAD,CAAX,GAAiBqD,MAAjB;AACArD,EAAAA,WAAW,CAAC,CAAD,CAAX,GAAiBuD,MAAjB;AACA,SAAOvD,WAAP;AACD;;AASD,SAASlD,eAAT,CAAyBC,kBAAzB,EAAqER,OAArE,EAAmG;AACjG,MAAIsH,WAAJ;;AACA,MAAI9G,kBAAJ,EAAwB;AACtB8G,IAAAA,WAAW,mCACN9G,kBADM;AAET+G,MAAAA,oBAAoB,EAAE/G,kBAAkB,CAAC+G,oBAAnB,qBACd/G,kBAAkB,CAAC+G,oBADL,IAElB;AAACC,QAAAA,eAAe,EAAE,CAAC,GAAD,EAAM,GAAN,EAAW,GAAX,EAAgB,GAAhB;AAAlB;AAJK,MAAX;AAMD,GAPD,MAOO;AACLF,IAAAA,WAAW,GAAG;AACZC,MAAAA,oBAAoB,EAAE;AADV,KAAd;;AAGA,QAAIvH,OAAJ,EAAa;AACXsH,MAAAA,WAAW,CAACC,oBAAZ,CAAiCE,gBAAjC,GAAoD;AAACC,QAAAA,QAAQ,EAAE;AAAX,OAApD;AACD,KAFD,MAEO;AACLJ,MAAAA,WAAW,CAACC,oBAAZ,CAAiCC,eAAjC,GAAmD,CAAC,GAAD,EAAM,GAAN,EAAW,GAAX,EAAgB,GAAhB,CAAnD;AACD;AACF;;AAGDF,EAAAA,WAAW,CAACK,WAAZ,GAA0BL,WAAW,CAACK,WAAZ,IAA2B,IAArD;;AAEA,MAAIL,WAAW,CAACM,SAAhB,EAA2B;AAEzBN,IAAAA,WAAW,CAACM,SAAZ,GAAwBN,WAAW,CAACM,SAAZ,CAAsBC,WAAtB,EAAxB;AACD;;AAGD,MAAIP,WAAW,CAACQ,cAAhB,EAAgC;AAC9BR,IAAAA,WAAW,CAACQ,cAAZ,GAA6BC,kBAAkB,CAACT,WAAW,CAACQ,cAAb,CAA/C;AACD;;AACD,MAAIR,WAAW,CAACC,oBAAZ,IAAoCD,WAAW,CAACC,oBAAZ,CAAiCC,eAAzE,EAA0F;AACxFF,IAAAA,WAAW,CAACC,oBAAZ,CAAiCC,eAAjC,GAAmDO,kBAAkB,CACnET,WAAW,CAACC,oBAAZ,CAAiCC,eADkC,CAArE;AAGD;;AAED,MAAIxH,OAAJ,EAAa;AACXgI,IAAAA,kBAAkB,CAACV,WAAD,EAActH,OAAd,CAAlB;AACD;;AAED,SAAOsH,WAAP;AACD;;AAOD,SAASS,kBAAT,CAA4BE,WAA5B,EAA6D;AAC3D,MAAMC,eAAe,oCAAOD,WAAP,CAArB;;AACA,OAAK,IAAIrC,KAAK,GAAG,CAAjB,EAAoBA,KAAK,GAAGqC,WAAW,CAACpB,MAAxC,EAAgDjB,KAAK,EAArD,EAAyD;AACvDsC,IAAAA,eAAe,CAACtC,KAAD,CAAf,GAAyBqC,WAAW,CAACrC,KAAD,CAAX,GAAqB,GAA9C;AACD;;AACD,SAAOsC,eAAP;AACD;;AAQD,SAASF,kBAAT,CAA4B1H,QAA5B,EAAsCT,KAAtC,EAAuE;AACrE,MAAMG,OAAO,GAAG;AAACmI,IAAAA,MAAM,EAAE;AAACtI,MAAAA,KAAK,EAALA;AAAD;AAAT,GAAhB;;AAGA,MAAIS,QAAQ,CAACiH,oBAAT,IAAiCjH,QAAQ,CAACiH,oBAAT,CAA8BE,gBAAnE,EAAqF;AACnFnH,IAAAA,QAAQ,CAACiH,oBAAT,CAA8BE,gBAA9B,mCACKnH,QAAQ,CAACiH,oBAAT,CAA8BE,gBADnC;AAEEzH,MAAAA,OAAO,EAAPA;AAFF;AAID,GALD,MAKO,IAAIM,QAAQ,CAAC8H,eAAb,EAA8B;AACnC9H,IAAAA,QAAQ,CAAC8H,eAAT,mCAA+B9H,QAAQ,CAAC8H,eAAxC;AAAyDpI,MAAAA,OAAO,EAAPA;AAAzD;AACD,GAFM,MAEA,IACLM,QAAQ,CAACiH,oBAAT,IACAjH,QAAQ,CAACiH,oBAAT,CAA8Bc,wBAFzB,EAGL;AACA/H,IAAAA,QAAQ,CAACiH,oBAAT,CAA8Bc,wBAA9B,mCACK/H,QAAQ,CAACiH,oBAAT,CAA8Bc,wBADnC;AAEErI,MAAAA,OAAO,EAAPA;AAFF;AAID,GARM,MAQA,IAAIM,QAAQ,CAACgI,aAAb,EAA4B;AACjChI,IAAAA,QAAQ,CAACgI,aAAT,mCAA6BhI,QAAQ,CAACgI,aAAtC;AAAqDtI,MAAAA,OAAO,EAAPA;AAArD;AACD,GAFM,MAEA,IAAIM,QAAQ,CAACiI,gBAAb,EAA+B;AACpCjI,IAAAA,QAAQ,CAACiI,gBAAT,mCAAgCjI,QAAQ,CAACiI,gBAAzC;AAA2DvI,MAAAA,OAAO,EAAPA;AAA3D;AACD;AACF;;AAOD,SAASkD,6BAAT,CAAuCD,2BAAvC,EAA6F;AAC3F,MAAOhB,EAAP,GAAwBgB,2BAAxB,CAAOhB,EAAP;AAAA,MAAWuG,SAAX,GAAwBvF,2BAAxB,CAAWuF,SAAX;;AAEA,MAAI,CAACvG,EAAD,IAAO,CAACuG,SAAZ,EAAuB;AACrB;AACD;;AAED,MAAMtJ,UAAU,GAAG+C,EAAE,CAACX,KAAtB;AACA,MAAMmH,KAAK,GAAGD,SAAS,CAAClH,KAAxB;AACA,MAAMoH,gBAAgB,GAAGD,KAAK,CAACA,KAAK,CAAC5B,MAAN,GAAe,CAAhB,CAAL,GAA0B,CAAnD;AACA,MAAM8B,qBAAqB,GAAG,IAAI1C,WAAJ,CAAgByC,gBAAgB,GAAG,CAAnC,CAA9B;AAEA,MAAI/G,YAAY,GAAG,CAAnB;AACA,MAAIiH,UAAU,GAAG,CAAjB;;AAEA,OAAK,IAAIhD,KAAK,GAAG,CAAjB,EAAoBA,KAAK,GAAG6C,KAAK,CAAC5B,MAAlC,EAA0CjB,KAAK,IAAI,CAAnD,EAAsD;AACpD,QAAMiD,MAAM,GAAGC,MAAM,CAAC5J,UAAU,CAACyC,YAAD,CAAX,CAArB;AACA,QAAMoH,QAAQ,GAAGN,KAAK,CAAC7C,KAAD,CAAtB;AACA,QAAMoD,SAAS,GAAGP,KAAK,CAAC7C,KAAK,GAAG,CAAT,CAAvB;AACA,QAAMqD,cAAc,GAAGF,QAAQ,GAAGC,SAAX,GAAuB,CAA9C;AACA,QAAME,QAAQ,GAAGN,UAAU,GAAGK,cAAc,GAAG,CAA/C;AAEAN,IAAAA,qBAAqB,CAACQ,IAAtB,CAA2BN,MAA3B,EAAmCD,UAAnC,EAA+CM,QAA/C;AAEAvH,IAAAA,YAAY;AACZiH,IAAAA,UAAU,GAAGM,QAAb;AACD;;AAEDjG,EAAAA,2BAA2B,CAAChB,EAA5B,CAA+BX,KAA/B,GAAuCqH,qBAAvC;AACD;;AAQD,SAASvG,iCAAT,CACEjD,UADF,EAEED,UAFF,EAGQ;AACN,MAAMkK,cAAc,GAAGjK,UAAU,CAAC8C,EAAX,CAAcX,KAArC;AACA,MAAM+H,MAAM,GAAG,IAAIC,YAAJ,CAAiBF,cAAc,CAACvC,MAAhC,CAAf;;AAEA,OAAK,IAAIjB,KAAK,GAAG,CAAjB,EAAoBA,KAAK,GAAGwD,cAAc,CAACvC,MAA3C,EAAmDjB,KAAK,EAAxD,EAA4D;AAC1DyD,IAAAA,MAAM,CAACzD,KAAD,CAAN,GAAgB1G,UAAU,CAACkK,cAAc,CAACxD,KAAD,CAAf,CAA1B;AACD;;AAEDzG,EAAAA,UAAU,CAAC8C,EAAX,CAAcX,KAAd,GAAsB+H,MAAtB;AACD;;AAOD,SAASlH,qCAAT,CACER,YADF,EAE0B;AAAA;;AACxB,SAAOA,YAAP,aAAOA,YAAP,gDAAOA,YAAY,CAAE6C,QAArB,oFAAO,sBAAyB,iBAAzB,CAAP,2DAAO,uBAA6C+E,QAApD;AACD","sourcesContent":["import type {TypedArray} from '@loaders.gl/schema';\nimport {load, parse} from '@loaders.gl/core';\nimport {Vector3, Matrix4} from '@math.gl/core';\nimport {Ellipsoid} from '@math.gl/geospatial';\nimport type {LoaderOptions, LoaderContext} from '@loaders.gl/loader-utils';\nimport {ImageLoader} from '@loaders.gl/images';\nimport {DracoLoader, DracoMesh} from '@loaders.gl/draco';\nimport {BasisLoader, CompressedTextureLoader} from '@loaders.gl/textures';\n\nimport {\n I3STilesetHeader,\n I3STileHeader,\n FeatureAttribute,\n VertexAttribute,\n I3SMeshAttributes,\n I3SMeshAttribute,\n TileContentTexture,\n HeaderAttributeProperty,\n I3SMaterialDefinition\n} from '../../types';\nimport {getUrlWithToken} from '../utils/url-utils';\n\nimport {GL_TYPE_MAP, getConstructorForDataFormat, sizeOf, COORDINATE_SYSTEM} from './constants';\n\nconst scratchVector = new Vector3([0, 0, 0]);\n\nfunction getLoaderForTextureFormat(textureFormat?: 'jpg' | 'png' | 'ktx-etc2' | 'dds' | 'ktx2') {\n switch (textureFormat) {\n case 'ktx-etc2':\n case 'dds':\n return CompressedTextureLoader;\n case 'ktx2':\n return BasisLoader;\n case 'jpg':\n case 'png':\n default:\n return ImageLoader;\n }\n}\n\nconst I3S_ATTRIBUTE_TYPE = 'i3s-attribute-type';\n\nexport async function parseI3STileContent(\n arrayBuffer: ArrayBuffer,\n tile: I3STileHeader,\n tileset: I3STilesetHeader,\n options?: LoaderOptions,\n context?: LoaderContext\n) {\n tile.content = tile.content || {};\n tile.content.featureIds = tile.content.featureIds || null;\n\n tile.content.attributes = {};\n\n if (tile.textureUrl) {\n const url = getUrlWithToken(tile.textureUrl, options?.i3s?.token);\n const loader = getLoaderForTextureFormat(tile.textureFormat);\n const response = await fetch(url);\n const arrayBuffer = await response.arrayBuffer();\n\n if (options?.i3s.decodeTextures) {\n if (loader === ImageLoader) {\n const options = {...tile.textureLoaderOptions, image: {type: 'data'}};\n try {\n // @ts-ignore context must be defined\n // Image constructor is not supported in worker thread.\n // Do parsing image data on the main thread by using context to avoid worker issues.\n tile.content.texture = await context.parse(arrayBuffer, options);\n } catch (e) {\n // context object is different between worker and node.js conversion script.\n // To prevent error we parse data in ordinary way if it is not parsed by using context.\n tile.content.texture = await parse(arrayBuffer, loader, options);\n }\n } else if (loader === CompressedTextureLoader || loader === BasisLoader) {\n let texture = await load(arrayBuffer, loader, tile.textureLoaderOptions);\n if (loader === BasisLoader) {\n texture = texture[0];\n }\n tile.content.texture = {\n compressed: true,\n mipmaps: false,\n width: texture[0].width,\n height: texture[0].height,\n data: texture\n };\n }\n } else {\n tile.content.texture = arrayBuffer;\n }\n }\n\n tile.content.material = makePbrMaterial(tile.materialDefinition, tile.content.texture);\n if (tile.content.material) {\n tile.content.texture = null;\n }\n\n return await parseI3SNodeGeometry(arrayBuffer, tile, tileset, options);\n}\n\n/* eslint-disable max-statements */\nasync function parseI3SNodeGeometry(\n arrayBuffer: ArrayBuffer,\n tile: I3STileHeader,\n tileset: I3STilesetHeader,\n options?: LoaderOptions\n) {\n if (!tile.content) {\n return tile;\n }\n\n const content = tile.content;\n const contentByteLength = arrayBuffer.byteLength;\n let attributes: I3SMeshAttributes;\n let vertexCount: number;\n let byteOffset: number = 0;\n let featureCount: number = 0;\n let indices: TypedArray | undefined;\n\n if (tile.isDracoGeometry) {\n const decompressedGeometry: DracoMesh = await parse(arrayBuffer, DracoLoader, {\n draco: {\n attributeNameEntry: I3S_ATTRIBUTE_TYPE\n }\n });\n // @ts-expect-error\n vertexCount = decompressedGeometry.header.vertexCount;\n indices = decompressedGeometry.indices?.value;\n const {\n POSITION,\n NORMAL,\n COLOR_0,\n TEXCOORD_0,\n ['feature-index']: featureIndex,\n ['uv-region']: uvRegion\n } = decompressedGeometry.attributes;\n\n attributes = {\n position: POSITION,\n normal: NORMAL,\n color: COLOR_0,\n uv0: TEXCOORD_0,\n uvRegion,\n id: featureIndex\n };\n\n updateAttributesMetadata(attributes, decompressedGeometry);\n\n const featureIds = getFeatureIdsFromFeatureIndexMetadata(featureIndex);\n\n if (featureIds) {\n flattenFeatureIdsByFeatureIndices(attributes, featureIds);\n }\n } else {\n const {\n vertexAttributes,\n ordering: attributesOrder,\n featureAttributes,\n featureAttributeOrder\n } = tileset.store.defaultGeometrySchema;\n // First 8 bytes reserved for header (vertexCount and featureCount)\n const headers = parseHeaders(tileset, arrayBuffer);\n byteOffset = headers.byteOffset;\n vertexCount = headers.vertexCount;\n featureCount = headers.featureCount;\n // Getting vertex attributes such as positions, normals, colors, etc...\n const {attributes: normalizedVertexAttributes, byteOffset: offset} = normalizeAttributes(\n arrayBuffer,\n byteOffset,\n vertexAttributes,\n vertexCount,\n attributesOrder\n );\n\n // Getting feature attributes such as featureIds and faceRange\n const {attributes: normalizedFeatureAttributes} = normalizeAttributes(\n arrayBuffer,\n offset,\n featureAttributes,\n featureCount,\n featureAttributeOrder\n );\n\n flattenFeatureIdsByFaceRanges(normalizedFeatureAttributes);\n attributes = concatAttributes(normalizedVertexAttributes, normalizedFeatureAttributes);\n }\n\n if (\n !options?.i3s?.coordinateSystem ||\n options.i3s.coordinateSystem === COORDINATE_SYSTEM.METER_OFFSETS\n ) {\n const enuMatrix = parsePositions(attributes.position, tile);\n content.modelMatrix = enuMatrix.invert();\n content.coordinateSystem = COORDINATE_SYSTEM.METER_OFFSETS;\n } else {\n content.modelMatrix = getModelMatrix(attributes.position);\n content.coordinateSystem = COORDINATE_SYSTEM.LNGLAT_OFFSETS;\n }\n\n content.attributes = {\n positions: attributes.position,\n normals: attributes.normal,\n colors: normalizeAttribute(attributes.color), // Normalize from UInt8\n texCoords: attributes.uv0,\n uvRegions: normalizeAttribute(attributes.uvRegion) // Normalize from UInt16\n };\n content.indices = indices || null;\n\n if (attributes.id && attributes.id.value) {\n tile.content.featureIds = attributes.id.value;\n }\n\n // Remove undefined attributes\n for (const attributeIndex in content.attributes) {\n if (!content.attributes[attributeIndex]) {\n delete content.attributes[attributeIndex];\n }\n }\n\n content.vertexCount = vertexCount;\n content.byteLength = contentByteLength;\n\n return tile;\n}\n\n/**\n * Update attributes with metadata from decompressed geometry.\n * @param decompressedGeometry\n * @param attributes\n */\nfunction updateAttributesMetadata(\n attributes: I3SMeshAttributes,\n decompressedGeometry: DracoMesh\n): void {\n for (const key in decompressedGeometry.loaderData.attributes) {\n const dracoAttribute = decompressedGeometry.loaderData.attributes[key];\n\n switch (dracoAttribute.name) {\n case 'POSITION':\n attributes.position.metadata = dracoAttribute.metadata;\n break;\n case 'feature-index':\n attributes.id.metadata = dracoAttribute.metadata;\n break;\n default:\n break;\n }\n }\n}\n\n/**\n * Do concatenation of attribute objects.\n * Done as separate fucntion to avoid ts errors.\n * @param normalizedVertexAttributes\n * @param normalizedFeatureAttributes\n * @returns - result of attributes concatenation.\n */\nfunction concatAttributes(\n normalizedVertexAttributes: I3SMeshAttributes,\n normalizedFeatureAttributes: I3SMeshAttributes\n): I3SMeshAttributes {\n return {...normalizedVertexAttributes, ...normalizedFeatureAttributes};\n}\n\n/**\n * Normalize attribute to range [0..1] . Eg. convert colors buffer from [255,255,255,255] to [1,1,1,1]\n * @param attribute - geometry attribute\n * @returns - geometry attribute in right format\n */\nfunction normalizeAttribute(attribute: I3SMeshAttribute): I3SMeshAttribute {\n if (!attribute) {\n return attribute;\n }\n attribute.normalized = true;\n return attribute;\n}\n\nfunction parseHeaders(tileset: I3STilesetHeader, arrayBuffer: ArrayBuffer) {\n let byteOffset = 0;\n // First 8 bytes reserved for header (vertexCount and featurecount)\n let vertexCount = 0;\n let featureCount = 0;\n for (const {property, type} of tileset.store.defaultGeometrySchema.header) {\n const TypedArrayTypeHeader = getConstructorForDataFormat(type);\n switch (property) {\n case HeaderAttributeProperty.vertexCount:\n vertexCount = new TypedArrayTypeHeader(arrayBuffer, 0, 4)[0];\n byteOffset += sizeOf(type);\n break;\n case HeaderAttributeProperty.featureCount:\n featureCount = new TypedArrayTypeHeader(arrayBuffer, 4, 4)[0];\n byteOffset += sizeOf(type);\n break;\n default:\n break;\n }\n }\n\n return {\n vertexCount,\n featureCount,\n byteOffset\n };\n}\n\n/* eslint-enable max-statements */\n\nfunction normalizeAttributes(\n arrayBuffer: ArrayBuffer,\n byteOffset: number,\n vertexAttributes: VertexAttribute | FeatureAttribute,\n attributeCount: number,\n attributesOrder: string[]\n) {\n const attributes: I3SMeshAttributes = {};\n\n // the order of attributes depend on the order being added to the vertexAttributes object\n for (const attribute of attributesOrder) {\n if (vertexAttributes[attribute]) {\n const {valueType, valuesPerElement}: {valueType: string; valuesPerElement: number} =\n vertexAttributes[attribute];\n // protect from arrayBuffer read overunns by NOT assuming node has regions always even though its declared in defaultGeometrySchema.\n // In i3s 1.6: client is required to decide that based on ./shared resource of the node (materialDefinitions.[Mat_id].params.vertexRegions == true)\n // In i3s 1.7 the property has been rolled into the 3d scene layer json/node pages.\n // Code below does not account when the bytelength is actually bigger than\n // the calculated value (b\\c the tile potentially could have mesh segmentation information).\n // In those cases tiles without regions could fail or have garbage values.\n if (\n byteOffset + attributeCount * valuesPerElement * sizeOf(valueType) <=\n arrayBuffer.byteLength\n ) {\n const buffer = arrayBuffer.slice(byteOffset);\n let value: TypedArray;\n\n if (valueType === 'UInt64') {\n value = parseUint64Values(buffer, attributeCount * valuesPerElement, sizeOf(valueType));\n } else {\n const TypedArrayType = getConstructorForDataFormat(valueType);\n value = new TypedArrayType(buffer, 0, attributeCount * valuesPerElement);\n }\n\n attributes[attribute] = {\n value,\n type: GL_TYPE_MAP[valueType],\n size: valuesPerElement\n };\n\n switch (attribute) {\n case 'color':\n attributes.color.normalized = true;\n break;\n case 'position':\n case 'region':\n case 'normal':\n default:\n }\n\n byteOffset = byteOffset + attributeCount * valuesPerElement * sizeOf(valueType);\n } else if (attribute !== 'uv0') {\n break;\n }\n }\n }\n\n return {attributes, byteOffset};\n}\n\n/**\n * Parse buffer to return array of uint64 values\n *\n * @param buffer\n * @param elementsCount\n * @returns 64-bit array of values until precision is lost after Number.MAX_SAFE_INTEGER\n */\nfunction parseUint64Values(\n buffer: ArrayBuffer,\n elementsCount: number,\n attributeSize: number\n): Uint32Array {\n const values: number[] = [];\n const dataView = new DataView(buffer);\n let offset = 0;\n\n for (let index = 0; index < elementsCount; index++) {\n // split 64-bit number into two 32-bit parts\n const left = dataView.getUint32(offset, true);\n const right = dataView.getUint32(offset + 4, true);\n // combine the two 32-bit values\n const value = left + 2 ** 32 * right;\n\n values.push(value);\n offset += attributeSize;\n }\n\n return new Uint32Array(values);\n}\n\nfunction parsePositions(attribute: I3SMeshAttribute, tile: I3STileHeader): Matrix4 {\n const mbs = tile.mbs;\n const value = attribute.value;\n const metadata = attribute.metadata;\n const enuMatrix = new Matrix4();\n const cartographicOrigin = new Vector3(mbs[0], mbs[1], mbs[2]);\n const cartesianOrigin = new Vector3();\n Ellipsoid.WGS84.cartographicToCartesian(cartographicOrigin, cartesianOrigin);\n Ellipsoid.WGS84.eastNorthUpToFixedFrame(cartesianOrigin, enuMatrix);\n attribute.value = offsetsToCartesians(value, metadata, cartographicOrigin);\n\n return enuMatrix;\n}\n\n/**\n * Converts position coordinates to absolute cartesian coordinates\n * @param vertices - \"position\" attribute data\n * @param metadata - When the geometry is DRACO compressed, contain position attribute's metadata\n * https://github.com/Esri/i3s-spec/blob/master/docs/1.7/compressedAttributes.cmn.md\n * @param cartographicOrigin - Cartographic origin coordinates\n * @returns - converted \"position\" data\n */\nfunction offsetsToCartesians(\n vertices: number[] | TypedArray,\n metadata: any = {},\n cartographicOrigin: Vector3\n): Float64Array {\n const positions = new Float64Array(vertices.length);\n const scaleX = (metadata['i3s-scale_x'] && metadata['i3s-scale_x'].double) || 1;\n const scaleY = (metadata['i3s-scale_y'] && metadata['i3s-scale_y'].double) || 1;\n for (let i = 0; i < positions.length; i += 3) {\n positions[i] = vertices[i] * scaleX + cartographicOrigin.x;\n positions[i + 1] = vertices[i + 1] * scaleY + cartographicOrigin.y;\n positions[i + 2] = vertices[i + 2] + cartographicOrigin.z;\n }\n\n for (let i = 0; i < positions.length; i += 3) {\n // @ts-ignore\n Ellipsoid.WGS84.cartographicToCartesian(positions.subarray(i, i + 3), scratchVector);\n positions[i] = scratchVector.x;\n positions[i + 1] = scratchVector.y;\n positions[i + 2] = scratchVector.z;\n }\n\n return positions;\n}\n\n/**\n * Get model matrix for loaded vertices\n * @param positions positions attribute\n * @returns Matrix4 - model matrix for geometry transformation\n */\nfunction getModelMatrix(positions: I3SMeshAttribute): Matrix4 {\n const metadata = positions.metadata;\n const scaleX: number = metadata?.['i3s-scale_x']?.double || 1;\n const scaleY: number = metadata?.['i3s-scale_y']?.double || 1;\n const modelMatrix = new Matrix4();\n modelMatrix[0] = scaleX;\n modelMatrix[5] = scaleY;\n return modelMatrix;\n}\n\n/**\n * Makes a glTF-compatible PBR material from an I3S material definition\n * @param materialDefinition - i3s material definition\n * https://github.com/Esri/i3s-spec/blob/master/docs/1.7/materialDefinitions.cmn.md\n * @param texture - texture image\n * @returns {object}\n */\nfunction makePbrMaterial(materialDefinition?: I3SMaterialDefinition, texture?: TileContentTexture) {\n let pbrMaterial;\n if (materialDefinition) {\n pbrMaterial = {\n ...materialDefinition,\n pbrMetallicRoughness: materialDefinition.pbrMetallicRoughness\n ? {...materialDefinition.pbrMetallicRoughness}\n : {baseColorFactor: [255, 255, 255, 255]}\n };\n } else {\n pbrMaterial = {\n pbrMetallicRoughness: {}\n };\n if (texture) {\n pbrMaterial.pbrMetallicRoughness.baseColorTexture = {texCoord: 0};\n } else {\n pbrMaterial.pbrMetallicRoughness.baseColorFactor = [255, 255, 255, 255];\n }\n }\n\n // Set default 0.25 per spec https://github.com/Esri/i3s-spec/blob/master/docs/1.7/materialDefinitions.cmn.md\n pbrMaterial.alphaCutoff = pbrMaterial.alphaCutoff || 0.25;\n\n if (pbrMaterial.alphaMode) {\n // I3S contain alphaMode in lowerCase\n pbrMaterial.alphaMode = pbrMaterial.alphaMode.toUpperCase();\n }\n\n // Convert colors from [255,255,255,255] to [1,1,1,1]\n if (pbrMaterial.emissiveFactor) {\n pbrMaterial.emissiveFactor = convertColorFormat(pbrMaterial.emissiveFactor);\n }\n if (pbrMaterial.pbrMetallicRoughness && pbrMaterial.pbrMetallicRoughness.baseColorFactor) {\n pbrMaterial.pbrMetallicRoughness.baseColorFactor = convertColorFormat(\n pbrMaterial.pbrMetallicRoughness.baseColorFactor\n );\n }\n\n if (texture) {\n setMaterialTexture(pbrMaterial, texture);\n }\n\n return pbrMaterial;\n}\n\n/**\n * Convert color from [255,255,255,255] to [1,1,1,1]\n * @param colorFactor - color array\n * @returns - new color array\n */\nfunction convertColorFormat(colorFactor: number[]): number[] {\n const normalizedColor = [...colorFactor];\n for (let index = 0; index < colorFactor.length; index++) {\n normalizedColor[index] = colorFactor[index] / 255;\n }\n return normalizedColor;\n}\n\n/**\n * Set texture in PBR material\n * @param {object} material - i3s material definition\n * @param image - texture image\n * @returns\n */\nfunction setMaterialTexture(material, image: TileContentTexture): void {\n const texture = {source: {image}};\n // I3SLoader now support loading only one texture. This elseif sequence will assign this texture to one of\n // properties defined in materialDefinition\n if (material.pbrMetallicRoughness && material.pbrMetallicRoughness.baseColorTexture) {\n material.pbrMetallicRoughness.baseColorTexture = {\n ...material.pbrMetallicRoughness.baseColorTexture,\n texture\n };\n } else if (material.emissiveTexture) {\n material.emissiveTexture = {...material.emissiveTexture, texture};\n } else if (\n material.pbrMetallicRoughness &&\n material.pbrMetallicRoughness.metallicRoughnessTexture\n ) {\n material.pbrMetallicRoughness.metallicRoughnessTexture = {\n ...material.pbrMetallicRoughness.metallicRoughnessTexture,\n texture\n };\n } else if (material.normalTexture) {\n material.normalTexture = {...material.normalTexture, texture};\n } else if (material.occlusionTexture) {\n material.occlusionTexture = {...material.occlusionTexture, texture};\n }\n}\n\n/**\n * Flatten feature ids using face ranges\n * @param normalizedFeatureAttributes\n * @returns\n */\nfunction flattenFeatureIdsByFaceRanges(normalizedFeatureAttributes: I3SMeshAttributes): void {\n const {id, faceRange} = normalizedFeatureAttributes;\n\n if (!id || !faceRange) {\n return;\n }\n\n const featureIds = id.value;\n const range = faceRange.value;\n const featureIdsLength = range[range.length - 1] + 1;\n const orderedFeatureIndices = new Uint32Array(featureIdsLength * 3);\n\n let featureIndex = 0;\n let startIndex = 0;\n\n for (let index = 1; index < range.length; index += 2) {\n const fillId = Number(featureIds[featureIndex]);\n const endValue = range[index];\n const prevValue = range[index - 1];\n const trianglesCount = endValue - prevValue + 1;\n const endIndex = startIndex + trianglesCount * 3;\n\n orderedFeatureIndices.fill(fillId, startIndex, endIndex);\n\n featureIndex++;\n startIndex = endIndex;\n }\n\n normalizedFeatureAttributes.id.value = orderedFeatureIndices;\n}\n\n/**\n * Flatten feature ids using featureIndices\n * @param attributes\n * @param featureIds\n * @returns\n */\nfunction flattenFeatureIdsByFeatureIndices(\n attributes: I3SMeshAttributes,\n featureIds: Int32Array\n): void {\n const featureIndices = attributes.id.value;\n const result = new Float32Array(featureIndices.length);\n\n for (let index = 0; index < featureIndices.length; index++) {\n result[index] = featureIds[featureIndices[index]];\n }\n\n attributes.id.value = result;\n}\n\n/**\n * Flatten feature ids using featureIndices\n * @param featureIndex\n * @returns\n */\nfunction getFeatureIdsFromFeatureIndexMetadata(\n featureIndex: I3SMeshAttribute\n): Int32Array | undefined {\n return featureIndex?.metadata?.['i3s-feature-ids']?.intArray;\n}\n"],"file":"parse-i3s-tile-content.js"}
@@ -1,7 +1,7 @@
1
1
  import { load } from '@loaders.gl/core';
2
2
  import { parseI3STileAttribute } from './lib/parsers/parse-i3s-attribute';
3
3
  import { getUrlWithToken } from './lib/utils/url-utils';
4
- const VERSION = typeof "3.2.0-alpha.2" !== 'undefined' ? "3.2.0-alpha.2" : 'latest';
4
+ const VERSION = typeof "3.2.0-alpha.3" !== 'undefined' ? "3.2.0-alpha.3" : 'latest';
5
5
  const EMPTY_VALUE = '';
6
6
  const REJECTED_STATUS = 'rejected';
7
7
  export const I3SAttributeLoader = {
@@ -1,5 +1,5 @@
1
1
  import { parseBuildingSceneLayer } from './lib/parsers/parse-i3s-building-scene-layer';
2
- const VERSION = typeof "3.2.0-alpha.2" !== 'undefined' ? "3.2.0-alpha.2" : 'beta';
2
+ const VERSION = typeof "3.2.0-alpha.3" !== 'undefined' ? "3.2.0-alpha.3" : 'beta';
3
3
  export const I3SBuildingSceneLayerLoader = {
4
4
  name: 'I3S Building Scene Layer',
5
5
  id: 'i3s-building-scene-layer',
@@ -1,5 +1,5 @@
1
1
  import { parseI3STileContent } from './lib/parsers/parse-i3s-tile-content';
2
- const VERSION = typeof "3.2.0-alpha.2" !== 'undefined' ? "3.2.0-alpha.2" : 'beta';
2
+ const VERSION = typeof "3.2.0-alpha.3" !== 'undefined' ? "3.2.0-alpha.3" : 'beta';
3
3
  export const I3SContentLoader = {
4
4
  name: 'I3S Content (Indexed Scene Layers)',
5
5
  id: 'i3s-content',
@@ -2,7 +2,7 @@ import { load, parse } from '@loaders.gl/core';
2
2
  import { I3SContentLoader } from './i3s-content-loader';
3
3
  import { normalizeTileData, normalizeTilesetData } from './lib/parsers/parse-i3s';
4
4
  import { COORDINATE_SYSTEM } from './lib/parsers/constants';
5
- const VERSION = typeof "3.2.0-alpha.2" !== 'undefined' ? "3.2.0-alpha.2" : 'latest';
5
+ const VERSION = typeof "3.2.0-alpha.3" !== 'undefined' ? "3.2.0-alpha.3" : 'latest';
6
6
  const TILESET_REGEX = /layers\/[0-9]+$/;
7
7
  const TILE_HEADER_REGEX = /nodes\/([0-9-]+|root)$/;
8
8
  const SLPK_HEX = '504b0304';
@@ -1,4 +1,4 @@
1
- const VERSION = typeof "3.2.0-alpha.2" !== 'undefined' ? "3.2.0-alpha.2" : 'latest';
1
+ const VERSION = typeof "3.2.0-alpha.3" !== 'undefined' ? "3.2.0-alpha.3" : 'latest';
2
2
 
3
3
  async function parseNodePage(data) {
4
4
  return JSON.parse(new TextDecoder().decode(data));
@@ -89,6 +89,7 @@ async function parseI3SNodeGeometry(arrayBuffer, tile, tileset, options) {
89
89
  }
90
90
 
91
91
  const content = tile.content;
92
+ const contentByteLength = arrayBuffer.byteLength;
92
93
  let attributes;
93
94
  let vertexCount;
94
95
  let byteOffset = 0;
@@ -178,7 +179,7 @@ async function parseI3SNodeGeometry(arrayBuffer, tile, tileset, options) {
178
179
  }
179
180
 
180
181
  content.vertexCount = vertexCount;
181
- content.byteLength = arrayBuffer.byteLength;
182
+ content.byteLength = contentByteLength;
182
183
  return tile;
183
184
  }
184
185
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/lib/parsers/parse-i3s-tile-content.ts"],"names":["load","parse","Vector3","Matrix4","Ellipsoid","ImageLoader","DracoLoader","BasisLoader","CompressedTextureLoader","HeaderAttributeProperty","getUrlWithToken","GL_TYPE_MAP","getConstructorForDataFormat","sizeOf","COORDINATE_SYSTEM","scratchVector","getLoaderForTextureFormat","textureFormat","I3S_ATTRIBUTE_TYPE","parseI3STileContent","arrayBuffer","tile","tileset","options","context","content","featureIds","attributes","textureUrl","url","i3s","token","loader","response","fetch","decodeTextures","textureLoaderOptions","image","type","texture","e","compressed","mipmaps","width","height","data","material","makePbrMaterial","materialDefinition","parseI3SNodeGeometry","vertexCount","byteOffset","featureCount","indices","isDracoGeometry","decompressedGeometry","draco","attributeNameEntry","header","value","POSITION","NORMAL","COLOR_0","TEXCOORD_0","featureIndex","uvRegion","position","normal","color","uv0","id","updateAttributesMetadata","getFeatureIdsFromFeatureIndexMetadata","flattenFeatureIdsByFeatureIndices","vertexAttributes","ordering","attributesOrder","featureAttributes","featureAttributeOrder","store","defaultGeometrySchema","headers","parseHeaders","normalizedVertexAttributes","offset","normalizeAttributes","normalizedFeatureAttributes","flattenFeatureIdsByFaceRanges","concatAttributes","coordinateSystem","METER_OFFSETS","enuMatrix","parsePositions","modelMatrix","invert","getModelMatrix","LNGLAT_OFFSETS","positions","normals","colors","normalizeAttribute","texCoords","uvRegions","attributeIndex","byteLength","key","loaderData","dracoAttribute","name","metadata","attribute","normalized","property","TypedArrayTypeHeader","attributeCount","valueType","valuesPerElement","buffer","slice","parseUint64Values","TypedArrayType","size","elementsCount","attributeSize","values","dataView","DataView","index","left","getUint32","right","push","Uint32Array","mbs","cartographicOrigin","cartesianOrigin","WGS84","cartographicToCartesian","eastNorthUpToFixedFrame","offsetsToCartesians","vertices","Float64Array","length","scaleX","double","scaleY","i","x","y","z","subarray","pbrMaterial","pbrMetallicRoughness","baseColorFactor","baseColorTexture","texCoord","alphaCutoff","alphaMode","toUpperCase","emissiveFactor","convertColorFormat","setMaterialTexture","colorFactor","normalizedColor","source","emissiveTexture","metallicRoughnessTexture","normalTexture","occlusionTexture","faceRange","range","featureIdsLength","orderedFeatureIndices","startIndex","fillId","Number","endValue","prevValue","trianglesCount","endIndex","fill","featureIndices","result","Float32Array","intArray"],"mappings":"AACA,SAAQA,IAAR,EAAcC,KAAd,QAA0B,kBAA1B;AACA,SAAQC,OAAR,EAAiBC,OAAjB,QAA+B,eAA/B;AACA,SAAQC,SAAR,QAAwB,qBAAxB;AAEA,SAAQC,WAAR,QAA0B,oBAA1B;AACA,SAAQC,WAAR,QAAqC,mBAArC;AACA,SAAQC,WAAR,EAAqBC,uBAArB,QAAmD,sBAAnD;AAEA,SAQEC,uBARF,QAUO,aAVP;AAWA,SAAQC,eAAR,QAA8B,oBAA9B;AAEA,SAAQC,WAAR,EAAqBC,2BAArB,EAAkDC,MAAlD,EAA0DC,iBAA1D,QAAkF,aAAlF;AAEA,MAAMC,aAAa,GAAG,IAAIb,OAAJ,CAAY,CAAC,CAAD,EAAI,CAAJ,EAAO,CAAP,CAAZ,CAAtB;;AAEA,SAASc,yBAAT,CAAmCC,aAAnC,EAAgG;AAC9F,UAAQA,aAAR;AACE,SAAK,UAAL;AACA,SAAK,KAAL;AACE,aAAOT,uBAAP;;AACF,SAAK,MAAL;AACE,aAAOD,WAAP;;AACF,SAAK,KAAL;AACA,SAAK,KAAL;AACA;AACE,aAAOF,WAAP;AATJ;AAWD;;AAED,MAAMa,kBAAkB,GAAG,oBAA3B;AAEA,OAAO,eAAeC,mBAAf,CACLC,WADK,EAELC,IAFK,EAGLC,OAHK,EAILC,OAJK,EAKLC,OALK,EAML;AACAH,EAAAA,IAAI,CAACI,OAAL,GAAeJ,IAAI,CAACI,OAAL,IAAgB,EAA/B;AACAJ,EAAAA,IAAI,CAACI,OAAL,CAAaC,UAAb,GAA0BL,IAAI,CAACI,OAAL,CAAaC,UAAb,IAA2B,IAArD;AAEAL,EAAAA,IAAI,CAACI,OAAL,CAAaE,UAAb,GAA0B,EAA1B;;AAEA,MAAIN,IAAI,CAACO,UAAT,EAAqB;AAAA;;AACnB,UAAMC,GAAG,GAAGnB,eAAe,CAACW,IAAI,CAACO,UAAN,EAAkBL,OAAlB,aAAkBA,OAAlB,uCAAkBA,OAAO,CAAEO,GAA3B,iDAAkB,aAAcC,KAAhC,CAA3B;AACA,UAAMC,MAAM,GAAGhB,yBAAyB,CAACK,IAAI,CAACJ,aAAN,CAAxC;AACA,UAAMgB,QAAQ,GAAG,MAAMC,KAAK,CAACL,GAAD,CAA5B;AACA,UAAMT,WAAW,GAAG,MAAMa,QAAQ,CAACb,WAAT,EAA1B;;AAEA,QAAIG,OAAJ,aAAIA,OAAJ,eAAIA,OAAO,CAAEO,GAAT,CAAaK,cAAjB,EAAiC;AAC/B,UAAIH,MAAM,KAAK3B,WAAf,EAA4B;AAC1B,cAAMkB,OAAO,GAAG,EAAC,GAAGF,IAAI,CAACe,oBAAT;AAA+BC,UAAAA,KAAK,EAAE;AAACC,YAAAA,IAAI,EAAE;AAAP;AAAtC,SAAhB;;AACA,YAAI;AAIFjB,UAAAA,IAAI,CAACI,OAAL,CAAac,OAAb,GAAuB,MAAMf,OAAO,CAACvB,KAAR,CAAcmB,WAAd,EAA2BG,OAA3B,CAA7B;AACD,SALD,CAKE,OAAOiB,CAAP,EAAU;AAGVnB,UAAAA,IAAI,CAACI,OAAL,CAAac,OAAb,GAAuB,MAAMtC,KAAK,CAACmB,WAAD,EAAcY,MAAd,EAAsBT,OAAtB,CAAlC;AACD;AACF,OAZD,MAYO,IAAIS,MAAM,KAAKxB,uBAAX,IAAsCwB,MAAM,KAAKzB,WAArD,EAAkE;AACvE,YAAIgC,OAAO,GAAG,MAAMvC,IAAI,CAACoB,WAAD,EAAcY,MAAd,EAAsBX,IAAI,CAACe,oBAA3B,CAAxB;;AACA,YAAIJ,MAAM,KAAKzB,WAAf,EAA4B;AAC1BgC,UAAAA,OAAO,GAAGA,OAAO,CAAC,CAAD,CAAjB;AACD;;AACDlB,QAAAA,IAAI,CAACI,OAAL,CAAac,OAAb,GAAuB;AACrBE,UAAAA,UAAU,EAAE,IADS;AAErBC,UAAAA,OAAO,EAAE,KAFY;AAGrBC,UAAAA,KAAK,EAAEJ,OAAO,CAAC,CAAD,CAAP,CAAWI,KAHG;AAIrBC,UAAAA,MAAM,EAAEL,OAAO,CAAC,CAAD,CAAP,CAAWK,MAJE;AAKrBC,UAAAA,IAAI,EAAEN;AALe,SAAvB;AAOD;AACF,KA1BD,MA0BO;AACLlB,MAAAA,IAAI,CAACI,OAAL,CAAac,OAAb,GAAuBnB,WAAvB;AACD;AACF;;AAEDC,EAAAA,IAAI,CAACI,OAAL,CAAaqB,QAAb,GAAwBC,eAAe,CAAC1B,IAAI,CAAC2B,kBAAN,EAA0B3B,IAAI,CAACI,OAAL,CAAac,OAAvC,CAAvC;;AACA,MAAIlB,IAAI,CAACI,OAAL,CAAaqB,QAAjB,EAA2B;AACzBzB,IAAAA,IAAI,CAACI,OAAL,CAAac,OAAb,GAAuB,IAAvB;AACD;;AAED,SAAO,MAAMU,oBAAoB,CAAC7B,WAAD,EAAcC,IAAd,EAAoBC,OAApB,EAA6BC,OAA7B,CAAjC;AACD;;AAGD,eAAe0B,oBAAf,CACE7B,WADF,EAEEC,IAFF,EAGEC,OAHF,EAIEC,OAJF,EAKE;AAAA;;AACA,MAAI,CAACF,IAAI,CAACI,OAAV,EAAmB;AACjB,WAAOJ,IAAP;AACD;;AAED,QAAMI,OAAO,GAAGJ,IAAI,CAACI,OAArB;AACA,MAAIE,UAAJ;AACA,MAAIuB,WAAJ;AACA,MAAIC,UAAkB,GAAG,CAAzB;AACA,MAAIC,YAAoB,GAAG,CAA3B;AACA,MAAIC,OAAJ;;AAEA,MAAIhC,IAAI,CAACiC,eAAT,EAA0B;AAAA;;AACxB,UAAMC,oBAA+B,GAAG,MAAMtD,KAAK,CAACmB,WAAD,EAAcd,WAAd,EAA2B;AAC5EkD,MAAAA,KAAK,EAAE;AACLC,QAAAA,kBAAkB,EAAEvC;AADf;AADqE,KAA3B,CAAnD;AAMAgC,IAAAA,WAAW,GAAGK,oBAAoB,CAACG,MAArB,CAA4BR,WAA1C;AACAG,IAAAA,OAAO,4BAAGE,oBAAoB,CAACF,OAAxB,0DAAG,sBAA8BM,KAAxC;AACA,UAAM;AACJC,MAAAA,QADI;AAEJC,MAAAA,MAFI;AAGJC,MAAAA,OAHI;AAIJC,MAAAA,UAJI;AAKJ,OAAC,eAAD,GAAmBC,YALf;AAMJ,OAAC,WAAD,GAAeC;AANX,QAOFV,oBAAoB,CAAC5B,UAPzB;AASAA,IAAAA,UAAU,GAAG;AACXuC,MAAAA,QAAQ,EAAEN,QADC;AAEXO,MAAAA,MAAM,EAAEN,MAFG;AAGXO,MAAAA,KAAK,EAAEN,OAHI;AAIXO,MAAAA,GAAG,EAAEN,UAJM;AAKXE,MAAAA,QALW;AAMXK,MAAAA,EAAE,EAAEN;AANO,KAAb;AASAO,IAAAA,wBAAwB,CAAC5C,UAAD,EAAa4B,oBAAb,CAAxB;AAEA,UAAM7B,UAAU,GAAG8C,qCAAqC,CAACR,YAAD,CAAxD;;AAEA,QAAItC,UAAJ,EAAgB;AACd+C,MAAAA,iCAAiC,CAAC9C,UAAD,EAAaD,UAAb,CAAjC;AACD;AACF,GAlCD,MAkCO;AACL,UAAM;AACJgD,MAAAA,gBADI;AAEJC,MAAAA,QAAQ,EAAEC,eAFN;AAGJC,MAAAA,iBAHI;AAIJC,MAAAA;AAJI,QAKFxD,OAAO,CAACyD,KAAR,CAAcC,qBALlB;AAOA,UAAMC,OAAO,GAAGC,YAAY,CAAC5D,OAAD,EAAUF,WAAV,CAA5B;AACA+B,IAAAA,UAAU,GAAG8B,OAAO,CAAC9B,UAArB;AACAD,IAAAA,WAAW,GAAG+B,OAAO,CAAC/B,WAAtB;AACAE,IAAAA,YAAY,GAAG6B,OAAO,CAAC7B,YAAvB;AAEA,UAAM;AAACzB,MAAAA,UAAU,EAAEwD,0BAAb;AAAyChC,MAAAA,UAAU,EAAEiC;AAArD,QAA+DC,mBAAmB,CACtFjE,WADsF,EAEtF+B,UAFsF,EAGtFuB,gBAHsF,EAItFxB,WAJsF,EAKtF0B,eALsF,CAAxF;AASA,UAAM;AAACjD,MAAAA,UAAU,EAAE2D;AAAb,QAA4CD,mBAAmB,CACnEjE,WADmE,EAEnEgE,MAFmE,EAGnEP,iBAHmE,EAInEzB,YAJmE,EAKnE0B,qBALmE,CAArE;AAQAS,IAAAA,6BAA6B,CAACD,2BAAD,CAA7B;AACA3D,IAAAA,UAAU,GAAG6D,gBAAgB,CAACL,0BAAD,EAA6BG,2BAA7B,CAA7B;AACD;;AAED,MACE,EAAC/D,OAAD,aAACA,OAAD,gCAACA,OAAO,CAAEO,GAAV,0CAAC,cAAc2D,gBAAf,KACAlE,OAAO,CAACO,GAAR,CAAY2D,gBAAZ,KAAiC3E,iBAAiB,CAAC4E,aAFrD,EAGE;AACA,UAAMC,SAAS,GAAGC,cAAc,CAACjE,UAAU,CAACuC,QAAZ,EAAsB7C,IAAtB,CAAhC;AACAI,IAAAA,OAAO,CAACoE,WAAR,GAAsBF,SAAS,CAACG,MAAV,EAAtB;AACArE,IAAAA,OAAO,CAACgE,gBAAR,GAA2B3E,iBAAiB,CAAC4E,aAA7C;AACD,GAPD,MAOO;AACLjE,IAAAA,OAAO,CAACoE,WAAR,GAAsBE,cAAc,CAACpE,UAAU,CAACuC,QAAZ,CAApC;AACAzC,IAAAA,OAAO,CAACgE,gBAAR,GAA2B3E,iBAAiB,CAACkF,cAA7C;AACD;;AAEDvE,EAAAA,OAAO,CAACE,UAAR,GAAqB;AACnBsE,IAAAA,SAAS,EAAEtE,UAAU,CAACuC,QADH;AAEnBgC,IAAAA,OAAO,EAAEvE,UAAU,CAACwC,MAFD;AAGnBgC,IAAAA,MAAM,EAAEC,kBAAkB,CAACzE,UAAU,CAACyC,KAAZ,CAHP;AAInBiC,IAAAA,SAAS,EAAE1E,UAAU,CAAC0C,GAJH;AAKnBiC,IAAAA,SAAS,EAAEF,kBAAkB,CAACzE,UAAU,CAACsC,QAAZ;AALV,GAArB;AAOAxC,EAAAA,OAAO,CAAC4B,OAAR,GAAkBA,OAAO,IAAI,IAA7B;;AAEA,MAAI1B,UAAU,CAAC2C,EAAX,IAAiB3C,UAAU,CAAC2C,EAAX,CAAcX,KAAnC,EAA0C;AACxCtC,IAAAA,IAAI,CAACI,OAAL,CAAaC,UAAb,GAA0BC,UAAU,CAAC2C,EAAX,CAAcX,KAAxC;AACD;;AAGD,OAAK,MAAM4C,cAAX,IAA6B9E,OAAO,CAACE,UAArC,EAAiD;AAC/C,QAAI,CAACF,OAAO,CAACE,UAAR,CAAmB4E,cAAnB,CAAL,EAAyC;AACvC,aAAO9E,OAAO,CAACE,UAAR,CAAmB4E,cAAnB,CAAP;AACD;AACF;;AAED9E,EAAAA,OAAO,CAACyB,WAAR,GAAsBA,WAAtB;AACAzB,EAAAA,OAAO,CAAC+E,UAAR,GAAqBpF,WAAW,CAACoF,UAAjC;AAEA,SAAOnF,IAAP;AACD;;AAOD,SAASkD,wBAAT,CACE5C,UADF,EAEE4B,oBAFF,EAGQ;AACN,OAAK,MAAMkD,GAAX,IAAkBlD,oBAAoB,CAACmD,UAArB,CAAgC/E,UAAlD,EAA8D;AAC5D,UAAMgF,cAAc,GAAGpD,oBAAoB,CAACmD,UAArB,CAAgC/E,UAAhC,CAA2C8E,GAA3C,CAAvB;;AAEA,YAAQE,cAAc,CAACC,IAAvB;AACE,WAAK,UAAL;AACEjF,QAAAA,UAAU,CAACuC,QAAX,CAAoB2C,QAApB,GAA+BF,cAAc,CAACE,QAA9C;AACA;;AACF,WAAK,eAAL;AACElF,QAAAA,UAAU,CAAC2C,EAAX,CAAcuC,QAAd,GAAyBF,cAAc,CAACE,QAAxC;AACA;;AACF;AACE;AARJ;AAUD;AACF;;AASD,SAASrB,gBAAT,CACEL,0BADF,EAEEG,2BAFF,EAGqB;AACnB,SAAO,EAAC,GAAGH,0BAAJ;AAAgC,OAAGG;AAAnC,GAAP;AACD;;AAOD,SAASc,kBAAT,CAA4BU,SAA5B,EAA2E;AACzE,MAAI,CAACA,SAAL,EAAgB;AACd,WAAOA,SAAP;AACD;;AACDA,EAAAA,SAAS,CAACC,UAAV,GAAuB,IAAvB;AACA,SAAOD,SAAP;AACD;;AAED,SAAS5B,YAAT,CAAsB5D,OAAtB,EAAiDF,WAAjD,EAA2E;AACzE,MAAI+B,UAAU,GAAG,CAAjB;AAEA,MAAID,WAAW,GAAG,CAAlB;AACA,MAAIE,YAAY,GAAG,CAAnB;;AACA,OAAK,MAAM;AAAC4D,IAAAA,QAAD;AAAW1E,IAAAA;AAAX,GAAX,IAA+BhB,OAAO,CAACyD,KAAR,CAAcC,qBAAd,CAAoCtB,MAAnE,EAA2E;AACzE,UAAMuD,oBAAoB,GAAGrG,2BAA2B,CAAC0B,IAAD,CAAxD;;AACA,YAAQ0E,QAAR;AACE,WAAKvG,uBAAuB,CAACyC,WAA7B;AACEA,QAAAA,WAAW,GAAG,IAAI+D,oBAAJ,CAAyB7F,WAAzB,EAAsC,CAAtC,EAAyC,CAAzC,EAA4C,CAA5C,CAAd;AACA+B,QAAAA,UAAU,IAAItC,MAAM,CAACyB,IAAD,CAApB;AACA;;AACF,WAAK7B,uBAAuB,CAAC2C,YAA7B;AACEA,QAAAA,YAAY,GAAG,IAAI6D,oBAAJ,CAAyB7F,WAAzB,EAAsC,CAAtC,EAAyC,CAAzC,EAA4C,CAA5C,CAAf;AACA+B,QAAAA,UAAU,IAAItC,MAAM,CAACyB,IAAD,CAApB;AACA;;AACF;AACE;AAVJ;AAYD;;AAED,SAAO;AACLY,IAAAA,WADK;AAELE,IAAAA,YAFK;AAGLD,IAAAA;AAHK,GAAP;AAKD;;AAID,SAASkC,mBAAT,CACEjE,WADF,EAEE+B,UAFF,EAGEuB,gBAHF,EAIEwC,cAJF,EAKEtC,eALF,EAME;AACA,QAAMjD,UAA6B,GAAG,EAAtC;;AAGA,OAAK,MAAMmF,SAAX,IAAwBlC,eAAxB,EAAyC;AACvC,QAAIF,gBAAgB,CAACoC,SAAD,CAApB,EAAiC;AAC/B,YAAM;AAACK,QAAAA,SAAD;AAAYC,QAAAA;AAAZ,UACJ1C,gBAAgB,CAACoC,SAAD,CADlB;;AAQA,UACE3D,UAAU,GAAG+D,cAAc,GAAGE,gBAAjB,GAAoCvG,MAAM,CAACsG,SAAD,CAAvD,IACA/F,WAAW,CAACoF,UAFd,EAGE;AACA,cAAMa,MAAM,GAAGjG,WAAW,CAACkG,KAAZ,CAAkBnE,UAAlB,CAAf;AACA,YAAIQ,KAAJ;;AAEA,YAAIwD,SAAS,KAAK,QAAlB,EAA4B;AAC1BxD,UAAAA,KAAK,GAAG4D,iBAAiB,CAACF,MAAD,EAASH,cAAc,GAAGE,gBAA1B,EAA4CvG,MAAM,CAACsG,SAAD,CAAlD,CAAzB;AACD,SAFD,MAEO;AACL,gBAAMK,cAAc,GAAG5G,2BAA2B,CAACuG,SAAD,CAAlD;AACAxD,UAAAA,KAAK,GAAG,IAAI6D,cAAJ,CAAmBH,MAAnB,EAA2B,CAA3B,EAA8BH,cAAc,GAAGE,gBAA/C,CAAR;AACD;;AAEDzF,QAAAA,UAAU,CAACmF,SAAD,CAAV,GAAwB;AACtBnD,UAAAA,KADsB;AAEtBrB,UAAAA,IAAI,EAAE3B,WAAW,CAACwG,SAAD,CAFK;AAGtBM,UAAAA,IAAI,EAAEL;AAHgB,SAAxB;;AAMA,gBAAQN,SAAR;AACE,eAAK,OAAL;AACEnF,YAAAA,UAAU,CAACyC,KAAX,CAAiB2C,UAAjB,GAA8B,IAA9B;AACA;;AACF,eAAK,UAAL;AACA,eAAK,QAAL;AACA,eAAK,QAAL;AACA;AAPF;;AAUA5D,QAAAA,UAAU,GAAGA,UAAU,GAAG+D,cAAc,GAAGE,gBAAjB,GAAoCvG,MAAM,CAACsG,SAAD,CAApE;AACD,OA/BD,MA+BO,IAAIL,SAAS,KAAK,KAAlB,EAAyB;AAC9B;AACD;AACF;AACF;;AAED,SAAO;AAACnF,IAAAA,UAAD;AAAawB,IAAAA;AAAb,GAAP;AACD;;AASD,SAASoE,iBAAT,CACEF,MADF,EAEEK,aAFF,EAGEC,aAHF,EAIe;AACb,QAAMC,MAAgB,GAAG,EAAzB;AACA,QAAMC,QAAQ,GAAG,IAAIC,QAAJ,CAAaT,MAAb,CAAjB;AACA,MAAIjC,MAAM,GAAG,CAAb;;AAEA,OAAK,IAAI2C,KAAK,GAAG,CAAjB,EAAoBA,KAAK,GAAGL,aAA5B,EAA2CK,KAAK,EAAhD,EAAoD;AAElD,UAAMC,IAAI,GAAGH,QAAQ,CAACI,SAAT,CAAmB7C,MAAnB,EAA2B,IAA3B,CAAb;AACA,UAAM8C,KAAK,GAAGL,QAAQ,CAACI,SAAT,CAAmB7C,MAAM,GAAG,CAA5B,EAA+B,IAA/B,CAAd;AAEA,UAAMzB,KAAK,GAAGqE,IAAI,GAAG,KAAK,EAAL,GAAUE,KAA/B;AAEAN,IAAAA,MAAM,CAACO,IAAP,CAAYxE,KAAZ;AACAyB,IAAAA,MAAM,IAAIuC,aAAV;AACD;;AAED,SAAO,IAAIS,WAAJ,CAAgBR,MAAhB,CAAP;AACD;;AAED,SAAShC,cAAT,CAAwBkB,SAAxB,EAAqDzF,IAArD,EAAmF;AACjF,QAAMgH,GAAG,GAAGhH,IAAI,CAACgH,GAAjB;AACA,QAAM1E,KAAK,GAAGmD,SAAS,CAACnD,KAAxB;AACA,QAAMkD,QAAQ,GAAGC,SAAS,CAACD,QAA3B;AACA,QAAMlB,SAAS,GAAG,IAAIxF,OAAJ,EAAlB;AACA,QAAMmI,kBAAkB,GAAG,IAAIpI,OAAJ,CAAYmI,GAAG,CAAC,CAAD,CAAf,EAAoBA,GAAG,CAAC,CAAD,CAAvB,EAA4BA,GAAG,CAAC,CAAD,CAA/B,CAA3B;AACA,QAAME,eAAe,GAAG,IAAIrI,OAAJ,EAAxB;AACAE,EAAAA,SAAS,CAACoI,KAAV,CAAgBC,uBAAhB,CAAwCH,kBAAxC,EAA4DC,eAA5D;AACAnI,EAAAA,SAAS,CAACoI,KAAV,CAAgBE,uBAAhB,CAAwCH,eAAxC,EAAyD5C,SAAzD;AACAmB,EAAAA,SAAS,CAACnD,KAAV,GAAkBgF,mBAAmB,CAAChF,KAAD,EAAQkD,QAAR,EAAkByB,kBAAlB,CAArC;AAEA,SAAO3C,SAAP;AACD;;AAUD,SAASgD,mBAAT,CACEC,QADF,EAEE/B,QAAa,GAAG,EAFlB,EAGEyB,kBAHF,EAIgB;AACd,QAAMrC,SAAS,GAAG,IAAI4C,YAAJ,CAAiBD,QAAQ,CAACE,MAA1B,CAAlB;AACA,QAAMC,MAAM,GAAIlC,QAAQ,CAAC,aAAD,CAAR,IAA2BA,QAAQ,CAAC,aAAD,CAAR,CAAwBmC,MAApD,IAA+D,CAA9E;AACA,QAAMC,MAAM,GAAIpC,QAAQ,CAAC,aAAD,CAAR,IAA2BA,QAAQ,CAAC,aAAD,CAAR,CAAwBmC,MAApD,IAA+D,CAA9E;;AACA,OAAK,IAAIE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGjD,SAAS,CAAC6C,MAA9B,EAAsCI,CAAC,IAAI,CAA3C,EAA8C;AAC5CjD,IAAAA,SAAS,CAACiD,CAAD,CAAT,GAAeN,QAAQ,CAACM,CAAD,CAAR,GAAcH,MAAd,GAAuBT,kBAAkB,CAACa,CAAzD;AACAlD,IAAAA,SAAS,CAACiD,CAAC,GAAG,CAAL,CAAT,GAAmBN,QAAQ,CAACM,CAAC,GAAG,CAAL,CAAR,GAAkBD,MAAlB,GAA2BX,kBAAkB,CAACc,CAAjE;AACAnD,IAAAA,SAAS,CAACiD,CAAC,GAAG,CAAL,CAAT,GAAmBN,QAAQ,CAACM,CAAC,GAAG,CAAL,CAAR,GAAkBZ,kBAAkB,CAACe,CAAxD;AACD;;AAED,OAAK,IAAIH,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGjD,SAAS,CAAC6C,MAA9B,EAAsCI,CAAC,IAAI,CAA3C,EAA8C;AAE5C9I,IAAAA,SAAS,CAACoI,KAAV,CAAgBC,uBAAhB,CAAwCxC,SAAS,CAACqD,QAAV,CAAmBJ,CAAnB,EAAsBA,CAAC,GAAG,CAA1B,CAAxC,EAAsEnI,aAAtE;AACAkF,IAAAA,SAAS,CAACiD,CAAD,CAAT,GAAenI,aAAa,CAACoI,CAA7B;AACAlD,IAAAA,SAAS,CAACiD,CAAC,GAAG,CAAL,CAAT,GAAmBnI,aAAa,CAACqI,CAAjC;AACAnD,IAAAA,SAAS,CAACiD,CAAC,GAAG,CAAL,CAAT,GAAmBnI,aAAa,CAACsI,CAAjC;AACD;;AAED,SAAOpD,SAAP;AACD;;AAOD,SAASF,cAAT,CAAwBE,SAAxB,EAA8D;AAAA;;AAC5D,QAAMY,QAAQ,GAAGZ,SAAS,CAACY,QAA3B;AACA,QAAMkC,MAAc,GAAG,CAAAlC,QAAQ,SAAR,IAAAA,QAAQ,WAAR,oCAAAA,QAAQ,CAAG,aAAH,CAAR,8EAA2BmC,MAA3B,KAAqC,CAA5D;AACA,QAAMC,MAAc,GAAG,CAAApC,QAAQ,SAAR,IAAAA,QAAQ,WAAR,oCAAAA,QAAQ,CAAG,aAAH,CAAR,8EAA2BmC,MAA3B,KAAqC,CAA5D;AACA,QAAMnD,WAAW,GAAG,IAAI1F,OAAJ,EAApB;AACA0F,EAAAA,WAAW,CAAC,CAAD,CAAX,GAAiBkD,MAAjB;AACAlD,EAAAA,WAAW,CAAC,CAAD,CAAX,GAAiBoD,MAAjB;AACA,SAAOpD,WAAP;AACD;;AASD,SAAS9C,eAAT,CAAyBC,kBAAzB,EAAqET,OAArE,EAAmG;AACjG,MAAIgH,WAAJ;;AACA,MAAIvG,kBAAJ,EAAwB;AACtBuG,IAAAA,WAAW,GAAG,EACZ,GAAGvG,kBADS;AAEZwG,MAAAA,oBAAoB,EAAExG,kBAAkB,CAACwG,oBAAnB,GAClB,EAAC,GAAGxG,kBAAkB,CAACwG;AAAvB,OADkB,GAElB;AAACC,QAAAA,eAAe,EAAE,CAAC,GAAD,EAAM,GAAN,EAAW,GAAX,EAAgB,GAAhB;AAAlB;AAJQ,KAAd;AAMD,GAPD,MAOO;AACLF,IAAAA,WAAW,GAAG;AACZC,MAAAA,oBAAoB,EAAE;AADV,KAAd;;AAGA,QAAIjH,OAAJ,EAAa;AACXgH,MAAAA,WAAW,CAACC,oBAAZ,CAAiCE,gBAAjC,GAAoD;AAACC,QAAAA,QAAQ,EAAE;AAAX,OAApD;AACD,KAFD,MAEO;AACLJ,MAAAA,WAAW,CAACC,oBAAZ,CAAiCC,eAAjC,GAAmD,CAAC,GAAD,EAAM,GAAN,EAAW,GAAX,EAAgB,GAAhB,CAAnD;AACD;AACF;;AAGDF,EAAAA,WAAW,CAACK,WAAZ,GAA0BL,WAAW,CAACK,WAAZ,IAA2B,IAArD;;AAEA,MAAIL,WAAW,CAACM,SAAhB,EAA2B;AAEzBN,IAAAA,WAAW,CAACM,SAAZ,GAAwBN,WAAW,CAACM,SAAZ,CAAsBC,WAAtB,EAAxB;AACD;;AAGD,MAAIP,WAAW,CAACQ,cAAhB,EAAgC;AAC9BR,IAAAA,WAAW,CAACQ,cAAZ,GAA6BC,kBAAkB,CAACT,WAAW,CAACQ,cAAb,CAA/C;AACD;;AACD,MAAIR,WAAW,CAACC,oBAAZ,IAAoCD,WAAW,CAACC,oBAAZ,CAAiCC,eAAzE,EAA0F;AACxFF,IAAAA,WAAW,CAACC,oBAAZ,CAAiCC,eAAjC,GAAmDO,kBAAkB,CACnET,WAAW,CAACC,oBAAZ,CAAiCC,eADkC,CAArE;AAGD;;AAED,MAAIlH,OAAJ,EAAa;AACX0H,IAAAA,kBAAkB,CAACV,WAAD,EAAchH,OAAd,CAAlB;AACD;;AAED,SAAOgH,WAAP;AACD;;AAOD,SAASS,kBAAT,CAA4BE,WAA5B,EAA6D;AAC3D,QAAMC,eAAe,GAAG,CAAC,GAAGD,WAAJ,CAAxB;;AACA,OAAK,IAAInC,KAAK,GAAG,CAAjB,EAAoBA,KAAK,GAAGmC,WAAW,CAACpB,MAAxC,EAAgDf,KAAK,EAArD,EAAyD;AACvDoC,IAAAA,eAAe,CAACpC,KAAD,CAAf,GAAyBmC,WAAW,CAACnC,KAAD,CAAX,GAAqB,GAA9C;AACD;;AACD,SAAOoC,eAAP;AACD;;AAQD,SAASF,kBAAT,CAA4BnH,QAA5B,EAAsCT,KAAtC,EAAuE;AACrE,QAAME,OAAO,GAAG;AAAC6H,IAAAA,MAAM,EAAE;AAAC/H,MAAAA;AAAD;AAAT,GAAhB;;AAGA,MAAIS,QAAQ,CAAC0G,oBAAT,IAAiC1G,QAAQ,CAAC0G,oBAAT,CAA8BE,gBAAnE,EAAqF;AACnF5G,IAAAA,QAAQ,CAAC0G,oBAAT,CAA8BE,gBAA9B,GAAiD,EAC/C,GAAG5G,QAAQ,CAAC0G,oBAAT,CAA8BE,gBADc;AAE/CnH,MAAAA;AAF+C,KAAjD;AAID,GALD,MAKO,IAAIO,QAAQ,CAACuH,eAAb,EAA8B;AACnCvH,IAAAA,QAAQ,CAACuH,eAAT,GAA2B,EAAC,GAAGvH,QAAQ,CAACuH,eAAb;AAA8B9H,MAAAA;AAA9B,KAA3B;AACD,GAFM,MAEA,IACLO,QAAQ,CAAC0G,oBAAT,IACA1G,QAAQ,CAAC0G,oBAAT,CAA8Bc,wBAFzB,EAGL;AACAxH,IAAAA,QAAQ,CAAC0G,oBAAT,CAA8Bc,wBAA9B,GAAyD,EACvD,GAAGxH,QAAQ,CAAC0G,oBAAT,CAA8Bc,wBADsB;AAEvD/H,MAAAA;AAFuD,KAAzD;AAID,GARM,MAQA,IAAIO,QAAQ,CAACyH,aAAb,EAA4B;AACjCzH,IAAAA,QAAQ,CAACyH,aAAT,GAAyB,EAAC,GAAGzH,QAAQ,CAACyH,aAAb;AAA4BhI,MAAAA;AAA5B,KAAzB;AACD,GAFM,MAEA,IAAIO,QAAQ,CAAC0H,gBAAb,EAA+B;AACpC1H,IAAAA,QAAQ,CAAC0H,gBAAT,GAA4B,EAAC,GAAG1H,QAAQ,CAAC0H,gBAAb;AAA+BjI,MAAAA;AAA/B,KAA5B;AACD;AACF;;AAOD,SAASgD,6BAAT,CAAuCD,2BAAvC,EAA6F;AAC3F,QAAM;AAAChB,IAAAA,EAAD;AAAKmG,IAAAA;AAAL,MAAkBnF,2BAAxB;;AAEA,MAAI,CAAChB,EAAD,IAAO,CAACmG,SAAZ,EAAuB;AACrB;AACD;;AAED,QAAM/I,UAAU,GAAG4C,EAAE,CAACX,KAAtB;AACA,QAAM+G,KAAK,GAAGD,SAAS,CAAC9G,KAAxB;AACA,QAAMgH,gBAAgB,GAAGD,KAAK,CAACA,KAAK,CAAC5B,MAAN,GAAe,CAAhB,CAAL,GAA0B,CAAnD;AACA,QAAM8B,qBAAqB,GAAG,IAAIxC,WAAJ,CAAgBuC,gBAAgB,GAAG,CAAnC,CAA9B;AAEA,MAAI3G,YAAY,GAAG,CAAnB;AACA,MAAI6G,UAAU,GAAG,CAAjB;;AAEA,OAAK,IAAI9C,KAAK,GAAG,CAAjB,EAAoBA,KAAK,GAAG2C,KAAK,CAAC5B,MAAlC,EAA0Cf,KAAK,IAAI,CAAnD,EAAsD;AACpD,UAAM+C,MAAM,GAAGC,MAAM,CAACrJ,UAAU,CAACsC,YAAD,CAAX,CAArB;AACA,UAAMgH,QAAQ,GAAGN,KAAK,CAAC3C,KAAD,CAAtB;AACA,UAAMkD,SAAS,GAAGP,KAAK,CAAC3C,KAAK,GAAG,CAAT,CAAvB;AACA,UAAMmD,cAAc,GAAGF,QAAQ,GAAGC,SAAX,GAAuB,CAA9C;AACA,UAAME,QAAQ,GAAGN,UAAU,GAAGK,cAAc,GAAG,CAA/C;AAEAN,IAAAA,qBAAqB,CAACQ,IAAtB,CAA2BN,MAA3B,EAAmCD,UAAnC,EAA+CM,QAA/C;AAEAnH,IAAAA,YAAY;AACZ6G,IAAAA,UAAU,GAAGM,QAAb;AACD;;AAED7F,EAAAA,2BAA2B,CAAChB,EAA5B,CAA+BX,KAA/B,GAAuCiH,qBAAvC;AACD;;AAQD,SAASnG,iCAAT,CACE9C,UADF,EAEED,UAFF,EAGQ;AACN,QAAM2J,cAAc,GAAG1J,UAAU,CAAC2C,EAAX,CAAcX,KAArC;AACA,QAAM2H,MAAM,GAAG,IAAIC,YAAJ,CAAiBF,cAAc,CAACvC,MAAhC,CAAf;;AAEA,OAAK,IAAIf,KAAK,GAAG,CAAjB,EAAoBA,KAAK,GAAGsD,cAAc,CAACvC,MAA3C,EAAmDf,KAAK,EAAxD,EAA4D;AAC1DuD,IAAAA,MAAM,CAACvD,KAAD,CAAN,GAAgBrG,UAAU,CAAC2J,cAAc,CAACtD,KAAD,CAAf,CAA1B;AACD;;AAEDpG,EAAAA,UAAU,CAAC2C,EAAX,CAAcX,KAAd,GAAsB2H,MAAtB;AACD;;AAOD,SAAS9G,qCAAT,CACER,YADF,EAE0B;AAAA;;AACxB,SAAOA,YAAP,aAAOA,YAAP,gDAAOA,YAAY,CAAE6C,QAArB,oFAAO,sBAAyB,iBAAzB,CAAP,2DAAO,uBAA6C2E,QAApD;AACD","sourcesContent":["import type {TypedArray} from '@loaders.gl/schema';\nimport {load, parse} from '@loaders.gl/core';\nimport {Vector3, Matrix4} from '@math.gl/core';\nimport {Ellipsoid} from '@math.gl/geospatial';\nimport type {LoaderOptions, LoaderContext} from '@loaders.gl/loader-utils';\nimport {ImageLoader} from '@loaders.gl/images';\nimport {DracoLoader, DracoMesh} from '@loaders.gl/draco';\nimport {BasisLoader, CompressedTextureLoader} from '@loaders.gl/textures';\n\nimport {\n I3STilesetHeader,\n I3STileHeader,\n FeatureAttribute,\n VertexAttribute,\n I3SMeshAttributes,\n I3SMeshAttribute,\n TileContentTexture,\n HeaderAttributeProperty,\n I3SMaterialDefinition\n} from '../../types';\nimport {getUrlWithToken} from '../utils/url-utils';\n\nimport {GL_TYPE_MAP, getConstructorForDataFormat, sizeOf, COORDINATE_SYSTEM} from './constants';\n\nconst scratchVector = new Vector3([0, 0, 0]);\n\nfunction getLoaderForTextureFormat(textureFormat?: 'jpg' | 'png' | 'ktx-etc2' | 'dds' | 'ktx2') {\n switch (textureFormat) {\n case 'ktx-etc2':\n case 'dds':\n return CompressedTextureLoader;\n case 'ktx2':\n return BasisLoader;\n case 'jpg':\n case 'png':\n default:\n return ImageLoader;\n }\n}\n\nconst I3S_ATTRIBUTE_TYPE = 'i3s-attribute-type';\n\nexport async function parseI3STileContent(\n arrayBuffer: ArrayBuffer,\n tile: I3STileHeader,\n tileset: I3STilesetHeader,\n options?: LoaderOptions,\n context?: LoaderContext\n) {\n tile.content = tile.content || {};\n tile.content.featureIds = tile.content.featureIds || null;\n\n tile.content.attributes = {};\n\n if (tile.textureUrl) {\n const url = getUrlWithToken(tile.textureUrl, options?.i3s?.token);\n const loader = getLoaderForTextureFormat(tile.textureFormat);\n const response = await fetch(url);\n const arrayBuffer = await response.arrayBuffer();\n\n if (options?.i3s.decodeTextures) {\n if (loader === ImageLoader) {\n const options = {...tile.textureLoaderOptions, image: {type: 'data'}};\n try {\n // @ts-ignore context must be defined\n // Image constructor is not supported in worker thread.\n // Do parsing image data on the main thread by using context to avoid worker issues.\n tile.content.texture = await context.parse(arrayBuffer, options);\n } catch (e) {\n // context object is different between worker and node.js conversion script.\n // To prevent error we parse data in ordinary way if it is not parsed by using context.\n tile.content.texture = await parse(arrayBuffer, loader, options);\n }\n } else if (loader === CompressedTextureLoader || loader === BasisLoader) {\n let texture = await load(arrayBuffer, loader, tile.textureLoaderOptions);\n if (loader === BasisLoader) {\n texture = texture[0];\n }\n tile.content.texture = {\n compressed: true,\n mipmaps: false,\n width: texture[0].width,\n height: texture[0].height,\n data: texture\n };\n }\n } else {\n tile.content.texture = arrayBuffer;\n }\n }\n\n tile.content.material = makePbrMaterial(tile.materialDefinition, tile.content.texture);\n if (tile.content.material) {\n tile.content.texture = null;\n }\n\n return await parseI3SNodeGeometry(arrayBuffer, tile, tileset, options);\n}\n\n/* eslint-disable max-statements */\nasync function parseI3SNodeGeometry(\n arrayBuffer: ArrayBuffer,\n tile: I3STileHeader,\n tileset: I3STilesetHeader,\n options?: LoaderOptions\n) {\n if (!tile.content) {\n return tile;\n }\n\n const content = tile.content;\n let attributes: I3SMeshAttributes;\n let vertexCount: number;\n let byteOffset: number = 0;\n let featureCount: number = 0;\n let indices: TypedArray | undefined;\n\n if (tile.isDracoGeometry) {\n const decompressedGeometry: DracoMesh = await parse(arrayBuffer, DracoLoader, {\n draco: {\n attributeNameEntry: I3S_ATTRIBUTE_TYPE\n }\n });\n // @ts-expect-error\n vertexCount = decompressedGeometry.header.vertexCount;\n indices = decompressedGeometry.indices?.value;\n const {\n POSITION,\n NORMAL,\n COLOR_0,\n TEXCOORD_0,\n ['feature-index']: featureIndex,\n ['uv-region']: uvRegion\n } = decompressedGeometry.attributes;\n\n attributes = {\n position: POSITION,\n normal: NORMAL,\n color: COLOR_0,\n uv0: TEXCOORD_0,\n uvRegion,\n id: featureIndex\n };\n\n updateAttributesMetadata(attributes, decompressedGeometry);\n\n const featureIds = getFeatureIdsFromFeatureIndexMetadata(featureIndex);\n\n if (featureIds) {\n flattenFeatureIdsByFeatureIndices(attributes, featureIds);\n }\n } else {\n const {\n vertexAttributes,\n ordering: attributesOrder,\n featureAttributes,\n featureAttributeOrder\n } = tileset.store.defaultGeometrySchema;\n // First 8 bytes reserved for header (vertexCount and featureCount)\n const headers = parseHeaders(tileset, arrayBuffer);\n byteOffset = headers.byteOffset;\n vertexCount = headers.vertexCount;\n featureCount = headers.featureCount;\n // Getting vertex attributes such as positions, normals, colors, etc...\n const {attributes: normalizedVertexAttributes, byteOffset: offset} = normalizeAttributes(\n arrayBuffer,\n byteOffset,\n vertexAttributes,\n vertexCount,\n attributesOrder\n );\n\n // Getting feature attributes such as featureIds and faceRange\n const {attributes: normalizedFeatureAttributes} = normalizeAttributes(\n arrayBuffer,\n offset,\n featureAttributes,\n featureCount,\n featureAttributeOrder\n );\n\n flattenFeatureIdsByFaceRanges(normalizedFeatureAttributes);\n attributes = concatAttributes(normalizedVertexAttributes, normalizedFeatureAttributes);\n }\n\n if (\n !options?.i3s?.coordinateSystem ||\n options.i3s.coordinateSystem === COORDINATE_SYSTEM.METER_OFFSETS\n ) {\n const enuMatrix = parsePositions(attributes.position, tile);\n content.modelMatrix = enuMatrix.invert();\n content.coordinateSystem = COORDINATE_SYSTEM.METER_OFFSETS;\n } else {\n content.modelMatrix = getModelMatrix(attributes.position);\n content.coordinateSystem = COORDINATE_SYSTEM.LNGLAT_OFFSETS;\n }\n\n content.attributes = {\n positions: attributes.position,\n normals: attributes.normal,\n colors: normalizeAttribute(attributes.color), // Normalize from UInt8\n texCoords: attributes.uv0,\n uvRegions: normalizeAttribute(attributes.uvRegion) // Normalize from UInt16\n };\n content.indices = indices || null;\n\n if (attributes.id && attributes.id.value) {\n tile.content.featureIds = attributes.id.value;\n }\n\n // Remove undefined attributes\n for (const attributeIndex in content.attributes) {\n if (!content.attributes[attributeIndex]) {\n delete content.attributes[attributeIndex];\n }\n }\n\n content.vertexCount = vertexCount;\n content.byteLength = arrayBuffer.byteLength;\n\n return tile;\n}\n\n/**\n * Update attributes with metadata from decompressed geometry.\n * @param decompressedGeometry\n * @param attributes\n */\nfunction updateAttributesMetadata(\n attributes: I3SMeshAttributes,\n decompressedGeometry: DracoMesh\n): void {\n for (const key in decompressedGeometry.loaderData.attributes) {\n const dracoAttribute = decompressedGeometry.loaderData.attributes[key];\n\n switch (dracoAttribute.name) {\n case 'POSITION':\n attributes.position.metadata = dracoAttribute.metadata;\n break;\n case 'feature-index':\n attributes.id.metadata = dracoAttribute.metadata;\n break;\n default:\n break;\n }\n }\n}\n\n/**\n * Do concatenation of attribute objects.\n * Done as separate fucntion to avoid ts errors.\n * @param normalizedVertexAttributes\n * @param normalizedFeatureAttributes\n * @returns - result of attributes concatenation.\n */\nfunction concatAttributes(\n normalizedVertexAttributes: I3SMeshAttributes,\n normalizedFeatureAttributes: I3SMeshAttributes\n): I3SMeshAttributes {\n return {...normalizedVertexAttributes, ...normalizedFeatureAttributes};\n}\n\n/**\n * Normalize attribute to range [0..1] . Eg. convert colors buffer from [255,255,255,255] to [1,1,1,1]\n * @param attribute - geometry attribute\n * @returns - geometry attribute in right format\n */\nfunction normalizeAttribute(attribute: I3SMeshAttribute): I3SMeshAttribute {\n if (!attribute) {\n return attribute;\n }\n attribute.normalized = true;\n return attribute;\n}\n\nfunction parseHeaders(tileset: I3STilesetHeader, arrayBuffer: ArrayBuffer) {\n let byteOffset = 0;\n // First 8 bytes reserved for header (vertexCount and featurecount)\n let vertexCount = 0;\n let featureCount = 0;\n for (const {property, type} of tileset.store.defaultGeometrySchema.header) {\n const TypedArrayTypeHeader = getConstructorForDataFormat(type);\n switch (property) {\n case HeaderAttributeProperty.vertexCount:\n vertexCount = new TypedArrayTypeHeader(arrayBuffer, 0, 4)[0];\n byteOffset += sizeOf(type);\n break;\n case HeaderAttributeProperty.featureCount:\n featureCount = new TypedArrayTypeHeader(arrayBuffer, 4, 4)[0];\n byteOffset += sizeOf(type);\n break;\n default:\n break;\n }\n }\n\n return {\n vertexCount,\n featureCount,\n byteOffset\n };\n}\n\n/* eslint-enable max-statements */\n\nfunction normalizeAttributes(\n arrayBuffer: ArrayBuffer,\n byteOffset: number,\n vertexAttributes: VertexAttribute | FeatureAttribute,\n attributeCount: number,\n attributesOrder: string[]\n) {\n const attributes: I3SMeshAttributes = {};\n\n // the order of attributes depend on the order being added to the vertexAttributes object\n for (const attribute of attributesOrder) {\n if (vertexAttributes[attribute]) {\n const {valueType, valuesPerElement}: {valueType: string; valuesPerElement: number} =\n vertexAttributes[attribute];\n // protect from arrayBuffer read overunns by NOT assuming node has regions always even though its declared in defaultGeometrySchema.\n // In i3s 1.6: client is required to decide that based on ./shared resource of the node (materialDefinitions.[Mat_id].params.vertexRegions == true)\n // In i3s 1.7 the property has been rolled into the 3d scene layer json/node pages.\n // Code below does not account when the bytelength is actually bigger than\n // the calculated value (b\\c the tile potentially could have mesh segmentation information).\n // In those cases tiles without regions could fail or have garbage values.\n if (\n byteOffset + attributeCount * valuesPerElement * sizeOf(valueType) <=\n arrayBuffer.byteLength\n ) {\n const buffer = arrayBuffer.slice(byteOffset);\n let value: TypedArray;\n\n if (valueType === 'UInt64') {\n value = parseUint64Values(buffer, attributeCount * valuesPerElement, sizeOf(valueType));\n } else {\n const TypedArrayType = getConstructorForDataFormat(valueType);\n value = new TypedArrayType(buffer, 0, attributeCount * valuesPerElement);\n }\n\n attributes[attribute] = {\n value,\n type: GL_TYPE_MAP[valueType],\n size: valuesPerElement\n };\n\n switch (attribute) {\n case 'color':\n attributes.color.normalized = true;\n break;\n case 'position':\n case 'region':\n case 'normal':\n default:\n }\n\n byteOffset = byteOffset + attributeCount * valuesPerElement * sizeOf(valueType);\n } else if (attribute !== 'uv0') {\n break;\n }\n }\n }\n\n return {attributes, byteOffset};\n}\n\n/**\n * Parse buffer to return array of uint64 values\n *\n * @param buffer\n * @param elementsCount\n * @returns 64-bit array of values until precision is lost after Number.MAX_SAFE_INTEGER\n */\nfunction parseUint64Values(\n buffer: ArrayBuffer,\n elementsCount: number,\n attributeSize: number\n): Uint32Array {\n const values: number[] = [];\n const dataView = new DataView(buffer);\n let offset = 0;\n\n for (let index = 0; index < elementsCount; index++) {\n // split 64-bit number into two 32-bit parts\n const left = dataView.getUint32(offset, true);\n const right = dataView.getUint32(offset + 4, true);\n // combine the two 32-bit values\n const value = left + 2 ** 32 * right;\n\n values.push(value);\n offset += attributeSize;\n }\n\n return new Uint32Array(values);\n}\n\nfunction parsePositions(attribute: I3SMeshAttribute, tile: I3STileHeader): Matrix4 {\n const mbs = tile.mbs;\n const value = attribute.value;\n const metadata = attribute.metadata;\n const enuMatrix = new Matrix4();\n const cartographicOrigin = new Vector3(mbs[0], mbs[1], mbs[2]);\n const cartesianOrigin = new Vector3();\n Ellipsoid.WGS84.cartographicToCartesian(cartographicOrigin, cartesianOrigin);\n Ellipsoid.WGS84.eastNorthUpToFixedFrame(cartesianOrigin, enuMatrix);\n attribute.value = offsetsToCartesians(value, metadata, cartographicOrigin);\n\n return enuMatrix;\n}\n\n/**\n * Converts position coordinates to absolute cartesian coordinates\n * @param vertices - \"position\" attribute data\n * @param metadata - When the geometry is DRACO compressed, contain position attribute's metadata\n * https://github.com/Esri/i3s-spec/blob/master/docs/1.7/compressedAttributes.cmn.md\n * @param cartographicOrigin - Cartographic origin coordinates\n * @returns - converted \"position\" data\n */\nfunction offsetsToCartesians(\n vertices: number[] | TypedArray,\n metadata: any = {},\n cartographicOrigin: Vector3\n): Float64Array {\n const positions = new Float64Array(vertices.length);\n const scaleX = (metadata['i3s-scale_x'] && metadata['i3s-scale_x'].double) || 1;\n const scaleY = (metadata['i3s-scale_y'] && metadata['i3s-scale_y'].double) || 1;\n for (let i = 0; i < positions.length; i += 3) {\n positions[i] = vertices[i] * scaleX + cartographicOrigin.x;\n positions[i + 1] = vertices[i + 1] * scaleY + cartographicOrigin.y;\n positions[i + 2] = vertices[i + 2] + cartographicOrigin.z;\n }\n\n for (let i = 0; i < positions.length; i += 3) {\n // @ts-ignore\n Ellipsoid.WGS84.cartographicToCartesian(positions.subarray(i, i + 3), scratchVector);\n positions[i] = scratchVector.x;\n positions[i + 1] = scratchVector.y;\n positions[i + 2] = scratchVector.z;\n }\n\n return positions;\n}\n\n/**\n * Get model matrix for loaded vertices\n * @param positions positions attribute\n * @returns Matrix4 - model matrix for geometry transformation\n */\nfunction getModelMatrix(positions: I3SMeshAttribute): Matrix4 {\n const metadata = positions.metadata;\n const scaleX: number = metadata?.['i3s-scale_x']?.double || 1;\n const scaleY: number = metadata?.['i3s-scale_y']?.double || 1;\n const modelMatrix = new Matrix4();\n modelMatrix[0] = scaleX;\n modelMatrix[5] = scaleY;\n return modelMatrix;\n}\n\n/**\n * Makes a glTF-compatible PBR material from an I3S material definition\n * @param materialDefinition - i3s material definition\n * https://github.com/Esri/i3s-spec/blob/master/docs/1.7/materialDefinitions.cmn.md\n * @param texture - texture image\n * @returns {object}\n */\nfunction makePbrMaterial(materialDefinition?: I3SMaterialDefinition, texture?: TileContentTexture) {\n let pbrMaterial;\n if (materialDefinition) {\n pbrMaterial = {\n ...materialDefinition,\n pbrMetallicRoughness: materialDefinition.pbrMetallicRoughness\n ? {...materialDefinition.pbrMetallicRoughness}\n : {baseColorFactor: [255, 255, 255, 255]}\n };\n } else {\n pbrMaterial = {\n pbrMetallicRoughness: {}\n };\n if (texture) {\n pbrMaterial.pbrMetallicRoughness.baseColorTexture = {texCoord: 0};\n } else {\n pbrMaterial.pbrMetallicRoughness.baseColorFactor = [255, 255, 255, 255];\n }\n }\n\n // Set default 0.25 per spec https://github.com/Esri/i3s-spec/blob/master/docs/1.7/materialDefinitions.cmn.md\n pbrMaterial.alphaCutoff = pbrMaterial.alphaCutoff || 0.25;\n\n if (pbrMaterial.alphaMode) {\n // I3S contain alphaMode in lowerCase\n pbrMaterial.alphaMode = pbrMaterial.alphaMode.toUpperCase();\n }\n\n // Convert colors from [255,255,255,255] to [1,1,1,1]\n if (pbrMaterial.emissiveFactor) {\n pbrMaterial.emissiveFactor = convertColorFormat(pbrMaterial.emissiveFactor);\n }\n if (pbrMaterial.pbrMetallicRoughness && pbrMaterial.pbrMetallicRoughness.baseColorFactor) {\n pbrMaterial.pbrMetallicRoughness.baseColorFactor = convertColorFormat(\n pbrMaterial.pbrMetallicRoughness.baseColorFactor\n );\n }\n\n if (texture) {\n setMaterialTexture(pbrMaterial, texture);\n }\n\n return pbrMaterial;\n}\n\n/**\n * Convert color from [255,255,255,255] to [1,1,1,1]\n * @param colorFactor - color array\n * @returns - new color array\n */\nfunction convertColorFormat(colorFactor: number[]): number[] {\n const normalizedColor = [...colorFactor];\n for (let index = 0; index < colorFactor.length; index++) {\n normalizedColor[index] = colorFactor[index] / 255;\n }\n return normalizedColor;\n}\n\n/**\n * Set texture in PBR material\n * @param {object} material - i3s material definition\n * @param image - texture image\n * @returns\n */\nfunction setMaterialTexture(material, image: TileContentTexture): void {\n const texture = {source: {image}};\n // I3SLoader now support loading only one texture. This elseif sequence will assign this texture to one of\n // properties defined in materialDefinition\n if (material.pbrMetallicRoughness && material.pbrMetallicRoughness.baseColorTexture) {\n material.pbrMetallicRoughness.baseColorTexture = {\n ...material.pbrMetallicRoughness.baseColorTexture,\n texture\n };\n } else if (material.emissiveTexture) {\n material.emissiveTexture = {...material.emissiveTexture, texture};\n } else if (\n material.pbrMetallicRoughness &&\n material.pbrMetallicRoughness.metallicRoughnessTexture\n ) {\n material.pbrMetallicRoughness.metallicRoughnessTexture = {\n ...material.pbrMetallicRoughness.metallicRoughnessTexture,\n texture\n };\n } else if (material.normalTexture) {\n material.normalTexture = {...material.normalTexture, texture};\n } else if (material.occlusionTexture) {\n material.occlusionTexture = {...material.occlusionTexture, texture};\n }\n}\n\n/**\n * Flatten feature ids using face ranges\n * @param normalizedFeatureAttributes\n * @returns\n */\nfunction flattenFeatureIdsByFaceRanges(normalizedFeatureAttributes: I3SMeshAttributes): void {\n const {id, faceRange} = normalizedFeatureAttributes;\n\n if (!id || !faceRange) {\n return;\n }\n\n const featureIds = id.value;\n const range = faceRange.value;\n const featureIdsLength = range[range.length - 1] + 1;\n const orderedFeatureIndices = new Uint32Array(featureIdsLength * 3);\n\n let featureIndex = 0;\n let startIndex = 0;\n\n for (let index = 1; index < range.length; index += 2) {\n const fillId = Number(featureIds[featureIndex]);\n const endValue = range[index];\n const prevValue = range[index - 1];\n const trianglesCount = endValue - prevValue + 1;\n const endIndex = startIndex + trianglesCount * 3;\n\n orderedFeatureIndices.fill(fillId, startIndex, endIndex);\n\n featureIndex++;\n startIndex = endIndex;\n }\n\n normalizedFeatureAttributes.id.value = orderedFeatureIndices;\n}\n\n/**\n * Flatten feature ids using featureIndices\n * @param attributes\n * @param featureIds\n * @returns\n */\nfunction flattenFeatureIdsByFeatureIndices(\n attributes: I3SMeshAttributes,\n featureIds: Int32Array\n): void {\n const featureIndices = attributes.id.value;\n const result = new Float32Array(featureIndices.length);\n\n for (let index = 0; index < featureIndices.length; index++) {\n result[index] = featureIds[featureIndices[index]];\n }\n\n attributes.id.value = result;\n}\n\n/**\n * Flatten feature ids using featureIndices\n * @param featureIndex\n * @returns\n */\nfunction getFeatureIdsFromFeatureIndexMetadata(\n featureIndex: I3SMeshAttribute\n): Int32Array | undefined {\n return featureIndex?.metadata?.['i3s-feature-ids']?.intArray;\n}\n"],"file":"parse-i3s-tile-content.js"}
1
+ {"version":3,"sources":["../../../../src/lib/parsers/parse-i3s-tile-content.ts"],"names":["load","parse","Vector3","Matrix4","Ellipsoid","ImageLoader","DracoLoader","BasisLoader","CompressedTextureLoader","HeaderAttributeProperty","getUrlWithToken","GL_TYPE_MAP","getConstructorForDataFormat","sizeOf","COORDINATE_SYSTEM","scratchVector","getLoaderForTextureFormat","textureFormat","I3S_ATTRIBUTE_TYPE","parseI3STileContent","arrayBuffer","tile","tileset","options","context","content","featureIds","attributes","textureUrl","url","i3s","token","loader","response","fetch","decodeTextures","textureLoaderOptions","image","type","texture","e","compressed","mipmaps","width","height","data","material","makePbrMaterial","materialDefinition","parseI3SNodeGeometry","contentByteLength","byteLength","vertexCount","byteOffset","featureCount","indices","isDracoGeometry","decompressedGeometry","draco","attributeNameEntry","header","value","POSITION","NORMAL","COLOR_0","TEXCOORD_0","featureIndex","uvRegion","position","normal","color","uv0","id","updateAttributesMetadata","getFeatureIdsFromFeatureIndexMetadata","flattenFeatureIdsByFeatureIndices","vertexAttributes","ordering","attributesOrder","featureAttributes","featureAttributeOrder","store","defaultGeometrySchema","headers","parseHeaders","normalizedVertexAttributes","offset","normalizeAttributes","normalizedFeatureAttributes","flattenFeatureIdsByFaceRanges","concatAttributes","coordinateSystem","METER_OFFSETS","enuMatrix","parsePositions","modelMatrix","invert","getModelMatrix","LNGLAT_OFFSETS","positions","normals","colors","normalizeAttribute","texCoords","uvRegions","attributeIndex","key","loaderData","dracoAttribute","name","metadata","attribute","normalized","property","TypedArrayTypeHeader","attributeCount","valueType","valuesPerElement","buffer","slice","parseUint64Values","TypedArrayType","size","elementsCount","attributeSize","values","dataView","DataView","index","left","getUint32","right","push","Uint32Array","mbs","cartographicOrigin","cartesianOrigin","WGS84","cartographicToCartesian","eastNorthUpToFixedFrame","offsetsToCartesians","vertices","Float64Array","length","scaleX","double","scaleY","i","x","y","z","subarray","pbrMaterial","pbrMetallicRoughness","baseColorFactor","baseColorTexture","texCoord","alphaCutoff","alphaMode","toUpperCase","emissiveFactor","convertColorFormat","setMaterialTexture","colorFactor","normalizedColor","source","emissiveTexture","metallicRoughnessTexture","normalTexture","occlusionTexture","faceRange","range","featureIdsLength","orderedFeatureIndices","startIndex","fillId","Number","endValue","prevValue","trianglesCount","endIndex","fill","featureIndices","result","Float32Array","intArray"],"mappings":"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","sourcesContent":["import type {TypedArray} from '@loaders.gl/schema';\nimport {load, parse} from '@loaders.gl/core';\nimport {Vector3, Matrix4} from '@math.gl/core';\nimport {Ellipsoid} from '@math.gl/geospatial';\nimport type {LoaderOptions, LoaderContext} from '@loaders.gl/loader-utils';\nimport {ImageLoader} from '@loaders.gl/images';\nimport {DracoLoader, DracoMesh} from '@loaders.gl/draco';\nimport {BasisLoader, CompressedTextureLoader} from '@loaders.gl/textures';\n\nimport {\n I3STilesetHeader,\n I3STileHeader,\n FeatureAttribute,\n VertexAttribute,\n I3SMeshAttributes,\n I3SMeshAttribute,\n TileContentTexture,\n HeaderAttributeProperty,\n I3SMaterialDefinition\n} from '../../types';\nimport {getUrlWithToken} from '../utils/url-utils';\n\nimport {GL_TYPE_MAP, getConstructorForDataFormat, sizeOf, COORDINATE_SYSTEM} from './constants';\n\nconst scratchVector = new Vector3([0, 0, 0]);\n\nfunction getLoaderForTextureFormat(textureFormat?: 'jpg' | 'png' | 'ktx-etc2' | 'dds' | 'ktx2') {\n switch (textureFormat) {\n case 'ktx-etc2':\n case 'dds':\n return CompressedTextureLoader;\n case 'ktx2':\n return BasisLoader;\n case 'jpg':\n case 'png':\n default:\n return ImageLoader;\n }\n}\n\nconst I3S_ATTRIBUTE_TYPE = 'i3s-attribute-type';\n\nexport async function parseI3STileContent(\n arrayBuffer: ArrayBuffer,\n tile: I3STileHeader,\n tileset: I3STilesetHeader,\n options?: LoaderOptions,\n context?: LoaderContext\n) {\n tile.content = tile.content || {};\n tile.content.featureIds = tile.content.featureIds || null;\n\n tile.content.attributes = {};\n\n if (tile.textureUrl) {\n const url = getUrlWithToken(tile.textureUrl, options?.i3s?.token);\n const loader = getLoaderForTextureFormat(tile.textureFormat);\n const response = await fetch(url);\n const arrayBuffer = await response.arrayBuffer();\n\n if (options?.i3s.decodeTextures) {\n if (loader === ImageLoader) {\n const options = {...tile.textureLoaderOptions, image: {type: 'data'}};\n try {\n // @ts-ignore context must be defined\n // Image constructor is not supported in worker thread.\n // Do parsing image data on the main thread by using context to avoid worker issues.\n tile.content.texture = await context.parse(arrayBuffer, options);\n } catch (e) {\n // context object is different between worker and node.js conversion script.\n // To prevent error we parse data in ordinary way if it is not parsed by using context.\n tile.content.texture = await parse(arrayBuffer, loader, options);\n }\n } else if (loader === CompressedTextureLoader || loader === BasisLoader) {\n let texture = await load(arrayBuffer, loader, tile.textureLoaderOptions);\n if (loader === BasisLoader) {\n texture = texture[0];\n }\n tile.content.texture = {\n compressed: true,\n mipmaps: false,\n width: texture[0].width,\n height: texture[0].height,\n data: texture\n };\n }\n } else {\n tile.content.texture = arrayBuffer;\n }\n }\n\n tile.content.material = makePbrMaterial(tile.materialDefinition, tile.content.texture);\n if (tile.content.material) {\n tile.content.texture = null;\n }\n\n return await parseI3SNodeGeometry(arrayBuffer, tile, tileset, options);\n}\n\n/* eslint-disable max-statements */\nasync function parseI3SNodeGeometry(\n arrayBuffer: ArrayBuffer,\n tile: I3STileHeader,\n tileset: I3STilesetHeader,\n options?: LoaderOptions\n) {\n if (!tile.content) {\n return tile;\n }\n\n const content = tile.content;\n const contentByteLength = arrayBuffer.byteLength;\n let attributes: I3SMeshAttributes;\n let vertexCount: number;\n let byteOffset: number = 0;\n let featureCount: number = 0;\n let indices: TypedArray | undefined;\n\n if (tile.isDracoGeometry) {\n const decompressedGeometry: DracoMesh = await parse(arrayBuffer, DracoLoader, {\n draco: {\n attributeNameEntry: I3S_ATTRIBUTE_TYPE\n }\n });\n // @ts-expect-error\n vertexCount = decompressedGeometry.header.vertexCount;\n indices = decompressedGeometry.indices?.value;\n const {\n POSITION,\n NORMAL,\n COLOR_0,\n TEXCOORD_0,\n ['feature-index']: featureIndex,\n ['uv-region']: uvRegion\n } = decompressedGeometry.attributes;\n\n attributes = {\n position: POSITION,\n normal: NORMAL,\n color: COLOR_0,\n uv0: TEXCOORD_0,\n uvRegion,\n id: featureIndex\n };\n\n updateAttributesMetadata(attributes, decompressedGeometry);\n\n const featureIds = getFeatureIdsFromFeatureIndexMetadata(featureIndex);\n\n if (featureIds) {\n flattenFeatureIdsByFeatureIndices(attributes, featureIds);\n }\n } else {\n const {\n vertexAttributes,\n ordering: attributesOrder,\n featureAttributes,\n featureAttributeOrder\n } = tileset.store.defaultGeometrySchema;\n // First 8 bytes reserved for header (vertexCount and featureCount)\n const headers = parseHeaders(tileset, arrayBuffer);\n byteOffset = headers.byteOffset;\n vertexCount = headers.vertexCount;\n featureCount = headers.featureCount;\n // Getting vertex attributes such as positions, normals, colors, etc...\n const {attributes: normalizedVertexAttributes, byteOffset: offset} = normalizeAttributes(\n arrayBuffer,\n byteOffset,\n vertexAttributes,\n vertexCount,\n attributesOrder\n );\n\n // Getting feature attributes such as featureIds and faceRange\n const {attributes: normalizedFeatureAttributes} = normalizeAttributes(\n arrayBuffer,\n offset,\n featureAttributes,\n featureCount,\n featureAttributeOrder\n );\n\n flattenFeatureIdsByFaceRanges(normalizedFeatureAttributes);\n attributes = concatAttributes(normalizedVertexAttributes, normalizedFeatureAttributes);\n }\n\n if (\n !options?.i3s?.coordinateSystem ||\n options.i3s.coordinateSystem === COORDINATE_SYSTEM.METER_OFFSETS\n ) {\n const enuMatrix = parsePositions(attributes.position, tile);\n content.modelMatrix = enuMatrix.invert();\n content.coordinateSystem = COORDINATE_SYSTEM.METER_OFFSETS;\n } else {\n content.modelMatrix = getModelMatrix(attributes.position);\n content.coordinateSystem = COORDINATE_SYSTEM.LNGLAT_OFFSETS;\n }\n\n content.attributes = {\n positions: attributes.position,\n normals: attributes.normal,\n colors: normalizeAttribute(attributes.color), // Normalize from UInt8\n texCoords: attributes.uv0,\n uvRegions: normalizeAttribute(attributes.uvRegion) // Normalize from UInt16\n };\n content.indices = indices || null;\n\n if (attributes.id && attributes.id.value) {\n tile.content.featureIds = attributes.id.value;\n }\n\n // Remove undefined attributes\n for (const attributeIndex in content.attributes) {\n if (!content.attributes[attributeIndex]) {\n delete content.attributes[attributeIndex];\n }\n }\n\n content.vertexCount = vertexCount;\n content.byteLength = contentByteLength;\n\n return tile;\n}\n\n/**\n * Update attributes with metadata from decompressed geometry.\n * @param decompressedGeometry\n * @param attributes\n */\nfunction updateAttributesMetadata(\n attributes: I3SMeshAttributes,\n decompressedGeometry: DracoMesh\n): void {\n for (const key in decompressedGeometry.loaderData.attributes) {\n const dracoAttribute = decompressedGeometry.loaderData.attributes[key];\n\n switch (dracoAttribute.name) {\n case 'POSITION':\n attributes.position.metadata = dracoAttribute.metadata;\n break;\n case 'feature-index':\n attributes.id.metadata = dracoAttribute.metadata;\n break;\n default:\n break;\n }\n }\n}\n\n/**\n * Do concatenation of attribute objects.\n * Done as separate fucntion to avoid ts errors.\n * @param normalizedVertexAttributes\n * @param normalizedFeatureAttributes\n * @returns - result of attributes concatenation.\n */\nfunction concatAttributes(\n normalizedVertexAttributes: I3SMeshAttributes,\n normalizedFeatureAttributes: I3SMeshAttributes\n): I3SMeshAttributes {\n return {...normalizedVertexAttributes, ...normalizedFeatureAttributes};\n}\n\n/**\n * Normalize attribute to range [0..1] . Eg. convert colors buffer from [255,255,255,255] to [1,1,1,1]\n * @param attribute - geometry attribute\n * @returns - geometry attribute in right format\n */\nfunction normalizeAttribute(attribute: I3SMeshAttribute): I3SMeshAttribute {\n if (!attribute) {\n return attribute;\n }\n attribute.normalized = true;\n return attribute;\n}\n\nfunction parseHeaders(tileset: I3STilesetHeader, arrayBuffer: ArrayBuffer) {\n let byteOffset = 0;\n // First 8 bytes reserved for header (vertexCount and featurecount)\n let vertexCount = 0;\n let featureCount = 0;\n for (const {property, type} of tileset.store.defaultGeometrySchema.header) {\n const TypedArrayTypeHeader = getConstructorForDataFormat(type);\n switch (property) {\n case HeaderAttributeProperty.vertexCount:\n vertexCount = new TypedArrayTypeHeader(arrayBuffer, 0, 4)[0];\n byteOffset += sizeOf(type);\n break;\n case HeaderAttributeProperty.featureCount:\n featureCount = new TypedArrayTypeHeader(arrayBuffer, 4, 4)[0];\n byteOffset += sizeOf(type);\n break;\n default:\n break;\n }\n }\n\n return {\n vertexCount,\n featureCount,\n byteOffset\n };\n}\n\n/* eslint-enable max-statements */\n\nfunction normalizeAttributes(\n arrayBuffer: ArrayBuffer,\n byteOffset: number,\n vertexAttributes: VertexAttribute | FeatureAttribute,\n attributeCount: number,\n attributesOrder: string[]\n) {\n const attributes: I3SMeshAttributes = {};\n\n // the order of attributes depend on the order being added to the vertexAttributes object\n for (const attribute of attributesOrder) {\n if (vertexAttributes[attribute]) {\n const {valueType, valuesPerElement}: {valueType: string; valuesPerElement: number} =\n vertexAttributes[attribute];\n // protect from arrayBuffer read overunns by NOT assuming node has regions always even though its declared in defaultGeometrySchema.\n // In i3s 1.6: client is required to decide that based on ./shared resource of the node (materialDefinitions.[Mat_id].params.vertexRegions == true)\n // In i3s 1.7 the property has been rolled into the 3d scene layer json/node pages.\n // Code below does not account when the bytelength is actually bigger than\n // the calculated value (b\\c the tile potentially could have mesh segmentation information).\n // In those cases tiles without regions could fail or have garbage values.\n if (\n byteOffset + attributeCount * valuesPerElement * sizeOf(valueType) <=\n arrayBuffer.byteLength\n ) {\n const buffer = arrayBuffer.slice(byteOffset);\n let value: TypedArray;\n\n if (valueType === 'UInt64') {\n value = parseUint64Values(buffer, attributeCount * valuesPerElement, sizeOf(valueType));\n } else {\n const TypedArrayType = getConstructorForDataFormat(valueType);\n value = new TypedArrayType(buffer, 0, attributeCount * valuesPerElement);\n }\n\n attributes[attribute] = {\n value,\n type: GL_TYPE_MAP[valueType],\n size: valuesPerElement\n };\n\n switch (attribute) {\n case 'color':\n attributes.color.normalized = true;\n break;\n case 'position':\n case 'region':\n case 'normal':\n default:\n }\n\n byteOffset = byteOffset + attributeCount * valuesPerElement * sizeOf(valueType);\n } else if (attribute !== 'uv0') {\n break;\n }\n }\n }\n\n return {attributes, byteOffset};\n}\n\n/**\n * Parse buffer to return array of uint64 values\n *\n * @param buffer\n * @param elementsCount\n * @returns 64-bit array of values until precision is lost after Number.MAX_SAFE_INTEGER\n */\nfunction parseUint64Values(\n buffer: ArrayBuffer,\n elementsCount: number,\n attributeSize: number\n): Uint32Array {\n const values: number[] = [];\n const dataView = new DataView(buffer);\n let offset = 0;\n\n for (let index = 0; index < elementsCount; index++) {\n // split 64-bit number into two 32-bit parts\n const left = dataView.getUint32(offset, true);\n const right = dataView.getUint32(offset + 4, true);\n // combine the two 32-bit values\n const value = left + 2 ** 32 * right;\n\n values.push(value);\n offset += attributeSize;\n }\n\n return new Uint32Array(values);\n}\n\nfunction parsePositions(attribute: I3SMeshAttribute, tile: I3STileHeader): Matrix4 {\n const mbs = tile.mbs;\n const value = attribute.value;\n const metadata = attribute.metadata;\n const enuMatrix = new Matrix4();\n const cartographicOrigin = new Vector3(mbs[0], mbs[1], mbs[2]);\n const cartesianOrigin = new Vector3();\n Ellipsoid.WGS84.cartographicToCartesian(cartographicOrigin, cartesianOrigin);\n Ellipsoid.WGS84.eastNorthUpToFixedFrame(cartesianOrigin, enuMatrix);\n attribute.value = offsetsToCartesians(value, metadata, cartographicOrigin);\n\n return enuMatrix;\n}\n\n/**\n * Converts position coordinates to absolute cartesian coordinates\n * @param vertices - \"position\" attribute data\n * @param metadata - When the geometry is DRACO compressed, contain position attribute's metadata\n * https://github.com/Esri/i3s-spec/blob/master/docs/1.7/compressedAttributes.cmn.md\n * @param cartographicOrigin - Cartographic origin coordinates\n * @returns - converted \"position\" data\n */\nfunction offsetsToCartesians(\n vertices: number[] | TypedArray,\n metadata: any = {},\n cartographicOrigin: Vector3\n): Float64Array {\n const positions = new Float64Array(vertices.length);\n const scaleX = (metadata['i3s-scale_x'] && metadata['i3s-scale_x'].double) || 1;\n const scaleY = (metadata['i3s-scale_y'] && metadata['i3s-scale_y'].double) || 1;\n for (let i = 0; i < positions.length; i += 3) {\n positions[i] = vertices[i] * scaleX + cartographicOrigin.x;\n positions[i + 1] = vertices[i + 1] * scaleY + cartographicOrigin.y;\n positions[i + 2] = vertices[i + 2] + cartographicOrigin.z;\n }\n\n for (let i = 0; i < positions.length; i += 3) {\n // @ts-ignore\n Ellipsoid.WGS84.cartographicToCartesian(positions.subarray(i, i + 3), scratchVector);\n positions[i] = scratchVector.x;\n positions[i + 1] = scratchVector.y;\n positions[i + 2] = scratchVector.z;\n }\n\n return positions;\n}\n\n/**\n * Get model matrix for loaded vertices\n * @param positions positions attribute\n * @returns Matrix4 - model matrix for geometry transformation\n */\nfunction getModelMatrix(positions: I3SMeshAttribute): Matrix4 {\n const metadata = positions.metadata;\n const scaleX: number = metadata?.['i3s-scale_x']?.double || 1;\n const scaleY: number = metadata?.['i3s-scale_y']?.double || 1;\n const modelMatrix = new Matrix4();\n modelMatrix[0] = scaleX;\n modelMatrix[5] = scaleY;\n return modelMatrix;\n}\n\n/**\n * Makes a glTF-compatible PBR material from an I3S material definition\n * @param materialDefinition - i3s material definition\n * https://github.com/Esri/i3s-spec/blob/master/docs/1.7/materialDefinitions.cmn.md\n * @param texture - texture image\n * @returns {object}\n */\nfunction makePbrMaterial(materialDefinition?: I3SMaterialDefinition, texture?: TileContentTexture) {\n let pbrMaterial;\n if (materialDefinition) {\n pbrMaterial = {\n ...materialDefinition,\n pbrMetallicRoughness: materialDefinition.pbrMetallicRoughness\n ? {...materialDefinition.pbrMetallicRoughness}\n : {baseColorFactor: [255, 255, 255, 255]}\n };\n } else {\n pbrMaterial = {\n pbrMetallicRoughness: {}\n };\n if (texture) {\n pbrMaterial.pbrMetallicRoughness.baseColorTexture = {texCoord: 0};\n } else {\n pbrMaterial.pbrMetallicRoughness.baseColorFactor = [255, 255, 255, 255];\n }\n }\n\n // Set default 0.25 per spec https://github.com/Esri/i3s-spec/blob/master/docs/1.7/materialDefinitions.cmn.md\n pbrMaterial.alphaCutoff = pbrMaterial.alphaCutoff || 0.25;\n\n if (pbrMaterial.alphaMode) {\n // I3S contain alphaMode in lowerCase\n pbrMaterial.alphaMode = pbrMaterial.alphaMode.toUpperCase();\n }\n\n // Convert colors from [255,255,255,255] to [1,1,1,1]\n if (pbrMaterial.emissiveFactor) {\n pbrMaterial.emissiveFactor = convertColorFormat(pbrMaterial.emissiveFactor);\n }\n if (pbrMaterial.pbrMetallicRoughness && pbrMaterial.pbrMetallicRoughness.baseColorFactor) {\n pbrMaterial.pbrMetallicRoughness.baseColorFactor = convertColorFormat(\n pbrMaterial.pbrMetallicRoughness.baseColorFactor\n );\n }\n\n if (texture) {\n setMaterialTexture(pbrMaterial, texture);\n }\n\n return pbrMaterial;\n}\n\n/**\n * Convert color from [255,255,255,255] to [1,1,1,1]\n * @param colorFactor - color array\n * @returns - new color array\n */\nfunction convertColorFormat(colorFactor: number[]): number[] {\n const normalizedColor = [...colorFactor];\n for (let index = 0; index < colorFactor.length; index++) {\n normalizedColor[index] = colorFactor[index] / 255;\n }\n return normalizedColor;\n}\n\n/**\n * Set texture in PBR material\n * @param {object} material - i3s material definition\n * @param image - texture image\n * @returns\n */\nfunction setMaterialTexture(material, image: TileContentTexture): void {\n const texture = {source: {image}};\n // I3SLoader now support loading only one texture. This elseif sequence will assign this texture to one of\n // properties defined in materialDefinition\n if (material.pbrMetallicRoughness && material.pbrMetallicRoughness.baseColorTexture) {\n material.pbrMetallicRoughness.baseColorTexture = {\n ...material.pbrMetallicRoughness.baseColorTexture,\n texture\n };\n } else if (material.emissiveTexture) {\n material.emissiveTexture = {...material.emissiveTexture, texture};\n } else if (\n material.pbrMetallicRoughness &&\n material.pbrMetallicRoughness.metallicRoughnessTexture\n ) {\n material.pbrMetallicRoughness.metallicRoughnessTexture = {\n ...material.pbrMetallicRoughness.metallicRoughnessTexture,\n texture\n };\n } else if (material.normalTexture) {\n material.normalTexture = {...material.normalTexture, texture};\n } else if (material.occlusionTexture) {\n material.occlusionTexture = {...material.occlusionTexture, texture};\n }\n}\n\n/**\n * Flatten feature ids using face ranges\n * @param normalizedFeatureAttributes\n * @returns\n */\nfunction flattenFeatureIdsByFaceRanges(normalizedFeatureAttributes: I3SMeshAttributes): void {\n const {id, faceRange} = normalizedFeatureAttributes;\n\n if (!id || !faceRange) {\n return;\n }\n\n const featureIds = id.value;\n const range = faceRange.value;\n const featureIdsLength = range[range.length - 1] + 1;\n const orderedFeatureIndices = new Uint32Array(featureIdsLength * 3);\n\n let featureIndex = 0;\n let startIndex = 0;\n\n for (let index = 1; index < range.length; index += 2) {\n const fillId = Number(featureIds[featureIndex]);\n const endValue = range[index];\n const prevValue = range[index - 1];\n const trianglesCount = endValue - prevValue + 1;\n const endIndex = startIndex + trianglesCount * 3;\n\n orderedFeatureIndices.fill(fillId, startIndex, endIndex);\n\n featureIndex++;\n startIndex = endIndex;\n }\n\n normalizedFeatureAttributes.id.value = orderedFeatureIndices;\n}\n\n/**\n * Flatten feature ids using featureIndices\n * @param attributes\n * @param featureIds\n * @returns\n */\nfunction flattenFeatureIdsByFeatureIndices(\n attributes: I3SMeshAttributes,\n featureIds: Int32Array\n): void {\n const featureIndices = attributes.id.value;\n const result = new Float32Array(featureIndices.length);\n\n for (let index = 0; index < featureIndices.length; index++) {\n result[index] = featureIds[featureIndices[index]];\n }\n\n attributes.id.value = result;\n}\n\n/**\n * Flatten feature ids using featureIndices\n * @param featureIndex\n * @returns\n */\nfunction getFeatureIdsFromFeatureIndexMetadata(\n featureIndex: I3SMeshAttribute\n): Int32Array | undefined {\n return featureIndex?.metadata?.['i3s-feature-ids']?.intArray;\n}\n"],"file":"parse-i3s-tile-content.js"}
@@ -55,7 +55,7 @@
55
55
  var nodeVersion = matches && parseFloat(matches[1]) || 0;
56
56
 
57
57
  // ../worker-utils/src/lib/env-utils/version.ts
58
- var VERSION = true ? "3.2.0-alpha.2" : DEFAULT_VERSION;
58
+ var VERSION = true ? "3.2.0-alpha.3" : DEFAULT_VERSION;
59
59
  if (false) {
60
60
  console.error("loaders.gl: The __VERSION__ variable is not injected using babel plugin. Latest unstable workers would be fetched from the CDN.");
61
61
  }
@@ -637,12 +637,13 @@
637
637
  switch (type) {
638
638
  case "process":
639
639
  try {
640
- const { input, options = {} } = payload;
640
+ const { input, options = {}, context = {} } = payload;
641
641
  const result = await parseData({
642
642
  loader,
643
643
  arrayBuffer: input,
644
644
  options,
645
645
  context: {
646
+ ...context,
646
647
  parse: parseOnMainThread
647
648
  }
648
649
  });
@@ -717,10 +718,12 @@
717
718
  const workerFarm = WorkerFarm.getWorkerFarm(options);
718
719
  const workerPool = workerFarm.getWorkerPool({ name, url });
719
720
  options = JSON.parse(JSON.stringify(options));
721
+ context = JSON.parse(JSON.stringify(context || {}));
720
722
  const job = await workerPool.startJob("process-on-worker", onMessage.bind(null, parseOnMainThread2));
721
723
  job.postMessage("process", {
722
724
  input: data,
723
- options
725
+ options,
726
+ context
724
727
  });
725
728
  const result = await job.result;
726
729
  return await result.result;
@@ -1085,7 +1088,7 @@
1085
1088
  var process_ = globals3.process || {};
1086
1089
 
1087
1090
  // ../../node_modules/probe.gl/dist/esm/utils/globals.js
1088
- var VERSION3 = true ? "3.2.0-alpha.2" : "untranspiled source";
1091
+ var VERSION3 = true ? "3.2.0-alpha.3" : "untranspiled source";
1089
1092
  var isBrowser4 = isBrowser3();
1090
1093
 
1091
1094
  // ../../node_modules/probe.gl/dist/esm/utils/local-storage.js
@@ -1831,7 +1834,7 @@
1831
1834
  var process_2 = globals4.process || {};
1832
1835
 
1833
1836
  // ../../node_modules/@probe.gl/env/dist/esm/utils/globals.js
1834
- var VERSION4 = true ? "3.2.0-alpha.2" : "untranspiled source";
1837
+ var VERSION4 = true ? "3.2.0-alpha.3" : "untranspiled source";
1835
1838
  var isBrowser6 = isBrowser5();
1836
1839
 
1837
1840
  // ../../node_modules/@probe.gl/log/dist/esm/utils/local-storage.js
@@ -2724,6 +2727,12 @@
2724
2727
  }
2725
2728
  async function parseWithLoader(loader, data, options, context) {
2726
2729
  validateWorkerVersion(loader);
2730
+ if (isResponse(data)) {
2731
+ const response = data;
2732
+ const { ok, redirected, status, statusText, type, url } = response;
2733
+ const headers = Object.fromEntries(response.headers.entries());
2734
+ context.response = { headers, ok, redirected, status, statusText, type, url };
2735
+ }
2727
2736
  data = await getArrayBufferOrStringFromData(data, loader, options);
2728
2737
  if (loader.parseTextSync && typeof data === "string") {
2729
2738
  options.dataType = "text";
@@ -4947,7 +4956,7 @@
4947
4956
  };
4948
4957
 
4949
4958
  // ../images/src/lib/utils/version.ts
4950
- var VERSION5 = true ? "3.2.0-alpha.2" : "latest";
4959
+ var VERSION5 = true ? "3.2.0-alpha.3" : "latest";
4951
4960
 
4952
4961
  // ../images/src/lib/category-api/image-type.ts
4953
4962
  var { _parseImageNode } = globalThis;
@@ -5295,7 +5304,7 @@
5295
5304
  };
5296
5305
 
5297
5306
  // ../draco/src/lib/utils/version.ts
5298
- var VERSION6 = true ? "3.2.0-alpha.2" : "latest";
5307
+ var VERSION6 = true ? "3.2.0-alpha.3" : "latest";
5299
5308
 
5300
5309
  // ../draco/src/draco-loader.ts
5301
5310
  var DEFAULT_DRACO_OPTIONS = {
@@ -6279,10 +6288,10 @@
6279
6288
  }
6280
6289
 
6281
6290
  // ../textures/src/lib/utils/version.ts
6282
- var VERSION7 = true ? "3.2.0-alpha.2" : "beta";
6291
+ var VERSION7 = true ? "3.2.0-alpha.3" : "beta";
6283
6292
 
6284
6293
  // ../textures/src/lib/parsers/basis-module-loader.ts
6285
- var VERSION8 = true ? "3.2.0-alpha.2" : "beta";
6294
+ var VERSION8 = true ? "3.2.0-alpha.3" : "beta";
6286
6295
  var BASIS_CDN_ENCODER_WASM = `https://unpkg.com/@loaders.gl/textures@${VERSION8}/dist/libs/basis_encoder.wasm`;
6287
6296
  var BASIS_CDN_ENCODER_JS = `https://unpkg.com/@loaders.gl/textures@${VERSION8}/dist/libs/basis_encoder.js`;
6288
6297
  var loadBasisTranscoderPromise;
@@ -7978,6 +7987,7 @@
7978
7987
  return tile;
7979
7988
  }
7980
7989
  const content = tile.content;
7990
+ const contentByteLength = arrayBuffer.byteLength;
7981
7991
  let attributes;
7982
7992
  let vertexCount;
7983
7993
  let byteOffset = 0;
@@ -8053,7 +8063,7 @@
8053
8063
  }
8054
8064
  }
8055
8065
  content.vertexCount = vertexCount;
8056
- content.byteLength = arrayBuffer.byteLength;
8066
+ content.byteLength = contentByteLength;
8057
8067
  return tile;
8058
8068
  }
8059
8069
  function updateAttributesMetadata(attributes, decompressedGeometry) {
@@ -8288,7 +8298,7 @@
8288
8298
  }
8289
8299
 
8290
8300
  // src/i3s-content-loader.ts
8291
- var VERSION9 = true ? "3.2.0-alpha.2" : "beta";
8301
+ var VERSION9 = true ? "3.2.0-alpha.3" : "beta";
8292
8302
  var I3SContentLoader = {
8293
8303
  name: "I3S Content (Indexed Scene Layers)",
8294
8304
  id: "i3s-content",
@@ -80,6 +80,7 @@ async function parseI3SNodeGeometry(arrayBuffer, tile, tileset, options) {
80
80
  return tile;
81
81
  }
82
82
  const content = tile.content;
83
+ const contentByteLength = arrayBuffer.byteLength;
83
84
  let attributes;
84
85
  let vertexCount;
85
86
  let byteOffset = 0;
@@ -151,7 +152,7 @@ async function parseI3SNodeGeometry(arrayBuffer, tile, tileset, options) {
151
152
  }
152
153
  }
153
154
  content.vertexCount = vertexCount;
154
- content.byteLength = arrayBuffer.byteLength;
155
+ content.byteLength = contentByteLength;
155
156
  return tile;
156
157
  }
157
158
  /**
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@loaders.gl/i3s",
3
- "version": "3.2.0-alpha.2",
3
+ "version": "3.2.0-alpha.3",
4
4
  "description": "i3s .",
5
5
  "license": "MIT",
6
6
  "publishConfig": {
@@ -32,12 +32,12 @@
32
32
  "build-worker": "esbuild src/workers/i3s-content-worker.ts --bundle --outfile=dist/i3s-content-worker.js --define:__VERSION__=\\\"$npm_package_version\\\""
33
33
  },
34
34
  "dependencies": {
35
- "@loaders.gl/draco": "3.2.0-alpha.2",
36
- "@loaders.gl/images": "3.2.0-alpha.2",
37
- "@loaders.gl/loader-utils": "3.2.0-alpha.2",
38
- "@loaders.gl/schema": "3.2.0-alpha.2",
39
- "@loaders.gl/textures": "3.2.0-alpha.2",
40
- "@loaders.gl/tiles": "3.2.0-alpha.2",
35
+ "@loaders.gl/draco": "3.2.0-alpha.3",
36
+ "@loaders.gl/images": "3.2.0-alpha.3",
37
+ "@loaders.gl/loader-utils": "3.2.0-alpha.3",
38
+ "@loaders.gl/schema": "3.2.0-alpha.3",
39
+ "@loaders.gl/textures": "3.2.0-alpha.3",
40
+ "@loaders.gl/tiles": "3.2.0-alpha.3",
41
41
  "@luma.gl/constants": "^8.5.4",
42
42
  "@math.gl/core": "^3.5.1",
43
43
  "@math.gl/culling": "^3.5.1",
@@ -45,7 +45,7 @@
45
45
  "probe.gl": "^3.4.0"
46
46
  },
47
47
  "peerDependencies": {
48
- "@loaders.gl/core": "3.2.0-alpha.1"
48
+ "@loaders.gl/core": "3.2.0-alpha.2"
49
49
  },
50
- "gitHead": "52a602739cbfce60fc314f474efc984d199dff78"
50
+ "gitHead": "f0d4b801efeb7094283106352ee759eccfb21f10"
51
51
  }
@@ -109,6 +109,7 @@ async function parseI3SNodeGeometry(
109
109
  }
110
110
 
111
111
  const content = tile.content;
112
+ const contentByteLength = arrayBuffer.byteLength;
112
113
  let attributes: I3SMeshAttributes;
113
114
  let vertexCount: number;
114
115
  let byteOffset: number = 0;
@@ -216,7 +217,7 @@ async function parseI3SNodeGeometry(
216
217
  }
217
218
 
218
219
  content.vertexCount = vertexCount;
219
- content.byteLength = arrayBuffer.byteLength;
220
+ content.byteLength = contentByteLength;
220
221
 
221
222
  return tile;
222
223
  }