diff --git a/dist/convert2xkt.cjs.js b/dist/convert2xkt.cjs.js index b2a4a97..7d4ca5b 100644 --- a/dist/convert2xkt.cjs.js +++ b/dist/convert2xkt.cjs.js @@ -16618,6 +16618,9 @@ function createPrimitiveHash(primitive) { hash.push(attributes[key].id); } } + if (primitive.indices) { + hash.push(primitive.indices.id); + } return hash.join("."); } diff --git a/dist/xeokit-convert.cjs.js b/dist/xeokit-convert.cjs.js index 6604620..7aedb99 100644 --- a/dist/xeokit-convert.cjs.js +++ b/dist/xeokit-convert.cjs.js @@ -10923,6 +10923,9 @@ function createPrimitiveHash(primitive) { hash.push(attributes[key].id); } } + if (primitive.indices) { + hash.push(primitive.indices.id); + } return hash.join("."); } diff --git a/dist/xeokit-convert.cjs.js.map b/dist/xeokit-convert.cjs.js.map index c68625a..fe21ed7 100644 --- a/dist/xeokit-convert.cjs.js.map +++ b/dist/xeokit-convert.cjs.js.map @@ -1 +1 @@ -{"version":3,"file":"xeokit-convert.cjs.js","mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD,O;;;;;;;;;;;;;;;;;;;;ACVA;AACA;AACA;AACA;AACA;AAJA,IAKMA,MAAM,gBAAAC,YAAA;AAER;AACJ;AACA;AACI,SAAAD,OAAYE,IAAI,EAAE;EAAAC,eAAA,OAAAH,MAAA;EAEd;AACR;AACA;AACA;AACA;EACQ,IAAI,CAACE,IAAI,GAAGA,IAAI;;EAEhB;AACR;AACA;EACQ,IAAI,CAACE,QAAQ,GAAG,IAAI;;EAEpB;AACR;AACA;EACQ,IAAI,CAACC,IAAI,GAAG,IAAI;;EAEhB;AACR;AACA;EACQ,IAAI,CAACC,KAAK,GAAG,IAAI;AACrB,CAAC;;;;;;;;;;;;;;;;;;;;;;ACjC+B;;AAEpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AARA,IASME,SAAS,gBAAAP,YAAA;AAEX;AACJ;AACA;AACA;AACA;AACI,SAAAO,UAAYC,QAAQ,EAAGC,MAAM,EAAE;EAAAP,eAAA,OAAAK,SAAA;EAE3B;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACQ,IAAI,CAACC,QAAQ,GAAGA,QAAQ;;EAExB;AACR;AACA;AACA;AACA;AACA;AACA;EACQ,IAAI,CAACE,WAAW,GAAG,IAAI;;EAEvB;AACR;AACA;AACA;AACA;EACQ,IAAI,CAACD,MAAM,GAAGA,MAAM;;EAEpB;AACR;AACA;AACA;AACA;AACA;AACA;AACA;EACQ,IAAI,CAACR,IAAI,GAAGK,8CAAI,CAACK,KAAK,CAAC,CAAC;;EAExB;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACQ,IAAI,CAACC,mBAAmB,GAAG,KAAK;AACpC,CAAC;;;;;;;;;;;;;;;;;;;;;ACtEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AARA,IASMC,WAAW;EAEb;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACI,SAAAA,YAAYC,GAAG,EAAE;IAAAZ,eAAA,OAAAW,WAAA;IAEb;AACR;AACA;AACA;AACA;IACQ,IAAI,CAACE,UAAU,GAAGD,GAAG,CAACC,UAAU;;IAEhC;AACR;AACA;AACA;AACA;IACQ,IAAI,CAACC,aAAa,GAAGF,GAAG,CAACE,aAAa;;IAEtC;AACR;AACA;AACA;AACA;IACQ,IAAI,CAACC,aAAa,GAAGH,GAAG,CAACG,aAAa;;IAEtC;AACR;AACA;AACA;AACA;IACQ,IAAI,CAACC,YAAY,GAAG,CAAC;;IAErB;AACR;AACA;AACA;AACA;AACA;AACA;IACQ,IAAI,CAACC,SAAS,GAAGL,GAAG,CAACK,SAAS;;IAE9B;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACQ,IAAI,CAACC,kBAAkB,GAAG,IAAIC,WAAW,CAACP,GAAG,CAACK,SAAS,CAACG,MAAM,CAAC;;IAE/D;AACR;AACA;AACA;AACA;AACA;AACA;IACQ,IAAI,CAACC,OAAO,GAAGT,GAAG,CAACS,OAAO;;IAE1B;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACQ,IAAI,CAACC,iBAAiB,GAAG,IAAI;;IAE7B;AACR;AACA;AACA;AACA;AACA;AACA;IACQ,IAAI,CAACC,gBAAgB,GAAGX,GAAG,CAACW,gBAAgB;;IAE5C;AACR;AACA;AACA;AACA;IACQ,IAAI,CAACC,GAAG,GAAGZ,GAAG,CAACY,GAAG;;IAElB;AACR;AACA;AACA;AACA;IACQ,IAAI,CAACC,aAAa,GAAGb,GAAG,CAACa,aAAa;;IAEtC;AACR;AACA;AACA;AACA;AACA;AACA;IACQ,IAAI,CAACC,OAAO,GAAGd,GAAG,CAACc,OAAO;;IAE1B;AACR;AACA;AACA;AACA;AACA;AACA;IACQ,IAAI,CAACC,WAAW,GAAGf,GAAG,CAACe,WAAW;;IAElC;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACQ,IAAI,CAACC,KAAK,GAAG,KAAK;EACtB;;EAEA;AACJ;AACA;AACA;EAHI9B,YAAA,CAAAa,WAAA;IAAAkB,GAAA;IAAAC,GAAA,EAIA,SAAAA,IAAA,EAAa;MAC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ACA;AACA;AACA;AACA;AACA;AACA;AACA;IACQ,IAAI,CAACC,gBAAgB,GAAG,EAAE;;IAE1B;AACR;AACA;AACA;AACA;AACA;AACA;IACQ,IAAI,CAACC,WAAW,GAAG,CAAC,CAAC;;IAErB;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACQ,IAAI,CAACC,eAAe,GAAG,EAAE;;IAEzB;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACQ,IAAI,CAACC,4BAA4B,GAAG,IAAI/N,YAAY,CAAC,EAAE,CAAC;;IAExD;AACR;AACA;AACA;AACA;AACA;AACA;IACQ,IAAI,CAACgO,UAAU,GAAG,CAAC,CAAC;;IAEpB;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACQ,IAAI,CAACC,cAAc,GAAG,EAAE;;IAExB;AACR;AACA;AACA;AACA;AACA;AACA;IACQ,IAAI,CAACC,QAAQ,GAAG,CAAC,CAAC;;IAElB;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACQ,IAAI,CAACC,YAAY,GAAG,EAAE;;IAEtB;AACR;AACA;AACA;AACA;AACA;AACA;IACQ,IAAI,CAACC,WAAW,GAAG,CAAC,CAAC;;IAErB;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACQ,IAAI,CAACC,eAAe,GAAG,EAAE;;IAEzB;AACR;AACA;AACA;AACA;AACA;AACA;IACQ,IAAI,CAACnQ,MAAM,GAAG,CAAC,CAAC;;IAEhB;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACQ,IAAI,CAACoQ,UAAU,GAAG,EAAE;;IAEpB;AACR;AACA;AACA;AACA;AACA;AACA;IACQ,IAAI,CAAC1Q,QAAQ,GAAG,CAAC,CAAC;;IAElB;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACQ,IAAI,CAAC2Q,YAAY,GAAG,EAAE;;IAEtB;AACR;AACA;AACA;AACA;AACA;AACA;IACQ,IAAI,CAACC,SAAS,GAAG,EAAE;;IAEnB;AACR;AACA;AACA;AACA;AACA;AACA;IACQ,IAAI,CAAC9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","sources":["webpack://convert2xkt/webpack/universalModuleDefinition","webpack://convert2xkt/./src/XKTModel/KDNode.js","webpack://convert2xkt/./src/XKTModel/XKTEntity.js","webpack://convert2xkt/./src/XKTModel/XKTGeometry.js","webpack://convert2xkt/./src/XKTModel/XKTMesh.js","webpack://convert2xkt/./src/XKTModel/XKTMetaObject.js","webpack://convert2xkt/./src/XKTModel/XKTModel.js","webpack://convert2xkt/./src/XKTModel/XKTPropertySet.js","webpack://convert2xkt/./src/XKTModel/XKTTexture.js","webpack://convert2xkt/./src/XKTModel/XKTTextureSet.js","webpack://convert2xkt/./src/XKTModel/XKTTile.js","webpack://convert2xkt/./src/XKTModel/lib/buildEdgeIndices.js","webpack://convert2xkt/./src/XKTModel/lib/geometryCompression.js","webpack://convert2xkt/./src/XKTModel/lib/isTriangleMeshSolid.js","webpack://convert2xkt/./src/XKTModel/lib/toArraybuffer.js","webpack://convert2xkt/./src/XKTModel/lib/utils.js","webpack://convert2xkt/./src/XKTModel/writeXKTModelToArrayBuffer.js","webpack://convert2xkt/./src/XKT_INFO.js","webpack://convert2xkt/./src/constants.js","webpack://convert2xkt/./src/convert2xkt.js","webpack://convert2xkt/./src/geometryBuilders/buildBoxGeometry.js","webpack://convert2xkt/./src/geometryBuilders/buildBoxLinesGeometry.js","webpack://convert2xkt/./src/geometryBuilders/buildCylinderGeometry.js","webpack://convert2xkt/./src/geometryBuilders/buildGridGeometry.js","webpack://convert2xkt/./src/geometryBuilders/buildPlaneGeometry.js","webpack://convert2xkt/./src/geometryBuilders/buildSphereGeometry.js","webpack://convert2xkt/./src/geometryBuilders/buildTorusGeometry.js","webpack://convert2xkt/./src/geometryBuilders/buildVectorTextGeometry.js","webpack://convert2xkt/./src/index.js","webpack://convert2xkt/./src/lib/earcut.js","webpack://convert2xkt/./src/lib/faceToVertexNormals.js","webpack://convert2xkt/./src/lib/math.js","webpack://convert2xkt/./src/lib/mergeVertices.js","webpack://convert2xkt/./src/parsers/parseCityJSONIntoXKTModel.js","webpack://convert2xkt/./src/parsers/parseGLTFIntoXKTModel.js","webpack://convert2xkt/./src/parsers/parseGLTFJSONIntoXKTModel.js","webpack://convert2xkt/./src/parsers/parseIFCIntoXKTModel.js","webpack://convert2xkt/./src/parsers/parseLASIntoXKTModel.js","webpack://convert2xkt/./src/parsers/parseMetaModelIntoXKTModel.js","webpack://convert2xkt/./src/parsers/parsePCDIntoXKTModel.js","webpack://convert2xkt/./src/parsers/parsePLYIntoXKTModel.js","webpack://convert2xkt/./src/parsers/parseSTLIntoXKTModel.js","webpack://convert2xkt/external commonjs \"@loaders.gl/core\"","webpack://convert2xkt/external commonjs \"@loaders.gl/gltf\"","webpack://convert2xkt/external commonjs \"@loaders.gl/images\"","webpack://convert2xkt/external commonjs \"@loaders.gl/las\"","webpack://convert2xkt/external commonjs \"@loaders.gl/ply\"","webpack://convert2xkt/external commonjs \"@loaders.gl/polyfills\"","webpack://convert2xkt/external commonjs \"@loaders.gl/textures\"","webpack://convert2xkt/external commonjs \"fs\"","webpack://convert2xkt/external commonjs \"pako\"","webpack://convert2xkt/external commonjs \"path\"","webpack://convert2xkt/webpack/bootstrap","webpack://convert2xkt/webpack/runtime/compat get default export","webpack://convert2xkt/webpack/runtime/define property getters","webpack://convert2xkt/webpack/runtime/hasOwnProperty shorthand","webpack://convert2xkt/webpack/runtime/make namespace object","webpack://convert2xkt/./index.dist.node.js"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"convert2xkt\"] = factory();\n\telse\n\t\troot[\"convert2xkt\"] = factory();\n})(global, () => {\nreturn ","/**\n * A kd-Tree node, used internally by {@link XKTModel}.\n *\n * @private\n */\nclass KDNode {\n\n /**\n * Create a KDNode with an axis-aligned 3D World-space boundary.\n */\n constructor(aabb) {\n\n /**\n * The axis-aligned 3D World-space boundary of this KDNode.\n *\n * @type {Float64Array}\n */\n this.aabb = aabb;\n\n /**\n * The {@link XKTEntity}s within this KDNode.\n */\n this.entities = null;\n\n /**\n * The left child KDNode.\n */\n this.left = null;\n\n /**\n * The right child KDNode.\n */\n this.right = null;\n }\n}\n\nexport {KDNode};","import {math} from \"../lib/math.js\";\n\n/**\n * An object within an {@link XKTModel}.\n *\n * * Created by {@link XKTModel#createEntity}\n * * Stored in {@link XKTModel#entities} and {@link XKTModel#entitiesList}\n * * Has one or more {@link XKTMesh}s, each having an {@link XKTGeometry}\n *\n * @class XKTEntity\n */\nclass XKTEntity {\n\n /**\n * @private\n * @param entityId\n * @param meshes\n */\n constructor(entityId, meshes) {\n\n /**\n * Unique ID of this ````XKTEntity```` in {@link XKTModel#entities}.\n *\n * For a BIM model, this will be an IFC product ID.\n *\n * We can also use {@link XKTModel#createMetaObject} to create an {@link XKTMetaObject} to specify metadata for\n * this ````XKTEntity````. To associate the {@link XKTMetaObject} with our {@link XKTEntity}, we give\n * {@link XKTMetaObject#metaObjectId} the same value as {@link XKTEntity#entityId}.\n *\n * @type {String}\n */\n this.entityId = entityId;\n\n /**\n * Index of this ````XKTEntity```` in {@link XKTModel#entitiesList}.\n *\n * Set by {@link XKTModel#finalize}.\n *\n * @type {Number}\n */\n this.entityIndex = null;\n\n /**\n * A list of {@link XKTMesh}s that indicate which {@link XKTGeometry}s are used by this Entity.\n *\n * @type {XKTMesh[]}\n */\n this.meshes = meshes;\n\n /**\n * World-space axis-aligned bounding box (AABB) that encloses the {@link XKTGeometry#positions} of\n * the {@link XKTGeometry}s that are used by this ````XKTEntity````.\n *\n * Set by {@link XKTModel#finalize}.\n *\n * @type {Float32Array}\n */\n this.aabb = math.AABB3();\n\n /**\n * Indicates if this ````XKTEntity```` shares {@link XKTGeometry}s with other {@link XKTEntity}'s.\n *\n * Set by {@link XKTModel#finalize}.\n *\n * Note that when an ````XKTEntity```` shares ````XKTGeometrys````, it shares **all** of its ````XKTGeometrys````. An ````XKTEntity````\n * never shares only some of its ````XKTGeometrys```` - it always shares either the whole set or none at all.\n *\n * @type {Boolean}\n */\n this.hasReusedGeometries = false;\n }\n}\n\nexport {XKTEntity};","/**\n * An element of reusable geometry within an {@link XKTModel}.\n *\n * * Created by {@link XKTModel#createGeometry}\n * * Stored in {@link XKTModel#geometries} and {@link XKTModel#geometriesList}\n * * Referenced by {@link XKTMesh}s, which belong to {@link XKTEntity}s\n *\n * @class XKTGeometry\n */\nclass XKTGeometry {\n\n /**\n * @private\n * @param {*} cfg Configuration for the XKTGeometry.\n * @param {Number} cfg.geometryId Unique ID of the geometry in {@link XKTModel#geometries}.\n * @param {String} cfg.primitiveType Type of this geometry - \"triangles\", \"points\" or \"lines\" so far.\n * @param {Number} cfg.geometryIndex Index of this XKTGeometry in {@link XKTModel#geometriesList}.\n * @param {Float64Array} cfg.positions Non-quantized 3D vertex positions.\n * @param {Float32Array} cfg.normals Non-compressed vertex normals.\n * @param {Uint8Array} cfg.colorsCompressed Unsigned 8-bit integer RGBA vertex colors.\n * @param {Float32Array} cfg.uvs Non-compressed vertex UV coordinates.\n * @param {Uint32Array} cfg.indices Indices to organize the vertex positions and normals into triangles.\n * @param {Uint32Array} cfg.edgeIndices Indices to organize the vertex positions into edges.\n */\n constructor(cfg) {\n\n /**\n * Unique ID of this XKTGeometry in {@link XKTModel#geometries}.\n *\n * @type {Number}\n */\n this.geometryId = cfg.geometryId;\n\n /**\n * The type of primitive - \"triangles\" | \"points\" | \"lines\".\n *\n * @type {String}\n */\n this.primitiveType = cfg.primitiveType;\n\n /**\n * Index of this XKTGeometry in {@link XKTModel#geometriesList}.\n *\n * @type {Number}\n */\n this.geometryIndex = cfg.geometryIndex;\n\n /**\n * The number of {@link XKTMesh}s that reference this XKTGeometry.\n *\n * @type {Number}\n */\n this.numInstances = 0;\n\n /**\n * Non-quantized 3D vertex positions.\n *\n * Defined for all primitive types.\n *\n * @type {Float64Array}\n */\n this.positions = cfg.positions;\n\n /**\n * Quantized vertex positions.\n *\n * Defined for all primitive types.\n *\n * This array is later created from {@link XKTGeometry#positions} by {@link XKTModel#finalize}.\n *\n * @type {Uint16Array}\n */\n this.positionsQuantized = new Uint16Array(cfg.positions.length);\n\n /**\n * Non-compressed 3D vertex normals.\n *\n * Defined only for triangle primitives. Can be null if we want xeokit to auto-generate them. Ignored for points and lines.\n *\n * @type {Float32Array}\n */\n this.normals = cfg.normals;\n\n /**\n * Compressed vertex normals.\n *\n * Defined only for triangle primitives. Ignored for points and lines.\n *\n * This array is later created from {@link XKTGeometry#normals} by {@link XKTModel#finalize}.\n *\n * Will be null if {@link XKTGeometry#normals} is also null.\n *\n * @type {Int8Array}\n */\n this.normalsOctEncoded = null;\n\n /**\n * Compressed RGBA vertex colors.\n *\n * Defined only for point primitives. Ignored for triangles and lines.\n *\n * @type {Uint8Array}\n */\n this.colorsCompressed = cfg.colorsCompressed;\n\n /**\n * Non-compressed vertex UVs.\n *\n * @type {Float32Array}\n */\n this.uvs = cfg.uvs;\n\n /**\n * Compressed vertex UVs.\n *\n * @type {Uint16Array}\n */\n this.uvsCompressed = cfg.uvsCompressed;\n\n /**\n * Indices that organize the vertex positions and normals as triangles.\n *\n * Defined only for triangle and lines primitives. Ignored for points.\n *\n * @type {Uint32Array}\n */\n this.indices = cfg.indices;\n\n /**\n * Indices that organize the vertex positions as edges.\n *\n * Defined only for triangle primitives. Ignored for points and lines.\n *\n * @type {Uint32Array}\n */\n this.edgeIndices = cfg.edgeIndices;\n\n /**\n * When {@link XKTGeometry#primitiveType} is \"triangles\", this is ````true```` when this geometry is a watertight mesh.\n *\n * Defined only for triangle primitives. Ignored for points and lines.\n *\n * Set by {@link XKTModel#finalize}.\n *\n * @type {boolean}\n */\n this.solid = false;\n }\n\n /**\n * Convenience property that is ````true```` when {@link XKTGeometry#numInstances} is greater that one.\n * @returns {boolean}\n */\n get reused() {\n return (this.numInstances > 1);\n }\n}\n\nexport {XKTGeometry};","/**\n * Represents the usage of a {@link XKTGeometry} by an {@link XKTEntity}.\n *\n * * Created by {@link XKTModel#createEntity}\n * * Stored in {@link XKTEntity#meshes} and {@link XKTModel#meshesList}\n * * Has an {@link XKTGeometry}, and an optional {@link XKTTextureSet}, both of which it can share with other {@link XKTMesh}es\n * * Has {@link XKTMesh#color}, {@link XKTMesh#opacity}, {@link XKTMesh#metallic} and {@link XKTMesh#roughness} PBR attributes\n * @class XKTMesh\n */\nclass XKTMesh {\n\n /**\n * @private\n */\n constructor(cfg) {\n\n /**\n * Unique ID of this XKTMesh in {@link XKTModel#meshes}.\n *\n * @type {Number}\n */\n this.meshId = cfg.meshId;\n\n /**\n * Index of this XKTMesh in {@link XKTModel#meshesList};\n *\n * @type {Number}\n */\n this.meshIndex = cfg.meshIndex;\n\n /**\n * The 4x4 modeling transform matrix.\n *\n * Transform is relative to the center of the {@link XKTTile} that contains this XKTMesh's {@link XKTEntity},\n * which is given in {@link XKTMesh#entity}.\n *\n * When the ````XKTEntity```` shares its {@link XKTGeometry}s with other ````XKTEntity````s, this matrix is used\n * to transform this XKTMesh's XKTGeometry into World-space. When this XKTMesh does not share its ````XKTGeometry````,\n * then this matrix is ignored.\n *\n * @type {Number[]}\n */\n this.matrix = cfg.matrix;\n\n /**\n * The instanced {@link XKTGeometry}.\n *\n * @type {XKTGeometry}\n */\n this.geometry = cfg.geometry;\n\n /**\n * RGB color of this XKTMesh.\n *\n * @type {Float32Array}\n */\n this.color = cfg.color || new Float32Array([1, 1, 1]);\n\n /**\n * PBR metallness of this XKTMesh.\n *\n * @type {Number}\n */\n this.metallic = (cfg.metallic !== null && cfg.metallic !== undefined) ? cfg.metallic : 0;\n\n /**\n * PBR roughness of this XKTMesh.\n * The {@link XKTTextureSet} that defines the appearance of this XKTMesh.\n *\n * @type {Number}\n * @type {XKTTextureSet}\n */\n this.roughness = (cfg.roughness !== null && cfg.roughness !== undefined) ? cfg.roughness : 1;\n\n /**\n * Opacity of this XKTMesh.\n *\n * @type {Number}\n */\n this.opacity = (cfg.opacity !== undefined && cfg.opacity !== null) ? cfg.opacity : 1.0;\n\n /**\n * The {@link XKTTextureSet} that defines the appearance of this XKTMesh.\n *\n * @type {XKTTextureSet}\n */\n this.textureSet = cfg.textureSet;\n\n /**\n * The owner {@link XKTEntity}.\n *\n * Set by {@link XKTModel#createEntity}.\n *\n * @type {XKTEntity}\n */\n this.entity = null; // Set after instantiation, when the Entity is known\n }\n}\n\nexport {XKTMesh};","/**\n * A meta object within an {@link XKTModel}.\n *\n * These are plugged together into a parent-child hierarchy to represent structural\n * metadata for the {@link XKTModel}.\n *\n * The leaf XKTMetaObjects are usually associated with\n * an {@link XKTEntity}, which they do so by sharing the same ID,\n * ie. where {@link XKTMetaObject#metaObjectId} == {@link XKTEntity#entityId}.\n *\n * * Created by {@link XKTModel#createMetaObject}\n * * Stored in {@link XKTModel#metaObjects} and {@link XKTModel#metaObjectsList}\n * * Has an ID, a type, and a human-readable name\n * * May have a parent {@link XKTMetaObject}\n * * When no children, is usually associated with an {@link XKTEntity}\n *\n * @class XKTMetaObject\n */\nclass XKTMetaObject {\n\n /**\n * @private\n * @param metaObjectId\n * @param propertySetIds\n * @param metaObjectType\n * @param metaObjectName\n * @param parentMetaObjectId\n */\n constructor(metaObjectId, propertySetIds, metaObjectType, metaObjectName, parentMetaObjectId) {\n\n /**\n * Unique ID of this ````XKTMetaObject```` in {@link XKTModel#metaObjects}.\n *\n * For a BIM model, this will be an IFC product ID.\n *\n * If this is a leaf XKTMetaObject, where it is not a parent to any other XKTMetaObject,\n * then this will be equal to the ID of an {@link XKTEntity} in {@link XKTModel#entities},\n * ie. where {@link XKTMetaObject#metaObjectId} == {@link XKTEntity#entityId}.\n *\n * @type {String}\n */\n this.metaObjectId = metaObjectId;\n\n /**\n * Unique ID of one or more property sets that contains additional metadata about this\n * {@link XKTMetaObject}. The property sets can be stored in an external system, or\n * within the {@link XKTModel}, as {@link XKTPropertySet}s within {@link XKTModel#propertySets}.\n *\n * @type {String[]}\n */\n this.propertySetIds = propertySetIds;\n\n /**\n * Indicates the XKTMetaObject meta object type.\n *\n * This defaults to \"default\".\n *\n * @type {string}\n */\n this.metaObjectType = metaObjectType;\n\n /**\n * Indicates the XKTMetaObject meta object name.\n *\n * This defaults to {@link XKTMetaObject#metaObjectId}.\n *\n * @type {string}\n */\n this.metaObjectName = metaObjectName;\n\n /**\n * The parent XKTMetaObject, if any.\n *\n * Will be null if there is no parent.\n *\n * @type {String}\n */\n this.parentMetaObjectId = parentMetaObjectId;\n }\n}\n\nexport {XKTMetaObject};","import {math} from \"../lib/math.js\";\nimport {geometryCompression} from \"./lib/geometryCompression.js\";\nimport {buildEdgeIndices} from \"./lib/buildEdgeIndices.js\";\nimport {isTriangleMeshSolid} from \"./lib/isTriangleMeshSolid.js\";\n\nimport {XKTMesh} from './XKTMesh.js';\nimport {XKTGeometry} from './XKTGeometry.js';\nimport {XKTEntity} from './XKTEntity.js';\nimport {XKTTile} from './XKTTile.js';\nimport {KDNode} from \"./KDNode.js\";\nimport {XKTMetaObject} from \"./XKTMetaObject.js\";\nimport {XKTPropertySet} from \"./XKTPropertySet.js\";\nimport {mergeVertices} from \"../lib/mergeVertices.js\";\nimport {XKT_INFO} from \"../XKT_INFO.js\";\nimport {XKTTexture} from \"./XKTTexture\";\nimport {XKTTextureSet} from \"./XKTTextureSet\";\nimport {encode, load} from \"@loaders.gl/core\";\nimport {KTX2BasisWriter} from \"@loaders.gl/textures\";\nimport {ImageLoader} from '@loaders.gl/images';\n\nconst tempVec4a = math.vec4([0, 0, 0, 1]);\nconst tempVec4b = math.vec4([0, 0, 0, 1]);\n\nconst tempMat4 = math.mat4();\nconst tempMat4b = math.mat4();\n\nconst kdTreeDimLength = new Float64Array(3);\n\n// XKT texture types\n\nconst COLOR_TEXTURE = 0;\nconst METALLIC_ROUGHNESS_TEXTURE = 1;\nconst NORMALS_TEXTURE = 2;\nconst EMISSIVE_TEXTURE = 3;\nconst OCCLUSION_TEXTURE = 4;\n\n// KTX2 encoding options for each texture type\n\nconst TEXTURE_ENCODING_OPTIONS = {}\nTEXTURE_ENCODING_OPTIONS[COLOR_TEXTURE] = {\n useSRGB: true,\n qualityLevel: 50,\n encodeUASTC: true,\n mipmaps: true\n};\nTEXTURE_ENCODING_OPTIONS[EMISSIVE_TEXTURE] = {\n useSRGB: true,\n encodeUASTC: true,\n qualityLevel: 10,\n mipmaps: false\n};\nTEXTURE_ENCODING_OPTIONS[METALLIC_ROUGHNESS_TEXTURE] = {\n useSRGB: false,\n encodeUASTC: true,\n qualityLevel: 50,\n mipmaps: true // Needed for GGX roughness shading\n};\nTEXTURE_ENCODING_OPTIONS[NORMALS_TEXTURE] = {\n useSRGB: false,\n encodeUASTC: true,\n qualityLevel: 10,\n mipmaps: false\n};\nTEXTURE_ENCODING_OPTIONS[OCCLUSION_TEXTURE] = {\n useSRGB: false,\n encodeUASTC: true,\n qualityLevel: 10,\n mipmaps: false\n};\n\n/**\n * A document model that represents the contents of an .XKT file.\n *\n * * An XKTModel contains {@link XKTTile}s, which spatially subdivide the model into axis-aligned, box-shaped regions.\n * * Each {@link XKTTile} contains {@link XKTEntity}s, which represent the objects within its region.\n * * Each {@link XKTEntity} has {@link XKTMesh}s, which each have a {@link XKTGeometry}. Each {@link XKTGeometry} can be shared by multiple {@link XKTMesh}s.\n * * Import models into an XKTModel using {@link parseGLTFJSONIntoXKTModel}, {@link parseIFCIntoXKTModel}, {@link parseCityJSONIntoXKTModel} etc.\n * * Build an XKTModel programmatically using {@link XKTModel#createGeometry}, {@link XKTModel#createMesh} and {@link XKTModel#createEntity}.\n * * Serialize an XKTModel to an ArrayBuffer using {@link writeXKTModelToArrayBuffer}.\n *\n * ## Usage\n *\n * See [main docs page](/docs/#javascript-api) for usage examples.\n *\n * @class XKTModel\n */\nclass XKTModel {\n\n /**\n * Constructs a new XKTModel.\n *\n * @param {*} [cfg] Configuration\n * @param {Number} [cfg.edgeThreshold=10]\n * @param {Number} [cfg.minTileSize=500]\n */\n constructor(cfg = {}) {\n\n /**\n * The model's ID, if available.\n *\n * Will be \"default\" by default.\n *\n * @type {String}\n */\n this.modelId = cfg.modelId || \"default\";\n\n /**\n * The project ID, if available.\n *\n * Will be an empty string by default.\n *\n * @type {String}\n */\n this.projectId = cfg.projectId || \"\";\n\n /**\n * The revision ID, if available.\n *\n * Will be an empty string by default.\n *\n * @type {String}\n */\n this.revisionId = cfg.revisionId || \"\";\n\n /**\n * The model author, if available.\n *\n * Will be an empty string by default.\n *\n * @property author\n * @type {String}\n */\n this.author = cfg.author || \"\";\n\n /**\n * The date the model was created, if available.\n *\n * Will be an empty string by default.\n *\n * @property createdAt\n * @type {String}\n */\n this.createdAt = cfg.createdAt || \"\";\n\n /**\n * The application that created the model, if available.\n *\n * Will be an empty string by default.\n *\n * @property creatingApplication\n * @type {String}\n */\n this.creatingApplication = cfg.creatingApplication || \"\";\n\n /**\n * The model schema version, if available.\n *\n * In the case of IFC, this could be \"IFC2x3\" or \"IFC4\", for example.\n *\n * Will be an empty string by default.\n *\n * @property schema\n * @type {String}\n */\n this.schema = cfg.schema || \"\";\n\n /**\n * The XKT format version.\n *\n * @property xktVersion;\n * @type {number}\n */\n this.xktVersion = XKT_INFO.xktVersion;\n\n /**\n *\n * @type {Number|number}\n */\n this.edgeThreshold = cfg.edgeThreshold || 10;\n\n /**\n * Minimum diagonal size of the boundary of an {@link XKTTile}.\n *\n * @type {Number|number}\n */\n this.minTileSize = cfg.minTileSize || 500;\n\n /**\n * Optional overall AABB that contains all the {@link XKTEntity}s we'll create in this model, if previously known.\n *\n * This is the AABB of a complete set of input files that are provided as a split-model set for conversion.\n *\n * This is used to help the {@link XKTTile.aabb}s within split models align neatly with each other, as we\n * build them with a k-d tree in {@link XKTModel#finalize}. Without this, the AABBs of the different parts\n * tend to misalign slightly, resulting in excess number of {@link XKTTile}s, which degrades memory and rendering\n * performance when the XKT is viewer in the xeokit Viewer.\n */\n this.modelAABB = cfg.modelAABB;\n\n /**\n * Map of {@link XKTPropertySet}s within this XKTModel, each mapped to {@link XKTPropertySet#propertySetId}.\n *\n * Created by {@link XKTModel#createPropertySet}.\n *\n * @type {{String:XKTPropertySet}}\n */\n this.propertySets = {};\n\n /**\n * {@link XKTPropertySet}s within this XKTModel.\n *\n * Each XKTPropertySet holds its position in this list in {@link XKTPropertySet#propertySetIndex}.\n *\n * Created by {@link XKTModel#finalize}.\n *\n * @type {XKTPropertySet[]}\n */\n this.propertySetsList = [];\n\n /**\n * Map of {@link XKTMetaObject}s within this XKTModel, each mapped to {@link XKTMetaObject#metaObjectId}.\n *\n * Created by {@link XKTModel#createMetaObject}.\n *\n * @type {{String:XKTMetaObject}}\n */\n this.metaObjects = {};\n\n /**\n * {@link XKTMetaObject}s within this XKTModel.\n *\n * Each XKTMetaObject holds its position in this list in {@link XKTMetaObject#metaObjectIndex}.\n *\n * Created by {@link XKTModel#finalize}.\n *\n * @type {XKTMetaObject[]}\n */\n this.metaObjectsList = [];\n\n /**\n * The positions of all shared {@link XKTGeometry}s are de-quantized using this singular\n * de-quantization matrix.\n *\n * This de-quantization matrix is generated from the collective Local-space boundary of the\n * positions of all shared {@link XKTGeometry}s.\n *\n * @type {Float32Array}\n */\n this.reusedGeometriesDecodeMatrix = new Float32Array(16);\n\n /**\n * Map of {@link XKTGeometry}s within this XKTModel, each mapped to {@link XKTGeometry#geometryId}.\n *\n * Created by {@link XKTModel#createGeometry}.\n *\n * @type {{Number:XKTGeometry}}\n */\n this.geometries = {};\n\n /**\n * List of {@link XKTGeometry}s within this XKTModel, in the order they were created.\n *\n * Each XKTGeometry holds its position in this list in {@link XKTGeometry#geometryIndex}.\n *\n * Created by {@link XKTModel#finalize}.\n *\n * @type {XKTGeometry[]}\n */\n this.geometriesList = [];\n\n /**\n * Map of {@link XKTTexture}s within this XKTModel, each mapped to {@link XKTTexture#textureId}.\n *\n * Created by {@link XKTModel#createTexture}.\n *\n * @type {{Number:XKTTexture}}\n */\n this.textures = {};\n\n /**\n * List of {@link XKTTexture}s within this XKTModel, in the order they were created.\n *\n * Each XKTTexture holds its position in this list in {@link XKTTexture#textureIndex}.\n *\n * Created by {@link XKTModel#finalize}.\n *\n * @type {XKTTexture[]}\n */\n this.texturesList = [];\n\n /**\n * Map of {@link XKTTextureSet}s within this XKTModel, each mapped to {@link XKTTextureSet#textureSetId}.\n *\n * Created by {@link XKTModel#createTextureSet}.\n *\n * @type {{Number:XKTTextureSet}}\n */\n this.textureSets = {};\n\n /**\n * List of {@link XKTTextureSet}s within this XKTModel, in the order they were created.\n *\n * Each XKTTextureSet holds its position in this list in {@link XKTTextureSet#textureSetIndex}.\n *\n * Created by {@link XKTModel#finalize}.\n *\n * @type {XKTTextureSet[]}\n */\n this.textureSetsList = [];\n\n /**\n * Map of {@link XKTMesh}s within this XKTModel, each mapped to {@link XKTMesh#meshId}.\n *\n * Created by {@link XKTModel#createMesh}.\n *\n * @type {{Number:XKTMesh}}\n */\n this.meshes = {};\n\n /**\n * List of {@link XKTMesh}s within this XKTModel, in the order they were created.\n *\n * Each XKTMesh holds its position in this list in {@link XKTMesh#meshIndex}.\n *\n * Created by {@link XKTModel#finalize}.\n *\n * @type {XKTMesh[]}\n */\n this.meshesList = [];\n\n /**\n * Map of {@link XKTEntity}s within this XKTModel, each mapped to {@link XKTEntity#entityId}.\n *\n * Created by {@link XKTModel#createEntity}.\n *\n * @type {{String:XKTEntity}}\n */\n this.entities = {};\n\n /**\n * {@link XKTEntity}s within this XKTModel.\n *\n * Each XKTEntity holds its position in this list in {@link XKTEntity#entityIndex}.\n *\n * Created by {@link XKTModel#finalize}.\n *\n * @type {XKTEntity[]}\n */\n this.entitiesList = [];\n\n /**\n * {@link XKTTile}s within this XKTModel.\n *\n * Created by {@link XKTModel#finalize}.\n *\n * @type {XKTTile[]}\n */\n this.tilesList = [];\n\n /**\n * The axis-aligned 3D World-space boundary of this XKTModel.\n *\n * Created by {@link XKTModel#finalize}.\n *\n * @type {Float64Array}\n */\n this.aabb = math.AABB3();\n\n /**\n * Indicates if this XKTModel has been finalized.\n *\n * Set ````true```` by {@link XKTModel#finalize}.\n *\n * @type {boolean}\n */\n this.finalized = false;\n }\n\n /**\n * Creates an {@link XKTPropertySet} within this XKTModel.\n *\n * Logs error and does nothing if this XKTModel has been finalized (see {@link XKTModel#finalized}).\n *\n * @param {*} params Method parameters.\n * @param {String} params.propertySetId Unique ID for the {@link XKTPropertySet}.\n * @param {String} [params.propertySetType=\"default\"] A meta type for the {@link XKTPropertySet}.\n * @param {String} [params.propertySetName] Human-readable name for the {@link XKTPropertySet}. Defaults to the ````propertySetId```` parameter.\n * @param {String[]} params.properties Properties for the {@link XKTPropertySet}.\n * @returns {XKTPropertySet} The new {@link XKTPropertySet}.\n */\n createPropertySet(params) {\n\n if (!params) {\n throw \"[XKTModel.createPropertySet] Parameters expected: params\";\n }\n\n if (params.propertySetId === null || params.propertySetId === undefined) {\n throw \"[XKTModel.createPropertySet] Parameter expected: params.propertySetId\";\n }\n\n if (params.properties === null || params.properties === undefined) {\n throw \"[XKTModel.createPropertySet] Parameter expected: params.properties\";\n }\n\n if (this.finalized) {\n console.error(\"XKTModel has been finalized, can't add more property sets\");\n return;\n }\n\n if (this.propertySets[params.propertySetId]) {\n // console.error(\"XKTPropertySet already exists with this ID: \" + params.propertySetId);\n return;\n }\n\n const propertySetId = params.propertySetId;\n const propertySetType = params.propertySetType || \"Default\";\n const propertySetName = params.propertySetName || params.propertySetId;\n const properties = params.properties || [];\n\n const propertySet = new XKTPropertySet(propertySetId, propertySetType, propertySetName, properties);\n\n this.propertySets[propertySetId] = propertySet;\n this.propertySetsList.push(propertySet);\n\n return propertySet;\n }\n\n /**\n * Creates an {@link XKTMetaObject} within this XKTModel.\n *\n * Logs error and does nothing if this XKTModel has been finalized (see {@link XKTModel#finalized}).\n *\n * @param {*} params Method parameters.\n * @param {String} params.metaObjectId Unique ID for the {@link XKTMetaObject}.\n * @param {String} params.propertySetIds ID of one or more property sets that contains additional metadata about\n * this {@link XKTMetaObject}. The property sets could be stored externally (ie not managed at all by the XKT file),\n * or could be {@link XKTPropertySet}s within {@link XKTModel#propertySets}.\n * @param {String} [params.metaObjectType=\"default\"] A meta type for the {@link XKTMetaObject}. Can be anything,\n * but is usually an IFC type, such as \"IfcSite\" or \"IfcWall\".\n * @param {String} [params.metaObjectName] Human-readable name for the {@link XKTMetaObject}. Defaults to the ````metaObjectId```` parameter.\n * @param {String} [params.parentMetaObjectId] ID of the parent {@link XKTMetaObject}, if any. Defaults to the ````metaObjectId```` parameter.\n * @returns {XKTMetaObject} The new {@link XKTMetaObject}.\n */\n createMetaObject(params) {\n\n if (!params) {\n throw \"[XKTModel.createMetaObject] Parameters expected: params\";\n }\n\n if (params.metaObjectId === null || params.metaObjectId === undefined) {\n throw \"[XKTModel.createMetaObject] Parameter expected: params.metaObjectId\";\n }\n\n if (this.finalized) {\n console.error(\"XKTModel has been finalized, can't add more meta objects\");\n return;\n }\n\n if (this.metaObjects[params.metaObjectId]) {\n // console.error(\"XKTMetaObject already exists with this ID: \" + params.metaObjectId);\n return;\n }\n\n const metaObjectId = params.metaObjectId;\n const propertySetIds = params.propertySetIds;\n const metaObjectType = params.metaObjectType || \"Default\";\n const metaObjectName = params.metaObjectName || params.metaObjectId;\n const parentMetaObjectId = params.parentMetaObjectId;\n\n const metaObject = new XKTMetaObject(metaObjectId, propertySetIds, metaObjectType, metaObjectName, parentMetaObjectId);\n\n this.metaObjects[metaObjectId] = metaObject;\n this.metaObjectsList.push(metaObject);\n\n if (!parentMetaObjectId) {\n if (!this._rootMetaObject) {\n this._rootMetaObject = metaObject;\n }\n }\n\n return metaObject;\n }\n\n /**\n * Creates an {@link XKTTexture} within this XKTModel.\n *\n * Registers the new {@link XKTTexture} in {@link XKTModel#textures} and {@link XKTModel#texturesList}.\n *\n * Logs error and does nothing if this XKTModel has been finalized (see {@link XKTModel#finalized}).\n *\n * @param {*} params Method parameters.\n * @param {Number} params.textureId Unique ID for the {@link XKTTexture}.\n * @param {String} [params.src] Source of an image file for the texture.\n * @param {Buffer} [params.imageData] Image data for the texture.\n * @param {Number} [params.mediaType] Media type (ie. MIME type) of ````imageData````. Supported values are {@link GIFMediaType}, {@link PNGMediaType} and {@link JPEGMediaType}.\n * @param {Number} [params.width] Texture width, used with ````imageData````. Ignored for compressed textures.\n * @param {Number} [params.height] Texture height, used with ````imageData````. Ignored for compressed textures.\n * @param {Boolean} [params.compressed=true] Whether to compress the texture.\n * @param {Number} [params.minFilter=LinearMipMapNearestFilter] How the texture is sampled when a texel covers less than one pixel. Supported\n * values are {@link LinearMipmapLinearFilter}, {@link LinearMipMapNearestFilter}, {@link NearestMipMapNearestFilter},\n * {@link NearestMipMapLinearFilter} and {@link LinearMipMapLinearFilter}. Ignored for compressed textures.\n * @param {Number} [params.magFilter=LinearMipMapNearestFilter] How the texture is sampled when a texel covers more than one pixel. Supported values\n * are {@link LinearFilter} and {@link NearestFilter}. Ignored for compressed textures.\n * @param {Number} [params.wrapS=RepeatWrapping] Wrap parameter for texture coordinate *S*. Supported values are {@link ClampToEdgeWrapping},\n * {@link MirroredRepeatWrapping} and {@link RepeatWrapping}. Ignored for compressed textures.\n * @param {Number} [params.wrapT=RepeatWrapping] Wrap parameter for texture coordinate *T*. Supported values are {@link ClampToEdgeWrapping},\n * {@link MirroredRepeatWrapping} and {@link RepeatWrapping}. Ignored for compressed textures.\n * {@param {Number} [params.wrapR=RepeatWrapping] Wrap parameter for texture coordinate *R*. Supported values are {@link ClampToEdgeWrapping},\n * {@link MirroredRepeatWrapping} and {@link RepeatWrapping}. Ignored for compressed textures.\n * @returns {XKTTexture} The new {@link XKTTexture}.\n */\n createTexture(params) {\n\n if (!params) {\n throw \"[XKTModel.createTexture] Parameters expected: params\";\n }\n\n if (params.textureId === null || params.textureId === undefined) {\n throw \"[XKTModel.createTexture] Parameter expected: params.textureId\";\n }\n\n if (!params.imageData && !params.src) {\n throw \"[XKTModel.createTexture] Parameter expected: params.imageData or params.src\";\n }\n\n if (this.finalized) {\n console.error(\"XKTModel has been finalized, can't add more textures\");\n return;\n }\n\n if (this.textures[params.textureId]) {\n console.error(\"XKTTexture already exists with this ID: \" + params.textureId);\n return;\n }\n\n if (params.src) {\n const fileExt = params.src.split('.').pop();\n if (fileExt !== \"jpg\" && fileExt !== \"jpeg\" && fileExt !== \"png\") {\n console.error(`XKTModel does not support image files with extension '${fileExt}' - won't create texture '${params.textureId}`);\n return;\n }\n }\n\n const textureId = params.textureId;\n\n const texture = new XKTTexture({\n textureId,\n imageData: params.imageData,\n mediaType: params.mediaType,\n minFilter: params.minFilter,\n magFilter: params.magFilter,\n wrapS: params.wrapS,\n wrapT: params.wrapT,\n wrapR: params.wrapR,\n width: params.width,\n height: params.height,\n compressed: (params.compressed !== false),\n src: params.src\n });\n\n this.textures[textureId] = texture;\n this.texturesList.push(texture);\n\n return texture;\n }\n\n /**\n * Creates an {@link XKTTextureSet} within this XKTModel.\n *\n * Registers the new {@link XKTTextureSet} in {@link XKTModel#textureSets} and {@link XKTModel#.textureSetsList}.\n *\n * Logs error and does nothing if this XKTModel has been finalized (see {@link XKTModel#finalized}).\n *\n * @param {*} params Method parameters.\n * @param {Number} params.textureSetId Unique ID for the {@link XKTTextureSet}.\n * @param {*} [params.colorTextureId] ID of *RGBA* base color {@link XKTTexture}, with color in *RGB* and alpha in *A*.\n * @param {*} [params.metallicRoughnessTextureId] ID of *RGBA* metal-roughness {@link XKTTexture}, with the metallic factor in *R*, and roughness factor in *G*.\n * @param {*} [params.normalsTextureId] ID of *RGBA* normal {@link XKTTexture}, with normal map vectors in *RGB*.\n * @param {*} [params.emissiveTextureId] ID of *RGBA* emissive {@link XKTTexture}, with emissive color in *RGB*.\n * @param {*} [params.occlusionTextureId] ID of *RGBA* occlusion {@link XKTTexture}, with occlusion factor in *R*.\n * @returns {XKTTextureSet} The new {@link XKTTextureSet}.\n */\n createTextureSet(params) {\n\n if (!params) {\n throw \"[XKTModel.createTextureSet] Parameters expected: params\";\n }\n\n if (params.textureSetId === null || params.textureSetId === undefined) {\n throw \"[XKTModel.createTextureSet] Parameter expected: params.textureSetId\";\n }\n\n if (this.finalized) {\n console.error(\"XKTModel has been finalized, can't add more textureSets\");\n return;\n }\n\n if (this.textureSets[params.textureSetId]) {\n console.error(\"XKTTextureSet already exists with this ID: \" + params.textureSetId);\n return;\n }\n\n let colorTexture;\n if (params.colorTextureId !== undefined && params.colorTextureId !== null) {\n colorTexture = this.textures[params.colorTextureId];\n if (!colorTexture) {\n console.error(`Texture not found: ${params.colorTextureId} - ensure that you create it first with createTexture()`);\n return;\n }\n colorTexture.channel = COLOR_TEXTURE;\n }\n\n let metallicRoughnessTexture;\n if (params.metallicRoughnessTextureId !== undefined && params.metallicRoughnessTextureId !== null) {\n metallicRoughnessTexture = this.textures[params.metallicRoughnessTextureId];\n if (!metallicRoughnessTexture) {\n console.error(`Texture not found: ${params.metallicRoughnessTextureId} - ensure that you create it first with createTexture()`);\n return;\n }\n metallicRoughnessTexture.channel = METALLIC_ROUGHNESS_TEXTURE;\n }\n\n let normalsTexture;\n if (params.normalsTextureId !== undefined && params.normalsTextureId !== null) {\n normalsTexture = this.textures[params.normalsTextureId];\n if (!normalsTexture) {\n console.error(`Texture not found: ${params.normalsTextureId} - ensure that you create it first with createTexture()`);\n return;\n }\n normalsTexture.channel = NORMALS_TEXTURE;\n }\n\n let emissiveTexture;\n if (params.emissiveTextureId !== undefined && params.emissiveTextureId !== null) {\n emissiveTexture = this.textures[params.emissiveTextureId];\n if (!emissiveTexture) {\n console.error(`Texture not found: ${params.emissiveTextureId} - ensure that you create it first with createTexture()`);\n return;\n }\n emissiveTexture.channel = EMISSIVE_TEXTURE;\n }\n\n let occlusionTexture;\n if (params.occlusionTextureId !== undefined && params.occlusionTextureId !== null) {\n occlusionTexture = this.textures[params.occlusionTextureId];\n if (!occlusionTexture) {\n console.error(`Texture not found: ${params.occlusionTextureId} - ensure that you create it first with createTexture()`);\n return;\n }\n occlusionTexture.channel = OCCLUSION_TEXTURE;\n }\n\n const textureSet = new XKTTextureSet({\n textureSetId: params.textureSetId,\n textureSetIndex: this.textureSetsList.length,\n colorTexture,\n metallicRoughnessTexture,\n normalsTexture,\n emissiveTexture,\n occlusionTexture\n });\n\n this.textureSets[params.textureSetId] = textureSet;\n this.textureSetsList.push(textureSet);\n\n return textureSet;\n }\n\n /**\n * Creates an {@link XKTGeometry} within this XKTModel.\n *\n * Registers the new {@link XKTGeometry} in {@link XKTModel#geometries} and {@link XKTModel#geometriesList}.\n *\n * Logs error and does nothing if this XKTModel has been finalized (see {@link XKTModel#finalized}).\n *\n * @param {*} params Method parameters.\n * @param {Number} params.geometryId Unique ID for the {@link XKTGeometry}.\n * @param {String} params.primitiveType The type of {@link XKTGeometry}: \"triangles\", \"lines\" or \"points\".\n * @param {Float64Array} params.positions Floating-point Local-space vertex positions for the {@link XKTGeometry}. Required for all primitive types.\n * @param {Number[]} [params.normals] Floating-point vertex normals for the {@link XKTGeometry}. Only used with triangles primitives. Ignored for points and lines.\n * @param {Number[]} [params.colors] Floating-point RGBA vertex colors for the {@link XKTGeometry}. Required for points primitives. Ignored for lines and triangles.\n * @param {Number[]} [params.colorsCompressed] Integer RGBA vertex colors for the {@link XKTGeometry}. Required for points primitives. Ignored for lines and triangles.\n * @param {Number[]} [params.uvs] Floating-point vertex UV coordinates for the {@link XKTGeometry}. Alias for ````uv````.\n * @param {Number[]} [params.uv] Floating-point vertex UV coordinates for the {@link XKTGeometry}. Alias for ````uvs````.\n * @param {Number[]} [params.colorsCompressed] Integer RGBA vertex colors for the {@link XKTGeometry}. Required for points primitives. Ignored for lines and triangles.\n * @param {Uint32Array} [params.indices] Indices for the {@link XKTGeometry}. Required for triangles and lines primitives. Ignored for points.\n * @param {Number} [params.edgeThreshold=10]\n * @returns {XKTGeometry} The new {@link XKTGeometry}.\n */\n createGeometry(params) {\n\n if (!params) {\n throw \"[XKTModel.createGeometry] Parameters expected: params\";\n }\n\n if (params.geometryId === null || params.geometryId === undefined) {\n throw \"[XKTModel.createGeometry] Parameter expected: params.geometryId\";\n }\n\n if (!params.primitiveType) {\n throw \"[XKTModel.createGeometry] Parameter expected: params.primitiveType\";\n }\n\n if (!params.positions) {\n throw \"[XKTModel.createGeometry] Parameter expected: params.positions\";\n }\n\n const triangles = params.primitiveType === \"triangles\";\n const points = params.primitiveType === \"points\";\n const lines = params.primitiveType === \"lines\";\n const line_strip = params.primitiveType === \"line-strip\";\n const line_loop = params.primitiveType === \"line-loop\";\n const triangle_strip = params.primitiveType === \"triangle-strip\";\n const triangle_fan = params.primitiveType === \"triangle-fan\";\n\n if (!triangles && !points && !lines && !line_strip && !line_loop) {\n throw \"[XKTModel.createGeometry] Unsupported value for params.primitiveType: \"\n + params.primitiveType\n + \"' - supported values are 'triangles', 'points', 'lines', 'line-strip', 'triangle-strip' and 'triangle-fan\";\n }\n\n if (triangles) {\n if (!params.indices) {\n params.indices = this._createDefaultIndices()\n throw \"[XKTModel.createGeometry] Parameter expected for 'triangles' primitive: params.indices\";\n }\n }\n\n if (points) {\n if (!params.colors && !params.colorsCompressed) {\n console.error(\"[XKTModel.createGeometry] Parameter expected for 'points' primitive: params.colors or params.colorsCompressed\");\n return;\n }\n }\n\n if (lines) {\n if (!params.indices) {\n throw \"[XKTModel.createGeometry] Parameter expected for 'lines' primitive: params.indices\";\n }\n }\n\n if (this.finalized) {\n console.error(\"XKTModel has been finalized, can't add more geometries\");\n return;\n }\n\n if (this.geometries[params.geometryId]) {\n console.error(\"XKTGeometry already exists with this ID: \" + params.geometryId);\n return;\n }\n\n const geometryId = params.geometryId;\n const primitiveType = params.primitiveType;\n const positions = new Float64Array(params.positions); // May modify in #finalize\n\n const xktGeometryCfg = {\n geometryId: geometryId,\n geometryIndex: this.geometriesList.length,\n primitiveType: primitiveType,\n positions: positions,\n uvs: params.uvs || params.uv\n }\n\n if (triangles) {\n if (params.normals) {\n xktGeometryCfg.normals = new Float32Array(params.normals);\n }\n if (params.indices) {\n xktGeometryCfg.indices = params.indices;\n } else {\n xktGeometryCfg.indices = this._createDefaultIndices(positions.length / 3);\n }\n }\n\n if (points) {\n if (params.colorsCompressed) {\n xktGeometryCfg.colorsCompressed = new Uint8Array(params.colorsCompressed);\n\n } else {\n const colors = params.colors;\n const colorsCompressed = new Uint8Array(colors.length);\n for (let i = 0, len = colors.length; i < len; i++) {\n colorsCompressed[i] = Math.floor(colors[i] * 255);\n }\n xktGeometryCfg.colorsCompressed = colorsCompressed;\n }\n }\n\n if (lines) {\n xktGeometryCfg.indices = params.indices;\n }\n\n if (triangles) {\n\n if (!params.normals && !params.uv && !params.uvs) {\n\n // Building models often duplicate positions to allow face-aligned vertex normals; when we're not\n // providing normals for a geometry, it becomes possible to merge duplicate vertex positions within it.\n\n // TODO: Make vertex merging also merge normals?\n\n const mergedPositions = [];\n const mergedIndices = [];\n mergeVertices(xktGeometryCfg.positions, xktGeometryCfg.indices, mergedPositions, mergedIndices);\n xktGeometryCfg.positions = new Float64Array(mergedPositions);\n xktGeometryCfg.indices = mergedIndices;\n }\n\n xktGeometryCfg.edgeIndices = buildEdgeIndices(xktGeometryCfg.positions, xktGeometryCfg.indices, null, params.edgeThreshold || this.edgeThreshold || 10);\n }\n\n const geometry = new XKTGeometry(xktGeometryCfg);\n\n this.geometries[geometryId] = geometry;\n this.geometriesList.push(geometry);\n\n return geometry;\n }\n\n _createDefaultIndices(numIndices) {\n const indices = [];\n for (let i = 0; i < numIndices; i++) {\n indices.push(i);\n }\n return indices;\n }\n\n /**\n * Creates an {@link XKTMesh} within this XKTModel.\n *\n * An {@link XKTMesh} can be owned by one {@link XKTEntity}, which can own multiple {@link XKTMesh}es.\n *\n * Registers the new {@link XKTMesh} in {@link XKTModel#meshes} and {@link XKTModel#meshesList}.\n *\n * @param {*} params Method parameters.\n * @param {Number} params.meshId Unique ID for the {@link XKTMesh}.\n * @param {Number} params.geometryId ID of an existing {@link XKTGeometry} in {@link XKTModel#geometries}.\n * @param {Number} [params.textureSetId] Unique ID of an {@link XKTTextureSet} in {@link XKTModel#textureSets}.\n * @param {Float32Array} params.color RGB color for the {@link XKTMesh}, with each color component in range [0..1].\n * @param {Number} [params.metallic=0] How metallic the {@link XKTMesh} is, in range [0..1]. A value of ````0```` indicates fully dielectric material, while ````1```` indicates fully metallic.\n * @param {Number} [params.roughness=1] How rough the {@link XKTMesh} is, in range [0..1]. A value of ````0```` indicates fully smooth, while ````1```` indicates fully rough.\n * @param {Number} params.opacity Opacity factor for the {@link XKTMesh}, in range [0..1].\n * @param {Float64Array} [params.matrix] Modeling matrix for the {@link XKTMesh}. Overrides ````position````, ````scale```` and ````rotation```` parameters.\n * @param {Number[]} [params.position=[0,0,0]] Position of the {@link XKTMesh}. Overridden by the ````matrix```` parameter.\n * @param {Number[]} [params.scale=[1,1,1]] Scale of the {@link XKTMesh}. Overridden by the ````matrix```` parameter.\n * @param {Number[]} [params.rotation=[0,0,0]] Rotation of the {@link XKTMesh} as Euler angles given in degrees, for each of the X, Y and Z axis. Overridden by the ````matrix```` parameter.\n * @returns {XKTMesh} The new {@link XKTMesh}.\n */\n createMesh(params) {\n\n if (params.meshId === null || params.meshId === undefined) {\n throw \"[XKTModel.createMesh] Parameter expected: params.meshId\";\n }\n\n if (params.geometryId === null || params.geometryId === undefined) {\n throw \"[XKTModel.createMesh] Parameter expected: params.geometryId\";\n }\n\n if (this.finalized) {\n throw \"[XKTModel.createMesh] XKTModel has been finalized, can't add more meshes\";\n }\n\n if (this.meshes[params.meshId]) {\n console.error(\"XKTMesh already exists with this ID: \" + params.meshId);\n return;\n }\n\n const geometry = this.geometries[params.geometryId];\n\n if (!geometry) {\n console.error(\"XKTGeometry not found: \" + params.geometryId);\n return;\n }\n\n geometry.numInstances++;\n\n let textureSet = null;\n if (params.textureSetId) {\n textureSet = this.textureSets[params.textureSetId];\n if (!textureSet) {\n console.error(\"XKTTextureSet not found: \" + params.textureSetId);\n return;\n }\n textureSet.numInstances++;\n }\n\n let matrix = params.matrix;\n\n if (!matrix) {\n\n const position = params.position;\n const scale = params.scale;\n const rotation = params.rotation;\n\n if (position || scale || rotation) {\n matrix = math.identityMat4();\n const quaternion = math.eulerToQuaternion(rotation || [0, 0, 0], \"XYZ\", math.identityQuaternion());\n math.composeMat4(position || [0, 0, 0], quaternion, scale || [1, 1, 1], matrix)\n\n } else {\n matrix = math.identityMat4();\n }\n }\n\n const meshIndex = this.meshesList.length;\n\n const mesh = new XKTMesh({\n meshId: params.meshId,\n meshIndex,\n matrix,\n geometry,\n color: params.color,\n metallic: params.metallic,\n roughness: params.roughness,\n opacity: params.opacity,\n textureSet\n });\n\n this.meshes[mesh.meshId] = mesh;\n this.meshesList.push(mesh);\n\n return mesh;\n }\n\n /**\n * Creates an {@link XKTEntity} within this XKTModel.\n *\n * Registers the new {@link XKTEntity} in {@link XKTModel#entities} and {@link XKTModel#entitiesList}.\n *\n * Logs error and does nothing if this XKTModel has been finalized (see {@link XKTModel#finalized}).\n *\n * @param {*} params Method parameters.\n * @param {String} params.entityId Unique ID for the {@link XKTEntity}.\n * @param {String[]} params.meshIds IDs of {@link XKTMesh}es used by the {@link XKTEntity}. Note that each {@link XKTMesh} can only be used by one {@link XKTEntity}.\n * @returns {XKTEntity} The new {@link XKTEntity}.\n */\n createEntity(params) {\n\n if (!params) {\n throw \"[XKTModel.createEntity] Parameters expected: params\";\n }\n\n if (params.entityId === null || params.entityId === undefined) {\n throw \"[XKTModel.createEntity] Parameter expected: params.entityId\";\n }\n\n if (!params.meshIds) {\n throw \"[XKTModel.createEntity] Parameter expected: params.meshIds\";\n }\n\n if (this.finalized) {\n console.error(\"XKTModel has been finalized, can't add more entities\");\n return;\n }\n\n if (params.meshIds.length === 0) {\n console.warn(\"XKTEntity has no meshes - won't create: \" + params.entityId);\n return;\n }\n\n let entityId = params.entityId;\n\n if (this.entities[entityId]) {\n while (this.entities[entityId]) {\n entityId = math.createUUID();\n }\n console.error(\"XKTEntity already exists with this ID: \" + params.entityId + \" - substituting random ID instead: \" + entityId);\n }\n\n const meshIds = params.meshIds;\n const meshes = [];\n\n for (let meshIdIdx = 0, meshIdLen = meshIds.length; meshIdIdx < meshIdLen; meshIdIdx++) {\n\n const meshId = meshIds[meshIdIdx];\n const mesh = this.meshes[meshId];\n\n if (!mesh) {\n console.error(\"XKTMesh found: \" + meshId);\n continue;\n }\n\n if (mesh.entity) {\n console.error(\"XKTMesh \" + meshId + \" already used by XKTEntity \" + mesh.entity.entityId);\n continue;\n }\n\n meshes.push(mesh);\n }\n\n const entity = new XKTEntity(entityId, meshes);\n\n for (let i = 0, len = meshes.length; i < len; i++) {\n const mesh = meshes[i];\n mesh.entity = entity;\n }\n\n this.entities[entityId] = entity;\n this.entitiesList.push(entity);\n\n return entity;\n }\n\n /**\n * Creates a default {@link XKTMetaObject} for each {@link XKTEntity} that does not already have one.\n */\n createDefaultMetaObjects() {\n\n for (let i = 0, len = this.entitiesList.length; i < len; i++) {\n\n const entity = this.entitiesList[i];\n const metaObjectId = entity.entityId;\n const metaObject = this.metaObjects[metaObjectId];\n\n if (!metaObject) {\n\n if (!this._rootMetaObject) {\n this._rootMetaObject = this.createMetaObject({\n metaObjectId: this.modelId,\n metaObjectType: \"Default\",\n metaObjectName: this.modelId\n });\n }\n\n this.createMetaObject({\n metaObjectId: metaObjectId,\n metaObjectType: \"Default\",\n metaObjectName: \"\" + metaObjectId,\n parentMetaObjectId: this._rootMetaObject.metaObjectId\n });\n }\n }\n }\n\n /**\n * Finalizes this XKTModel.\n *\n * After finalizing, we may then serialize the model to an array buffer using {@link writeXKTModelToArrayBuffer}.\n *\n * Logs error and does nothing if this XKTModel has already been finalized.\n *\n * Internally, this method:\n *\n * * for each {@link XKTEntity} that doesn't already have a {@link XKTMetaObject}, creates one with {@link XKTMetaObject#metaObjectType} set to \"default\"\n * * sets each {@link XKTEntity}'s {@link XKTEntity#hasReusedGeometries} true if it shares its {@link XKTGeometry}s with other {@link XKTEntity}s,\n * * creates each {@link XKTEntity}'s {@link XKTEntity#aabb},\n * * creates {@link XKTTile}s in {@link XKTModel#tilesList}, and\n * * sets {@link XKTModel#finalized} ````true````.\n */\n async finalize() {\n\n if (this.finalized) {\n console.log(\"XKTModel already finalized\");\n return;\n }\n\n this._removeUnusedTextures();\n\n await this._compressTextures();\n\n this._bakeSingleUseGeometryPositions();\n\n this._bakeAndOctEncodeNormals();\n\n this._createEntityAABBs();\n\n const rootKDNode = this._createKDTree();\n\n this.entitiesList = [];\n\n this._createTilesFromKDTree(rootKDNode);\n\n this._createReusedGeometriesDecodeMatrix();\n\n this._flagSolidGeometries();\n\n this.aabb.set(rootKDNode.aabb);\n\n this.finalized = true;\n }\n\n _removeUnusedTextures() {\n let texturesList = [];\n const textures = {};\n for (let i = 0, leni = this.texturesList.length; i < leni; i++) {\n const texture = this.texturesList[i];\n if (texture.channel !== null) {\n texture.textureIndex = texturesList.length;\n texturesList.push(texture);\n textures[texture.textureId] = texture;\n }\n }\n this.texturesList = texturesList;\n this.textures = textures;\n }\n\n _compressTextures() {\n let countTextures = this.texturesList.length;\n return new Promise((resolve) => {\n if (countTextures === 0) {\n resolve();\n return;\n }\n for (let i = 0, leni = this.texturesList.length; i < leni; i++) {\n const texture = this.texturesList[i];\n const encodingOptions = TEXTURE_ENCODING_OPTIONS[texture.channel] || {};\n\n if (texture.src) {\n\n // XKTTexture created with XKTModel#createTexture({ src: ... })\n\n const src = texture.src;\n const fileExt = src.split('.').pop();\n switch (fileExt) {\n case \"jpeg\":\n case \"jpg\":\n case \"png\":\n load(src, ImageLoader, {\n image: {\n type: \"data\"\n }\n }).then((imageData) => {\n if (texture.compressed) {\n encode(imageData, KTX2BasisWriter, encodingOptions).then((encodedData) => {\n const encodedImageData = new Uint8Array(encodedData);\n texture.imageData = encodedImageData;\n if (--countTextures <= 0) {\n resolve();\n }\n }).catch((err) => {\n console.error(\"[XKTModel.finalize] Failed to encode image: \" + err);\n if (--countTextures <= 0) {\n resolve();\n }\n });\n } else {\n texture.imageData = new Uint8Array(1);\n if (--countTextures <= 0) {\n resolve();\n }\n }\n }).catch((err) => {\n console.error(\"[XKTModel.finalize] Failed to load image: \" + err);\n if (--countTextures <= 0) {\n resolve();\n }\n });\n break;\n default:\n if (--countTextures <= 0) {\n resolve();\n }\n break;\n }\n }\n\n if (texture.imageData) {\n\n // XKTTexture created with XKTModel#createTexture({ imageData: ... })\n\n if (texture.compressed) {\n encode(texture.imageData, KTX2BasisWriter, encodingOptions)\n .then((encodedImageData) => {\n texture.imageData = new Uint8Array(encodedImageData);\n if (--countTextures <= 0) {\n resolve();\n }\n }).catch((err) => {\n console.error(\"[XKTModel.finalize] Failed to encode image: \" + err);\n if (--countTextures <= 0) {\n resolve();\n }\n });\n } else {\n texture.imageData = new Uint8Array(1);\n if (--countTextures <= 0) {\n resolve();\n }\n }\n }\n }\n });\n }\n\n _bakeSingleUseGeometryPositions() {\n\n for (let j = 0, lenj = this.meshesList.length; j < lenj; j++) {\n\n const mesh = this.meshesList[j];\n\n const geometry = mesh.geometry;\n\n if (geometry.numInstances === 1) {\n\n const matrix = mesh.matrix;\n\n if (matrix && (!math.isIdentityMat4(matrix))) {\n\n const positions = geometry.positions;\n\n for (let i = 0, len = positions.length; i < len; i += 3) {\n\n tempVec4a[0] = positions[i + 0];\n tempVec4a[1] = positions[i + 1];\n tempVec4a[2] = positions[i + 2];\n tempVec4a[3] = 1;\n\n math.transformPoint4(matrix, tempVec4a, tempVec4b);\n\n positions[i + 0] = tempVec4b[0];\n positions[i + 1] = tempVec4b[1];\n positions[i + 2] = tempVec4b[2];\n }\n }\n }\n }\n }\n\n _bakeAndOctEncodeNormals() {\n\n for (let i = 0, len = this.meshesList.length; i < len; i++) {\n\n const mesh = this.meshesList[i];\n const geometry = mesh.geometry;\n\n if (geometry.normals && !geometry.normalsOctEncoded) {\n\n geometry.normalsOctEncoded = new Int8Array(geometry.normals.length);\n\n if (geometry.numInstances > 1) {\n geometryCompression.octEncodeNormals(geometry.normals, geometry.normals.length, geometry.normalsOctEncoded, 0);\n\n } else {\n const modelNormalMatrix = math.inverseMat4(math.transposeMat4(mesh.matrix, tempMat4), tempMat4b);\n geometryCompression.transformAndOctEncodeNormals(modelNormalMatrix, geometry.normals, geometry.normals.length, geometry.normalsOctEncoded, 0);\n }\n }\n }\n }\n\n _createEntityAABBs() {\n\n for (let i = 0, len = this.entitiesList.length; i < len; i++) {\n\n const entity = this.entitiesList[i];\n const entityAABB = entity.aabb;\n const meshes = entity.meshes;\n\n math.collapseAABB3(entityAABB);\n\n for (let j = 0, lenj = meshes.length; j < lenj; j++) {\n\n const mesh = meshes[j];\n const geometry = mesh.geometry;\n const matrix = mesh.matrix;\n\n if (geometry.numInstances > 1) {\n\n const positions = geometry.positions;\n for (let i = 0, len = positions.length; i < len; i += 3) {\n tempVec4a[0] = positions[i + 0];\n tempVec4a[1] = positions[i + 1];\n tempVec4a[2] = positions[i + 2];\n tempVec4a[3] = 1;\n math.transformPoint4(matrix, tempVec4a, tempVec4b);\n math.expandAABB3Point3(entityAABB, tempVec4b);\n }\n\n } else {\n\n const positions = geometry.positions;\n for (let i = 0, len = positions.length; i < len; i += 3) {\n tempVec4a[0] = positions[i + 0];\n tempVec4a[1] = positions[i + 1];\n tempVec4a[2] = positions[i + 2];\n math.expandAABB3Point3(entityAABB, tempVec4a);\n }\n }\n }\n }\n }\n\n _createKDTree() {\n\n let aabb;\n if (this.modelAABB) {\n aabb = this.modelAABB; // Pre-known uber AABB\n } else {\n aabb = math.collapseAABB3();\n for (let i = 0, len = this.entitiesList.length; i < len; i++) {\n const entity = this.entitiesList[i];\n math.expandAABB3(aabb, entity.aabb);\n }\n }\n\n const rootKDNode = new KDNode(aabb);\n\n for (let i = 0, len = this.entitiesList.length; i < len; i++) {\n const entity = this.entitiesList[i];\n this._insertEntityIntoKDTree(rootKDNode, entity);\n }\n\n return rootKDNode;\n }\n\n _insertEntityIntoKDTree(kdNode, entity) {\n\n const nodeAABB = kdNode.aabb;\n const entityAABB = entity.aabb;\n\n const nodeAABBDiag = math.getAABB3Diag(nodeAABB);\n\n if (nodeAABBDiag < this.minTileSize) {\n kdNode.entities = kdNode.entities || [];\n kdNode.entities.push(entity);\n math.expandAABB3(nodeAABB, entityAABB);\n return;\n }\n\n if (kdNode.left) {\n if (math.containsAABB3(kdNode.left.aabb, entityAABB)) {\n this._insertEntityIntoKDTree(kdNode.left, entity);\n return;\n }\n }\n\n if (kdNode.right) {\n if (math.containsAABB3(kdNode.right.aabb, entityAABB)) {\n this._insertEntityIntoKDTree(kdNode.right, entity);\n return;\n }\n }\n\n kdTreeDimLength[0] = nodeAABB[3] - nodeAABB[0];\n kdTreeDimLength[1] = nodeAABB[4] - nodeAABB[1];\n kdTreeDimLength[2] = nodeAABB[5] - nodeAABB[2];\n\n let dim = 0;\n\n if (kdTreeDimLength[1] > kdTreeDimLength[dim]) {\n dim = 1;\n }\n\n if (kdTreeDimLength[2] > kdTreeDimLength[dim]) {\n dim = 2;\n }\n\n if (!kdNode.left) {\n const aabbLeft = nodeAABB.slice();\n aabbLeft[dim + 3] = ((nodeAABB[dim] + nodeAABB[dim + 3]) / 2.0);\n kdNode.left = new KDNode(aabbLeft);\n if (math.containsAABB3(aabbLeft, entityAABB)) {\n this._insertEntityIntoKDTree(kdNode.left, entity);\n return;\n }\n }\n\n if (!kdNode.right) {\n const aabbRight = nodeAABB.slice();\n aabbRight[dim] = ((nodeAABB[dim] + nodeAABB[dim + 3]) / 2.0);\n kdNode.right = new KDNode(aabbRight);\n if (math.containsAABB3(aabbRight, entityAABB)) {\n this._insertEntityIntoKDTree(kdNode.right, entity);\n return;\n }\n }\n\n kdNode.entities = kdNode.entities || [];\n kdNode.entities.push(entity);\n\n math.expandAABB3(nodeAABB, entityAABB);\n }\n\n _createTilesFromKDTree(rootKDNode) {\n this._createTilesFromKDNode(rootKDNode);\n }\n\n _createTilesFromKDNode(kdNode) {\n if (kdNode.entities && kdNode.entities.length > 0) {\n this._createTileFromEntities(kdNode);\n }\n if (kdNode.left) {\n this._createTilesFromKDNode(kdNode.left);\n }\n if (kdNode.right) {\n this._createTilesFromKDNode(kdNode.right);\n }\n }\n\n /**\n * Creates a tile from the given entities.\n *\n * For each single-use {@link XKTGeometry}, this method centers {@link XKTGeometry#positions} to make them relative to the\n * tile's center, then quantizes the positions to unsigned 16-bit integers, relative to the tile's boundary.\n *\n * @param kdNode\n */\n _createTileFromEntities(kdNode) {\n\n const tileAABB = kdNode.aabb;\n const entities = kdNode.entities;\n\n const tileCenter = math.getAABB3Center(tileAABB);\n const tileCenterNeg = math.mulVec3Scalar(tileCenter, -1, math.vec3());\n\n const rtcAABB = math.AABB3(); // AABB centered at the RTC origin\n\n rtcAABB[0] = tileAABB[0] - tileCenter[0];\n rtcAABB[1] = tileAABB[1] - tileCenter[1];\n rtcAABB[2] = tileAABB[2] - tileCenter[2];\n rtcAABB[3] = tileAABB[3] - tileCenter[0];\n rtcAABB[4] = tileAABB[4] - tileCenter[1];\n rtcAABB[5] = tileAABB[5] - tileCenter[2];\n\n for (let i = 0; i < entities.length; i++) {\n\n const entity = entities [i];\n\n const meshes = entity.meshes;\n\n for (let j = 0, lenj = meshes.length; j < lenj; j++) {\n\n const mesh = meshes[j];\n const geometry = mesh.geometry;\n\n if (!geometry.reused) { // Batched geometry\n\n const positions = geometry.positions;\n\n // Center positions relative to their tile's World-space center\n\n for (let k = 0, lenk = positions.length; k < lenk; k += 3) {\n\n positions[k + 0] -= tileCenter[0];\n positions[k + 1] -= tileCenter[1];\n positions[k + 2] -= tileCenter[2];\n }\n\n // Quantize positions relative to tile's RTC-space boundary\n\n geometryCompression.quantizePositions(positions, positions.length, rtcAABB, geometry.positionsQuantized);\n\n } else { // Instanced geometry\n\n // Post-multiply a translation to the mesh's modeling matrix\n // to center the entity's geometry instances to the tile RTC center\n\n //////////////////////////////\n // Why do we do this?\n // Seems to break various models\n /////////////////////////////////\n\n math.translateMat4v(tileCenterNeg, mesh.matrix);\n }\n }\n\n entity.entityIndex = this.entitiesList.length;\n\n this.entitiesList.push(entity);\n }\n\n const tile = new XKTTile(tileAABB, entities);\n\n this.tilesList.push(tile);\n }\n\n _createReusedGeometriesDecodeMatrix() {\n\n const tempVec3a = math.vec3();\n const reusedGeometriesAABB = math.collapseAABB3(math.AABB3());\n let countReusedGeometries = 0;\n\n for (let geometryIndex = 0, numGeometries = this.geometriesList.length; geometryIndex < numGeometries; geometryIndex++) {\n\n const geometry = this.geometriesList [geometryIndex];\n\n if (geometry.reused) { // Instanced geometry\n\n const positions = geometry.positions;\n\n for (let i = 0, len = positions.length; i < len; i += 3) {\n\n tempVec3a[0] = positions[i];\n tempVec3a[1] = positions[i + 1];\n tempVec3a[2] = positions[i + 2];\n\n math.expandAABB3Point3(reusedGeometriesAABB, tempVec3a);\n }\n\n countReusedGeometries++;\n }\n }\n\n if (countReusedGeometries > 0) {\n\n geometryCompression.createPositionsDecodeMatrix(reusedGeometriesAABB, this.reusedGeometriesDecodeMatrix);\n\n for (let geometryIndex = 0, numGeometries = this.geometriesList.length; geometryIndex < numGeometries; geometryIndex++) {\n\n const geometry = this.geometriesList [geometryIndex];\n\n if (geometry.reused) {\n geometryCompression.quantizePositions(geometry.positions, geometry.positions.length, reusedGeometriesAABB, geometry.positionsQuantized);\n }\n }\n\n } else {\n math.identityMat4(this.reusedGeometriesDecodeMatrix); // No need for this matrix, but we'll be tidy and set it to identity\n }\n }\n\n _flagSolidGeometries() {\n let maxNumPositions = 0;\n let maxNumIndices = 0;\n for (let i = 0, len = this.geometriesList.length; i < len; i++) {\n const geometry = this.geometriesList[i];\n if (geometry.primitiveType === \"triangles\") {\n if (geometry.positionsQuantized.length > maxNumPositions) {\n maxNumPositions = geometry.positionsQuantized.length;\n }\n if (geometry.indices.length > maxNumIndices) {\n maxNumIndices = geometry.indices.length;\n }\n }\n }\n let vertexIndexMapping = new Array(maxNumPositions / 3);\n let edges = new Array(maxNumIndices);\n for (let i = 0, len = this.geometriesList.length; i < len; i++) {\n const geometry = this.geometriesList[i];\n if (geometry.primitiveType === \"triangles\") {\n geometry.solid = isTriangleMeshSolid(geometry.indices, geometry.positionsQuantized, vertexIndexMapping, edges);\n }\n }\n }\n}\n\nexport {\n XKTModel\n}","/**\n * A property set within an {@link XKTModel}.\n *\n * These are shared among {@link XKTMetaObject}s.\n *\n * * Created by {@link XKTModel#createPropertySet}\n * * Stored in {@link XKTModel#propertySets} and {@link XKTModel#propertySetsList}\n * * Has an ID, a type, and a human-readable name\n *\n * @class XKTPropertySet\n */\nclass XKTPropertySet {\n\n /**\n * @private\n */\n constructor(propertySetId, propertySetType, propertySetName, properties) {\n\n /**\n * Unique ID of this ````XKTPropertySet```` in {@link XKTModel#propertySets}.\n *\n * @type {String}\n */\n this.propertySetId = propertySetId;\n\n /**\n * Indicates the ````XKTPropertySet````'s type.\n *\n * This defaults to \"default\".\n *\n * @type {string}\n */\n this.propertySetType = propertySetType;\n\n /**\n * Indicates the XKTPropertySet meta object name.\n *\n * This defaults to {@link XKTPropertySet#propertySetId}.\n *\n * @type {string}\n */\n this.propertySetName = propertySetName;\n\n /**\n * The properties within this ````XKTPropertySet````.\n *\n * @type {*[]}\n */\n this.properties = properties;\n }\n}\n\nexport {XKTPropertySet};","/**\n * A texture shared by {@link XKTTextureSet}s.\n *\n * * Created by {@link XKTModel#createTexture}\n * * Stored in {@link XKTTextureSet#textures}, {@link XKTModel#textures} and {@link XKTModel#texturesList}\n *\n * @class XKTTexture\n */\nimport {RepeatWrapping, LinearMipMapNearestFilter} from \"../constants\";\n\nclass XKTTexture {\n\n /**\n * @private\n */\n constructor(cfg) {\n\n /**\n * Unique ID of this XKTTexture in {@link XKTModel#textures}.\n *\n * @type {Number}\n */\n this.textureId = cfg.textureId;\n\n /**\n * Index of this XKTTexture in {@link XKTModel#texturesList};\n *\n * @type {Number}\n */\n this.textureIndex = cfg.textureIndex;\n\n /**\n * Texture image data.\n *\n * @type {Buffer}\n */\n this.imageData = cfg.imageData;\n\n /**\n * Which material channel this texture is applied to, as determined by its {@link XKTTextureSet}s.\n *\n * @type {Number}\n */\n this.channel = null;\n\n /**\n * Width of this XKTTexture.\n *\n * @type {Number}\n */\n this.width = cfg.width;\n\n /**\n * Height of this XKTTexture.\n *\n * @type {Number}\n */\n this.height = cfg.height;\n\n /**\n * Texture file source.\n *\n * @type {String}\n */\n this.src = cfg.src;\n\n /**\n * Whether this XKTTexture is to be compressed.\n *\n * @type {Boolean}\n */\n this.compressed = (!!cfg.compressed);\n\n /**\n * Media type of this XKTTexture.\n *\n * Supported values are {@link GIFMediaType}, {@link PNGMediaType} and {@link JPEGMediaType}.\n *\n * Ignored for compressed textures.\n *\n * @type {Number}\n */\n this.mediaType = cfg.mediaType;\n\n /**\n * How the texture is sampled when a texel covers less than one pixel. Supported values\n * are {@link LinearMipmapLinearFilter}, {@link LinearMipMapNearestFilter},\n * {@link NearestMipMapNearestFilter}, {@link NearestMipMapLinearFilter}\n * and {@link LinearMipMapLinearFilter}.\n *\n * Ignored for compressed textures.\n *\n * @type {Number}\n */\n this.minFilter = cfg.minFilter || LinearMipMapNearestFilter;\n\n /**\n * How the texture is sampled when a texel covers more than one pixel. Supported values\n * are {@link LinearFilter} and {@link NearestFilter}.\n *\n * Ignored for compressed textures.\n *\n * @type {Number}\n */\n this.magFilter = cfg.magFilter || LinearMipMapNearestFilter;\n\n /**\n * S wrapping mode.\n *\n * Supported values are {@link ClampToEdgeWrapping},\n * {@link MirroredRepeatWrapping} and {@link RepeatWrapping}.\n *\n * Ignored for compressed textures.\n *\n * @type {Number}\n */\n this.wrapS = cfg.wrapS || RepeatWrapping;\n\n /**\n * T wrapping mode.\n *\n * Supported values are {@link ClampToEdgeWrapping},\n * {@link MirroredRepeatWrapping} and {@link RepeatWrapping}.\n *\n * Ignored for compressed textures.\n *\n * @type {Number}\n */\n this.wrapT = cfg.wrapT || RepeatWrapping;\n\n /**\n * R wrapping mode.\n *\n * Ignored for compressed textures.\n *\n * Supported values are {@link ClampToEdgeWrapping},\n * {@link MirroredRepeatWrapping} and {@link RepeatWrapping}.\n *\n * @type {*|number}\n */\n this.wrapR = cfg.wrapR || RepeatWrapping\n }\n}\n\nexport {XKTTexture};","/**\n * A set of textures shared by {@link XKTMesh}es.\n *\n * * Created by {@link XKTModel#createTextureSet}\n * * Registered in {@link XKTMesh#material}, {@link XKTModel#materials} and {@link XKTModel#.textureSetsList}\n *\n * @class XKTMetalRoughMaterial\n */\nclass XKTTextureSet {\n\n /**\n * @private\n */\n constructor(cfg) {\n\n /**\n * Unique ID of this XKTTextureSet in {@link XKTModel#materials}.\n *\n * @type {Number}\n */\n this.textureSetId = cfg.textureSetId;\n\n /**\n * Index of this XKTTexture in {@link XKTModel#texturesList};\n *\n * @type {Number}\n */\n this.textureSetIndex = cfg.textureSetIndex;\n\n /**\n * Identifies the material type.\n *\n * @type {Number}\n */\n this.materialType = cfg.materialType;\n\n /**\n * Index of this XKTTextureSet in {@link XKTModel#meshesList};\n *\n * @type {Number}\n */\n this.materialIndex = cfg.materialIndex;\n\n /**\n * The number of {@link XKTMesh}s that reference this XKTTextureSet.\n *\n * @type {Number}\n */\n this.numInstances = 0;\n\n /**\n * RGBA {@link XKTTexture} containing base color in RGB and opacity in A.\n *\n * @type {XKTTexture}\n */\n this.colorTexture = cfg.colorTexture;\n\n /**\n * RGBA {@link XKTTexture} containing metallic and roughness factors in R and G.\n *\n * @type {XKTTexture}\n */\n this.metallicRoughnessTexture = cfg.metallicRoughnessTexture;\n\n /**\n * RGBA {@link XKTTexture} with surface normals in RGB.\n *\n * @type {XKTTexture}\n */\n this.normalsTexture = cfg.normalsTexture;\n\n /**\n * RGBA {@link XKTTexture} with emissive color in RGB.\n *\n * @type {XKTTexture}\n */\n this.emissiveTexture = cfg.emissiveTexture;\n\n /**\n * RGBA {@link XKTTexture} with ambient occlusion factors in RGB.\n *\n * @type {XKTTexture}\n */\n this.occlusionTexture = cfg.occlusionTexture;\n }\n}\n\nexport {XKTTextureSet};","/**\n * @desc A box-shaped 3D region within an {@link XKTModel} that contains {@link XKTEntity}s.\n *\n * * Created by {@link XKTModel#finalize}\n * * Stored in {@link XKTModel#tilesList}\n *\n * @class XKTTile\n */\nclass XKTTile {\n\n /**\n * Creates a new XKTTile.\n *\n * @private\n * @param aabb\n * @param entities\n */\n constructor(aabb, entities) {\n\n /**\n * Axis-aligned World-space bounding box that encloses the {@link XKTEntity}'s within this Tile.\n *\n * @type {Float64Array}\n */\n this.aabb = aabb;\n\n /**\n * The {@link XKTEntity}'s within this XKTTile.\n *\n * @type {XKTEntity[]}\n */\n this.entities = entities;\n }\n}\n\nexport {XKTTile};","import {math} from \"../../lib/math.js\";\n\n/**\n * @private\n */\nconst buildEdgeIndices = (function () {\n\n const uniquePositions = [];\n const indicesLookup = [];\n const indicesReverseLookup = [];\n const weldedIndices = [];\n\n// TODO: Optimize with caching, but need to cater to both compressed and uncompressed positions\n\n const faces = [];\n let numFaces = 0;\n const compa = new Uint16Array(3);\n const compb = new Uint16Array(3);\n const compc = new Uint16Array(3);\n const a = math.vec3();\n const b = math.vec3();\n const c = math.vec3();\n const cb = math.vec3();\n const ab = math.vec3();\n const cross = math.vec3();\n const normal = math.vec3();\n const inverseNormal = math.vec3();\n\n function weldVertices(positions, indices) {\n const positionsMap = {}; // Hashmap for looking up vertices by position coordinates (and making sure they are unique)\n let vx;\n let vy;\n let vz;\n let key;\n const precisionPoints = 4; // number of decimal points, e.g. 4 for epsilon of 0.0001\n const precision = Math.pow(10, precisionPoints);\n let i;\n let len;\n let lenUniquePositions = 0;\n for (i = 0, len = positions.length; i < len; i += 3) {\n vx = positions[i];\n vy = positions[i + 1];\n vz = positions[i + 2];\n key = Math.round(vx * precision) + '_' + Math.round(vy * precision) + '_' + Math.round(vz * precision);\n if (positionsMap[key] === undefined) {\n positionsMap[key] = lenUniquePositions / 3;\n uniquePositions[lenUniquePositions++] = vx;\n uniquePositions[lenUniquePositions++] = vy;\n uniquePositions[lenUniquePositions++] = vz;\n }\n indicesLookup[i / 3] = positionsMap[key];\n }\n for (i = 0, len = indices.length; i < len; i++) {\n weldedIndices[i] = indicesLookup[indices[i]];\n indicesReverseLookup[weldedIndices[i]] = indices[i];\n }\n }\n\n function buildFaces(numIndices, positionsDecodeMatrix) {\n numFaces = 0;\n for (let i = 0, len = numIndices; i < len; i += 3) {\n const ia = ((weldedIndices[i]) * 3);\n const ib = ((weldedIndices[i + 1]) * 3);\n const ic = ((weldedIndices[i + 2]) * 3);\n if (positionsDecodeMatrix) {\n compa[0] = uniquePositions[ia];\n compa[1] = uniquePositions[ia + 1];\n compa[2] = uniquePositions[ia + 2];\n compb[0] = uniquePositions[ib];\n compb[1] = uniquePositions[ib + 1];\n compb[2] = uniquePositions[ib + 2];\n compc[0] = uniquePositions[ic];\n compc[1] = uniquePositions[ic + 1];\n compc[2] = uniquePositions[ic + 2];\n // Decode\n math.decompressPosition(compa, positionsDecodeMatrix, a);\n math.decompressPosition(compb, positionsDecodeMatrix, b);\n math.decompressPosition(compc, positionsDecodeMatrix, c);\n } else {\n a[0] = uniquePositions[ia];\n a[1] = uniquePositions[ia + 1];\n a[2] = uniquePositions[ia + 2];\n b[0] = uniquePositions[ib];\n b[1] = uniquePositions[ib + 1];\n b[2] = uniquePositions[ib + 2];\n c[0] = uniquePositions[ic];\n c[1] = uniquePositions[ic + 1];\n c[2] = uniquePositions[ic + 2];\n }\n math.subVec3(c, b, cb);\n math.subVec3(a, b, ab);\n math.cross3Vec3(cb, ab, cross);\n math.normalizeVec3(cross, normal);\n const face = faces[numFaces] || (faces[numFaces] = {normal: math.vec3()});\n face.normal[0] = normal[0];\n face.normal[1] = normal[1];\n face.normal[2] = normal[2];\n numFaces++;\n }\n }\n\n return function (positions, indices, positionsDecodeMatrix, edgeThreshold) {\n weldVertices(positions, indices);\n buildFaces(indices.length, positionsDecodeMatrix);\n const edgeIndices = [];\n const thresholdDot = Math.cos(math.DEGTORAD * edgeThreshold);\n const edges = {};\n let edge1;\n let edge2;\n let index1;\n let index2;\n let key;\n let largeIndex = false;\n let edge;\n let normal1;\n let normal2;\n let dot;\n let ia;\n let ib;\n for (let i = 0, len = indices.length; i < len; i += 3) {\n const faceIndex = i / 3;\n for (let j = 0; j < 3; j++) {\n edge1 = weldedIndices[i + j];\n edge2 = weldedIndices[i + ((j + 1) % 3)];\n index1 = Math.min(edge1, edge2);\n index2 = Math.max(edge1, edge2);\n key = index1 + ',' + index2;\n if (edges[key] === undefined) {\n edges[key] = {\n index1: index1,\n index2: index2,\n face1: faceIndex,\n face2: undefined,\n };\n } else {\n edges[key].face2 = faceIndex;\n }\n }\n }\n for (key in edges) {\n edge = edges[key];\n // an edge is only rendered if the angle (in degrees) between the face normals of the adjoining faces exceeds this value. default = 1 degree.\n if (edge.face2 !== undefined) {\n normal1 = faces[edge.face1].normal;\n normal2 = faces[edge.face2].normal;\n inverseNormal[0] = -normal2[0];\n inverseNormal[1] = -normal2[1];\n inverseNormal[2] = -normal2[2];\n dot = Math.abs(math.dotVec3(normal1, normal2));\n const dot2 = Math.abs(math.dotVec3(normal1, inverseNormal));\n if (dot > thresholdDot && dot2 > thresholdDot) {\n continue;\n }\n }\n ia = indicesReverseLookup[edge.index1];\n ib = indicesReverseLookup[edge.index2];\n if (!largeIndex && ia > 65535 || ib > 65535) {\n largeIndex = true;\n }\n edgeIndices.push(ia);\n edgeIndices.push(ib);\n }\n return (largeIndex) ? new Uint32Array(edgeIndices) : new Uint16Array(edgeIndices);\n };\n})();\n\n\nexport {buildEdgeIndices};","import {math} from \"../../lib/math.js\";\n\nfunction quantizePositions (positions, lenPositions, aabb, quantizedPositions) {\n const xmin = aabb[0];\n const ymin = aabb[1];\n const zmin = aabb[2];\n const xwid = aabb[3] - xmin;\n const ywid = aabb[4] - ymin;\n const zwid = aabb[5] - zmin;\n const maxInt = 65535;\n const xMultiplier = maxInt / xwid;\n const yMultiplier = maxInt / ywid;\n const zMultiplier = maxInt / zwid;\n const verify = (num) => num >= 0 ? num : 0;\n for (let i = 0; i < lenPositions; i += 3) {\n quantizedPositions[i + 0] = Math.max(0, Math.min(65535,Math.floor(verify(positions[i + 0] - xmin) * xMultiplier)));\n quantizedPositions[i + 1] = Math.max(0, Math.min(65535,Math.floor(verify(positions[i + 1] - ymin) * yMultiplier)));\n quantizedPositions[i + 2] = Math.max(0, Math.min(65535,Math.floor(verify(positions[i + 2] - zmin) * zMultiplier)));\n }\n}\n\nfunction compressPosition(p, aabb, q) {\n const multiplier = new Float32Array([\n aabb[3] !== aabb[0] ? 65535 / (aabb[3] - aabb[0]) : 0,\n aabb[4] !== aabb[1] ? 65535 / (aabb[4] - aabb[1]) : 0,\n aabb[5] !== aabb[2] ? 65535 / (aabb[5] - aabb[2]) : 0\n ]);\n q[0] = Math.max(0, Math.min(65535, Math.floor((p[0] - aabb[0]) * multiplier[0])));\n q[1] = Math.max(0, Math.min(65535, Math.floor((p[1] - aabb[1]) * multiplier[1])));\n q[2] = Math.max(0, Math.min(65535, Math.floor((p[2] - aabb[2]) * multiplier[2])));\n}\n\nvar createPositionsDecodeMatrix = (function () {\n const translate = math.mat4();\n const scale = math.mat4();\n return function (aabb, positionsDecodeMatrix) {\n positionsDecodeMatrix = positionsDecodeMatrix || math.mat4();\n const xmin = aabb[0];\n const ymin = aabb[1];\n const zmin = aabb[2];\n const xwid = aabb[3] - xmin;\n const ywid = aabb[4] - ymin;\n const zwid = aabb[5] - zmin;\n const maxInt = 65535;\n math.identityMat4(translate);\n math.translationMat4v(aabb, translate);\n math.identityMat4(scale);\n math.scalingMat4v([xwid / maxInt, ywid / maxInt, zwid / maxInt], scale);\n math.mulMat4(translate, scale, positionsDecodeMatrix);\n return positionsDecodeMatrix;\n };\n})();\n\nfunction transformAndOctEncodeNormals(modelNormalMatrix, normals, lenNormals, compressedNormals, lenCompressedNormals) {\n // http://jcgt.org/published/0003/02/01/\n let oct, dec, best, currentCos, bestCos;\n let i, ei;\n let localNormal = math.vec3();\n let worldNormal = math.vec3();\n for (i = 0; i < lenNormals; i += 3) {\n localNormal[0] = normals[i];\n localNormal[1] = normals[i + 1];\n localNormal[2] = normals[i + 2];\n\n math.transformVec3(modelNormalMatrix, localNormal, worldNormal);\n math.normalizeVec3(worldNormal, worldNormal);\n\n // Test various combinations of ceil and floor to minimize rounding errors\n best = oct = octEncodeVec3(worldNormal, 0, \"floor\", \"floor\");\n dec = octDecodeVec2(oct);\n currentCos = bestCos = dot(worldNormal, 0, dec);\n oct = octEncodeVec3(worldNormal, 0, \"ceil\", \"floor\");\n dec = octDecodeVec2(oct);\n currentCos = dot(worldNormal, 0, dec);\n if (currentCos > bestCos) {\n best = oct;\n bestCos = currentCos;\n }\n oct = octEncodeVec3(worldNormal, 0, \"floor\", \"ceil\");\n dec = octDecodeVec2(oct);\n currentCos = dot(worldNormal, 0, dec);\n if (currentCos > bestCos) {\n best = oct;\n bestCos = currentCos;\n }\n oct = octEncodeVec3(worldNormal, 0, \"ceil\", \"ceil\");\n dec = octDecodeVec2(oct);\n currentCos = dot(worldNormal, 0, dec);\n if (currentCos > bestCos) {\n best = oct;\n bestCos = currentCos;\n }\n compressedNormals[lenCompressedNormals + i + 0] = best[0];\n compressedNormals[lenCompressedNormals + i + 1] = best[1];\n compressedNormals[lenCompressedNormals + i + 2] = 0.0; // Unused\n }\n lenCompressedNormals += lenNormals;\n return lenCompressedNormals;\n}\n\nfunction octEncodeNormals(normals, lenNormals, compressedNormals, lenCompressedNormals) { // http://jcgt.org/published/0003/02/01/\n let oct, dec, best, currentCos, bestCos;\n for (let i = 0; i < lenNormals; i += 3) {\n // Test various combinations of ceil and floor to minimize rounding errors\n best = oct = octEncodeVec3(normals, i, \"floor\", \"floor\");\n dec = octDecodeVec2(oct);\n currentCos = bestCos = dot(normals, i, dec);\n oct = octEncodeVec3(normals, i, \"ceil\", \"floor\");\n dec = octDecodeVec2(oct);\n currentCos = dot(normals, i, dec);\n if (currentCos > bestCos) {\n best = oct;\n bestCos = currentCos;\n }\n oct = octEncodeVec3(normals, i, \"floor\", \"ceil\");\n dec = octDecodeVec2(oct);\n currentCos = dot(normals, i, dec);\n if (currentCos > bestCos) {\n best = oct;\n bestCos = currentCos;\n }\n oct = octEncodeVec3(normals, i, \"ceil\", \"ceil\");\n dec = octDecodeVec2(oct);\n currentCos = dot(normals, i, dec);\n if (currentCos > bestCos) {\n best = oct;\n bestCos = currentCos;\n }\n compressedNormals[lenCompressedNormals + i + 0] = best[0];\n compressedNormals[lenCompressedNormals + i + 1] = best[1];\n compressedNormals[lenCompressedNormals + i + 2] = 0.0; // Unused\n }\n lenCompressedNormals += lenNormals;\n return lenCompressedNormals;\n}\n\n/**\n * @private\n */\nfunction octEncodeVec3(array, i, xfunc, yfunc) { // Oct-encode single normal vector in 2 bytes\n let x = array[i] / (Math.abs(array[i]) + Math.abs(array[i + 1]) + Math.abs(array[i + 2]));\n let y = array[i + 1] / (Math.abs(array[i]) + Math.abs(array[i + 1]) + Math.abs(array[i + 2]));\n if (array[i + 2] < 0) {\n let tempx = (1 - Math.abs(y)) * (x >= 0 ? 1 : -1);\n let tempy = (1 - Math.abs(x)) * (y >= 0 ? 1 : -1);\n x = tempx;\n y = tempy;\n }\n return new Int8Array([\n Math[xfunc](x * 127.5 + (x < 0 ? -1 : 0)),\n Math[yfunc](y * 127.5 + (y < 0 ? -1 : 0))\n ]);\n}\n\n/**\n * Decode an oct-encoded normal\n */\nfunction octDecodeVec2(oct) {\n let x = oct[0];\n let y = oct[1];\n x /= x < 0 ? 127 : 128;\n y /= y < 0 ? 127 : 128;\n const z = 1 - Math.abs(x) - Math.abs(y);\n if (z < 0) {\n x = (1 - Math.abs(y)) * (x >= 0 ? 1 : -1);\n y = (1 - Math.abs(x)) * (y >= 0 ? 1 : -1);\n }\n const length = Math.sqrt(x * x + y * y + z * z);\n return [\n x / length,\n y / length,\n z / length\n ];\n}\n\n/**\n * Dot product of a normal in an array against a candidate decoding\n * @private\n */\nfunction dot(array, i, vec3) {\n return array[i] * vec3[0] + array[i + 1] * vec3[1] + array[i + 2] * vec3[2];\n}\n\n/**\n * @private\n */\nconst geometryCompression = {\n quantizePositions,\n compressPosition,\n createPositionsDecodeMatrix,\n transformAndOctEncodeNormals,\n octEncodeNormals,\n};\n\nexport {geometryCompression}","/**\n * Uses edge adjacency counts to identify if the given triangle mesh can be rendered with backface culling enabled.\n *\n * If all edges are connected to exactly two triangles, then the mesh will likely be a closed solid, and we can safely\n * render it with backface culling enabled.\n *\n * Otherwise, the mesh is a surface, and we must render it with backface culling disabled.\n *\n * @private\n */\nconst isTriangleMeshSolid = (indices, positions, vertexIndexMapping, edges) => {\n\n function compareIndexPositions(a, b)\n {\n let posA, posB;\n\n for (let i = 0; i < 3; i++) {\n posA = positions [a*3+i];\n posB = positions [b*3+i];\n\n if (posA !== posB) {\n return posB - posA;\n }\n }\n\n return 0;\n };\n\n // Group together indices corresponding to same position coordinates\n let newIndices = indices.slice ().sort (compareIndexPositions);\n\n // Calculate the mapping:\n // - from original index in indices array\n // - to indices-for-unique-positions\n let uniqueVertexIndex = null;\n\n for (let i = 0, len = newIndices.length; i < len; i++) {\n if (i == 0 || 0 != compareIndexPositions (\n newIndices[i],\n newIndices[i-1],\n )) {\n // different position\n uniqueVertexIndex = newIndices [i];\n }\n\n vertexIndexMapping [\n newIndices[i]\n ] = uniqueVertexIndex;\n }\n\n // Generate the list of edges\n for (let i = 0, len = indices.length; i < len; i += 3) {\n\n const a = vertexIndexMapping[indices[i]];\n const b = vertexIndexMapping[indices[i+1]];\n const c = vertexIndexMapping[indices[i+2]];\n\n let a2 = a;\n let b2 = b;\n let c2 = c;\n\n if (a > b && a > c) {\n if (b > c) {\n a2 = a;\n b2 = b;\n c2 = c;\n } else {\n a2 = a;\n b2 = c;\n c2 = b;\n }\n } else if (b > a && b > c) {\n if (a > c) {\n a2 = b;\n b2 = a;\n c2 = c;\n } else {\n a2 = b;\n b2 = c;\n c2 = a;\n }\n } else if (c > a && c > b) {\n if (a > b) {\n a2 = c;\n b2 = a;\n c2 = b;\n } else {\n a2 = c;\n b2 = b;\n c2 = a;\n }\n }\n\n edges[i+0] = [\n a2, b2\n ];\n edges[i+1] = [\n b2, c2\n ];\n\n if (a2 > c2) {\n const temp = c2;\n c2 = a2;\n a2 = temp;\n }\n\n edges[i+2] = [\n c2, a2\n ];\n }\n\n // Group semantically equivalent edgdes together\n function compareEdges (e1, e2) {\n let a, b;\n\n for (let i = 0; i < 2; i++) {\n a = e1[i];\n b = e2[i];\n\n if (b !== a) {\n return b - a;\n }\n }\n\n return 0;\n }\n\n edges = edges.slice(0, indices.length);\n\n edges.sort (compareEdges);\n\n // Make sure each edge is used exactly twice\n let sameEdgeCount = 0;\n\n for (let i = 0; i < edges.length; i++)\n {\n if (i === 0 || 0 !== compareEdges (\n edges[i], edges[i-1]\n )) {\n // different edge\n if (0 !== i && sameEdgeCount !== 2)\n {\n return false;\n }\n\n sameEdgeCount = 1;\n }\n else\n {\n // same edge\n sameEdgeCount++;\n }\n }\n\n if (edges.length > 0 && sameEdgeCount !== 2)\n {\n return false;\n }\n\n // Each edge is used exactly twice, this is a\n // watertight surface and hence a solid geometry.\n return true;\n};\n\nexport {isTriangleMeshSolid};","/**\n * @private\n * @param buf\n * @returns {ArrayBuffer}\n */\nexport function toArrayBuffer(buf) {\n const ab = new ArrayBuffer(buf.length);\n const view = new Uint8Array(ab);\n for (let i = 0; i < buf.length; ++i) {\n view[i] = buf[i];\n }\n return ab;\n}","function isString(value) {\n return (typeof value === 'string' || value instanceof String);\n}\n\nfunction apply(o, o2) {\n for (const name in o) {\n if (o.hasOwnProperty(name)) {\n o2[name] = o[name];\n }\n }\n return o2;\n}\n\n/**\n * @private\n */\nconst utils = {\n isString,\n apply\n};\n\nexport {utils};\n","import {XKT_INFO} from \"../XKT_INFO.js\";\nimport * as pako from 'pako';\n\nconst XKT_VERSION = XKT_INFO.xktVersion;\nconst NUM_TEXTURE_ATTRIBUTES = 9;\nconst NUM_MATERIAL_ATTRIBUTES = 6;\n\n/**\n * Writes an {@link XKTModel} to an {@link ArrayBuffer}.\n *\n * @param {XKTModel} xktModel The {@link XKTModel}.\n * @param {String} metaModelJSON The metamodel JSON in a string.\n * @param {Object} [stats] Collects statistics.\n * @param {Object} options Options for how the XKT is written.\n * @param {Boolean} [options.zip=true] ZIP the contents?\n * @returns {ArrayBuffer} The {@link ArrayBuffer}.\n */\nfunction writeXKTModelToArrayBuffer(xktModel, metaModelJSON, stats, options) {\n if (! options.zip) {\n return writeXKTModelToArrayBufferUncompressed(xktModel, metaModelJSON, stats);\n }\n const data = getModelData(xktModel, metaModelJSON, stats);\n const deflatedData = deflateData(data, metaModelJSON, options);\n stats.texturesSize += deflatedData.textureData.byteLength;\n const arrayBuffer = createArrayBuffer(deflatedData);\n return arrayBuffer;\n}\n\n// V11\nfunction writeXKTModelToArrayBufferUncompressed(xktModel, metaModelJSON, stats) {\n const data = getModelData(xktModel, metaModelJSON, stats);\n stats.texturesSize += data.textureData.byteLength;\n\n const object2Array = (function() {\n const encoder = new TextEncoder();\n return obj => encoder.encode(JSON.stringify(obj));\n })();\n\n const arrays = [\n object2Array(metaModelJSON || data.metadata),\n data.textureData,\n data.eachTextureDataPortion,\n data.eachTextureAttributes,\n data.positions,\n data.normals,\n data.colors,\n data.uvs,\n data.indices,\n data.edgeIndices,\n data.eachTextureSetTextures,\n data.matrices,\n data.reusedGeometriesDecodeMatrix,\n data.eachGeometryPrimitiveType,\n data.eachGeometryPositionsPortion,\n data.eachGeometryNormalsPortion,\n data.eachGeometryColorsPortion,\n data.eachGeometryUVsPortion,\n data.eachGeometryIndicesPortion,\n data.eachGeometryEdgeIndicesPortion,\n data.eachMeshGeometriesPortion,\n data.eachMeshMatricesPortion,\n data.eachMeshTextureSet,\n data.eachMeshMaterialAttributes,\n object2Array(data.eachEntityId),\n data.eachEntityMeshesPortion,\n data.eachTileAABB,\n data.eachTileEntitiesPortion\n ];\n\n const arraysCnt = arrays.length;\n const dataView = new DataView(new ArrayBuffer((1 + 2 * arraysCnt) * 4));\n\n dataView.setUint32(0, XKT_VERSION, true);\n\n let byteOffset = dataView.byteLength;\n const offsets = [ ];\n\n // Store arrays' offsets and lengths\n for (let i = 0; i < arraysCnt; i++) {\n const arr = arrays[i];\n const BPE = arr.BYTES_PER_ELEMENT;\n // align to BPE, so the arrayBuffer can be used for a typed array\n byteOffset = Math.ceil(byteOffset / BPE) * BPE;\n const byteLength = arr.byteLength;\n\n const idx = 1 + 2 * i;\n dataView.setUint32(idx * 4, byteOffset, true);\n dataView.setUint32((idx + 1) * 4, byteLength, true);\n\n offsets.push(byteOffset);\n byteOffset += byteLength;\n }\n\n const dataArray = new Uint8Array(byteOffset);\n dataArray.set(new Uint8Array(dataView.buffer), 0);\n\n const requiresSwapToLittleEndian = (function() {\n const buffer = new ArrayBuffer(2);\n new Uint16Array(buffer)[0] = 1;\n return new Uint8Array(buffer)[0] !== 1;\n })();\n\n // Store arrays themselves\n for (let i = 0; i < arraysCnt; i++) {\n const arr = arrays[i];\n const subarray = new Uint8Array(arr.buffer, arr.byteOffset, arr.byteLength);\n\n const BPE = arr.BYTES_PER_ELEMENT;\n if (requiresSwapToLittleEndian && (BPE > 1)) {\n const swaps = BPE / 2;\n const cnt = subarray.length / BPE;\n for (let b = 0; b < cnt; b++) {\n const offset = b * BPE;\n for (let j = 0; j < swaps; j++) {\n const i1 = offset + j;\n const i2 = offset - j + BPE - 1;\n const tmp = subarray[i1];\n subarray[i1] = subarray[i2];\n subarray[i2] = tmp;\n }\n }\n }\n\n dataArray.set(subarray, offsets[i]);\n }\n\n return dataArray.buffer;\n}\n\nfunction getModelData(xktModel, metaModelDataStr, stats) {\n\n //------------------------------------------------------------------------------------------------------------------\n // Allocate data\n //------------------------------------------------------------------------------------------------------------------\n\n const propertySetsList = xktModel.propertySetsList;\n const metaObjectsList = xktModel.metaObjectsList;\n const geometriesList = xktModel.geometriesList;\n const texturesList = xktModel.texturesList;\n const textureSetsList = xktModel.textureSetsList;\n const meshesList = xktModel.meshesList;\n const entitiesList = xktModel.entitiesList;\n const tilesList = xktModel.tilesList;\n\n const numPropertySets = propertySetsList.length;\n const numMetaObjects = metaObjectsList.length;\n const numGeometries = geometriesList.length;\n const numTextures = texturesList.length;\n const numTextureSets = textureSetsList.length;\n const numMeshes = meshesList.length;\n const numEntities = entitiesList.length;\n const numTiles = tilesList.length;\n\n let lenPositions = 0;\n let lenNormals = 0;\n let lenColors = 0;\n let lenUVs = 0;\n let lenIndices = 0;\n let lenEdgeIndices = 0;\n let lenMatrices = 0;\n let lenTextures = 0;\n\n for (let geometryIndex = 0; geometryIndex < numGeometries; geometryIndex++) {\n const geometry = geometriesList [geometryIndex];\n if (geometry.positionsQuantized) {\n lenPositions += geometry.positionsQuantized.length;\n }\n if (geometry.normalsOctEncoded) {\n lenNormals += geometry.normalsOctEncoded.length;\n }\n if (geometry.colorsCompressed) {\n lenColors += geometry.colorsCompressed.length;\n }\n if (geometry.uvs) {\n lenUVs += geometry.uvs.length;\n }\n if (geometry.indices) {\n lenIndices += geometry.indices.length;\n }\n if (geometry.edgeIndices) {\n lenEdgeIndices += geometry.edgeIndices.length;\n }\n }\n\n for (let textureIndex = 0; textureIndex < numTextures; textureIndex++) {\n const xktTexture = texturesList[textureIndex];\n const imageData = xktTexture.imageData;\n lenTextures += imageData.byteLength;\n\n if (xktTexture.compressed) {\n stats.numCompressedTextures++;\n }\n }\n\n for (let meshIndex = 0; meshIndex < numMeshes; meshIndex++) {\n const mesh = meshesList[meshIndex];\n if (mesh.geometry.numInstances > 1) {\n lenMatrices += 16;\n }\n }\n\n const data = {\n metadata: {},\n textureData: new Uint8Array(lenTextures), // All textures\n eachTextureDataPortion: new Uint32Array(numTextures), // For each texture, an index to its first element in textureData\n eachTextureAttributes: new Uint16Array(numTextures * NUM_TEXTURE_ATTRIBUTES),\n positions: new Uint16Array(lenPositions), // All geometry arrays\n normals: new Int8Array(lenNormals),\n colors: new Uint8Array(lenColors),\n uvs: new Float32Array(lenUVs),\n indices: new Uint32Array(lenIndices),\n edgeIndices: new Uint32Array(lenEdgeIndices),\n eachTextureSetTextures: new Int32Array(numTextureSets * 5), // For each texture set, a set of five Texture indices [color, metal/roughness,normals,emissive,occlusion]; each index has value -1 if no texture\n matrices: new Float32Array(lenMatrices), // Modeling matrices for entities that share geometries. Each entity either shares all it's geometries, or owns all its geometries exclusively. Exclusively-owned geometries are pre-transformed into World-space, and so their entities don't have modeling matrices in this array.\n reusedGeometriesDecodeMatrix: new Float32Array(xktModel.reusedGeometriesDecodeMatrix), // A single, global vertex position de-quantization matrix for all reused geometries. Reused geometries are quantized to their collective Local-space AABB, and this matrix is derived from that AABB.\n eachGeometryPrimitiveType: new Uint8Array(numGeometries), // Primitive type for each geometry (0=solid triangles, 1=surface triangles, 2=lines, 3=points, 4=line-strip)\n eachGeometryPositionsPortion: new Uint32Array(numGeometries), // For each geometry, an index to its first element in data.positions. Every primitive type has positions.\n eachGeometryNormalsPortion: new Uint32Array(numGeometries), // For each geometry, an index to its first element in data.normals. If the next geometry has the same index, then this geometry has no normals.\n eachGeometryColorsPortion: new Uint32Array(numGeometries), // For each geometry, an index to its first element in data.colors. If the next geometry has the same index, then this geometry has no colors.\n eachGeometryUVsPortion: new Uint32Array(numGeometries), // For each geometry, an index to its first element in data.uvs. If the next geometry has the same index, then this geometry has no UVs.\n eachGeometryIndicesPortion: new Uint32Array(numGeometries), // For each geometry, an index to its first element in data.indices. If the next geometry has the same index, then this geometry has no indices.\n eachGeometryEdgeIndicesPortion: new Uint32Array(numGeometries), // For each geometry, an index to its first element in data.edgeIndices. If the next geometry has the same index, then this geometry has no edge indices.\n eachMeshGeometriesPortion: new Uint32Array(numMeshes), // For each mesh, an index into the eachGeometry* arrays\n eachMeshMatricesPortion: new Uint32Array(numMeshes), // For each mesh that shares its geometry, an index to its first element in data.matrices, to indicate the modeling matrix that transforms the shared geometry Local-space vertex positions. This is ignored for meshes that don't share geometries, because the vertex positions of non-shared geometries are pre-transformed into World-space.\n eachMeshTextureSet: new Int32Array(numMeshes), // For each mesh, the index of its texture set in data.eachTextureSetTextures; this array contains signed integers so that we can use -1 to indicate when a mesh has no texture set\n eachMeshMaterialAttributes: new Uint8Array(numMeshes * NUM_MATERIAL_ATTRIBUTES), // For each mesh, an RGBA integer color of format [0..255, 0..255, 0..255, 0..255], and PBR metallic and roughness factors, of format [0..255, 0..255]\n eachEntityId: [], // For each entity, an ID string\n eachEntityMeshesPortion: new Uint32Array(numEntities), // For each entity, the index of the first element of meshes used by the entity\n eachTileAABB: new Float64Array(numTiles * 6), // For each tile, an axis-aligned bounding box\n eachTileEntitiesPortion: new Uint32Array(numTiles) // For each tile, the index of the first element of eachEntityId, eachEntityMeshesPortion and eachEntityMatricesPortion used by the tile\n };\n\n let countPositions = 0;\n let countNormals = 0;\n let countColors = 0;\n let countUVs = 0;\n let countIndices = 0;\n let countEdgeIndices = 0;\n\n // Metadata\n\n data.metadata = {\n id: xktModel.modelId,\n projectId: xktModel.projectId,\n revisionId: xktModel.revisionId,\n author: xktModel.author,\n createdAt: xktModel.createdAt,\n creatingApplication: xktModel.creatingApplication,\n schema: xktModel.schema,\n propertySets: [],\n metaObjects: []\n };\n\n // Property sets\n\n for (let propertySetsIndex = 0; propertySetsIndex < numPropertySets; propertySetsIndex++) {\n const propertySet = propertySetsList[propertySetsIndex];\n const propertySetJSON = {\n id: \"\" + propertySet.propertySetId,\n name: propertySet.propertySetName,\n type: propertySet.propertySetType,\n properties: propertySet.properties\n };\n data.metadata.propertySets.push(propertySetJSON);\n }\n\n // Metaobjects\n\n if (!metaModelDataStr) {\n for (let metaObjectsIndex = 0; metaObjectsIndex < numMetaObjects; metaObjectsIndex++) {\n const metaObject = metaObjectsList[metaObjectsIndex];\n const metaObjectJSON = {\n name: metaObject.metaObjectName,\n type: metaObject.metaObjectType,\n id: \"\" + metaObject.metaObjectId\n };\n if (metaObject.parentMetaObjectId !== undefined && metaObject.parentMetaObjectId !== null) {\n metaObjectJSON.parent = \"\" + metaObject.parentMetaObjectId;\n }\n if (metaObject.propertySetIds && metaObject.propertySetIds.length > 0) {\n metaObjectJSON.propertySetIds = metaObject.propertySetIds;\n }\n if (metaObject.external) {\n metaObjectJSON.external = metaObject.external;\n }\n data.metadata.metaObjects.push(metaObjectJSON);\n }\n }\n\n // Geometries\n\n for (let geometryIndex = 0; geometryIndex < numGeometries; geometryIndex++) {\n const geometry = geometriesList [geometryIndex];\n let primitiveType = 1;\n switch (geometry.primitiveType) {\n case \"triangles\":\n primitiveType = geometry.solid ? 0 : 1;\n break;\n case \"points\":\n primitiveType = 2;\n break;\n case \"lines\":\n primitiveType = 3;\n break;\n case \"line-strip\":\n case \"line-loop\":\n primitiveType = 4;\n break;\n case \"triangle-strip\":\n primitiveType = 5;\n break;\n case \"triangle-fan\":\n primitiveType = 6;\n break;\n default:\n primitiveType = 1\n }\n data.eachGeometryPrimitiveType [geometryIndex] = primitiveType;\n data.eachGeometryPositionsPortion [geometryIndex] = countPositions;\n data.eachGeometryNormalsPortion [geometryIndex] = countNormals;\n data.eachGeometryColorsPortion [geometryIndex] = countColors;\n data.eachGeometryUVsPortion [geometryIndex] = countUVs;\n data.eachGeometryIndicesPortion [geometryIndex] = countIndices;\n data.eachGeometryEdgeIndicesPortion [geometryIndex] = countEdgeIndices;\n if (geometry.positionsQuantized) {\n data.positions.set(geometry.positionsQuantized, countPositions);\n countPositions += geometry.positionsQuantized.length;\n }\n if (geometry.normalsOctEncoded) {\n data.normals.set(geometry.normalsOctEncoded, countNormals);\n countNormals += geometry.normalsOctEncoded.length;\n }\n if (geometry.colorsCompressed) {\n data.colors.set(geometry.colorsCompressed, countColors);\n countColors += geometry.colorsCompressed.length;\n }\n if (geometry.uvs) {\n data.uvs.set(geometry.uvs, countUVs);\n countUVs += geometry.uvs.length;\n }\n if (geometry.indices) {\n data.indices.set(geometry.indices, countIndices);\n countIndices += geometry.indices.length;\n }\n if (geometry.edgeIndices) {\n data.edgeIndices.set(geometry.edgeIndices, countEdgeIndices);\n countEdgeIndices += geometry.edgeIndices.length;\n }\n }\n\n // Textures\n\n for (let textureIndex = 0, numTextures = xktModel.texturesList.length, portionIdx = 0; textureIndex < numTextures; textureIndex++) {\n const xktTexture = xktModel.texturesList[textureIndex];\n const imageData = xktTexture.imageData;\n data.textureData.set(imageData, portionIdx);\n data.eachTextureDataPortion[textureIndex] = portionIdx;\n\n portionIdx += imageData.byteLength;\n\n let textureAttrIdx = textureIndex * NUM_TEXTURE_ATTRIBUTES;\n data.eachTextureAttributes[textureAttrIdx++] = xktTexture.compressed ? 1 : 0;\n data.eachTextureAttributes[textureAttrIdx++] = xktTexture.mediaType; // GIFMediaType | PNGMediaType | JPEGMediaType\n data.eachTextureAttributes[textureAttrIdx++] = xktTexture.width;\n data.eachTextureAttributes[textureAttrIdx++] = xktTexture.height;\n data.eachTextureAttributes[textureAttrIdx++] = xktTexture.minFilter; // LinearMipmapLinearFilter | LinearMipMapNearestFilter | NearestMipMapNearestFilter | NearestMipMapLinearFilter | LinearMipMapLinearFilter\n data.eachTextureAttributes[textureAttrIdx++] = xktTexture.magFilter; // LinearFilter | NearestFilter\n data.eachTextureAttributes[textureAttrIdx++] = xktTexture.wrapS; // ClampToEdgeWrapping | MirroredRepeatWrapping | RepeatWrapping\n data.eachTextureAttributes[textureAttrIdx++] = xktTexture.wrapT; // ClampToEdgeWrapping | MirroredRepeatWrapping | RepeatWrapping\n data.eachTextureAttributes[textureAttrIdx++] = xktTexture.wrapR; // ClampToEdgeWrapping | MirroredRepeatWrapping | RepeatWrapping\n }\n\n // Texture sets\n\n for (let textureSetIndex = 0, numTextureSets = xktModel.textureSetsList.length, eachTextureSetTexturesIndex = 0; textureSetIndex < numTextureSets; textureSetIndex++) {\n const textureSet = textureSetsList[textureSetIndex];\n data.eachTextureSetTextures[eachTextureSetTexturesIndex++] = textureSet.colorTexture ? textureSet.colorTexture.textureIndex : -1; // Color map\n data.eachTextureSetTextures[eachTextureSetTexturesIndex++] = textureSet.metallicRoughnessTexture ? textureSet.metallicRoughnessTexture.textureIndex : -1; // Metal/rough map\n data.eachTextureSetTextures[eachTextureSetTexturesIndex++] = textureSet.normalsTexture ? textureSet.normalsTexture.textureIndex : -1; // Normal map\n data.eachTextureSetTextures[eachTextureSetTexturesIndex++] = textureSet.emissiveTexture ? textureSet.emissiveTexture.textureIndex : -1; // Emissive map\n data.eachTextureSetTextures[eachTextureSetTexturesIndex++] = textureSet.occlusionTexture ? textureSet.occlusionTexture.textureIndex : -1; // Occlusion map\n }\n\n // Tiles -> Entities -> Meshes\n\n let entityIndex = 0;\n let countEntityMeshesPortion = 0;\n let eachMeshMaterialAttributesIndex = 0;\n let matricesIndex = 0;\n let meshIndex = 0;\n\n for (let tileIndex = 0; tileIndex < numTiles; tileIndex++) {\n\n const tile = tilesList [tileIndex];\n const tileEntities = tile.entities;\n const numTileEntities = tileEntities.length;\n\n if (numTileEntities === 0) {\n continue;\n }\n\n data.eachTileEntitiesPortion[tileIndex] = entityIndex;\n\n const tileAABB = tile.aabb;\n\n for (let j = 0; j < numTileEntities; j++) {\n\n const entity = tileEntities[j];\n const entityMeshes = entity.meshes;\n const numEntityMeshes = entityMeshes.length;\n\n for (let k = 0; k < numEntityMeshes; k++) {\n\n const mesh = entityMeshes[k];\n const geometry = mesh.geometry;\n const geometryIndex = geometry.geometryIndex;\n\n data.eachMeshGeometriesPortion [countEntityMeshesPortion + k] = geometryIndex;\n\n if (mesh.geometry.numInstances > 1) {\n data.matrices.set(mesh.matrix, matricesIndex);\n data.eachMeshMatricesPortion [meshIndex] = matricesIndex;\n matricesIndex += 16;\n }\n\n data.eachMeshTextureSet[meshIndex] = mesh.textureSet ? mesh.textureSet.textureSetIndex : -1;\n\n data.eachMeshMaterialAttributes[eachMeshMaterialAttributesIndex++] = (mesh.color[0] * 255); // Color RGB\n data.eachMeshMaterialAttributes[eachMeshMaterialAttributesIndex++] = (mesh.color[1] * 255);\n data.eachMeshMaterialAttributes[eachMeshMaterialAttributesIndex++] = (mesh.color[2] * 255);\n data.eachMeshMaterialAttributes[eachMeshMaterialAttributesIndex++] = (mesh.opacity * 255); // Opacity\n data.eachMeshMaterialAttributes[eachMeshMaterialAttributesIndex++] = (mesh.metallic * 255); // Metallic\n data.eachMeshMaterialAttributes[eachMeshMaterialAttributesIndex++] = (mesh.roughness * 255); // Roughness\n\n meshIndex++;\n }\n\n data.eachEntityId [entityIndex] = entity.entityId;\n data.eachEntityMeshesPortion[entityIndex] = countEntityMeshesPortion; // <<<<<<<<<<<<<<<<<<<< Error here? Order/value of countEntityMeshesPortion correct?\n\n entityIndex++;\n countEntityMeshesPortion += numEntityMeshes;\n }\n\n const tileAABBIndex = tileIndex * 6;\n\n data.eachTileAABB.set(tileAABB, tileAABBIndex);\n }\n\n return data;\n}\n\nfunction deflateData(data, metaModelJSON, options) {\n\n function deflate(buffer) {\n return (options.zip !== false) ? pako.deflate(buffer) : buffer;\n }\n\n let metaModelBytes;\n if (metaModelJSON) {\n const deflatedJSON = deflateJSON(metaModelJSON);\n metaModelBytes = deflate(deflatedJSON)\n } else {\n const deflatedJSON = deflateJSON(data.metadata);\n metaModelBytes = deflate(deflatedJSON)\n }\n\n return {\n metadata: metaModelBytes,\n textureData: deflate(data.textureData.buffer),\n eachTextureDataPortion: deflate(data.eachTextureDataPortion.buffer),\n eachTextureAttributes: deflate(data.eachTextureAttributes.buffer),\n positions: deflate(data.positions.buffer),\n normals: deflate(data.normals.buffer),\n colors: deflate(data.colors.buffer),\n uvs: deflate(data.uvs.buffer),\n indices: deflate(data.indices.buffer),\n edgeIndices: deflate(data.edgeIndices.buffer),\n eachTextureSetTextures: deflate(data.eachTextureSetTextures.buffer),\n matrices: deflate(data.matrices.buffer),\n reusedGeometriesDecodeMatrix: deflate(data.reusedGeometriesDecodeMatrix.buffer),\n eachGeometryPrimitiveType: deflate(data.eachGeometryPrimitiveType.buffer),\n eachGeometryPositionsPortion: deflate(data.eachGeometryPositionsPortion.buffer),\n eachGeometryNormalsPortion: deflate(data.eachGeometryNormalsPortion.buffer),\n eachGeometryColorsPortion: deflate(data.eachGeometryColorsPortion.buffer),\n eachGeometryUVsPortion: deflate(data.eachGeometryUVsPortion.buffer),\n eachGeometryIndicesPortion: deflate(data.eachGeometryIndicesPortion.buffer),\n eachGeometryEdgeIndicesPortion: deflate(data.eachGeometryEdgeIndicesPortion.buffer),\n eachMeshGeometriesPortion: deflate(data.eachMeshGeometriesPortion.buffer),\n eachMeshMatricesPortion: deflate(data.eachMeshMatricesPortion.buffer),\n eachMeshTextureSet: deflate(data.eachMeshTextureSet.buffer),\n eachMeshMaterialAttributes: deflate(data.eachMeshMaterialAttributes.buffer),\n eachEntityId: deflate(JSON.stringify(data.eachEntityId)\n .replace(/[\\u007F-\\uFFFF]/g, function (chr) { // Produce only ASCII-chars, so that the data can be inflated later\n return \"\\\\u\" + (\"0000\" + chr.charCodeAt(0).toString(16)).substr(-4)\n })),\n eachEntityMeshesPortion: deflate(data.eachEntityMeshesPortion.buffer),\n eachTileAABB: deflate(data.eachTileAABB.buffer),\n eachTileEntitiesPortion: deflate(data.eachTileEntitiesPortion.buffer)\n };\n}\n\nfunction deflateJSON(strings) {\n return JSON.stringify(strings)\n .replace(/[\\u007F-\\uFFFF]/g, function (chr) { // Produce only ASCII-chars, so that the data can be inflated later\n return \"\\\\u\" + (\"0000\" + chr.charCodeAt(0).toString(16)).substr(-4)\n });\n}\n\nfunction createArrayBuffer(deflatedData) {\n return toArrayBuffer([\n deflatedData.metadata,\n deflatedData.textureData,\n deflatedData.eachTextureDataPortion,\n deflatedData.eachTextureAttributes,\n deflatedData.positions,\n deflatedData.normals,\n deflatedData.colors,\n deflatedData.uvs,\n deflatedData.indices,\n deflatedData.edgeIndices,\n deflatedData.eachTextureSetTextures,\n deflatedData.matrices,\n deflatedData.reusedGeometriesDecodeMatrix,\n deflatedData.eachGeometryPrimitiveType,\n deflatedData.eachGeometryPositionsPortion,\n deflatedData.eachGeometryNormalsPortion,\n deflatedData.eachGeometryColorsPortion,\n deflatedData.eachGeometryUVsPortion,\n deflatedData.eachGeometryIndicesPortion,\n deflatedData.eachGeometryEdgeIndicesPortion,\n deflatedData.eachMeshGeometriesPortion,\n deflatedData.eachMeshMatricesPortion,\n deflatedData.eachMeshTextureSet,\n deflatedData.eachMeshMaterialAttributes,\n deflatedData.eachEntityId,\n deflatedData.eachEntityMeshesPortion,\n deflatedData.eachTileAABB,\n deflatedData.eachTileEntitiesPortion\n ]);\n}\n\nfunction toArrayBuffer(elements) {\n const indexData = new Uint32Array(elements.length + 2);\n indexData[0] = 10; // XKT_VERSION for legacy v10 mode\n indexData [1] = elements.length; // Stored Data 1.1: number of stored elements\n let dataLen = 0; // Stored Data 1.2: length of stored elements\n for (let i = 0, len = elements.length; i < len; i++) {\n const element = elements[i];\n const elementsize = element.length;\n indexData[i + 2] = elementsize;\n dataLen += elementsize;\n }\n const indexBuf = new Uint8Array(indexData.buffer);\n const dataArray = new Uint8Array(indexBuf.length + dataLen);\n dataArray.set(indexBuf);\n let offset = indexBuf.length;\n for (let i = 0, len = elements.length; i < len; i++) { // Stored Data 2: the elements themselves\n const element = elements[i];\n dataArray.set(element, offset);\n offset += element.length;\n }\n return dataArray.buffer;\n}\n\nexport {writeXKTModelToArrayBuffer};","/**\n * @desc Provides info on the XKT generated by xeokit-convert.\n */\nconst XKT_INFO = {\n\n /**\n * The XKT version generated by xeokit-convert.\n *\n * This is the XKT version that's modeled by {@link XKTModel}, serialized\n * by {@link writeXKTModelToArrayBuffer}, and written by {@link convert2xkt}.\n *\n * * Current XKT version: **10**\n * * [XKT format specs](https://github.com/xeokit/xeokit-convert/blob/main/specs/index.md)\n *\n * @property xktVersion\n * @type {number}\n */\n xktVersion: 11\n};\n\nexport {XKT_INFO};","/*----------------------------------------------------------------------------------------------------------------------\n * NOTE: The values of these constants must match those within xeokit-sdk\n *--------------------------------------------------------------------------------------------------------------------*/\n\n/**\n * Texture wrapping mode in which the texture repeats to infinity.\n */\nexport const RepeatWrapping = 1000;\n\n/**\n * Texture wrapping mode in which the last pixel of the texture stretches to the edge of the mesh.\n */\nexport const ClampToEdgeWrapping = 1001;\n\n/**\n * Texture wrapping mode in which the texture repeats to infinity, mirroring on each repeat.\n */\nexport const MirroredRepeatWrapping = 1002;\n\n/**\n * Texture magnification and minification filter that returns the nearest texel to the given sample coordinates.\n */\nexport const NearestFilter = 1003;\n\n/**\n * Texture minification filter that chooses the mipmap that most closely matches the size of the pixel being textured and returns the nearest texel to the given sample coordinates.\n */\nexport const NearestMipMapNearestFilter = 1004;\n\n/**\n * Texture minification filter that chooses the mipmap that most closely matches the size of the pixel being textured\n * and returns the nearest texel to the given sample coordinates.\n */\nexport const NearestMipmapNearestFilter = 1004;\n\n/**\n * Texture minification filter that chooses two mipmaps that most closely match the size of the pixel being textured\n * and returns the nearest texel to the center of the pixel at the given sample coordinates.\n */\nexport const NearestMipmapLinearFilter = 1005;\n\n/**\n * Texture minification filter that chooses two mipmaps that most closely match the size of the pixel being textured\n * and returns the nearest texel to the center of the pixel at the given sample coordinates.\n */\nexport const NearestMipMapLinearFilter = 1005;\n\n/**\n * Texture magnification and minification filter that returns the weighted average of the four nearest texels to the given sample coordinates.\n */\nexport const LinearFilter = 1006;\n\n/**\n * Texture minification filter that chooses the mipmap that most closely matches the size of the pixel being textured and\n * returns the weighted average of the four nearest texels to the given sample coordinates.\n */\nexport const LinearMipmapNearestFilter = 1007;\n\n/**\n * Texture minification filter that chooses the mipmap that most closely matches the size of the pixel being textured and\n * returns the weighted average of the four nearest texels to the given sample coordinates.\n */\nexport const LinearMipMapNearestFilter = 1007;\n\n/**\n * Texture minification filter that chooses two mipmaps that most closely match the size of the pixel being textured,\n * finds within each mipmap the weighted average of the nearest texel to the center of the pixel, then returns the\n * weighted average of those two values.\n */\nexport const LinearMipmapLinearFilter = 1008;\n\n/**\n * Texture minification filter that chooses two mipmaps that most closely match the size of the pixel being textured,\n * finds within each mipmap the weighted average of the nearest texel to the center of the pixel, then returns the\n * weighted average of those two values.\n */\nexport const LinearMipMapLinearFilter = 1008;\n\n/**\n * Media type for GIF images.\n */\nexport const GIFMediaType = 10000;\n\n/**\n * Media type for JPEG images.\n */\nexport const JPEGMediaType = 10001;\n\n/**\n * Media type for PNG images.\n */\nexport const PNGMediaType = 10002;","import {XKT_INFO} from \"./XKT_INFO.js\";\nimport {XKTModel} from \"./XKTModel/XKTModel.js\";\nimport {parseCityJSONIntoXKTModel} from \"./parsers/parseCityJSONIntoXKTModel.js\";\nimport {parseGLTFIntoXKTModel} from \"./parsers/parseGLTFIntoXKTModel.js\";\nimport {parseIFCIntoXKTModel} from \"./parsers/parseIFCIntoXKTModel.js\";\nimport {parseLASIntoXKTModel} from \"./parsers/parseLASIntoXKTModel.js\";\nimport {parsePCDIntoXKTModel} from \"./parsers/parsePCDIntoXKTModel.js\";\nimport {parsePLYIntoXKTModel} from \"./parsers/parsePLYIntoXKTModel.js\";\nimport {parseSTLIntoXKTModel} from \"./parsers/parseSTLIntoXKTModel.js\";\nimport {writeXKTModelToArrayBuffer} from \"./XKTModel/writeXKTModelToArrayBuffer.js\";\n\nimport {toArrayBuffer} from \"./XKTModel/lib/toArraybuffer\";\n\nconst fs = require('fs');\nconst path = require(\"path\");\n\n/**\n * Converts model files into xeokit's native XKT format.\n *\n * Supported source formats are: IFC, CityJSON, glTF, LAZ and LAS.\n *\n * **Only bundled in xeokit-convert.cjs.js.**\n *\n * ## Usage\n *\n * ````javascript\n * const convert2xkt = require(\"@xeokit/xeokit-convert/dist/convert2xkt.cjs.js\");\n * const fs = require('fs');\n *\n * convert2xkt({\n * sourceData: fs.readFileSync(\"rme_advanced_sample_project.ifc\"),\n * outputXKT: (xtkArrayBuffer) => {\n * fs.writeFileSync(\"rme_advanced_sample_project.ifc.xkt\", xtkArrayBuffer);\n * }\n * }).then(() => {\n * console.log(\"Converted.\");\n * }, (errMsg) => {\n * console.error(\"Conversion failed: \" + errMsg)\n * });\n ````\n * @param {Object} params Conversion parameters.\n * @param {Object} params.WebIFC The WebIFC library. We pass this in as an external dependency, in order to give the\n * caller the choice of whether to use the Browser or NodeJS version.\n * @param {*} [params.configs] Configurations.\n * @param {String} [params.source] Path to source file. Alternative to ````sourceData````.\n * @param {ArrayBuffer|JSON} [params.sourceData] Source file data. Alternative to ````source````.\n * @param {String} [params.sourceFormat] Format of source file/data. Always needed with ````sourceData````, but not normally needed with ````source````, because convert2xkt will determine the format automatically from the file extension of ````source````.\n * @param {String} [params.metaModelDataStr] Source file data. Overrides metadata from ````metaModelSource````, ````sourceData```` and ````source````.\n * @param {String} [params.metaModelSource] Path to source metaModel file. Overrides metadata from ````sourceData```` and ````source````. Overridden by ````metaModelData````.\n * @param {String} [params.output] Path to destination XKT file. Directories on this path are automatically created if not existing.\n * @param {Function} [params.outputXKTModel] Callback to collect the ````XKTModel```` that is internally build by this method.\n * @param {Function} [params.outputXKT] Callback to collect XKT file data.\n * @param {String[]} [params.includeTypes] Option to only convert objects of these types.\n * @param {String[]} [params.excludeTypes] Option to never convert objects of these types.\n * @param {Object} [stats] Collects conversion statistics. Statistics are attached to this object if provided.\n * @param {Function} [params.outputStats] Callback to collect statistics.\n * @param {Boolean} [params.rotateX=false] Whether to rotate the model 90 degrees about the X axis to make the Y axis \"up\", if necessary. Applies to CityJSON and LAS/LAZ models.\n * @param {Boolean} [params.reuseGeometries=true] When true, will enable geometry reuse within the XKT. When false,\n * will automatically \"expand\" all reused geometries into duplicate copies. This has the drawback of increasing the XKT\n * file size (~10-30% for typical models), but can make the model more responsive in the xeokit Viewer, especially if the model\n * has excessive geometry reuse. An example of excessive geometry reuse would be when a model (eg. glTF) has 4000 geometries that are\n * shared amongst 2000 objects, ie. a large number of geometries with a low amount of reuse, which can present a\n * pathological performance case for xeokit's underlying graphics APIs (WebGL, WebGPU etc).\n * @param {Boolean} [params.includeTextures=true] Whether to convert textures. Only works for ````glTF```` models.\n * @param {Boolean} [params.includeNormals=true] Whether to convert normals. When false, the parser will ignore\n * geometry normals, and the modelwill rely on the xeokit ````Viewer```` to automatically generate them. This has\n * the limitation that the normals will be face-aligned, and therefore the ````Viewer```` will only be able to render\n * a flat-shaded non-PBR representation of the model.\n * @param {Number} [params.minTileSize=200] Minimum RTC coordinate tile size. Set this to a value between 100 and 10000,\n * depending on how far from the coordinate origin the model's vertex positions are; specify larger tile sizes when close\n * to the origin, and smaller sizes when distant. This compensates for decreasing precision as floats get bigger.\n * @param {Function} [params.log] Logging callback.\n * @return {Promise}\n */\nfunction convert2xkt({\n WebIFC,\n configs = {},\n source,\n sourceData,\n sourceFormat,\n metaModelSource,\n metaModelDataStr,\n modelAABB,\n output,\n outputXKTModel,\n outputXKT,\n includeTypes,\n excludeTypes,\n reuseGeometries = true,\n minTileSize = 200,\n stats = {},\n outputStats,\n rotateX = false,\n includeTextures = true,\n includeNormals = true,\n zip = true,\n log = function (msg) {\n }\n }) {\n\n stats.sourceFormat = \"\";\n stats.schemaVersion = \"\";\n stats.title = \"\";\n stats.author = \"\";\n stats.created = \"\";\n stats.numMetaObjects = 0;\n stats.numPropertySets = 0;\n stats.numTriangles = 0;\n stats.numVertices = 0;\n stats.numNormals = 0;\n stats.numUVs = 0;\n stats.numTextures = 0;\n stats.numTextureSets = 0;\n stats.numObjects = 0;\n stats.numGeometries = 0;\n stats.sourceSize = 0;\n stats.xktSize = 0;\n stats.texturesSize = 0;\n stats.xktVersion = \"\";\n stats.compressionRatio = 0;\n stats.conversionTime = 0;\n stats.aabb = null;\n\n function getFileExtension(fileName) {\n let ext = path.extname(fileName);\n if (ext.charAt(0) === \".\") {\n ext = ext.substring(1);\n }\n return ext;\n }\n\n return new Promise(function (resolve, reject) {\n const _log = log;\n log = (msg) => {\n _log(`[convert2xkt] ${msg}`)\n }\n\n if (!source && !sourceData) {\n reject(\"Argument expected: source or sourceData\");\n return;\n }\n\n if (!sourceFormat && sourceData) {\n reject(\"Argument expected: sourceFormat is required with sourceData\");\n return;\n }\n\n if (!output && !outputXKTModel && !outputXKT) {\n reject(\"Argument expected: output, outputXKTModel or outputXKT\");\n return;\n }\n\n if (source) {\n log('Reading input file: ' + source);\n }\n\n const startTime = new Date();\n\n const sourceConfigs = configs.sourceConfigs || {};\n const ext = sourceFormat || getFileExtension(source);\n\n log(`Input file extension: \"${ext}\"`);\n\n let fileTypeConfigs = sourceConfigs[ext];\n\n if (!fileTypeConfigs) {\n log(`[WARNING] Could not find configs sourceConfigs entry for source format \"${ext}\". This is derived from the source file name extension. Will use internal default configs.`);\n fileTypeConfigs = {};\n }\n\n function overrideOption(option1, option2) {\n if (option1 !== undefined) {\n return option1;\n }\n return option2;\n }\n\n if (!sourceData) {\n try {\n sourceData = fs.readFileSync(source);\n } catch (err) {\n reject(err);\n return;\n }\n }\n\n const sourceFileSizeBytes = sourceData.byteLength;\n\n log(\"Input file size: \" + (sourceFileSizeBytes / 1000).toFixed(2) + \" kB\");\n\n if (!metaModelDataStr && metaModelSource) {\n log('Reading input metadata file: ' + metaModelSource);\n try {\n metaModelDataStr = fs.readFileSync(metaModelSource);\n } catch (err) {\n reject(err);\n return;\n }\n } else {\n log(`Not embedding metadata in XKT`);\n }\n\n let metaModelJSON;\n\n if (metaModelDataStr) {\n try {\n metaModelJSON = JSON.parse(metaModelDataStr);\n } catch (e) {\n metaModelJSON = {};\n log(`Error parsing metadata JSON: ${e}`);\n }\n }\n\n minTileSize = overrideOption(fileTypeConfigs.minTileSize, minTileSize);\n rotateX = overrideOption(fileTypeConfigs.rotateX, rotateX);\n reuseGeometries = overrideOption(fileTypeConfigs.reuseGeometries, reuseGeometries);\n includeTextures = overrideOption(fileTypeConfigs.includeTextures, includeTextures);\n includeNormals = overrideOption(fileTypeConfigs.includeNormals, includeNormals);\n includeTypes = overrideOption(fileTypeConfigs.includeTypes, includeTypes);\n excludeTypes = overrideOption(fileTypeConfigs.excludeTypes, excludeTypes);\n\n if (reuseGeometries === false) {\n log(\"Geometry reuse is disabled\");\n }\n\n const xktModel = new XKTModel({\n minTileSize,\n modelAABB\n });\n\n switch (ext) {\n case \"json\":\n convert(parseCityJSONIntoXKTModel, {\n data: JSON.parse(sourceData),\n xktModel,\n stats,\n rotateX,\n center: fileTypeConfigs.center,\n transform: fileTypeConfigs.transform,\n log\n });\n break;\n\n case \"glb\":\n sourceData = toArrayBuffer(sourceData);\n convert(parseGLTFIntoXKTModel, {\n data: sourceData,\n reuseGeometries,\n includeTextures: true,\n includeNormals,\n metaModelData: metaModelJSON,\n xktModel,\n stats,\n log\n });\n break;\n\n case \"gltf\":\n sourceData = toArrayBuffer(sourceData);\n const gltfBasePath = source ? path.dirname(source) : \"\";\n convert(parseGLTFIntoXKTModel, {\n baseUri: gltfBasePath,\n data: sourceData,\n reuseGeometries,\n includeTextures: true,\n includeNormals,\n metaModelData: metaModelJSON,\n xktModel,\n stats,\n log\n });\n break;\n\n // case \"gltf\":\n // const gltfJSON = JSON.parse(sourceData);\n // const gltfBasePath = source ? getBasePath(source) : \"\";\n // convert(parseGLTFIntoXKTModel, {\n // baseUri: gltfBasePath,\n // data: gltfJSON,\n // reuseGeometries,\n // includeTextures,\n // includeNormals,\n // metaModelData: metaModelJSON,\n // xktModel,\n // getAttachment: async (name) => {\n // const filePath = gltfBasePath + name;\n // log(`Reading attachment file: ${filePath}`);\n // const buffer = fs.readFileSync(filePath);\n // const arrayBuf = toArrayBuffer(buffer);\n // return arrayBuf;\n // },\n // stats,\n // log\n // });\n // break;\n\n case \"ifc\":\n convert(parseIFCIntoXKTModel, {\n WebIFC,\n data: sourceData,\n xktModel,\n wasmPath: \"./\",\n includeTypes,\n excludeTypes,\n stats,\n log\n });\n break;\n\n case \"laz\":\n convert(parseLASIntoXKTModel, {\n data: sourceData,\n xktModel,\n stats,\n fp64: fileTypeConfigs.fp64,\n colorDepth: fileTypeConfigs.colorDepth,\n center: fileTypeConfigs.center,\n transform: fileTypeConfigs.transform,\n skip: overrideOption(fileTypeConfigs.skip, 1),\n log\n });\n break;\n\n case \"las\":\n convert(parseLASIntoXKTModel, {\n data: sourceData,\n xktModel,\n stats,\n fp64: fileTypeConfigs.fp64,\n colorDepth: fileTypeConfigs.colorDepth,\n center: fileTypeConfigs.center,\n transform: fileTypeConfigs.transform,\n skip: overrideOption(fileTypeConfigs.skip, 1),\n log\n });\n break;\n\n case \"pcd\":\n convert(parsePCDIntoXKTModel, {\n data: sourceData,\n xktModel,\n stats,\n log\n });\n break;\n\n case \"ply\":\n convert(parsePLYIntoXKTModel, {\n data: sourceData,\n xktModel,\n stats,\n log\n });\n break;\n\n case \"stl\":\n convert(parseSTLIntoXKTModel, {\n data: sourceData,\n xktModel,\n stats,\n log\n });\n break;\n\n default:\n reject(`Error: unsupported source format: \"${ext}\".`);\n return;\n }\n\n function convert(parser, converterParams) {\n\n parser(converterParams).then(() => {\n\n if (!metaModelJSON) {\n log(\"Creating default metamodel in XKT\");\n xktModel.createDefaultMetaObjects();\n }\n\n log(\"Input file parsed OK. Building XKT document...\");\n\n xktModel.finalize().then(() => {\n\n log(\"XKT document built OK. Writing to XKT file...\");\n\n const xktArrayBuffer = writeXKTModelToArrayBuffer(xktModel, metaModelJSON, stats, {zip: zip});\n\n const xktContent = Buffer.from(xktArrayBuffer);\n\n const targetFileSizeBytes = xktArrayBuffer.byteLength;\n\n stats.minTileSize = minTileSize || 200;\n stats.sourceSize = (sourceFileSizeBytes / 1000).toFixed(2);\n stats.xktSize = (targetFileSizeBytes / 1000).toFixed(2);\n stats.xktVersion = zip ? 10 : XKT_INFO.xktVersion;\n stats.compressionRatio = (sourceFileSizeBytes / targetFileSizeBytes).toFixed(2);\n stats.conversionTime = ((new Date() - startTime) / 1000.0).toFixed(2);\n stats.aabb = xktModel.aabb;\n log(`Converted to: XKT v${stats.xktVersion}`);\n if (includeTypes) {\n log(\"Include types: \" + (includeTypes ? includeTypes : \"(include all)\"));\n }\n if (excludeTypes) {\n log(\"Exclude types: \" + (excludeTypes ? excludeTypes : \"(exclude none)\"));\n }\n log(\"XKT size: \" + stats.xktSize + \" kB\");\n log(\"XKT textures size: \" + (stats.texturesSize / 1000).toFixed(2) + \"kB\");\n log(\"Compression ratio: \" + stats.compressionRatio);\n log(\"Conversion time: \" + stats.conversionTime + \" s\");\n log(\"Converted metaobjects: \" + stats.numMetaObjects);\n log(\"Converted property sets: \" + stats.numPropertySets);\n log(\"Converted drawable objects: \" + stats.numObjects);\n log(\"Converted geometries: \" + stats.numGeometries);\n log(\"Converted textures: \" + stats.numTextures);\n log(\"Converted textureSets: \" + stats.numTextureSets);\n log(\"Converted triangles: \" + stats.numTriangles);\n log(\"Converted vertices: \" + stats.numVertices);\n log(\"Converted UVs: \" + stats.numUVs);\n log(\"Converted normals: \" + stats.numNormals);\n log(\"Converted tiles: \" + xktModel.tilesList.length);\n log(\"minTileSize: \" + stats.minTileSize);\n\n if (output) {\n const outputDir = path.dirname(output);\n if (outputDir !== \"\" && !fs.existsSync(outputDir)) {\n fs.mkdirSync(outputDir, {recursive: true});\n }\n log('Writing XKT file: ' + output);\n fs.writeFileSync(output, xktContent);\n }\n\n if (outputXKTModel) {\n outputXKTModel(xktModel);\n }\n\n if (outputXKT) {\n outputXKT(xktContent);\n }\n\n if (outputStats) {\n outputStats(stats);\n }\n\n resolve();\n });\n }, (err) => {\n reject(err);\n });\n }\n });\n}\n\nexport {convert2xkt};","/**\n * @desc Creates box-shaped triangle mesh geometry arrays.\n *\n * ## Usage\n *\n * In the example below we'll create an {@link XKTModel}, then create an {@link XKTMesh} with a box-shaped {@link XKTGeometry}.\n *\n * [[Run this example](http://xeokit.github.io/xeokit-sdk/examples/#geometry_builders_buildBoxGeometry)]\n *\n * ````javascript\n * const xktModel = new XKTModel();\n *\n * const box = buildBoxGeometry({\n * primitiveType: \"triangles\" // or \"lines\"\n * center: [0,0,0],\n * xSize: 1, // Half-size on each axis\n * ySize: 1,\n * zSize: 1\n * });\n *\n * const xktGeometry = xktModel.createGeometry({\n * geometryId: \"boxGeometry\",\n * primitiveType: box.primitiveType,\n * positions: box.positions,\n * normals: box.normals,\n * indices: box.indices\n * });\n *\n * const xktMesh = xktModel.createMesh({\n * meshId: \"redBoxMesh\",\n * geometryId: \"boxGeometry\",\n * position: [-4, -6, -4],\n * scale: [1, 3, 1],\n * rotation: [0, 0, 0],\n * color: [1, 0, 0],\n * opacity: 1\n * });\n *\n * const xktEntity = xktModel.createEntity({\n * entityId: \"redBox\",\n * meshIds: [\"redBoxMesh\"]\n * });\n *\n * xktModel.finalize();\n * ````\n *\n * @function buildBoxGeometry\n * @param {*} [cfg] Configs\n * @param {Number[]} [cfg.center] 3D point indicating the center position.\n * @param {Number} [cfg.xSize=1.0] Half-size on the X-axis.\n * @param {Number} [cfg.ySize=1.0] Half-size on the Y-axis.\n * @param {Number} [cfg.zSize=1.0] Half-size on the Z-axis.\n * @returns {Object} Geometry arrays for {@link XKTModel#createGeometry} or {@link XKTModel#createMesh}.\n */\nfunction buildBoxGeometry(cfg = {}) {\n\n let xSize = cfg.xSize || 1;\n if (xSize < 0) {\n console.error(\"negative xSize not allowed - will invert\");\n xSize *= -1;\n }\n\n let ySize = cfg.ySize || 1;\n if (ySize < 0) {\n console.error(\"negative ySize not allowed - will invert\");\n ySize *= -1;\n }\n\n let zSize = cfg.zSize || 1;\n if (zSize < 0) {\n console.error(\"negative zSize not allowed - will invert\");\n zSize *= -1;\n }\n\n const center = cfg.center;\n const centerX = center ? center[0] : 0;\n const centerY = center ? center[1] : 0;\n const centerZ = center ? center[2] : 0;\n\n const xmin = -xSize + centerX;\n const ymin = -ySize + centerY;\n const zmin = -zSize + centerZ;\n const xmax = xSize + centerX;\n const ymax = ySize + centerY;\n const zmax = zSize + centerZ;\n\n return {\n\n primitiveType: \"triangles\",\n\n // The vertices - eight for our cube, each\n // one spanning three array elements for X,Y and Z\n\n positions: [\n\n // v0-v1-v2-v3 front\n xmax, ymax, zmax,\n xmin, ymax, zmax,\n xmin, ymin, zmax,\n xmax, ymin, zmax,\n\n // v0-v3-v4-v1 right\n xmax, ymax, zmax,\n xmax, ymin, zmax,\n xmax, ymin, zmin,\n xmax, ymax, zmin,\n\n // v0-v1-v6-v1 top\n xmax, ymax, zmax,\n xmax, ymax, zmin,\n xmin, ymax, zmin,\n xmin, ymax, zmax,\n\n // v1-v6-v7-v2 left\n xmin, ymax, zmax,\n xmin, ymax, zmin,\n xmin, ymin, zmin,\n xmin, ymin, zmax,\n\n // v7-v4-v3-v2 bottom\n xmin, ymin, zmin,\n xmax, ymin, zmin,\n xmax, ymin, zmax,\n xmin, ymin, zmax,\n\n // v4-v7-v6-v1 back\n xmax, ymin, zmin,\n xmin, ymin, zmin,\n xmin, ymax, zmin,\n xmax, ymax, zmin\n ],\n\n // Normal vectors, one for each vertex\n normals: [\n\n // v0-v1-v2-v3 front\n 0, 0, 1,\n 0, 0, 1,\n 0, 0, 1,\n 0, 0, 1,\n\n // v0-v3-v4-v5 right\n 1, 0, 0,\n 1, 0, 0,\n 1, 0, 0,\n 1, 0, 0,\n\n // v0-v5-v6-v1 top\n 0, 1, 0,\n 0, 1, 0,\n 0, 1, 0,\n 0, 1, 0,\n\n // v1-v6-v7-v2 left\n -1, 0, 0,\n -1, 0, 0,\n -1, 0, 0,\n -1, 0, 0,\n\n // v7-v4-v3-v2 bottom\n 0, -1, 0,\n 0, -1, 0,\n 0, -1, 0,\n 0, -1, 0,\n\n // v4-v7-v6-v5 back\n 0, 0, -1,\n 0, 0, -1,\n 0, 0, -1,\n 0, 0, -1\n ],\n\n // UV coords\n uv: [\n\n // v0-v1-v2-v3 front\n 1, 0,\n 0, 0,\n 0, 1,\n 1, 1,\n\n // v0-v3-v4-v1 right\n 0, 0,\n 0, 1,\n 1, 1,\n 1, 0,\n\n // v0-v1-v6-v1 top\n 1, 1,\n 1, 0,\n 0, 0,\n 0, 1,\n\n // v1-v6-v7-v2 left\n 1, 0,\n 0, 0,\n 0, 1,\n 1, 1,\n\n // v7-v4-v3-v2 bottom\n 0, 1,\n 1, 1,\n 1, 0,\n 0, 0,\n\n // v4-v7-v6-v1 back\n 0, 1,\n 1, 1,\n 1, 0,\n 0, 0\n ],\n\n // Indices - these organise the\n // positions and uv texture coordinates\n // into geometric primitives in accordance\n // with the \"primitive\" parameter,\n // in this case a set of three indices\n // for each triangle.\n //\n // Note that each triangle is specified\n // in counter-clockwise winding order.\n //\n // You can specify them in clockwise\n // order if you configure the Modes\n // node's frontFace flag as \"cw\", instead of\n // the default \"ccw\".\n indices: [\n 0, 1, 2,\n 0, 2, 3,\n // front\n 4, 5, 6,\n 4, 6, 7,\n // right\n 8, 9, 10,\n 8, 10, 11,\n // top\n 12, 13, 14,\n 12, 14, 15,\n // left\n 16, 17, 18,\n 16, 18, 19,\n // bottom\n 20, 21, 22,\n 20, 22, 23\n ]\n };\n}\n\nexport {buildBoxGeometry};\n","/**\n * @desc Creates box-shaped line segment geometry arrays.\n *\n * ## Usage\n *\n * In the example below we'll create an {@link XKTModel}, then create an {@link XKTMesh} with a box-shaped {@link XKTGeometry}.\n *\n * [[Run this example](http://xeokit.github.io/xeokit-sdk/examples/#geometry_builders_buildBoxLinesGeometry)]\n *\n * ````javascript\n * const xktModel = new XKTModel();\n *\n * const box = buildBoxLinesGeometry({\n * center: [0,0,0],\n * xSize: 1, // Half-size on each axis\n * ySize: 1,\n * zSize: 1\n * });\n *\n * const xktGeometry = xktModel.createGeometry({\n * geometryId: \"boxGeometry\",\n * primitiveType: box.primitiveType, // \"lines\"\n * positions: box.positions,\n * normals: box.normals,\n * indices: box.indices\n * });\n *\n * const xktMesh = xktModel.createMesh({\n * meshId: \"redBoxMesh\",\n * geometryId: \"boxGeometry\",\n * position: [-4, -6, -4],\n * scale: [1, 3, 1],\n * rotation: [0, 0, 0],\n * color: [1, 0, 0],\n * opacity: 1\n * });\n *\n * const xktEntity = xktModel.createEntity({\n * entityId: \"redBox\",\n * meshIds: [\"redBoxMesh\"]\n * });\n *\n * xktModel.finalize();\n * ````\n *\n * @function buildBoxLinesGeometry\n * @param {*} [cfg] Configs\n * @param {Number[]} [cfg.center] 3D point indicating the center position.\n * @param {Number} [cfg.xSize=1.0] Half-size on the X-axis.\n * @param {Number} [cfg.ySize=1.0] Half-size on the Y-axis.\n * @param {Number} [cfg.zSize=1.0] Half-size on the Z-axis.\n * @returns {Object} Geometry arrays for {@link XKTModel#createGeometry} or {@link XKTModel#createMesh}.\n */\nfunction buildBoxLinesGeometry(cfg = {}) {\n\n let xSize = cfg.xSize || 1;\n if (xSize < 0) {\n console.error(\"negative xSize not allowed - will invert\");\n xSize *= -1;\n }\n\n let ySize = cfg.ySize || 1;\n if (ySize < 0) {\n console.error(\"negative ySize not allowed - will invert\");\n ySize *= -1;\n }\n\n let zSize = cfg.zSize || 1;\n if (zSize < 0) {\n console.error(\"negative zSize not allowed - will invert\");\n zSize *= -1;\n }\n\n const center = cfg.center;\n const centerX = center ? center[0] : 0;\n const centerY = center ? center[1] : 0;\n const centerZ = center ? center[2] : 0;\n\n const xmin = -xSize + centerX;\n const ymin = -ySize + centerY;\n const zmin = -zSize + centerZ;\n const xmax = xSize + centerX;\n const ymax = ySize + centerY;\n const zmax = zSize + centerZ;\n\n return {\n primitiveType: \"lines\",\n positions: [\n xmin, ymin, zmin,\n xmin, ymin, zmax,\n xmin, ymax, zmin,\n xmin, ymax, zmax,\n xmax, ymin, zmin,\n xmax, ymin, zmax,\n xmax, ymax, zmin,\n xmax, ymax, zmax\n ],\n indices: [\n 0, 1,\n 1, 3,\n 3, 2,\n 2, 0,\n 4, 5,\n 5, 7,\n 7, 6,\n 6, 4,\n 0, 4,\n 1, 5,\n 2, 6,\n 3, 7\n ]\n }\n}\n\nexport {buildBoxLinesGeometry};\n","/**\n * @desc Creates cylinder-shaped geometry arrays.\n *\n * ## Usage\n *\n * In the example below we'll create an {@link XKTModel}, then create an {@link XKTMesh} with a cylinder-shaped {@link XKTGeometry}.\n *\n * [[Run this example](http://xeokit.github.io/xeokit-sdk/examples/#geometry_builders_buildCylinderGeometry)]\n *\n * ````javascript\n * const xktModel = new XKTModel();\n *\n * const cylinder = buildCylinderGeometry({\n * center: [0,0,0],\n * radiusTop: 2.0,\n * radiusBottom: 2.0,\n * height: 5.0,\n * radialSegments: 20,\n * heightSegments: 1,\n * openEnded: false\n * });\n *\n * const xktGeometry = xktModel.createGeometry({\n * geometryId: \"cylinderGeometry\",\n * primitiveType: cylinder.primitiveType,\n * positions: cylinder.positions,\n * normals: cylinder.normals,\n * indices: cylinder.indices\n * });\n *\n * const xktMesh = xktModel.createMesh({\n * meshId: \"redCylinderMesh\",\n * geometryId: \"cylinderGeometry\",\n * position: [-4, -6, -4],\n * scale: [1, 3, 1],\n * rotation: [0, 0, 0],\n * color: [1, 0, 0],\n * opacity: 1\n * });\n *\n * const xktEntity = xktModel.createEntity({\n * entityId: \"redCylinder\",\n * meshIds: [\"redCylinderMesh\"]\n * });\n *\n * xktModel.finalize();\n * ````\n *\n * @function buildCylinderGeometry\n * @param {*} [cfg] Configs\n * @param {Number[]} [cfg.center] 3D point indicating the center position.\n * @param {Number} [cfg.radiusTop=1] Radius of top.\n * @param {Number} [cfg.radiusBottom=1] Radius of bottom.\n * @param {Number} [cfg.height=1] Height.\n * @param {Number} [cfg.radialSegments=60] Number of horizontal segments.\n * @param {Number} [cfg.heightSegments=1] Number of vertical segments.\n * @param {Boolean} [cfg.openEnded=false] Whether or not the cylinder has solid caps on the ends.\n * @returns {Object} Geometry arrays for {@link XKTModel#createGeometry} or {@link XKTModel#createMesh}.\n */\nfunction buildCylinderGeometry(cfg = {}) {\n\n let radiusTop = cfg.radiusTop || 1;\n if (radiusTop < 0) {\n console.error(\"negative radiusTop not allowed - will invert\");\n radiusTop *= -1;\n }\n\n let radiusBottom = cfg.radiusBottom || 1;\n if (radiusBottom < 0) {\n console.error(\"negative radiusBottom not allowed - will invert\");\n radiusBottom *= -1;\n }\n\n let height = cfg.height || 1;\n if (height < 0) {\n console.error(\"negative height not allowed - will invert\");\n height *= -1;\n }\n\n let radialSegments = cfg.radialSegments || 32;\n if (radialSegments < 0) {\n console.error(\"negative radialSegments not allowed - will invert\");\n radialSegments *= -1;\n }\n if (radialSegments < 3) {\n radialSegments = 3;\n }\n\n let heightSegments = cfg.heightSegments || 1;\n if (heightSegments < 0) {\n console.error(\"negative heightSegments not allowed - will invert\");\n heightSegments *= -1;\n }\n if (heightSegments < 1) {\n heightSegments = 1;\n }\n\n const openEnded = !!cfg.openEnded;\n\n let center = cfg.center;\n const centerX = center ? center[0] : 0;\n const centerY = center ? center[1] : 0;\n const centerZ = center ? center[2] : 0;\n\n const heightHalf = height / 2;\n const heightLength = height / heightSegments;\n const radialAngle = (2.0 * Math.PI / radialSegments);\n const radialLength = 1.0 / radialSegments;\n //var nextRadius = this._radiusBottom;\n const radiusChange = (radiusTop - radiusBottom) / heightSegments;\n\n const positions = [];\n const normals = [];\n const uvs = [];\n const indices = [];\n\n let h;\n let i;\n\n let x;\n let z;\n\n let currentRadius;\n let currentHeight;\n\n let first;\n let second;\n\n let startIndex;\n let tu;\n let tv;\n\n // create vertices\n const normalY = (90.0 - (Math.atan(height / (radiusBottom - radiusTop))) * 180 / Math.PI) / 90.0;\n\n for (h = 0; h <= heightSegments; h++) {\n currentRadius = radiusTop - h * radiusChange;\n currentHeight = heightHalf - h * heightLength;\n\n for (i = 0; i <= radialSegments; i++) {\n x = Math.sin(i * radialAngle);\n z = Math.cos(i * radialAngle);\n\n normals.push(currentRadius * x);\n normals.push(normalY); //todo\n normals.push(currentRadius * z);\n\n uvs.push((i * radialLength));\n uvs.push(h * 1 / heightSegments);\n\n positions.push((currentRadius * x) + centerX);\n positions.push((currentHeight) + centerY);\n positions.push((currentRadius * z) + centerZ);\n }\n }\n\n // create faces\n for (h = 0; h < heightSegments; h++) {\n for (i = 0; i <= radialSegments; i++) {\n\n first = h * (radialSegments + 1) + i;\n second = first + radialSegments;\n\n indices.push(first);\n indices.push(second);\n indices.push(second + 1);\n\n indices.push(first);\n indices.push(second + 1);\n indices.push(first + 1);\n }\n }\n\n // create top cap\n if (!openEnded && radiusTop > 0) {\n startIndex = (positions.length / 3);\n\n // top center\n normals.push(0.0);\n normals.push(1.0);\n normals.push(0.0);\n\n uvs.push(0.5);\n uvs.push(0.5);\n\n positions.push(0 + centerX);\n positions.push(heightHalf + centerY);\n positions.push(0 + centerZ);\n\n // top triangle fan\n for (i = 0; i <= radialSegments; i++) {\n x = Math.sin(i * radialAngle);\n z = Math.cos(i * radialAngle);\n tu = (0.5 * Math.sin(i * radialAngle)) + 0.5;\n tv = (0.5 * Math.cos(i * radialAngle)) + 0.5;\n\n normals.push(radiusTop * x);\n normals.push(1.0);\n normals.push(radiusTop * z);\n\n uvs.push(tu);\n uvs.push(tv);\n\n positions.push((radiusTop * x) + centerX);\n positions.push((heightHalf) + centerY);\n positions.push((radiusTop * z) + centerZ);\n }\n\n for (i = 0; i < radialSegments; i++) {\n center = startIndex;\n first = startIndex + 1 + i;\n\n indices.push(first);\n indices.push(first + 1);\n indices.push(center);\n }\n }\n\n // create bottom cap\n if (!openEnded && radiusBottom > 0) {\n\n startIndex = (positions.length / 3);\n\n // top center\n normals.push(0.0);\n normals.push(-1.0);\n normals.push(0.0);\n\n uvs.push(0.5);\n uvs.push(0.5);\n\n positions.push(0 + centerX);\n positions.push(0 - heightHalf + centerY);\n positions.push(0 + centerZ);\n\n // top triangle fan\n for (i = 0; i <= radialSegments; i++) {\n\n x = Math.sin(i * radialAngle);\n z = Math.cos(i * radialAngle);\n\n tu = (0.5 * Math.sin(i * radialAngle)) + 0.5;\n tv = (0.5 * Math.cos(i * radialAngle)) + 0.5;\n\n normals.push(radiusBottom * x);\n normals.push(-1.0);\n normals.push(radiusBottom * z);\n\n uvs.push(tu);\n uvs.push(tv);\n\n positions.push((radiusBottom * x) + centerX);\n positions.push((0 - heightHalf) + centerY);\n positions.push((radiusBottom * z) + centerZ);\n }\n\n for (i = 0; i < radialSegments; i++) {\n\n center = startIndex;\n first = startIndex + 1 + i;\n\n indices.push(center);\n indices.push(first + 1);\n indices.push(first);\n }\n }\n\n return {\n primitiveType: \"triangles\",\n positions: positions,\n normals: normals,\n uv: uvs,\n uvs: uvs,\n indices: indices\n };\n}\n\n\nexport {buildCylinderGeometry};\n","/**\n * @desc Creates grid-shaped geometry arrays..\n *\n * ## Usage\n *\n * In the example below we'll create an {@link XKTModel}, then create an {@link XKTMesh} with a grid-shaped {@link XKTGeometry}.\n *\n * [[Run this example](http://xeokit.github.io/xeokit-sdk/examples/#geometry_builders_buildGridGeometry)]\n *\n * ````javascript\n * const xktModel = new XKTModel();\n *\n * const grid = buildGridGeometry({\n * size: 1000,\n * divisions: 500\n * });\n *\n * const xktGeometry = xktModel.createGeometry({\n * geometryId: \"gridGeometry\",\n * primitiveType: grid.primitiveType, // Will be \"lines\"\n * positions: grid.positions,\n * indices: grid.indices\n * });\n *\n * const xktMesh = xktModel.createMesh({\n * meshId: \"redGridMesh\",\n * geometryId: \"gridGeometry\",\n * position: [-4, -6, -4],\n * scale: [1, 3, 1],\n * rotation: [0, 0, 0],\n * color: [1, 0, 0],\n * opacity: 1\n * });\n *\n * const xktEntity = xktModel.createEntity({\n * entityId: \"redGrid\",\n * meshIds: [\"redGridMesh\"]\n * });\n *\n * xktModel.finalize();\n * ````\n *\n * @function buildGridGeometry\n * @param {*} [cfg] Configs\n * @param {Number} [cfg.size=1] Dimension on the X and Z-axis.\n * @param {Number} [cfg.divisions=1] Number of divisions on X and Z axis..\n * @returns {Object} Geometry arrays for {@link XKTModel#createGeometry} or {@link XKTModel#createMesh}.\n */\nfunction buildGridGeometry(cfg = {}) {\n\n let size = cfg.size || 1;\n if (size < 0) {\n console.error(\"negative size not allowed - will invert\");\n size *= -1;\n }\n\n let divisions = cfg.divisions || 1;\n if (divisions < 0) {\n console.error(\"negative divisions not allowed - will invert\");\n divisions *= -1;\n }\n if (divisions < 1) {\n divisions = 1;\n }\n\n size = size || 10;\n divisions = divisions || 10;\n\n const step = size / divisions;\n const halfSize = size / 2;\n\n const positions = [];\n const indices = [];\n let l = 0;\n\n for (let i = 0, j = 0, k = -halfSize; i <= divisions; i++, k += step) {\n\n positions.push(-halfSize);\n positions.push(0);\n positions.push(k);\n\n positions.push(halfSize);\n positions.push(0);\n positions.push(k);\n\n positions.push(k);\n positions.push(0);\n positions.push(-halfSize);\n\n positions.push(k);\n positions.push(0);\n positions.push(halfSize);\n\n indices.push(l++);\n indices.push(l++);\n indices.push(l++);\n indices.push(l++);\n }\n\n return {\n primitiveType: \"lines\",\n positions: positions,\n indices: indices\n };\n}\n\n\nexport {buildGridGeometry};\n","/**\n * @desc Creates plane-shaped geometry arrays.\n *\n * ## Usage\n *\n * In the example below we'll create an {@link XKTModel}, then create an {@link XKTMesh} with a plane-shaped {@link XKTGeometry}.\n *\n * [[Run this example](http://xeokit.github.io/xeokit-sdk/examples/#geometry_builders_buildPlaneGeometry)]\n *\n * ````javascript\n * const xktModel = new XKTModel();\n *\n * const plane = buildPlaneGeometry({\n * center: [0,0,0],\n * xSize: 2,\n * zSize: 2,\n * xSegments: 10,\n * zSegments: 10\n * });\n *\n * const xktGeometry = xktModel.createGeometry({\n * geometryId: \"planeGeometry\",\n * primitiveType: plane.primitiveType, // Will be \"triangles\"\n * positions: plane.positions,\n * normals: plane.normals,\n * indices: plane.indices\n * });\n *\n * const xktMesh = xktModel.createMesh({\n * meshId: \"redPlaneMesh\",\n * geometryId: \"planeGeometry\",\n * position: [-4, -6, -4],\n * scale: [1, 3, 1],\n * rotation: [0, 0, 0],\n * color: [1, 0, 0],\n * opacity: 1\n * });\n *\n * const xktEntity = xktModel.createEntity({\n * entityId: \"redPlane\",\n * meshIds: [\"redPlaneMesh\"]\n * });\n *\n * xktModel.finalize();\n * ````\n *\n * @function buildPlaneGeometry\n * @param {*} [cfg] Configs\n * @param {Number[]} [cfg.center] 3D point indicating the center position.\n * @param {Number} [cfg.xSize=1] Dimension on the X-axis.\n * @param {Number} [cfg.zSize=1] Dimension on the Z-axis.\n * @param {Number} [cfg.xSegments=1] Number of segments on the X-axis.\n * @param {Number} [cfg.zSegments=1] Number of segments on the Z-axis.\n * @returns {Object} Geometry arrays for {@link XKTModel#createGeometry} or {@link XKTModel#createMesh}.\n */\nfunction buildPlaneGeometry(cfg = {}) {\n\n let xSize = cfg.xSize || 1;\n if (xSize < 0) {\n console.error(\"negative xSize not allowed - will invert\");\n xSize *= -1;\n }\n\n let zSize = cfg.zSize || 1;\n if (zSize < 0) {\n console.error(\"negative zSize not allowed - will invert\");\n zSize *= -1;\n }\n\n let xSegments = cfg.xSegments || 1;\n if (xSegments < 0) {\n console.error(\"negative xSegments not allowed - will invert\");\n xSegments *= -1;\n }\n if (xSegments < 1) {\n xSegments = 1;\n }\n\n let zSegments = cfg.xSegments || 1;\n if (zSegments < 0) {\n console.error(\"negative zSegments not allowed - will invert\");\n zSegments *= -1;\n }\n if (zSegments < 1) {\n zSegments = 1;\n }\n\n const center = cfg.center;\n const centerX = center ? center[0] : 0;\n const centerY = center ? center[1] : 0;\n const centerZ = center ? center[2] : 0;\n\n const halfWidth = xSize / 2;\n const halfHeight = zSize / 2;\n\n const planeX = Math.floor(xSegments) || 1;\n const planeZ = Math.floor(zSegments) || 1;\n\n const planeX1 = planeX + 1;\n const planeZ1 = planeZ + 1;\n\n const segmentWidth = xSize / planeX;\n const segmentHeight = zSize / planeZ;\n\n const positions = new Float32Array(planeX1 * planeZ1 * 3);\n const normals = new Float32Array(planeX1 * planeZ1 * 3);\n const uvs = new Float32Array(planeX1 * planeZ1 * 2);\n\n let offset = 0;\n let offset2 = 0;\n\n let iz;\n let ix;\n let x;\n let a;\n let b;\n let c;\n let d;\n\n for (iz = 0; iz < planeZ1; iz++) {\n\n const z = iz * segmentHeight - halfHeight;\n\n for (ix = 0; ix < planeX1; ix++) {\n\n x = ix * segmentWidth - halfWidth;\n\n positions[offset] = x + centerX;\n positions[offset + 1] = centerY;\n positions[offset + 2] = -z + centerZ;\n\n normals[offset + 2] = -1;\n\n uvs[offset2] = (ix) / planeX;\n uvs[offset2 + 1] = ((planeZ - iz) / planeZ);\n\n offset += 3;\n offset2 += 2;\n }\n }\n\n offset = 0;\n\n const indices = new ((positions.length / 3) > 65535 ? Uint32Array : Uint16Array)(planeX * planeZ * 6);\n\n for (iz = 0; iz < planeZ; iz++) {\n\n for (ix = 0; ix < planeX; ix++) {\n\n a = ix + planeX1 * iz;\n b = ix + planeX1 * (iz + 1);\n c = (ix + 1) + planeX1 * (iz + 1);\n d = (ix + 1) + planeX1 * iz;\n\n indices[offset] = d;\n indices[offset + 1] = b;\n indices[offset + 2] = a;\n\n indices[offset + 3] = d;\n indices[offset + 4] = c;\n indices[offset + 5] = b;\n\n offset += 6;\n }\n }\n\n return {\n primitiveType: \"triangles\",\n positions: positions,\n normals: normals,\n uv: uvs,\n uvs: uvs,\n indices: indices\n };\n}\n\nexport {buildPlaneGeometry};\n","/**\n * @desc Creates sphere-shaped geometry arrays.\n *\n * ## Usage\n *\n * In the example below we'll create an {@link XKTModel}, then create an {@link XKTMesh} with a sphere-shaped {@link XKTGeometry}.\n *\n * [[Run this example](http://xeokit.github.io/xeokit-sdk/examples/#geometry_builders_buildSphereGeometry)]\n *\n * ````javascript\n * const xktModel = new XKTModel();\n *\n * const sphere = buildSphereGeometry({\n * center: [0,0,0],\n * radius: 1.5,\n * heightSegments: 60,\n * widthSegments: 60\n * });\n *\n * const xktGeometry = xktModel.createGeometry({\n * geometryId: \"sphereGeometry\",\n * primitiveType: sphere.primitiveType, // Will be \"triangles\"\n * positions: sphere.positions,\n * normals: sphere.normals,\n * indices: sphere.indices\n * });\n *\n * const xktMesh = xktModel.createMesh({\n * meshId: \"redSphereMesh\",\n * geometryId: \"sphereGeometry\",\n * position: [-4, -6, -4],\n * scale: [1, 3, 1],\n * rotation: [0, 0, 0],\n * color: [1, 0, 0],\n * opacity: 1\n * });\n *\n *const xktEntity = xktModel.createEntity({\n * entityId: \"redSphere\",\n * meshIds: [\"redSphereMesh\"]\n * });\n *\n * xktModel.finalize();\n * ````\n *\n * @function buildSphereGeometry\n * @param {*} [cfg] Configs\n * @param {Number[]} [cfg.center] 3D point indicating the center position.\n * @param {Number} [cfg.radius=1] Radius.\n * @param {Number} [cfg.heightSegments=24] Number of latitudinal bands.\n * @param {Number} [cfg.widthSegments=18] Number of longitudinal bands.\n * @returns {Object} Geometry arrays for {@link XKTModel#createGeometry} or {@link XKTModel#createMesh}.\n */\nfunction buildSphereGeometry(cfg = {}) {\n\n const lod = cfg.lod || 1;\n\n const centerX = cfg.center ? cfg.center[0] : 0;\n const centerY = cfg.center ? cfg.center[1] : 0;\n const centerZ = cfg.center ? cfg.center[2] : 0;\n\n let radius = cfg.radius || 1;\n if (radius < 0) {\n console.error(\"negative radius not allowed - will invert\");\n radius *= -1;\n }\n\n let heightSegments = cfg.heightSegments || 18;\n if (heightSegments < 0) {\n console.error(\"negative heightSegments not allowed - will invert\");\n heightSegments *= -1;\n }\n heightSegments = Math.floor(lod * heightSegments);\n if (heightSegments < 18) {\n heightSegments = 18;\n }\n\n let widthSegments = cfg.widthSegments || 18;\n if (widthSegments < 0) {\n console.error(\"negative widthSegments not allowed - will invert\");\n widthSegments *= -1;\n }\n widthSegments = Math.floor(lod * widthSegments);\n if (widthSegments < 18) {\n widthSegments = 18;\n }\n\n const positions = [];\n const normals = [];\n const uvs = [];\n const indices = [];\n\n let i;\n let j;\n\n let theta;\n let sinTheta;\n let cosTheta;\n\n let phi;\n let sinPhi;\n let cosPhi;\n\n let x;\n let y;\n let z;\n\n let u;\n let v;\n\n let first;\n let second;\n\n for (i = 0; i <= heightSegments; i++) {\n\n theta = i * Math.PI / heightSegments;\n sinTheta = Math.sin(theta);\n cosTheta = Math.cos(theta);\n\n for (j = 0; j <= widthSegments; j++) {\n\n phi = j * 2 * Math.PI / widthSegments;\n sinPhi = Math.sin(phi);\n cosPhi = Math.cos(phi);\n\n x = cosPhi * sinTheta;\n y = cosTheta;\n z = sinPhi * sinTheta;\n u = 1.0 - j / widthSegments;\n v = i / heightSegments;\n\n normals.push(x);\n normals.push(y);\n normals.push(z);\n\n uvs.push(u);\n uvs.push(v);\n\n positions.push(centerX + radius * x);\n positions.push(centerY + radius * y);\n positions.push(centerZ + radius * z);\n }\n }\n\n for (i = 0; i < heightSegments; i++) {\n for (j = 0; j < widthSegments; j++) {\n\n first = (i * (widthSegments + 1)) + j;\n second = first + widthSegments + 1;\n\n indices.push(first + 1);\n indices.push(second + 1);\n indices.push(second);\n indices.push(first + 1);\n indices.push(second);\n indices.push(first);\n }\n }\n\n return {\n primitiveType: \"triangles\",\n positions: positions,\n normals: normals,\n uv: uvs,\n uvs: uvs,\n indices: indices\n };\n}\n\nexport {buildSphereGeometry};\n","import {math} from '../lib/math.js';\n\n/**\n * @desc Creates torus-shaped geometry arrays.\n *\n * ## Usage\n *\n * In the example below we'll create an {@link XKTModel}, then create an {@link XKTMesh} with a torus-shaped {@link XKTGeometry}.\n *\n * [[Run this example](http://xeokit.github.io/xeokit-sdk/examples/#geometry_builders_buildTorusGeometry)]\n *\n * ````javascript\n * const xktModel = new XKTModel();\n *\n * const torus = buildTorusGeometry({\n * center: [0,0,0],\n * radius: 1.0,\n * tube: 0.5,\n * radialSegments: 32,\n * tubeSegments: 24,\n * arc: Math.PI * 2.0\n * });\n *\n * const xktGeometry = xktModel.createGeometry({\n * geometryId: \"torusGeometry\",\n * primitiveType: torus.primitiveType, // Will be \"triangles\"\n * positions: torus.positions,\n * normals: torus.normals,\n * indices: torus.indices\n * });\n *\n * const xktMesh = xktModel.createMesh({\n * meshId: \"redTorusMesh\",\n * geometryId: \"torusGeometry\",\n * position: [-4, -6, -4],\n * scale: [1, 3, 1],\n * rotation: [0, 0, 0],\n * color: [1, 0, 0],\n * opacity: 1\n * });\n *\n * const xktEntity = xktModel.createEntity({\n * entityId: \"redTorus\",\n * meshIds: [\"redTorusMesh\"]\n * });\n *\n * xktModel.finalize();\n * ````\n *\n * @function buildTorusGeometry\n * @param {*} [cfg] Configs\n * @param {Number[]} [cfg.center] 3D point indicating the center position.\n * @param {Number} [cfg.radius=1] The overall radius.\n * @param {Number} [cfg.tube=0.3] The tube radius.\n * @param {Number} [cfg.radialSegments=32] The number of radial segments.\n * @param {Number} [cfg.tubeSegments=24] The number of tubular segments.\n * @param {Number} [cfg.arc=Math.PI*0.5] The length of the arc in radians, where Math.PI*2 is a closed torus.\n * @returns {Object} Geometry arrays for {@link XKTModel#createGeometry} or {@link XKTModel#createMesh}.\n */\nfunction buildTorusGeometry(cfg = {}) {\n\n let radius = cfg.radius || 1;\n if (radius < 0) {\n console.error(\"negative radius not allowed - will invert\");\n radius *= -1;\n }\n radius *= 0.5;\n\n let tube = cfg.tube || 0.3;\n if (tube < 0) {\n console.error(\"negative tube not allowed - will invert\");\n tube *= -1;\n }\n\n let radialSegments = cfg.radialSegments || 32;\n if (radialSegments < 0) {\n console.error(\"negative radialSegments not allowed - will invert\");\n radialSegments *= -1;\n }\n if (radialSegments < 4) {\n radialSegments = 4;\n }\n\n let tubeSegments = cfg.tubeSegments || 24;\n if (tubeSegments < 0) {\n console.error(\"negative tubeSegments not allowed - will invert\");\n tubeSegments *= -1;\n }\n if (tubeSegments < 4) {\n tubeSegments = 4;\n }\n\n let arc = cfg.arc || Math.PI * 2;\n if (arc < 0) {\n console.warn(\"negative arc not allowed - will invert\");\n arc *= -1;\n }\n if (arc > 360) {\n arc = 360;\n }\n\n const center = cfg.center;\n let centerX = center ? center[0] : 0;\n let centerY = center ? center[1] : 0;\n const centerZ = center ? center[2] : 0;\n\n const positions = [];\n const normals = [];\n const uvs = [];\n const indices = [];\n\n let u;\n let v;\n let x;\n let y;\n let z;\n let vec;\n\n let i;\n let j;\n\n for (j = 0; j <= tubeSegments; j++) {\n for (i = 0; i <= radialSegments; i++) {\n\n u = i / radialSegments * arc;\n v = 0.785398 + (j / tubeSegments * Math.PI * 2);\n\n centerX = radius * Math.cos(u);\n centerY = radius * Math.sin(u);\n\n x = (radius + tube * Math.cos(v)) * Math.cos(u);\n y = (radius + tube * Math.cos(v)) * Math.sin(u);\n z = tube * Math.sin(v);\n\n positions.push(x + centerX);\n positions.push(y + centerY);\n positions.push(z + centerZ);\n\n uvs.push(1 - (i / radialSegments));\n uvs.push((j / tubeSegments));\n\n vec = math.normalizeVec3(math.subVec3([x, y, z], [centerX, centerY, centerZ], []), []);\n\n normals.push(vec[0]);\n normals.push(vec[1]);\n normals.push(vec[2]);\n }\n }\n\n let a;\n let b;\n let c;\n let d;\n\n for (j = 1; j <= tubeSegments; j++) {\n for (i = 1; i <= radialSegments; i++) {\n\n a = (radialSegments + 1) * j + i - 1;\n b = (radialSegments + 1) * (j - 1) + i - 1;\n c = (radialSegments + 1) * (j - 1) + i;\n d = (radialSegments + 1) * j + i;\n\n indices.push(a);\n indices.push(b);\n indices.push(c);\n\n indices.push(c);\n indices.push(d);\n indices.push(a);\n }\n }\n\n return {\n primitiveType: \"triangles\",\n positions: positions,\n normals: normals,\n uv: uvs,\n uvs: uvs,\n indices: indices\n };\n}\n\nexport {buildTorusGeometry};\n","const letters = {\n ' ': {width: 16, points: []},\n '!': {\n width: 10, points: [\n [5, 21],\n [5, 7],\n [-1, -1],\n [5, 2],\n [4, 1],\n [5, 0],\n [6, 1],\n [5, 2]\n ]\n },\n '\"': {\n width: 16, points: [\n [4, 21],\n [4, 14],\n [-1, -1],\n [12, 21],\n [12, 14]\n ]\n },\n '#': {\n width: 21, points: [\n [11, 25],\n [4, -7],\n [-1, -1],\n [17, 25],\n [10, -7],\n [-1, -1],\n [4, 12],\n [18, 12],\n [-1, -1],\n [3, 6],\n [17, 6]\n ]\n },\n '$': {\n width: 20, points: [\n [8, 25],\n [8, -4],\n [-1, -1],\n [12, 25],\n [12, -4],\n [-1, -1],\n [17, 18],\n [15, 20],\n [12, 21],\n [8, 21],\n [5, 20],\n [3, 18],\n [3, 16],\n [4, 14],\n [5, 13],\n [7, 12],\n [13, 10],\n [15, 9],\n [16, 8],\n [17, 6],\n [17, 3],\n [15, 1],\n [12, 0],\n [8, 0],\n [5, 1],\n [3, 3]\n ]\n },\n '%': {\n width: 24, points: [\n [21, 21],\n [3, 0],\n [-1, -1],\n [8, 21],\n [10, 19],\n [10, 17],\n [9, 15],\n [7, 14],\n [5, 14],\n [3, 16],\n [3, 18],\n [4, 20],\n [6, 21],\n [8, 21],\n [10, 20],\n [13, 19],\n [16, 19],\n [19, 20],\n [21, 21],\n [-1, -1],\n [17, 7],\n [15, 6],\n [14, 4],\n [14, 2],\n [16, 0],\n [18, 0],\n [20, 1],\n [21, 3],\n [21, 5],\n [19, 7],\n [17, 7]\n ]\n },\n '&': {\n width: 26, points: [\n [23, 12],\n [23, 13],\n [22, 14],\n [21, 14],\n [20, 13],\n [19, 11],\n [17, 6],\n [15, 3],\n [13, 1],\n [11, 0],\n [7, 0],\n [5, 1],\n [4, 2],\n [3, 4],\n [3, 6],\n [4, 8],\n [5, 9],\n [12, 13],\n [13, 14],\n [14, 16],\n [14, 18],\n [13, 20],\n [11, 21],\n [9, 20],\n [8, 18],\n [8, 16],\n [9, 13],\n [11, 10],\n [16, 3],\n [18, 1],\n [20, 0],\n [22, 0],\n [23, 1],\n [23, 2]\n ]\n },\n '\\'': {\n width: 10, points: [\n [5, 19],\n [4, 20],\n [5, 21],\n [6, 20],\n [6, 18],\n [5, 16],\n [4, 15]\n ]\n },\n '(': {\n width: 14, points: [\n [11, 25],\n [9, 23],\n [7, 20],\n [5, 16],\n [4, 11],\n [4, 7],\n [5, 2],\n [7, -2],\n [9, -5],\n [11, -7]\n ]\n },\n ')': {\n width: 14, points: [\n [3, 25],\n [5, 23],\n [7, 20],\n [9, 16],\n [10, 11],\n [10, 7],\n [9, 2],\n [7, -2],\n [5, -5],\n [3, -7]\n ]\n },\n '*': {\n width: 16, points: [\n [8, 21],\n [8, 9],\n [-1, -1],\n [3, 18],\n [13, 12],\n [-1, -1],\n [13, 18],\n [3, 12]\n ]\n },\n '+': {\n width: 26, points: [\n [13, 18],\n [13, 0],\n [-1, -1],\n [4, 9],\n [22, 9]\n ]\n },\n ',': {\n width: 10, points: [\n [6, 1],\n [5, 0],\n [4, 1],\n [5, 2],\n [6, 1],\n [6, -1],\n [5, -3],\n [4, -4]\n ]\n },\n '-': {\n width: 26, points: [\n [4, 9],\n [22, 9]\n ]\n },\n '.': {\n width: 10, points: [\n [5, 2],\n [4, 1],\n [5, 0],\n [6, 1],\n [5, 2]\n ]\n },\n '/': {\n width: 22, points: [\n [20, 25],\n [2, -7]\n ]\n },\n '0': {\n width: 20, points: [\n [9, 21],\n [6, 20],\n [4, 17],\n [3, 12],\n [3, 9],\n [4, 4],\n [6, 1],\n [9, 0],\n [11, 0],\n [14, 1],\n [16, 4],\n [17, 9],\n [17, 12],\n [16, 17],\n [14, 20],\n [11, 21],\n [9, 21]\n ]\n },\n '1': {\n width: 20, points: [\n [6, 17],\n [8, 18],\n [11, 21],\n [11, 0]\n ]\n },\n '2': {\n width: 20, points: [\n [4, 16],\n [4, 17],\n [5, 19],\n [6, 20],\n [8, 21],\n [12, 21],\n [14, 20],\n [15, 19],\n [16, 17],\n [16, 15],\n [15, 13],\n [13, 10],\n [3, 0],\n [17, 0]\n ]\n },\n '3': {\n width: 20, points: [\n [5, 21],\n [16, 21],\n [10, 13],\n [13, 13],\n [15, 12],\n [16, 11],\n [17, 8],\n [17, 6],\n [16, 3],\n [14, 1],\n [11, 0],\n [8, 0],\n [5, 1],\n [4, 2],\n [3, 4]\n ]\n },\n '4': {\n width: 20, points: [\n [13, 21],\n [3, 7],\n [18, 7],\n [-1, -1],\n [13, 21],\n [13, 0]\n ]\n },\n '5': {\n width: 20, points: [\n [15, 21],\n [5, 21],\n [4, 12],\n [5, 13],\n [8, 14],\n [11, 14],\n [14, 13],\n [16, 11],\n [17, 8],\n [17, 6],\n [16, 3],\n [14, 1],\n [11, 0],\n [8, 0],\n [5, 1],\n [4, 2],\n [3, 4]\n ]\n },\n '6': {\n width: 20, points: [\n [16, 18],\n [15, 20],\n [12, 21],\n [10, 21],\n [7, 20],\n [5, 17],\n [4, 12],\n [4, 7],\n [5, 3],\n [7, 1],\n [10, 0],\n [11, 0],\n [14, 1],\n [16, 3],\n [17, 6],\n [17, 7],\n [16, 10],\n [14, 12],\n [11, 13],\n [10, 13],\n [7, 12],\n [5, 10],\n [4, 7]\n ]\n },\n '7': {\n width: 20, points: [\n [17, 21],\n [7, 0],\n [-1, -1],\n [3, 21],\n [17, 21]\n ]\n },\n '8': {\n width: 20, points: [\n [8, 21],\n [5, 20],\n [4, 18],\n [4, 16],\n [5, 14],\n [7, 13],\n [11, 12],\n [14, 11],\n [16, 9],\n [17, 7],\n [17, 4],\n [16, 2],\n [15, 1],\n [12, 0],\n [8, 0],\n [5, 1],\n [4, 2],\n [3, 4],\n [3, 7],\n [4, 9],\n [6, 11],\n [9, 12],\n [13, 13],\n [15, 14],\n [16, 16],\n [16, 18],\n [15, 20],\n [12, 21],\n [8, 21]\n ]\n },\n '9': {\n width: 20, points: [\n [16, 14],\n [15, 11],\n [13, 9],\n [10, 8],\n [9, 8],\n [6, 9],\n [4, 11],\n [3, 14],\n [3, 15],\n [4, 18],\n [6, 20],\n [9, 21],\n [10, 21],\n [13, 20],\n [15, 18],\n [16, 14],\n [16, 9],\n [15, 4],\n [13, 1],\n [10, 0],\n [8, 0],\n [5, 1],\n [4, 3]\n ]\n },\n ':': {\n width: 10, points: [\n [5, 14],\n [4, 13],\n [5, 12],\n [6, 13],\n [5, 14],\n [-1, -1],\n [5, 2],\n [4, 1],\n [5, 0],\n [6, 1],\n [5, 2]\n ]\n },\n ';': {\n width: 10, points: [\n [5, 14],\n [4, 13],\n [5, 12],\n [6, 13],\n [5, 14],\n [-1, -1],\n [6, 1],\n [5, 0],\n [4, 1],\n [5, 2],\n [6, 1],\n [6, -1],\n [5, -3],\n [4, -4]\n ]\n },\n '<': {\n width: 24, points: [\n [20, 18],\n [4, 9],\n [20, 0]\n ]\n },\n '=': {\n width: 26, points: [\n [4, 12],\n [22, 12],\n [-1, -1],\n [4, 6],\n [22, 6]\n ]\n },\n '>': {\n width: 24, points: [\n [4, 18],\n [20, 9],\n [4, 0]\n ]\n },\n '?': {\n width: 18, points: [\n [3, 16],\n [3, 17],\n [4, 19],\n [5, 20],\n [7, 21],\n [11, 21],\n [13, 20],\n [14, 19],\n [15, 17],\n [15, 15],\n [14, 13],\n [13, 12],\n [9, 10],\n [9, 7],\n [-1, -1],\n [9, 2],\n [8, 1],\n [9, 0],\n [10, 1],\n [9, 2]\n ]\n },\n '@': {\n width: 27, points: [\n [18, 13],\n [17, 15],\n [15, 16],\n [12, 16],\n [10, 15],\n [9, 14],\n [8, 11],\n [8, 8],\n [9, 6],\n [11, 5],\n [14, 5],\n [16, 6],\n [17, 8],\n [-1, -1],\n [12, 16],\n [10, 14],\n [9, 11],\n [9, 8],\n [10, 6],\n [11, 5],\n [-1, -1],\n [18, 16],\n [17, 8],\n [17, 6],\n [19, 5],\n [21, 5],\n [23, 7],\n [24, 10],\n [24, 12],\n [23, 15],\n [22, 17],\n [20, 19],\n [18, 20],\n [15, 21],\n [12, 21],\n [9, 20],\n [7, 19],\n [5, 17],\n [4, 15],\n [3, 12],\n [3, 9],\n [4, 6],\n [5, 4],\n [7, 2],\n [9, 1],\n [12, 0],\n [15, 0],\n [18, 1],\n [20, 2],\n [21, 3],\n [-1, -1],\n [19, 16],\n [18, 8],\n [18, 6],\n [19, 5]\n ]\n },\n 'A': {\n width: 18, points: [\n [9, 21],\n [1, 0],\n [-1, -1],\n [9, 21],\n [17, 0],\n [-1, -1],\n [4, 7],\n [14, 7]\n ]\n },\n 'B': {\n width: 21, points: [\n [4, 21],\n [4, 0],\n [-1, -1],\n [4, 21],\n [13, 21],\n [16, 20],\n [17, 19],\n [18, 17],\n [18, 15],\n [17, 13],\n [16, 12],\n [13, 11],\n [-1, -1],\n [4, 11],\n [13, 11],\n [16, 10],\n [17, 9],\n [18, 7],\n [18, 4],\n [17, 2],\n [16, 1],\n [13, 0],\n [4, 0]\n ]\n },\n 'C': {\n width: 21, points: [\n [18, 16],\n [17, 18],\n [15, 20],\n [13, 21],\n [9, 21],\n [7, 20],\n [5, 18],\n [4, 16],\n [3, 13],\n [3, 8],\n [4, 5],\n [5, 3],\n [7, 1],\n [9, 0],\n [13, 0],\n [15, 1],\n [17, 3],\n [18, 5]\n ]\n },\n 'D': {\n width: 21, points: [\n [4, 21],\n [4, 0],\n [-1, -1],\n [4, 21],\n [11, 21],\n [14, 20],\n [16, 18],\n [17, 16],\n [18, 13],\n [18, 8],\n [17, 5],\n [16, 3],\n [14, 1],\n [11, 0],\n [4, 0]\n ]\n },\n 'E': {\n width: 19, points: [\n [4, 21],\n [4, 0],\n [-1, -1],\n [4, 21],\n [17, 21],\n [-1, -1],\n [4, 11],\n [12, 11],\n [-1, -1],\n [4, 0],\n [17, 0]\n ]\n },\n 'F': {\n width: 18, points: [\n [4, 21],\n [4, 0],\n [-1, -1],\n [4, 21],\n [17, 21],\n [-1, -1],\n [4, 11],\n [12, 11]\n ]\n },\n 'G': {\n width: 21, points: [\n [18, 16],\n [17, 18],\n [15, 20],\n [13, 21],\n [9, 21],\n [7, 20],\n [5, 18],\n [4, 16],\n [3, 13],\n [3, 8],\n [4, 5],\n [5, 3],\n [7, 1],\n [9, 0],\n [13, 0],\n [15, 1],\n [17, 3],\n [18, 5],\n [18, 8],\n [-1, -1],\n [13, 8],\n [18, 8]\n ]\n },\n 'H': {\n width: 22, points: [\n [4, 21],\n [4, 0],\n [-1, -1],\n [18, 21],\n [18, 0],\n [-1, -1],\n [4, 11],\n [18, 11]\n ]\n },\n 'I': {\n width: 8, points: [\n [4, 21],\n [4, 0]\n ]\n },\n 'J': {\n width: 16, points: [\n [12, 21],\n [12, 5],\n [11, 2],\n [10, 1],\n [8, 0],\n [6, 0],\n [4, 1],\n [3, 2],\n [2, 5],\n [2, 7]\n ]\n },\n 'K': {\n width: 21, points: [\n [4, 21],\n [4, 0],\n [-1, -1],\n [18, 21],\n [4, 7],\n [-1, -1],\n [9, 12],\n [18, 0]\n ]\n },\n 'L': {\n width: 17, points: [\n [4, 21],\n [4, 0],\n [-1, -1],\n [4, 0],\n [16, 0]\n ]\n },\n 'M': {\n width: 24, points: [\n [4, 21],\n [4, 0],\n [-1, -1],\n [4, 21],\n [12, 0],\n [-1, -1],\n [20, 21],\n [12, 0],\n [-1, -1],\n [20, 21],\n [20, 0]\n ]\n },\n 'N': {\n width: 22, points: [\n [4, 21],\n [4, 0],\n [-1, -1],\n [4, 21],\n [18, 0],\n [-1, -1],\n [18, 21],\n [18, 0]\n ]\n },\n 'O': {\n width: 22, points: [\n [9, 21],\n [7, 20],\n [5, 18],\n [4, 16],\n [3, 13],\n [3, 8],\n [4, 5],\n [5, 3],\n [7, 1],\n [9, 0],\n [13, 0],\n [15, 1],\n [17, 3],\n [18, 5],\n [19, 8],\n [19, 13],\n [18, 16],\n [17, 18],\n [15, 20],\n [13, 21],\n [9, 21]\n ]\n },\n 'P': {\n width: 21, points: [\n [4, 21],\n [4, 0],\n [-1, -1],\n [4, 21],\n [13, 21],\n [16, 20],\n [17, 19],\n [18, 17],\n [18, 14],\n [17, 12],\n [16, 11],\n [13, 10],\n [4, 10]\n ]\n },\n 'Q': {\n width: 22, points: [\n [9, 21],\n [7, 20],\n [5, 18],\n [4, 16],\n [3, 13],\n [3, 8],\n [4, 5],\n [5, 3],\n [7, 1],\n [9, 0],\n [13, 0],\n [15, 1],\n [17, 3],\n [18, 5],\n [19, 8],\n [19, 13],\n [18, 16],\n [17, 18],\n [15, 20],\n [13, 21],\n [9, 21],\n [-1, -1],\n [12, 4],\n [18, -2]\n ]\n },\n 'R': {\n width: 21, points: [\n [4, 21],\n [4, 0],\n [-1, -1],\n [4, 21],\n [13, 21],\n [16, 20],\n [17, 19],\n [18, 17],\n [18, 15],\n [17, 13],\n [16, 12],\n [13, 11],\n [4, 11],\n [-1, -1],\n [11, 11],\n [18, 0]\n ]\n },\n 'S': {\n width: 20, points: [\n [17, 18],\n [15, 20],\n [12, 21],\n [8, 21],\n [5, 20],\n [3, 18],\n [3, 16],\n [4, 14],\n [5, 13],\n [7, 12],\n [13, 10],\n [15, 9],\n [16, 8],\n [17, 6],\n [17, 3],\n [15, 1],\n [12, 0],\n [8, 0],\n [5, 1],\n [3, 3]\n ]\n },\n 'T': {\n width: 16, points: [\n [8, 21],\n [8, 0],\n [-1, -1],\n [1, 21],\n [15, 21]\n ]\n },\n 'U': {\n width: 22, points: [\n [4, 21],\n [4, 6],\n [5, 3],\n [7, 1],\n [10, 0],\n [12, 0],\n [15, 1],\n [17, 3],\n [18, 6],\n [18, 21]\n ]\n },\n 'V': {\n width: 18, points: [\n [1, 21],\n [9, 0],\n [-1, -1],\n [17, 21],\n [9, 0]\n ]\n },\n 'W': {\n width: 24, points: [\n [2, 21],\n [7, 0],\n [-1, -1],\n [12, 21],\n [7, 0],\n [-1, -1],\n [12, 21],\n [17, 0],\n [-1, -1],\n [22, 21],\n [17, 0]\n ]\n },\n 'X': {\n width: 20, points: [\n [3, 21],\n [17, 0],\n [-1, -1],\n [17, 21],\n [3, 0]\n ]\n },\n 'Y': {\n width: 18, points: [\n [1, 21],\n [9, 11],\n [9, 0],\n [-1, -1],\n [17, 21],\n [9, 11]\n ]\n },\n 'Z': {\n width: 20, points: [\n [17, 21],\n [3, 0],\n [-1, -1],\n [3, 21],\n [17, 21],\n [-1, -1],\n [3, 0],\n [17, 0]\n ]\n },\n '[': {\n width: 14, points: [\n [4, 25],\n [4, -7],\n [-1, -1],\n [5, 25],\n [5, -7],\n [-1, -1],\n [4, 25],\n [11, 25],\n [-1, -1],\n [4, -7],\n [11, -7]\n ]\n },\n '\\\\': {\n width: 14, points: [\n [0, 21],\n [14, -3]\n ]\n },\n ']': {\n width: 14, points: [\n [9, 25],\n [9, -7],\n [-1, -1],\n [10, 25],\n [10, -7],\n [-1, -1],\n [3, 25],\n [10, 25],\n [-1, -1],\n [3, -7],\n [10, -7]\n ]\n },\n '^': {\n width: 16, points: [\n [6, 15],\n [8, 18],\n [10, 15],\n [-1, -1],\n [3, 12],\n [8, 17],\n [13, 12],\n [-1, -1],\n [8, 17],\n [8, 0]\n ]\n },\n '_': {\n width: 16, points: [\n [0, -2],\n [16, -2]\n ]\n },\n '`': {\n width: 10, points: [\n [6, 21],\n [5, 20],\n [4, 18],\n [4, 16],\n [5, 15],\n [6, 16],\n [5, 17]\n ]\n },\n 'a': {\n width: 19, points: [\n [15, 14],\n [15, 0],\n [-1, -1],\n [15, 11],\n [13, 13],\n [11, 14],\n [8, 14],\n [6, 13],\n [4, 11],\n [3, 8],\n [3, 6],\n [4, 3],\n [6, 1],\n [8, 0],\n [11, 0],\n [13, 1],\n [15, 3]\n ]\n },\n 'b': {\n width: 19, points: [\n [4, 21],\n [4, 0],\n [-1, -1],\n [4, 11],\n [6, 13],\n [8, 14],\n [11, 14],\n [13, 13],\n [15, 11],\n [16, 8],\n [16, 6],\n [15, 3],\n [13, 1],\n [11, 0],\n [8, 0],\n [6, 1],\n [4, 3]\n ]\n },\n 'c': {\n width: 18, points: [\n [15, 11],\n [13, 13],\n [11, 14],\n [8, 14],\n [6, 13],\n [4, 11],\n [3, 8],\n [3, 6],\n [4, 3],\n [6, 1],\n [8, 0],\n [11, 0],\n [13, 1],\n [15, 3]\n ]\n },\n 'd': {\n width: 19, points: [\n [15, 21],\n [15, 0],\n [-1, -1],\n [15, 11],\n [13, 13],\n [11, 14],\n [8, 14],\n [6, 13],\n [4, 11],\n [3, 8],\n [3, 6],\n [4, 3],\n [6, 1],\n [8, 0],\n [11, 0],\n [13, 1],\n [15, 3]\n ]\n },\n 'e': {\n width: 18, points: [\n [3, 8],\n [15, 8],\n [15, 10],\n [14, 12],\n [13, 13],\n [11, 14],\n [8, 14],\n [6, 13],\n [4, 11],\n [3, 8],\n [3, 6],\n [4, 3],\n [6, 1],\n [8, 0],\n [11, 0],\n [13, 1],\n [15, 3]\n ]\n },\n 'f': {\n width: 12, points: [\n [10, 21],\n [8, 21],\n [6, 20],\n [5, 17],\n [5, 0],\n [-1, -1],\n [2, 14],\n [9, 14]\n ]\n },\n 'g': {\n width: 19, points: [\n [15, 14],\n [15, -2],\n [14, -5],\n [13, -6],\n [11, -7],\n [8, -7],\n [6, -6],\n [-1, -1],\n [15, 11],\n [13, 13],\n [11, 14],\n [8, 14],\n [6, 13],\n [4, 11],\n [3, 8],\n [3, 6],\n [4, 3],\n [6, 1],\n [8, 0],\n [11, 0],\n [13, 1],\n [15, 3]\n ]\n },\n 'h': {\n width: 19, points: [\n [4, 21],\n [4, 0],\n [-1, -1],\n [4, 10],\n [7, 13],\n [9, 14],\n [12, 14],\n [14, 13],\n [15, 10],\n [15, 0]\n ]\n },\n 'i': {\n width: 8, points: [\n [3, 21],\n [4, 20],\n [5, 21],\n [4, 22],\n [3, 21],\n [-1, -1],\n [4, 14],\n [4, 0]\n ]\n },\n 'j': {\n width: 10, points: [\n [5, 21],\n [6, 20],\n [7, 21],\n [6, 22],\n [5, 21],\n [-1, -1],\n [6, 14],\n [6, -3],\n [5, -6],\n [3, -7],\n [1, -7]\n ]\n },\n 'k': {\n width: 17, points: [\n [4, 21],\n [4, 0],\n [-1, -1],\n [14, 14],\n [4, 4],\n [-1, -1],\n [8, 8],\n [15, 0]\n ]\n },\n 'l': {\n width: 8, points: [\n [4, 21],\n [4, 0]\n ]\n },\n 'm': {\n width: 30, points: [\n [4, 14],\n [4, 0],\n [-1, -1],\n [4, 10],\n [7, 13],\n [9, 14],\n [12, 14],\n [14, 13],\n [15, 10],\n [15, 0],\n [-1, -1],\n [15, 10],\n [18, 13],\n [20, 14],\n [23, 14],\n [25, 13],\n [26, 10],\n [26, 0]\n ]\n },\n 'n': {\n width: 19, points: [\n [4, 14],\n [4, 0],\n [-1, -1],\n [4, 10],\n [7, 13],\n [9, 14],\n [12, 14],\n [14, 13],\n [15, 10],\n [15, 0]\n ]\n },\n 'o': {\n width: 19, points: [\n [8, 14],\n [6, 13],\n [4, 11],\n [3, 8],\n [3, 6],\n [4, 3],\n [6, 1],\n [8, 0],\n [11, 0],\n [13, 1],\n [15, 3],\n [16, 6],\n [16, 8],\n [15, 11],\n [13, 13],\n [11, 14],\n [8, 14]\n ]\n },\n 'p': {\n width: 19, points: [\n [4, 14],\n [4, -7],\n [-1, -1],\n [4, 11],\n [6, 13],\n [8, 14],\n [11, 14],\n [13, 13],\n [15, 11],\n [16, 8],\n [16, 6],\n [15, 3],\n [13, 1],\n [11, 0],\n [8, 0],\n [6, 1],\n [4, 3]\n ]\n },\n 'q': {\n width: 19, points: [\n [15, 14],\n [15, -7],\n [-1, -1],\n [15, 11],\n [13, 13],\n [11, 14],\n [8, 14],\n [6, 13],\n [4, 11],\n [3, 8],\n [3, 6],\n [4, 3],\n [6, 1],\n [8, 0],\n [11, 0],\n [13, 1],\n [15, 3]\n ]\n },\n 'r': {\n width: 13, points: [\n [4, 14],\n [4, 0],\n [-1, -1],\n [4, 8],\n [5, 11],\n [7, 13],\n [9, 14],\n [12, 14]\n ]\n },\n 's': {\n width: 17, points: [\n [14, 11],\n [13, 13],\n [10, 14],\n [7, 14],\n [4, 13],\n [3, 11],\n [4, 9],\n [6, 8],\n [11, 7],\n [13, 6],\n [14, 4],\n [14, 3],\n [13, 1],\n [10, 0],\n [7, 0],\n [4, 1],\n [3, 3]\n ]\n },\n 't': {\n width: 12, points: [\n [5, 21],\n [5, 4],\n [6, 1],\n [8, 0],\n [10, 0],\n [-1, -1],\n [2, 14],\n [9, 14]\n ]\n },\n 'u': {\n width: 19, points: [\n [4, 14],\n [4, 4],\n [5, 1],\n [7, 0],\n [10, 0],\n [12, 1],\n [15, 4],\n [-1, -1],\n [15, 14],\n [15, 0]\n ]\n },\n 'v': {\n width: 16, points: [\n [2, 14],\n [8, 0],\n [-1, -1],\n [14, 14],\n [8, 0]\n ]\n },\n 'w': {\n width: 22, points: [\n [3, 14],\n [7, 0],\n [-1, -1],\n [11, 14],\n [7, 0],\n [-1, -1],\n [11, 14],\n [15, 0],\n [-1, -1],\n [19, 14],\n [15, 0]\n ]\n },\n 'x': {\n width: 17, points: [\n [3, 14],\n [14, 0],\n [-1, -1],\n [14, 14],\n [3, 0]\n ]\n },\n 'y': {\n width: 16, points: [\n [2, 14],\n [8, 0],\n [-1, -1],\n [14, 14],\n [8, 0],\n [6, -4],\n [4, -6],\n [2, -7],\n [1, -7]\n ]\n },\n 'z': {\n width: 17, points: [\n [14, 14],\n [3, 0],\n [-1, -1],\n [3, 14],\n [14, 14],\n [-1, -1],\n [3, 0],\n [14, 0]\n ]\n },\n '{': {\n width: 14, points: [\n [9, 25],\n [7, 24],\n [6, 23],\n [5, 21],\n [5, 19],\n [6, 17],\n [7, 16],\n [8, 14],\n [8, 12],\n [6, 10],\n [-1, -1],\n [7, 24],\n [6, 22],\n [6, 20],\n [7, 18],\n [8, 17],\n [9, 15],\n [9, 13],\n [8, 11],\n [4, 9],\n [8, 7],\n [9, 5],\n [9, 3],\n [8, 1],\n [7, 0],\n [6, -2],\n [6, -4],\n [7, -6],\n [-1, -1],\n [6, 8],\n [8, 6],\n [8, 4],\n [7, 2],\n [6, 1],\n [5, -1],\n [5, -3],\n [6, -5],\n [7, -6],\n [9, -7]\n ]\n },\n '|': {\n width: 8, points: [\n [4, 25],\n [4, -7]\n ]\n },\n '}': {\n width: 14, points: [\n [5, 25],\n [7, 24],\n [8, 23],\n [9, 21],\n [9, 19],\n [8, 17],\n [7, 16],\n [6, 14],\n [6, 12],\n [8, 10],\n [-1, -1],\n [7, 24],\n [8, 22],\n [8, 20],\n [7, 18],\n [6, 17],\n [5, 15],\n [5, 13],\n [6, 11],\n [10, 9],\n [6, 7],\n [5, 5],\n [5, 3],\n [6, 1],\n [7, 0],\n [8, -2],\n [8, -4],\n [7, -6],\n [-1, -1],\n [8, 8],\n [6, 6],\n [6, 4],\n [7, 2],\n [8, 1],\n [9, -1],\n [9, -3],\n [8, -5],\n [7, -6],\n [5, -7]\n ]\n },\n '~': {\n width: 24, points: [\n [3, 6],\n [3, 8],\n [4, 11],\n [6, 12],\n [8, 12],\n [10, 11],\n [14, 8],\n [16, 7],\n [18, 7],\n [20, 8],\n [21, 10],\n [-1, -1],\n [3, 8],\n [4, 10],\n [6, 11],\n [8, 11],\n [10, 10],\n [14, 7],\n [16, 6],\n [18, 6],\n [20, 7],\n [21, 10],\n [21, 12]\n ]\n }\n};\n\n/**\n * @desc Creates wireframe text-shaped geometry arrays.\n *\n * ## Usage\n *\n * In the example below we'll create an {@link XKTModel}, then create an {@link XKTMesh} with a text-shaped {@link XKTGeometry}.\n *\n * [[Run this example](http://xeokit.github.io/xeokit-sdk/examples/#geometry_builders_buildVectorTextGeometry)]\n *\n * ````javascript\n * const xktModel = new XKTModel();\n *\n * const text = buildVectorTextGeometry({\n * origin: [0,0,0],\n * text: \"On the other side of the screen, it all looked so easy\"\n * });\n *\n * const xktGeometry = xktModel.createGeometry({\n * geometryId: \"textGeometry\",\n * primitiveType: text.primitiveType, // Will be \"lines\"\n * positions: text.positions,\n * indices: text.indices\n * });\n *\n * const xktMesh = xktModel.createMesh({\n * meshId: \"redTextMesh\",\n * geometryId: \"textGeometry\",\n * position: [-4, -6, -4],\n * scale: [1, 3, 1],\n * rotation: [0, 0, 0],\n * color: [1, 0, 0],\n * opacity: 1\n * });\n *\n * const xktEntity = xktModel.createEntity({\n * entityId: \"redText\",\n * meshIds: [\"redTextMesh\"]\n * });\n *\n * xktModel.finalize();\n * ````\n *\n * @function buildVectorTextGeometry\n * @param {*} [cfg] Configs\n * @param {Number[]} [cfg.center] 3D point indicating the center position.\n * @param {Number[]} [cfg.origin] 3D point indicating the top left corner.\n * @param {Number} [cfg.size=1] Size of each character.\n * @param {String} [cfg.text=\"\"] The text.\n * @returns {Object} Geometry arrays for {@link XKTModel#createGeometry} or {@link XKTModel#createMesh}.\n */\nfunction buildVectorTextGeometry(cfg = {}) {\n\n var origin = cfg.origin || [0, 0, 0];\n var xOrigin = origin[0];\n var yOrigin = origin[1];\n var zOrigin = origin[2];\n var size = cfg.size || 1;\n\n var positions = [];\n var indices = [];\n var text = (\"\" + cfg.text).trim();\n var lines = (text || \"\").split(\"\\n\");\n var countVerts = 0;\n var y = 0;\n var x;\n var str;\n var len;\n var c;\n var mag = 1.0 / 25.0;\n var penUp;\n var p1;\n var p2;\n var needLine;\n var pointsLen;\n var a;\n\n for (var iLine = 0; iLine < lines.length; iLine++) {\n\n x = 0;\n str = lines[iLine];\n len = str.length;\n\n for (var i = 0; i < len; i++) {\n\n c = letters[str.charAt(i)];\n\n if (c === '\\n') {\n //alert(\"newline\");\n }\n\n if (!c) {\n continue;\n }\n\n penUp = 1;\n p1 = -1;\n p2 = -1;\n needLine = false;\n\n pointsLen = c.points.length;\n\n for (var j = 0; j < pointsLen; j++) {\n a = c.points[j];\n\n if (a[0] === -1 && a[1] === -1) {\n penUp = 1;\n needLine = false;\n continue;\n }\n\n positions.push((x + (a[0] * size) * mag) + xOrigin);\n positions.push((y + (a[1] * size) * mag) + yOrigin);\n positions.push(0 + zOrigin);\n\n if (p1 === -1) {\n p1 = countVerts;\n } else if (p2 === -1) {\n p2 = countVerts;\n } else {\n p1 = p2;\n p2 = countVerts;\n }\n countVerts++;\n\n if (penUp) {\n penUp = false;\n\n } else {\n indices.push(p1);\n indices.push(p2);\n }\n\n needLine = true;\n }\n x += c.width * mag * size;\n\n }\n y -= 35 * mag * size;\n }\n\n return {\n primitiveType: \"lines\",\n positions: positions,\n indices: indices\n };\n}\n\n\nexport {buildVectorTextGeometry}\n","export {XKT_INFO} from \"./XKT_INFO.js\";\nexport * from \"./constants.js\";\nexport {XKTModel} from \"./XKTModel/XKTModel.js\";\nexport {writeXKTModelToArrayBuffer} from \"./XKTModel/writeXKTModelToArrayBuffer.js\";\n\nexport {parseCityJSONIntoXKTModel} from \"./parsers/parseCityJSONIntoXKTModel.js\";\nexport {parseGLTFIntoXKTModel} from \"./parsers/parseGLTFIntoXKTModel.js\";\nexport {parseGLTFJSONIntoXKTModel} from \"./parsers/parseGLTFJSONIntoXKTModel.js\";\nexport {parseIFCIntoXKTModel} from \"./parsers/parseIFCIntoXKTModel.js\";\nexport {parseLASIntoXKTModel} from \"./parsers/parseLASIntoXKTModel.js\";\nexport {parseMetaModelIntoXKTModel} from \"./parsers/parseMetaModelIntoXKTModel.js\";\nexport {parsePCDIntoXKTModel} from \"./parsers/parsePCDIntoXKTModel.js\";\nexport {parsePLYIntoXKTModel} from \"./parsers/parsePLYIntoXKTModel.js\";\nexport {parseSTLIntoXKTModel} from \"./parsers/parseSTLIntoXKTModel.js\";\n\nexport {buildBoxGeometry} from \"./geometryBuilders/buildBoxGeometry.js\";\nexport {buildBoxLinesGeometry} from \"./geometryBuilders/buildBoxLinesGeometry.js\";\nexport {buildCylinderGeometry} from \"./geometryBuilders/buildCylinderGeometry.js\";\nexport {buildGridGeometry} from \"./geometryBuilders/buildGridGeometry.js\";\nexport {buildPlaneGeometry} from \"./geometryBuilders/buildPlaneGeometry.js\";\nexport {buildSphereGeometry} from \"./geometryBuilders/buildSphereGeometry.js\";\nexport {buildTorusGeometry} from \"./geometryBuilders/buildTorusGeometry.js\";\nexport {buildVectorTextGeometry} from \"./geometryBuilders/buildVectorTextGeometry.js\";\n\n","/** @private */\nfunction earcut(data, holeIndices, dim) {\n\n dim = dim || 2;\n\n var hasHoles = holeIndices && holeIndices.length,\n outerLen = hasHoles ? holeIndices[0] * dim : data.length,\n outerNode = linkedList(data, 0, outerLen, dim, true),\n triangles = [];\n\n if (!outerNode || outerNode.next === outerNode.prev) return triangles;\n\n var minX, minY, maxX, maxY, x, y, invSize;\n\n if (hasHoles) outerNode = eliminateHoles(data, holeIndices, outerNode, dim);\n\n // if the shape is not too simple, we'll use z-order curve hash later; calculate polygon bbox\n if (data.length > 80 * dim) {\n minX = maxX = data[0];\n minY = maxY = data[1];\n\n for (var i = dim; i < outerLen; i += dim) {\n x = data[i];\n y = data[i + 1];\n if (x < minX) minX = x;\n if (y < minY) minY = y;\n if (x > maxX) maxX = x;\n if (y > maxY) maxY = y;\n }\n\n // minX, minY and invSize are later used to transform coords into integers for z-order calculation\n invSize = Math.max(maxX - minX, maxY - minY);\n invSize = invSize !== 0 ? 1 / invSize : 0;\n }\n\n earcutLinked(outerNode, triangles, dim, minX, minY, invSize);\n\n return triangles;\n}\n\n// create a circular doubly linked list from polygon points in the specified winding order\nfunction linkedList(data, start, end, dim, clockwise) {\n var i, last;\n\n if (clockwise === (signedArea(data, start, end, dim) > 0)) {\n for (i = start; i < end; i += dim) last = insertNode(i, data[i], data[i + 1], last);\n } else {\n for (i = end - dim; i >= start; i -= dim) last = insertNode(i, data[i], data[i + 1], last);\n }\n\n if (last && equals(last, last.next)) {\n removeNode(last);\n last = last.next;\n }\n\n return last;\n}\n\n// eliminate colinear or duplicate points\nfunction filterPoints(start, end) {\n if (!start) return start;\n if (!end) end = start;\n\n var p = start,\n again;\n do {\n again = false;\n\n if (!p.steiner && (equals(p, p.next) || area(p.prev, p, p.next) === 0)) {\n removeNode(p);\n p = end = p.prev;\n if (p === p.next) break;\n again = true;\n\n } else {\n p = p.next;\n }\n } while (again || p !== end);\n\n return end;\n}\n\n// main ear slicing loop which triangulates a polygon (given as a linked list)\nfunction earcutLinked(ear, triangles, dim, minX, minY, invSize, pass) {\n if (!ear) return;\n\n // interlink polygon nodes in z-order\n if (!pass && invSize) indexCurve(ear, minX, minY, invSize);\n\n var stop = ear,\n prev, next;\n\n // iterate through ears, slicing them one by one\n while (ear.prev !== ear.next) {\n prev = ear.prev;\n next = ear.next;\n\n if (invSize ? isEarHashed(ear, minX, minY, invSize) : isEar(ear)) {\n // cut off the triangle\n triangles.push(prev.i / dim);\n triangles.push(ear.i / dim);\n triangles.push(next.i / dim);\n\n removeNode(ear);\n\n // skipping the next vertex leads to less sliver triangles\n ear = next.next;\n stop = next.next;\n\n continue;\n }\n\n ear = next;\n\n // if we looped through the whole remaining polygon and can't find any more ears\n if (ear === stop) {\n // try filtering points and slicing again\n if (!pass) {\n earcutLinked(filterPoints(ear), triangles, dim, minX, minY, invSize, 1);\n\n // if this didn't work, try curing all small self-intersections locally\n } else if (pass === 1) {\n ear = cureLocalIntersections(filterPoints(ear), triangles, dim);\n earcutLinked(ear, triangles, dim, minX, minY, invSize, 2);\n\n // as a last resort, try splitting the remaining polygon into two\n } else if (pass === 2) {\n splitEarcut(ear, triangles, dim, minX, minY, invSize);\n }\n\n break;\n }\n }\n}\n\n// check whether a polygon node forms a valid ear with adjacent nodes\nfunction isEar(ear) {\n var a = ear.prev,\n b = ear,\n c = ear.next;\n\n if (area(a, b, c) >= 0) return false; // reflex, can't be an ear\n\n // now make sure we don't have other points inside the potential ear\n var p = ear.next.next;\n\n while (p !== ear.prev) {\n if (pointInTriangle(a.x, a.y, b.x, b.y, c.x, c.y, p.x, p.y) &&\n area(p.prev, p, p.next) >= 0) return false;\n p = p.next;\n }\n\n return true;\n}\n\nfunction isEarHashed(ear, minX, minY, invSize) {\n var a = ear.prev,\n b = ear,\n c = ear.next;\n\n if (area(a, b, c) >= 0) return false; // reflex, can't be an ear\n\n // triangle bbox; min & max are calculated like this for speed\n var minTX = a.x < b.x ? (a.x < c.x ? a.x : c.x) : (b.x < c.x ? b.x : c.x),\n minTY = a.y < b.y ? (a.y < c.y ? a.y : c.y) : (b.y < c.y ? b.y : c.y),\n maxTX = a.x > b.x ? (a.x > c.x ? a.x : c.x) : (b.x > c.x ? b.x : c.x),\n maxTY = a.y > b.y ? (a.y > c.y ? a.y : c.y) : (b.y > c.y ? b.y : c.y);\n\n // z-order range for the current triangle bbox;\n var minZ = zOrder(minTX, minTY, minX, minY, invSize),\n maxZ = zOrder(maxTX, maxTY, minX, minY, invSize);\n\n var p = ear.prevZ,\n n = ear.nextZ;\n\n // look for points inside the triangle in both directions\n while (p && p.z >= minZ && n && n.z <= maxZ) {\n if (p !== ear.prev && p !== ear.next &&\n pointInTriangle(a.x, a.y, b.x, b.y, c.x, c.y, p.x, p.y) &&\n area(p.prev, p, p.next) >= 0) return false;\n p = p.prevZ;\n\n if (n !== ear.prev && n !== ear.next &&\n pointInTriangle(a.x, a.y, b.x, b.y, c.x, c.y, n.x, n.y) &&\n area(n.prev, n, n.next) >= 0) return false;\n n = n.nextZ;\n }\n\n // look for remaining points in decreasing z-order\n while (p && p.z >= minZ) {\n if (p !== ear.prev && p !== ear.next &&\n pointInTriangle(a.x, a.y, b.x, b.y, c.x, c.y, p.x, p.y) &&\n area(p.prev, p, p.next) >= 0) return false;\n p = p.prevZ;\n }\n\n // look for remaining points in increasing z-order\n while (n && n.z <= maxZ) {\n if (n !== ear.prev && n !== ear.next &&\n pointInTriangle(a.x, a.y, b.x, b.y, c.x, c.y, n.x, n.y) &&\n area(n.prev, n, n.next) >= 0) return false;\n n = n.nextZ;\n }\n\n return true;\n}\n\n// go through all polygon nodes and cure small local self-intersections\nfunction cureLocalIntersections(start, triangles, dim) {\n var p = start;\n do {\n var a = p.prev,\n b = p.next.next;\n\n if (!equals(a, b) && intersects(a, p, p.next, b) && locallyInside(a, b) && locallyInside(b, a)) {\n\n triangles.push(a.i / dim);\n triangles.push(p.i / dim);\n triangles.push(b.i / dim);\n\n // remove two nodes involved\n removeNode(p);\n removeNode(p.next);\n\n p = start = b;\n }\n p = p.next;\n } while (p !== start);\n\n return filterPoints(p);\n}\n\n// try splitting polygon into two and triangulate them independently\nfunction splitEarcut(start, triangles, dim, minX, minY, invSize) {\n // look for a valid diagonal that divides the polygon into two\n var a = start;\n do {\n var b = a.next.next;\n while (b !== a.prev) {\n if (a.i !== b.i && isValidDiagonal(a, b)) {\n // split the polygon in two by the diagonal\n var c = splitPolygon(a, b);\n\n // filter colinear points around the cuts\n a = filterPoints(a, a.next);\n c = filterPoints(c, c.next);\n\n // run earcut on each half\n earcutLinked(a, triangles, dim, minX, minY, invSize);\n earcutLinked(c, triangles, dim, minX, minY, invSize);\n return;\n }\n b = b.next;\n }\n a = a.next;\n } while (a !== start);\n}\n\n// link every hole into the outer loop, producing a single-ring polygon without holes\nfunction eliminateHoles(data, holeIndices, outerNode, dim) {\n var queue = [],\n i, len, start, end, list;\n\n for (i = 0, len = holeIndices.length; i < len; i++) {\n start = holeIndices[i] * dim;\n end = i < len - 1 ? holeIndices[i + 1] * dim : data.length;\n list = linkedList(data, start, end, dim, false);\n if (list === list.next) list.steiner = true;\n queue.push(getLeftmost(list));\n }\n\n queue.sort(compareX);\n\n // process holes from left to right\n for (i = 0; i < queue.length; i++) {\n eliminateHole(queue[i], outerNode);\n outerNode = filterPoints(outerNode, outerNode.next);\n }\n\n return outerNode;\n}\n\nfunction compareX(a, b) {\n return a.x - b.x;\n}\n\n// find a bridge between vertices that connects hole with an outer ring and and link it\nfunction eliminateHole(hole, outerNode) {\n outerNode = findHoleBridge(hole, outerNode);\n if (outerNode) {\n var b = splitPolygon(outerNode, hole);\n\n // filter collinear points around the cuts\n filterPoints(outerNode, outerNode.next);\n filterPoints(b, b.next);\n }\n}\n\n// David Eberly's algorithm for finding a bridge between hole and outer polygon\nfunction findHoleBridge(hole, outerNode) {\n var p = outerNode,\n hx = hole.x,\n hy = hole.y,\n qx = -Infinity,\n m;\n\n // find a segment intersected by a ray from the hole's leftmost point to the left;\n // segment's endpoint with lesser x will be potential connection point\n do {\n if (hy <= p.y && hy >= p.next.y && p.next.y !== p.y) {\n var x = p.x + (hy - p.y) * (p.next.x - p.x) / (p.next.y - p.y);\n if (x <= hx && x > qx) {\n qx = x;\n if (x === hx) {\n if (hy === p.y) return p;\n if (hy === p.next.y) return p.next;\n }\n m = p.x < p.next.x ? p : p.next;\n }\n }\n p = p.next;\n } while (p !== outerNode);\n\n if (!m) return null;\n\n if (hx === qx) return m; // hole touches outer segment; pick leftmost endpoint\n\n // look for points inside the triangle of hole point, segment intersection and endpoint;\n // if there are no points found, we have a valid connection;\n // otherwise choose the point of the minimum angle with the ray as connection point\n\n var stop = m,\n mx = m.x,\n my = m.y,\n tanMin = Infinity,\n tan;\n\n p = m;\n\n do {\n if (hx >= p.x && p.x >= mx && hx !== p.x &&\n pointInTriangle(hy < my ? hx : qx, hy, mx, my, hy < my ? qx : hx, hy, p.x, p.y)) {\n\n tan = Math.abs(hy - p.y) / (hx - p.x); // tangential\n\n if (locallyInside(p, hole) &&\n (tan < tanMin || (tan === tanMin && (p.x > m.x || (p.x === m.x && sectorContainsSector(m, p)))))) {\n m = p;\n tanMin = tan;\n }\n }\n\n p = p.next;\n } while (p !== stop);\n\n return m;\n}\n\n// whether sector in vertex m contains sector in vertex p in the same coordinates\nfunction sectorContainsSector(m, p) {\n return area(m.prev, m, p.prev) < 0 && area(p.next, m, m.next) < 0;\n}\n\n// interlink polygon nodes in z-order\nfunction indexCurve(start, minX, minY, invSize) {\n var p = start;\n do {\n if (p.z === null) p.z = zOrder(p.x, p.y, minX, minY, invSize);\n p.prevZ = p.prev;\n p.nextZ = p.next;\n p = p.next;\n } while (p !== start);\n\n p.prevZ.nextZ = null;\n p.prevZ = null;\n\n sortLinked(p);\n}\n\n// Simon Tatham's linked list merge sort algorithm\n// http://www.chiark.greenend.org.uk/~sgtatham/algorithms/listsort.html\nfunction sortLinked(list) {\n var i, p, q, e, tail, numMerges, pSize, qSize,\n inSize = 1;\n\n do {\n p = list;\n list = null;\n tail = null;\n numMerges = 0;\n\n while (p) {\n numMerges++;\n q = p;\n pSize = 0;\n for (i = 0; i < inSize; i++) {\n pSize++;\n q = q.nextZ;\n if (!q) break;\n }\n qSize = inSize;\n\n while (pSize > 0 || (qSize > 0 && q)) {\n\n if (pSize !== 0 && (qSize === 0 || !q || p.z <= q.z)) {\n e = p;\n p = p.nextZ;\n pSize--;\n } else {\n e = q;\n q = q.nextZ;\n qSize--;\n }\n\n if (tail) tail.nextZ = e;\n else list = e;\n\n e.prevZ = tail;\n tail = e;\n }\n\n p = q;\n }\n\n tail.nextZ = null;\n inSize *= 2;\n\n } while (numMerges > 1);\n\n return list;\n}\n\n// z-order of a point given coords and inverse of the longer side of data bbox\nfunction zOrder(x, y, minX, minY, invSize) {\n // coords are transformed into non-negative 15-bit integer range\n x = 32767 * (x - minX) * invSize;\n y = 32767 * (y - minY) * invSize;\n\n x = (x | (x << 8)) & 0x00FF00FF;\n x = (x | (x << 4)) & 0x0F0F0F0F;\n x = (x | (x << 2)) & 0x33333333;\n x = (x | (x << 1)) & 0x55555555;\n\n y = (y | (y << 8)) & 0x00FF00FF;\n y = (y | (y << 4)) & 0x0F0F0F0F;\n y = (y | (y << 2)) & 0x33333333;\n y = (y | (y << 1)) & 0x55555555;\n\n return x | (y << 1);\n}\n\n// find the leftmost node of a polygon ring\nfunction getLeftmost(start) {\n var p = start,\n leftmost = start;\n do {\n if (p.x < leftmost.x || (p.x === leftmost.x && p.y < leftmost.y)) leftmost = p;\n p = p.next;\n } while (p !== start);\n\n return leftmost;\n}\n\n// check if a point lies within a convex triangle\nfunction pointInTriangle(ax, ay, bx, by, cx, cy, px, py) {\n return (cx - px) * (ay - py) - (ax - px) * (cy - py) >= 0 &&\n (ax - px) * (by - py) - (bx - px) * (ay - py) >= 0 &&\n (bx - px) * (cy - py) - (cx - px) * (by - py) >= 0;\n}\n\n// check if a diagonal between two polygon nodes is valid (lies in polygon interior)\nfunction isValidDiagonal(a, b) {\n return a.next.i !== b.i && a.prev.i !== b.i && !intersectsPolygon(a, b) && // dones't intersect other edges\n (locallyInside(a, b) && locallyInside(b, a) && middleInside(a, b) && // locally visible\n (area(a.prev, a, b.prev) || area(a, b.prev, b)) || // does not create opposite-facing sectors\n equals(a, b) && area(a.prev, a, a.next) > 0 && area(b.prev, b, b.next) > 0); // special zero-length case\n}\n\n// signed area of a triangle\nfunction area(p, q, r) {\n return (q.y - p.y) * (r.x - q.x) - (q.x - p.x) * (r.y - q.y);\n}\n\n// check if two points are equal\nfunction equals(p1, p2) {\n return p1.x === p2.x && p1.y === p2.y;\n}\n\n// check if two segments intersect\nfunction intersects(p1, q1, p2, q2) {\n var o1 = sign(area(p1, q1, p2));\n var o2 = sign(area(p1, q1, q2));\n var o3 = sign(area(p2, q2, p1));\n var o4 = sign(area(p2, q2, q1));\n\n if (o1 !== o2 && o3 !== o4) return true; // general case\n\n if (o1 === 0 && onSegment(p1, p2, q1)) return true; // p1, q1 and p2 are collinear and p2 lies on p1q1\n if (o2 === 0 && onSegment(p1, q2, q1)) return true; // p1, q1 and q2 are collinear and q2 lies on p1q1\n if (o3 === 0 && onSegment(p2, p1, q2)) return true; // p2, q2 and p1 are collinear and p1 lies on p2q2\n if (o4 === 0 && onSegment(p2, q1, q2)) return true; // p2, q2 and q1 are collinear and q1 lies on p2q2\n\n return false;\n}\n\n// for collinear points p, q, r, check if point q lies on segment pr\nfunction onSegment(p, q, r) {\n return q.x <= Math.max(p.x, r.x) && q.x >= Math.min(p.x, r.x) && q.y <= Math.max(p.y, r.y) && q.y >= Math.min(p.y, r.y);\n}\n\nfunction sign(num) {\n return num > 0 ? 1 : num < 0 ? -1 : 0;\n}\n\n// check if a polygon diagonal intersects any polygon segments\nfunction intersectsPolygon(a, b) {\n var p = a;\n do {\n if (p.i !== a.i && p.next.i !== a.i && p.i !== b.i && p.next.i !== b.i &&\n intersects(p, p.next, a, b)) return true;\n p = p.next;\n } while (p !== a);\n\n return false;\n}\n\n// check if a polygon diagonal is locally inside the polygon\nfunction locallyInside(a, b) {\n return area(a.prev, a, a.next) < 0 ?\n area(a, b, a.next) >= 0 && area(a, a.prev, b) >= 0 :\n area(a, b, a.prev) < 0 || area(a, a.next, b) < 0;\n}\n\n// check if the middle point of a polygon diagonal is inside the polygon\nfunction middleInside(a, b) {\n var p = a,\n inside = false,\n px = (a.x + b.x) / 2,\n py = (a.y + b.y) / 2;\n do {\n if (((p.y > py) !== (p.next.y > py)) && p.next.y !== p.y &&\n (px < (p.next.x - p.x) * (py - p.y) / (p.next.y - p.y) + p.x))\n inside = !inside;\n p = p.next;\n } while (p !== a);\n\n return inside;\n}\n\n// link two polygon vertices with a bridge; if the vertices belong to the same ring, it splits polygon into two;\n// if one belongs to the outer ring and another to a hole, it merges it into a single ring\nfunction splitPolygon(a, b) {\n var a2 = new Node(a.i, a.x, a.y),\n b2 = new Node(b.i, b.x, b.y),\n an = a.next,\n bp = b.prev;\n\n a.next = b;\n b.prev = a;\n\n a2.next = an;\n an.prev = a2;\n\n b2.next = a2;\n a2.prev = b2;\n\n bp.next = b2;\n b2.prev = bp;\n\n return b2;\n}\n\n// create a node and optionally link it with previous one (in a circular doubly linked list)\nfunction insertNode(i, x, y, last) {\n var p = new Node(i, x, y);\n\n if (!last) {\n p.prev = p;\n p.next = p;\n\n } else {\n p.next = last.next;\n p.prev = last;\n last.next.prev = p;\n last.next = p;\n }\n return p;\n}\n\nfunction removeNode(p) {\n p.next.prev = p.prev;\n p.prev.next = p.next;\n\n if (p.prevZ) p.prevZ.nextZ = p.nextZ;\n if (p.nextZ) p.nextZ.prevZ = p.prevZ;\n}\n\nfunction Node(i, x, y) {\n // vertex index in coordinates array\n this.i = i;\n\n // vertex coordinates\n this.x = x;\n this.y = y;\n\n // previous and next vertex nodes in a polygon ring\n this.prev = null;\n this.next = null;\n\n // z-order curve value\n this.z = null;\n\n // previous and next nodes in z-order\n this.prevZ = null;\n this.nextZ = null;\n\n // indicates whether this is a steiner point\n this.steiner = false;\n}\n\n// return a percentage difference between the polygon area and its triangulation area;\n// used to verify correctness of triangulation\nearcut.deviation = function (data, holeIndices, dim, triangles) {\n var hasHoles = holeIndices && holeIndices.length;\n var outerLen = hasHoles ? holeIndices[0] * dim : data.length;\n\n var polygonArea = Math.abs(signedArea(data, 0, outerLen, dim));\n if (hasHoles) {\n for (var i = 0, len = holeIndices.length; i < len; i++) {\n var start = holeIndices[i] * dim;\n var end = i < len - 1 ? holeIndices[i + 1] * dim : data.length;\n polygonArea -= Math.abs(signedArea(data, start, end, dim));\n }\n }\n\n var trianglesArea = 0;\n for (i = 0; i < triangles.length; i += 3) {\n var a = triangles[i] * dim;\n var b = triangles[i + 1] * dim;\n var c = triangles[i + 2] * dim;\n trianglesArea += Math.abs(\n (data[a] - data[c]) * (data[b + 1] - data[a + 1]) -\n (data[a] - data[b]) * (data[c + 1] - data[a + 1]));\n }\n\n return polygonArea === 0 && trianglesArea === 0 ? 0 :\n Math.abs((trianglesArea - polygonArea) / polygonArea);\n};\n\nfunction signedArea(data, start, end, dim) {\n var sum = 0;\n for (var i = start, j = end - dim; i < end; i += dim) {\n sum += (data[j] - data[i]) * (data[i + 1] + data[j + 1]);\n j = i;\n }\n return sum;\n}\n\n// turn a polygon in a multi-dimensional array form (e.g. as in GeoJSON) into a form Earcut accepts\nearcut.flatten = function (data) {\n var dim = data[0][0].length,\n result = {vertices: [], holes: [], dimensions: dim},\n holeIndex = 0;\n\n for (var i = 0; i < data.length; i++) {\n for (var j = 0; j < data[i].length; j++) {\n for (var d = 0; d < dim; d++) result.vertices.push(data[i][j][d]);\n }\n if (i > 0) {\n holeIndex += data[i - 1].length;\n result.holes.push(holeIndex);\n }\n }\n return result;\n};\n\nexport {earcut};","import {math} from \"./math.js\";\n\n/**\n * Converts surface-perpendicular face normals to vertex normals. Assumes that the mesh contains disjoint triangles\n * that don't share vertex array elements. Works by finding groups of vertices that have the same location and\n * averaging their normal vectors.\n *\n * @returns {{positions: Array, normals: *}}\n * @private\n */\nfunction faceToVertexNormals(positions, normals, options = {}) {\n const smoothNormalsAngleThreshold = options.smoothNormalsAngleThreshold || 20;\n const vertexMap = {};\n const vertexNormals = [];\n const vertexNormalAccum = {};\n let acc;\n let vx;\n let vy;\n let vz;\n let key;\n const precisionPoints = 4; // number of decimal points, e.g. 4 for epsilon of 0.0001\n const precision = 10 ** precisionPoints;\n let posi;\n let i;\n let j;\n let len;\n let a;\n let b;\n let c;\n\n for (i = 0, len = positions.length; i < len; i += 3) {\n\n posi = i / 3;\n\n vx = positions[i];\n vy = positions[i + 1];\n vz = positions[i + 2];\n\n key = `${Math.round(vx * precision)}_${Math.round(vy * precision)}_${Math.round(vz * precision)}`;\n\n if (vertexMap[key] === undefined) {\n vertexMap[key] = [posi];\n } else {\n vertexMap[key].push(posi);\n }\n\n const normal = math.normalizeVec3([normals[i], normals[i + 1], normals[i + 2]]);\n\n vertexNormals[posi] = normal;\n\n acc = math.vec4([normal[0], normal[1], normal[2], 1]);\n\n vertexNormalAccum[posi] = acc;\n }\n\n for (key in vertexMap) {\n\n if (vertexMap.hasOwnProperty(key)) {\n\n const vertices = vertexMap[key];\n const numVerts = vertices.length;\n\n for (i = 0; i < numVerts; i++) {\n\n const ii = vertices[i];\n\n acc = vertexNormalAccum[ii];\n\n for (j = 0; j < numVerts; j++) {\n\n if (i === j) {\n continue;\n }\n\n const jj = vertices[j];\n\n a = vertexNormals[ii];\n b = vertexNormals[jj];\n\n const angle = Math.abs(math.angleVec3(a, b) / math.DEGTORAD);\n\n if (angle < smoothNormalsAngleThreshold) {\n\n acc[0] += b[0];\n acc[1] += b[1];\n acc[2] += b[2];\n acc[3] += 1.0;\n }\n }\n }\n }\n }\n\n for (i = 0, len = normals.length; i < len; i += 3) {\n\n acc = vertexNormalAccum[i / 3];\n\n normals[i + 0] = acc[0] / acc[3];\n normals[i + 1] = acc[1] / acc[3];\n normals[i + 2] = acc[2] / acc[3];\n\n }\n}\n\nexport {faceToVertexNormals};","// Some temporary vars to help avoid garbage collection\n\nconst doublePrecision = true;\nconst FloatArrayType = doublePrecision ? Float64Array : Float32Array;\n\nconst tempMat1 = new FloatArrayType(16);\nconst tempMat2 = new FloatArrayType(16);\nconst tempVec4 = new FloatArrayType(4);\n\n/**\n * @private\n */\nconst math = {\n\n MIN_DOUBLE: -Number.MAX_SAFE_INTEGER,\n MAX_DOUBLE: Number.MAX_SAFE_INTEGER,\n\n /**\n * The number of radiians in a degree (0.0174532925).\n * @property DEGTORAD\n * @type {Number}\n */\n DEGTORAD: 0.0174532925,\n\n /**\n * The number of degrees in a radian.\n * @property RADTODEG\n * @type {Number}\n */\n RADTODEG: 57.295779513,\n\n /**\n * Returns a new, uninitialized two-element vector.\n * @method vec2\n * @param [values] Initial values.\n * @static\n * @returns {Number[]}\n */\n vec2(values) {\n return new FloatArrayType(values || 2);\n },\n\n /**\n * Returns a new, uninitialized three-element vector.\n * @method vec3\n * @param [values] Initial values.\n * @static\n * @returns {Number[]}\n */\n vec3(values) {\n return new FloatArrayType(values || 3);\n },\n\n /**\n * Returns a new, uninitialized four-element vector.\n * @method vec4\n * @param [values] Initial values.\n * @static\n * @returns {Number[]}\n */\n vec4(values) {\n return new FloatArrayType(values || 4);\n },\n\n /**\n * Returns a new, uninitialized 3x3 matrix.\n * @method mat3\n * @param [values] Initial values.\n * @static\n * @returns {Number[]}\n */\n mat3(values) {\n return new FloatArrayType(values || 9);\n },\n\n /**\n * Converts a 3x3 matrix to 4x4\n * @method mat3ToMat4\n * @param mat3 3x3 matrix.\n * @param mat4 4x4 matrix\n * @static\n * @returns {Number[]}\n */\n mat3ToMat4(mat3, mat4 = new FloatArrayType(16)) {\n mat4[0] = mat3[0];\n mat4[1] = mat3[1];\n mat4[2] = mat3[2];\n mat4[3] = 0;\n mat4[4] = mat3[3];\n mat4[5] = mat3[4];\n mat4[6] = mat3[5];\n mat4[7] = 0;\n mat4[8] = mat3[6];\n mat4[9] = mat3[7];\n mat4[10] = mat3[8];\n mat4[11] = 0;\n mat4[12] = 0;\n mat4[13] = 0;\n mat4[14] = 0;\n mat4[15] = 1;\n return mat4;\n },\n\n /**\n * Returns a new, uninitialized 4x4 matrix.\n * @method mat4\n * @param [values] Initial values.\n * @static\n * @returns {Number[]}\n */\n mat4(values) {\n return new FloatArrayType(values || 16);\n },\n\n /**\n * Converts a 4x4 matrix to 3x3\n * @method mat4ToMat3\n * @param mat4 4x4 matrix.\n * @param mat3 3x3 matrix\n * @static\n * @returns {Number[]}\n */\n mat4ToMat3(mat4, mat3) { // TODO\n //return new FloatArrayType(values || 9);\n },\n\n /**\n * Returns a new UUID.\n * @method createUUID\n * @static\n * @return string The new UUID\n */\n createUUID: ((() => {\n const self = {};\n const lut = [];\n for (let i = 0; i < 256; i++) {\n lut[i] = (i < 16 ? '0' : '') + (i).toString(16);\n }\n return () => {\n const d0 = Math.random() * 0xffffffff | 0;\n const d1 = Math.random() * 0xffffffff | 0;\n const d2 = Math.random() * 0xffffffff | 0;\n const d3 = Math.random() * 0xffffffff | 0;\n return `${lut[d0 & 0xff] + lut[d0 >> 8 & 0xff] + lut[d0 >> 16 & 0xff] + lut[d0 >> 24 & 0xff]}-${lut[d1 & 0xff]}${lut[d1 >> 8 & 0xff]}-${lut[d1 >> 16 & 0x0f | 0x40]}${lut[d1 >> 24 & 0xff]}-${lut[d2 & 0x3f | 0x80]}${lut[d2 >> 8 & 0xff]}-${lut[d2 >> 16 & 0xff]}${lut[d2 >> 24 & 0xff]}${lut[d3 & 0xff]}${lut[d3 >> 8 & 0xff]}${lut[d3 >> 16 & 0xff]}${lut[d3 >> 24 & 0xff]}`;\n };\n }))(),\n\n /**\n * Clamps a value to the given range.\n * @param {Number} value Value to clamp.\n * @param {Number} min Lower bound.\n * @param {Number} max Upper bound.\n * @returns {Number} Clamped result.\n */\n clamp(value, min, max) {\n return Math.max(min, Math.min(max, value));\n },\n\n /**\n * Floating-point modulus\n * @method fmod\n * @static\n * @param {Number} a\n * @param {Number} b\n * @returns {*}\n */\n fmod(a, b) {\n if (a < b) {\n console.error(\"math.fmod : Attempting to find modulus within negative range - would be infinite loop - ignoring\");\n return a;\n }\n while (b <= a) {\n a -= b;\n }\n return a;\n },\n\n /**\n * Negates a four-element vector.\n * @method negateVec4\n * @static\n * @param {Array(Number)} v Vector to negate\n * @param {Array(Number)} [dest] Destination vector\n * @return {Array(Number)} dest if specified, v otherwise\n */\n negateVec4(v, dest) {\n if (!dest) {\n dest = v;\n }\n dest[0] = -v[0];\n dest[1] = -v[1];\n dest[2] = -v[2];\n dest[3] = -v[3];\n return dest;\n },\n\n /**\n * Adds one four-element vector to another.\n * @method addVec4\n * @static\n * @param {Array(Number)} u First vector\n * @param {Array(Number)} v Second vector\n * @param {Array(Number)} [dest] Destination vector\n * @return {Array(Number)} dest if specified, u otherwise\n */\n addVec4(u, v, dest) {\n if (!dest) {\n dest = u;\n }\n dest[0] = u[0] + v[0];\n dest[1] = u[1] + v[1];\n dest[2] = u[2] + v[2];\n dest[3] = u[3] + v[3];\n return dest;\n },\n\n /**\n * Adds a scalar value to each element of a four-element vector.\n * @method addVec4Scalar\n * @static\n * @param {Array(Number)} v The vector\n * @param {Number} s The scalar\n * @param {Array(Number)} [dest] Destination vector\n * @return {Array(Number)} dest if specified, v otherwise\n */\n addVec4Scalar(v, s, dest) {\n if (!dest) {\n dest = v;\n }\n dest[0] = v[0] + s;\n dest[1] = v[1] + s;\n dest[2] = v[2] + s;\n dest[3] = v[3] + s;\n return dest;\n },\n\n /**\n * Adds one three-element vector to another.\n * @method addVec3\n * @static\n * @param {Array(Number)} u First vector\n * @param {Array(Number)} v Second vector\n * @param {Array(Number)} [dest] Destination vector\n * @return {Array(Number)} dest if specified, u otherwise\n */\n addVec3(u, v, dest) {\n if (!dest) {\n dest = u;\n }\n dest[0] = u[0] + v[0];\n dest[1] = u[1] + v[1];\n dest[2] = u[2] + v[2];\n return dest;\n },\n\n /**\n * Adds a scalar value to each element of a three-element vector.\n * @method addVec4Scalar\n * @static\n * @param {Array(Number)} v The vector\n * @param {Number} s The scalar\n * @param {Array(Number)} [dest] Destination vector\n * @return {Array(Number)} dest if specified, v otherwise\n */\n addVec3Scalar(v, s, dest) {\n if (!dest) {\n dest = v;\n }\n dest[0] = v[0] + s;\n dest[1] = v[1] + s;\n dest[2] = v[2] + s;\n return dest;\n },\n\n /**\n * Subtracts one four-element vector from another.\n * @method subVec4\n * @static\n * @param {Array(Number)} u First vector\n * @param {Array(Number)} v Vector to subtract\n * @param {Array(Number)} [dest] Destination vector\n * @return {Array(Number)} dest if specified, u otherwise\n */\n subVec4(u, v, dest) {\n if (!dest) {\n dest = u;\n }\n dest[0] = u[0] - v[0];\n dest[1] = u[1] - v[1];\n dest[2] = u[2] - v[2];\n dest[3] = u[3] - v[3];\n return dest;\n },\n\n /**\n * Subtracts one three-element vector from another.\n * @method subVec3\n * @static\n * @param {Array(Number)} u First vector\n * @param {Array(Number)} v Vector to subtract\n * @param {Array(Number)} [dest] Destination vector\n * @return {Array(Number)} dest if specified, u otherwise\n */\n subVec3(u, v, dest) {\n if (!dest) {\n dest = u;\n }\n dest[0] = u[0] - v[0];\n dest[1] = u[1] - v[1];\n dest[2] = u[2] - v[2];\n return dest;\n },\n\n /**\n * Subtracts one two-element vector from another.\n * @method subVec2\n * @static\n * @param {Array(Number)} u First vector\n * @param {Array(Number)} v Vector to subtract\n * @param {Array(Number)} [dest] Destination vector\n * @return {Array(Number)} dest if specified, u otherwise\n */\n subVec2(u, v, dest) {\n if (!dest) {\n dest = u;\n }\n dest[0] = u[0] - v[0];\n dest[1] = u[1] - v[1];\n return dest;\n },\n\n /**\n * Subtracts a scalar value from each element of a four-element vector.\n * @method subVec4Scalar\n * @static\n * @param {Array(Number)} v The vector\n * @param {Number} s The scalar\n * @param {Array(Number)} [dest] Destination vector\n * @return {Array(Number)} dest if specified, v otherwise\n */\n subVec4Scalar(v, s, dest) {\n if (!dest) {\n dest = v;\n }\n dest[0] = v[0] - s;\n dest[1] = v[1] - s;\n dest[2] = v[2] - s;\n dest[3] = v[3] - s;\n return dest;\n },\n\n /**\n * Sets each element of a 4-element vector to a scalar value minus the value of that element.\n * @method subScalarVec4\n * @static\n * @param {Array(Number)} v The vector\n * @param {Number} s The scalar\n * @param {Array(Number)} [dest] Destination vector\n * @return {Array(Number)} dest if specified, v otherwise\n */\n subScalarVec4(v, s, dest) {\n if (!dest) {\n dest = v;\n }\n dest[0] = s - v[0];\n dest[1] = s - v[1];\n dest[2] = s - v[2];\n dest[3] = s - v[3];\n return dest;\n },\n\n /**\n * Multiplies one three-element vector by another.\n * @method mulVec3\n * @static\n * @param {Array(Number)} u First vector\n * @param {Array(Number)} v Second vector\n * @param {Array(Number)} [dest] Destination vector\n * @return {Array(Number)} dest if specified, u otherwise\n */\n mulVec4(u, v, dest) {\n if (!dest) {\n dest = u;\n }\n dest[0] = u[0] * v[0];\n dest[1] = u[1] * v[1];\n dest[2] = u[2] * v[2];\n dest[3] = u[3] * v[3];\n return dest;\n },\n\n /**\n * Multiplies each element of a four-element vector by a scalar.\n * @method mulVec34calar\n * @static\n * @param {Array(Number)} v The vector\n * @param {Number} s The scalar\n * @param {Array(Number)} [dest] Destination vector\n * @return {Array(Number)} dest if specified, v otherwise\n */\n mulVec4Scalar(v, s, dest) {\n if (!dest) {\n dest = v;\n }\n dest[0] = v[0] * s;\n dest[1] = v[1] * s;\n dest[2] = v[2] * s;\n dest[3] = v[3] * s;\n return dest;\n },\n\n /**\n * Multiplies each element of a three-element vector by a scalar.\n * @method mulVec3Scalar\n * @static\n * @param {Array(Number)} v The vector\n * @param {Number} s The scalar\n * @param {Array(Number)} [dest] Destination vector\n * @return {Array(Number)} dest if specified, v otherwise\n */\n mulVec3Scalar(v, s, dest) {\n if (!dest) {\n dest = v;\n }\n dest[0] = v[0] * s;\n dest[1] = v[1] * s;\n dest[2] = v[2] * s;\n return dest;\n },\n\n /**\n * Multiplies each element of a two-element vector by a scalar.\n * @method mulVec2Scalar\n * @static\n * @param {Array(Number)} v The vector\n * @param {Number} s The scalar\n * @param {Array(Number)} [dest] Destination vector\n * @return {Array(Number)} dest if specified, v otherwise\n */\n mulVec2Scalar(v, s, dest) {\n if (!dest) {\n dest = v;\n }\n dest[0] = v[0] * s;\n dest[1] = v[1] * s;\n return dest;\n },\n\n /**\n * Divides one three-element vector by another.\n * @method divVec3\n * @static\n * @param {Array(Number)} u First vector\n * @param {Array(Number)} v Second vector\n * @param {Array(Number)} [dest] Destination vector\n * @return {Array(Number)} dest if specified, u otherwise\n */\n divVec3(u, v, dest) {\n if (!dest) {\n dest = u;\n }\n dest[0] = u[0] / v[0];\n dest[1] = u[1] / v[1];\n dest[2] = u[2] / v[2];\n return dest;\n },\n\n /**\n * Divides one four-element vector by another.\n * @method divVec4\n * @static\n * @param {Array(Number)} u First vector\n * @param {Array(Number)} v Second vector\n * @param {Array(Number)} [dest] Destination vector\n * @return {Array(Number)} dest if specified, u otherwise\n */\n divVec4(u, v, dest) {\n if (!dest) {\n dest = u;\n }\n dest[0] = u[0] / v[0];\n dest[1] = u[1] / v[1];\n dest[2] = u[2] / v[2];\n dest[3] = u[3] / v[3];\n return dest;\n },\n\n /**\n * Divides a scalar by a three-element vector, returning a new vector.\n * @method divScalarVec3\n * @static\n * @param v vec3\n * @param s scalar\n * @param dest vec3 - optional destination\n * @return [] dest if specified, v otherwise\n */\n divScalarVec3(s, v, dest) {\n if (!dest) {\n dest = v;\n }\n dest[0] = s / v[0];\n dest[1] = s / v[1];\n dest[2] = s / v[2];\n return dest;\n },\n\n /**\n * Divides a three-element vector by a scalar.\n * @method divVec3Scalar\n * @static\n * @param v vec3\n * @param s scalar\n * @param dest vec3 - optional destination\n * @return [] dest if specified, v otherwise\n */\n divVec3Scalar(v, s, dest) {\n if (!dest) {\n dest = v;\n }\n dest[0] = v[0] / s;\n dest[1] = v[1] / s;\n dest[2] = v[2] / s;\n return dest;\n },\n\n /**\n * Divides a four-element vector by a scalar.\n * @method divVec4Scalar\n * @static\n * @param v vec4\n * @param s scalar\n * @param dest vec4 - optional destination\n * @return [] dest if specified, v otherwise\n */\n divVec4Scalar(v, s, dest) {\n if (!dest) {\n dest = v;\n }\n dest[0] = v[0] / s;\n dest[1] = v[1] / s;\n dest[2] = v[2] / s;\n dest[3] = v[3] / s;\n return dest;\n },\n\n\n /**\n * Divides a scalar by a four-element vector, returning a new vector.\n * @method divScalarVec4\n * @static\n * @param s scalar\n * @param v vec4\n * @param dest vec4 - optional destination\n * @return [] dest if specified, v otherwise\n */\n divScalarVec4(s, v, dest) {\n if (!dest) {\n dest = v;\n }\n dest[0] = s / v[0];\n dest[1] = s / v[1];\n dest[2] = s / v[2];\n dest[3] = s / v[3];\n return dest;\n },\n\n /**\n * Returns the dot product of two four-element vectors.\n * @method dotVec4\n * @static\n * @param {Array(Number)} u First vector\n * @param {Array(Number)} v Second vector\n * @return The dot product\n */\n dotVec4(u, v) {\n return (u[0] * v[0] + u[1] * v[1] + u[2] * v[2] + u[3] * v[3]);\n },\n\n /**\n * Returns the cross product of two four-element vectors.\n * @method cross3Vec4\n * @static\n * @param {Array(Number)} u First vector\n * @param {Array(Number)} v Second vector\n * @return The cross product\n */\n cross3Vec4(u, v) {\n const u0 = u[0];\n const u1 = u[1];\n const u2 = u[2];\n const v0 = v[0];\n const v1 = v[1];\n const v2 = v[2];\n return [\n u1 * v2 - u2 * v1,\n u2 * v0 - u0 * v2,\n u0 * v1 - u1 * v0,\n 0.0];\n },\n\n /**\n * Returns the cross product of two three-element vectors.\n * @method cross3Vec3\n * @static\n * @param {Array(Number)} u First vector\n * @param {Array(Number)} v Second vector\n * @return The cross product\n */\n cross3Vec3(u, v, dest) {\n if (!dest) {\n dest = u;\n }\n const x = u[0];\n const y = u[1];\n const z = u[2];\n const x2 = v[0];\n const y2 = v[1];\n const z2 = v[2];\n dest[0] = y * z2 - z * y2;\n dest[1] = z * x2 - x * z2;\n dest[2] = x * y2 - y * x2;\n return dest;\n },\n\n\n sqLenVec4(v) { // TODO\n return math.dotVec4(v, v);\n },\n\n /**\n * Returns the length of a four-element vector.\n * @method lenVec4\n * @static\n * @param {Array(Number)} v The vector\n * @return The length\n */\n lenVec4(v) {\n return Math.sqrt(math.sqLenVec4(v));\n },\n\n /**\n * Returns the dot product of two three-element vectors.\n * @method dotVec3\n * @static\n * @param {Array(Number)} u First vector\n * @param {Array(Number)} v Second vector\n * @return The dot product\n */\n dotVec3(u, v) {\n return (u[0] * v[0] + u[1] * v[1] + u[2] * v[2]);\n },\n\n /**\n * Returns the dot product of two two-element vectors.\n * @method dotVec4\n * @static\n * @param {Array(Number)} u First vector\n * @param {Array(Number)} v Second vector\n * @return The dot product\n */\n dotVec2(u, v) {\n return (u[0] * v[0] + u[1] * v[1]);\n },\n\n\n sqLenVec3(v) {\n return math.dotVec3(v, v);\n },\n\n\n sqLenVec2(v) {\n return math.dotVec2(v, v);\n },\n\n /**\n * Returns the length of a three-element vector.\n * @method lenVec3\n * @static\n * @param {Array(Number)} v The vector\n * @return The length\n */\n lenVec3(v) {\n return Math.sqrt(math.sqLenVec3(v));\n },\n\n distVec3: ((() => {\n const vec = new FloatArrayType(3);\n return (v, w) => math.lenVec3(math.subVec3(v, w, vec));\n }))(),\n\n /**\n * Returns the length of a two-element vector.\n * @method lenVec2\n * @static\n * @param {Array(Number)} v The vector\n * @return The length\n */\n lenVec2(v) {\n return Math.sqrt(math.sqLenVec2(v));\n },\n\n distVec2: ((() => {\n const vec = new FloatArrayType(2);\n return (v, w) => math.lenVec2(math.subVec2(v, w, vec));\n }))(),\n\n /**\n * @method rcpVec3\n * @static\n * @param v vec3\n * @param dest vec3 - optional destination\n * @return [] dest if specified, v otherwise\n *\n */\n rcpVec3(v, dest) {\n return math.divScalarVec3(1.0, v, dest);\n },\n\n /**\n * Normalizes a four-element vector\n * @method normalizeVec4\n * @static\n * @param v vec4\n * @param dest vec4 - optional destination\n * @return [] dest if specified, v otherwise\n *\n */\n normalizeVec4(v, dest) {\n const f = 1.0 / math.lenVec4(v);\n return math.mulVec4Scalar(v, f, dest);\n },\n\n /**\n * Normalizes a three-element vector\n * @method normalizeVec4\n * @static\n */\n normalizeVec3(v, dest) {\n const f = 1.0 / math.lenVec3(v);\n return math.mulVec3Scalar(v, f, dest);\n },\n\n /**\n * Normalizes a two-element vector\n * @method normalizeVec2\n * @static\n */\n normalizeVec2(v, dest) {\n const f = 1.0 / math.lenVec2(v);\n return math.mulVec2Scalar(v, f, dest);\n },\n\n /**\n * Gets the angle between two vectors\n * @method angleVec3\n * @param v\n * @param w\n * @returns {number}\n */\n angleVec3(v, w) {\n let theta = math.dotVec3(v, w) / (Math.sqrt(math.sqLenVec3(v) * math.sqLenVec3(w)));\n theta = theta < -1 ? -1 : (theta > 1 ? 1 : theta); // Clamp to handle numerical problems\n return Math.acos(theta);\n },\n\n /**\n * Creates a three-element vector from the rotation part of a sixteen-element matrix.\n * @param m\n * @param dest\n */\n vec3FromMat4Scale: ((() => {\n\n const tempVec3 = new FloatArrayType(3);\n\n return (m, dest) => {\n\n tempVec3[0] = m[0];\n tempVec3[1] = m[1];\n tempVec3[2] = m[2];\n\n dest[0] = math.lenVec3(tempVec3);\n\n tempVec3[0] = m[4];\n tempVec3[1] = m[5];\n tempVec3[2] = m[6];\n\n dest[1] = math.lenVec3(tempVec3);\n\n tempVec3[0] = m[8];\n tempVec3[1] = m[9];\n tempVec3[2] = m[10];\n\n dest[2] = math.lenVec3(tempVec3);\n\n return dest;\n };\n }))(),\n\n /**\n * Converts an n-element vector to a JSON-serializable\n * array with values rounded to two decimal places.\n */\n vecToArray: ((() => {\n function trunc(v) {\n return Math.round(v * 100000) / 100000\n }\n\n return v => {\n v = Array.prototype.slice.call(v);\n for (let i = 0, len = v.length; i < len; i++) {\n v[i] = trunc(v[i]);\n }\n return v;\n };\n }))(),\n\n /**\n * Converts a 3-element vector from an array to an object of the form ````{x:999, y:999, z:999}````.\n * @param arr\n * @returns {{x: *, y: *, z: *}}\n */\n xyzArrayToObject(arr) {\n return {\"x\": arr[0], \"y\": arr[1], \"z\": arr[2]};\n },\n\n /**\n * Converts a 3-element vector object of the form ````{x:999, y:999, z:999}```` to an array.\n * @param xyz\n * @param [arry]\n * @returns {*[]}\n */\n xyzObjectToArray(xyz, arry) {\n arry = arry || new FloatArrayType(3);\n arry[0] = xyz.x;\n arry[1] = xyz.y;\n arry[2] = xyz.z;\n return arry;\n },\n\n /**\n * Duplicates a 4x4 identity matrix.\n * @method dupMat4\n * @static\n */\n dupMat4(m) {\n return m.slice(0, 16);\n },\n\n /**\n * Extracts a 3x3 matrix from a 4x4 matrix.\n * @method mat4To3\n * @static\n */\n mat4To3(m) {\n return [\n m[0], m[1], m[2],\n m[4], m[5], m[6],\n m[8], m[9], m[10]\n ];\n },\n\n /**\n * Returns a 4x4 matrix with each element set to the given scalar value.\n * @method m4s\n * @static\n */\n m4s(s) {\n return [\n s, s, s, s,\n s, s, s, s,\n s, s, s, s,\n s, s, s, s\n ];\n },\n\n /**\n * Returns a 4x4 matrix with each element set to zero.\n * @method setMat4ToZeroes\n * @static\n */\n setMat4ToZeroes() {\n return math.m4s(0.0);\n },\n\n /**\n * Returns a 4x4 matrix with each element set to 1.0.\n * @method setMat4ToOnes\n * @static\n */\n setMat4ToOnes() {\n return math.m4s(1.0);\n },\n\n /**\n * Returns a 4x4 matrix with each element set to 1.0.\n * @method setMat4ToOnes\n * @static\n */\n diagonalMat4v(v) {\n return new FloatArrayType([\n v[0], 0.0, 0.0, 0.0,\n 0.0, v[1], 0.0, 0.0,\n 0.0, 0.0, v[2], 0.0,\n 0.0, 0.0, 0.0, v[3]\n ]);\n },\n\n /**\n * Returns a 4x4 matrix with diagonal elements set to the given vector.\n * @method diagonalMat4c\n * @static\n */\n diagonalMat4c(x, y, z, w) {\n return math.diagonalMat4v([x, y, z, w]);\n },\n\n /**\n * Returns a 4x4 matrix with diagonal elements set to the given scalar.\n * @method diagonalMat4s\n * @static\n */\n diagonalMat4s(s) {\n return math.diagonalMat4c(s, s, s, s);\n },\n\n /**\n * Returns a 4x4 identity matrix.\n * @method identityMat4\n * @static\n */\n identityMat4(mat = new FloatArrayType(16)) {\n mat[0] = 1.0;\n mat[1] = 0.0;\n mat[2] = 0.0;\n mat[3] = 0.0;\n\n mat[4] = 0.0;\n mat[5] = 1.0;\n mat[6] = 0.0;\n mat[7] = 0.0;\n\n mat[8] = 0.0;\n mat[9] = 0.0;\n mat[10] = 1.0;\n mat[11] = 0.0;\n\n mat[12] = 0.0;\n mat[13] = 0.0;\n mat[14] = 0.0;\n mat[15] = 1.0;\n\n return mat;\n },\n\n /**\n * Returns a 3x3 identity matrix.\n * @method identityMat3\n * @static\n */\n identityMat3(mat = new FloatArrayType(9)) {\n mat[0] = 1.0;\n mat[1] = 0.0;\n mat[2] = 0.0;\n\n mat[3] = 0.0;\n mat[4] = 1.0;\n mat[5] = 0.0;\n\n mat[6] = 0.0;\n mat[7] = 0.0;\n mat[8] = 1.0;\n\n return mat;\n },\n\n /**\n * Tests if the given 4x4 matrix is the identity matrix.\n * @method isIdentityMat4\n * @static\n */\n isIdentityMat4(m) {\n if (m[0] !== 1.0 || m[1] !== 0.0 || m[2] !== 0.0 || m[3] !== 0.0 ||\n m[4] !== 0.0 || m[5] !== 1.0 || m[6] !== 0.0 || m[7] !== 0.0 ||\n m[8] !== 0.0 || m[9] !== 0.0 || m[10] !== 1.0 || m[11] !== 0.0 ||\n m[12] !== 0.0 || m[13] !== 0.0 || m[14] !== 0.0 || m[15] !== 1.0) {\n return false;\n }\n return true;\n },\n\n /**\n * Negates the given 4x4 matrix.\n * @method negateMat4\n * @static\n */\n negateMat4(m, dest) {\n if (!dest) {\n dest = m;\n }\n dest[0] = -m[0];\n dest[1] = -m[1];\n dest[2] = -m[2];\n dest[3] = -m[3];\n dest[4] = -m[4];\n dest[5] = -m[5];\n dest[6] = -m[6];\n dest[7] = -m[7];\n dest[8] = -m[8];\n dest[9] = -m[9];\n dest[10] = -m[10];\n dest[11] = -m[11];\n dest[12] = -m[12];\n dest[13] = -m[13];\n dest[14] = -m[14];\n dest[15] = -m[15];\n return dest;\n },\n\n /**\n * Adds the given 4x4 matrices together.\n * @method addMat4\n * @static\n */\n addMat4(a, b, dest) {\n if (!dest) {\n dest = a;\n }\n dest[0] = a[0] + b[0];\n dest[1] = a[1] + b[1];\n dest[2] = a[2] + b[2];\n dest[3] = a[3] + b[3];\n dest[4] = a[4] + b[4];\n dest[5] = a[5] + b[5];\n dest[6] = a[6] + b[6];\n dest[7] = a[7] + b[7];\n dest[8] = a[8] + b[8];\n dest[9] = a[9] + b[9];\n dest[10] = a[10] + b[10];\n dest[11] = a[11] + b[11];\n dest[12] = a[12] + b[12];\n dest[13] = a[13] + b[13];\n dest[14] = a[14] + b[14];\n dest[15] = a[15] + b[15];\n return dest;\n },\n\n /**\n * Adds the given scalar to each element of the given 4x4 matrix.\n * @method addMat4Scalar\n * @static\n */\n addMat4Scalar(m, s, dest) {\n if (!dest) {\n dest = m;\n }\n dest[0] = m[0] + s;\n dest[1] = m[1] + s;\n dest[2] = m[2] + s;\n dest[3] = m[3] + s;\n dest[4] = m[4] + s;\n dest[5] = m[5] + s;\n dest[6] = m[6] + s;\n dest[7] = m[7] + s;\n dest[8] = m[8] + s;\n dest[9] = m[9] + s;\n dest[10] = m[10] + s;\n dest[11] = m[11] + s;\n dest[12] = m[12] + s;\n dest[13] = m[13] + s;\n dest[14] = m[14] + s;\n dest[15] = m[15] + s;\n return dest;\n },\n\n /**\n * Adds the given scalar to each element of the given 4x4 matrix.\n * @method addScalarMat4\n * @static\n */\n addScalarMat4(s, m, dest) {\n return math.addMat4Scalar(m, s, dest);\n },\n\n /**\n * Subtracts the second 4x4 matrix from the first.\n * @method subMat4\n * @static\n */\n subMat4(a, b, dest) {\n if (!dest) {\n dest = a;\n }\n dest[0] = a[0] - b[0];\n dest[1] = a[1] - b[1];\n dest[2] = a[2] - b[2];\n dest[3] = a[3] - b[3];\n dest[4] = a[4] - b[4];\n dest[5] = a[5] - b[5];\n dest[6] = a[6] - b[6];\n dest[7] = a[7] - b[7];\n dest[8] = a[8] - b[8];\n dest[9] = a[9] - b[9];\n dest[10] = a[10] - b[10];\n dest[11] = a[11] - b[11];\n dest[12] = a[12] - b[12];\n dest[13] = a[13] - b[13];\n dest[14] = a[14] - b[14];\n dest[15] = a[15] - b[15];\n return dest;\n },\n\n /**\n * Subtracts the given scalar from each element of the given 4x4 matrix.\n * @method subMat4Scalar\n * @static\n */\n subMat4Scalar(m, s, dest) {\n if (!dest) {\n dest = m;\n }\n dest[0] = m[0] - s;\n dest[1] = m[1] - s;\n dest[2] = m[2] - s;\n dest[3] = m[3] - s;\n dest[4] = m[4] - s;\n dest[5] = m[5] - s;\n dest[6] = m[6] - s;\n dest[7] = m[7] - s;\n dest[8] = m[8] - s;\n dest[9] = m[9] - s;\n dest[10] = m[10] - s;\n dest[11] = m[11] - s;\n dest[12] = m[12] - s;\n dest[13] = m[13] - s;\n dest[14] = m[14] - s;\n dest[15] = m[15] - s;\n return dest;\n },\n\n /**\n * Subtracts the given scalar from each element of the given 4x4 matrix.\n * @method subScalarMat4\n * @static\n */\n subScalarMat4(s, m, dest) {\n if (!dest) {\n dest = m;\n }\n dest[0] = s - m[0];\n dest[1] = s - m[1];\n dest[2] = s - m[2];\n dest[3] = s - m[3];\n dest[4] = s - m[4];\n dest[5] = s - m[5];\n dest[6] = s - m[6];\n dest[7] = s - m[7];\n dest[8] = s - m[8];\n dest[9] = s - m[9];\n dest[10] = s - m[10];\n dest[11] = s - m[11];\n dest[12] = s - m[12];\n dest[13] = s - m[13];\n dest[14] = s - m[14];\n dest[15] = s - m[15];\n return dest;\n },\n\n /**\n * Multiplies the two given 4x4 matrix by each other.\n * @method mulMat4\n * @static\n */\n mulMat4(a, b, dest) {\n if (!dest) {\n dest = a;\n }\n\n // Cache the matrix values (makes for huge speed increases!)\n const a00 = a[0];\n\n const a01 = a[1];\n const a02 = a[2];\n const a03 = a[3];\n const a10 = a[4];\n const a11 = a[5];\n const a12 = a[6];\n const a13 = a[7];\n const a20 = a[8];\n const a21 = a[9];\n const a22 = a[10];\n const a23 = a[11];\n const a30 = a[12];\n const a31 = a[13];\n const a32 = a[14];\n const a33 = a[15];\n const b00 = b[0];\n const b01 = b[1];\n const b02 = b[2];\n const b03 = b[3];\n const b10 = b[4];\n const b11 = b[5];\n const b12 = b[6];\n const b13 = b[7];\n const b20 = b[8];\n const b21 = b[9];\n const b22 = b[10];\n const b23 = b[11];\n const b30 = b[12];\n const b31 = b[13];\n const b32 = b[14];\n const b33 = b[15];\n\n dest[0] = b00 * a00 + b01 * a10 + b02 * a20 + b03 * a30;\n dest[1] = b00 * a01 + b01 * a11 + b02 * a21 + b03 * a31;\n dest[2] = b00 * a02 + b01 * a12 + b02 * a22 + b03 * a32;\n dest[3] = b00 * a03 + b01 * a13 + b02 * a23 + b03 * a33;\n dest[4] = b10 * a00 + b11 * a10 + b12 * a20 + b13 * a30;\n dest[5] = b10 * a01 + b11 * a11 + b12 * a21 + b13 * a31;\n dest[6] = b10 * a02 + b11 * a12 + b12 * a22 + b13 * a32;\n dest[7] = b10 * a03 + b11 * a13 + b12 * a23 + b13 * a33;\n dest[8] = b20 * a00 + b21 * a10 + b22 * a20 + b23 * a30;\n dest[9] = b20 * a01 + b21 * a11 + b22 * a21 + b23 * a31;\n dest[10] = b20 * a02 + b21 * a12 + b22 * a22 + b23 * a32;\n dest[11] = b20 * a03 + b21 * a13 + b22 * a23 + b23 * a33;\n dest[12] = b30 * a00 + b31 * a10 + b32 * a20 + b33 * a30;\n dest[13] = b30 * a01 + b31 * a11 + b32 * a21 + b33 * a31;\n dest[14] = b30 * a02 + b31 * a12 + b32 * a22 + b33 * a32;\n dest[15] = b30 * a03 + b31 * a13 + b32 * a23 + b33 * a33;\n\n return dest;\n },\n\n /**\n * Multiplies the two given 3x3 matrices by each other.\n * @method mulMat4\n * @static\n */\n mulMat3(a, b, dest) {\n if (!dest) {\n dest = new FloatArrayType(9);\n }\n\n const a11 = a[0];\n const a12 = a[3];\n const a13 = a[6];\n const a21 = a[1];\n const a22 = a[4];\n const a23 = a[7];\n const a31 = a[2];\n const a32 = a[5];\n const a33 = a[8];\n const b11 = b[0];\n const b12 = b[3];\n const b13 = b[6];\n const b21 = b[1];\n const b22 = b[4];\n const b23 = b[7];\n const b31 = b[2];\n const b32 = b[5];\n const b33 = b[8];\n\n dest[0] = a11 * b11 + a12 * b21 + a13 * b31;\n dest[3] = a11 * b12 + a12 * b22 + a13 * b32;\n dest[6] = a11 * b13 + a12 * b23 + a13 * b33;\n\n dest[1] = a21 * b11 + a22 * b21 + a23 * b31;\n dest[4] = a21 * b12 + a22 * b22 + a23 * b32;\n dest[7] = a21 * b13 + a22 * b23 + a23 * b33;\n\n dest[2] = a31 * b11 + a32 * b21 + a33 * b31;\n dest[5] = a31 * b12 + a32 * b22 + a33 * b32;\n dest[8] = a31 * b13 + a32 * b23 + a33 * b33;\n\n return dest;\n },\n\n /**\n * Multiplies each element of the given 4x4 matrix by the given scalar.\n * @method mulMat4Scalar\n * @static\n */\n mulMat4Scalar(m, s, dest) {\n if (!dest) {\n dest = m;\n }\n dest[0] = m[0] * s;\n dest[1] = m[1] * s;\n dest[2] = m[2] * s;\n dest[3] = m[3] * s;\n dest[4] = m[4] * s;\n dest[5] = m[5] * s;\n dest[6] = m[6] * s;\n dest[7] = m[7] * s;\n dest[8] = m[8] * s;\n dest[9] = m[9] * s;\n dest[10] = m[10] * s;\n dest[11] = m[11] * s;\n dest[12] = m[12] * s;\n dest[13] = m[13] * s;\n dest[14] = m[14] * s;\n dest[15] = m[15] * s;\n return dest;\n },\n\n /**\n * Multiplies the given 4x4 matrix by the given four-element vector.\n * @method mulMat4v4\n * @static\n */\n mulMat4v4(m, v, dest = math.vec4()) {\n const v0 = v[0];\n const v1 = v[1];\n const v2 = v[2];\n const v3 = v[3];\n dest[0] = m[0] * v0 + m[4] * v1 + m[8] * v2 + m[12] * v3;\n dest[1] = m[1] * v0 + m[5] * v1 + m[9] * v2 + m[13] * v3;\n dest[2] = m[2] * v0 + m[6] * v1 + m[10] * v2 + m[14] * v3;\n dest[3] = m[3] * v0 + m[7] * v1 + m[11] * v2 + m[15] * v3;\n return dest;\n },\n\n /**\n * Transposes the given 4x4 matrix.\n * @method transposeMat4\n * @static\n */\n transposeMat4(mat, dest) {\n // If we are transposing ourselves we can skip a few steps but have to cache some values\n const m4 = mat[4];\n\n const m14 = mat[14];\n const m8 = mat[8];\n const m13 = mat[13];\n const m12 = mat[12];\n const m9 = mat[9];\n if (!dest || mat === dest) {\n const a01 = mat[1];\n const a02 = mat[2];\n const a03 = mat[3];\n const a12 = mat[6];\n const a13 = mat[7];\n const a23 = mat[11];\n mat[1] = m4;\n mat[2] = m8;\n mat[3] = m12;\n mat[4] = a01;\n mat[6] = m9;\n mat[7] = m13;\n mat[8] = a02;\n mat[9] = a12;\n mat[11] = m14;\n mat[12] = a03;\n mat[13] = a13;\n mat[14] = a23;\n return mat;\n }\n dest[0] = mat[0];\n dest[1] = m4;\n dest[2] = m8;\n dest[3] = m12;\n dest[4] = mat[1];\n dest[5] = mat[5];\n dest[6] = m9;\n dest[7] = m13;\n dest[8] = mat[2];\n dest[9] = mat[6];\n dest[10] = mat[10];\n dest[11] = m14;\n dest[12] = mat[3];\n dest[13] = mat[7];\n dest[14] = mat[11];\n dest[15] = mat[15];\n return dest;\n },\n\n /**\n * Transposes the given 3x3 matrix.\n *\n * @method transposeMat3\n * @static\n */\n transposeMat3(mat, dest) {\n if (dest === mat) {\n const a01 = mat[1];\n const a02 = mat[2];\n const a12 = mat[5];\n dest[1] = mat[3];\n dest[2] = mat[6];\n dest[3] = a01;\n dest[5] = mat[7];\n dest[6] = a02;\n dest[7] = a12;\n } else {\n dest[0] = mat[0];\n dest[1] = mat[3];\n dest[2] = mat[6];\n dest[3] = mat[1];\n dest[4] = mat[4];\n dest[5] = mat[7];\n dest[6] = mat[2];\n dest[7] = mat[5];\n dest[8] = mat[8];\n }\n return dest;\n },\n\n /**\n * Returns the determinant of the given 4x4 matrix.\n * @method determinantMat4\n * @static\n */\n determinantMat4(mat) {\n // Cache the matrix values (makes for huge speed increases!)\n const a00 = mat[0];\n\n const a01 = mat[1];\n const a02 = mat[2];\n const a03 = mat[3];\n const a10 = mat[4];\n const a11 = mat[5];\n const a12 = mat[6];\n const a13 = mat[7];\n const a20 = mat[8];\n const a21 = mat[9];\n const a22 = mat[10];\n const a23 = mat[11];\n const a30 = mat[12];\n const a31 = mat[13];\n const a32 = mat[14];\n const a33 = mat[15];\n return a30 * a21 * a12 * a03 - a20 * a31 * a12 * a03 - a30 * a11 * a22 * a03 + a10 * a31 * a22 * a03 +\n a20 * a11 * a32 * a03 - a10 * a21 * a32 * a03 - a30 * a21 * a02 * a13 + a20 * a31 * a02 * a13 +\n a30 * a01 * a22 * a13 - a00 * a31 * a22 * a13 - a20 * a01 * a32 * a13 + a00 * a21 * a32 * a13 +\n a30 * a11 * a02 * a23 - a10 * a31 * a02 * a23 - a30 * a01 * a12 * a23 + a00 * a31 * a12 * a23 +\n a10 * a01 * a32 * a23 - a00 * a11 * a32 * a23 - a20 * a11 * a02 * a33 + a10 * a21 * a02 * a33 +\n a20 * a01 * a12 * a33 - a00 * a21 * a12 * a33 - a10 * a01 * a22 * a33 + a00 * a11 * a22 * a33;\n },\n\n /**\n * Returns the inverse of the given 4x4 matrix.\n * @method inverseMat4\n * @static\n */\n inverseMat4(mat, dest) {\n if (!dest) {\n dest = mat;\n }\n\n // Cache the matrix values (makes for huge speed increases!)\n const a00 = mat[0];\n\n const a01 = mat[1];\n const a02 = mat[2];\n const a03 = mat[3];\n const a10 = mat[4];\n const a11 = mat[5];\n const a12 = mat[6];\n const a13 = mat[7];\n const a20 = mat[8];\n const a21 = mat[9];\n const a22 = mat[10];\n const a23 = mat[11];\n const a30 = mat[12];\n const a31 = mat[13];\n const a32 = mat[14];\n const a33 = mat[15];\n const b00 = a00 * a11 - a01 * a10;\n const b01 = a00 * a12 - a02 * a10;\n const b02 = a00 * a13 - a03 * a10;\n const b03 = a01 * a12 - a02 * a11;\n const b04 = a01 * a13 - a03 * a11;\n const b05 = a02 * a13 - a03 * a12;\n const b06 = a20 * a31 - a21 * a30;\n const b07 = a20 * a32 - a22 * a30;\n const b08 = a20 * a33 - a23 * a30;\n const b09 = a21 * a32 - a22 * a31;\n const b10 = a21 * a33 - a23 * a31;\n const b11 = a22 * a33 - a23 * a32;\n\n // Calculate the determinant (inlined to avoid double-caching)\n const invDet = 1 / (b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06);\n\n dest[0] = (a11 * b11 - a12 * b10 + a13 * b09) * invDet;\n dest[1] = (-a01 * b11 + a02 * b10 - a03 * b09) * invDet;\n dest[2] = (a31 * b05 - a32 * b04 + a33 * b03) * invDet;\n dest[3] = (-a21 * b05 + a22 * b04 - a23 * b03) * invDet;\n dest[4] = (-a10 * b11 + a12 * b08 - a13 * b07) * invDet;\n dest[5] = (a00 * b11 - a02 * b08 + a03 * b07) * invDet;\n dest[6] = (-a30 * b05 + a32 * b02 - a33 * b01) * invDet;\n dest[7] = (a20 * b05 - a22 * b02 + a23 * b01) * invDet;\n dest[8] = (a10 * b10 - a11 * b08 + a13 * b06) * invDet;\n dest[9] = (-a00 * b10 + a01 * b08 - a03 * b06) * invDet;\n dest[10] = (a30 * b04 - a31 * b02 + a33 * b00) * invDet;\n dest[11] = (-a20 * b04 + a21 * b02 - a23 * b00) * invDet;\n dest[12] = (-a10 * b09 + a11 * b07 - a12 * b06) * invDet;\n dest[13] = (a00 * b09 - a01 * b07 + a02 * b06) * invDet;\n dest[14] = (-a30 * b03 + a31 * b01 - a32 * b00) * invDet;\n dest[15] = (a20 * b03 - a21 * b01 + a22 * b00) * invDet;\n\n return dest;\n },\n\n /**\n * Returns the trace of the given 4x4 matrix.\n * @method traceMat4\n * @static\n */\n traceMat4(m) {\n return (m[0] + m[5] + m[10] + m[15]);\n },\n\n /**\n * Returns 4x4 translation matrix.\n * @method translationMat4\n * @static\n */\n translationMat4v(v, dest) {\n const m = dest || math.identityMat4();\n m[12] = v[0];\n m[13] = v[1];\n m[14] = v[2];\n return m;\n },\n\n /**\n * Returns 3x3 translation matrix.\n * @method translationMat3\n * @static\n */\n translationMat3v(v, dest) {\n const m = dest || math.identityMat3();\n m[6] = v[0];\n m[7] = v[1];\n return m;\n },\n\n /**\n * Returns 4x4 translation matrix.\n * @method translationMat4c\n * @static\n */\n translationMat4c: ((() => {\n const xyz = new FloatArrayType(3);\n return (x, y, z, dest) => {\n xyz[0] = x;\n xyz[1] = y;\n xyz[2] = z;\n return math.translationMat4v(xyz, dest);\n };\n }))(),\n\n /**\n * Returns 4x4 translation matrix.\n * @method translationMat4s\n * @static\n */\n translationMat4s(s, dest) {\n return math.translationMat4c(s, s, s, dest);\n },\n\n /**\n * Efficiently post-concatenates a translation to the given matrix.\n * @param v\n * @param m\n */\n translateMat4v(xyz, m) {\n return math.translateMat4c(xyz[0], xyz[1], xyz[2], m);\n },\n\n /**\n * Efficiently post-concatenates a translation to the given matrix.\n * @param x\n * @param y\n * @param z\n * @param m\n */\n OLDtranslateMat4c(x, y, z, m) {\n\n const m12 = m[12];\n m[0] += m12 * x;\n m[4] += m12 * y;\n m[8] += m12 * z;\n\n const m13 = m[13];\n m[1] += m13 * x;\n m[5] += m13 * y;\n m[9] += m13 * z;\n\n const m14 = m[14];\n m[2] += m14 * x;\n m[6] += m14 * y;\n m[10] += m14 * z;\n\n const m15 = m[15];\n m[3] += m15 * x;\n m[7] += m15 * y;\n m[11] += m15 * z;\n\n return m;\n },\n\n translateMat4c(x, y, z, m) {\n\n const m3 = m[3];\n m[0] += m3 * x;\n m[1] += m3 * y;\n m[2] += m3 * z;\n\n const m7 = m[7];\n m[4] += m7 * x;\n m[5] += m7 * y;\n m[6] += m7 * z;\n\n const m11 = m[11];\n m[8] += m11 * x;\n m[9] += m11 * y;\n m[10] += m11 * z;\n\n const m15 = m[15];\n m[12] += m15 * x;\n m[13] += m15 * y;\n m[14] += m15 * z;\n\n return m;\n },\n /**\n * Returns 4x4 rotation matrix.\n * @method rotationMat4v\n * @static\n */\n rotationMat4v(anglerad, axis, m) {\n const ax = math.normalizeVec4([axis[0], axis[1], axis[2], 0.0], []);\n const s = Math.sin(anglerad);\n const c = Math.cos(anglerad);\n const q = 1.0 - c;\n\n const x = ax[0];\n const y = ax[1];\n const z = ax[2];\n\n let xy;\n let yz;\n let zx;\n let xs;\n let ys;\n let zs;\n\n //xx = x * x; used once\n //yy = y * y; used once\n //zz = z * z; used once\n xy = x * y;\n yz = y * z;\n zx = z * x;\n xs = x * s;\n ys = y * s;\n zs = z * s;\n\n m = m || math.mat4();\n\n m[0] = (q * x * x) + c;\n m[1] = (q * xy) + zs;\n m[2] = (q * zx) - ys;\n m[3] = 0.0;\n\n m[4] = (q * xy) - zs;\n m[5] = (q * y * y) + c;\n m[6] = (q * yz) + xs;\n m[7] = 0.0;\n\n m[8] = (q * zx) + ys;\n m[9] = (q * yz) - xs;\n m[10] = (q * z * z) + c;\n m[11] = 0.0;\n\n m[12] = 0.0;\n m[13] = 0.0;\n m[14] = 0.0;\n m[15] = 1.0;\n\n return m;\n },\n\n /**\n * Returns 4x4 rotation matrix.\n * @method rotationMat4c\n * @static\n */\n rotationMat4c(anglerad, x, y, z, mat) {\n return math.rotationMat4v(anglerad, [x, y, z], mat);\n },\n\n /**\n * Returns 4x4 scale matrix.\n * @method scalingMat4v\n * @static\n */\n scalingMat4v(v, m = math.identityMat4()) {\n m[0] = v[0];\n m[5] = v[1];\n m[10] = v[2];\n return m;\n },\n\n /**\n * Returns 3x3 scale matrix.\n * @method scalingMat3v\n * @static\n */\n scalingMat3v(v, m = math.identityMat3()) {\n m[0] = v[0];\n m[4] = v[1];\n return m;\n },\n\n /**\n * Returns 4x4 scale matrix.\n * @method scalingMat4c\n * @static\n */\n scalingMat4c: ((() => {\n const xyz = new FloatArrayType(3);\n return (x, y, z, dest) => {\n xyz[0] = x;\n xyz[1] = y;\n xyz[2] = z;\n return math.scalingMat4v(xyz, dest);\n };\n }))(),\n\n /**\n * Efficiently post-concatenates a scaling to the given matrix.\n * @method scaleMat4c\n * @param x\n * @param y\n * @param z\n * @param m\n */\n scaleMat4c(x, y, z, m) {\n\n m[0] *= x;\n m[4] *= y;\n m[8] *= z;\n\n m[1] *= x;\n m[5] *= y;\n m[9] *= z;\n\n m[2] *= x;\n m[6] *= y;\n m[10] *= z;\n\n m[3] *= x;\n m[7] *= y;\n m[11] *= z;\n return m;\n },\n\n /**\n * Efficiently post-concatenates a scaling to the given matrix.\n * @method scaleMat4c\n * @param xyz\n * @param m\n */\n scaleMat4v(xyz, m) {\n\n const x = xyz[0];\n const y = xyz[1];\n const z = xyz[2];\n\n m[0] *= x;\n m[4] *= y;\n m[8] *= z;\n m[1] *= x;\n m[5] *= y;\n m[9] *= z;\n m[2] *= x;\n m[6] *= y;\n m[10] *= z;\n m[3] *= x;\n m[7] *= y;\n m[11] *= z;\n\n return m;\n },\n\n /**\n * Returns 4x4 scale matrix.\n * @method scalingMat4s\n * @static\n */\n scalingMat4s(s) {\n return math.scalingMat4c(s, s, s);\n },\n\n /**\n * Creates a matrix from a quaternion rotation and vector translation\n *\n * @param {Number[]} q Rotation quaternion\n * @param {Number[]} v Translation vector\n * @param {Number[]} dest Destination matrix\n * @returns {Number[]} dest\n */\n rotationTranslationMat4(q, v, dest = math.mat4()) {\n const x = q[0];\n const y = q[1];\n const z = q[2];\n const w = q[3];\n\n const x2 = x + x;\n const y2 = y + y;\n const z2 = z + z;\n const xx = x * x2;\n const xy = x * y2;\n const xz = x * z2;\n const yy = y * y2;\n const yz = y * z2;\n const zz = z * z2;\n const wx = w * x2;\n const wy = w * y2;\n const wz = w * z2;\n\n dest[0] = 1 - (yy + zz);\n dest[1] = xy + wz;\n dest[2] = xz - wy;\n dest[3] = 0;\n dest[4] = xy - wz;\n dest[5] = 1 - (xx + zz);\n dest[6] = yz + wx;\n dest[7] = 0;\n dest[8] = xz + wy;\n dest[9] = yz - wx;\n dest[10] = 1 - (xx + yy);\n dest[11] = 0;\n dest[12] = v[0];\n dest[13] = v[1];\n dest[14] = v[2];\n dest[15] = 1;\n\n return dest;\n },\n\n /**\n * Gets Euler angles from a 4x4 matrix.\n *\n * @param {Number[]} mat The 4x4 matrix.\n * @param {String} order Desired Euler angle order: \"XYZ\", \"YXZ\", \"ZXY\" etc.\n * @param {Number[]} [dest] Destination Euler angles, created by default.\n * @returns {Number[]} The Euler angles.\n */\n mat4ToEuler(mat, order, dest = math.vec4()) {\n const clamp = math.clamp;\n\n // Assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled)\n\n const m11 = mat[0];\n\n const m12 = mat[4];\n const m13 = mat[8];\n const m21 = mat[1];\n const m22 = mat[5];\n const m23 = mat[9];\n const m31 = mat[2];\n const m32 = mat[6];\n const m33 = mat[10];\n\n if (order === 'XYZ') {\n\n dest[1] = Math.asin(clamp(m13, -1, 1));\n\n if (Math.abs(m13) < 0.99999) {\n dest[0] = Math.atan2(-m23, m33);\n dest[2] = Math.atan2(-m12, m11);\n } else {\n dest[0] = Math.atan2(m32, m22);\n dest[2] = 0;\n\n }\n\n } else if (order === 'YXZ') {\n\n dest[0] = Math.asin(-clamp(m23, -1, 1));\n\n if (Math.abs(m23) < 0.99999) {\n dest[1] = Math.atan2(m13, m33);\n dest[2] = Math.atan2(m21, m22);\n } else {\n dest[1] = Math.atan2(-m31, m11);\n dest[2] = 0;\n }\n\n } else if (order === 'ZXY') {\n\n dest[0] = Math.asin(clamp(m32, -1, 1));\n\n if (Math.abs(m32) < 0.99999) {\n dest[1] = Math.atan2(-m31, m33);\n dest[2] = Math.atan2(-m12, m22);\n } else {\n dest[1] = 0;\n dest[2] = Math.atan2(m21, m11);\n }\n\n } else if (order === 'ZYX') {\n\n dest[1] = Math.asin(-clamp(m31, -1, 1));\n\n if (Math.abs(m31) < 0.99999) {\n dest[0] = Math.atan2(m32, m33);\n dest[2] = Math.atan2(m21, m11);\n } else {\n dest[0] = 0;\n dest[2] = Math.atan2(-m12, m22);\n }\n\n } else if (order === 'YZX') {\n\n dest[2] = Math.asin(clamp(m21, -1, 1));\n\n if (Math.abs(m21) < 0.99999) {\n dest[0] = Math.atan2(-m23, m22);\n dest[1] = Math.atan2(-m31, m11);\n } else {\n dest[0] = 0;\n dest[1] = Math.atan2(m13, m33);\n }\n\n } else if (order === 'XZY') {\n\n dest[2] = Math.asin(-clamp(m12, -1, 1));\n\n if (Math.abs(m12) < 0.99999) {\n dest[0] = Math.atan2(m32, m22);\n dest[1] = Math.atan2(m13, m11);\n } else {\n dest[0] = Math.atan2(-m23, m33);\n dest[1] = 0;\n }\n }\n\n return dest;\n },\n\n composeMat4(position, quaternion, scale, mat = math.mat4()) {\n math.quaternionToRotationMat4(quaternion, mat);\n math.scaleMat4v(scale, mat);\n math.translateMat4v(position, mat);\n\n return mat;\n },\n\n decomposeMat4: (() => {\n\n const vec = new FloatArrayType(3);\n const matrix = new FloatArrayType(16);\n\n return function decompose(mat, position, quaternion, scale) {\n\n vec[0] = mat[0];\n vec[1] = mat[1];\n vec[2] = mat[2];\n\n let sx = math.lenVec3(vec);\n\n vec[0] = mat[4];\n vec[1] = mat[5];\n vec[2] = mat[6];\n\n const sy = math.lenVec3(vec);\n\n vec[8] = mat[8];\n vec[9] = mat[9];\n vec[10] = mat[10];\n\n const sz = math.lenVec3(vec);\n\n // if determine is negative, we need to invert one scale\n const det = math.determinantMat4(mat);\n\n if (det < 0) {\n sx = -sx;\n }\n\n position[0] = mat[12];\n position[1] = mat[13];\n position[2] = mat[14];\n\n // scale the rotation part\n matrix.set(mat);\n\n const invSX = 1 / sx;\n const invSY = 1 / sy;\n const invSZ = 1 / sz;\n\n matrix[0] *= invSX;\n matrix[1] *= invSX;\n matrix[2] *= invSX;\n\n matrix[4] *= invSY;\n matrix[5] *= invSY;\n matrix[6] *= invSY;\n\n matrix[8] *= invSZ;\n matrix[9] *= invSZ;\n matrix[10] *= invSZ;\n\n math.mat4ToQuaternion(matrix, quaternion);\n\n scale[0] = sx;\n scale[1] = sy;\n scale[2] = sz;\n\n return this;\n\n };\n\n })(),\n\n /**\n * Returns a 4x4 'lookat' viewing transform matrix.\n * @method lookAtMat4v\n * @param pos vec3 position of the viewer\n * @param target vec3 point the viewer is looking at\n * @param up vec3 pointing \"up\"\n * @param dest mat4 Optional, mat4 matrix will be written into\n *\n * @return {mat4} dest if specified, a new mat4 otherwise\n */\n lookAtMat4v(pos, target, up, dest) {\n if (!dest) {\n dest = math.mat4();\n }\n\n const posx = pos[0];\n const posy = pos[1];\n const posz = pos[2];\n const upx = up[0];\n const upy = up[1];\n const upz = up[2];\n const targetx = target[0];\n const targety = target[1];\n const targetz = target[2];\n\n if (posx === targetx && posy === targety && posz === targetz) {\n return math.identityMat4();\n }\n\n let z0;\n let z1;\n let z2;\n let x0;\n let x1;\n let x2;\n let y0;\n let y1;\n let y2;\n let len;\n\n //vec3.direction(eye, center, z);\n z0 = posx - targetx;\n z1 = posy - targety;\n z2 = posz - targetz;\n\n // normalize (no check needed for 0 because of early return)\n len = 1 / Math.sqrt(z0 * z0 + z1 * z1 + z2 * z2);\n z0 *= len;\n z1 *= len;\n z2 *= len;\n\n //vec3.normalize(vec3.cross(up, z, x));\n x0 = upy * z2 - upz * z1;\n x1 = upz * z0 - upx * z2;\n x2 = upx * z1 - upy * z0;\n len = Math.sqrt(x0 * x0 + x1 * x1 + x2 * x2);\n if (!len) {\n x0 = 0;\n x1 = 0;\n x2 = 0;\n } else {\n len = 1 / len;\n x0 *= len;\n x1 *= len;\n x2 *= len;\n }\n\n //vec3.normalize(vec3.cross(z, x, y));\n y0 = z1 * x2 - z2 * x1;\n y1 = z2 * x0 - z0 * x2;\n y2 = z0 * x1 - z1 * x0;\n\n len = Math.sqrt(y0 * y0 + y1 * y1 + y2 * y2);\n if (!len) {\n y0 = 0;\n y1 = 0;\n y2 = 0;\n } else {\n len = 1 / len;\n y0 *= len;\n y1 *= len;\n y2 *= len;\n }\n\n dest[0] = x0;\n dest[1] = y0;\n dest[2] = z0;\n dest[3] = 0;\n dest[4] = x1;\n dest[5] = y1;\n dest[6] = z1;\n dest[7] = 0;\n dest[8] = x2;\n dest[9] = y2;\n dest[10] = z2;\n dest[11] = 0;\n dest[12] = -(x0 * posx + x1 * posy + x2 * posz);\n dest[13] = -(y0 * posx + y1 * posy + y2 * posz);\n dest[14] = -(z0 * posx + z1 * posy + z2 * posz);\n dest[15] = 1;\n\n return dest;\n },\n\n /**\n * Returns a 4x4 'lookat' viewing transform matrix.\n * @method lookAtMat4c\n * @static\n */\n lookAtMat4c(posx, posy, posz, targetx, targety, targetz, upx, upy, upz) {\n return math.lookAtMat4v([posx, posy, posz], [targetx, targety, targetz], [upx, upy, upz], []);\n },\n\n /**\n * Returns a 4x4 orthographic projection matrix.\n * @method orthoMat4c\n * @static\n */\n orthoMat4c(left, right, bottom, top, near, far, dest) {\n if (!dest) {\n dest = math.mat4();\n }\n const rl = (right - left);\n const tb = (top - bottom);\n const fn = (far - near);\n\n dest[0] = 2.0 / rl;\n dest[1] = 0.0;\n dest[2] = 0.0;\n dest[3] = 0.0;\n\n dest[4] = 0.0;\n dest[5] = 2.0 / tb;\n dest[6] = 0.0;\n dest[7] = 0.0;\n\n dest[8] = 0.0;\n dest[9] = 0.0;\n dest[10] = -2.0 / fn;\n dest[11] = 0.0;\n\n dest[12] = -(left + right) / rl;\n dest[13] = -(top + bottom) / tb;\n dest[14] = -(far + near) / fn;\n dest[15] = 1.0;\n\n return dest;\n },\n\n /**\n * Returns a 4x4 perspective projection matrix.\n * @method frustumMat4v\n * @static\n */\n frustumMat4v(fmin, fmax, m) {\n if (!m) {\n m = math.mat4();\n }\n\n const fmin4 = [fmin[0], fmin[1], fmin[2], 0.0];\n const fmax4 = [fmax[0], fmax[1], fmax[2], 0.0];\n\n math.addVec4(fmax4, fmin4, tempMat1);\n math.subVec4(fmax4, fmin4, tempMat2);\n\n const t = 2.0 * fmin4[2];\n\n const tempMat20 = tempMat2[0];\n const tempMat21 = tempMat2[1];\n const tempMat22 = tempMat2[2];\n\n m[0] = t / tempMat20;\n m[1] = 0.0;\n m[2] = 0.0;\n m[3] = 0.0;\n\n m[4] = 0.0;\n m[5] = t / tempMat21;\n m[6] = 0.0;\n m[7] = 0.0;\n\n m[8] = tempMat1[0] / tempMat20;\n m[9] = tempMat1[1] / tempMat21;\n m[10] = -tempMat1[2] / tempMat22;\n m[11] = -1.0;\n\n m[12] = 0.0;\n m[13] = 0.0;\n m[14] = -t * fmax4[2] / tempMat22;\n m[15] = 0.0;\n\n return m;\n },\n\n /**\n * Returns a 4x4 perspective projection matrix.\n * @method frustumMat4v\n * @static\n */\n frustumMat4(left, right, bottom, top, near, far, dest) {\n if (!dest) {\n dest = math.mat4();\n }\n const rl = (right - left);\n const tb = (top - bottom);\n const fn = (far - near);\n dest[0] = (near * 2) / rl;\n dest[1] = 0;\n dest[2] = 0;\n dest[3] = 0;\n dest[4] = 0;\n dest[5] = (near * 2) / tb;\n dest[6] = 0;\n dest[7] = 0;\n dest[8] = (right + left) / rl;\n dest[9] = (top + bottom) / tb;\n dest[10] = -(far + near) / fn;\n dest[11] = -1;\n dest[12] = 0;\n dest[13] = 0;\n dest[14] = -(far * near * 2) / fn;\n dest[15] = 0;\n return dest;\n },\n\n /**\n * Returns a 4x4 perspective projection matrix.\n * @method perspectiveMat4v\n * @static\n */\n perspectiveMat4(fovyrad, aspectratio, znear, zfar, m) {\n const pmin = [];\n const pmax = [];\n\n pmin[2] = znear;\n pmax[2] = zfar;\n\n pmax[1] = pmin[2] * Math.tan(fovyrad / 2.0);\n pmin[1] = -pmax[1];\n\n pmax[0] = pmax[1] * aspectratio;\n pmin[0] = -pmax[0];\n\n return math.frustumMat4v(pmin, pmax, m);\n },\n\n /**\n * Transforms a three-element position by a 4x4 matrix.\n * @method transformPoint3\n * @static\n */\n transformPoint3(m, p, dest = math.vec3()) {\n\n const x = p[0];\n const y = p[1];\n const z = p[2];\n\n dest[0] = (m[0] * x) + (m[4] * y) + (m[8] * z) + m[12];\n dest[1] = (m[1] * x) + (m[5] * y) + (m[9] * z) + m[13];\n dest[2] = (m[2] * x) + (m[6] * y) + (m[10] * z) + m[14];\n\n return dest;\n },\n\n /**\n * Transforms a homogeneous coordinate by a 4x4 matrix.\n * @method transformPoint3\n * @static\n */\n transformPoint4(m, v, dest = math.vec4()) {\n dest[0] = m[0] * v[0] + m[4] * v[1] + m[8] * v[2] + m[12] * v[3];\n dest[1] = m[1] * v[0] + m[5] * v[1] + m[9] * v[2] + m[13] * v[3];\n dest[2] = m[2] * v[0] + m[6] * v[1] + m[10] * v[2] + m[14] * v[3];\n dest[3] = m[3] * v[0] + m[7] * v[1] + m[11] * v[2] + m[15] * v[3];\n\n return dest;\n },\n\n\n /**\n * Transforms an array of three-element positions by a 4x4 matrix.\n * @method transformPoints3\n * @static\n */\n transformPoints3(m, points, points2) {\n const result = points2 || [];\n const len = points.length;\n let p0;\n let p1;\n let p2;\n let pi;\n\n // cache values\n const m0 = m[0];\n\n const m1 = m[1];\n const m2 = m[2];\n const m3 = m[3];\n const m4 = m[4];\n const m5 = m[5];\n const m6 = m[6];\n const m7 = m[7];\n const m8 = m[8];\n const m9 = m[9];\n const m10 = m[10];\n const m11 = m[11];\n const m12 = m[12];\n const m13 = m[13];\n const m14 = m[14];\n const m15 = m[15];\n\n let r;\n\n for (let i = 0; i < len; ++i) {\n\n // cache values\n pi = points[i];\n\n p0 = pi[0];\n p1 = pi[1];\n p2 = pi[2];\n\n r = result[i] || (result[i] = [0, 0, 0]);\n\n r[0] = (m0 * p0) + (m4 * p1) + (m8 * p2) + m12;\n r[1] = (m1 * p0) + (m5 * p1) + (m9 * p2) + m13;\n r[2] = (m2 * p0) + (m6 * p1) + (m10 * p2) + m14;\n r[3] = (m3 * p0) + (m7 * p1) + (m11 * p2) + m15;\n }\n\n result.length = len;\n\n return result;\n },\n\n /**\n * Transforms an array of positions by a 4x4 matrix.\n * @method transformPositions3\n * @static\n */\n transformPositions3(m, p, p2 = p) {\n let i;\n const len = p.length;\n\n let x;\n let y;\n let z;\n\n const m0 = m[0];\n const m1 = m[1];\n const m2 = m[2];\n const m3 = m[3];\n const m4 = m[4];\n const m5 = m[5];\n const m6 = m[6];\n const m7 = m[7];\n const m8 = m[8];\n const m9 = m[9];\n const m10 = m[10];\n const m11 = m[11];\n const m12 = m[12];\n const m13 = m[13];\n const m14 = m[14];\n const m15 = m[15];\n\n for (i = 0; i < len; i += 3) {\n\n x = p[i + 0];\n y = p[i + 1];\n z = p[i + 2];\n\n p2[i + 0] = (m0 * x) + (m4 * y) + (m8 * z) + m12;\n p2[i + 1] = (m1 * x) + (m5 * y) + (m9 * z) + m13;\n p2[i + 2] = (m2 * x) + (m6 * y) + (m10 * z) + m14;\n p2[i + 3] = (m3 * x) + (m7 * y) + (m11 * z) + m15;\n }\n\n return p2;\n },\n\n /**\n * Transforms an array of positions by a 4x4 matrix.\n * @method transformPositions4\n * @static\n */\n transformPositions4(m, p, p2 = p) {\n let i;\n const len = p.length;\n\n let x;\n let y;\n let z;\n\n const m0 = m[0];\n const m1 = m[1];\n const m2 = m[2];\n const m3 = m[3];\n const m4 = m[4];\n const m5 = m[5];\n const m6 = m[6];\n const m7 = m[7];\n const m8 = m[8];\n const m9 = m[9];\n const m10 = m[10];\n const m11 = m[11];\n const m12 = m[12];\n const m13 = m[13];\n const m14 = m[14];\n const m15 = m[15];\n\n for (i = 0; i < len; i += 4) {\n\n x = p[i + 0];\n y = p[i + 1];\n z = p[i + 2];\n\n p2[i + 0] = (m0 * x) + (m4 * y) + (m8 * z) + m12;\n p2[i + 1] = (m1 * x) + (m5 * y) + (m9 * z) + m13;\n p2[i + 2] = (m2 * x) + (m6 * y) + (m10 * z) + m14;\n p2[i + 3] = (m3 * x) + (m7 * y) + (m11 * z) + m15;\n }\n\n return p2;\n },\n\n /**\n * Transforms a three-element vector by a 4x4 matrix.\n * @method transformVec3\n * @static\n */\n transformVec3(m, v, dest) {\n const v0 = v[0];\n const v1 = v[1];\n const v2 = v[2];\n dest = dest || this.vec3();\n dest[0] = (m[0] * v0) + (m[4] * v1) + (m[8] * v2);\n dest[1] = (m[1] * v0) + (m[5] * v1) + (m[9] * v2);\n dest[2] = (m[2] * v0) + (m[6] * v1) + (m[10] * v2);\n return dest;\n },\n\n /**\n * Transforms a four-element vector by a 4x4 matrix.\n * @method transformVec4\n * @static\n */\n transformVec4(m, v, dest) {\n const v0 = v[0];\n const v1 = v[1];\n const v2 = v[2];\n const v3 = v[3];\n dest = dest || math.vec4();\n dest[0] = m[0] * v0 + m[4] * v1 + m[8] * v2 + m[12] * v3;\n dest[1] = m[1] * v0 + m[5] * v1 + m[9] * v2 + m[13] * v3;\n dest[2] = m[2] * v0 + m[6] * v1 + m[10] * v2 + m[14] * v3;\n dest[3] = m[3] * v0 + m[7] * v1 + m[11] * v2 + m[15] * v3;\n return dest;\n },\n\n /**\n * Rotate a 3D vector around the x-axis\n *\n * @method rotateVec3X\n * @param {Number[]} a The vec3 point to rotate\n * @param {Number[]} b The origin of the rotation\n * @param {Number} c The angle of rotation\n * @param {Number[]} dest The receiving vec3\n * @returns {Number[]} dest\n * @static\n */\n rotateVec3X(a, b, c, dest) {\n const p = [];\n const r = [];\n\n //Translate point to the origin\n p[0] = a[0] - b[0];\n p[1] = a[1] - b[1];\n p[2] = a[2] - b[2];\n\n //perform rotation\n r[0] = p[0];\n r[1] = p[1] * Math.cos(c) - p[2] * Math.sin(c);\n r[2] = p[1] * Math.sin(c) + p[2] * Math.cos(c);\n\n //translate to correct position\n dest[0] = r[0] + b[0];\n dest[1] = r[1] + b[1];\n dest[2] = r[2] + b[2];\n\n return dest;\n },\n\n /**\n * Rotate a 3D vector around the y-axis\n *\n * @method rotateVec3Y\n * @param {Number[]} a The vec3 point to rotate\n * @param {Number[]} b The origin of the rotation\n * @param {Number} c The angle of rotation\n * @param {Number[]} dest The receiving vec3\n * @returns {Number[]} dest\n * @static\n */\n rotateVec3Y(a, b, c, dest) {\n const p = [];\n const r = [];\n\n //Translate point to the origin\n p[0] = a[0] - b[0];\n p[1] = a[1] - b[1];\n p[2] = a[2] - b[2];\n\n //perform rotation\n r[0] = p[2] * Math.sin(c) + p[0] * Math.cos(c);\n r[1] = p[1];\n r[2] = p[2] * Math.cos(c) - p[0] * Math.sin(c);\n\n //translate to correct position\n dest[0] = r[0] + b[0];\n dest[1] = r[1] + b[1];\n dest[2] = r[2] + b[2];\n\n return dest;\n },\n\n /**\n * Rotate a 3D vector around the z-axis\n *\n * @method rotateVec3Z\n * @param {Number[]} a The vec3 point to rotate\n * @param {Number[]} b The origin of the rotation\n * @param {Number} c The angle of rotation\n * @param {Number[]} dest The receiving vec3\n * @returns {Number[]} dest\n * @static\n */\n rotateVec3Z(a, b, c, dest) {\n const p = [];\n const r = [];\n\n //Translate point to the origin\n p[0] = a[0] - b[0];\n p[1] = a[1] - b[1];\n p[2] = a[2] - b[2];\n\n //perform rotation\n r[0] = p[0] * Math.cos(c) - p[1] * Math.sin(c);\n r[1] = p[0] * Math.sin(c) + p[1] * Math.cos(c);\n r[2] = p[2];\n\n //translate to correct position\n dest[0] = r[0] + b[0];\n dest[1] = r[1] + b[1];\n dest[2] = r[2] + b[2];\n\n return dest;\n },\n\n /**\n * Transforms a four-element vector by a 4x4 projection matrix.\n *\n * @method projectVec4\n * @param {Number[]} p 3D View-space coordinate\n * @param {Number[]} q 2D Projected coordinate\n * @returns {Number[]} 2D Projected coordinate\n * @static\n */\n projectVec4(p, q) {\n const f = 1.0 / p[3];\n q = q || math.vec2();\n q[0] = v[0] * f;\n q[1] = v[1] * f;\n return q;\n },\n\n /**\n * Unprojects a three-element vector.\n *\n * @method unprojectVec3\n * @param {Number[]} p 3D Projected coordinate\n * @param {Number[]} viewMat View matrix\n * @returns {Number[]} projMat Projection matrix\n * @static\n */\n unprojectVec3: ((() => {\n const mat = new FloatArrayType(16);\n const mat2 = new FloatArrayType(16);\n const mat3 = new FloatArrayType(16);\n return function (p, viewMat, projMat, q) {\n return this.transformVec3(this.mulMat4(this.inverseMat4(viewMat, mat), this.inverseMat4(projMat, mat2), mat3), p, q)\n };\n }))(),\n\n /**\n * Linearly interpolates between two 3D vectors.\n * @method lerpVec3\n * @static\n */\n lerpVec3(t, t1, t2, p1, p2, dest) {\n const result = dest || math.vec3();\n const f = (t - t1) / (t2 - t1);\n result[0] = p1[0] + (f * (p2[0] - p1[0]));\n result[1] = p1[1] + (f * (p2[1] - p1[1]));\n result[2] = p1[2] + (f * (p2[2] - p1[2]));\n return result;\n },\n\n\n /**\n * Flattens a two-dimensional array into a one-dimensional array.\n *\n * @method flatten\n * @static\n * @param {Array of Arrays} a A 2D array\n * @returns Flattened 1D array\n */\n flatten(a) {\n\n const result = [];\n\n let i;\n let leni;\n let j;\n let lenj;\n let item;\n\n for (i = 0, leni = a.length; i < leni; i++) {\n item = a[i];\n for (j = 0, lenj = item.length; j < lenj; j++) {\n result.push(item[j]);\n }\n }\n\n return result;\n },\n\n\n identityQuaternion(dest = math.vec4()) {\n dest[0] = 0.0;\n dest[1] = 0.0;\n dest[2] = 0.0;\n dest[3] = 1.0;\n return dest;\n },\n\n /**\n * Initializes a quaternion from Euler angles.\n *\n * @param {Number[]} euler The Euler angles.\n * @param {String} order Euler angle order: \"XYZ\", \"YXZ\", \"ZXY\" etc.\n * @param {Number[]} [dest] Destination quaternion, created by default.\n * @returns {Number[]} The quaternion.\n */\n eulerToQuaternion(euler, order, dest = math.vec4()) {\n // http://www.mathworks.com/matlabcentral/fileexchange/\n // \t20696-function-to-convert-between-dcm-euler-angles-quaternions-and-euler-vectors/\n //\tcontent/SpinCalc.m\n\n const a = (euler[0] * math.DEGTORAD) / 2;\n const b = (euler[1] * math.DEGTORAD) / 2;\n const c = (euler[2] * math.DEGTORAD) / 2;\n\n const c1 = Math.cos(a);\n const c2 = Math.cos(b);\n const c3 = Math.cos(c);\n const s1 = Math.sin(a);\n const s2 = Math.sin(b);\n const s3 = Math.sin(c);\n\n if (order === 'XYZ') {\n\n dest[0] = s1 * c2 * c3 + c1 * s2 * s3;\n dest[1] = c1 * s2 * c3 - s1 * c2 * s3;\n dest[2] = c1 * c2 * s3 + s1 * s2 * c3;\n dest[3] = c1 * c2 * c3 - s1 * s2 * s3;\n\n } else if (order === 'YXZ') {\n\n dest[0] = s1 * c2 * c3 + c1 * s2 * s3;\n dest[1] = c1 * s2 * c3 - s1 * c2 * s3;\n dest[2] = c1 * c2 * s3 - s1 * s2 * c3;\n dest[3] = c1 * c2 * c3 + s1 * s2 * s3;\n\n } else if (order === 'ZXY') {\n\n dest[0] = s1 * c2 * c3 - c1 * s2 * s3;\n dest[1] = c1 * s2 * c3 + s1 * c2 * s3;\n dest[2] = c1 * c2 * s3 + s1 * s2 * c3;\n dest[3] = c1 * c2 * c3 - s1 * s2 * s3;\n\n } else if (order === 'ZYX') {\n\n dest[0] = s1 * c2 * c3 - c1 * s2 * s3;\n dest[1] = c1 * s2 * c3 + s1 * c2 * s3;\n dest[2] = c1 * c2 * s3 - s1 * s2 * c3;\n dest[3] = c1 * c2 * c3 + s1 * s2 * s3;\n\n } else if (order === 'YZX') {\n\n dest[0] = s1 * c2 * c3 + c1 * s2 * s3;\n dest[1] = c1 * s2 * c3 + s1 * c2 * s3;\n dest[2] = c1 * c2 * s3 - s1 * s2 * c3;\n dest[3] = c1 * c2 * c3 - s1 * s2 * s3;\n\n } else if (order === 'XZY') {\n\n dest[0] = s1 * c2 * c3 - c1 * s2 * s3;\n dest[1] = c1 * s2 * c3 - s1 * c2 * s3;\n dest[2] = c1 * c2 * s3 + s1 * s2 * c3;\n dest[3] = c1 * c2 * c3 + s1 * s2 * s3;\n }\n\n return dest;\n },\n\n mat4ToQuaternion(m, dest = math.vec4()) {\n // http://www.euclideanspace.com/maths/geometry/rotations/conversions/matrixToQuaternion/index.htm\n\n // Assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled)\n\n const m11 = m[0];\n const m12 = m[4];\n const m13 = m[8];\n const m21 = m[1];\n const m22 = m[5];\n const m23 = m[9];\n const m31 = m[2];\n const m32 = m[6];\n const m33 = m[10];\n let s;\n\n const trace = m11 + m22 + m33;\n\n if (trace > 0) {\n\n s = 0.5 / Math.sqrt(trace + 1.0);\n\n dest[3] = 0.25 / s;\n dest[0] = (m32 - m23) * s;\n dest[1] = (m13 - m31) * s;\n dest[2] = (m21 - m12) * s;\n\n } else if (m11 > m22 && m11 > m33) {\n\n s = 2.0 * Math.sqrt(1.0 + m11 - m22 - m33);\n\n dest[3] = (m32 - m23) / s;\n dest[0] = 0.25 * s;\n dest[1] = (m12 + m21) / s;\n dest[2] = (m13 + m31) / s;\n\n } else if (m22 > m33) {\n\n s = 2.0 * Math.sqrt(1.0 + m22 - m11 - m33);\n\n dest[3] = (m13 - m31) / s;\n dest[0] = (m12 + m21) / s;\n dest[1] = 0.25 * s;\n dest[2] = (m23 + m32) / s;\n\n } else {\n\n s = 2.0 * Math.sqrt(1.0 + m33 - m11 - m22);\n\n dest[3] = (m21 - m12) / s;\n dest[0] = (m13 + m31) / s;\n dest[1] = (m23 + m32) / s;\n dest[2] = 0.25 * s;\n }\n\n return dest;\n },\n\n vec3PairToQuaternion(u, v, dest = math.vec4()) {\n const norm_u_norm_v = Math.sqrt(math.dotVec3(u, u) * math.dotVec3(v, v));\n let real_part = norm_u_norm_v + math.dotVec3(u, v);\n\n if (real_part < 0.00000001 * norm_u_norm_v) {\n\n // If u and v are exactly opposite, rotate 180 degrees\n // around an arbitrary orthogonal axis. Axis normalisation\n // can happen later, when we normalise the quaternion.\n\n real_part = 0.0;\n\n if (Math.abs(u[0]) > Math.abs(u[2])) {\n\n dest[0] = -u[1];\n dest[1] = u[0];\n dest[2] = 0;\n\n } else {\n dest[0] = 0;\n dest[1] = -u[2];\n dest[2] = u[1]\n }\n\n } else {\n\n // Otherwise, build quaternion the standard way.\n math.cross3Vec3(u, v, dest);\n }\n\n dest[3] = real_part;\n\n return math.normalizeQuaternion(dest);\n },\n\n angleAxisToQuaternion(angleAxis, dest = math.vec4()) {\n const halfAngle = angleAxis[3] / 2.0;\n const fsin = Math.sin(halfAngle);\n dest[0] = fsin * angleAxis[0];\n dest[1] = fsin * angleAxis[1];\n dest[2] = fsin * angleAxis[2];\n dest[3] = Math.cos(halfAngle);\n return dest;\n },\n\n quaternionToEuler: ((() => {\n const mat = new FloatArrayType(16);\n return (q, order, dest) => {\n dest = dest || math.vec3();\n math.quaternionToRotationMat4(q, mat);\n math.mat4ToEuler(mat, order, dest);\n return dest;\n };\n }))(),\n\n mulQuaternions(p, q, dest = math.vec4()) {\n const p0 = p[0];\n const p1 = p[1];\n const p2 = p[2];\n const p3 = p[3];\n const q0 = q[0];\n const q1 = q[1];\n const q2 = q[2];\n const q3 = q[3];\n dest[0] = p3 * q0 + p0 * q3 + p1 * q2 - p2 * q1;\n dest[1] = p3 * q1 + p1 * q3 + p2 * q0 - p0 * q2;\n dest[2] = p3 * q2 + p2 * q3 + p0 * q1 - p1 * q0;\n dest[3] = p3 * q3 - p0 * q0 - p1 * q1 - p2 * q2;\n return dest;\n },\n\n vec3ApplyQuaternion(q, vec, dest = math.vec3()) {\n const x = vec[0];\n const y = vec[1];\n const z = vec[2];\n\n const qx = q[0];\n const qy = q[1];\n const qz = q[2];\n const qw = q[3];\n\n // calculate quat * vector\n\n const ix = qw * x + qy * z - qz * y;\n const iy = qw * y + qz * x - qx * z;\n const iz = qw * z + qx * y - qy * x;\n const iw = -qx * x - qy * y - qz * z;\n\n // calculate result * inverse quat\n\n dest[0] = ix * qw + iw * -qx + iy * -qz - iz * -qy;\n dest[1] = iy * qw + iw * -qy + iz * -qx - ix * -qz;\n dest[2] = iz * qw + iw * -qz + ix * -qy - iy * -qx;\n\n return dest;\n },\n\n quaternionToMat4(q, dest) {\n\n dest = math.identityMat4(dest);\n\n const q0 = q[0]; //x\n const q1 = q[1]; //y\n const q2 = q[2]; //z\n const q3 = q[3]; //w\n\n const tx = 2.0 * q0;\n const ty = 2.0 * q1;\n const tz = 2.0 * q2;\n\n const twx = tx * q3;\n const twy = ty * q3;\n const twz = tz * q3;\n\n const txx = tx * q0;\n const txy = ty * q0;\n const txz = tz * q0;\n\n const tyy = ty * q1;\n const tyz = tz * q1;\n const tzz = tz * q2;\n\n dest[0] = 1.0 - (tyy + tzz);\n dest[1] = txy + twz;\n dest[2] = txz - twy;\n\n dest[4] = txy - twz;\n dest[5] = 1.0 - (txx + tzz);\n dest[6] = tyz + twx;\n\n dest[8] = txz + twy;\n dest[9] = tyz - twx;\n\n dest[10] = 1.0 - (txx + tyy);\n\n return dest;\n },\n\n quaternionToRotationMat4(q, m) {\n const x = q[0];\n const y = q[1];\n const z = q[2];\n const w = q[3];\n\n const x2 = x + x;\n const y2 = y + y;\n const z2 = z + z;\n const xx = x * x2;\n const xy = x * y2;\n const xz = x * z2;\n const yy = y * y2;\n const yz = y * z2;\n const zz = z * z2;\n const wx = w * x2;\n const wy = w * y2;\n const wz = w * z2;\n\n m[0] = 1 - (yy + zz);\n m[4] = xy - wz;\n m[8] = xz + wy;\n\n m[1] = xy + wz;\n m[5] = 1 - (xx + zz);\n m[9] = yz - wx;\n\n m[2] = xz - wy;\n m[6] = yz + wx;\n m[10] = 1 - (xx + yy);\n\n // last column\n m[3] = 0;\n m[7] = 0;\n m[11] = 0;\n\n // bottom row\n m[12] = 0;\n m[13] = 0;\n m[14] = 0;\n m[15] = 1;\n\n return m;\n },\n\n normalizeQuaternion(q, dest = q) {\n const len = math.lenVec4([q[0], q[1], q[2], q[3]]);\n dest[0] = q[0] / len;\n dest[1] = q[1] / len;\n dest[2] = q[2] / len;\n dest[3] = q[3] / len;\n return dest;\n },\n\n conjugateQuaternion(q, dest = q) {\n dest[0] = -q[0];\n dest[1] = -q[1];\n dest[2] = -q[2];\n dest[3] = q[3];\n return dest;\n },\n\n inverseQuaternion(q, dest) {\n return math.normalizeQuaternion(math.conjugateQuaternion(q, dest));\n },\n\n quaternionToAngleAxis(q, angleAxis = math.vec4()) {\n q = math.normalizeQuaternion(q, tempVec4);\n const q3 = q[3];\n const angle = 2 * Math.acos(q3);\n const s = Math.sqrt(1 - q3 * q3);\n if (s < 0.001) { // test to avoid divide by zero, s is always positive due to sqrt\n angleAxis[0] = q[0];\n angleAxis[1] = q[1];\n angleAxis[2] = q[2];\n } else {\n angleAxis[0] = q[0] / s;\n angleAxis[1] = q[1] / s;\n angleAxis[2] = q[2] / s;\n }\n angleAxis[3] = angle; // * 57.295779579;\n return angleAxis;\n },\n\n //------------------------------------------------------------------------------------------------------------------\n // Boundaries\n //------------------------------------------------------------------------------------------------------------------\n\n /**\n * Returns a new, uninitialized 3D axis-aligned bounding box.\n *\n * @private\n */\n AABB3(values) {\n return new FloatArrayType(values || 6);\n },\n\n /**\n * Returns a new, uninitialized 2D axis-aligned bounding box.\n *\n * @private\n */\n AABB2(values) {\n return new FloatArrayType(values || 4);\n },\n\n /**\n * Returns a new, uninitialized 3D oriented bounding box (OBB).\n *\n * @private\n */\n OBB3(values) {\n return new FloatArrayType(values || 32);\n },\n\n /**\n * Returns a new, uninitialized 2D oriented bounding box (OBB).\n *\n * @private\n */\n OBB2(values) {\n return new FloatArrayType(values || 16);\n },\n\n /** Returns a new 3D bounding sphere */\n Sphere3(x, y, z, r) {\n return new FloatArrayType([x, y, z, r]);\n },\n\n /**\n * Transforms an OBB3 by a 4x4 matrix.\n *\n * @private\n */\n transformOBB3(m, p, p2 = p) {\n let i;\n const len = p.length;\n\n let x;\n let y;\n let z;\n\n const m0 = m[0];\n const m1 = m[1];\n const m2 = m[2];\n const m3 = m[3];\n const m4 = m[4];\n const m5 = m[5];\n const m6 = m[6];\n const m7 = m[7];\n const m8 = m[8];\n const m9 = m[9];\n const m10 = m[10];\n const m11 = m[11];\n const m12 = m[12];\n const m13 = m[13];\n const m14 = m[14];\n const m15 = m[15];\n\n for (i = 0; i < len; i += 4) {\n\n x = p[i + 0];\n y = p[i + 1];\n z = p[i + 2];\n\n p2[i + 0] = (m0 * x) + (m4 * y) + (m8 * z) + m12;\n p2[i + 1] = (m1 * x) + (m5 * y) + (m9 * z) + m13;\n p2[i + 2] = (m2 * x) + (m6 * y) + (m10 * z) + m14;\n p2[i + 3] = (m3 * x) + (m7 * y) + (m11 * z) + m15;\n }\n\n return p2;\n },\n\n /** Returns true if the first AABB contains the second AABB.\n * @param aabb1\n * @param aabb2\n * @returns {boolean}\n */\n containsAABB3: function (aabb1, aabb2) {\n const result = (\n aabb1[0] <= aabb2[0] && aabb2[3] <= aabb1[3] &&\n aabb1[1] <= aabb2[1] && aabb2[4] <= aabb1[4] &&\n aabb1[2] <= aabb2[2] && aabb2[5] <= aabb1[5]);\n return result;\n },\n\n /**\n * Gets the diagonal size of an AABB3 given as minima and maxima.\n *\n * @private\n */\n getAABB3Diag: ((() => {\n\n const min = new FloatArrayType(3);\n const max = new FloatArrayType(3);\n const tempVec3 = new FloatArrayType(3);\n\n return aabb => {\n\n min[0] = aabb[0];\n min[1] = aabb[1];\n min[2] = aabb[2];\n\n max[0] = aabb[3];\n max[1] = aabb[4];\n max[2] = aabb[5];\n\n math.subVec3(max, min, tempVec3);\n\n return Math.abs(math.lenVec3(tempVec3));\n };\n }))(),\n\n /**\n * Get a diagonal boundary size that is symmetrical about the given point.\n *\n * @private\n */\n getAABB3DiagPoint: ((() => {\n\n const min = new FloatArrayType(3);\n const max = new FloatArrayType(3);\n const tempVec3 = new FloatArrayType(3);\n\n return (aabb, p) => {\n\n min[0] = aabb[0];\n min[1] = aabb[1];\n min[2] = aabb[2];\n\n max[0] = aabb[3];\n max[1] = aabb[4];\n max[2] = aabb[5];\n\n const diagVec = math.subVec3(max, min, tempVec3);\n\n const xneg = p[0] - aabb[0];\n const xpos = aabb[3] - p[0];\n const yneg = p[1] - aabb[1];\n const ypos = aabb[4] - p[1];\n const zneg = p[2] - aabb[2];\n const zpos = aabb[5] - p[2];\n\n diagVec[0] += (xneg > xpos) ? xneg : xpos;\n diagVec[1] += (yneg > ypos) ? yneg : ypos;\n diagVec[2] += (zneg > zpos) ? zneg : zpos;\n\n return Math.abs(math.lenVec3(diagVec));\n };\n }))(),\n\n /**\n * Gets the center of an AABB.\n *\n * @private\n */\n getAABB3Center(aabb, dest) {\n const r = dest || math.vec3();\n\n r[0] = (aabb[0] + aabb[3]) / 2;\n r[1] = (aabb[1] + aabb[4]) / 2;\n r[2] = (aabb[2] + aabb[5]) / 2;\n\n return r;\n },\n\n /**\n * Gets the center of a 2D AABB.\n *\n * @private\n */\n getAABB2Center(aabb, dest) {\n const r = dest || math.vec2();\n\n r[0] = (aabb[2] + aabb[0]) / 2;\n r[1] = (aabb[3] + aabb[1]) / 2;\n\n return r;\n },\n\n /**\n * Collapses a 3D axis-aligned boundary, ready to expand to fit 3D points.\n * Creates new AABB if none supplied.\n *\n * @private\n */\n collapseAABB3(aabb = math.AABB3()) {\n aabb[0] = math.MAX_DOUBLE;\n aabb[1] = math.MAX_DOUBLE;\n aabb[2] = math.MAX_DOUBLE;\n aabb[3] = -math.MAX_DOUBLE;\n aabb[4] = -math.MAX_DOUBLE;\n aabb[5] = -math.MAX_DOUBLE;\n\n return aabb;\n },\n\n /**\n * Converts an axis-aligned 3D boundary into an oriented boundary consisting of\n * an array of eight 3D positions, one for each corner of the boundary.\n *\n * @private\n */\n AABB3ToOBB3(aabb, obb = math.OBB3()) {\n obb[0] = aabb[0];\n obb[1] = aabb[1];\n obb[2] = aabb[2];\n obb[3] = 1;\n\n obb[4] = aabb[3];\n obb[5] = aabb[1];\n obb[6] = aabb[2];\n obb[7] = 1;\n\n obb[8] = aabb[3];\n obb[9] = aabb[4];\n obb[10] = aabb[2];\n obb[11] = 1;\n\n obb[12] = aabb[0];\n obb[13] = aabb[4];\n obb[14] = aabb[2];\n obb[15] = 1;\n\n obb[16] = aabb[0];\n obb[17] = aabb[1];\n obb[18] = aabb[5];\n obb[19] = 1;\n\n obb[20] = aabb[3];\n obb[21] = aabb[1];\n obb[22] = aabb[5];\n obb[23] = 1;\n\n obb[24] = aabb[3];\n obb[25] = aabb[4];\n obb[26] = aabb[5];\n obb[27] = 1;\n\n obb[28] = aabb[0];\n obb[29] = aabb[4];\n obb[30] = aabb[5];\n obb[31] = 1;\n\n return obb;\n },\n\n /**\n * Finds the minimum axis-aligned 3D boundary enclosing the homogeneous 3D points (x,y,z,w) given in a flattened array.\n *\n * @private\n */\n positions3ToAABB3: ((() => {\n\n const p = new FloatArrayType(3);\n\n return (positions, aabb, positionsDecodeMatrix) => {\n aabb = aabb || math.AABB3();\n\n let xmin = math.MAX_DOUBLE;\n let ymin = math.MAX_DOUBLE;\n let zmin = math.MAX_DOUBLE;\n let xmax = -math.MAX_DOUBLE;\n let ymax = -math.MAX_DOUBLE;\n let zmax = -math.MAX_DOUBLE;\n\n let x;\n let y;\n let z;\n\n for (let i = 0, len = positions.length; i < len; i += 3) {\n\n if (positionsDecodeMatrix) {\n\n p[0] = positions[i + 0];\n p[1] = positions[i + 1];\n p[2] = positions[i + 2];\n\n math.decompressPosition(p, positionsDecodeMatrix, p);\n\n x = p[0];\n y = p[1];\n z = p[2];\n\n } else {\n x = positions[i + 0];\n y = positions[i + 1];\n z = positions[i + 2];\n }\n\n if (x < xmin) {\n xmin = x;\n }\n\n if (y < ymin) {\n ymin = y;\n }\n\n if (z < zmin) {\n zmin = z;\n }\n\n if (x > xmax) {\n xmax = x;\n }\n\n if (y > ymax) {\n ymax = y;\n }\n\n if (z > zmax) {\n zmax = z;\n }\n }\n\n aabb[0] = xmin;\n aabb[1] = ymin;\n aabb[2] = zmin;\n aabb[3] = xmax;\n aabb[4] = ymax;\n aabb[5] = zmax;\n\n return aabb;\n };\n }))(),\n\n /**\n * Finds the minimum axis-aligned 3D boundary enclosing the homogeneous 3D points (x,y,z,w) given in a flattened array.\n *\n * @private\n */\n OBB3ToAABB3(obb, aabb = math.AABB3()) {\n let xmin = math.MAX_DOUBLE;\n let ymin = math.MAX_DOUBLE;\n let zmin = math.MAX_DOUBLE;\n let xmax = -math.MAX_DOUBLE;\n let ymax = -math.MAX_DOUBLE;\n let zmax = -math.MAX_DOUBLE;\n\n let x;\n let y;\n let z;\n\n for (let i = 0, len = obb.length; i < len; i += 4) {\n\n x = obb[i + 0];\n y = obb[i + 1];\n z = obb[i + 2];\n\n if (x < xmin) {\n xmin = x;\n }\n\n if (y < ymin) {\n ymin = y;\n }\n\n if (z < zmin) {\n zmin = z;\n }\n\n if (x > xmax) {\n xmax = x;\n }\n\n if (y > ymax) {\n ymax = y;\n }\n\n if (z > zmax) {\n zmax = z;\n }\n }\n\n aabb[0] = xmin;\n aabb[1] = ymin;\n aabb[2] = zmin;\n aabb[3] = xmax;\n aabb[4] = ymax;\n aabb[5] = zmax;\n\n return aabb;\n },\n\n /**\n * Finds the minimum axis-aligned 3D boundary enclosing the given 3D points.\n *\n * @private\n */\n points3ToAABB3(points, aabb = math.AABB3()) {\n let xmin = math.MAX_DOUBLE;\n let ymin = math.MAX_DOUBLE;\n let zmin = math.MAX_DOUBLE;\n let xmax = -math.MAX_DOUBLE;\n let ymax = -math.MAX_DOUBLE;\n let zmax = -math.MAX_DOUBLE;\n\n let x;\n let y;\n let z;\n\n for (let i = 0, len = points.length; i < len; i++) {\n\n x = points[i][0];\n y = points[i][1];\n z = points[i][2];\n\n if (x < xmin) {\n xmin = x;\n }\n\n if (y < ymin) {\n ymin = y;\n }\n\n if (z < zmin) {\n zmin = z;\n }\n\n if (x > xmax) {\n xmax = x;\n }\n\n if (y > ymax) {\n ymax = y;\n }\n\n if (z > zmax) {\n zmax = z;\n }\n }\n\n aabb[0] = xmin;\n aabb[1] = ymin;\n aabb[2] = zmin;\n aabb[3] = xmax;\n aabb[4] = ymax;\n aabb[5] = zmax;\n\n return aabb;\n },\n\n /**\n * Finds the minimum boundary sphere enclosing the given 3D points.\n *\n * @private\n */\n points3ToSphere3: ((() => {\n\n const tempVec3 = new FloatArrayType(3);\n\n return (points, sphere) => {\n\n sphere = sphere || math.vec4();\n\n let x = 0;\n let y = 0;\n let z = 0;\n\n let i;\n const numPoints = points.length;\n\n for (i = 0; i < numPoints; i++) {\n x += points[i][0];\n y += points[i][1];\n z += points[i][2];\n }\n\n sphere[0] = x / numPoints;\n sphere[1] = y / numPoints;\n sphere[2] = z / numPoints;\n\n let radius = 0;\n let dist;\n\n for (i = 0; i < numPoints; i++) {\n\n dist = Math.abs(math.lenVec3(math.subVec3(points[i], sphere, tempVec3)));\n\n if (dist > radius) {\n radius = dist;\n }\n }\n\n sphere[3] = radius;\n\n return sphere;\n };\n }))(),\n\n /**\n * Finds the minimum boundary sphere enclosing the given 3D positions.\n *\n * @private\n */\n positions3ToSphere3: ((() => {\n\n const tempVec3a = new FloatArrayType(3);\n const tempVec3b = new FloatArrayType(3);\n\n return (positions, sphere) => {\n\n sphere = sphere || math.vec4();\n\n let x = 0;\n let y = 0;\n let z = 0;\n\n let i;\n const lenPositions = positions.length;\n let radius = 0;\n\n for (i = 0; i < lenPositions; i += 3) {\n x += positions[i];\n y += positions[i + 1];\n z += positions[i + 2];\n }\n\n const numPositions = lenPositions / 3;\n\n sphere[0] = x / numPositions;\n sphere[1] = y / numPositions;\n sphere[2] = z / numPositions;\n\n let dist;\n\n for (i = 0; i < lenPositions; i += 3) {\n\n tempVec3a[0] = positions[i];\n tempVec3a[1] = positions[i + 1];\n tempVec3a[2] = positions[i + 2];\n\n dist = Math.abs(math.lenVec3(math.subVec3(tempVec3a, sphere, tempVec3b)));\n\n if (dist > radius) {\n radius = dist;\n }\n }\n\n sphere[3] = radius;\n\n return sphere;\n };\n }))(),\n\n /**\n * Finds the minimum boundary sphere enclosing the given 3D points.\n *\n * @private\n */\n OBB3ToSphere3: ((() => {\n\n const point = new FloatArrayType(3);\n const tempVec3 = new FloatArrayType(3);\n\n return (points, sphere) => {\n\n sphere = sphere || math.vec4();\n\n let x = 0;\n let y = 0;\n let z = 0;\n\n let i;\n const lenPoints = points.length;\n const numPoints = lenPoints / 4;\n\n for (i = 0; i < lenPoints; i += 4) {\n x += points[i + 0];\n y += points[i + 1];\n z += points[i + 2];\n }\n\n sphere[0] = x / numPoints;\n sphere[1] = y / numPoints;\n sphere[2] = z / numPoints;\n\n let radius = 0;\n let dist;\n\n for (i = 0; i < lenPoints; i += 4) {\n\n point[0] = points[i + 0];\n point[1] = points[i + 1];\n point[2] = points[i + 2];\n\n dist = Math.abs(math.lenVec3(math.subVec3(point, sphere, tempVec3)));\n\n if (dist > radius) {\n radius = dist;\n }\n }\n\n sphere[3] = radius;\n\n return sphere;\n };\n }))(),\n\n /**\n * Gets the center of a bounding sphere.\n *\n * @private\n */\n getSphere3Center(sphere, dest = math.vec3()) {\n dest[0] = sphere[0];\n dest[1] = sphere[1];\n dest[2] = sphere[2];\n\n return dest;\n },\n\n /**\n * Expands the first axis-aligned 3D boundary to enclose the second, if required.\n *\n * @private\n */\n expandAABB3(aabb1, aabb2) {\n\n if (aabb1[0] > aabb2[0]) {\n aabb1[0] = aabb2[0];\n }\n\n if (aabb1[1] > aabb2[1]) {\n aabb1[1] = aabb2[1];\n }\n\n if (aabb1[2] > aabb2[2]) {\n aabb1[2] = aabb2[2];\n }\n\n if (aabb1[3] < aabb2[3]) {\n aabb1[3] = aabb2[3];\n }\n\n if (aabb1[4] < aabb2[4]) {\n aabb1[4] = aabb2[4];\n }\n\n if (aabb1[5] < aabb2[5]) {\n aabb1[5] = aabb2[5];\n }\n\n return aabb1;\n },\n\n /**\n * Expands an axis-aligned 3D boundary to enclose the given point, if needed.\n *\n * @private\n */\n expandAABB3Point3(aabb, p) {\n\n if (aabb[0] > p[0]) {\n aabb[0] = p[0];\n }\n\n if (aabb[1] > p[1]) {\n aabb[1] = p[1];\n }\n\n if (aabb[2] > p[2]) {\n aabb[2] = p[2];\n }\n\n if (aabb[3] < p[0]) {\n aabb[3] = p[0];\n }\n\n if (aabb[4] < p[1]) {\n aabb[4] = p[1];\n }\n\n if (aabb[5] < p[2]) {\n aabb[5] = p[2];\n }\n\n return aabb;\n },\n\n /**\n * Calculates the normal vector of a triangle.\n *\n * @private\n */\n triangleNormal(a, b, c, normal = math.vec3()) {\n const p1x = b[0] - a[0];\n const p1y = b[1] - a[1];\n const p1z = b[2] - a[2];\n\n const p2x = c[0] - a[0];\n const p2y = c[1] - a[1];\n const p2z = c[2] - a[2];\n\n const p3x = p1y * p2z - p1z * p2y;\n const p3y = p1z * p2x - p1x * p2z;\n const p3z = p1x * p2y - p1y * p2x;\n\n const mag = Math.sqrt(p3x * p3x + p3y * p3y + p3z * p3z);\n if (mag === 0) {\n normal[0] = 0;\n normal[1] = 0;\n normal[2] = 0;\n } else {\n normal[0] = p3x / mag;\n normal[1] = p3y / mag;\n normal[2] = p3z / mag;\n }\n\n return normal\n }\n};\n\nexport {math};","/**\n * Given geometry defined as an array of positions, optional normals, option uv and an array of indices, returns\n * modified arrays that have duplicate vertices removed.\n *\n * @private\n */\nfunction mergeVertices(positions, indices, mergedPositions, mergedIndices) {\n const positionsMap = {};\n const indicesLookup = [];\n const precisionPoints = 4; // number of decimal points, e.g. 4 for epsilon of 0.0001\n const precision = 10 ** precisionPoints;\n let uvi = 0;\n for (let i = 0, len = positions.length; i < len; i += 3) {\n const vx = positions[i];\n const vy = positions[i + 1];\n const vz = positions[i + 2];\n const key = `${Math.round(vx * precision)}_${Math.round(vy * precision)}_${Math.round(vz * precision)}`;\n if (positionsMap[key] === undefined) {\n positionsMap[key] = mergedPositions.length / 3;\n mergedPositions.push(vx);\n mergedPositions.push(vy);\n mergedPositions.push(vz);\n }\n indicesLookup[i / 3] = positionsMap[key];\n uvi += 2;\n }\n for (let i = 0, len = indices.length; i < len; i++) {\n mergedIndices[i] = indicesLookup[indices[i]];\n }\n}\n\nexport {mergeVertices};","import {earcut} from './../lib/earcut';\nimport {math} from \"./../lib/math.js\";\n\nconst tempVec2a = math.vec2();\nconst tempVec3a = math.vec3();\nconst tempVec3b = math.vec3();\nconst tempVec3c = math.vec3();\n\n/**\n * @desc Parses a CityJSON model into an {@link XKTModel}.\n *\n * [CityJSON](https://www.cityjson.org) is a JSON-based encoding for a subset of the CityGML data model (version 2.0.0),\n * which is an open standardised data model and exchange format to store digital 3D models of cities and\n * landscapes. CityGML is an official standard of the [Open Geospatial Consortium](https://www.ogc.org/).\n *\n * This converter function supports most of the [CityJSON 1.0.2 Specification](https://www.cityjson.org/specs/1.0.2),\n * with the following limitations:\n *\n * * Does not (yet) support CityJSON semantics for geometry primitives.\n * * Does not (yet) support textured geometries.\n * * Does not (yet) support geometry templates.\n * * When the CityJSON file provides multiple *themes* for a geometry, then we parse only the first of the provided themes for that geometry.\n *\n * ## Usage\n *\n * In the example below we'll create an {@link XKTModel}, then load a CityJSON model into it.\n *\n * ````javascript\n * utils.loadJSON(\"./models/cityjson/DenHaag.json\", async (data) => {\n *\n * const xktModel = new XKTModel();\n *\n * parseCityJSONIntoXKTModel({\n * data,\n * xktModel,\n * log: (msg) => { console.log(msg); }\n * }).then(()=>{\n * xktModel.finalize();\n * },\n * (msg) => {\n * console.error(msg);\n * });\n * });\n * ````\n *\n * @param {Object} params Parsing params.\n * @param {Object} params.data CityJSON data.\n * @param {XKTModel} params.xktModel XKTModel to parse into.\n * @param {boolean} [params.center=false] Set true to center the CityJSON vertex positions to [0,0,0]. This is applied before the transformation matrix, if specified.\n * @param {Boolean} [params.transform] 4x4 transformation matrix to transform CityJSON vertex positions. Use this to rotate, translate and scale them if neccessary.\n * @param {Object} [params.stats] Collects statistics.\n * @param {function} [params.log] Logging callback.\n @returns {Promise} Resolves when CityJSON has been parsed.\n */\nfunction parseCityJSONIntoXKTModel({\n data,\n xktModel,\n center = false,\n transform = null,\n stats = {}, log\n }) {\n\n return new Promise(function (resolve, reject) {\n\n if (!data) {\n reject(\"Argument expected: data\");\n return;\n }\n\n if (data.type !== \"CityJSON\") {\n reject(\"Invalid argument: data is not a CityJSON file\");\n return;\n }\n\n if (!xktModel) {\n reject(\"Argument expected: xktModel\");\n return;\n }\n\n let vertices;\n\n log(\"Using parser: parseCityJSONIntoXKTModel\");\n\n log(`center: ${center}`);\n if (transform) {\n log(`transform: [${transform}]`);\n }\n\n if (data.transform || center || transform) {\n vertices = copyVertices(data.vertices);\n if (data.transform) {\n transformVertices(vertices, data.transform)\n }\n if (center) {\n centerVertices(vertices);\n }\n if (transform) {\n customTransformVertices(vertices, transform);\n }\n } else {\n vertices = data.vertices;\n }\n\n stats.sourceFormat = data.type || \"\";\n stats.schemaVersion = data.version || \"\";\n stats.title = \"\";\n stats.author = \"\";\n stats.created = \"\";\n stats.numMetaObjects = 0;\n stats.numPropertySets = 0;\n stats.numTriangles = 0;\n stats.numVertices = 0;\n stats.numObjects = 0;\n stats.numGeometries = 0;\n\n const rootMetaObjectId = math.createUUID();\n\n xktModel.createMetaObject({\n metaObjectId: rootMetaObjectId,\n metaObjectType: \"Model\",\n metaObjectName: \"Model\"\n });\n\n stats.numMetaObjects++;\n\n const modelMetaObjectId = math.createUUID();\n\n xktModel.createMetaObject({\n metaObjectId: modelMetaObjectId,\n metaObjectType: \"CityJSON\",\n metaObjectName: \"CityJSON\",\n parentMetaObjectId: rootMetaObjectId\n });\n\n stats.numMetaObjects++;\n\n const ctx = {\n data,\n vertices,\n xktModel,\n rootMetaObjectId: modelMetaObjectId,\n log: (log || function (msg) {\n }),\n nextId: 0,\n stats\n };\n\n ctx.xktModel.schema = data.type + \" \" + data.version;\n\n ctx.log(\"Converting \" + ctx.xktModel.schema);\n\n parseCityJSON(ctx);\n\n resolve();\n });\n}\n\nfunction copyVertices(vertices) {\n const vertices2 = [];\n for (let i = 0, j = 0; i < vertices.length; i++, j += 3) {\n const x = vertices[i][0];\n const y = vertices[i][1];\n const z = vertices[i][2];\n vertices2.push([x, y, z]);\n }\n return vertices2;\n}\n\nfunction transformVertices(vertices, cityJSONTransform) {\n const scale = cityJSONTransform.scale || math.vec3([1, 1, 1]);\n const translate = cityJSONTransform.translate || math.vec3([0, 0, 0]);\n for (let i = 0; i < vertices.length; i++) {\n const vertex = vertices[i];\n vertex[0] = (vertex[0] * scale[0]) + translate[0];\n vertex[1] = (vertex[1] * scale[1]) + translate[1];\n vertex[2] = (vertex[2] * scale[2]) + translate[2];\n }\n}\n\nfunction centerVertices(vertices) {\n if (center) {\n const centerPos = math.vec3();\n const numPoints = vertices.length;\n for (let i = 0, len = vertices.length; i < len; i++) {\n const vertex = vertices[i];\n centerPos[0] += vertex[0];\n centerPos[1] += vertex[1];\n centerPos[2] += vertex[2];\n }\n centerPos[0] /= numPoints;\n centerPos[1] /= numPoints;\n centerPos[2] /= numPoints;\n for (let i = 0, len = vertices.length; i < len; i++) {\n const vertex = vertices[i];\n vertex[0] -= centerPos[0];\n vertex[1] -= centerPos[1];\n vertex[2] -= centerPos[2];\n }\n }\n}\n\nfunction customTransformVertices(vertices, transform) {\n if (transform) {\n const mat = math.mat4(transform);\n for (let i = 0, len = vertices.length; i < len; i++) {\n const vertex = vertices[i];\n math.transformPoint3(mat, vertex, vertex);\n }\n }\n}\n\nfunction parseCityJSON(ctx) {\n\n const data = ctx.data;\n const cityObjects = data.CityObjects;\n\n for (const objectId in cityObjects) {\n if (cityObjects.hasOwnProperty(objectId)) {\n const cityObject = cityObjects[objectId];\n parseCityObject(ctx, cityObject, objectId);\n }\n }\n}\n\nfunction parseCityObject(ctx, cityObject, objectId) {\n\n const xktModel = ctx.xktModel;\n const data = ctx.data;\n const metaObjectId = objectId;\n const metaObjectType = cityObject.type;\n const metaObjectName = metaObjectType + \" : \" + objectId;\n\n const parentMetaObjectId = cityObject.parents ? cityObject.parents[0] : ctx.rootMetaObjectId;\n\n xktModel.createMetaObject({\n metaObjectId,\n metaObjectName,\n metaObjectType,\n parentMetaObjectId\n });\n\n ctx.stats.numMetaObjects++;\n\n if (!(cityObject.geometry && cityObject.geometry.length > 0)) {\n return;\n }\n\n const meshIds = [];\n\n for (let i = 0, len = cityObject.geometry.length; i < len; i++) {\n\n const geometry = cityObject.geometry[i];\n\n let objectMaterial;\n let surfaceMaterials;\n\n const appearance = data.appearance;\n if (appearance) {\n const materials = appearance.materials;\n if (materials) {\n const geometryMaterial = geometry.material;\n if (geometryMaterial) {\n const themeIds = Object.keys(geometryMaterial);\n if (themeIds.length > 0) {\n const themeId = themeIds[0];\n const theme = geometryMaterial[themeId];\n if (theme.value !== undefined) {\n objectMaterial = materials[theme.value];\n } else {\n const values = theme.values;\n if (values) {\n surfaceMaterials = [];\n for (let j = 0, lenj = values.length; j < lenj; j++) {\n const value = values[i];\n const surfaceMaterial = materials[value];\n surfaceMaterials.push(surfaceMaterial);\n }\n }\n }\n }\n }\n }\n }\n\n if (surfaceMaterials) {\n parseGeometrySurfacesWithOwnMaterials(ctx, geometry, surfaceMaterials, meshIds);\n\n } else {\n parseGeometrySurfacesWithSharedMaterial(ctx, geometry, objectMaterial, meshIds);\n }\n }\n\n if (meshIds.length > 0) {\n xktModel.createEntity({\n entityId: objectId,\n meshIds: meshIds\n });\n\n ctx.stats.numObjects++;\n }\n}\n\nfunction parseGeometrySurfacesWithOwnMaterials(ctx, geometry, surfaceMaterials, meshIds) {\n\n const geomType = geometry.type;\n\n switch (geomType) {\n\n case \"MultiPoint\":\n break;\n\n case \"MultiLineString\":\n break;\n\n case \"MultiSurface\":\n\n case \"CompositeSurface\":\n const surfaces = geometry.boundaries;\n parseSurfacesWithOwnMaterials(ctx, surfaceMaterials, surfaces, meshIds);\n break;\n\n case \"Solid\":\n const shells = geometry.boundaries;\n for (let j = 0; j < shells.length; j++) {\n const surfaces = shells[j];\n parseSurfacesWithOwnMaterials(ctx, surfaceMaterials, surfaces, meshIds);\n }\n break;\n\n case \"MultiSolid\":\n\n case \"CompositeSolid\":\n const solids = geometry.boundaries;\n for (let j = 0; j < solids.length; j++) {\n for (let k = 0; k < solids[j].length; k++) {\n const surfaces = solids[j][k];\n parseSurfacesWithOwnMaterials(ctx, surfaceMaterials, surfaces, meshIds);\n }\n }\n break;\n\n case \"GeometryInstance\":\n break;\n }\n}\n\nfunction parseSurfacesWithOwnMaterials(ctx, surfaceMaterials, surfaces, meshIds) {\n\n const vertices = ctx.vertices;\n const xktModel = ctx.xktModel;\n\n for (let i = 0; i < surfaces.length; i++) {\n\n const surface = surfaces[i];\n const surfaceMaterial = surfaceMaterials[i] || {diffuseColor: [0.8, 0.8, 0.8], transparency: 1.0};\n\n const face = [];\n const holes = [];\n\n const sharedIndices = [];\n\n const geometryCfg = {\n positions: [],\n indices: []\n };\n\n for (let j = 0; j < surface.length; j++) {\n\n if (face.length > 0) {\n holes.push(face.length);\n }\n\n const newFace = extractLocalIndices(ctx, surface[j], sharedIndices, geometryCfg);\n\n face.push(...newFace);\n }\n\n if (face.length === 3) { // Triangle\n\n geometryCfg.indices.push(face[0]);\n geometryCfg.indices.push(face[1]);\n geometryCfg.indices.push(face[2]);\n\n } else if (face.length > 3) { // Polygon\n\n // Prepare to triangulate\n\n const pList = [];\n\n for (let k = 0; k < face.length; k++) {\n pList.push({\n x: vertices[sharedIndices[face[k]]][0],\n y: vertices[sharedIndices[face[k]]][1],\n z: vertices[sharedIndices[face[k]]][2]\n });\n }\n\n const normal = getNormalOfPositions(pList, math.vec3());\n\n // Convert to 2D\n\n let pv = [];\n\n for (let k = 0; k < pList.length; k++) {\n\n to2D(pList[k], normal, tempVec2a);\n\n pv.unshift(tempVec2a[0]);\n pv.unshift(tempVec2a[1]);\n }\n\n // Triangulate\n\n const tr = earcut(pv, holes, 2);\n\n // Create triangles\n\n for (let k = 0; k < tr.length; k += 3) {\n geometryCfg.indices.unshift(face[tr[k]]);\n geometryCfg.indices.unshift(face[tr[k + 1]]);\n geometryCfg.indices.unshift(face[tr[k + 2]]);\n }\n }\n\n const geometryId = \"\" + ctx.nextId++;\n const meshId = \"\" + ctx.nextId++;\n\n xktModel.createGeometry({\n geometryId: geometryId,\n primitiveType: \"triangles\",\n positions: geometryCfg.positions,\n indices: geometryCfg.indices\n });\n\n xktModel.createMesh({\n meshId: meshId,\n geometryId: geometryId,\n color: (surfaceMaterial && surfaceMaterial.diffuseColor) ? surfaceMaterial.diffuseColor : [0.8, 0.8, 0.8],\n opacity: 1.0\n //opacity: (surfaceMaterial && surfaceMaterial.transparency !== undefined) ? (1.0 - surfaceMaterial.transparency) : 1.0\n });\n\n meshIds.push(meshId);\n\n ctx.stats.numGeometries++;\n ctx.stats.numVertices += geometryCfg.positions.length / 3;\n ctx.stats.numTriangles += geometryCfg.indices.length / 3;\n }\n}\n\nfunction parseGeometrySurfacesWithSharedMaterial(ctx, geometry, objectMaterial, meshIds) {\n\n const xktModel = ctx.xktModel;\n const sharedIndices = [];\n const geometryCfg = {\n positions: [],\n indices: []\n };\n\n const geomType = geometry.type;\n\n switch (geomType) {\n case \"MultiPoint\":\n break;\n\n case \"MultiLineString\":\n break;\n\n case \"MultiSurface\":\n case \"CompositeSurface\":\n const surfaces = geometry.boundaries;\n parseSurfacesWithSharedMaterial(ctx, surfaces, sharedIndices, geometryCfg);\n break;\n\n case \"Solid\":\n const shells = geometry.boundaries;\n for (let j = 0; j < shells.length; j++) {\n const surfaces = shells[j];\n parseSurfacesWithSharedMaterial(ctx, surfaces, sharedIndices, geometryCfg);\n }\n break;\n\n case \"MultiSolid\":\n case \"CompositeSolid\":\n const solids = geometry.boundaries;\n for (let j = 0; j < solids.length; j++) {\n for (let k = 0; k < solids[j].length; k++) {\n const surfaces = solids[j][k];\n parseSurfacesWithSharedMaterial(ctx, surfaces, sharedIndices, geometryCfg);\n }\n }\n break;\n\n case \"GeometryInstance\":\n break;\n }\n\n const geometryId = \"\" + ctx.nextId++;\n const meshId = \"\" + ctx.nextId++;\n\n xktModel.createGeometry({\n geometryId: geometryId,\n primitiveType: \"triangles\",\n positions: geometryCfg.positions,\n indices: geometryCfg.indices\n });\n\n xktModel.createMesh({\n meshId: meshId,\n geometryId: geometryId,\n color: (objectMaterial && objectMaterial.diffuseColor) ? objectMaterial.diffuseColor : [0.8, 0.8, 0.8],\n opacity: 1.0\n //opacity: (objectMaterial && objectMaterial.transparency !== undefined) ? (1.0 - objectMaterial.transparency) : 1.0\n });\n\n meshIds.push(meshId);\n\n ctx.stats.numGeometries++;\n ctx.stats.numVertices += geometryCfg.positions.length / 3;\n ctx.stats.numTriangles += geometryCfg.indices.length / 3;\n}\n\nfunction parseSurfacesWithSharedMaterial(ctx, surfaces, sharedIndices, primitiveCfg) {\n\n const vertices = ctx.vertices;\n\n for (let i = 0; i < surfaces.length; i++) {\n\n let boundary = [];\n let holes = [];\n\n for (let j = 0; j < surfaces[i].length; j++) {\n if (boundary.length > 0) {\n holes.push(boundary.length);\n }\n const newBoundary = extractLocalIndices(ctx, surfaces[i][j], sharedIndices, primitiveCfg);\n boundary.push(...newBoundary);\n }\n\n if (boundary.length === 3) { // Triangle\n\n primitiveCfg.indices.push(boundary[0]);\n primitiveCfg.indices.push(boundary[1]);\n primitiveCfg.indices.push(boundary[2]);\n\n } else if (boundary.length > 3) { // Polygon\n\n let pList = [];\n\n for (let k = 0; k < boundary.length; k++) {\n pList.push({\n x: vertices[sharedIndices[boundary[k]]][0],\n y: vertices[sharedIndices[boundary[k]]][1],\n z: vertices[sharedIndices[boundary[k]]][2]\n });\n }\n\n const normal = getNormalOfPositions(pList, math.vec3());\n let pv = [];\n\n for (let k = 0; k < pList.length; k++) {\n to2D(pList[k], normal, tempVec2a);\n pv.unshift(tempVec2a[0]);\n pv.unshift(tempVec2a[1]);\n }\n\n const tr = earcut(pv, holes, 2);\n\n for (let k = 0; k < tr.length; k += 3) {\n primitiveCfg.indices.unshift(boundary[tr[k]]);\n primitiveCfg.indices.unshift(boundary[tr[k + 1]]);\n primitiveCfg.indices.unshift(boundary[tr[k + 2]]);\n }\n }\n }\n}\n\nfunction extractLocalIndices(ctx, boundary, sharedIndices, geometryCfg) {\n\n const vertices = ctx.vertices;\n const newBoundary = []\n\n for (let i = 0, len = boundary.length; i < len; i++) {\n\n const index = boundary[i];\n\n if (sharedIndices.includes(index)) {\n const vertexIndex = sharedIndices.indexOf(index);\n newBoundary.push(vertexIndex);\n\n } else {\n geometryCfg.positions.push(vertices[index][0]);\n geometryCfg.positions.push(vertices[index][1]);\n geometryCfg.positions.push(vertices[index][2]);\n\n newBoundary.push(sharedIndices.length);\n\n sharedIndices.push(index);\n }\n }\n\n return newBoundary\n}\n\nfunction getNormalOfPositions(positions, normal) {\n\n for (let i = 0; i < positions.length; i++) {\n\n let nexti = i + 1;\n if (nexti === positions.length) {\n nexti = 0;\n }\n\n normal[0] += ((positions[i].y - positions[nexti].y) * (positions[i].z + positions[nexti].z));\n normal[1] += ((positions[i].z - positions[nexti].z) * (positions[i].x + positions[nexti].x));\n normal[2] += ((positions[i].x - positions[nexti].x) * (positions[i].y + positions[nexti].y));\n }\n\n return math.normalizeVec3(normal);\n}\n\nfunction to2D(_p, _n, re) {\n\n const p = tempVec3a;\n const n = tempVec3b;\n const x3 = tempVec3c;\n\n p[0] = _p.x;\n p[1] = _p.y;\n p[2] = _p.z;\n\n n[0] = _n.x;\n n[1] = _n.y;\n n[2] = _n.z;\n\n x3[0] = 1.1;\n x3[1] = 1.1;\n x3[2] = 1.1;\n\n const dist = math.lenVec3(math.subVec3(x3, n));\n\n if (dist < 0.01) {\n x3[0] += 1.0;\n x3[1] += 2.0;\n x3[2] += 3.0;\n }\n\n const dot = math.dotVec3(x3, n);\n const tmp2 = math.mulVec3Scalar(n, dot, math.vec3());\n\n x3[0] -= tmp2[0];\n x3[1] -= tmp2[1];\n x3[2] -= tmp2[2];\n\n math.normalizeVec3(x3);\n\n const y3 = math.cross3Vec3(n, x3, math.vec3());\n const x = math.dotVec3(p, x3);\n const y = math.dotVec3(p, y3);\n\n re[0] = x;\n re[1] = y;\n}\n\nexport {parseCityJSONIntoXKTModel};","import {utils} from \"../XKTModel/lib/utils.js\";\nimport {math} from \"../lib/math.js\";\n\nimport {parse} from '@loaders.gl/core';\nimport {GLTFLoader} from '@loaders.gl/gltf';\nimport {\n ClampToEdgeWrapping,\n LinearFilter,\n LinearMipMapLinearFilter,\n LinearMipMapNearestFilter,\n MirroredRepeatWrapping,\n NearestFilter,\n NearestMipMapLinearFilter,\n NearestMipMapNearestFilter,\n RepeatWrapping\n} from \"../constants.js\";\n\n/**\n * @desc Parses glTF into an {@link XKTModel}, supporting ````.glb```` and textures.\n *\n * * Supports ````.glb```` and textures\n * * For a lightweight glTF JSON parser that ignores textures, see {@link parseGLTFJSONIntoXKTModel}.\n *\n * ## Usage\n *\n * In the example below we'll create an {@link XKTModel}, then load a binary glTF model into it.\n *\n * ````javascript\n * utils.loadArraybuffer(\"../assets/models/gltf/HousePlan/glTF-Binary/HousePlan.glb\", async (data) => {\n *\n * const xktModel = new XKTModel();\n *\n * parseGLTFIntoXKTModel({\n * data,\n * xktModel,\n * log: (msg) => { console.log(msg); }\n * }).then(()=>{\n * xktModel.finalize();\n * },\n * (msg) => {\n * console.error(msg);\n * });\n * });\n * ````\n *\n * @param {Object} params Parsing parameters.\n * @param {ArrayBuffer} params.data The glTF.\n * @param {String} [params.baseUri] The base URI used to load this glTF, if any. For resolving relative uris to linked resources.\n * @param {Object} [params.metaModelData] Metamodel JSON. If this is provided, then parsing is able to ensure that the XKTObjects it creates will fit the metadata properly.\n * @param {XKTModel} params.xktModel XKTModel to parse into.\n * @param {Boolean} [params.includeTextures=true] Whether to parse textures.\n * @param {Boolean} [params.includeNormals=true] Whether to parse normals. When false, the parser will ignore the glTF\n * geometry normals, and the glTF data will rely on the xeokit ````Viewer```` to automatically generate them. This has\n * the limitation that the normals will be face-aligned, and therefore the ````Viewer```` will only be able to render\n * a flat-shaded non-PBR representation of the glTF.\n * @param {Object} [params.stats] Collects statistics.\n * @param {function} [params.log] Logging callback.\n @returns {Promise} Resolves when glTF has been parsed.\n */\nfunction parseGLTFIntoXKTModel({\n data,\n baseUri,\n xktModel,\n metaModelData,\n includeTextures = true,\n includeNormals = true,\n getAttachment,\n stats = {},\n log\n }) {\n\n return new Promise(function (resolve, reject) {\n\n if (!data) {\n reject(\"Argument expected: data\");\n return;\n }\n\n if (!xktModel) {\n reject(\"Argument expected: xktModel\");\n return;\n }\n\n stats.sourceFormat = \"glTF\";\n stats.schemaVersion = \"2.0\";\n stats.title = \"\";\n stats.author = \"\";\n stats.created = \"\";\n stats.numTriangles = 0;\n stats.numVertices = 0;\n stats.numNormals = 0;\n stats.numUVs = 0;\n stats.numTextures = 0;\n stats.numObjects = 0;\n stats.numGeometries = 0;\n\n parse(data, GLTFLoader, {\n baseUri\n }).then((gltfData) => {\n\n const ctx = {\n gltfData,\n nodesHaveNames: false, // determined in testIfNodesHaveNames()\n getAttachment: getAttachment || (() => {\n throw new Error('You must define getAttachment() method to convert glTF with external resources')\n }),\n log: (log || function (msg) {\n }),\n error: function (msg) {\n console.error(msg);\n },\n xktModel,\n includeNormals: (includeNormals !== false),\n includeTextures: (includeTextures !== false),\n geometryCreated: {},\n nextId: 0,\n geometriesCreated : {},\n stats\n };\n\n ctx.log(\"Using parser: parseGLTFIntoXKTModel\");\n ctx.log(`Parsing normals: ${ctx.includeNormals ? \"enabled\" : \"disabled\"}`);\n ctx.log(`Parsing textures: ${ctx.includeTextures ? \"enabled\" : \"disabled\"}`);\n\n if (ctx.includeTextures) {\n parseTextures(ctx);\n }\n parseMaterials(ctx);\n parseDefaultScene(ctx);\n\n resolve();\n\n }, (errMsg) => {\n reject(`[parseGLTFIntoXKTModel] ${errMsg}`);\n });\n });\n}\n\nfunction parseTextures(ctx) {\n const gltfData = ctx.gltfData;\n const textures = gltfData.textures;\n if (textures) {\n for (let i = 0, len = textures.length; i < len; i++) {\n parseTexture(ctx, textures[i]);\n ctx.stats.numTextures++;\n }\n }\n}\n\nfunction parseTexture(ctx, texture) {\n if (!texture.source || !texture.source.image) {\n return;\n }\n const textureId = `texture-${ctx.nextId++}`;\n\n let minFilter = NearestMipMapLinearFilter;\n switch (texture.sampler.minFilter) {\n case 9728:\n minFilter = NearestFilter;\n break;\n case 9729:\n minFilter = LinearFilter;\n break;\n case 9984:\n minFilter = NearestMipMapNearestFilter;\n break;\n case 9985:\n minFilter = LinearMipMapNearestFilter;\n break;\n case 9986:\n minFilter = NearestMipMapLinearFilter;\n break;\n case 9987:\n minFilter = LinearMipMapLinearFilter;\n break;\n }\n\n let magFilter = LinearFilter;\n switch (texture.sampler.magFilter) {\n case 9728:\n magFilter = NearestFilter;\n break;\n case 9729:\n magFilter = LinearFilter;\n break;\n }\n\n let wrapS = RepeatWrapping;\n switch (texture.sampler.wrapS) {\n case 33071:\n wrapS = ClampToEdgeWrapping;\n break;\n case 33648:\n wrapS = MirroredRepeatWrapping;\n break;\n case 10497:\n wrapS = RepeatWrapping;\n break;\n }\n\n let wrapT = RepeatWrapping;\n switch (texture.sampler.wrapT) {\n case 33071:\n wrapT = ClampToEdgeWrapping;\n break;\n case 33648:\n wrapT = MirroredRepeatWrapping;\n break;\n case 10497:\n wrapT = RepeatWrapping;\n break;\n }\n\n let wrapR = RepeatWrapping;\n switch (texture.sampler.wrapR) {\n case 33071:\n wrapR = ClampToEdgeWrapping;\n break;\n case 33648:\n wrapR = MirroredRepeatWrapping;\n break;\n case 10497:\n wrapR = RepeatWrapping;\n break;\n }\n\n ctx.xktModel.createTexture({\n textureId: textureId,\n imageData: texture.source.image,\n mediaType: texture.source.mediaType,\n compressed: true,\n width: texture.source.image.width,\n height: texture.source.image.height,\n minFilter,\n magFilter,\n wrapS,\n wrapT,\n wrapR,\n flipY: !!texture.flipY,\n // encoding: \"sRGB\"\n });\n texture._textureId = textureId;\n}\n\nfunction parseMaterials(ctx) {\n const gltfData = ctx.gltfData;\n const materials = gltfData.materials;\n if (materials) {\n for (let i = 0, len = materials.length; i < len; i++) {\n const material = materials[i];\n material._textureSetId = ctx.includeTextures ? parseTextureSet(ctx, material) : null;\n material._attributes = parseMaterialAttributes(ctx, material);\n }\n }\n}\n\nfunction parseTextureSet(ctx, material) {\n const textureSetCfg = {};\n if (material.normalTexture) {\n textureSetCfg.normalTextureId = material.normalTexture.texture._textureId;\n }\n if (material.occlusionTexture) {\n textureSetCfg.occlusionTextureId = material.occlusionTexture.texture._textureId;\n }\n if (material.emissiveTexture) {\n textureSetCfg.emissiveTextureId = material.emissiveTexture.texture._textureId;\n }\n const metallicPBR = material.pbrMetallicRoughness;\n if (material.pbrMetallicRoughness) {\n const pbrMetallicRoughness = material.pbrMetallicRoughness;\n const baseColorTexture = pbrMetallicRoughness.baseColorTexture || pbrMetallicRoughness.colorTexture;\n if (baseColorTexture) {\n if (baseColorTexture.texture) {\n textureSetCfg.colorTextureId = baseColorTexture.texture._textureId;\n } else {\n textureSetCfg.colorTextureId = ctx.gltfData.textures[baseColorTexture.index]._textureId;\n }\n }\n if (metallicPBR.metallicRoughnessTexture) {\n textureSetCfg.metallicRoughnessTextureId = metallicPBR.metallicRoughnessTexture.texture._textureId;\n }\n }\n const extensions = material.extensions;\n if (extensions) {\n const specularPBR = extensions[\"KHR_materials_pbrSpecularGlossiness\"];\n if (specularPBR) {\n const specularTexture = specularPBR.specularTexture;\n if (specularTexture !== null && specularTexture !== undefined) {\n // textureSetCfg.colorTextureId = ctx.gltfData.textures[specularColorTexture.index]._textureId;\n }\n const specularColorTexture = specularPBR.specularColorTexture;\n if (specularColorTexture !== null && specularColorTexture !== undefined) {\n textureSetCfg.colorTextureId = ctx.gltfData.textures[specularColorTexture.index]._textureId;\n }\n }\n }\n if (textureSetCfg.normalTextureId !== undefined ||\n textureSetCfg.occlusionTextureId !== undefined ||\n textureSetCfg.emissiveTextureId !== undefined ||\n textureSetCfg.colorTextureId !== undefined ||\n textureSetCfg.metallicRoughnessTextureId !== undefined) {\n textureSetCfg.textureSetId = `textureSet-${ctx.nextId++};`\n ctx.xktModel.createTextureSet(textureSetCfg);\n ctx.stats.numTextureSets++;\n return textureSetCfg.textureSetId;\n }\n return null;\n}\n\nfunction parseMaterialAttributes(ctx, material) { // Substitute RGBA for material, to use fast flat shading instead\n const extensions = material.extensions;\n const materialAttributes = {\n color: new Float32Array([1, 1, 1, 1]),\n opacity: 1,\n metallic: 0,\n roughness: 1\n };\n if (extensions) {\n const specularPBR = extensions[\"KHR_materials_pbrSpecularGlossiness\"];\n if (specularPBR) {\n const diffuseFactor = specularPBR.diffuseFactor;\n if (diffuseFactor !== null && diffuseFactor !== undefined) {\n materialAttributes.color.set(diffuseFactor);\n }\n }\n const common = extensions[\"KHR_materials_common\"];\n if (common) {\n const technique = common.technique;\n const values = common.values || {};\n const blinn = technique === \"BLINN\";\n const phong = technique === \"PHONG\";\n const lambert = technique === \"LAMBERT\";\n const diffuse = values.diffuse;\n if (diffuse && (blinn || phong || lambert)) {\n if (!utils.isString(diffuse)) {\n materialAttributes.color.set(diffuse);\n }\n }\n const transparency = values.transparency;\n if (transparency !== null && transparency !== undefined) {\n materialAttributes.opacity = transparency;\n }\n const transparent = values.transparent;\n if (transparent !== null && transparent !== undefined) {\n materialAttributes.opacity = transparent;\n }\n }\n }\n const metallicPBR = material.pbrMetallicRoughness;\n if (metallicPBR) {\n const baseColorFactor = metallicPBR.baseColorFactor;\n if (baseColorFactor) {\n materialAttributes.color[0] = baseColorFactor[0];\n materialAttributes.color[1] = baseColorFactor[1];\n materialAttributes.color[2] = baseColorFactor[2];\n materialAttributes.opacity = baseColorFactor[3];\n }\n const metallicFactor = metallicPBR.metallicFactor;\n if (metallicFactor !== null && metallicFactor !== undefined) {\n materialAttributes.metallic = metallicFactor;\n }\n const roughnessFactor = metallicPBR.roughnessFactor;\n if (roughnessFactor !== null && roughnessFactor !== undefined) {\n materialAttributes.roughness = roughnessFactor;\n }\n }\n return materialAttributes;\n}\n\nfunction parseDefaultScene(ctx) {\n const gltfData = ctx.gltfData;\n const scene = gltfData.scene || gltfData.scenes[0];\n if (!scene) {\n ctx.error(\"glTF has no default scene\");\n return;\n }\n parseScene(ctx, scene);\n}\n\nfunction parseScene(ctx, scene) {\n const nodes = scene.nodes;\n if (!nodes) {\n return;\n }\n for (let i = 0, len = nodes.length; i < len; i++) {\n const node = nodes[i];\n countMeshUsage(ctx, node);\n }\n for (let i = 0, len = nodes.length; i < len && !ctx.nodesHaveNames; i++) {\n const node = nodes[i];\n if (testIfNodesHaveNames(node)) {\n ctx.nodesHaveNames = true;\n }\n }\n if (!ctx.nodesHaveNames) {\n ctx.log(`Warning: No \"name\" attributes found on glTF scene nodes - objects in XKT may not be what you expect`);\n for (let i = 0, len = nodes.length; i < len; i++) {\n const node = nodes[i];\n parseNodesWithoutNames(ctx, node, 0, null);\n }\n } else {\n for (let i = 0, len = nodes.length; i < len; i++) {\n const node = nodes[i];\n parseNodesWithNames(ctx, node, 0, null);\n }\n }\n}\n\nfunction countMeshUsage(ctx, node, level = 0) {\n if (!node) {\n return;\n }\n const mesh = node.mesh;\n if (mesh) {\n mesh.instances = mesh.instances ? mesh.instances + 1 : 1;\n }\n if (node.children) {\n const children = node.children;\n for (let i = 0, len = children.length; i < len; i++) {\n const childNode = children[i];\n if (!childNode) {\n ctx.error(\"Node not found: \" + i);\n continue;\n }\n countMeshUsage(ctx, childNode, level + 1);\n }\n }\n}\n\nfunction testIfNodesHaveNames(node, level = 0) {\n if (!node) {\n return;\n }\n if (node.name) {\n return true;\n }\n if (node.children) {\n const children = node.children;\n for (let i = 0, len = children.length; i < len; i++) {\n const childNode = children[i];\n if (testIfNodesHaveNames(childNode, level + 1)) {\n return true;\n }\n }\n }\n return false;\n}\n\n/**\n * Parses a glTF node hierarchy that is known to NOT contain \"name\" attributes on the nodes.\n * Create a XKTMesh for each mesh primitive, and a single XKTEntity.\n */\nconst parseNodesWithoutNames = (function () {\n\n const meshIds = [];\n\n return function (ctx, node, depth, matrix) {\n if (!node) {\n return;\n }\n matrix = parseNodeMatrix(node, matrix);\n if (node.mesh) {\n parseNodeMesh(node, ctx, matrix, meshIds);\n }\n if (node.children) {\n const children = node.children;\n for (let i = 0, len = children.length; i < len; i++) {\n const childNode = children[i];\n parseNodesWithoutNames(ctx, childNode, depth + 1, matrix);\n }\n }\n if (depth === 0) {\n let entityId = \"entity-\" + ctx.nextId++;\n if (meshIds && meshIds.length > 0) {\n ctx.log(\"Creating XKTEntity with default ID: \" + entityId);\n ctx.xktModel.createEntity({\n entityId,\n meshIds\n });\n meshIds.length = 0;\n }\n ctx.stats.numObjects++;\n }\n }\n})();\n\n\n/**\n * Parses a glTF node hierarchy that is known to contain \"name\" attributes on the nodes.\n *\n * Create a XKTMesh for each mesh primitive, and XKTEntity for each named node.\n *\n * Following a depth-first traversal, each XKTEntity is created on post-visit of each named node,\n * and gets all the XKTMeshes created since the last XKTEntity created.\n */\nconst parseNodesWithNames = (function () {\n\n const objectIdStack = [];\n const meshIdsStack = [];\n let meshIds = null;\n\n return function (ctx, node, depth, matrix) {\n if (!node) {\n return;\n }\n matrix = parseNodeMatrix(node, matrix);\n if (node.name) {\n meshIds = [];\n let xktEntityId = node.name;\n if (!!xktEntityId && ctx.xktModel.entities[xktEntityId]) {\n ctx.log(`Warning: Two or more glTF nodes found with same 'name' attribute: '${xktEntityId} - will randomly-generating an object ID in XKT`);\n }\n while (!xktEntityId || ctx.xktModel.entities[xktEntityId]) {\n xktEntityId = \"entity-\" + ctx.nextId++;\n }\n objectIdStack.push(xktEntityId);\n meshIdsStack.push(meshIds);\n }\n if (meshIds && node.mesh) {\n parseNodeMesh(node, ctx, matrix, meshIds);\n }\n if (node.children) {\n const children = node.children;\n for (let i = 0, len = children.length; i < len; i++) {\n const childNode = children[i];\n parseNodesWithNames(ctx, childNode, depth + 1, matrix);\n }\n }\n const nodeName = node.name;\n if ((nodeName !== undefined && nodeName !== null) || depth === 0) {\n let xktEntityId = objectIdStack.pop();\n if (!xktEntityId) { // For when there are no nodes with names\n xktEntityId = \"entity-\" + ctx.nextId++;\n }\n let entityMeshIds = meshIdsStack.pop();\n if (meshIds && meshIds.length > 0) {\n ctx.xktModel.createEntity({\n entityId: xktEntityId,\n meshIds: entityMeshIds\n });\n }\n ctx.stats.numObjects++;\n meshIds = meshIdsStack.length > 0 ? meshIdsStack[meshIdsStack.length - 1] : null;\n }\n }\n})();\n\n/**\n * Parses transform at the given glTF node.\n *\n * @param node the glTF node\n * @param matrix Transfor matrix from parent nodes\n * @returns {*} Transform matrix for the node\n */\nfunction parseNodeMatrix(node, matrix) {\n if (!node) {\n return;\n }\n let localMatrix;\n if (node.matrix) {\n localMatrix = node.matrix;\n if (matrix) {\n matrix = math.mulMat4(matrix, localMatrix, math.mat4());\n } else {\n matrix = localMatrix;\n }\n }\n if (node.translation) {\n localMatrix = math.translationMat4v(node.translation);\n if (matrix) {\n matrix = math.mulMat4(matrix, localMatrix, math.mat4());\n } else {\n matrix = localMatrix;\n }\n }\n if (node.rotation) {\n localMatrix = math.quaternionToMat4(node.rotation);\n if (matrix) {\n matrix = math.mulMat4(matrix, localMatrix, math.mat4());\n } else {\n matrix = localMatrix;\n }\n }\n if (node.scale) {\n localMatrix = math.scalingMat4v(node.scale);\n if (matrix) {\n matrix = math.mulMat4(matrix, localMatrix, math.mat4());\n } else {\n matrix = localMatrix;\n }\n }\n return matrix;\n}\n\nfunction createPrimitiveHash(primitive) {\n const hash = [];\n const attributes = primitive.attributes;\n if (attributes) {\n for (let key in attributes) {\n hash.push(attributes[key].id);\n }\n }\n return hash.join(\".\");\n}\n\n/**\n * Parses primitives referenced by the mesh belonging to the given node, creating XKTMeshes in the XKTModel.\n *\n * @param node glTF node\n * @param ctx Parsing context\n * @param matrix Matrix for the XKTMeshes\n * @param meshIds returns IDs of the new XKTMeshes\n */\nfunction parseNodeMesh(node, ctx, matrix, meshIds) {\n if (!node) {\n return;\n }\n const mesh = node.mesh;\n if (!mesh) {\n return;\n }\n const numPrimitives = mesh.primitives.length;\n if (numPrimitives > 0) {\n for (let i = 0; i < numPrimitives; i++) {\n try {\n const primitive = mesh.primitives[i];\n const geometryId = createPrimitiveHash(primitive);\n if (!ctx.geometriesCreated[geometryId]) {\n const geometryCfg = {\n geometryId\n };\n switch (primitive.mode) {\n case 0: // POINTS\n geometryCfg.primitiveType = \"points\";\n break;\n case 1: // LINES\n geometryCfg.primitiveType = \"lines\";\n break;\n case 2: // LINE_LOOP\n geometryCfg.primitiveType = \"line-loop\";\n break;\n case 3: // LINE_STRIP\n geometryCfg.primitiveType = \"line-strip\";\n break;\n case 4: // TRIANGLES\n geometryCfg.primitiveType = \"triangles\";\n break;\n case 5: // TRIANGLE_STRIP\n geometryCfg.primitiveType = \"triangle-strip\";\n break;\n case 6: // TRIANGLE_FAN\n geometryCfg.primitiveType = \"triangle-fan\";\n break;\n default:\n geometryCfg.primitiveType = \"triangles\";\n }\n const POSITION = primitive.attributes.POSITION;\n if (!POSITION) {\n continue;\n }\n geometryCfg.positions = primitive.attributes.POSITION.value;\n ctx.stats.numVertices += geometryCfg.positions.length / 3;\n if (ctx.includeNormals) {\n if (primitive.attributes.NORMAL) {\n geometryCfg.normals = primitive.attributes.NORMAL.value;\n ctx.stats.numNormals += geometryCfg.normals.length / 3;\n }\n }\n if (primitive.attributes.COLOR_0) {\n geometryCfg.colorsCompressed = primitive.attributes.COLOR_0.value;\n }\n if (ctx.includeTextures) {\n if (primitive.attributes.TEXCOORD_0) {\n geometryCfg.uvs = primitive.attributes.TEXCOORD_0.value;\n ctx.stats.numUVs += geometryCfg.uvs.length / 2;\n }\n }\n if (primitive.indices) {\n geometryCfg.indices = primitive.indices.value;\n if (primitive.mode === 4) {\n ctx.stats.numTriangles += geometryCfg.indices.length / 3;\n }\n }\n ctx.xktModel.createGeometry(geometryCfg);\n ctx.geometriesCreated[geometryId] = true;\n ctx.stats.numGeometries++;\n }\n const xktMeshId = ctx.nextId++;\n const meshCfg = {\n meshId: xktMeshId,\n geometryId,\n matrix: matrix ? matrix.slice() : math.identityMat4()\n };\n const material = primitive.material;\n if (material) {\n meshCfg.textureSetId = material._textureSetId;\n meshCfg.color = material._attributes.color;\n meshCfg.opacity = material._attributes.opacity;\n meshCfg.metallic = material._attributes.metallic;\n meshCfg.roughness = material._attributes.roughness;\n } else {\n meshCfg.color = [1.0, 1.0, 1.0];\n meshCfg.opacity = 1.0;\n }\n ctx.xktModel.createMesh(meshCfg);\n meshIds.push(xktMeshId);\n } catch (e) {\n console.log(e);\n }\n }\n }\n}\n\nexport {parseGLTFIntoXKTModel};","import {utils} from \"../XKTModel/lib/utils.js\";\nimport {math} from \"../lib/math.js\";\n\nconst atob2 = (typeof atob !== 'undefined') ? atob : a => Buffer.from(a, 'base64').toString('binary');\n\nconst WEBGL_COMPONENT_TYPES = {\n 5120: Int8Array,\n 5121: Uint8Array,\n 5122: Int16Array,\n 5123: Uint16Array,\n 5125: Uint32Array,\n 5126: Float32Array\n};\n\nconst WEBGL_TYPE_SIZES = {\n 'SCALAR': 1,\n 'VEC2': 2,\n 'VEC3': 3,\n 'VEC4': 4,\n 'MAT2': 4,\n 'MAT3': 9,\n 'MAT4': 16\n};\n\n/**\n * @desc Parses glTF JSON into an {@link XKTModel}, without ````.glb```` and textures.\n *\n * * Lightweight JSON-based glTF parser which ignores textures\n * * For texture and ````.glb```` support, see {@link parseGLTFIntoXKTModel}\n *\n * ## Usage\n *\n * In the example below we'll create an {@link XKTModel}, then load a glTF model into it.\n *\n * ````javascript\n * utils.loadJSON(\"./models/gltf/duplex/scene.gltf\", async (data) => {\n *\n * const xktModel = new XKTModel();\n *\n * parseGLTFJSONIntoXKTModel({\n * data,\n * xktModel,\n * log: (msg) => { console.log(msg); }\n * }).then(()=>{\n * xktModel.finalize();\n * },\n * (msg) => {\n * console.error(msg);\n * });\n * });\n * ````\n *\n * @param {Object} params Parsing parameters.\n * @param {Object} params.data The glTF JSON.\n * @param {Object} [params.metaModelData] Metamodel JSON. If this is provided, then parsing is able to ensure that the XKTObjects it creates will fit the metadata properly.\n * @param {XKTModel} params.xktModel XKTModel to parse into.\n * @param {Boolean} [params.includeNormals=false] Whether to parse normals. When false, the parser will ignore the glTF\n * geometry normals, and the glTF data will rely on the xeokit ````Viewer```` to automatically generate them. This has\n * the limitation that the normals will be face-aligned, and therefore the ````Viewer```` will only be able to render\n * a flat-shaded representation of the glTF.\n * @param {Boolean} [params.reuseGeometries=true] When true, the parser will enable geometry reuse within the XKTModel. When false,\n * will automatically \"expand\" all reused geometries into duplicate copies. This has the drawback of increasing the XKT\n * file size (~10-30% for typical models), but can make the model more responsive in the xeokit Viewer, especially if the model\n * has excessive geometry reuse. An example of excessive geometry reuse would be if we have 4000 geometries that are\n * shared amongst 2000 objects, ie. a large number of geometries with a low amount of reuse, which can present a\n * pathological performance case for xeokit's underlying graphics APIs (WebGL, WebGPU etc).\n * @param {function} [params.getAttachment] Callback through which to fetch attachments, if the glTF has them.\n * @param {Object} [params.stats] Collects statistics.\n * @param {function} [params.log] Logging callback.\n * @returns {Promise}\n */\nfunction parseGLTFJSONIntoXKTModel({\n data,\n xktModel,\n metaModelData,\n includeNormals,\n reuseGeometries,\n getAttachment,\n stats = {},\n log\n }) {\n\n if (log) {\n log(\"Using parser: parseGLTFJSONIntoXKTModel\");\n }\n\n return new Promise(function (resolve, reject) {\n\n if (!data) {\n reject(\"Argument expected: data\");\n return;\n }\n\n if (!xktModel) {\n reject(\"Argument expected: xktModel\");\n return;\n }\n\n stats.sourceFormat = \"glTF\";\n stats.schemaVersion = \"2.0\";\n stats.title = \"\";\n stats.author = \"\";\n stats.created = \"\";\n stats.numTriangles = 0;\n stats.numVertices = 0;\n stats.numNormals = 0;\n stats.numObjects = 0;\n stats.numGeometries = 0;\n\n const ctx = {\n gltf: data,\n metaModelCorrections: metaModelData ? getMetaModelCorrections(metaModelData) : null,\n getAttachment: getAttachment || (() => {\n throw new Error('You must define getAttachment() method to convert glTF with external resources')\n }),\n log: (log || function (msg) {\n }),\n xktModel,\n includeNormals,\n createXKTGeometryIds: {},\n nextMeshId: 0,\n reuseGeometries: (reuseGeometries !== false),\n stats\n };\n\n ctx.log(`Parsing normals: ${ctx.includeNormals ? \"enabled\" : \"disabled\"}`);\n\n parseBuffers(ctx).then(() => {\n\n parseBufferViews(ctx);\n freeBuffers(ctx);\n parseMaterials(ctx);\n parseDefaultScene(ctx);\n\n resolve();\n\n }, (errMsg) => {\n reject(errMsg);\n });\n });\n}\n\nfunction getMetaModelCorrections(metaModelData) {\n const eachRootStats = {};\n const eachChildRoot = {};\n const metaObjects = metaModelData.metaObjects || [];\n const metaObjectsMap = {};\n for (let i = 0, len = metaObjects.length; i < len; i++) {\n const metaObject = metaObjects[i];\n metaObjectsMap[metaObject.id] = metaObject;\n }\n for (let i = 0, len = metaObjects.length; i < len; i++) {\n const metaObject = metaObjects[i];\n if (metaObject.parent !== undefined && metaObject.parent !== null) {\n const metaObjectParent = metaObjectsMap[metaObject.parent];\n if (metaObject.type === metaObjectParent.type) {\n let rootMetaObject = metaObjectParent;\n while (rootMetaObject.parent && metaObjectsMap[rootMetaObject.parent].type === rootMetaObject.type) {\n rootMetaObject = metaObjectsMap[rootMetaObject.parent];\n }\n const rootStats = eachRootStats[rootMetaObject.id] || (eachRootStats[rootMetaObject.id] = {\n numChildren: 0,\n countChildren: 0\n });\n rootStats.numChildren++;\n eachChildRoot[metaObject.id] = rootMetaObject;\n } else {\n\n }\n }\n }\n const metaModelCorrections = {\n metaObjectsMap,\n eachRootStats,\n eachChildRoot\n };\n return metaModelCorrections;\n}\n\nfunction parseBuffers(ctx) { // Parses geometry buffers into temporary \"_buffer\" Unit8Array properties on the glTF \"buffer\" elements\n const buffers = ctx.gltf.buffers;\n if (buffers) {\n return Promise.all(buffers.map(buffer => parseBuffer(ctx, buffer)));\n } else {\n return new Promise(function (resolve, reject) {\n resolve();\n });\n }\n}\n\nfunction parseBuffer(ctx, bufferInfo) {\n return new Promise(function (resolve, reject) {\n // Allow a shortcut where the glTF buffer is \"enrichened\" with direct\n // access to the data-arrayBuffer, w/out needing to either:\n // - read the file indicated by the \".uri\" component of the buffer\n // - base64-decode the encoded data in the \".uri\" component\n if (bufferInfo._arrayBuffer) {\n bufferInfo._buffer = bufferInfo._arrayBuffer;\n resolve(bufferInfo);\n return;\n }\n // Otherwise, proceed with \"standard-glTF\" .uri component.\n const uri = bufferInfo.uri;\n if (!uri) {\n reject('gltf/handleBuffer missing uri in ' + JSON.stringify(bufferInfo));\n return;\n }\n parseArrayBuffer(ctx, uri).then((arrayBuffer) => {\n bufferInfo._buffer = arrayBuffer;\n resolve(arrayBuffer);\n }, (errMsg) => {\n reject(errMsg);\n })\n });\n}\n\nfunction parseArrayBuffer(ctx, uri) {\n return new Promise(function (resolve, reject) {\n const dataUriRegex = /^data:(.*?)(;base64)?,(.*)$/; // Check for data: URI\n const dataUriRegexResult = uri.match(dataUriRegex);\n if (dataUriRegexResult) { // Safari can't handle data URIs through XMLHttpRequest\n const isBase64 = !!dataUriRegexResult[2];\n let data = dataUriRegexResult[3];\n data = decodeURIComponent(data);\n if (isBase64) {\n data = atob2(data);\n }\n const buffer = new ArrayBuffer(data.length);\n const view = new Uint8Array(buffer);\n for (let i = 0; i < data.length; i++) {\n view[i] = data.charCodeAt(i);\n }\n resolve(buffer);\n } else { // Uri is a path to a file\n ctx.getAttachment(uri).then(\n (arrayBuffer) => {\n resolve(arrayBuffer);\n },\n (errMsg) => {\n reject(errMsg);\n });\n }\n });\n}\n\nfunction parseBufferViews(ctx) { // Parses our temporary \"_buffer\" properties into \"_buffer\" properties on glTF \"bufferView\" elements\n const bufferViewsInfo = ctx.gltf.bufferViews;\n if (bufferViewsInfo) {\n for (let i = 0, len = bufferViewsInfo.length; i < len; i++) {\n parseBufferView(ctx, bufferViewsInfo[i]);\n }\n }\n}\n\nfunction parseBufferView(ctx, bufferViewInfo) {\n const buffer = ctx.gltf.buffers[bufferViewInfo.buffer];\n bufferViewInfo._typedArray = null;\n const byteLength = bufferViewInfo.byteLength || 0;\n const byteOffset = bufferViewInfo.byteOffset || 0;\n bufferViewInfo._buffer = buffer._buffer.slice(byteOffset, byteOffset + byteLength);\n}\n\nfunction freeBuffers(ctx) { // Deletes the \"_buffer\" properties from the glTF \"buffer\" elements, to save memory\n const buffers = ctx.gltf.buffers;\n if (buffers) {\n for (let i = 0, len = buffers.length; i < len; i++) {\n buffers[i]._buffer = null;\n }\n }\n}\n\nfunction parseMaterials(ctx) {\n const materialsInfo = ctx.gltf.materials;\n if (materialsInfo) {\n for (let i = 0, len = materialsInfo.length; i < len; i++) {\n const materialInfo = materialsInfo[i];\n const material = parseMaterial(ctx, materialInfo);\n materialInfo._materialData = material;\n }\n }\n}\n\nfunction parseMaterial(ctx, materialInfo) { // Attempts to extract an RGBA color for a glTF material\n const material = {\n color: new Float32Array([1, 1, 1]),\n opacity: 1.0,\n metallic: 0,\n roughness: 1\n };\n const extensions = materialInfo.extensions;\n if (extensions) {\n const specularPBR = extensions[\"KHR_materials_pbrSpecularGlossiness\"];\n if (specularPBR) {\n const diffuseFactor = specularPBR.diffuseFactor;\n if (diffuseFactor !== null && diffuseFactor !== undefined) {\n material.color[0] = diffuseFactor[0];\n material.color[1] = diffuseFactor[1];\n material.color[2] = diffuseFactor[2];\n }\n }\n const common = extensions[\"KHR_materials_common\"];\n if (common) {\n const technique = common.technique;\n const values = common.values || {};\n const blinn = technique === \"BLINN\";\n const phong = technique === \"PHONG\";\n const lambert = technique === \"LAMBERT\";\n const diffuse = values.diffuse;\n if (diffuse && (blinn || phong || lambert)) {\n if (!utils.isString(diffuse)) {\n material.color[0] = diffuse[0];\n material.color[1] = diffuse[1];\n material.color[2] = diffuse[2];\n }\n }\n const transparency = values.transparency;\n if (transparency !== null && transparency !== undefined) {\n material.opacity = transparency;\n }\n const transparent = values.transparent;\n if (transparent !== null && transparent !== undefined) {\n material.opacity = transparent;\n }\n }\n }\n const metallicPBR = materialInfo.pbrMetallicRoughness;\n if (metallicPBR) {\n const baseColorFactor = metallicPBR.baseColorFactor;\n if (baseColorFactor) {\n material.color[0] = baseColorFactor[0];\n material.color[1] = baseColorFactor[1];\n material.color[2] = baseColorFactor[2];\n material.opacity = baseColorFactor[3];\n }\n const metallicFactor = metallicPBR.metallicFactor;\n if (metallicFactor !== null && metallicFactor !== undefined) {\n material.metallic = metallicFactor;\n }\n const roughnessFactor = metallicPBR.roughnessFactor;\n if (roughnessFactor !== null && roughnessFactor !== undefined) {\n material.roughness = roughnessFactor;\n }\n }\n return material;\n}\n\nfunction parseDefaultScene(ctx) {\n const scene = ctx.gltf.scene || 0;\n const defaultSceneInfo = ctx.gltf.scenes[scene];\n if (!defaultSceneInfo) {\n throw new Error(\"glTF has no default scene\");\n }\n parseScene(ctx, defaultSceneInfo);\n}\n\n\nfunction parseScene(ctx, sceneInfo) {\n const nodes = sceneInfo.nodes;\n if (!nodes) {\n return;\n }\n for (let i = 0, len = nodes.length; i < len; i++) {\n const glTFNode = ctx.gltf.nodes[nodes[i]];\n if (glTFNode) {\n parseNode(ctx, glTFNode, 0, null);\n }\n }\n}\n\nlet deferredMeshIds = [];\n\nfunction parseNode(ctx, glTFNode, depth, matrix) {\n\n const gltf = ctx.gltf;\n const xktModel = ctx.xktModel;\n\n let localMatrix;\n\n if (glTFNode.matrix) {\n localMatrix = glTFNode.matrix;\n if (matrix) {\n matrix = math.mulMat4(matrix, localMatrix, math.mat4());\n } else {\n matrix = localMatrix;\n }\n }\n\n if (glTFNode.translation) {\n localMatrix = math.translationMat4v(glTFNode.translation);\n if (matrix) {\n matrix = math.mulMat4(matrix, localMatrix, localMatrix);\n } else {\n matrix = localMatrix;\n }\n }\n\n if (glTFNode.rotation) {\n localMatrix = math.quaternionToMat4(glTFNode.rotation);\n if (matrix) {\n matrix = math.mulMat4(matrix, localMatrix, localMatrix);\n } else {\n matrix = localMatrix;\n }\n }\n\n if (glTFNode.scale) {\n localMatrix = math.scalingMat4v(glTFNode.scale);\n if (matrix) {\n matrix = math.mulMat4(matrix, localMatrix, localMatrix);\n } else {\n matrix = localMatrix;\n }\n }\n\n const gltfMeshId = glTFNode.mesh;\n\n if (gltfMeshId !== undefined) {\n\n const meshInfo = gltf.meshes[gltfMeshId];\n\n if (meshInfo) {\n\n const numPrimitivesInMesh = meshInfo.primitives.length;\n\n if (numPrimitivesInMesh > 0) {\n\n for (let i = 0; i < numPrimitivesInMesh; i++) {\n\n const primitiveInfo = meshInfo.primitives[i];\n\n const geometryHash = createPrimitiveGeometryHash(primitiveInfo);\n\n let xktGeometryId = ctx.createXKTGeometryIds[geometryHash];\n\n if ((!ctx.reuseGeometries) || !xktGeometryId) {\n\n xktGeometryId = \"geometry-\" + ctx.nextMeshId++\n\n const geometryArrays = {};\n\n parsePrimitiveGeometry(ctx, primitiveInfo, geometryArrays);\n\n const colors = geometryArrays.colors;\n\n let colorsCompressed;\n\n if (geometryArrays.colors) {\n colorsCompressed = [];\n for (let j = 0, lenj = colors.length; j < lenj; j += 4) {\n colorsCompressed.push(colors[j + 0]);\n colorsCompressed.push(colors[j + 1]);\n colorsCompressed.push(colors[j + 2]);\n colorsCompressed.push(255);\n }\n }\n\n xktModel.createGeometry({\n geometryId: xktGeometryId,\n primitiveType: geometryArrays.primitive,\n positions: geometryArrays.positions,\n normals: ctx.includeNormals ? geometryArrays.normals : null,\n colorsCompressed: colorsCompressed,\n indices: geometryArrays.indices\n });\n\n ctx.stats.numGeometries++;\n ctx.stats.numVertices += geometryArrays.positions ? geometryArrays.positions.length / 3 : 0;\n ctx.stats.numNormals += (ctx.includeNormals && geometryArrays.normals) ? geometryArrays.normals.length / 3 : 0;\n ctx.stats.numTriangles += geometryArrays.indices ? geometryArrays.indices.length / 3 : 0;\n\n ctx.createXKTGeometryIds[geometryHash] = xktGeometryId;\n } else {\n// Geometry reused\n }\n\n const materialIndex = primitiveInfo.material;\n const materialInfo = (materialIndex !== null && materialIndex !== undefined) ? gltf.materials[materialIndex] : null;\n const color = materialInfo ? materialInfo._materialData.color : new Float32Array([1.0, 1.0, 1.0, 1.0]);\n const opacity = materialInfo ? materialInfo._materialData.opacity : 1.0;\n const metallic = materialInfo ? materialInfo._materialData.metallic : 0.0;\n const roughness = materialInfo ? materialInfo._materialData.roughness : 1.0;\n\n const xktMeshId = \"mesh-\" + ctx.nextMeshId++;\n\n xktModel.createMesh({\n meshId: xktMeshId,\n geometryId: xktGeometryId,\n matrix: matrix ? matrix.slice() : math.identityMat4(),\n color: color,\n opacity: opacity,\n metallic: metallic,\n roughness: roughness\n });\n\n deferredMeshIds.push(xktMeshId);\n }\n }\n }\n }\n\n\n if (glTFNode.children) {\n const children = glTFNode.children;\n for (let i = 0, len = children.length; i < len; i++) {\n const childNodeIdx = children[i];\n const childGLTFNode = gltf.nodes[childNodeIdx];\n if (!childGLTFNode) {\n console.warn('Node not found: ' + i);\n continue;\n }\n parseNode(ctx, childGLTFNode, depth + 1, matrix);\n }\n }\n\n // Post-order visit scene node\n\n const nodeName = glTFNode.name;\n if (((nodeName !== undefined && nodeName !== null) || depth === 0) && deferredMeshIds.length > 0) {\n if (nodeName === undefined || nodeName === null) {\n ctx.log(`[parseGLTFJSONIntoXKTModel] Warning: 'name' properties not found on glTF scene nodes - will randomly-generate object IDs in XKT`);\n }\n let xktEntityId = nodeName; // Fall back on generated ID when `name` not found on glTF scene node(s)\n if (xktEntityId === undefined || xktEntityId === null) {\n if (xktModel.entities[xktEntityId]) {\n ctx.error(\"Two or more glTF nodes found with same 'name' attribute: '\" + nodeName + \"'\");\n }\n while (!xktEntityId || xktModel.entities[xktEntityId]) {\n xktEntityId = \"entity-\" + ctx.nextId++;\n }\n }\n if (ctx.metaModelCorrections) { // Merging meshes into XKTObjects that map to metaobjects\n const rootMetaObject = ctx.metaModelCorrections.eachChildRoot[xktEntityId];\n if (rootMetaObject) {\n const rootMetaObjectStats = ctx.metaModelCorrections.eachRootStats[rootMetaObject.id];\n rootMetaObjectStats.countChildren++;\n if (rootMetaObjectStats.countChildren >= rootMetaObjectStats.numChildren) {\n xktModel.createEntity({\n entityId: rootMetaObject.id,\n meshIds: deferredMeshIds\n });\n ctx.stats.numObjects++;\n deferredMeshIds = [];\n }\n } else {\n const metaObject = ctx.metaModelCorrections.metaObjectsMap[xktEntityId];\n if (metaObject) {\n xktModel.createEntity({\n entityId: xktEntityId,\n meshIds: deferredMeshIds\n });\n ctx.stats.numObjects++;\n deferredMeshIds = [];\n }\n }\n } else { // Create an XKTObject from the meshes at each named glTF node, don't care about metaobjects\n xktModel.createEntity({\n entityId: xktEntityId,\n meshIds: deferredMeshIds\n });\n ctx.stats.numObjects++;\n deferredMeshIds = [];\n }\n }\n}\n\nfunction createPrimitiveGeometryHash(primitiveInfo) {\n const attributes = primitiveInfo.attributes;\n if (!attributes) {\n return \"empty\";\n }\n const mode = primitiveInfo.mode;\n const material = primitiveInfo.material;\n const indices = primitiveInfo.indices;\n const positions = primitiveInfo.attributes.POSITION;\n const normals = primitiveInfo.attributes.NORMAL;\n const colors = primitiveInfo.attributes.COLOR_0;\n const uv = primitiveInfo.attributes.TEXCOORD_0;\n return [\n mode,\n // material,\n (indices !== null && indices !== undefined) ? indices : \"-\",\n (positions !== null && positions !== undefined) ? positions : \"-\",\n (normals !== null && normals !== undefined) ? normals : \"-\",\n (colors !== null && colors !== undefined) ? colors : \"-\",\n (uv !== null && uv !== undefined) ? uv : \"-\"\n ].join(\";\");\n}\n\nfunction parsePrimitiveGeometry(ctx, primitiveInfo, geometryArrays) {\n const attributes = primitiveInfo.attributes;\n if (!attributes) {\n return;\n }\n switch (primitiveInfo.mode) {\n case 0: // POINTS\n geometryArrays.primitive = \"points\";\n break;\n case 1: // LINES\n geometryArrays.primitive = \"lines\";\n break;\n case 2: // LINE_LOOP\n // TODO: convert\n geometryArrays.primitive = \"lines\";\n break;\n case 3: // LINE_STRIP\n // TODO: convert\n geometryArrays.primitive = \"lines\";\n break;\n case 4: // TRIANGLES\n geometryArrays.primitive = \"triangles\";\n break;\n case 5: // TRIANGLE_STRIP\n // TODO: convert\n console.log(\"TRIANGLE_STRIP\");\n geometryArrays.primitive = \"triangles\";\n break;\n case 6: // TRIANGLE_FAN\n // TODO: convert\n console.log(\"TRIANGLE_FAN\");\n geometryArrays.primitive = \"triangles\";\n break;\n default:\n geometryArrays.primitive = \"triangles\";\n }\n const accessors = ctx.gltf.accessors;\n const indicesIndex = primitiveInfo.indices;\n if (indicesIndex !== null && indicesIndex !== undefined) {\n const accessorInfo = accessors[indicesIndex];\n geometryArrays.indices = parseAccessorTypedArray(ctx, accessorInfo);\n }\n const positionsIndex = attributes.POSITION;\n if (positionsIndex !== null && positionsIndex !== undefined) {\n const accessorInfo = accessors[positionsIndex];\n geometryArrays.positions = parseAccessorTypedArray(ctx, accessorInfo);\n }\n const normalsIndex = attributes.NORMAL;\n if (normalsIndex !== null && normalsIndex !== undefined) {\n const accessorInfo = accessors[normalsIndex];\n geometryArrays.normals = parseAccessorTypedArray(ctx, accessorInfo);\n }\n const colorsIndex = attributes.COLOR_0;\n if (colorsIndex !== null && colorsIndex !== undefined) {\n const accessorInfo = accessors[colorsIndex];\n geometryArrays.colors = parseAccessorTypedArray(ctx, accessorInfo);\n }\n}\n\nfunction parseAccessorTypedArray(ctx, accessorInfo) {\n const bufferView = ctx.gltf.bufferViews[accessorInfo.bufferView];\n const itemSize = WEBGL_TYPE_SIZES[accessorInfo.type];\n const TypedArray = WEBGL_COMPONENT_TYPES[accessorInfo.componentType];\n const elementBytes = TypedArray.BYTES_PER_ELEMENT; // For VEC3: itemSize is 3, elementBytes is 4, itemBytes is 12.\n const itemBytes = elementBytes * itemSize;\n if (accessorInfo.byteStride && accessorInfo.byteStride !== itemBytes) { // The buffer is not interleaved if the stride is the item size in bytes.\n throw new Error(\"interleaved buffer!\"); // TODO\n } else {\n return new TypedArray(bufferView._buffer, accessorInfo.byteOffset || 0, accessorInfo.count * itemSize);\n }\n}\n\nexport {parseGLTFJSONIntoXKTModel};\n","/**\n * @desc Parses IFC STEP file data into an {@link XKTModel}.\n *\n * This function uses [web-ifc](https://github.com/tomvandig/web-ifc) to parse the IFC, which relies on a\n * WASM file to do the parsing.\n *\n * Depending on how we use this function, we may need to provide it with a path to the directory where that WASM file is stored.\n *\n * This function is tested with web-ifc version 0.0.34.\n *\n * ## Usage\n *\n * In the example below we'll create an {@link XKTModel}, then load an IFC model into it.\n *\n * ````javascript\n * import {XKTModel, parseIFCIntoXKTModel, writeXKTModelToArrayBuffer} from \"xeokit-convert.es.js\";\n *\n * import * as WebIFC from \"web-ifc-api.js\";\n *\n * utils.loadArraybuffer(\"rac_advanced_sample_project.ifc\", async (data) => {\n *\n * const xktModel = new XKTModel();\n *\n * parseIFCIntoXKTModel({\n * WebIFC,\n * data,\n * xktModel,\n * wasmPath: \"../dist/\",\n * autoNormals: true,\n * log: (msg) => { console.log(msg); }\n * }).then(()=>{\n * xktModel.finalize();\n * },\n * (msg) => {\n * console.error(msg);\n * });\n * });\n * ````\n *\n * @param {Object} params Parsing params.\n * @param {Object} params.WebIFC The WebIFC library. We pass this in as an external dependency, in order to give the\n * caller the choice of whether to use the Browser or NodeJS version.\n * @param {ArrayBuffer} [params.data] IFC file data.\n * @param {XKTModel} [params.xktModel] XKTModel to parse into.\n * @param {Boolean} [params.autoNormals=true] When true, the parser will ignore the IFC geometry normals, and the IFC\n * data will rely on the xeokit ````Viewer```` to automatically generate them. This has the limitation that the\n * normals will be face-aligned, and therefore the ````Viewer```` will only be able to render a flat-shaded representation\n * of the IFC model. This is ````true```` by default, because IFC models tend to look acceptable with flat-shading,\n * and we always want to minimize IFC model size wherever possible.\n * @param {String[]} [params.includeTypes] Option to only convert objects of these types.\n * @param {String[]} [params.excludeTypes] Option to never convert objects of these types.\n * @param {String} params.wasmPath Path to ````web-ifc.wasm````, required by this function.\n * @param {Object} [params.stats={}] Collects statistics.\n * @param {function} [params.log] Logging callback.\n * @returns {Promise} Resolves when IFC has been parsed.\n */\nfunction parseIFCIntoXKTModel({\n WebIFC,\n data,\n xktModel,\n autoNormals = true,\n includeTypes,\n excludeTypes,\n wasmPath,\n stats = {},\n log\n }) {\n\n if (log) {\n log(\"Using parser: parseIFCIntoXKTModel\");\n }\n\n return new Promise(function (resolve, reject) {\n\n if (!data) {\n reject(\"Argument expected: data\");\n return;\n }\n\n if (!xktModel) {\n reject(\"Argument expected: xktModel\");\n return;\n }\n\n if (!wasmPath) {\n reject(\"Argument expected: wasmPath\");\n return;\n }\n\n const ifcAPI = new WebIFC.IfcAPI();\n\n if (wasmPath) {\n ifcAPI.SetWasmPath(wasmPath);\n }\n\n ifcAPI.Init().then(() => {\n\n const dataArray = new Uint8Array(data);\n\n const modelID = ifcAPI.OpenModel(dataArray);\n\n stats.sourceFormat = \"IFC\";\n stats.schemaVersion = \"\";\n stats.title = \"\";\n stats.author = \"\";\n stats.created = \"\";\n stats.numMetaObjects = 0;\n stats.numPropertySets = 0;\n stats.numObjects = 0;\n stats.numGeometries = 0;\n stats.numTriangles = 0;\n stats.numVertices = 0;\n\n const ctx = {\n WebIFC,\n modelID,\n ifcAPI,\n xktModel,\n autoNormals,\n log: (log || function (msg) {\n }),\n nextId: 0,\n stats\n };\n\n if (includeTypes) {\n ctx.includeTypes = {};\n for (let i = 0, len = includeTypes.length; i < len; i++) {\n ctx.includeTypes[includeTypes[i]] = true;\n }\n }\n\n if (excludeTypes) {\n ctx.excludeTypes = {};\n for (let i = 0, len = excludeTypes.length; i < len; i++) {\n ctx.excludeTypes[excludeTypes[i]] = true;\n }\n }\n\n const lines = ctx.ifcAPI.GetLineIDsWithType(modelID, WebIFC.IFCPROJECT);\n const ifcProjectId = lines.get(0);\n const ifcProject = ctx.ifcAPI.GetLine(modelID, ifcProjectId);\n\n ctx.xktModel.schema = \"\";\n ctx.xktModel.modelId = \"\" + modelID;\n ctx.xktModel.projectId = \"\" + ifcProjectId;\n\n parseMetadata(ctx);\n parseGeometry(ctx);\n parsePropertySets(ctx);\n\n resolve();\n\n }).catch((e) => {\n\n reject(e);\n })\n });\n}\n\nfunction parsePropertySets(ctx) {\n\n const lines = ctx.ifcAPI.GetLineIDsWithType(ctx.modelID, ctx.WebIFC.IFCRELDEFINESBYPROPERTIES);\n\n for (let i = 0; i < lines.size(); i++) {\n\n let relID = lines.get(i);\n\n let rel = ctx.ifcAPI.GetLine(ctx.modelID, relID, true);\n\n if (rel) {\n\n const relatingPropertyDefinition = rel.RelatingPropertyDefinition;\n if (!relatingPropertyDefinition) {\n continue;\n }\n\n const propertySetId = relatingPropertyDefinition.GlobalId.value;\n\n const relatedObjects = rel.RelatedObjects;\n if (relatedObjects) {\n for (let i = 0, len = relatedObjects.length; i < len; i++) {\n const relatedObject = relatedObjects[i];\n const metaObjectId = relatedObject.GlobalId.value;\n const metaObject = ctx.xktModel.metaObjects[metaObjectId];\n if (metaObject) {\n if (!metaObject.propertySetIds) {\n metaObject.propertySetIds = [];\n }\n metaObject.propertySetIds.push(propertySetId);\n }\n }\n }\n\n const props = relatingPropertyDefinition.HasProperties;\n if (props && props.length > 0) {\n const propertySetType = \"Default\";\n const propertySetName = relatingPropertyDefinition.Name.value;\n const properties = [];\n for (let i = 0, len = props.length; i < len; i++) {\n const prop = props[i];\n const name = prop.Name;\n const nominalValue = prop.NominalValue;\n if (name && nominalValue) {\n const property = {\n name: name.value,\n type: nominalValue.type,\n value: nominalValue.value,\n valueType: nominalValue.valueType\n };\n if (prop.Description) {\n property.description = prop.Description.value;\n } else if (nominalValue.description) {\n property.description = nominalValue.description;\n }\n properties.push(property);\n }\n }\n ctx.xktModel.createPropertySet({propertySetId, propertySetType, propertySetName, properties});\n ctx.stats.numPropertySets++;\n }\n }\n }\n}\n\nfunction parseMetadata(ctx) {\n\n const lines = ctx.ifcAPI.GetLineIDsWithType(ctx.modelID, ctx.WebIFC.IFCPROJECT);\n const ifcProjectId = lines.get(0);\n const ifcProject = ctx.ifcAPI.GetLine(ctx.modelID, ifcProjectId);\n\n parseSpatialChildren(ctx, ifcProject);\n}\n\nfunction parseSpatialChildren(ctx, ifcElement, parentMetaObjectId) {\n\n const metaObjectType = ifcElement.__proto__.constructor.name;\n\n if (ctx.includeTypes && (!ctx.includeTypes[metaObjectType])) {\n return;\n }\n\n if (ctx.excludeTypes && ctx.excludeTypes[metaObjectType]) {\n return;\n }\n\n createMetaObject(ctx, ifcElement, parentMetaObjectId);\n\n const metaObjectId = ifcElement.GlobalId.value;\n\n parseRelatedItemsOfType(\n ctx,\n ifcElement.expressID,\n 'RelatingObject',\n 'RelatedObjects',\n ctx.WebIFC.IFCRELAGGREGATES,\n metaObjectId);\n\n parseRelatedItemsOfType(\n ctx,\n ifcElement.expressID,\n 'RelatingStructure',\n 'RelatedElements',\n ctx.WebIFC.IFCRELCONTAINEDINSPATIALSTRUCTURE,\n metaObjectId);\n}\n\nfunction createMetaObject(ctx, ifcElement, parentMetaObjectId) {\n\n const metaObjectId = ifcElement.GlobalId.value;\n const propertySetIds = null;\n const metaObjectType = ifcElement.__proto__.constructor.name;\n const metaObjectName = (ifcElement.Name && ifcElement.Name.value !== \"\") ? ifcElement.Name.value : metaObjectType;\n\n ctx.xktModel.createMetaObject({metaObjectId, propertySetIds, metaObjectType, metaObjectName, parentMetaObjectId});\n ctx.stats.numMetaObjects++;\n}\n\nfunction parseRelatedItemsOfType(ctx, id, relation, related, type, parentMetaObjectId) {\n\n const lines = ctx.ifcAPI.GetLineIDsWithType(ctx.modelID, type);\n\n for (let i = 0; i < lines.size(); i++) {\n\n const relID = lines.get(i);\n const rel = ctx.ifcAPI.GetLine(ctx.modelID, relID);\n const relatedItems = rel[relation];\n\n let foundElement = false;\n\n if (Array.isArray(relatedItems)) {\n const values = relatedItems.map((item) => item.value);\n foundElement = values.includes(id);\n\n } else {\n foundElement = (relatedItems.value === id);\n }\n\n if (foundElement) {\n\n const element = rel[related];\n\n if (!Array.isArray(element)) {\n\n const ifcElement = ctx.ifcAPI.GetLine(ctx.modelID, element.value);\n\n parseSpatialChildren(ctx, ifcElement, parentMetaObjectId);\n\n } else {\n\n element.forEach((element2) => {\n\n const ifcElement = ctx.ifcAPI.GetLine(ctx.modelID, element2.value);\n\n parseSpatialChildren(ctx, ifcElement, parentMetaObjectId);\n });\n }\n }\n }\n}\n\nfunction parseGeometry(ctx) {\n\n // Parses the geometry and materials in the IFC, creates\n // XKTEntity, XKTMesh and XKTGeometry components within the XKTModel.\n\n const flatMeshes = ctx.ifcAPI.LoadAllGeometry(ctx.modelID);\n\n for (let i = 0, len = flatMeshes.size(); i < len; i++) {\n const flatMesh = flatMeshes.get(i);\n createObject(ctx, flatMesh);\n }\n\n // LoadAllGeometry does not return IFCSpace meshes\n // here is a workaround\n\n const lines = ctx.ifcAPI.GetLineIDsWithType(ctx.modelID, ctx.WebIFC.IFCSPACE);\n for (let j = 0, len = lines.size(); j < len; j++) {\n const ifcSpaceId = lines.get(j);\n const flatMesh = ctx.ifcAPI.GetFlatMesh(ctx.modelID, ifcSpaceId);\n createObject(ctx, flatMesh);\n }\n}\n\nfunction createObject(ctx, flatMesh) {\n\n const flatMeshExpressID = flatMesh.expressID;\n const placedGeometries = flatMesh.geometries;\n\n const meshIds = [];\n\n const properties = ctx.ifcAPI.GetLine(ctx.modelID, flatMeshExpressID);\n const entityId = properties.GlobalId.value;\n\n const metaObjectId = entityId;\n const metaObject = ctx.xktModel.metaObjects[metaObjectId];\n\n if (ctx.includeTypes && (!metaObject || (!ctx.includeTypes[metaObject.metaObjectType]))) {\n return;\n }\n\n if (ctx.excludeTypes && (!metaObject || ctx.excludeTypes[metaObject.metaObjectType])) {\n console.log(\"excluding: \" + metaObjectId)\n return;\n }\n\n for (let j = 0, lenj = placedGeometries.size(); j < lenj; j++) {\n\n const placedGeometry = placedGeometries.get(j);\n const geometryId = \"\" + placedGeometry.geometryExpressID;\n\n if (!ctx.xktModel.geometries[geometryId]) {\n\n const geometry = ctx.ifcAPI.GetGeometry(ctx.modelID, placedGeometry.geometryExpressID);\n const vertexData = ctx.ifcAPI.GetVertexArray(geometry.GetVertexData(), geometry.GetVertexDataSize());\n const indices = ctx.ifcAPI.GetIndexArray(geometry.GetIndexData(), geometry.GetIndexDataSize());\n\n // De-interleave vertex arrays\n\n const positions = [];\n const normals = [];\n\n for (let k = 0, lenk = vertexData.length / 6; k < lenk; k++) {\n positions.push(vertexData[k * 6 + 0]);\n positions.push(vertexData[k * 6 + 1]);\n positions.push(vertexData[k * 6 + 2]);\n }\n\n if (!ctx.autoNormals) {\n for (let k = 0, lenk = vertexData.length / 6; k < lenk; k++) {\n normals.push(vertexData[k * 6 + 3]);\n normals.push(vertexData[k * 6 + 4]);\n normals.push(vertexData[k * 6 + 5]);\n }\n }\n\n ctx.xktModel.createGeometry({\n geometryId: geometryId,\n primitiveType: \"triangles\",\n positions: positions,\n normals: ctx.autoNormals ? null : normals,\n indices: indices\n });\n\n ctx.stats.numGeometries++;\n ctx.stats.numVertices += (positions.length / 3);\n ctx.stats.numTriangles += (indices.length / 3);\n }\n\n const meshId = (\"mesh\" + ctx.nextId++);\n\n ctx.xktModel.createMesh({\n meshId: meshId,\n geometryId: geometryId,\n matrix: placedGeometry.flatTransformation,\n color: [placedGeometry.color.x, placedGeometry.color.y, placedGeometry.color.z],\n opacity: placedGeometry.color.w\n });\n\n meshIds.push(meshId);\n }\n\n if (meshIds.length > 0) {\n ctx.xktModel.createEntity({\n entityId: entityId,\n meshIds: meshIds\n });\n ctx.stats.numObjects++;\n }\n}\n\nexport {parseIFCIntoXKTModel};\n","import {parse} from '@loaders.gl/core';\nimport {LASLoader} from '@loaders.gl/las';\n\nimport {math} from \"../lib/math.js\";\n\nconst MAX_VERTICES = 500000; // TODO: Rough estimate\n\n/**\n * @desc Parses LAS and LAZ point cloud data into an {@link XKTModel}.\n *\n * This parser handles both the LASER file format (LAS) and its compressed version (LAZ),\n * a public format for the interchange of 3-dimensional point cloud data data, developed\n * for LIDAR mapping purposes.\n *\n * ## Usage\n *\n * In the example below we'll create an {@link XKTModel}, then load an LAZ point cloud model into it.\n *\n * ````javascript\n * utils.loadArraybuffer(\"./models/laz/autzen.laz\", async (data) => {\n *\n * const xktModel = new XKTModel();\n *\n * await parseLASIntoXKTModel({\n * data,\n * xktModel,\n * rotateX: true,\n * log: (msg) => { console.log(msg); }\n * }).then(()=>{\n * xktModel.finalize();\n * },\n * (msg) => {\n * console.error(msg);\n * });\n * });\n * ````\n *\n * @param {Object} params Parsing params.\n * @param {ArrayBuffer} params.data LAS/LAZ file data.\n * @param {XKTModel} params.xktModel XKTModel to parse into.\n * @param {boolean} [params.center=false] Set true to center the LAS point positions to [0,0,0]. This is applied before the transformation matrix, if specified.\n * @param {Boolean} [params.transform] 4x4 transformation matrix to transform point positions. Use this to rotate, translate and scale them if neccessary.\n * @param {Number|String} [params.colorDepth=8] Whether colors encoded using 8 or 16 bits. Can be set to 'auto'. LAS specification recommends 16 bits.\n * @param {Boolean} [params.fp64=false] Configures if LASLoaderPlugin assumes that LAS positions are stored in 64-bit floats instead of 32-bit.\n * @param {Number} [params.skip=1] Read one from every n points.\n * @param {Object} [params.stats] Collects statistics.\n * @param {function} [params.log] Logging callback.\n * @returns {Promise} Resolves when LAS has been parsed.\n */\nfunction parseLASIntoXKTModel({\n data,\n xktModel,\n center = false,\n transform = null,\n colorDepth = \"auto\",\n fp64 = false,\n skip = 1,\n stats,\n log = () => {\n }\n }) {\n\n if (log) {\n log(\"Using parser: parseLASIntoXKTModel\");\n }\n\n return new Promise(function (resolve, reject) {\n\n if (!data) {\n reject(\"Argument expected: data\");\n return;\n }\n\n if (!xktModel) {\n reject(\"Argument expected: xktModel\");\n return;\n }\n\n log(\"Converting LAZ/LAS\");\n\n log(`center: ${center}`);\n if (transform) {\n log(`transform: [${transform}]`);\n }\n log(`colorDepth: ${colorDepth}`);\n log(`fp64: ${fp64}`);\n log(`skip: ${skip}`);\n\n parse(data, LASLoader, {\n las: {\n colorDepth,\n fp64\n }\n }).then((parsedData) => {\n\n const attributes = parsedData.attributes;\n\n const loaderData = parsedData.loaderData;\n const pointsFormatId = loaderData.pointsFormatId !== undefined ? loaderData.pointsFormatId : -1;\n\n if (!attributes.POSITION) {\n log(\"No positions found in file (expected for all LAS point formats)\");\n return;\n }\n\n let readAttributes = {};\n\n switch (pointsFormatId) {\n case 0:\n if (!attributes.intensity) {\n log(\"No intensities found in file (expected for LAS point format 0)\");\n return;\n }\n\n readAttributes = readIntensities(attributes.POSITION, attributes.intensity);\n break;\n case 1:\n if (!attributes.intensity) {\n log(\"No intensities found in file (expected for LAS point format 1)\");\n return;\n }\n readAttributes = readIntensities(attributes.POSITION, attributes.intensity);\n break;\n case 2:\n if (!attributes.intensity) {\n log(\"No intensities found in file (expected for LAS point format 2)\");\n return;\n }\n\n readAttributes = readColorsAndIntensities(attributes.POSITION, attributes.COLOR_0, attributes.intensity);\n break;\n case 3:\n if (!attributes.intensity) {\n log(\"No intensities found in file (expected for LAS point format 3)\");\n return;\n }\n readAttributes = readColorsAndIntensities(attributes.POSITION, attributes.COLOR_0, attributes.intensity);\n break;\n }\n\n const pointsChunks = chunkArray(readPositions(readAttributes.positions), MAX_VERTICES * 3);\n const colorsChunks = chunkArray(readAttributes.colors, MAX_VERTICES * 4);\n\n const meshIds = [];\n\n for (let j = 0, lenj = pointsChunks.length; j < lenj; j++) {\n\n const geometryId = `geometry-${j}`;\n const meshId = `mesh-${j}`;\n\n meshIds.push(meshId);\n\n xktModel.createGeometry({\n geometryId: geometryId,\n primitiveType: \"points\",\n positions: pointsChunks[j],\n colorsCompressed: colorsChunks[j]\n });\n\n xktModel.createMesh({\n meshId,\n geometryId\n });\n }\n\n const entityId = math.createUUID();\n\n xktModel.createEntity({\n entityId,\n meshIds\n });\n\n const rootMetaObjectId = math.createUUID();\n\n xktModel.createMetaObject({\n metaObjectId: rootMetaObjectId,\n metaObjectType: \"Model\",\n metaObjectName: \"Model\"\n });\n\n xktModel.createMetaObject({\n metaObjectId: entityId,\n metaObjectType: \"PointCloud\",\n metaObjectName: \"PointCloud (LAZ)\",\n parentMetaObjectId: rootMetaObjectId\n });\n\n if (stats) {\n stats.sourceFormat = \"LAS\";\n stats.schemaVersion = \"\";\n stats.title = \"\";\n stats.author = \"\";\n stats.created = \"\";\n stats.numMetaObjects = 2;\n stats.numPropertySets = 0;\n stats.numObjects = 1;\n stats.numGeometries = 1;\n stats.numVertices = readAttributes.positions.length / 3;\n }\n\n resolve();\n\n }, (errMsg) => {\n reject(errMsg);\n });\n });\n\n function readPositions(positionsValue) {\n if (positionsValue) {\n if (center) {\n const centerPos = math.vec3();\n const numPoints = positionsValue.length;\n for (let i = 0, len = positionsValue.length; i < len; i += 3) {\n centerPos[0] += positionsValue[i + 0];\n centerPos[1] += positionsValue[i + 1];\n centerPos[2] += positionsValue[i + 2];\n }\n centerPos[0] /= numPoints;\n centerPos[1] /= numPoints;\n centerPos[2] /= numPoints;\n for (let i = 0, len = positionsValue.length; i < len; i += 3) {\n positionsValue[i + 0] -= centerPos[0];\n positionsValue[i + 1] -= centerPos[1];\n positionsValue[i + 2] -= centerPos[2];\n }\n }\n if (transform) {\n const mat = math.mat4(transform);\n const pos = math.vec3();\n for (let i = 0, len = positionsValue.length; i < len; i += 3) {\n pos[0] = positionsValue[i + 0];\n pos[1] = positionsValue[i + 1];\n pos[2] = positionsValue[i + 2];\n math.transformPoint3(mat, pos, pos);\n positionsValue[i + 0] = pos[0];\n positionsValue[i + 1] = pos[1];\n positionsValue[i + 2] = pos[2];\n }\n }\n }\n return positionsValue;\n }\n\n function readColorsAndIntensities(attributesPosition, attributesColor, attributesIntensity) {\n const positionsValue = attributesPosition.value;\n const colors = attributesColor.value;\n const colorSize = attributesColor.size;\n const intensities = attributesIntensity.value;\n const colorsCompressedSize = intensities.length * 4;\n const positions = [];\n const colorsCompressed = new Uint8Array(colorsCompressedSize / skip);\n let count = skip;\n for (let i = 0, j = 0, k = 0, l = 0, m = 0, n=0,len = intensities.length; i < len; i++, k += colorSize, j += 4, l += 3) {\n if (count <= 0) {\n colorsCompressed[m++] = colors[k + 0];\n colorsCompressed[m++] = colors[k + 1];\n colorsCompressed[m++] = colors[k + 2];\n colorsCompressed[m++] = Math.round((intensities[i] / 65536) * 255);\n positions[n++] = positionsValue[l + 0];\n positions[n++] = positionsValue[l + 1];\n positions[n++] = positionsValue[l + 2];\n count = skip;\n } else {\n count--;\n }\n }\n return {\n positions,\n colors: colorsCompressed\n };\n }\n\n function readIntensities(attributesPosition, attributesIntensity) {\n const positionsValue = attributesPosition.value;\n const intensities = attributesIntensity.value;\n const colorsCompressedSize = intensities.length * 4;\n const positions = [];\n const colorsCompressed = new Uint8Array(colorsCompressedSize / skip);\n let count = skip;\n for (let i = 0, j = 0, k = 0, l = 0, m = 0, n = 0, len = intensities.length; i < len; i++, k += 3, j += 4, l += 3) {\n if (count <= 0) {\n colorsCompressed[m++] = 0;\n colorsCompressed[m++] = 0;\n colorsCompressed[m++] = 0;\n colorsCompressed[m++] = Math.round((intensities[i] / 65536) * 255);\n positions[n++] = positionsValue[l + 0];\n positions[n++] = positionsValue[l + 1];\n positions[n++] = positionsValue[l + 2];\n count = skip;\n } else {\n count--;\n }\n }\n return {\n positions,\n colors: colorsCompressed\n };\n }\n\n function chunkArray(array, chunkSize) {\n if (chunkSize >= array.length) {\n return [array]; // One chunk\n }\n let result = [];\n for (let i = 0; i < array.length; i += chunkSize) {\n result.push(array.slice(i, i + chunkSize));\n }\n return result;\n }\n\n}\n\nexport {parseLASIntoXKTModel};","/**\n * @desc Parses JSON metamodel into an {@link XKTModel}.\n *\n * @param {Object} params Parsing parameters.\n * @param {JSON} params.metaModelData Metamodel data.\n * @param {String[]} [params.excludeTypes] Types to exclude from parsing.\n * @param {String[]} [params.includeTypes] Types to include in parsing.\n * @param {XKTModel} params.xktModel XKTModel to parse into.\n * @param {function} [params.log] Logging callback.\n @returns {Promise} Resolves when JSON has been parsed.\n */\nfunction parseMetaModelIntoXKTModel({metaModelData, xktModel, includeTypes, excludeTypes, log}) {\n\n if (log) {\n log(\"Using parser: parseMetaModelIntoXKTModel\");\n }\n\n return new Promise(function (resolve, reject) {\n\n const metaObjects = metaModelData.metaObjects || [];\n const propertySets = metaModelData.propertySets || [];\n\n xktModel.modelId = metaModelData.revisionId || \"\"; // HACK\n xktModel.projectId = metaModelData.projectId || \"\";\n xktModel.revisionId = metaModelData.revisionId || \"\";\n xktModel.author = metaModelData.author || \"\";\n xktModel.createdAt = metaModelData.createdAt || \"\";\n xktModel.creatingApplication = metaModelData.creatingApplication || \"\";\n xktModel.schema = metaModelData.schema || \"\";\n\n for (let i = 0, len = propertySets.length; i < len; i++) {\n\n const propertySet = propertySets[i];\n\n xktModel.createPropertySet({\n propertySetId: propertySet.id,\n propertySetName: propertySet.name,\n propertySetType: propertySet.type,\n properties: propertySet.properties\n });\n }\n\n let includeTypesMap;\n if (includeTypes) {\n includeTypesMap = {};\n for (let i = 0, len = includeTypes.length; i < len; i++) {\n includeTypesMap[includeTypes[i]] = true;\n }\n }\n\n let excludeTypesMap;\n if (excludeTypes) {\n excludeTypesMap = {};\n for (let i = 0, len = excludeTypes.length; i < len; i++) {\n excludeTypesMap[excludeTypes[i]] = true;\n }\n }\n\n const metaObjectsMap = {};\n\n for (let i = 0, len = metaObjects.length; i < len; i++) {\n const newObject = metaObjects[i];\n metaObjectsMap[newObject.id] = newObject;\n }\n\n let countMetaObjects = 0;\n\n for (let i = 0, len = metaObjects.length; i < len; i++) {\n\n const metaObject = metaObjects[i];\n const type = metaObject.type;\n\n if (excludeTypesMap && excludeTypesMap[type]) {\n continue;\n }\n\n if (includeTypesMap && !includeTypesMap[type]) {\n continue;\n }\n\n if (metaObject.parent !== undefined && metaObject.parent !== null) {\n const metaObjectParent = metaObjectsMap[metaObject.parent];\n if (metaObject.type === metaObjectParent.type) { // Don't create redundant sub-objects\n continue\n }\n }\n\n const propertySetIds = [];\n if (metaObject.propertySetIds) {\n for (let j = 0, lenj = metaObject.propertySetIds.length; j < lenj; j++) {\n const propertySetId = metaObject.propertySetIds[j];\n if (propertySetId !== undefined && propertySetId !== null && propertySetId !== \"\") {\n propertySetIds.push(propertySetId);\n }\n }\n }\n if (metaObject.propertySetId !== undefined && metaObject.propertySetId !== null && metaObject.propertySetId !== \"\") {\n propertySetIds.push(metaObject.propertySetId);\n }\n\n xktModel.createMetaObject({\n metaObjectId: metaObject.id,\n metaObjectType: metaObject.type,\n metaObjectName: metaObject.name,\n parentMetaObjectId: metaObject.parent,\n propertySetIds: propertySetIds.length > 0 ? propertySetIds : null\n });\n\n countMetaObjects++;\n }\n\n if (log) {\n log(\"Converted meta objects: \" + countMetaObjects);\n }\n\n resolve();\n });\n}\n\nexport {parseMetaModelIntoXKTModel};\n","/**\n * @desc Parses PCD point cloud data into an {@link XKTModel}.\n *\n * ## Usage\n *\n * In the example below we'll create an {@link XKTModel}, then load an LAZ point cloud model into it.\n *\n * ````javascript\n * utils.loadArraybuffer(\"\"./models/pcd/ism_test_cat.pcd\"\", async (data) => {\n *\n * const xktModel = new XKTModel();\n *\n * await parsePCDIntoXKTModel({\n * data,\n * xktModel,\n * log: (msg) => { console.log(msg); }\n * }).then(()=>{\n * xktModel.finalize();\n * },\n * (msg) => {\n * console.error(msg);\n * });\n * });\n * ````\n *\n * @param {Object} params Parsing params.\n * @param {ArrayBuffer} params.data PCD file data.\n * @param {Boolean} [params.littleEndian=true] Whether PCD binary data is Little-Endian or Big-Endian.\n * @param {XKTModel} params.xktModel XKTModel to parse into.\n * @param {Object} [params.stats] Collects statistics.\n * @param {function} [params.log] Logging callback.\n @returns {Promise} Resolves when PCD has been parsed.\n */\nfunction parsePCDIntoXKTModel({data, xktModel, littleEndian = true, stats, log}) {\n\n if (log) {\n log(\"Using parser: parsePCDIntoXKTModel\");\n }\n\n return new Promise(function(resolve, reject) {\n\n const textData = decodeText(new Uint8Array(data));\n\n const header = parseHeader(textData);\n\n const positions = [];\n const normals = [];\n const colors = [];\n\n if (header.data === 'ascii') {\n\n const offset = header.offset;\n const data = textData.substr(header.headerLen);\n const lines = data.split('\\n');\n\n for (let i = 0, l = lines.length; i < l; i++) {\n\n if (lines[i] === '') {\n continue;\n }\n\n const line = lines[i].split(' ');\n\n if (offset.x !== undefined) {\n positions.push(parseFloat(line[offset.x]));\n positions.push(parseFloat(line[offset.y]));\n positions.push(parseFloat(line[offset.z]));\n }\n\n if (offset.rgb !== undefined) {\n const rgb = parseFloat(line[offset.rgb]);\n const r = (rgb >> 16) & 0x0000ff;\n const g = (rgb >> 8) & 0x0000ff;\n const b = (rgb >> 0) & 0x0000ff;\n colors.push(r, g, b, 255);\n } else {\n colors.push(255);\n colors.push(255);\n colors.push(255);\n }\n }\n }\n\n if (header.data === 'binary_compressed') {\n\n const sizes = new Uint32Array(data.slice(header.headerLen, header.headerLen + 8));\n const compressedSize = sizes[0];\n const decompressedSize = sizes[1];\n const decompressed = decompressLZF(new Uint8Array(data, header.headerLen + 8, compressedSize), decompressedSize);\n const dataview = new DataView(decompressed.buffer);\n const offset = header.offset;\n\n for (let i = 0; i < header.points; i++) {\n\n if (offset.x !== undefined) {\n positions.push(dataview.getFloat32((header.points * offset.x) + header.size[0] * i, littleEndian));\n positions.push(dataview.getFloat32((header.points * offset.y) + header.size[1] * i, littleEndian));\n positions.push(dataview.getFloat32((header.points * offset.z) + header.size[2] * i, littleEndian));\n }\n\n if (offset.rgb !== undefined) {\n colors.push(dataview.getUint8((header.points * offset.rgb) + header.size[3] * i + 0));\n colors.push(dataview.getUint8((header.points * offset.rgb) + header.size[3] * i + 1));\n colors.push(dataview.getUint8((header.points * offset.rgb) + header.size[3] * i + 2));\n // colors.push(255);\n } else {\n colors.push(1);\n colors.push(1);\n colors.push(1);\n }\n }\n }\n\n if (header.data === 'binary') {\n\n const dataview = new DataView(data, header.headerLen);\n const offset = header.offset;\n\n for (let i = 0, row = 0; i < header.points; i++, row += header.rowSize) {\n if (offset.x !== undefined) {\n positions.push(dataview.getFloat32(row + offset.x, littleEndian));\n positions.push(dataview.getFloat32(row + offset.y, littleEndian));\n positions.push(dataview.getFloat32(row + offset.z, littleEndian));\n }\n\n if (offset.rgb !== undefined) {\n colors.push(dataview.getUint8(row + offset.rgb + 2));\n colors.push(dataview.getUint8(row + offset.rgb + 1));\n colors.push(dataview.getUint8(row + offset.rgb + 0));\n } else {\n colors.push(255);\n colors.push(255);\n colors.push(255);\n }\n }\n }\n\n xktModel.createGeometry({\n geometryId: \"pointsGeometry\",\n primitiveType: \"points\",\n positions: positions,\n colors: colors && colors.length > 0 ? colors : null\n });\n\n xktModel.createMesh({\n meshId: \"pointsMesh\",\n geometryId: \"pointsGeometry\"\n });\n\n xktModel.createEntity({\n entityId: \"geometries\",\n meshIds: [\"pointsMesh\"]\n });\n\n if (log) {\n log(\"Converted drawable objects: 1\");\n log(\"Converted geometries: 1\");\n log(\"Converted vertices: \" + positions.length / 3);\n }\n\n if (stats) {\n stats.sourceFormat = \"PCD\";\n stats.schemaVersion = \"\";\n stats.title = \"\";\n stats.author = \"\";\n stats.created = \"\";\n stats.numObjects = 1;\n stats.numGeometries = 1;\n stats.numVertices = positions.length / 3;\n }\n\n resolve();\n });\n}\n\nfunction parseHeader(data) {\n const header = {};\n const result1 = data.search(/[\\r\\n]DATA\\s(\\S*)\\s/i);\n const result2 = /[\\r\\n]DATA\\s(\\S*)\\s/i.exec(data.substr(result1 - 1));\n header.data = result2[1];\n header.headerLen = result2[0].length + result1;\n header.str = data.substr(0, header.headerLen);\n header.str = header.str.replace(/\\#.*/gi, ''); // Strip comments\n header.version = /VERSION (.*)/i.exec(header.str); // Parse\n header.fields = /FIELDS (.*)/i.exec(header.str);\n header.size = /SIZE (.*)/i.exec(header.str);\n header.type = /TYPE (.*)/i.exec(header.str);\n header.count = /COUNT (.*)/i.exec(header.str);\n header.width = /WIDTH (.*)/i.exec(header.str);\n header.height = /HEIGHT (.*)/i.exec(header.str);\n header.viewpoint = /VIEWPOINT (.*)/i.exec(header.str);\n header.points = /POINTS (.*)/i.exec(header.str);\n if (header.version !== null) {\n header.version = parseFloat(header.version[1]);\n }\n if (header.fields !== null) {\n header.fields = header.fields[1].split(' ');\n }\n if (header.type !== null) {\n header.type = header.type[1].split(' ');\n }\n if (header.width !== null) {\n header.width = parseInt(header.width[1]);\n }\n if (header.height !== null) {\n header.height = parseInt(header.height[1]);\n }\n if (header.viewpoint !== null) {\n header.viewpoint = header.viewpoint[1];\n }\n if (header.points !== null) {\n header.points = parseInt(header.points[1], 10);\n }\n if (header.points === null) {\n header.points = header.width * header.height;\n }\n if (header.size !== null) {\n header.size = header.size[1].split(' ').map(function (x) {\n return parseInt(x, 10);\n });\n }\n if (header.count !== null) {\n header.count = header.count[1].split(' ').map(function (x) {\n return parseInt(x, 10);\n });\n } else {\n header.count = [];\n for (let i = 0, l = header.fields.length; i < l; i++) {\n header.count.push(1);\n }\n }\n header.offset = {};\n let sizeSum = 0;\n for (let i = 0, l = header.fields.length; i < l; i++) {\n if (header.data === 'ascii') {\n header.offset[header.fields[i]] = i;\n } else {\n header.offset[header.fields[i]] = sizeSum;\n sizeSum += header.size[i] * header.count[i];\n }\n }\n header.rowSize = sizeSum; // For binary only\n return header;\n}\n\nfunction decodeText(array) {\n if (typeof TextDecoder !== 'undefined') {\n return new TextDecoder().decode(array);\n }\n let s = '';\n for (let i = 0, il = array.length; i < il; i++) {\n s += String.fromCharCode(array[i]);\n }\n try {\n return decodeURIComponent(escape(s));\n } catch (e) {\n return s;\n }\n}\n\nfunction decompressLZF(inData, outLength) { // https://gitlab.com/taketwo/three-pcd-loader/blob/master/decompress-lzf.js\n const inLength = inData.length;\n const outData = new Uint8Array(outLength);\n let inPtr = 0;\n let outPtr = 0;\n let ctrl;\n let len;\n let ref;\n do {\n ctrl = inData[inPtr++];\n if (ctrl < (1 << 5)) {\n ctrl++;\n if (outPtr + ctrl > outLength) throw new Error('Output buffer is not large enough');\n if (inPtr + ctrl > inLength) throw new Error('Invalid compressed data');\n do {\n outData[outPtr++] = inData[inPtr++];\n } while (--ctrl);\n } else {\n len = ctrl >> 5;\n ref = outPtr - ((ctrl & 0x1f) << 8) - 1;\n if (inPtr >= inLength) throw new Error('Invalid compressed data');\n if (len === 7) {\n len += inData[inPtr++];\n if (inPtr >= inLength) throw new Error('Invalid compressed data');\n }\n ref -= inData[inPtr++];\n if (outPtr + len + 2 > outLength) throw new Error('Output buffer is not large enough');\n if (ref < 0) throw new Error('Invalid compressed data');\n if (ref >= outPtr) throw new Error('Invalid compressed data');\n do {\n outData[outPtr++] = outData[ref++];\n } while (--len + 2);\n }\n } while (inPtr < inLength);\n return outData;\n}\n\nexport {parsePCDIntoXKTModel};","import {parse} from '@loaders.gl/core';\nimport {PLYLoader} from '@loaders.gl/ply';\n\n/**\n * @desc Parses PLY file data into an {@link XKTModel}.\n *\n * ## Usage\n *\n * In the example below we'll create an {@link XKTModel}, then load a PLY model into it.\n *\n * ````javascript\n * utils.loadArraybuffer(\"./models/ply/test.ply\", async (data) => {\n *\n * const xktModel = new XKTModel();\n *\n * parsePLYIntoXKTModel({data, xktModel}).then(()=>{\n * xktModel.finalize();\n * },\n * (msg) => {\n * console.error(msg);\n * });\n * });\n * ````\n *\n * @param {Object} params Parsing params.\n * @param {ArrayBuffer} params.data PLY file data.\n * @param {XKTModel} params.xktModel XKTModel to parse into.\n * @param {Object} [params.stats] Collects statistics.\n * @param {function} [params.log] Logging callback.\n @returns {Promise} Resolves when PLY has been parsed.\n */\nasync function parsePLYIntoXKTModel({data, xktModel, stats, log}) {\n\n if (log) {\n log(\"Using parser: parsePLYIntoXKTModel\");\n }\n\n if (!data) {\n throw \"Argument expected: data\";\n }\n\n if (!xktModel) {\n throw \"Argument expected: xktModel\";\n }\n\n let parsedData;\n try {\n parsedData = await parse(data, PLYLoader);\n } catch (e) {\n if (log) {\n log(\"Error: \" + e);\n }\n return;\n }\n\n const attributes = parsedData.attributes;\n const hasColors = !!attributes.COLOR_0;\n\n if (hasColors) {\n const colorsValue = hasColors ? attributes.COLOR_0.value : null;\n const colorsCompressed = [];\n for (let i = 0, len = colorsValue.length; i < len; i += 4) {\n colorsCompressed.push(colorsValue[i]);\n colorsCompressed.push(colorsValue[i + 1]);\n colorsCompressed.push(colorsValue[i + 2]);\n }\n xktModel.createGeometry({\n geometryId: \"plyGeometry\",\n primitiveType: \"triangles\",\n positions: attributes.POSITION.value,\n indices: parsedData.indices ? parsedData.indices.value : [],\n colorsCompressed: colorsCompressed\n });\n } else {\n xktModel.createGeometry({\n geometryId: \"plyGeometry\",\n primitiveType: \"triangles\",\n positions: attributes.POSITION.value,\n indices: parsedData.indices ? parsedData.indices.value : []\n });\n }\n\n xktModel.createMesh({\n meshId: \"plyMesh\",\n geometryId: \"plyGeometry\",\n color: (!hasColors) ? [1, 1, 1] : null\n });\n\n xktModel.createEntity({\n entityId: \"ply\",\n meshIds: [\"plyMesh\"]\n });\n\n if (stats) {\n stats.sourceFormat = \"PLY\";\n stats.schemaVersion = \"\";\n stats.title = \"\";\n stats.author = \"\";\n stats.created = \"\";\n stats.numMetaObjects = 2;\n stats.numPropertySets = 0;\n stats.numObjects = 1;\n stats.numGeometries = 1;\n stats.numVertices = attributes.POSITION.value.length / 3;\n }\n}\n\nexport {parsePLYIntoXKTModel};\n","import {faceToVertexNormals} from \"../lib/faceToVertexNormals.js\";\nimport {math} from \"../lib/math.js\";\n\n/**\n * @desc Parses STL file data into an {@link XKTModel}.\n *\n * * Supports binary and ASCII STL formats.\n * * Option to create a separate {@link XKTEntity} for each group of faces that share the same vertex colors.\n * * Option to smooth face-aligned normals loaded from STL.\n * * Option to reduce XKT file size by ignoring STL normals and relying on xeokit to auto-generate them.\n *\n * ## Usage\n *\n * In the example below we'll create an {@link XKTModel}, then load an STL model into it.\n *\n * ````javascript\n * utils.loadArraybuffer(\"./models/stl/binary/spurGear.stl\", async (data) => {\n *\n * const xktModel = new XKTModel();\n *\n * parseSTLIntoXKTModel({data, xktModel});\n *\n * xktModel.finalize();\n * });\n * ````\n *\n * @param {Object} params Parsing params.\n * @param {ArrayBuffer|String} [params.data] STL file data. Can be binary or string.\n * @param {Boolean} [params.autoNormals=false] When true, the parser will ignore the STL geometry normals, and the STL\n * data will rely on the xeokit ````Viewer```` to automatically generate them. This has the limitation that the\n * normals will be face-aligned, and therefore the ````Viewer```` will only be able to render a flat-shaded representation\n * of the STL.\n * Overrides ````smoothNormals```` when ````true````. This ignores the normals in the STL, and loads no\n * normals from the STL into the {@link XKTModel}, resulting in the XKT file storing no normals for the STL model. The\n * xeokit-sdk will then automatically generate the normals within its shaders. The disadvantages are that auto-normals\n * may slow rendering down a little bit, and that the normals can only be face-aligned (and thus rendered using flat\n * shading). The advantages, however, are a smaller XKT file size, and the ability to apply certain geometry optimizations\n * during parsing, such as removing duplicated STL vertex positions, that are not possible when normals are loaded\n * for the STL vertices.\n * @param {Boolean} [params.smoothNormals=true] When true, automatically converts face-oriented STL normals to vertex normals, for a smooth appearance. Ignored if ````autoNormals```` is ````true````.\n * @param {Number} [params.smoothNormalsAngleThreshold=20] This is the threshold angle between normals of adjacent triangles, below which their shared wireframe edge is not drawn.\n * @param {Boolean} [params.splitMeshes=true] When true, creates a separate {@link XKTEntity} for each group of faces that share the same vertex colors. Only works with binary STL (ie. when ````data```` is an ArrayBuffer).\n * @param {XKTModel} [params.xktModel] XKTModel to parse into.\n * @param {Object} [params.stats] Collects statistics.\n * @param {function} [params.log] Logging callback.\n @returns {Promise} Resolves when STL has been parsed.\n */\nasync function parseSTLIntoXKTModel({\n data,\n splitMeshes,\n autoNormals,\n smoothNormals,\n smoothNormalsAngleThreshold,\n xktModel,\n stats,\n log\n }) {\n\n if (log) {\n log(\"Using parser: parseSTLIntoXKTModel\");\n }\n\n return new Promise(function (resolve, reject) {\n\n if (!data) {\n reject(\"Argument expected: data\");\n return;\n }\n\n if (!xktModel) {\n reject(\"Argument expected: xktModel\");\n return;\n }\n\n const rootMetaObjectId = math.createUUID();\n\n const rootMetaObject = xktModel.createMetaObject({\n metaObjectId: rootMetaObjectId,\n metaObjectType: \"Model\",\n metaObjectName: \"Model\"\n });\n\n const ctx = {\n data,\n splitMeshes,\n autoNormals,\n smoothNormals,\n smoothNormalsAngleThreshold,\n xktModel,\n rootMetaObject,\n nextId: 0,\n log: (log || function (msg) {\n }),\n stats: {\n numObjects: 0,\n numGeometries: 0,\n numTriangles: 0,\n numVertices: 0\n }\n };\n\n const binData = ensureBinary(data);\n\n if (isBinary(binData)) {\n parseBinary(ctx, binData);\n } else {\n parseASCII(ctx, ensureString(data));\n }\n\n if (stats) {\n stats.sourceFormat = \"STL\";\n stats.schemaVersion = \"\";\n stats.title = \"\";\n stats.author = \"\";\n stats.created = \"\";\n stats.numMetaObjects = 2;\n stats.numPropertySets = 0;\n stats.numObjects = 1;\n stats.numGeometries = 1;\n stats.numTriangles = ctx.stats.numTriangles;\n stats.numVertices = ctx.stats.numVertices;\n }\n\n resolve();\n });\n}\n\nfunction isBinary(data) {\n const reader = new DataView(data);\n const numFaces = reader.getUint32(80, true);\n const faceSize = (32 / 8 * 3) + ((32 / 8 * 3) * 3) + (16 / 8);\n const numExpectedBytes = 80 + (32 / 8) + (numFaces * faceSize);\n if (numExpectedBytes === reader.byteLength) {\n return true;\n }\n const solid = [115, 111, 108, 105, 100];\n for (let i = 0; i < 5; i++) {\n if (solid[i] !== reader.getUint8(i, false)) {\n return true;\n }\n }\n return false;\n}\n\nfunction parseBinary(ctx, data) {\n const reader = new DataView(data);\n const faces = reader.getUint32(80, true);\n let r;\n let g;\n let b;\n let hasColors = false;\n let colors;\n let defaultR;\n let defaultG;\n let defaultB;\n let lastR = null;\n let lastG = null;\n let lastB = null;\n let newMesh = false;\n let alpha;\n for (let index = 0; index < 80 - 10; index++) {\n if ((reader.getUint32(index, false) === 0x434F4C4F /*COLO*/) &&\n (reader.getUint8(index + 4) === 0x52 /*'R'*/) &&\n (reader.getUint8(index + 5) === 0x3D /*'='*/)) {\n hasColors = true;\n colors = [];\n defaultR = reader.getUint8(index + 6) / 255;\n defaultG = reader.getUint8(index + 7) / 255;\n defaultB = reader.getUint8(index + 8) / 255;\n alpha = reader.getUint8(index + 9) / 255;\n }\n }\n let dataOffset = 84;\n let faceLength = 12 * 4 + 2;\n let positions = [];\n let normals = [];\n let splitMeshes = ctx.splitMeshes;\n for (let face = 0; face < faces; face++) {\n let start = dataOffset + face * faceLength;\n let normalX = reader.getFloat32(start, true);\n let normalY = reader.getFloat32(start + 4, true);\n let normalZ = reader.getFloat32(start + 8, true);\n if (hasColors) {\n let packedColor = reader.getUint16(start + 48, true);\n if ((packedColor & 0x8000) === 0) {\n r = (packedColor & 0x1F) / 31;\n g = ((packedColor >> 5) & 0x1F) / 31;\n b = ((packedColor >> 10) & 0x1F) / 31;\n } else {\n r = defaultR;\n g = defaultG;\n b = defaultB;\n }\n if (splitMeshes && r !== lastR || g !== lastG || b !== lastB) {\n if (lastR !== null) {\n newMesh = true;\n }\n lastR = r;\n lastG = g;\n lastB = b;\n }\n }\n for (let i = 1; i <= 3; i++) {\n let vertexstart = start + i * 12;\n positions.push(reader.getFloat32(vertexstart, true));\n positions.push(reader.getFloat32(vertexstart + 4, true));\n positions.push(reader.getFloat32(vertexstart + 8, true));\n if (!ctx.autoNormals) {\n normals.push(normalX, normalY, normalZ);\n }\n if (hasColors) {\n colors.push(r, g, b, 1); // TODO: handle alpha\n }\n }\n if (splitMeshes && newMesh) {\n addMesh(ctx, positions, normals, colors);\n positions = [];\n normals = [];\n colors = colors ? [] : null;\n newMesh = false;\n }\n }\n if (positions.length > 0) {\n addMesh(ctx, positions, normals, colors);\n }\n}\n\nfunction parseASCII(ctx, data) {\n const faceRegex = /facet([\\s\\S]*?)endfacet/g;\n let faceCounter = 0;\n const floatRegex = /[\\s]+([+-]?(?:\\d+.\\d+|\\d+.|\\d+|.\\d+)(?:[eE][+-]?\\d+)?)/.source;\n const vertexRegex = new RegExp('vertex' + floatRegex + floatRegex + floatRegex, 'g');\n const normalRegex = new RegExp('normal' + floatRegex + floatRegex + floatRegex, 'g');\n const positions = [];\n const normals = [];\n const colors = null;\n let normalx;\n let normaly;\n let normalz;\n let result;\n let verticesPerFace;\n let normalsPerFace;\n let text;\n while ((result = faceRegex.exec(data)) !== null) {\n verticesPerFace = 0;\n normalsPerFace = 0;\n text = result[0];\n while ((result = normalRegex.exec(text)) !== null) {\n normalx = parseFloat(result[1]);\n normaly = parseFloat(result[2]);\n normalz = parseFloat(result[3]);\n normalsPerFace++;\n }\n while ((result = vertexRegex.exec(text)) !== null) {\n positions.push(parseFloat(result[1]), parseFloat(result[2]), parseFloat(result[3]));\n normals.push(normalx, normaly, normalz);\n verticesPerFace++;\n }\n if (normalsPerFace !== 1) {\n ctx.log(\"Error in normal of face \" + faceCounter);\n return -1;\n }\n if (verticesPerFace !== 3) {\n ctx.log(\"Error in positions of face \" + faceCounter);\n return -1;\n }\n faceCounter++;\n }\n addMesh(ctx, positions, normals, colors);\n}\n\nlet nextGeometryId = 0;\n\nfunction addMesh(ctx, positions, normals, colors) {\n\n const indices = new Int32Array(positions.length / 3);\n for (let ni = 0, len = indices.length; ni < len; ni++) {\n indices[ni] = ni;\n }\n\n normals = normals && normals.length > 0 ? normals : null;\n colors = colors && colors.length > 0 ? colors : null;\n\n if (!ctx.autoNormals && ctx.smoothNormals) {\n faceToVertexNormals(positions, normals, {smoothNormalsAngleThreshold: ctx.smoothNormalsAngleThreshold});\n }\n\n const geometryId = \"\" + nextGeometryId++;\n const meshId = \"\" + nextGeometryId++;\n const entityId = \"\" + nextGeometryId++;\n\n ctx.xktModel.createGeometry({\n geometryId: geometryId,\n primitiveType: \"triangles\",\n positions: positions,\n normals: (!ctx.autoNormals) ? normals : null,\n colors: colors,\n indices: indices\n });\n\n ctx.xktModel.createMesh({\n meshId: meshId,\n geometryId: geometryId,\n color: colors ? null : [1, 1, 1],\n metallic: 0.9,\n roughness: 0.1\n });\n\n ctx.xktModel.createEntity({\n entityId: entityId,\n meshIds: [meshId]\n });\n\n ctx.xktModel.createMetaObject({\n metaObjectId: entityId,\n metaObjectType: \"Default\",\n metaObjectName: \"STL Mesh\",\n parentMetaObjectId: ctx.rootMetaObject.metaObjectId\n });\n\n ctx.stats.numGeometries++;\n ctx.stats.numObjects++;\n ctx.stats.numVertices += positions.length / 3;\n ctx.stats.numTriangles += indices.length / 3;\n}\n\nfunction ensureString(buffer) {\n if (typeof buffer !== 'string') {\n return decodeText(new Uint8Array(buffer));\n }\n return buffer;\n}\n\nfunction ensureBinary(buffer) {\n if (typeof buffer === 'string') {\n const arrayBuffer = new Uint8Array(buffer.length);\n for (let i = 0; i < buffer.length; i++) {\n arrayBuffer[i] = buffer.charCodeAt(i) & 0xff; // implicitly assumes little-endian\n }\n return arrayBuffer.buffer || arrayBuffer;\n } else {\n return buffer;\n }\n}\n\nfunction decodeText(array) {\n if (typeof TextDecoder !== 'undefined') {\n return new TextDecoder().decode(array);\n }\n let s = '';\n for (let i = 0, il = array.length; i < il; i++) {\n s += String.fromCharCode(array[i]); // Implicitly assumes little-endian.\n }\n return decodeURIComponent(escape(s));\n}\n\nexport {parseSTLIntoXKTModel};\n","module.exports = require(\"@loaders.gl/core\");","module.exports = require(\"@loaders.gl/gltf\");","module.exports = require(\"@loaders.gl/images\");","module.exports = require(\"@loaders.gl/las\");","module.exports = require(\"@loaders.gl/ply\");","module.exports = require(\"@loaders.gl/polyfills\");","module.exports = require(\"@loaders.gl/textures\");","module.exports = require(\"fs\");","module.exports = require(\"pako\");","module.exports = require(\"path\");","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","import '@loaders.gl/polyfills';\nimport {installFilePolyfills} from '@loaders.gl/polyfills';\n\ninstallFilePolyfills();\n\nexport * from \"./src/index.js\";\nexport {convert2xkt} from \"./src/convert2xkt.js\"; // convert2xkt is only bundled for Node.js\n"],"names":["KDNode","_createClass","aabb","_classCallCheck","entities","left","right","math","XKTEntity","entityId","meshes","entityIndex","AABB3","hasReusedGeometries","XKTGeometry","cfg","geometryId","primitiveType","geometryIndex","numInstances","positions","positionsQuantized","Uint16Array","length","normals","normalsOctEncoded","colorsCompressed","uvs","uvsCompressed","indices","edgeIndices","solid","key","get","XKTMesh","meshId","meshIndex","matrix","geometry","color","Float32Array","metallic","undefined","roughness","opacity","textureSet","entity","XKTMetaObject","metaObjectId","propertySetIds","metaObjectType","metaObjectName","parentMetaObjectId","_regeneratorRuntime","exports","Op","Object","prototype","hasOwn","hasOwnProperty","defineProperty","obj","desc","value","$Symbol","Symbol","iteratorSymbol","iterator","asyncIteratorSymbol","asyncIterator","toStringTagSymbol","toStringTag","define","enumerable","configurable","writable","err","wrap","innerFn","outerFn","self","tryLocsList","protoGenerator","Generator","generator","create","context","Context","makeInvokeMethod","tryCatch","fn","arg","type","call","ContinueSentinel","GeneratorFunction","GeneratorFunctionPrototype","IteratorPrototype","getProto","getPrototypeOf","NativeIteratorPrototype","values","Gp","defineIteratorMethods","forEach","method","_invoke","AsyncIterator","PromiseImpl","invoke","resolve","reject","record","result","_typeof","__await","then","unwrapped","error","previousPromise","callInvokeWithMethodAndArg","state","Error","doneResult","delegate","delegateResult","maybeInvokeDelegate","sent","_sent","dispatchException","abrupt","done","methodName","TypeError","info","resultName","next","nextLoc","pushTryEntry","locs","entry","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","push","resetTryEntry","completion","reset","iterable","iteratorMethod","isNaN","i","displayName","isGeneratorFunction","genFun","ctor","constructor","name","mark","setPrototypeOf","__proto__","awrap","async","Promise","iter","keys","val","object","reverse","pop","skipTempReset","prev","charAt","slice","stop","rootRecord","rval","exception","handle","loc","caught","hasCatch","hasFinally","finallyEntry","complete","finish","_catch","thrown","delegateYield","asyncGeneratorStep","gen","_next","_throw","_asyncToGenerator","args","arguments","apply","instance","Constructor","_defineProperties","target","props","descriptor","_toPropertyKey","protoProps","staticProps","_toPrimitive","String","input","hint","prim","toPrimitive","res","Number","geometryCompression","buildEdgeIndices","isTriangleMeshSolid","XKTTile","XKTPropertySet","mergeVertices","XKT_INFO","XKTTexture","XKTTextureSet","encode","load","KTX2BasisWriter","ImageLoader","tempVec4a","vec4","tempVec4b","tempMat4","mat4","tempMat4b","kdTreeDimLength","Float64Array","COLOR_TEXTURE","METALLIC_ROUGHNESS_TEXTURE","NORMALS_TEXTURE","EMISSIVE_TEXTURE","OCCLUSION_TEXTURE","TEXTURE_ENCODING_OPTIONS","useSRGB","qualityLevel","encodeUASTC","mipmaps","XKTModel","modelId","projectId","revisionId","author","createdAt","creatingApplication","schema","xktVersion","edgeThreshold","minTileSize","modelAABB","propertySets","propertySetsList","metaObjects","metaObjectsList","reusedGeometriesDecodeMatrix","geometries","geometriesList","textures","texturesList","textureSets","textureSetsList","meshesList","entitiesList","tilesList","finalized","createPropertySet","params","propertySetId","properties","console","propertySetType","propertySetName","propertySet","createMetaObject","metaObject","_rootMetaObject","createTexture","textureId","imageData","src","fileExt","split","concat","texture","mediaType","minFilter","magFilter","wrapS","wrapT","wrapR","width","height","compressed","createTextureSet","textureSetId","colorTexture","colorTextureId","channel","metallicRoughnessTexture","metallicRoughnessTextureId","normalsTexture","normalsTextureId","emissiveTexture","emissiveTextureId","occlusionTexture","occlusionTextureId","textureSetIndex","createGeometry","triangles","points","lines","line_strip","line_loop","triangle_strip","triangle_fan","_createDefaultIndices","colors","xktGeometryCfg","uv","Uint8Array","len","Math","floor","mergedPositions","mergedIndices","numIndices","createMesh","position","scale","rotation","identityMat4","quaternion","eulerToQuaternion","identityQuaternion","composeMat4","mesh","createEntity","meshIds","warn","createUUID","meshIdIdx","meshIdLen","createDefaultMetaObjects","_finalize","_callee","rootKDNode","_callee$","_context","log","_removeUnusedTextures","_compressTextures","_bakeSingleUseGeometryPositions","_bakeAndOctEncodeNormals","_createEntityAABBs","_createKDTree","_createTilesFromKDTree","_createReusedGeometriesDecodeMatrix","_flagSolidGeometries","set","finalize","leni","textureIndex","_this","countTextures","_loop","encodingOptions","image","encodedData","encodedImageData","j","lenj","isIdentityMat4","transformPoint4","Int8Array","octEncodeNormals","modelNormalMatrix","inverseMat4","transposeMat4","transformAndOctEncodeNormals","entityAABB","collapseAABB3","expandAABB3Point3","expandAABB3","_insertEntityIntoKDTree","kdNode","nodeAABB","nodeAABBDiag","getAABB3Diag","containsAABB3","dim","aabbLeft","aabbRight","_createTilesFromKDNode","_createTileFromEntities","tileAABB","tileCenter","getAABB3Center","tileCenterNeg","mulVec3Scalar","vec3","rtcAABB","reused","k","lenk","quantizePositions","translateMat4v","tile","tempVec3a","reusedGeometriesAABB","countReusedGeometries","numGeometries","createPositionsDecodeMatrix","maxNumPositions","maxNumIndices","vertexIndexMapping","Array","edges","RepeatWrapping","LinearMipMapNearestFilter","materialType","materialIndex","uniquePositions","indicesLookup","indicesReverseLookup","weldedIndices","faces","numFaces","compa","compb","compc","a","b","c","cb","ab","cross","normal","inverseNormal","weldVertices","positionsMap","vx","vy","vz","precisionPoints","precision","pow","lenUniquePositions","round","buildFaces","positionsDecodeMatrix","ia","ib","ic","decompressPosition","subVec3","cross3Vec3","normalizeVec3","face","thresholdDot","cos","DEGTORAD","edge1","edge2","index1","index2","largeIndex","edge","normal1","normal2","dot","faceIndex","min","max","face1","face2","abs","dotVec3","dot2","Uint32Array","lenPositions","quantizedPositions","xmin","ymin","zmin","xwid","ywid","zwid","maxInt","xMultiplier","yMultiplier","zMultiplier","verify","num","compressPosition","p","q","multiplier","translate","translationMat4v","scalingMat4v","mulMat4","lenNormals","compressedNormals","lenCompressedNormals","oct","dec","best","currentCos","bestCos","ei","localNormal","worldNormal","transformVec3","octEncodeVec3","octDecodeVec2","array","xfunc","yfunc","x","y","tempx","tempy","z","sqrt","compareIndexPositions","posA","posB","newIndices","sort","uniqueVertexIndex","a2","b2","c2","temp","compareEdges","e1","e2","sameEdgeCount","toArrayBuffer","buf","ArrayBuffer","view","isString","o","o2","utils","pako","XKT_VERSION","NUM_TEXTURE_ATTRIBUTES","NUM_MATERIAL_ATTRIBUTES","writeXKTModelToArrayBuffer","xktModel","metaModelJSON","stats","options","zip","writeXKTModelToArrayBufferUncompressed","data","getModelData","deflatedData","deflateData","texturesSize","textureData","byteLength","arrayBuffer","createArrayBuffer","object2Array","encoder","TextEncoder","JSON","stringify","arrays","metadata","eachTextureDataPortion","eachTextureAttributes","eachTextureSetTextures","matrices","eachGeometryPrimitiveType","eachGeometryPositionsPortion","eachGeometryNormalsPortion","eachGeometryColorsPortion","eachGeometryUVsPortion","eachGeometryIndicesPortion","eachGeometryEdgeIndicesPortion","eachMeshGeometriesPortion","eachMeshMatricesPortion","eachMeshTextureSet","eachMeshMaterialAttributes","eachEntityId","eachEntityMeshesPortion","eachTileAABB","eachTileEntitiesPortion","arraysCnt","dataView","DataView","setUint32","byteOffset","offsets","arr","BPE","BYTES_PER_ELEMENT","ceil","idx","dataArray","buffer","requiresSwapToLittleEndian","subarray","swaps","cnt","offset","i1","i2","tmp","metaModelDataStr","numPropertySets","numMetaObjects","numTextures","numTextureSets","numMeshes","numEntities","numTiles","lenColors","lenUVs","lenIndices","lenEdgeIndices","lenMatrices","lenTextures","xktTexture","numCompressedTextures","Int32Array","countPositions","countNormals","countColors","countUVs","countIndices","countEdgeIndices","id","propertySetsIndex","propertySetJSON","metaObjectsIndex","metaObjectJSON","parent","external","portionIdx","textureAttrIdx","eachTextureSetTexturesIndex","countEntityMeshesPortion","eachMeshMaterialAttributesIndex","matricesIndex","tileIndex","tileEntities","numTileEntities","entityMeshes","numEntityMeshes","tileAABBIndex","deflate","metaModelBytes","deflatedJSON","deflateJSON","replace","chr","charCodeAt","toString","substr","strings","elements","indexData","dataLen","element","elementsize","indexBuf","ClampToEdgeWrapping","MirroredRepeatWrapping","NearestFilter","NearestMipMapNearestFilter","NearestMipmapNearestFilter","NearestMipmapLinearFilter","NearestMipMapLinearFilter","LinearFilter","LinearMipmapNearestFilter","LinearMipmapLinearFilter","LinearMipMapLinearFilter","GIFMediaType","JPEGMediaType","PNGMediaType","parseCityJSONIntoXKTModel","parseGLTFIntoXKTModel","parseIFCIntoXKTModel","parseLASIntoXKTModel","parsePCDIntoXKTModel","parsePLYIntoXKTModel","parseSTLIntoXKTModel","fs","require","path","convert2xkt","_ref","WebIFC","_ref$configs","configs","source","sourceData","sourceFormat","metaModelSource","output","outputXKTModel","outputXKT","includeTypes","excludeTypes","_ref$reuseGeometries","reuseGeometries","_ref$minTileSize","_ref$stats","outputStats","_ref$rotateX","rotateX","_ref$includeTextures","includeTextures","_ref$includeNormals","includeNormals","_ref$zip","_ref$log","msg","schemaVersion","title","created","numTriangles","numVertices","numNormals","numUVs","numObjects","sourceSize","xktSize","compressionRatio","conversionTime","getFileExtension","fileName","ext","extname","substring","_log","startTime","Date","sourceConfigs","fileTypeConfigs","overrideOption","option1","option2","readFileSync","sourceFileSizeBytes","toFixed","parse","e","convert","center","transform","metaModelData","gltfBasePath","dirname","baseUri","wasmPath","fp64","colorDepth","skip","parser","converterParams","xktArrayBuffer","xktContent","Buffer","from","targetFileSizeBytes","outputDir","existsSync","mkdirSync","recursive","writeFileSync","buildBoxGeometry","xSize","ySize","zSize","centerX","centerY","centerZ","xmax","ymax","zmax","buildBoxLinesGeometry","buildCylinderGeometry","radiusTop","radiusBottom","radialSegments","heightSegments","openEnded","heightHalf","heightLength","radialAngle","PI","radialLength","radiusChange","h","currentRadius","currentHeight","first","second","startIndex","tu","tv","normalY","atan","sin","buildGridGeometry","size","divisions","step","halfSize","l","buildPlaneGeometry","xSegments","zSegments","halfWidth","halfHeight","planeX","planeZ","planeX1","planeZ1","segmentWidth","segmentHeight","offset2","iz","ix","d","buildSphereGeometry","lod","radius","widthSegments","theta","sinTheta","cosTheta","phi","sinPhi","cosPhi","u","v","buildTorusGeometry","tube","tubeSegments","arc","vec","letters","buildVectorTextGeometry","origin","xOrigin","yOrigin","zOrigin","text","trim","countVerts","str","mag","penUp","p1","p2","needLine","pointsLen","iLine","parseGLTFJSONIntoXKTModel","parseMetaModelIntoXKTModel","earcut","holeIndices","hasHoles","outerLen","outerNode","linkedList","minX","minY","maxX","maxY","invSize","eliminateHoles","earcutLinked","start","end","clockwise","last","signedArea","insertNode","equals","removeNode","filterPoints","again","steiner","area","ear","pass","indexCurve","isEarHashed","isEar","cureLocalIntersections","splitEarcut","pointInTriangle","minTX","minTY","maxTX","maxTY","minZ","zOrder","maxZ","prevZ","n","nextZ","intersects","locallyInside","isValidDiagonal","splitPolygon","queue","list","getLeftmost","compareX","eliminateHole","hole","findHoleBridge","hx","hy","qx","Infinity","m","mx","my","tanMin","tan","sectorContainsSector","sortLinked","tail","numMerges","pSize","qSize","inSize","leftmost","ax","ay","bx","by","cx","cy","px","py","intersectsPolygon","middleInside","r","q1","q2","o1","sign","o3","o4","onSegment","inside","Node","an","bp","deviation","polygonArea","trianglesArea","sum","flatten","vertices","holes","dimensions","holeIndex","faceToVertexNormals","smoothNormalsAngleThreshold","vertexMap","vertexNormals","vertexNormalAccum","acc","posi","numVerts","ii","jj","angle","angleVec3","doublePrecision","FloatArrayType","tempMat1","tempMat2","tempVec4","MIN_DOUBLE","MAX_SAFE_INTEGER","MAX_DOUBLE","RADTODEG","vec2","mat3","mat3ToMat4","mat4ToMat3","lut","d0","random","d1","d2","d3","clamp","fmod","negateVec4","dest","addVec4","addVec4Scalar","s","addVec3","addVec3Scalar","subVec4","subVec2","subVec4Scalar","subScalarVec4","mulVec4","mulVec4Scalar","mulVec2Scalar","divVec3","divVec4","divScalarVec3","divVec3Scalar","divVec4Scalar","divScalarVec4","dotVec4","cross3Vec4","u0","u1","u2","v0","v1","v2","x2","y2","z2","sqLenVec4","lenVec4","dotVec2","sqLenVec3","sqLenVec2","lenVec3","distVec3","w","lenVec2","distVec2","rcpVec3","normalizeVec4","f","normalizeVec2","acos","vec3FromMat4Scale","tempVec3","vecToArray","trunc","xyzArrayToObject","xyzObjectToArray","xyz","arry","dupMat4","mat4To3","m4s","setMat4ToZeroes","setMat4ToOnes","diagonalMat4v","diagonalMat4c","diagonalMat4s","mat","identityMat3","negateMat4","addMat4","addMat4Scalar","addScalarMat4","subMat4","subMat4Scalar","subScalarMat4","a00","a01","a02","a03","a10","a11","a12","a13","a20","a21","a22","a23","a30","a31","a32","a33","b00","b01","b02","b03","b10","b11","b12","b13","b20","b21","b22","b23","b30","b31","b32","b33","mulMat3","mulMat4Scalar","mulMat4v4","v3","m4","m14","m8","m13","m12","m9","transposeMat3","determinantMat4","b04","b05","b06","b07","b08","b09","invDet","traceMat4","translationMat3v","translationMat4c","translationMat4s","translateMat4c","OLDtranslateMat4c","m15","m3","m7","m11","rotationMat4v","anglerad","axis","xy","yz","zx","xs","ys","zs","rotationMat4c","scalingMat3v","scalingMat4c","scaleMat4c","scaleMat4v","scalingMat4s","rotationTranslationMat4","xx","xz","yy","zz","wx","wy","wz","mat4ToEuler","order","m21","m22","m23","m31","m32","m33","asin","atan2","quaternionToRotationMat4","decomposeMat4","decompose","sx","sy","sz","det","invSX","invSY","invSZ","mat4ToQuaternion","lookAtMat4v","pos","up","posx","posy","posz","upx","upy","upz","targetx","targety","targetz","z0","z1","x0","x1","y0","y1","lookAtMat4c","orthoMat4c","bottom","top","near","far","rl","tb","frustumMat4v","fmin","fmax","fmin4","fmax4","t","tempMat20","tempMat21","tempMat22","frustumMat4","perspectiveMat4","fovyrad","aspectratio","znear","zfar","pmin","pmax","transformPoint3","transformPoints3","points2","p0","pi","m0","m1","m2","m5","m6","m10","transformPositions3","transformPositions4","transformVec4","rotateVec3X","rotateVec3Y","rotateVec3Z","projectVec4","unprojectVec3","mat2","viewMat","projMat","lerpVec3","t1","t2","item","euler","c1","c3","s1","s2","s3","trace","vec3PairToQuaternion","norm_u_norm_v","real_part","normalizeQuaternion","angleAxisToQuaternion","angleAxis","halfAngle","fsin","quaternionToEuler","mulQuaternions","p3","q0","q3","vec3ApplyQuaternion","qy","qz","qw","iy","iw","quaternionToMat4","tx","ty","tz","twx","twy","twz","txx","txy","txz","tyy","tyz","tzz","conjugateQuaternion","inverseQuaternion","quaternionToAngleAxis","AABB2","OBB3","OBB2","Sphere3","transformOBB3","aabb1","aabb2","getAABB3DiagPoint","diagVec","xneg","xpos","yneg","ypos","zneg","zpos","getAABB2Center","AABB3ToOBB3","obb","positions3ToAABB3","OBB3ToAABB3","points3ToAABB3","points3ToSphere3","sphere","numPoints","dist","positions3ToSphere3","tempVec3b","numPositions","OBB3ToSphere3","point","lenPoints","getSphere3Center","triangleNormal","p1x","p1y","p1z","p2x","p2y","p2z","p3x","p3y","p3z","uvi","tempVec2a","tempVec3c","_ref$center","_ref$transform","copyVertices","transformVertices","centerVertices","customTransformVertices","version","rootMetaObjectId","modelMetaObjectId","ctx","nextId","parseCityJSON","vertices2","cityJSONTransform","vertex","centerPos","cityObjects","CityObjects","objectId","cityObject","parseCityObject","parents","objectMaterial","surfaceMaterials","appearance","materials","geometryMaterial","material","themeIds","themeId","theme","surfaceMaterial","parseGeometrySurfacesWithOwnMaterials","parseGeometrySurfacesWithSharedMaterial","geomType","surfaces","boundaries","parseSurfacesWithOwnMaterials","shells","solids","surface","diffuseColor","transparency","sharedIndices","geometryCfg","newFace","extractLocalIndices","_toConsumableArray","pList","getNormalOfPositions","pv","to2D","unshift","tr","parseSurfacesWithSharedMaterial","primitiveCfg","boundary","newBoundary","index","includes","vertexIndex","indexOf","nexti","_p","_n","re","x3","tmp2","y3","GLTFLoader","getAttachment","gltfData","nodesHaveNames","geometryCreated","geometriesCreated","parseTextures","parseMaterials","parseDefaultScene","errMsg","parseTexture","sampler","flipY","_textureId","_textureSetId","parseTextureSet","_attributes","parseMaterialAttributes","textureSetCfg","normalTexture","normalTextureId","metallicPBR","pbrMetallicRoughness","baseColorTexture","extensions","specularPBR","specularTexture","specularColorTexture","materialAttributes","diffuseFactor","common","technique","blinn","phong","lambert","diffuse","transparent","baseColorFactor","metallicFactor","roughnessFactor","scene","scenes","parseScene","nodes","node","countMeshUsage","testIfNodesHaveNames","parseNodesWithoutNames","parseNodesWithNames","level","instances","children","childNode","depth","parseNodeMatrix","parseNodeMesh","objectIdStack","meshIdsStack","xktEntityId","nodeName","entityMeshIds","localMatrix","translation","createPrimitiveHash","primitive","hash","attributes","join","numPrimitives","primitives","mode","POSITION","NORMAL","COLOR_0","TEXCOORD_0","xktMeshId","meshCfg","atob2","atob","WEBGL_COMPONENT_TYPES","Int16Array","WEBGL_TYPE_SIZES","gltf","metaModelCorrections","getMetaModelCorrections","createXKTGeometryIds","nextMeshId","parseBuffers","parseBufferViews","freeBuffers","eachRootStats","eachChildRoot","metaObjectsMap","metaObjectParent","rootMetaObject","rootStats","numChildren","countChildren","buffers","all","map","parseBuffer","bufferInfo","_arrayBuffer","_buffer","uri","parseArrayBuffer","dataUriRegex","dataUriRegexResult","match","isBase64","decodeURIComponent","bufferViewsInfo","bufferViews","parseBufferView","bufferViewInfo","_typedArray","materialsInfo","materialInfo","parseMaterial","_materialData","defaultSceneInfo","sceneInfo","glTFNode","parseNode","deferredMeshIds","gltfMeshId","meshInfo","numPrimitivesInMesh","primitiveInfo","geometryHash","createPrimitiveGeometryHash","xktGeometryId","geometryArrays","parsePrimitiveGeometry","childNodeIdx","childGLTFNode","rootMetaObjectStats","accessors","indicesIndex","accessorInfo","parseAccessorTypedArray","positionsIndex","normalsIndex","colorsIndex","bufferView","itemSize","TypedArray","componentType","elementBytes","itemBytes","byteStride","count","_ref$autoNormals","autoNormals","ifcAPI","IfcAPI","SetWasmPath","Init","modelID","OpenModel","GetLineIDsWithType","IFCPROJECT","ifcProjectId","ifcProject","GetLine","parseMetadata","parseGeometry","parsePropertySets","IFCRELDEFINESBYPROPERTIES","relID","rel","relatingPropertyDefinition","RelatingPropertyDefinition","GlobalId","relatedObjects","RelatedObjects","relatedObject","HasProperties","Name","prop","nominalValue","NominalValue","property","valueType","Description","description","parseSpatialChildren","ifcElement","parseRelatedItemsOfType","expressID","IFCRELAGGREGATES","IFCRELCONTAINEDINSPATIALSTRUCTURE","relation","related","relatedItems","foundElement","isArray","element2","flatMeshes","LoadAllGeometry","flatMesh","createObject","IFCSPACE","ifcSpaceId","GetFlatMesh","flatMeshExpressID","placedGeometries","placedGeometry","geometryExpressID","GetGeometry","vertexData","GetVertexArray","GetVertexData","GetVertexDataSize","GetIndexArray","GetIndexData","GetIndexDataSize","flatTransformation","LASLoader","MAX_VERTICES","_ref$colorDepth","_ref$fp","_ref$skip","las","parsedData","loaderData","pointsFormatId","readAttributes","intensity","readIntensities","readColorsAndIntensities","pointsChunks","chunkArray","readPositions","colorsChunks","positionsValue","attributesPosition","attributesColor","attributesIntensity","colorSize","intensities","colorsCompressedSize","chunkSize","includeTypesMap","excludeTypesMap","newObject","countMetaObjects","_ref$littleEndian","littleEndian","textData","decodeText","header","parseHeader","headerLen","line","parseFloat","rgb","g","sizes","compressedSize","decompressedSize","decompressed","decompressLZF","dataview","getFloat32","getUint8","row","rowSize","result1","search","result2","exec","fields","viewpoint","parseInt","sizeSum","TextDecoder","decode","il","fromCharCode","escape","inData","outLength","inLength","outData","inPtr","outPtr","ctrl","ref","PLYLoader","_x","_parsePLYIntoXKTModel","hasColors","colorsValue","t0","_parseSTLIntoXKTModel","splitMeshes","smoothNormals","binData","ensureBinary","isBinary","parseBinary","parseASCII","ensureString","reader","getUint32","faceSize","numExpectedBytes","defaultR","defaultG","defaultB","lastR","lastG","lastB","newMesh","alpha","dataOffset","faceLength","normalX","normalZ","packedColor","getUint16","vertexstart","addMesh","faceRegex","faceCounter","floatRegex","vertexRegex","RegExp","normalRegex","normalx","normaly","normalz","verticesPerFace","normalsPerFace","nextGeometryId","ni","installFilePolyfills"],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"xeokit-convert.cjs.js","mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD,O;;;;;;;;;;;;;;;;;;;;ACVA;AACA;AACA;AACA;AACA;AAJA,IAKMA,MAAM,gBAAAC,YAAA;AAER;AACJ;AACA;AACI,SAAAD,OAAYE,IAAI,EAAE;EAAAC,eAAA,OAAAH,MAAA;EAEd;AACR;AACA;AACA;AACA;EACQ,IAAI,CAACE,IAAI,GAAGA,IAAI;;EAEhB;AACR;AACA;EACQ,IAAI,CAACE,QAAQ,GAAG,IAAI;;EAEpB;AACR;AACA;EACQ,IAAI,CAACC,IAAI,GAAG,IAAI;;EAEhB;AACR;AACA;EACQ,IAAI,CAACC,KAAK,GAAG,IAAI;AACrB,CAAC;;;;;;;;;;;;;;;;;;;;;;ACjC+B;;AAEpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AARA,IASME,SAAS,gBAAAP,YAAA;AAEX;AACJ;AACA;AACA;AACA;AACI,SAAAO,UAAYC,QAAQ,EAAGC,MAAM,EAAE;EAAAP,eAAA,OAAAK,SAAA;EAE3B;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACQ,IAAI,CAACC,QAAQ,GAAGA,QAAQ;;EAExB;AACR;AACA;AACA;AACA;AACA;AACA;EACQ,IAAI,CAACE,WAAW,GAAG,IAAI;;EAEvB;AACR;AACA;AACA;AACA;EACQ,IAAI,CAACD,MAAM,GAAGA,MAAM;;EAEpB;AACR;AACA;AACA;AACA;AACA;AACA;AACA;EACQ,IAAI,CAACR,IAAI,GAAGK,8CAAI,CAACK,KAAK,CAAC,CAAC;;EAExB;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACQ,IAAI,CAACC,mBAAmB,GAAG,KAAK;AACpC,CAAC;;;;;;;;;;;;;;;;;;;;;ACtEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AARA,IASMC,WAAW;EAEb;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACI,SAAAA,YAAYC,GAAG,EAAE;IAAAZ,eAAA,OAAAW,WAAA;IAEb;AACR;AACA;AACA;AACA;IACQ,IAAI,CAACE,UAAU,GAAGD,GAAG,CAACC,UAAU;;IAEhC;AACR;AACA;AACA;AACA;IACQ,IAAI,CAACC,aAAa,GAAGF,GAAG,CAACE,aAAa;;IAEtC;AACR;AACA;AACA;AACA;IACQ,IAAI,CAACC,aAAa,GAAGH,GAAG,CAACG,aAAa;;IAEtC;AACR;AACA;AACA;AACA;IACQ,IAAI,CAACC,YAAY,GAAG,CAAC;;IAErB;AACR;AACA;AACA;AACA;AACA;AACA;IACQ,IAAI,CAACC,SAAS,GAAGL,GAAG,CAACK,SAAS;;IAE9B;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACQ,IAAI,CAACC,kBAAkB,GAAG,IAAIC,WAAW,CAACP,GAAG,CAACK,SAAS,CAACG,MAAM,CAAC;;IAE/D;AACR;AACA;AACA;AACA;AACA;AACA;IACQ,IAAI,CAACC,OAAO,GAAGT,GAAG,CAACS,OAAO;;IAE1B;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACQ,IAAI,CAACC,iBAAiB,GAAG,IAAI;;IAE7B;AACR;AACA;AACA;AACA;AACA;AACA;IACQ,IAAI,CAACC,gBAAgB,GAAGX,GAAG,CAACW,gBAAgB;;IAE5C;AACR;AACA;AACA;AACA;IACQ,IAAI,CAACC,GAAG,GAAGZ,GAAG,CAACY,GAAG;;IAElB;AACR;AACA;AACA;AACA;IACQ,IAAI,CAACC,aAAa,GAAGb,GAAG,CAACa,aAAa;;IAEtC;AACR;AACA;AACA;AACA;AACA;AACA;IACQ,IAAI,CAACC,OAAO,GAAGd,GAAG,CAACc,OAAO;;IAE1B;AACR;AACA;AACA;AACA;AACA;AACA;IACQ,IAAI,CAACC,WAAW,GAAGf,GAAG,CAACe,WAAW;;IAElC;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACQ,IAAI,CAACC,KAAK,GAAG,KAAK;EACtB;;EAEA;AACJ;AACA;AACA;EAHI9B,YAAA,CAAAa,WAAA;IAAAkB,GAAA;IAAAC,GAAA,EAIA,SAAAA,IAAA,EAAa;MAC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ACA;AACA;AACA;AACA;AACA;AACA;AACA;IACQ,IAAI,CAACC,gBAAgB,GAAG,EAAE;;IAE1B;AACR;AACA;AACA;AACA;AACA;AACA;IACQ,IAAI,CAACC,WAAW,GAAG,CAAC,CAAC;;IAErB;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACQ,IAAI,CAACC,eAAe,GAAG,EAAE;;IAEzB;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACQ,IAAI,CAACC,4BAA4B,GAAG,IAAI/N,YAAY,CAAC,EAAE,CAAC;;IAExD;AACR;AACA;AACA;AACA;AACA;AACA;IACQ,IAAI,CAACgO,UAAU,GAAG,CAAC,CAAC;;IAEpB;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACQ,IAAI,CAACC,cAAc,GAAG,EAAE;;IAExB;AACR;AACA;AACA;AACA;AACA;AACA;IACQ,IAAI,CAACC,QAAQ,GAAG,CAAC,CAAC;;IAElB;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACQ,IAAI,CAACC,YAAY,GAAG,EAAE;;IAEtB;AACR;AACA;AACA;AACA;AACA;AACA;IACQ,IAAI,CAACC,WAAW,GAAG,CAAC,CAAC;;IAErB;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACQ,IAAI,CAACC,eAAe,GAAG,EAAE;;IAEzB;AACR;AACA;AACA;AACA;AACA;AACA;IACQ,IAAI,CAACnQ,MAAM,GAAG,CAAC,CAAC;;IAEhB;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACQ,IAAI,CAACoQ,UAAU,GAAG,EAAE;;IAEpB;AACR;AACA;AACA;AACA;AACA;AACA;IACQ,IAAI,CAAC1Q,QAAQ,GAAG,CAAC,CAAC;;IAElB;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACQ,IAAI,CAAC2Q,YAAY,GAAG,EAAE;;IAEtB;AACR;AACA;AACA;AACA;AACA;AACA;IACQ,IAAI,CAACC,SAAS,GAAG,EAAE;;IAEnB;AACR;AACA;AACA;AACA;AACA;AACA;IACQ,IAAI,CAAC9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","sources":["webpack://convert2xkt/webpack/universalModuleDefinition","webpack://convert2xkt/./src/XKTModel/KDNode.js","webpack://convert2xkt/./src/XKTModel/XKTEntity.js","webpack://convert2xkt/./src/XKTModel/XKTGeometry.js","webpack://convert2xkt/./src/XKTModel/XKTMesh.js","webpack://convert2xkt/./src/XKTModel/XKTMetaObject.js","webpack://convert2xkt/./src/XKTModel/XKTModel.js","webpack://convert2xkt/./src/XKTModel/XKTPropertySet.js","webpack://convert2xkt/./src/XKTModel/XKTTexture.js","webpack://convert2xkt/./src/XKTModel/XKTTextureSet.js","webpack://convert2xkt/./src/XKTModel/XKTTile.js","webpack://convert2xkt/./src/XKTModel/lib/buildEdgeIndices.js","webpack://convert2xkt/./src/XKTModel/lib/geometryCompression.js","webpack://convert2xkt/./src/XKTModel/lib/isTriangleMeshSolid.js","webpack://convert2xkt/./src/XKTModel/lib/toArraybuffer.js","webpack://convert2xkt/./src/XKTModel/lib/utils.js","webpack://convert2xkt/./src/XKTModel/writeXKTModelToArrayBuffer.js","webpack://convert2xkt/./src/XKT_INFO.js","webpack://convert2xkt/./src/constants.js","webpack://convert2xkt/./src/convert2xkt.js","webpack://convert2xkt/./src/geometryBuilders/buildBoxGeometry.js","webpack://convert2xkt/./src/geometryBuilders/buildBoxLinesGeometry.js","webpack://convert2xkt/./src/geometryBuilders/buildCylinderGeometry.js","webpack://convert2xkt/./src/geometryBuilders/buildGridGeometry.js","webpack://convert2xkt/./src/geometryBuilders/buildPlaneGeometry.js","webpack://convert2xkt/./src/geometryBuilders/buildSphereGeometry.js","webpack://convert2xkt/./src/geometryBuilders/buildTorusGeometry.js","webpack://convert2xkt/./src/geometryBuilders/buildVectorTextGeometry.js","webpack://convert2xkt/./src/index.js","webpack://convert2xkt/./src/lib/earcut.js","webpack://convert2xkt/./src/lib/faceToVertexNormals.js","webpack://convert2xkt/./src/lib/math.js","webpack://convert2xkt/./src/lib/mergeVertices.js","webpack://convert2xkt/./src/parsers/parseCityJSONIntoXKTModel.js","webpack://convert2xkt/./src/parsers/parseGLTFIntoXKTModel.js","webpack://convert2xkt/./src/parsers/parseGLTFJSONIntoXKTModel.js","webpack://convert2xkt/./src/parsers/parseIFCIntoXKTModel.js","webpack://convert2xkt/./src/parsers/parseLASIntoXKTModel.js","webpack://convert2xkt/./src/parsers/parseMetaModelIntoXKTModel.js","webpack://convert2xkt/./src/parsers/parsePCDIntoXKTModel.js","webpack://convert2xkt/./src/parsers/parsePLYIntoXKTModel.js","webpack://convert2xkt/./src/parsers/parseSTLIntoXKTModel.js","webpack://convert2xkt/external commonjs \"@loaders.gl/core\"","webpack://convert2xkt/external commonjs \"@loaders.gl/gltf\"","webpack://convert2xkt/external commonjs \"@loaders.gl/images\"","webpack://convert2xkt/external commonjs \"@loaders.gl/las\"","webpack://convert2xkt/external commonjs \"@loaders.gl/ply\"","webpack://convert2xkt/external commonjs \"@loaders.gl/polyfills\"","webpack://convert2xkt/external commonjs \"@loaders.gl/textures\"","webpack://convert2xkt/external commonjs \"fs\"","webpack://convert2xkt/external commonjs \"pako\"","webpack://convert2xkt/external commonjs \"path\"","webpack://convert2xkt/webpack/bootstrap","webpack://convert2xkt/webpack/runtime/compat get default export","webpack://convert2xkt/webpack/runtime/define property getters","webpack://convert2xkt/webpack/runtime/hasOwnProperty shorthand","webpack://convert2xkt/webpack/runtime/make namespace object","webpack://convert2xkt/./index.dist.node.js"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"convert2xkt\"] = factory();\n\telse\n\t\troot[\"convert2xkt\"] = factory();\n})(global, () => {\nreturn ","/**\n * A kd-Tree node, used internally by {@link XKTModel}.\n *\n * @private\n */\nclass KDNode {\n\n /**\n * Create a KDNode with an axis-aligned 3D World-space boundary.\n */\n constructor(aabb) {\n\n /**\n * The axis-aligned 3D World-space boundary of this KDNode.\n *\n * @type {Float64Array}\n */\n this.aabb = aabb;\n\n /**\n * The {@link XKTEntity}s within this KDNode.\n */\n this.entities = null;\n\n /**\n * The left child KDNode.\n */\n this.left = null;\n\n /**\n * The right child KDNode.\n */\n this.right = null;\n }\n}\n\nexport {KDNode};","import {math} from \"../lib/math.js\";\n\n/**\n * An object within an {@link XKTModel}.\n *\n * * Created by {@link XKTModel#createEntity}\n * * Stored in {@link XKTModel#entities} and {@link XKTModel#entitiesList}\n * * Has one or more {@link XKTMesh}s, each having an {@link XKTGeometry}\n *\n * @class XKTEntity\n */\nclass XKTEntity {\n\n /**\n * @private\n * @param entityId\n * @param meshes\n */\n constructor(entityId, meshes) {\n\n /**\n * Unique ID of this ````XKTEntity```` in {@link XKTModel#entities}.\n *\n * For a BIM model, this will be an IFC product ID.\n *\n * We can also use {@link XKTModel#createMetaObject} to create an {@link XKTMetaObject} to specify metadata for\n * this ````XKTEntity````. To associate the {@link XKTMetaObject} with our {@link XKTEntity}, we give\n * {@link XKTMetaObject#metaObjectId} the same value as {@link XKTEntity#entityId}.\n *\n * @type {String}\n */\n this.entityId = entityId;\n\n /**\n * Index of this ````XKTEntity```` in {@link XKTModel#entitiesList}.\n *\n * Set by {@link XKTModel#finalize}.\n *\n * @type {Number}\n */\n this.entityIndex = null;\n\n /**\n * A list of {@link XKTMesh}s that indicate which {@link XKTGeometry}s are used by this Entity.\n *\n * @type {XKTMesh[]}\n */\n this.meshes = meshes;\n\n /**\n * World-space axis-aligned bounding box (AABB) that encloses the {@link XKTGeometry#positions} of\n * the {@link XKTGeometry}s that are used by this ````XKTEntity````.\n *\n * Set by {@link XKTModel#finalize}.\n *\n * @type {Float32Array}\n */\n this.aabb = math.AABB3();\n\n /**\n * Indicates if this ````XKTEntity```` shares {@link XKTGeometry}s with other {@link XKTEntity}'s.\n *\n * Set by {@link XKTModel#finalize}.\n *\n * Note that when an ````XKTEntity```` shares ````XKTGeometrys````, it shares **all** of its ````XKTGeometrys````. An ````XKTEntity````\n * never shares only some of its ````XKTGeometrys```` - it always shares either the whole set or none at all.\n *\n * @type {Boolean}\n */\n this.hasReusedGeometries = false;\n }\n}\n\nexport {XKTEntity};","/**\n * An element of reusable geometry within an {@link XKTModel}.\n *\n * * Created by {@link XKTModel#createGeometry}\n * * Stored in {@link XKTModel#geometries} and {@link XKTModel#geometriesList}\n * * Referenced by {@link XKTMesh}s, which belong to {@link XKTEntity}s\n *\n * @class XKTGeometry\n */\nclass XKTGeometry {\n\n /**\n * @private\n * @param {*} cfg Configuration for the XKTGeometry.\n * @param {Number} cfg.geometryId Unique ID of the geometry in {@link XKTModel#geometries}.\n * @param {String} cfg.primitiveType Type of this geometry - \"triangles\", \"points\" or \"lines\" so far.\n * @param {Number} cfg.geometryIndex Index of this XKTGeometry in {@link XKTModel#geometriesList}.\n * @param {Float64Array} cfg.positions Non-quantized 3D vertex positions.\n * @param {Float32Array} cfg.normals Non-compressed vertex normals.\n * @param {Uint8Array} cfg.colorsCompressed Unsigned 8-bit integer RGBA vertex colors.\n * @param {Float32Array} cfg.uvs Non-compressed vertex UV coordinates.\n * @param {Uint32Array} cfg.indices Indices to organize the vertex positions and normals into triangles.\n * @param {Uint32Array} cfg.edgeIndices Indices to organize the vertex positions into edges.\n */\n constructor(cfg) {\n\n /**\n * Unique ID of this XKTGeometry in {@link XKTModel#geometries}.\n *\n * @type {Number}\n */\n this.geometryId = cfg.geometryId;\n\n /**\n * The type of primitive - \"triangles\" | \"points\" | \"lines\".\n *\n * @type {String}\n */\n this.primitiveType = cfg.primitiveType;\n\n /**\n * Index of this XKTGeometry in {@link XKTModel#geometriesList}.\n *\n * @type {Number}\n */\n this.geometryIndex = cfg.geometryIndex;\n\n /**\n * The number of {@link XKTMesh}s that reference this XKTGeometry.\n *\n * @type {Number}\n */\n this.numInstances = 0;\n\n /**\n * Non-quantized 3D vertex positions.\n *\n * Defined for all primitive types.\n *\n * @type {Float64Array}\n */\n this.positions = cfg.positions;\n\n /**\n * Quantized vertex positions.\n *\n * Defined for all primitive types.\n *\n * This array is later created from {@link XKTGeometry#positions} by {@link XKTModel#finalize}.\n *\n * @type {Uint16Array}\n */\n this.positionsQuantized = new Uint16Array(cfg.positions.length);\n\n /**\n * Non-compressed 3D vertex normals.\n *\n * Defined only for triangle primitives. Can be null if we want xeokit to auto-generate them. Ignored for points and lines.\n *\n * @type {Float32Array}\n */\n this.normals = cfg.normals;\n\n /**\n * Compressed vertex normals.\n *\n * Defined only for triangle primitives. Ignored for points and lines.\n *\n * This array is later created from {@link XKTGeometry#normals} by {@link XKTModel#finalize}.\n *\n * Will be null if {@link XKTGeometry#normals} is also null.\n *\n * @type {Int8Array}\n */\n this.normalsOctEncoded = null;\n\n /**\n * Compressed RGBA vertex colors.\n *\n * Defined only for point primitives. Ignored for triangles and lines.\n *\n * @type {Uint8Array}\n */\n this.colorsCompressed = cfg.colorsCompressed;\n\n /**\n * Non-compressed vertex UVs.\n *\n * @type {Float32Array}\n */\n this.uvs = cfg.uvs;\n\n /**\n * Compressed vertex UVs.\n *\n * @type {Uint16Array}\n */\n this.uvsCompressed = cfg.uvsCompressed;\n\n /**\n * Indices that organize the vertex positions and normals as triangles.\n *\n * Defined only for triangle and lines primitives. Ignored for points.\n *\n * @type {Uint32Array}\n */\n this.indices = cfg.indices;\n\n /**\n * Indices that organize the vertex positions as edges.\n *\n * Defined only for triangle primitives. Ignored for points and lines.\n *\n * @type {Uint32Array}\n */\n this.edgeIndices = cfg.edgeIndices;\n\n /**\n * When {@link XKTGeometry#primitiveType} is \"triangles\", this is ````true```` when this geometry is a watertight mesh.\n *\n * Defined only for triangle primitives. Ignored for points and lines.\n *\n * Set by {@link XKTModel#finalize}.\n *\n * @type {boolean}\n */\n this.solid = false;\n }\n\n /**\n * Convenience property that is ````true```` when {@link XKTGeometry#numInstances} is greater that one.\n * @returns {boolean}\n */\n get reused() {\n return (this.numInstances > 1);\n }\n}\n\nexport {XKTGeometry};","/**\n * Represents the usage of a {@link XKTGeometry} by an {@link XKTEntity}.\n *\n * * Created by {@link XKTModel#createEntity}\n * * Stored in {@link XKTEntity#meshes} and {@link XKTModel#meshesList}\n * * Has an {@link XKTGeometry}, and an optional {@link XKTTextureSet}, both of which it can share with other {@link XKTMesh}es\n * * Has {@link XKTMesh#color}, {@link XKTMesh#opacity}, {@link XKTMesh#metallic} and {@link XKTMesh#roughness} PBR attributes\n * @class XKTMesh\n */\nclass XKTMesh {\n\n /**\n * @private\n */\n constructor(cfg) {\n\n /**\n * Unique ID of this XKTMesh in {@link XKTModel#meshes}.\n *\n * @type {Number}\n */\n this.meshId = cfg.meshId;\n\n /**\n * Index of this XKTMesh in {@link XKTModel#meshesList};\n *\n * @type {Number}\n */\n this.meshIndex = cfg.meshIndex;\n\n /**\n * The 4x4 modeling transform matrix.\n *\n * Transform is relative to the center of the {@link XKTTile} that contains this XKTMesh's {@link XKTEntity},\n * which is given in {@link XKTMesh#entity}.\n *\n * When the ````XKTEntity```` shares its {@link XKTGeometry}s with other ````XKTEntity````s, this matrix is used\n * to transform this XKTMesh's XKTGeometry into World-space. When this XKTMesh does not share its ````XKTGeometry````,\n * then this matrix is ignored.\n *\n * @type {Number[]}\n */\n this.matrix = cfg.matrix;\n\n /**\n * The instanced {@link XKTGeometry}.\n *\n * @type {XKTGeometry}\n */\n this.geometry = cfg.geometry;\n\n /**\n * RGB color of this XKTMesh.\n *\n * @type {Float32Array}\n */\n this.color = cfg.color || new Float32Array([1, 1, 1]);\n\n /**\n * PBR metallness of this XKTMesh.\n *\n * @type {Number}\n */\n this.metallic = (cfg.metallic !== null && cfg.metallic !== undefined) ? cfg.metallic : 0;\n\n /**\n * PBR roughness of this XKTMesh.\n * The {@link XKTTextureSet} that defines the appearance of this XKTMesh.\n *\n * @type {Number}\n * @type {XKTTextureSet}\n */\n this.roughness = (cfg.roughness !== null && cfg.roughness !== undefined) ? cfg.roughness : 1;\n\n /**\n * Opacity of this XKTMesh.\n *\n * @type {Number}\n */\n this.opacity = (cfg.opacity !== undefined && cfg.opacity !== null) ? cfg.opacity : 1.0;\n\n /**\n * The {@link XKTTextureSet} that defines the appearance of this XKTMesh.\n *\n * @type {XKTTextureSet}\n */\n this.textureSet = cfg.textureSet;\n\n /**\n * The owner {@link XKTEntity}.\n *\n * Set by {@link XKTModel#createEntity}.\n *\n * @type {XKTEntity}\n */\n this.entity = null; // Set after instantiation, when the Entity is known\n }\n}\n\nexport {XKTMesh};","/**\n * A meta object within an {@link XKTModel}.\n *\n * These are plugged together into a parent-child hierarchy to represent structural\n * metadata for the {@link XKTModel}.\n *\n * The leaf XKTMetaObjects are usually associated with\n * an {@link XKTEntity}, which they do so by sharing the same ID,\n * ie. where {@link XKTMetaObject#metaObjectId} == {@link XKTEntity#entityId}.\n *\n * * Created by {@link XKTModel#createMetaObject}\n * * Stored in {@link XKTModel#metaObjects} and {@link XKTModel#metaObjectsList}\n * * Has an ID, a type, and a human-readable name\n * * May have a parent {@link XKTMetaObject}\n * * When no children, is usually associated with an {@link XKTEntity}\n *\n * @class XKTMetaObject\n */\nclass XKTMetaObject {\n\n /**\n * @private\n * @param metaObjectId\n * @param propertySetIds\n * @param metaObjectType\n * @param metaObjectName\n * @param parentMetaObjectId\n */\n constructor(metaObjectId, propertySetIds, metaObjectType, metaObjectName, parentMetaObjectId) {\n\n /**\n * Unique ID of this ````XKTMetaObject```` in {@link XKTModel#metaObjects}.\n *\n * For a BIM model, this will be an IFC product ID.\n *\n * If this is a leaf XKTMetaObject, where it is not a parent to any other XKTMetaObject,\n * then this will be equal to the ID of an {@link XKTEntity} in {@link XKTModel#entities},\n * ie. where {@link XKTMetaObject#metaObjectId} == {@link XKTEntity#entityId}.\n *\n * @type {String}\n */\n this.metaObjectId = metaObjectId;\n\n /**\n * Unique ID of one or more property sets that contains additional metadata about this\n * {@link XKTMetaObject}. The property sets can be stored in an external system, or\n * within the {@link XKTModel}, as {@link XKTPropertySet}s within {@link XKTModel#propertySets}.\n *\n * @type {String[]}\n */\n this.propertySetIds = propertySetIds;\n\n /**\n * Indicates the XKTMetaObject meta object type.\n *\n * This defaults to \"default\".\n *\n * @type {string}\n */\n this.metaObjectType = metaObjectType;\n\n /**\n * Indicates the XKTMetaObject meta object name.\n *\n * This defaults to {@link XKTMetaObject#metaObjectId}.\n *\n * @type {string}\n */\n this.metaObjectName = metaObjectName;\n\n /**\n * The parent XKTMetaObject, if any.\n *\n * Will be null if there is no parent.\n *\n * @type {String}\n */\n this.parentMetaObjectId = parentMetaObjectId;\n }\n}\n\nexport {XKTMetaObject};","import {math} from \"../lib/math.js\";\nimport {geometryCompression} from \"./lib/geometryCompression.js\";\nimport {buildEdgeIndices} from \"./lib/buildEdgeIndices.js\";\nimport {isTriangleMeshSolid} from \"./lib/isTriangleMeshSolid.js\";\n\nimport {XKTMesh} from './XKTMesh.js';\nimport {XKTGeometry} from './XKTGeometry.js';\nimport {XKTEntity} from './XKTEntity.js';\nimport {XKTTile} from './XKTTile.js';\nimport {KDNode} from \"./KDNode.js\";\nimport {XKTMetaObject} from \"./XKTMetaObject.js\";\nimport {XKTPropertySet} from \"./XKTPropertySet.js\";\nimport {mergeVertices} from \"../lib/mergeVertices.js\";\nimport {XKT_INFO} from \"../XKT_INFO.js\";\nimport {XKTTexture} from \"./XKTTexture\";\nimport {XKTTextureSet} from \"./XKTTextureSet\";\nimport {encode, load} from \"@loaders.gl/core\";\nimport {KTX2BasisWriter} from \"@loaders.gl/textures\";\nimport {ImageLoader} from '@loaders.gl/images';\n\nconst tempVec4a = math.vec4([0, 0, 0, 1]);\nconst tempVec4b = math.vec4([0, 0, 0, 1]);\n\nconst tempMat4 = math.mat4();\nconst tempMat4b = math.mat4();\n\nconst kdTreeDimLength = new Float64Array(3);\n\n// XKT texture types\n\nconst COLOR_TEXTURE = 0;\nconst METALLIC_ROUGHNESS_TEXTURE = 1;\nconst NORMALS_TEXTURE = 2;\nconst EMISSIVE_TEXTURE = 3;\nconst OCCLUSION_TEXTURE = 4;\n\n// KTX2 encoding options for each texture type\n\nconst TEXTURE_ENCODING_OPTIONS = {}\nTEXTURE_ENCODING_OPTIONS[COLOR_TEXTURE] = {\n useSRGB: true,\n qualityLevel: 50,\n encodeUASTC: true,\n mipmaps: true\n};\nTEXTURE_ENCODING_OPTIONS[EMISSIVE_TEXTURE] = {\n useSRGB: true,\n encodeUASTC: true,\n qualityLevel: 10,\n mipmaps: false\n};\nTEXTURE_ENCODING_OPTIONS[METALLIC_ROUGHNESS_TEXTURE] = {\n useSRGB: false,\n encodeUASTC: true,\n qualityLevel: 50,\n mipmaps: true // Needed for GGX roughness shading\n};\nTEXTURE_ENCODING_OPTIONS[NORMALS_TEXTURE] = {\n useSRGB: false,\n encodeUASTC: true,\n qualityLevel: 10,\n mipmaps: false\n};\nTEXTURE_ENCODING_OPTIONS[OCCLUSION_TEXTURE] = {\n useSRGB: false,\n encodeUASTC: true,\n qualityLevel: 10,\n mipmaps: false\n};\n\n/**\n * A document model that represents the contents of an .XKT file.\n *\n * * An XKTModel contains {@link XKTTile}s, which spatially subdivide the model into axis-aligned, box-shaped regions.\n * * Each {@link XKTTile} contains {@link XKTEntity}s, which represent the objects within its region.\n * * Each {@link XKTEntity} has {@link XKTMesh}s, which each have a {@link XKTGeometry}. Each {@link XKTGeometry} can be shared by multiple {@link XKTMesh}s.\n * * Import models into an XKTModel using {@link parseGLTFJSONIntoXKTModel}, {@link parseIFCIntoXKTModel}, {@link parseCityJSONIntoXKTModel} etc.\n * * Build an XKTModel programmatically using {@link XKTModel#createGeometry}, {@link XKTModel#createMesh} and {@link XKTModel#createEntity}.\n * * Serialize an XKTModel to an ArrayBuffer using {@link writeXKTModelToArrayBuffer}.\n *\n * ## Usage\n *\n * See [main docs page](/docs/#javascript-api) for usage examples.\n *\n * @class XKTModel\n */\nclass XKTModel {\n\n /**\n * Constructs a new XKTModel.\n *\n * @param {*} [cfg] Configuration\n * @param {Number} [cfg.edgeThreshold=10]\n * @param {Number} [cfg.minTileSize=500]\n */\n constructor(cfg = {}) {\n\n /**\n * The model's ID, if available.\n *\n * Will be \"default\" by default.\n *\n * @type {String}\n */\n this.modelId = cfg.modelId || \"default\";\n\n /**\n * The project ID, if available.\n *\n * Will be an empty string by default.\n *\n * @type {String}\n */\n this.projectId = cfg.projectId || \"\";\n\n /**\n * The revision ID, if available.\n *\n * Will be an empty string by default.\n *\n * @type {String}\n */\n this.revisionId = cfg.revisionId || \"\";\n\n /**\n * The model author, if available.\n *\n * Will be an empty string by default.\n *\n * @property author\n * @type {String}\n */\n this.author = cfg.author || \"\";\n\n /**\n * The date the model was created, if available.\n *\n * Will be an empty string by default.\n *\n * @property createdAt\n * @type {String}\n */\n this.createdAt = cfg.createdAt || \"\";\n\n /**\n * The application that created the model, if available.\n *\n * Will be an empty string by default.\n *\n * @property creatingApplication\n * @type {String}\n */\n this.creatingApplication = cfg.creatingApplication || \"\";\n\n /**\n * The model schema version, if available.\n *\n * In the case of IFC, this could be \"IFC2x3\" or \"IFC4\", for example.\n *\n * Will be an empty string by default.\n *\n * @property schema\n * @type {String}\n */\n this.schema = cfg.schema || \"\";\n\n /**\n * The XKT format version.\n *\n * @property xktVersion;\n * @type {number}\n */\n this.xktVersion = XKT_INFO.xktVersion;\n\n /**\n *\n * @type {Number|number}\n */\n this.edgeThreshold = cfg.edgeThreshold || 10;\n\n /**\n * Minimum diagonal size of the boundary of an {@link XKTTile}.\n *\n * @type {Number|number}\n */\n this.minTileSize = cfg.minTileSize || 500;\n\n /**\n * Optional overall AABB that contains all the {@link XKTEntity}s we'll create in this model, if previously known.\n *\n * This is the AABB of a complete set of input files that are provided as a split-model set for conversion.\n *\n * This is used to help the {@link XKTTile.aabb}s within split models align neatly with each other, as we\n * build them with a k-d tree in {@link XKTModel#finalize}. Without this, the AABBs of the different parts\n * tend to misalign slightly, resulting in excess number of {@link XKTTile}s, which degrades memory and rendering\n * performance when the XKT is viewer in the xeokit Viewer.\n */\n this.modelAABB = cfg.modelAABB;\n\n /**\n * Map of {@link XKTPropertySet}s within this XKTModel, each mapped to {@link XKTPropertySet#propertySetId}.\n *\n * Created by {@link XKTModel#createPropertySet}.\n *\n * @type {{String:XKTPropertySet}}\n */\n this.propertySets = {};\n\n /**\n * {@link XKTPropertySet}s within this XKTModel.\n *\n * Each XKTPropertySet holds its position in this list in {@link XKTPropertySet#propertySetIndex}.\n *\n * Created by {@link XKTModel#finalize}.\n *\n * @type {XKTPropertySet[]}\n */\n this.propertySetsList = [];\n\n /**\n * Map of {@link XKTMetaObject}s within this XKTModel, each mapped to {@link XKTMetaObject#metaObjectId}.\n *\n * Created by {@link XKTModel#createMetaObject}.\n *\n * @type {{String:XKTMetaObject}}\n */\n this.metaObjects = {};\n\n /**\n * {@link XKTMetaObject}s within this XKTModel.\n *\n * Each XKTMetaObject holds its position in this list in {@link XKTMetaObject#metaObjectIndex}.\n *\n * Created by {@link XKTModel#finalize}.\n *\n * @type {XKTMetaObject[]}\n */\n this.metaObjectsList = [];\n\n /**\n * The positions of all shared {@link XKTGeometry}s are de-quantized using this singular\n * de-quantization matrix.\n *\n * This de-quantization matrix is generated from the collective Local-space boundary of the\n * positions of all shared {@link XKTGeometry}s.\n *\n * @type {Float32Array}\n */\n this.reusedGeometriesDecodeMatrix = new Float32Array(16);\n\n /**\n * Map of {@link XKTGeometry}s within this XKTModel, each mapped to {@link XKTGeometry#geometryId}.\n *\n * Created by {@link XKTModel#createGeometry}.\n *\n * @type {{Number:XKTGeometry}}\n */\n this.geometries = {};\n\n /**\n * List of {@link XKTGeometry}s within this XKTModel, in the order they were created.\n *\n * Each XKTGeometry holds its position in this list in {@link XKTGeometry#geometryIndex}.\n *\n * Created by {@link XKTModel#finalize}.\n *\n * @type {XKTGeometry[]}\n */\n this.geometriesList = [];\n\n /**\n * Map of {@link XKTTexture}s within this XKTModel, each mapped to {@link XKTTexture#textureId}.\n *\n * Created by {@link XKTModel#createTexture}.\n *\n * @type {{Number:XKTTexture}}\n */\n this.textures = {};\n\n /**\n * List of {@link XKTTexture}s within this XKTModel, in the order they were created.\n *\n * Each XKTTexture holds its position in this list in {@link XKTTexture#textureIndex}.\n *\n * Created by {@link XKTModel#finalize}.\n *\n * @type {XKTTexture[]}\n */\n this.texturesList = [];\n\n /**\n * Map of {@link XKTTextureSet}s within this XKTModel, each mapped to {@link XKTTextureSet#textureSetId}.\n *\n * Created by {@link XKTModel#createTextureSet}.\n *\n * @type {{Number:XKTTextureSet}}\n */\n this.textureSets = {};\n\n /**\n * List of {@link XKTTextureSet}s within this XKTModel, in the order they were created.\n *\n * Each XKTTextureSet holds its position in this list in {@link XKTTextureSet#textureSetIndex}.\n *\n * Created by {@link XKTModel#finalize}.\n *\n * @type {XKTTextureSet[]}\n */\n this.textureSetsList = [];\n\n /**\n * Map of {@link XKTMesh}s within this XKTModel, each mapped to {@link XKTMesh#meshId}.\n *\n * Created by {@link XKTModel#createMesh}.\n *\n * @type {{Number:XKTMesh}}\n */\n this.meshes = {};\n\n /**\n * List of {@link XKTMesh}s within this XKTModel, in the order they were created.\n *\n * Each XKTMesh holds its position in this list in {@link XKTMesh#meshIndex}.\n *\n * Created by {@link XKTModel#finalize}.\n *\n * @type {XKTMesh[]}\n */\n this.meshesList = [];\n\n /**\n * Map of {@link XKTEntity}s within this XKTModel, each mapped to {@link XKTEntity#entityId}.\n *\n * Created by {@link XKTModel#createEntity}.\n *\n * @type {{String:XKTEntity}}\n */\n this.entities = {};\n\n /**\n * {@link XKTEntity}s within this XKTModel.\n *\n * Each XKTEntity holds its position in this list in {@link XKTEntity#entityIndex}.\n *\n * Created by {@link XKTModel#finalize}.\n *\n * @type {XKTEntity[]}\n */\n this.entitiesList = [];\n\n /**\n * {@link XKTTile}s within this XKTModel.\n *\n * Created by {@link XKTModel#finalize}.\n *\n * @type {XKTTile[]}\n */\n this.tilesList = [];\n\n /**\n * The axis-aligned 3D World-space boundary of this XKTModel.\n *\n * Created by {@link XKTModel#finalize}.\n *\n * @type {Float64Array}\n */\n this.aabb = math.AABB3();\n\n /**\n * Indicates if this XKTModel has been finalized.\n *\n * Set ````true```` by {@link XKTModel#finalize}.\n *\n * @type {boolean}\n */\n this.finalized = false;\n }\n\n /**\n * Creates an {@link XKTPropertySet} within this XKTModel.\n *\n * Logs error and does nothing if this XKTModel has been finalized (see {@link XKTModel#finalized}).\n *\n * @param {*} params Method parameters.\n * @param {String} params.propertySetId Unique ID for the {@link XKTPropertySet}.\n * @param {String} [params.propertySetType=\"default\"] A meta type for the {@link XKTPropertySet}.\n * @param {String} [params.propertySetName] Human-readable name for the {@link XKTPropertySet}. Defaults to the ````propertySetId```` parameter.\n * @param {String[]} params.properties Properties for the {@link XKTPropertySet}.\n * @returns {XKTPropertySet} The new {@link XKTPropertySet}.\n */\n createPropertySet(params) {\n\n if (!params) {\n throw \"[XKTModel.createPropertySet] Parameters expected: params\";\n }\n\n if (params.propertySetId === null || params.propertySetId === undefined) {\n throw \"[XKTModel.createPropertySet] Parameter expected: params.propertySetId\";\n }\n\n if (params.properties === null || params.properties === undefined) {\n throw \"[XKTModel.createPropertySet] Parameter expected: params.properties\";\n }\n\n if (this.finalized) {\n console.error(\"XKTModel has been finalized, can't add more property sets\");\n return;\n }\n\n if (this.propertySets[params.propertySetId]) {\n // console.error(\"XKTPropertySet already exists with this ID: \" + params.propertySetId);\n return;\n }\n\n const propertySetId = params.propertySetId;\n const propertySetType = params.propertySetType || \"Default\";\n const propertySetName = params.propertySetName || params.propertySetId;\n const properties = params.properties || [];\n\n const propertySet = new XKTPropertySet(propertySetId, propertySetType, propertySetName, properties);\n\n this.propertySets[propertySetId] = propertySet;\n this.propertySetsList.push(propertySet);\n\n return propertySet;\n }\n\n /**\n * Creates an {@link XKTMetaObject} within this XKTModel.\n *\n * Logs error and does nothing if this XKTModel has been finalized (see {@link XKTModel#finalized}).\n *\n * @param {*} params Method parameters.\n * @param {String} params.metaObjectId Unique ID for the {@link XKTMetaObject}.\n * @param {String} params.propertySetIds ID of one or more property sets that contains additional metadata about\n * this {@link XKTMetaObject}. The property sets could be stored externally (ie not managed at all by the XKT file),\n * or could be {@link XKTPropertySet}s within {@link XKTModel#propertySets}.\n * @param {String} [params.metaObjectType=\"default\"] A meta type for the {@link XKTMetaObject}. Can be anything,\n * but is usually an IFC type, such as \"IfcSite\" or \"IfcWall\".\n * @param {String} [params.metaObjectName] Human-readable name for the {@link XKTMetaObject}. Defaults to the ````metaObjectId```` parameter.\n * @param {String} [params.parentMetaObjectId] ID of the parent {@link XKTMetaObject}, if any. Defaults to the ````metaObjectId```` parameter.\n * @returns {XKTMetaObject} The new {@link XKTMetaObject}.\n */\n createMetaObject(params) {\n\n if (!params) {\n throw \"[XKTModel.createMetaObject] Parameters expected: params\";\n }\n\n if (params.metaObjectId === null || params.metaObjectId === undefined) {\n throw \"[XKTModel.createMetaObject] Parameter expected: params.metaObjectId\";\n }\n\n if (this.finalized) {\n console.error(\"XKTModel has been finalized, can't add more meta objects\");\n return;\n }\n\n if (this.metaObjects[params.metaObjectId]) {\n // console.error(\"XKTMetaObject already exists with this ID: \" + params.metaObjectId);\n return;\n }\n\n const metaObjectId = params.metaObjectId;\n const propertySetIds = params.propertySetIds;\n const metaObjectType = params.metaObjectType || \"Default\";\n const metaObjectName = params.metaObjectName || params.metaObjectId;\n const parentMetaObjectId = params.parentMetaObjectId;\n\n const metaObject = new XKTMetaObject(metaObjectId, propertySetIds, metaObjectType, metaObjectName, parentMetaObjectId);\n\n this.metaObjects[metaObjectId] = metaObject;\n this.metaObjectsList.push(metaObject);\n\n if (!parentMetaObjectId) {\n if (!this._rootMetaObject) {\n this._rootMetaObject = metaObject;\n }\n }\n\n return metaObject;\n }\n\n /**\n * Creates an {@link XKTTexture} within this XKTModel.\n *\n * Registers the new {@link XKTTexture} in {@link XKTModel#textures} and {@link XKTModel#texturesList}.\n *\n * Logs error and does nothing if this XKTModel has been finalized (see {@link XKTModel#finalized}).\n *\n * @param {*} params Method parameters.\n * @param {Number} params.textureId Unique ID for the {@link XKTTexture}.\n * @param {String} [params.src] Source of an image file for the texture.\n * @param {Buffer} [params.imageData] Image data for the texture.\n * @param {Number} [params.mediaType] Media type (ie. MIME type) of ````imageData````. Supported values are {@link GIFMediaType}, {@link PNGMediaType} and {@link JPEGMediaType}.\n * @param {Number} [params.width] Texture width, used with ````imageData````. Ignored for compressed textures.\n * @param {Number} [params.height] Texture height, used with ````imageData````. Ignored for compressed textures.\n * @param {Boolean} [params.compressed=true] Whether to compress the texture.\n * @param {Number} [params.minFilter=LinearMipMapNearestFilter] How the texture is sampled when a texel covers less than one pixel. Supported\n * values are {@link LinearMipmapLinearFilter}, {@link LinearMipMapNearestFilter}, {@link NearestMipMapNearestFilter},\n * {@link NearestMipMapLinearFilter} and {@link LinearMipMapLinearFilter}. Ignored for compressed textures.\n * @param {Number} [params.magFilter=LinearMipMapNearestFilter] How the texture is sampled when a texel covers more than one pixel. Supported values\n * are {@link LinearFilter} and {@link NearestFilter}. Ignored for compressed textures.\n * @param {Number} [params.wrapS=RepeatWrapping] Wrap parameter for texture coordinate *S*. Supported values are {@link ClampToEdgeWrapping},\n * {@link MirroredRepeatWrapping} and {@link RepeatWrapping}. Ignored for compressed textures.\n * @param {Number} [params.wrapT=RepeatWrapping] Wrap parameter for texture coordinate *T*. Supported values are {@link ClampToEdgeWrapping},\n * {@link MirroredRepeatWrapping} and {@link RepeatWrapping}. Ignored for compressed textures.\n * {@param {Number} [params.wrapR=RepeatWrapping] Wrap parameter for texture coordinate *R*. Supported values are {@link ClampToEdgeWrapping},\n * {@link MirroredRepeatWrapping} and {@link RepeatWrapping}. Ignored for compressed textures.\n * @returns {XKTTexture} The new {@link XKTTexture}.\n */\n createTexture(params) {\n\n if (!params) {\n throw \"[XKTModel.createTexture] Parameters expected: params\";\n }\n\n if (params.textureId === null || params.textureId === undefined) {\n throw \"[XKTModel.createTexture] Parameter expected: params.textureId\";\n }\n\n if (!params.imageData && !params.src) {\n throw \"[XKTModel.createTexture] Parameter expected: params.imageData or params.src\";\n }\n\n if (this.finalized) {\n console.error(\"XKTModel has been finalized, can't add more textures\");\n return;\n }\n\n if (this.textures[params.textureId]) {\n console.error(\"XKTTexture already exists with this ID: \" + params.textureId);\n return;\n }\n\n if (params.src) {\n const fileExt = params.src.split('.').pop();\n if (fileExt !== \"jpg\" && fileExt !== \"jpeg\" && fileExt !== \"png\") {\n console.error(`XKTModel does not support image files with extension '${fileExt}' - won't create texture '${params.textureId}`);\n return;\n }\n }\n\n const textureId = params.textureId;\n\n const texture = new XKTTexture({\n textureId,\n imageData: params.imageData,\n mediaType: params.mediaType,\n minFilter: params.minFilter,\n magFilter: params.magFilter,\n wrapS: params.wrapS,\n wrapT: params.wrapT,\n wrapR: params.wrapR,\n width: params.width,\n height: params.height,\n compressed: (params.compressed !== false),\n src: params.src\n });\n\n this.textures[textureId] = texture;\n this.texturesList.push(texture);\n\n return texture;\n }\n\n /**\n * Creates an {@link XKTTextureSet} within this XKTModel.\n *\n * Registers the new {@link XKTTextureSet} in {@link XKTModel#textureSets} and {@link XKTModel#.textureSetsList}.\n *\n * Logs error and does nothing if this XKTModel has been finalized (see {@link XKTModel#finalized}).\n *\n * @param {*} params Method parameters.\n * @param {Number} params.textureSetId Unique ID for the {@link XKTTextureSet}.\n * @param {*} [params.colorTextureId] ID of *RGBA* base color {@link XKTTexture}, with color in *RGB* and alpha in *A*.\n * @param {*} [params.metallicRoughnessTextureId] ID of *RGBA* metal-roughness {@link XKTTexture}, with the metallic factor in *R*, and roughness factor in *G*.\n * @param {*} [params.normalsTextureId] ID of *RGBA* normal {@link XKTTexture}, with normal map vectors in *RGB*.\n * @param {*} [params.emissiveTextureId] ID of *RGBA* emissive {@link XKTTexture}, with emissive color in *RGB*.\n * @param {*} [params.occlusionTextureId] ID of *RGBA* occlusion {@link XKTTexture}, with occlusion factor in *R*.\n * @returns {XKTTextureSet} The new {@link XKTTextureSet}.\n */\n createTextureSet(params) {\n\n if (!params) {\n throw \"[XKTModel.createTextureSet] Parameters expected: params\";\n }\n\n if (params.textureSetId === null || params.textureSetId === undefined) {\n throw \"[XKTModel.createTextureSet] Parameter expected: params.textureSetId\";\n }\n\n if (this.finalized) {\n console.error(\"XKTModel has been finalized, can't add more textureSets\");\n return;\n }\n\n if (this.textureSets[params.textureSetId]) {\n console.error(\"XKTTextureSet already exists with this ID: \" + params.textureSetId);\n return;\n }\n\n let colorTexture;\n if (params.colorTextureId !== undefined && params.colorTextureId !== null) {\n colorTexture = this.textures[params.colorTextureId];\n if (!colorTexture) {\n console.error(`Texture not found: ${params.colorTextureId} - ensure that you create it first with createTexture()`);\n return;\n }\n colorTexture.channel = COLOR_TEXTURE;\n }\n\n let metallicRoughnessTexture;\n if (params.metallicRoughnessTextureId !== undefined && params.metallicRoughnessTextureId !== null) {\n metallicRoughnessTexture = this.textures[params.metallicRoughnessTextureId];\n if (!metallicRoughnessTexture) {\n console.error(`Texture not found: ${params.metallicRoughnessTextureId} - ensure that you create it first with createTexture()`);\n return;\n }\n metallicRoughnessTexture.channel = METALLIC_ROUGHNESS_TEXTURE;\n }\n\n let normalsTexture;\n if (params.normalsTextureId !== undefined && params.normalsTextureId !== null) {\n normalsTexture = this.textures[params.normalsTextureId];\n if (!normalsTexture) {\n console.error(`Texture not found: ${params.normalsTextureId} - ensure that you create it first with createTexture()`);\n return;\n }\n normalsTexture.channel = NORMALS_TEXTURE;\n }\n\n let emissiveTexture;\n if (params.emissiveTextureId !== undefined && params.emissiveTextureId !== null) {\n emissiveTexture = this.textures[params.emissiveTextureId];\n if (!emissiveTexture) {\n console.error(`Texture not found: ${params.emissiveTextureId} - ensure that you create it first with createTexture()`);\n return;\n }\n emissiveTexture.channel = EMISSIVE_TEXTURE;\n }\n\n let occlusionTexture;\n if (params.occlusionTextureId !== undefined && params.occlusionTextureId !== null) {\n occlusionTexture = this.textures[params.occlusionTextureId];\n if (!occlusionTexture) {\n console.error(`Texture not found: ${params.occlusionTextureId} - ensure that you create it first with createTexture()`);\n return;\n }\n occlusionTexture.channel = OCCLUSION_TEXTURE;\n }\n\n const textureSet = new XKTTextureSet({\n textureSetId: params.textureSetId,\n textureSetIndex: this.textureSetsList.length,\n colorTexture,\n metallicRoughnessTexture,\n normalsTexture,\n emissiveTexture,\n occlusionTexture\n });\n\n this.textureSets[params.textureSetId] = textureSet;\n this.textureSetsList.push(textureSet);\n\n return textureSet;\n }\n\n /**\n * Creates an {@link XKTGeometry} within this XKTModel.\n *\n * Registers the new {@link XKTGeometry} in {@link XKTModel#geometries} and {@link XKTModel#geometriesList}.\n *\n * Logs error and does nothing if this XKTModel has been finalized (see {@link XKTModel#finalized}).\n *\n * @param {*} params Method parameters.\n * @param {Number} params.geometryId Unique ID for the {@link XKTGeometry}.\n * @param {String} params.primitiveType The type of {@link XKTGeometry}: \"triangles\", \"lines\" or \"points\".\n * @param {Float64Array} params.positions Floating-point Local-space vertex positions for the {@link XKTGeometry}. Required for all primitive types.\n * @param {Number[]} [params.normals] Floating-point vertex normals for the {@link XKTGeometry}. Only used with triangles primitives. Ignored for points and lines.\n * @param {Number[]} [params.colors] Floating-point RGBA vertex colors for the {@link XKTGeometry}. Required for points primitives. Ignored for lines and triangles.\n * @param {Number[]} [params.colorsCompressed] Integer RGBA vertex colors for the {@link XKTGeometry}. Required for points primitives. Ignored for lines and triangles.\n * @param {Number[]} [params.uvs] Floating-point vertex UV coordinates for the {@link XKTGeometry}. Alias for ````uv````.\n * @param {Number[]} [params.uv] Floating-point vertex UV coordinates for the {@link XKTGeometry}. Alias for ````uvs````.\n * @param {Number[]} [params.colorsCompressed] Integer RGBA vertex colors for the {@link XKTGeometry}. Required for points primitives. Ignored for lines and triangles.\n * @param {Uint32Array} [params.indices] Indices for the {@link XKTGeometry}. Required for triangles and lines primitives. Ignored for points.\n * @param {Number} [params.edgeThreshold=10]\n * @returns {XKTGeometry} The new {@link XKTGeometry}.\n */\n createGeometry(params) {\n\n if (!params) {\n throw \"[XKTModel.createGeometry] Parameters expected: params\";\n }\n\n if (params.geometryId === null || params.geometryId === undefined) {\n throw \"[XKTModel.createGeometry] Parameter expected: params.geometryId\";\n }\n\n if (!params.primitiveType) {\n throw \"[XKTModel.createGeometry] Parameter expected: params.primitiveType\";\n }\n\n if (!params.positions) {\n throw \"[XKTModel.createGeometry] Parameter expected: params.positions\";\n }\n\n const triangles = params.primitiveType === \"triangles\";\n const points = params.primitiveType === \"points\";\n const lines = params.primitiveType === \"lines\";\n const line_strip = params.primitiveType === \"line-strip\";\n const line_loop = params.primitiveType === \"line-loop\";\n const triangle_strip = params.primitiveType === \"triangle-strip\";\n const triangle_fan = params.primitiveType === \"triangle-fan\";\n\n if (!triangles && !points && !lines && !line_strip && !line_loop) {\n throw \"[XKTModel.createGeometry] Unsupported value for params.primitiveType: \"\n + params.primitiveType\n + \"' - supported values are 'triangles', 'points', 'lines', 'line-strip', 'triangle-strip' and 'triangle-fan\";\n }\n\n if (triangles) {\n if (!params.indices) {\n params.indices = this._createDefaultIndices()\n throw \"[XKTModel.createGeometry] Parameter expected for 'triangles' primitive: params.indices\";\n }\n }\n\n if (points) {\n if (!params.colors && !params.colorsCompressed) {\n console.error(\"[XKTModel.createGeometry] Parameter expected for 'points' primitive: params.colors or params.colorsCompressed\");\n return;\n }\n }\n\n if (lines) {\n if (!params.indices) {\n throw \"[XKTModel.createGeometry] Parameter expected for 'lines' primitive: params.indices\";\n }\n }\n\n if (this.finalized) {\n console.error(\"XKTModel has been finalized, can't add more geometries\");\n return;\n }\n\n if (this.geometries[params.geometryId]) {\n console.error(\"XKTGeometry already exists with this ID: \" + params.geometryId);\n return;\n }\n\n const geometryId = params.geometryId;\n const primitiveType = params.primitiveType;\n const positions = new Float64Array(params.positions); // May modify in #finalize\n\n const xktGeometryCfg = {\n geometryId: geometryId,\n geometryIndex: this.geometriesList.length,\n primitiveType: primitiveType,\n positions: positions,\n uvs: params.uvs || params.uv\n }\n\n if (triangles) {\n if (params.normals) {\n xktGeometryCfg.normals = new Float32Array(params.normals);\n }\n if (params.indices) {\n xktGeometryCfg.indices = params.indices;\n } else {\n xktGeometryCfg.indices = this._createDefaultIndices(positions.length / 3);\n }\n }\n\n if (points) {\n if (params.colorsCompressed) {\n xktGeometryCfg.colorsCompressed = new Uint8Array(params.colorsCompressed);\n\n } else {\n const colors = params.colors;\n const colorsCompressed = new Uint8Array(colors.length);\n for (let i = 0, len = colors.length; i < len; i++) {\n colorsCompressed[i] = Math.floor(colors[i] * 255);\n }\n xktGeometryCfg.colorsCompressed = colorsCompressed;\n }\n }\n\n if (lines) {\n xktGeometryCfg.indices = params.indices;\n }\n\n if (triangles) {\n\n if (!params.normals && !params.uv && !params.uvs) {\n\n // Building models often duplicate positions to allow face-aligned vertex normals; when we're not\n // providing normals for a geometry, it becomes possible to merge duplicate vertex positions within it.\n\n // TODO: Make vertex merging also merge normals?\n\n const mergedPositions = [];\n const mergedIndices = [];\n mergeVertices(xktGeometryCfg.positions, xktGeometryCfg.indices, mergedPositions, mergedIndices);\n xktGeometryCfg.positions = new Float64Array(mergedPositions);\n xktGeometryCfg.indices = mergedIndices;\n }\n\n xktGeometryCfg.edgeIndices = buildEdgeIndices(xktGeometryCfg.positions, xktGeometryCfg.indices, null, params.edgeThreshold || this.edgeThreshold || 10);\n }\n\n const geometry = new XKTGeometry(xktGeometryCfg);\n\n this.geometries[geometryId] = geometry;\n this.geometriesList.push(geometry);\n\n return geometry;\n }\n\n _createDefaultIndices(numIndices) {\n const indices = [];\n for (let i = 0; i < numIndices; i++) {\n indices.push(i);\n }\n return indices;\n }\n\n /**\n * Creates an {@link XKTMesh} within this XKTModel.\n *\n * An {@link XKTMesh} can be owned by one {@link XKTEntity}, which can own multiple {@link XKTMesh}es.\n *\n * Registers the new {@link XKTMesh} in {@link XKTModel#meshes} and {@link XKTModel#meshesList}.\n *\n * @param {*} params Method parameters.\n * @param {Number} params.meshId Unique ID for the {@link XKTMesh}.\n * @param {Number} params.geometryId ID of an existing {@link XKTGeometry} in {@link XKTModel#geometries}.\n * @param {Number} [params.textureSetId] Unique ID of an {@link XKTTextureSet} in {@link XKTModel#textureSets}.\n * @param {Float32Array} params.color RGB color for the {@link XKTMesh}, with each color component in range [0..1].\n * @param {Number} [params.metallic=0] How metallic the {@link XKTMesh} is, in range [0..1]. A value of ````0```` indicates fully dielectric material, while ````1```` indicates fully metallic.\n * @param {Number} [params.roughness=1] How rough the {@link XKTMesh} is, in range [0..1]. A value of ````0```` indicates fully smooth, while ````1```` indicates fully rough.\n * @param {Number} params.opacity Opacity factor for the {@link XKTMesh}, in range [0..1].\n * @param {Float64Array} [params.matrix] Modeling matrix for the {@link XKTMesh}. Overrides ````position````, ````scale```` and ````rotation```` parameters.\n * @param {Number[]} [params.position=[0,0,0]] Position of the {@link XKTMesh}. Overridden by the ````matrix```` parameter.\n * @param {Number[]} [params.scale=[1,1,1]] Scale of the {@link XKTMesh}. Overridden by the ````matrix```` parameter.\n * @param {Number[]} [params.rotation=[0,0,0]] Rotation of the {@link XKTMesh} as Euler angles given in degrees, for each of the X, Y and Z axis. Overridden by the ````matrix```` parameter.\n * @returns {XKTMesh} The new {@link XKTMesh}.\n */\n createMesh(params) {\n\n if (params.meshId === null || params.meshId === undefined) {\n throw \"[XKTModel.createMesh] Parameter expected: params.meshId\";\n }\n\n if (params.geometryId === null || params.geometryId === undefined) {\n throw \"[XKTModel.createMesh] Parameter expected: params.geometryId\";\n }\n\n if (this.finalized) {\n throw \"[XKTModel.createMesh] XKTModel has been finalized, can't add more meshes\";\n }\n\n if (this.meshes[params.meshId]) {\n console.error(\"XKTMesh already exists with this ID: \" + params.meshId);\n return;\n }\n\n const geometry = this.geometries[params.geometryId];\n\n if (!geometry) {\n console.error(\"XKTGeometry not found: \" + params.geometryId);\n return;\n }\n\n geometry.numInstances++;\n\n let textureSet = null;\n if (params.textureSetId) {\n textureSet = this.textureSets[params.textureSetId];\n if (!textureSet) {\n console.error(\"XKTTextureSet not found: \" + params.textureSetId);\n return;\n }\n textureSet.numInstances++;\n }\n\n let matrix = params.matrix;\n\n if (!matrix) {\n\n const position = params.position;\n const scale = params.scale;\n const rotation = params.rotation;\n\n if (position || scale || rotation) {\n matrix = math.identityMat4();\n const quaternion = math.eulerToQuaternion(rotation || [0, 0, 0], \"XYZ\", math.identityQuaternion());\n math.composeMat4(position || [0, 0, 0], quaternion, scale || [1, 1, 1], matrix)\n\n } else {\n matrix = math.identityMat4();\n }\n }\n\n const meshIndex = this.meshesList.length;\n\n const mesh = new XKTMesh({\n meshId: params.meshId,\n meshIndex,\n matrix,\n geometry,\n color: params.color,\n metallic: params.metallic,\n roughness: params.roughness,\n opacity: params.opacity,\n textureSet\n });\n\n this.meshes[mesh.meshId] = mesh;\n this.meshesList.push(mesh);\n\n return mesh;\n }\n\n /**\n * Creates an {@link XKTEntity} within this XKTModel.\n *\n * Registers the new {@link XKTEntity} in {@link XKTModel#entities} and {@link XKTModel#entitiesList}.\n *\n * Logs error and does nothing if this XKTModel has been finalized (see {@link XKTModel#finalized}).\n *\n * @param {*} params Method parameters.\n * @param {String} params.entityId Unique ID for the {@link XKTEntity}.\n * @param {String[]} params.meshIds IDs of {@link XKTMesh}es used by the {@link XKTEntity}. Note that each {@link XKTMesh} can only be used by one {@link XKTEntity}.\n * @returns {XKTEntity} The new {@link XKTEntity}.\n */\n createEntity(params) {\n\n if (!params) {\n throw \"[XKTModel.createEntity] Parameters expected: params\";\n }\n\n if (params.entityId === null || params.entityId === undefined) {\n throw \"[XKTModel.createEntity] Parameter expected: params.entityId\";\n }\n\n if (!params.meshIds) {\n throw \"[XKTModel.createEntity] Parameter expected: params.meshIds\";\n }\n\n if (this.finalized) {\n console.error(\"XKTModel has been finalized, can't add more entities\");\n return;\n }\n\n if (params.meshIds.length === 0) {\n console.warn(\"XKTEntity has no meshes - won't create: \" + params.entityId);\n return;\n }\n\n let entityId = params.entityId;\n\n if (this.entities[entityId]) {\n while (this.entities[entityId]) {\n entityId = math.createUUID();\n }\n console.error(\"XKTEntity already exists with this ID: \" + params.entityId + \" - substituting random ID instead: \" + entityId);\n }\n\n const meshIds = params.meshIds;\n const meshes = [];\n\n for (let meshIdIdx = 0, meshIdLen = meshIds.length; meshIdIdx < meshIdLen; meshIdIdx++) {\n\n const meshId = meshIds[meshIdIdx];\n const mesh = this.meshes[meshId];\n\n if (!mesh) {\n console.error(\"XKTMesh found: \" + meshId);\n continue;\n }\n\n if (mesh.entity) {\n console.error(\"XKTMesh \" + meshId + \" already used by XKTEntity \" + mesh.entity.entityId);\n continue;\n }\n\n meshes.push(mesh);\n }\n\n const entity = new XKTEntity(entityId, meshes);\n\n for (let i = 0, len = meshes.length; i < len; i++) {\n const mesh = meshes[i];\n mesh.entity = entity;\n }\n\n this.entities[entityId] = entity;\n this.entitiesList.push(entity);\n\n return entity;\n }\n\n /**\n * Creates a default {@link XKTMetaObject} for each {@link XKTEntity} that does not already have one.\n */\n createDefaultMetaObjects() {\n\n for (let i = 0, len = this.entitiesList.length; i < len; i++) {\n\n const entity = this.entitiesList[i];\n const metaObjectId = entity.entityId;\n const metaObject = this.metaObjects[metaObjectId];\n\n if (!metaObject) {\n\n if (!this._rootMetaObject) {\n this._rootMetaObject = this.createMetaObject({\n metaObjectId: this.modelId,\n metaObjectType: \"Default\",\n metaObjectName: this.modelId\n });\n }\n\n this.createMetaObject({\n metaObjectId: metaObjectId,\n metaObjectType: \"Default\",\n metaObjectName: \"\" + metaObjectId,\n parentMetaObjectId: this._rootMetaObject.metaObjectId\n });\n }\n }\n }\n\n /**\n * Finalizes this XKTModel.\n *\n * After finalizing, we may then serialize the model to an array buffer using {@link writeXKTModelToArrayBuffer}.\n *\n * Logs error and does nothing if this XKTModel has already been finalized.\n *\n * Internally, this method:\n *\n * * for each {@link XKTEntity} that doesn't already have a {@link XKTMetaObject}, creates one with {@link XKTMetaObject#metaObjectType} set to \"default\"\n * * sets each {@link XKTEntity}'s {@link XKTEntity#hasReusedGeometries} true if it shares its {@link XKTGeometry}s with other {@link XKTEntity}s,\n * * creates each {@link XKTEntity}'s {@link XKTEntity#aabb},\n * * creates {@link XKTTile}s in {@link XKTModel#tilesList}, and\n * * sets {@link XKTModel#finalized} ````true````.\n */\n async finalize() {\n\n if (this.finalized) {\n console.log(\"XKTModel already finalized\");\n return;\n }\n\n this._removeUnusedTextures();\n\n await this._compressTextures();\n\n this._bakeSingleUseGeometryPositions();\n\n this._bakeAndOctEncodeNormals();\n\n this._createEntityAABBs();\n\n const rootKDNode = this._createKDTree();\n\n this.entitiesList = [];\n\n this._createTilesFromKDTree(rootKDNode);\n\n this._createReusedGeometriesDecodeMatrix();\n\n this._flagSolidGeometries();\n\n this.aabb.set(rootKDNode.aabb);\n\n this.finalized = true;\n }\n\n _removeUnusedTextures() {\n let texturesList = [];\n const textures = {};\n for (let i = 0, leni = this.texturesList.length; i < leni; i++) {\n const texture = this.texturesList[i];\n if (texture.channel !== null) {\n texture.textureIndex = texturesList.length;\n texturesList.push(texture);\n textures[texture.textureId] = texture;\n }\n }\n this.texturesList = texturesList;\n this.textures = textures;\n }\n\n _compressTextures() {\n let countTextures = this.texturesList.length;\n return new Promise((resolve) => {\n if (countTextures === 0) {\n resolve();\n return;\n }\n for (let i = 0, leni = this.texturesList.length; i < leni; i++) {\n const texture = this.texturesList[i];\n const encodingOptions = TEXTURE_ENCODING_OPTIONS[texture.channel] || {};\n\n if (texture.src) {\n\n // XKTTexture created with XKTModel#createTexture({ src: ... })\n\n const src = texture.src;\n const fileExt = src.split('.').pop();\n switch (fileExt) {\n case \"jpeg\":\n case \"jpg\":\n case \"png\":\n load(src, ImageLoader, {\n image: {\n type: \"data\"\n }\n }).then((imageData) => {\n if (texture.compressed) {\n encode(imageData, KTX2BasisWriter, encodingOptions).then((encodedData) => {\n const encodedImageData = new Uint8Array(encodedData);\n texture.imageData = encodedImageData;\n if (--countTextures <= 0) {\n resolve();\n }\n }).catch((err) => {\n console.error(\"[XKTModel.finalize] Failed to encode image: \" + err);\n if (--countTextures <= 0) {\n resolve();\n }\n });\n } else {\n texture.imageData = new Uint8Array(1);\n if (--countTextures <= 0) {\n resolve();\n }\n }\n }).catch((err) => {\n console.error(\"[XKTModel.finalize] Failed to load image: \" + err);\n if (--countTextures <= 0) {\n resolve();\n }\n });\n break;\n default:\n if (--countTextures <= 0) {\n resolve();\n }\n break;\n }\n }\n\n if (texture.imageData) {\n\n // XKTTexture created with XKTModel#createTexture({ imageData: ... })\n\n if (texture.compressed) {\n encode(texture.imageData, KTX2BasisWriter, encodingOptions)\n .then((encodedImageData) => {\n texture.imageData = new Uint8Array(encodedImageData);\n if (--countTextures <= 0) {\n resolve();\n }\n }).catch((err) => {\n console.error(\"[XKTModel.finalize] Failed to encode image: \" + err);\n if (--countTextures <= 0) {\n resolve();\n }\n });\n } else {\n texture.imageData = new Uint8Array(1);\n if (--countTextures <= 0) {\n resolve();\n }\n }\n }\n }\n });\n }\n\n _bakeSingleUseGeometryPositions() {\n\n for (let j = 0, lenj = this.meshesList.length; j < lenj; j++) {\n\n const mesh = this.meshesList[j];\n\n const geometry = mesh.geometry;\n\n if (geometry.numInstances === 1) {\n\n const matrix = mesh.matrix;\n\n if (matrix && (!math.isIdentityMat4(matrix))) {\n\n const positions = geometry.positions;\n\n for (let i = 0, len = positions.length; i < len; i += 3) {\n\n tempVec4a[0] = positions[i + 0];\n tempVec4a[1] = positions[i + 1];\n tempVec4a[2] = positions[i + 2];\n tempVec4a[3] = 1;\n\n math.transformPoint4(matrix, tempVec4a, tempVec4b);\n\n positions[i + 0] = tempVec4b[0];\n positions[i + 1] = tempVec4b[1];\n positions[i + 2] = tempVec4b[2];\n }\n }\n }\n }\n }\n\n _bakeAndOctEncodeNormals() {\n\n for (let i = 0, len = this.meshesList.length; i < len; i++) {\n\n const mesh = this.meshesList[i];\n const geometry = mesh.geometry;\n\n if (geometry.normals && !geometry.normalsOctEncoded) {\n\n geometry.normalsOctEncoded = new Int8Array(geometry.normals.length);\n\n if (geometry.numInstances > 1) {\n geometryCompression.octEncodeNormals(geometry.normals, geometry.normals.length, geometry.normalsOctEncoded, 0);\n\n } else {\n const modelNormalMatrix = math.inverseMat4(math.transposeMat4(mesh.matrix, tempMat4), tempMat4b);\n geometryCompression.transformAndOctEncodeNormals(modelNormalMatrix, geometry.normals, geometry.normals.length, geometry.normalsOctEncoded, 0);\n }\n }\n }\n }\n\n _createEntityAABBs() {\n\n for (let i = 0, len = this.entitiesList.length; i < len; i++) {\n\n const entity = this.entitiesList[i];\n const entityAABB = entity.aabb;\n const meshes = entity.meshes;\n\n math.collapseAABB3(entityAABB);\n\n for (let j = 0, lenj = meshes.length; j < lenj; j++) {\n\n const mesh = meshes[j];\n const geometry = mesh.geometry;\n const matrix = mesh.matrix;\n\n if (geometry.numInstances > 1) {\n\n const positions = geometry.positions;\n for (let i = 0, len = positions.length; i < len; i += 3) {\n tempVec4a[0] = positions[i + 0];\n tempVec4a[1] = positions[i + 1];\n tempVec4a[2] = positions[i + 2];\n tempVec4a[3] = 1;\n math.transformPoint4(matrix, tempVec4a, tempVec4b);\n math.expandAABB3Point3(entityAABB, tempVec4b);\n }\n\n } else {\n\n const positions = geometry.positions;\n for (let i = 0, len = positions.length; i < len; i += 3) {\n tempVec4a[0] = positions[i + 0];\n tempVec4a[1] = positions[i + 1];\n tempVec4a[2] = positions[i + 2];\n math.expandAABB3Point3(entityAABB, tempVec4a);\n }\n }\n }\n }\n }\n\n _createKDTree() {\n\n let aabb;\n if (this.modelAABB) {\n aabb = this.modelAABB; // Pre-known uber AABB\n } else {\n aabb = math.collapseAABB3();\n for (let i = 0, len = this.entitiesList.length; i < len; i++) {\n const entity = this.entitiesList[i];\n math.expandAABB3(aabb, entity.aabb);\n }\n }\n\n const rootKDNode = new KDNode(aabb);\n\n for (let i = 0, len = this.entitiesList.length; i < len; i++) {\n const entity = this.entitiesList[i];\n this._insertEntityIntoKDTree(rootKDNode, entity);\n }\n\n return rootKDNode;\n }\n\n _insertEntityIntoKDTree(kdNode, entity) {\n\n const nodeAABB = kdNode.aabb;\n const entityAABB = entity.aabb;\n\n const nodeAABBDiag = math.getAABB3Diag(nodeAABB);\n\n if (nodeAABBDiag < this.minTileSize) {\n kdNode.entities = kdNode.entities || [];\n kdNode.entities.push(entity);\n math.expandAABB3(nodeAABB, entityAABB);\n return;\n }\n\n if (kdNode.left) {\n if (math.containsAABB3(kdNode.left.aabb, entityAABB)) {\n this._insertEntityIntoKDTree(kdNode.left, entity);\n return;\n }\n }\n\n if (kdNode.right) {\n if (math.containsAABB3(kdNode.right.aabb, entityAABB)) {\n this._insertEntityIntoKDTree(kdNode.right, entity);\n return;\n }\n }\n\n kdTreeDimLength[0] = nodeAABB[3] - nodeAABB[0];\n kdTreeDimLength[1] = nodeAABB[4] - nodeAABB[1];\n kdTreeDimLength[2] = nodeAABB[5] - nodeAABB[2];\n\n let dim = 0;\n\n if (kdTreeDimLength[1] > kdTreeDimLength[dim]) {\n dim = 1;\n }\n\n if (kdTreeDimLength[2] > kdTreeDimLength[dim]) {\n dim = 2;\n }\n\n if (!kdNode.left) {\n const aabbLeft = nodeAABB.slice();\n aabbLeft[dim + 3] = ((nodeAABB[dim] + nodeAABB[dim + 3]) / 2.0);\n kdNode.left = new KDNode(aabbLeft);\n if (math.containsAABB3(aabbLeft, entityAABB)) {\n this._insertEntityIntoKDTree(kdNode.left, entity);\n return;\n }\n }\n\n if (!kdNode.right) {\n const aabbRight = nodeAABB.slice();\n aabbRight[dim] = ((nodeAABB[dim] + nodeAABB[dim + 3]) / 2.0);\n kdNode.right = new KDNode(aabbRight);\n if (math.containsAABB3(aabbRight, entityAABB)) {\n this._insertEntityIntoKDTree(kdNode.right, entity);\n return;\n }\n }\n\n kdNode.entities = kdNode.entities || [];\n kdNode.entities.push(entity);\n\n math.expandAABB3(nodeAABB, entityAABB);\n }\n\n _createTilesFromKDTree(rootKDNode) {\n this._createTilesFromKDNode(rootKDNode);\n }\n\n _createTilesFromKDNode(kdNode) {\n if (kdNode.entities && kdNode.entities.length > 0) {\n this._createTileFromEntities(kdNode);\n }\n if (kdNode.left) {\n this._createTilesFromKDNode(kdNode.left);\n }\n if (kdNode.right) {\n this._createTilesFromKDNode(kdNode.right);\n }\n }\n\n /**\n * Creates a tile from the given entities.\n *\n * For each single-use {@link XKTGeometry}, this method centers {@link XKTGeometry#positions} to make them relative to the\n * tile's center, then quantizes the positions to unsigned 16-bit integers, relative to the tile's boundary.\n *\n * @param kdNode\n */\n _createTileFromEntities(kdNode) {\n\n const tileAABB = kdNode.aabb;\n const entities = kdNode.entities;\n\n const tileCenter = math.getAABB3Center(tileAABB);\n const tileCenterNeg = math.mulVec3Scalar(tileCenter, -1, math.vec3());\n\n const rtcAABB = math.AABB3(); // AABB centered at the RTC origin\n\n rtcAABB[0] = tileAABB[0] - tileCenter[0];\n rtcAABB[1] = tileAABB[1] - tileCenter[1];\n rtcAABB[2] = tileAABB[2] - tileCenter[2];\n rtcAABB[3] = tileAABB[3] - tileCenter[0];\n rtcAABB[4] = tileAABB[4] - tileCenter[1];\n rtcAABB[5] = tileAABB[5] - tileCenter[2];\n\n for (let i = 0; i < entities.length; i++) {\n\n const entity = entities [i];\n\n const meshes = entity.meshes;\n\n for (let j = 0, lenj = meshes.length; j < lenj; j++) {\n\n const mesh = meshes[j];\n const geometry = mesh.geometry;\n\n if (!geometry.reused) { // Batched geometry\n\n const positions = geometry.positions;\n\n // Center positions relative to their tile's World-space center\n\n for (let k = 0, lenk = positions.length; k < lenk; k += 3) {\n\n positions[k + 0] -= tileCenter[0];\n positions[k + 1] -= tileCenter[1];\n positions[k + 2] -= tileCenter[2];\n }\n\n // Quantize positions relative to tile's RTC-space boundary\n\n geometryCompression.quantizePositions(positions, positions.length, rtcAABB, geometry.positionsQuantized);\n\n } else { // Instanced geometry\n\n // Post-multiply a translation to the mesh's modeling matrix\n // to center the entity's geometry instances to the tile RTC center\n\n //////////////////////////////\n // Why do we do this?\n // Seems to break various models\n /////////////////////////////////\n\n math.translateMat4v(tileCenterNeg, mesh.matrix);\n }\n }\n\n entity.entityIndex = this.entitiesList.length;\n\n this.entitiesList.push(entity);\n }\n\n const tile = new XKTTile(tileAABB, entities);\n\n this.tilesList.push(tile);\n }\n\n _createReusedGeometriesDecodeMatrix() {\n\n const tempVec3a = math.vec3();\n const reusedGeometriesAABB = math.collapseAABB3(math.AABB3());\n let countReusedGeometries = 0;\n\n for (let geometryIndex = 0, numGeometries = this.geometriesList.length; geometryIndex < numGeometries; geometryIndex++) {\n\n const geometry = this.geometriesList [geometryIndex];\n\n if (geometry.reused) { // Instanced geometry\n\n const positions = geometry.positions;\n\n for (let i = 0, len = positions.length; i < len; i += 3) {\n\n tempVec3a[0] = positions[i];\n tempVec3a[1] = positions[i + 1];\n tempVec3a[2] = positions[i + 2];\n\n math.expandAABB3Point3(reusedGeometriesAABB, tempVec3a);\n }\n\n countReusedGeometries++;\n }\n }\n\n if (countReusedGeometries > 0) {\n\n geometryCompression.createPositionsDecodeMatrix(reusedGeometriesAABB, this.reusedGeometriesDecodeMatrix);\n\n for (let geometryIndex = 0, numGeometries = this.geometriesList.length; geometryIndex < numGeometries; geometryIndex++) {\n\n const geometry = this.geometriesList [geometryIndex];\n\n if (geometry.reused) {\n geometryCompression.quantizePositions(geometry.positions, geometry.positions.length, reusedGeometriesAABB, geometry.positionsQuantized);\n }\n }\n\n } else {\n math.identityMat4(this.reusedGeometriesDecodeMatrix); // No need for this matrix, but we'll be tidy and set it to identity\n }\n }\n\n _flagSolidGeometries() {\n let maxNumPositions = 0;\n let maxNumIndices = 0;\n for (let i = 0, len = this.geometriesList.length; i < len; i++) {\n const geometry = this.geometriesList[i];\n if (geometry.primitiveType === \"triangles\") {\n if (geometry.positionsQuantized.length > maxNumPositions) {\n maxNumPositions = geometry.positionsQuantized.length;\n }\n if (geometry.indices.length > maxNumIndices) {\n maxNumIndices = geometry.indices.length;\n }\n }\n }\n let vertexIndexMapping = new Array(maxNumPositions / 3);\n let edges = new Array(maxNumIndices);\n for (let i = 0, len = this.geometriesList.length; i < len; i++) {\n const geometry = this.geometriesList[i];\n if (geometry.primitiveType === \"triangles\") {\n geometry.solid = isTriangleMeshSolid(geometry.indices, geometry.positionsQuantized, vertexIndexMapping, edges);\n }\n }\n }\n}\n\nexport {\n XKTModel\n}","/**\n * A property set within an {@link XKTModel}.\n *\n * These are shared among {@link XKTMetaObject}s.\n *\n * * Created by {@link XKTModel#createPropertySet}\n * * Stored in {@link XKTModel#propertySets} and {@link XKTModel#propertySetsList}\n * * Has an ID, a type, and a human-readable name\n *\n * @class XKTPropertySet\n */\nclass XKTPropertySet {\n\n /**\n * @private\n */\n constructor(propertySetId, propertySetType, propertySetName, properties) {\n\n /**\n * Unique ID of this ````XKTPropertySet```` in {@link XKTModel#propertySets}.\n *\n * @type {String}\n */\n this.propertySetId = propertySetId;\n\n /**\n * Indicates the ````XKTPropertySet````'s type.\n *\n * This defaults to \"default\".\n *\n * @type {string}\n */\n this.propertySetType = propertySetType;\n\n /**\n * Indicates the XKTPropertySet meta object name.\n *\n * This defaults to {@link XKTPropertySet#propertySetId}.\n *\n * @type {string}\n */\n this.propertySetName = propertySetName;\n\n /**\n * The properties within this ````XKTPropertySet````.\n *\n * @type {*[]}\n */\n this.properties = properties;\n }\n}\n\nexport {XKTPropertySet};","/**\n * A texture shared by {@link XKTTextureSet}s.\n *\n * * Created by {@link XKTModel#createTexture}\n * * Stored in {@link XKTTextureSet#textures}, {@link XKTModel#textures} and {@link XKTModel#texturesList}\n *\n * @class XKTTexture\n */\nimport {RepeatWrapping, LinearMipMapNearestFilter} from \"../constants\";\n\nclass XKTTexture {\n\n /**\n * @private\n */\n constructor(cfg) {\n\n /**\n * Unique ID of this XKTTexture in {@link XKTModel#textures}.\n *\n * @type {Number}\n */\n this.textureId = cfg.textureId;\n\n /**\n * Index of this XKTTexture in {@link XKTModel#texturesList};\n *\n * @type {Number}\n */\n this.textureIndex = cfg.textureIndex;\n\n /**\n * Texture image data.\n *\n * @type {Buffer}\n */\n this.imageData = cfg.imageData;\n\n /**\n * Which material channel this texture is applied to, as determined by its {@link XKTTextureSet}s.\n *\n * @type {Number}\n */\n this.channel = null;\n\n /**\n * Width of this XKTTexture.\n *\n * @type {Number}\n */\n this.width = cfg.width;\n\n /**\n * Height of this XKTTexture.\n *\n * @type {Number}\n */\n this.height = cfg.height;\n\n /**\n * Texture file source.\n *\n * @type {String}\n */\n this.src = cfg.src;\n\n /**\n * Whether this XKTTexture is to be compressed.\n *\n * @type {Boolean}\n */\n this.compressed = (!!cfg.compressed);\n\n /**\n * Media type of this XKTTexture.\n *\n * Supported values are {@link GIFMediaType}, {@link PNGMediaType} and {@link JPEGMediaType}.\n *\n * Ignored for compressed textures.\n *\n * @type {Number}\n */\n this.mediaType = cfg.mediaType;\n\n /**\n * How the texture is sampled when a texel covers less than one pixel. Supported values\n * are {@link LinearMipmapLinearFilter}, {@link LinearMipMapNearestFilter},\n * {@link NearestMipMapNearestFilter}, {@link NearestMipMapLinearFilter}\n * and {@link LinearMipMapLinearFilter}.\n *\n * Ignored for compressed textures.\n *\n * @type {Number}\n */\n this.minFilter = cfg.minFilter || LinearMipMapNearestFilter;\n\n /**\n * How the texture is sampled when a texel covers more than one pixel. Supported values\n * are {@link LinearFilter} and {@link NearestFilter}.\n *\n * Ignored for compressed textures.\n *\n * @type {Number}\n */\n this.magFilter = cfg.magFilter || LinearMipMapNearestFilter;\n\n /**\n * S wrapping mode.\n *\n * Supported values are {@link ClampToEdgeWrapping},\n * {@link MirroredRepeatWrapping} and {@link RepeatWrapping}.\n *\n * Ignored for compressed textures.\n *\n * @type {Number}\n */\n this.wrapS = cfg.wrapS || RepeatWrapping;\n\n /**\n * T wrapping mode.\n *\n * Supported values are {@link ClampToEdgeWrapping},\n * {@link MirroredRepeatWrapping} and {@link RepeatWrapping}.\n *\n * Ignored for compressed textures.\n *\n * @type {Number}\n */\n this.wrapT = cfg.wrapT || RepeatWrapping;\n\n /**\n * R wrapping mode.\n *\n * Ignored for compressed textures.\n *\n * Supported values are {@link ClampToEdgeWrapping},\n * {@link MirroredRepeatWrapping} and {@link RepeatWrapping}.\n *\n * @type {*|number}\n */\n this.wrapR = cfg.wrapR || RepeatWrapping\n }\n}\n\nexport {XKTTexture};","/**\n * A set of textures shared by {@link XKTMesh}es.\n *\n * * Created by {@link XKTModel#createTextureSet}\n * * Registered in {@link XKTMesh#material}, {@link XKTModel#materials} and {@link XKTModel#.textureSetsList}\n *\n * @class XKTMetalRoughMaterial\n */\nclass XKTTextureSet {\n\n /**\n * @private\n */\n constructor(cfg) {\n\n /**\n * Unique ID of this XKTTextureSet in {@link XKTModel#materials}.\n *\n * @type {Number}\n */\n this.textureSetId = cfg.textureSetId;\n\n /**\n * Index of this XKTTexture in {@link XKTModel#texturesList};\n *\n * @type {Number}\n */\n this.textureSetIndex = cfg.textureSetIndex;\n\n /**\n * Identifies the material type.\n *\n * @type {Number}\n */\n this.materialType = cfg.materialType;\n\n /**\n * Index of this XKTTextureSet in {@link XKTModel#meshesList};\n *\n * @type {Number}\n */\n this.materialIndex = cfg.materialIndex;\n\n /**\n * The number of {@link XKTMesh}s that reference this XKTTextureSet.\n *\n * @type {Number}\n */\n this.numInstances = 0;\n\n /**\n * RGBA {@link XKTTexture} containing base color in RGB and opacity in A.\n *\n * @type {XKTTexture}\n */\n this.colorTexture = cfg.colorTexture;\n\n /**\n * RGBA {@link XKTTexture} containing metallic and roughness factors in R and G.\n *\n * @type {XKTTexture}\n */\n this.metallicRoughnessTexture = cfg.metallicRoughnessTexture;\n\n /**\n * RGBA {@link XKTTexture} with surface normals in RGB.\n *\n * @type {XKTTexture}\n */\n this.normalsTexture = cfg.normalsTexture;\n\n /**\n * RGBA {@link XKTTexture} with emissive color in RGB.\n *\n * @type {XKTTexture}\n */\n this.emissiveTexture = cfg.emissiveTexture;\n\n /**\n * RGBA {@link XKTTexture} with ambient occlusion factors in RGB.\n *\n * @type {XKTTexture}\n */\n this.occlusionTexture = cfg.occlusionTexture;\n }\n}\n\nexport {XKTTextureSet};","/**\n * @desc A box-shaped 3D region within an {@link XKTModel} that contains {@link XKTEntity}s.\n *\n * * Created by {@link XKTModel#finalize}\n * * Stored in {@link XKTModel#tilesList}\n *\n * @class XKTTile\n */\nclass XKTTile {\n\n /**\n * Creates a new XKTTile.\n *\n * @private\n * @param aabb\n * @param entities\n */\n constructor(aabb, entities) {\n\n /**\n * Axis-aligned World-space bounding box that encloses the {@link XKTEntity}'s within this Tile.\n *\n * @type {Float64Array}\n */\n this.aabb = aabb;\n\n /**\n * The {@link XKTEntity}'s within this XKTTile.\n *\n * @type {XKTEntity[]}\n */\n this.entities = entities;\n }\n}\n\nexport {XKTTile};","import {math} from \"../../lib/math.js\";\n\n/**\n * @private\n */\nconst buildEdgeIndices = (function () {\n\n const uniquePositions = [];\n const indicesLookup = [];\n const indicesReverseLookup = [];\n const weldedIndices = [];\n\n// TODO: Optimize with caching, but need to cater to both compressed and uncompressed positions\n\n const faces = [];\n let numFaces = 0;\n const compa = new Uint16Array(3);\n const compb = new Uint16Array(3);\n const compc = new Uint16Array(3);\n const a = math.vec3();\n const b = math.vec3();\n const c = math.vec3();\n const cb = math.vec3();\n const ab = math.vec3();\n const cross = math.vec3();\n const normal = math.vec3();\n const inverseNormal = math.vec3();\n\n function weldVertices(positions, indices) {\n const positionsMap = {}; // Hashmap for looking up vertices by position coordinates (and making sure they are unique)\n let vx;\n let vy;\n let vz;\n let key;\n const precisionPoints = 4; // number of decimal points, e.g. 4 for epsilon of 0.0001\n const precision = Math.pow(10, precisionPoints);\n let i;\n let len;\n let lenUniquePositions = 0;\n for (i = 0, len = positions.length; i < len; i += 3) {\n vx = positions[i];\n vy = positions[i + 1];\n vz = positions[i + 2];\n key = Math.round(vx * precision) + '_' + Math.round(vy * precision) + '_' + Math.round(vz * precision);\n if (positionsMap[key] === undefined) {\n positionsMap[key] = lenUniquePositions / 3;\n uniquePositions[lenUniquePositions++] = vx;\n uniquePositions[lenUniquePositions++] = vy;\n uniquePositions[lenUniquePositions++] = vz;\n }\n indicesLookup[i / 3] = positionsMap[key];\n }\n for (i = 0, len = indices.length; i < len; i++) {\n weldedIndices[i] = indicesLookup[indices[i]];\n indicesReverseLookup[weldedIndices[i]] = indices[i];\n }\n }\n\n function buildFaces(numIndices, positionsDecodeMatrix) {\n numFaces = 0;\n for (let i = 0, len = numIndices; i < len; i += 3) {\n const ia = ((weldedIndices[i]) * 3);\n const ib = ((weldedIndices[i + 1]) * 3);\n const ic = ((weldedIndices[i + 2]) * 3);\n if (positionsDecodeMatrix) {\n compa[0] = uniquePositions[ia];\n compa[1] = uniquePositions[ia + 1];\n compa[2] = uniquePositions[ia + 2];\n compb[0] = uniquePositions[ib];\n compb[1] = uniquePositions[ib + 1];\n compb[2] = uniquePositions[ib + 2];\n compc[0] = uniquePositions[ic];\n compc[1] = uniquePositions[ic + 1];\n compc[2] = uniquePositions[ic + 2];\n // Decode\n math.decompressPosition(compa, positionsDecodeMatrix, a);\n math.decompressPosition(compb, positionsDecodeMatrix, b);\n math.decompressPosition(compc, positionsDecodeMatrix, c);\n } else {\n a[0] = uniquePositions[ia];\n a[1] = uniquePositions[ia + 1];\n a[2] = uniquePositions[ia + 2];\n b[0] = uniquePositions[ib];\n b[1] = uniquePositions[ib + 1];\n b[2] = uniquePositions[ib + 2];\n c[0] = uniquePositions[ic];\n c[1] = uniquePositions[ic + 1];\n c[2] = uniquePositions[ic + 2];\n }\n math.subVec3(c, b, cb);\n math.subVec3(a, b, ab);\n math.cross3Vec3(cb, ab, cross);\n math.normalizeVec3(cross, normal);\n const face = faces[numFaces] || (faces[numFaces] = {normal: math.vec3()});\n face.normal[0] = normal[0];\n face.normal[1] = normal[1];\n face.normal[2] = normal[2];\n numFaces++;\n }\n }\n\n return function (positions, indices, positionsDecodeMatrix, edgeThreshold) {\n weldVertices(positions, indices);\n buildFaces(indices.length, positionsDecodeMatrix);\n const edgeIndices = [];\n const thresholdDot = Math.cos(math.DEGTORAD * edgeThreshold);\n const edges = {};\n let edge1;\n let edge2;\n let index1;\n let index2;\n let key;\n let largeIndex = false;\n let edge;\n let normal1;\n let normal2;\n let dot;\n let ia;\n let ib;\n for (let i = 0, len = indices.length; i < len; i += 3) {\n const faceIndex = i / 3;\n for (let j = 0; j < 3; j++) {\n edge1 = weldedIndices[i + j];\n edge2 = weldedIndices[i + ((j + 1) % 3)];\n index1 = Math.min(edge1, edge2);\n index2 = Math.max(edge1, edge2);\n key = index1 + ',' + index2;\n if (edges[key] === undefined) {\n edges[key] = {\n index1: index1,\n index2: index2,\n face1: faceIndex,\n face2: undefined,\n };\n } else {\n edges[key].face2 = faceIndex;\n }\n }\n }\n for (key in edges) {\n edge = edges[key];\n // an edge is only rendered if the angle (in degrees) between the face normals of the adjoining faces exceeds this value. default = 1 degree.\n if (edge.face2 !== undefined) {\n normal1 = faces[edge.face1].normal;\n normal2 = faces[edge.face2].normal;\n inverseNormal[0] = -normal2[0];\n inverseNormal[1] = -normal2[1];\n inverseNormal[2] = -normal2[2];\n dot = Math.abs(math.dotVec3(normal1, normal2));\n const dot2 = Math.abs(math.dotVec3(normal1, inverseNormal));\n if (dot > thresholdDot && dot2 > thresholdDot) {\n continue;\n }\n }\n ia = indicesReverseLookup[edge.index1];\n ib = indicesReverseLookup[edge.index2];\n if (!largeIndex && ia > 65535 || ib > 65535) {\n largeIndex = true;\n }\n edgeIndices.push(ia);\n edgeIndices.push(ib);\n }\n return (largeIndex) ? new Uint32Array(edgeIndices) : new Uint16Array(edgeIndices);\n };\n})();\n\n\nexport {buildEdgeIndices};","import {math} from \"../../lib/math.js\";\n\nfunction quantizePositions (positions, lenPositions, aabb, quantizedPositions) {\n const xmin = aabb[0];\n const ymin = aabb[1];\n const zmin = aabb[2];\n const xwid = aabb[3] - xmin;\n const ywid = aabb[4] - ymin;\n const zwid = aabb[5] - zmin;\n const maxInt = 65535;\n const xMultiplier = maxInt / xwid;\n const yMultiplier = maxInt / ywid;\n const zMultiplier = maxInt / zwid;\n const verify = (num) => num >= 0 ? num : 0;\n for (let i = 0; i < lenPositions; i += 3) {\n quantizedPositions[i + 0] = Math.max(0, Math.min(65535,Math.floor(verify(positions[i + 0] - xmin) * xMultiplier)));\n quantizedPositions[i + 1] = Math.max(0, Math.min(65535,Math.floor(verify(positions[i + 1] - ymin) * yMultiplier)));\n quantizedPositions[i + 2] = Math.max(0, Math.min(65535,Math.floor(verify(positions[i + 2] - zmin) * zMultiplier)));\n }\n}\n\nfunction compressPosition(p, aabb, q) {\n const multiplier = new Float32Array([\n aabb[3] !== aabb[0] ? 65535 / (aabb[3] - aabb[0]) : 0,\n aabb[4] !== aabb[1] ? 65535 / (aabb[4] - aabb[1]) : 0,\n aabb[5] !== aabb[2] ? 65535 / (aabb[5] - aabb[2]) : 0\n ]);\n q[0] = Math.max(0, Math.min(65535, Math.floor((p[0] - aabb[0]) * multiplier[0])));\n q[1] = Math.max(0, Math.min(65535, Math.floor((p[1] - aabb[1]) * multiplier[1])));\n q[2] = Math.max(0, Math.min(65535, Math.floor((p[2] - aabb[2]) * multiplier[2])));\n}\n\nvar createPositionsDecodeMatrix = (function () {\n const translate = math.mat4();\n const scale = math.mat4();\n return function (aabb, positionsDecodeMatrix) {\n positionsDecodeMatrix = positionsDecodeMatrix || math.mat4();\n const xmin = aabb[0];\n const ymin = aabb[1];\n const zmin = aabb[2];\n const xwid = aabb[3] - xmin;\n const ywid = aabb[4] - ymin;\n const zwid = aabb[5] - zmin;\n const maxInt = 65535;\n math.identityMat4(translate);\n math.translationMat4v(aabb, translate);\n math.identityMat4(scale);\n math.scalingMat4v([xwid / maxInt, ywid / maxInt, zwid / maxInt], scale);\n math.mulMat4(translate, scale, positionsDecodeMatrix);\n return positionsDecodeMatrix;\n };\n})();\n\nfunction transformAndOctEncodeNormals(modelNormalMatrix, normals, lenNormals, compressedNormals, lenCompressedNormals) {\n // http://jcgt.org/published/0003/02/01/\n let oct, dec, best, currentCos, bestCos;\n let i, ei;\n let localNormal = math.vec3();\n let worldNormal = math.vec3();\n for (i = 0; i < lenNormals; i += 3) {\n localNormal[0] = normals[i];\n localNormal[1] = normals[i + 1];\n localNormal[2] = normals[i + 2];\n\n math.transformVec3(modelNormalMatrix, localNormal, worldNormal);\n math.normalizeVec3(worldNormal, worldNormal);\n\n // Test various combinations of ceil and floor to minimize rounding errors\n best = oct = octEncodeVec3(worldNormal, 0, \"floor\", \"floor\");\n dec = octDecodeVec2(oct);\n currentCos = bestCos = dot(worldNormal, 0, dec);\n oct = octEncodeVec3(worldNormal, 0, \"ceil\", \"floor\");\n dec = octDecodeVec2(oct);\n currentCos = dot(worldNormal, 0, dec);\n if (currentCos > bestCos) {\n best = oct;\n bestCos = currentCos;\n }\n oct = octEncodeVec3(worldNormal, 0, \"floor\", \"ceil\");\n dec = octDecodeVec2(oct);\n currentCos = dot(worldNormal, 0, dec);\n if (currentCos > bestCos) {\n best = oct;\n bestCos = currentCos;\n }\n oct = octEncodeVec3(worldNormal, 0, \"ceil\", \"ceil\");\n dec = octDecodeVec2(oct);\n currentCos = dot(worldNormal, 0, dec);\n if (currentCos > bestCos) {\n best = oct;\n bestCos = currentCos;\n }\n compressedNormals[lenCompressedNormals + i + 0] = best[0];\n compressedNormals[lenCompressedNormals + i + 1] = best[1];\n compressedNormals[lenCompressedNormals + i + 2] = 0.0; // Unused\n }\n lenCompressedNormals += lenNormals;\n return lenCompressedNormals;\n}\n\nfunction octEncodeNormals(normals, lenNormals, compressedNormals, lenCompressedNormals) { // http://jcgt.org/published/0003/02/01/\n let oct, dec, best, currentCos, bestCos;\n for (let i = 0; i < lenNormals; i += 3) {\n // Test various combinations of ceil and floor to minimize rounding errors\n best = oct = octEncodeVec3(normals, i, \"floor\", \"floor\");\n dec = octDecodeVec2(oct);\n currentCos = bestCos = dot(normals, i, dec);\n oct = octEncodeVec3(normals, i, \"ceil\", \"floor\");\n dec = octDecodeVec2(oct);\n currentCos = dot(normals, i, dec);\n if (currentCos > bestCos) {\n best = oct;\n bestCos = currentCos;\n }\n oct = octEncodeVec3(normals, i, \"floor\", \"ceil\");\n dec = octDecodeVec2(oct);\n currentCos = dot(normals, i, dec);\n if (currentCos > bestCos) {\n best = oct;\n bestCos = currentCos;\n }\n oct = octEncodeVec3(normals, i, \"ceil\", \"ceil\");\n dec = octDecodeVec2(oct);\n currentCos = dot(normals, i, dec);\n if (currentCos > bestCos) {\n best = oct;\n bestCos = currentCos;\n }\n compressedNormals[lenCompressedNormals + i + 0] = best[0];\n compressedNormals[lenCompressedNormals + i + 1] = best[1];\n compressedNormals[lenCompressedNormals + i + 2] = 0.0; // Unused\n }\n lenCompressedNormals += lenNormals;\n return lenCompressedNormals;\n}\n\n/**\n * @private\n */\nfunction octEncodeVec3(array, i, xfunc, yfunc) { // Oct-encode single normal vector in 2 bytes\n let x = array[i] / (Math.abs(array[i]) + Math.abs(array[i + 1]) + Math.abs(array[i + 2]));\n let y = array[i + 1] / (Math.abs(array[i]) + Math.abs(array[i + 1]) + Math.abs(array[i + 2]));\n if (array[i + 2] < 0) {\n let tempx = (1 - Math.abs(y)) * (x >= 0 ? 1 : -1);\n let tempy = (1 - Math.abs(x)) * (y >= 0 ? 1 : -1);\n x = tempx;\n y = tempy;\n }\n return new Int8Array([\n Math[xfunc](x * 127.5 + (x < 0 ? -1 : 0)),\n Math[yfunc](y * 127.5 + (y < 0 ? -1 : 0))\n ]);\n}\n\n/**\n * Decode an oct-encoded normal\n */\nfunction octDecodeVec2(oct) {\n let x = oct[0];\n let y = oct[1];\n x /= x < 0 ? 127 : 128;\n y /= y < 0 ? 127 : 128;\n const z = 1 - Math.abs(x) - Math.abs(y);\n if (z < 0) {\n x = (1 - Math.abs(y)) * (x >= 0 ? 1 : -1);\n y = (1 - Math.abs(x)) * (y >= 0 ? 1 : -1);\n }\n const length = Math.sqrt(x * x + y * y + z * z);\n return [\n x / length,\n y / length,\n z / length\n ];\n}\n\n/**\n * Dot product of a normal in an array against a candidate decoding\n * @private\n */\nfunction dot(array, i, vec3) {\n return array[i] * vec3[0] + array[i + 1] * vec3[1] + array[i + 2] * vec3[2];\n}\n\n/**\n * @private\n */\nconst geometryCompression = {\n quantizePositions,\n compressPosition,\n createPositionsDecodeMatrix,\n transformAndOctEncodeNormals,\n octEncodeNormals,\n};\n\nexport {geometryCompression}","/**\n * Uses edge adjacency counts to identify if the given triangle mesh can be rendered with backface culling enabled.\n *\n * If all edges are connected to exactly two triangles, then the mesh will likely be a closed solid, and we can safely\n * render it with backface culling enabled.\n *\n * Otherwise, the mesh is a surface, and we must render it with backface culling disabled.\n *\n * @private\n */\nconst isTriangleMeshSolid = (indices, positions, vertexIndexMapping, edges) => {\n\n function compareIndexPositions(a, b)\n {\n let posA, posB;\n\n for (let i = 0; i < 3; i++) {\n posA = positions [a*3+i];\n posB = positions [b*3+i];\n\n if (posA !== posB) {\n return posB - posA;\n }\n }\n\n return 0;\n };\n\n // Group together indices corresponding to same position coordinates\n let newIndices = indices.slice ().sort (compareIndexPositions);\n\n // Calculate the mapping:\n // - from original index in indices array\n // - to indices-for-unique-positions\n let uniqueVertexIndex = null;\n\n for (let i = 0, len = newIndices.length; i < len; i++) {\n if (i == 0 || 0 != compareIndexPositions (\n newIndices[i],\n newIndices[i-1],\n )) {\n // different position\n uniqueVertexIndex = newIndices [i];\n }\n\n vertexIndexMapping [\n newIndices[i]\n ] = uniqueVertexIndex;\n }\n\n // Generate the list of edges\n for (let i = 0, len = indices.length; i < len; i += 3) {\n\n const a = vertexIndexMapping[indices[i]];\n const b = vertexIndexMapping[indices[i+1]];\n const c = vertexIndexMapping[indices[i+2]];\n\n let a2 = a;\n let b2 = b;\n let c2 = c;\n\n if (a > b && a > c) {\n if (b > c) {\n a2 = a;\n b2 = b;\n c2 = c;\n } else {\n a2 = a;\n b2 = c;\n c2 = b;\n }\n } else if (b > a && b > c) {\n if (a > c) {\n a2 = b;\n b2 = a;\n c2 = c;\n } else {\n a2 = b;\n b2 = c;\n c2 = a;\n }\n } else if (c > a && c > b) {\n if (a > b) {\n a2 = c;\n b2 = a;\n c2 = b;\n } else {\n a2 = c;\n b2 = b;\n c2 = a;\n }\n }\n\n edges[i+0] = [\n a2, b2\n ];\n edges[i+1] = [\n b2, c2\n ];\n\n if (a2 > c2) {\n const temp = c2;\n c2 = a2;\n a2 = temp;\n }\n\n edges[i+2] = [\n c2, a2\n ];\n }\n\n // Group semantically equivalent edgdes together\n function compareEdges (e1, e2) {\n let a, b;\n\n for (let i = 0; i < 2; i++) {\n a = e1[i];\n b = e2[i];\n\n if (b !== a) {\n return b - a;\n }\n }\n\n return 0;\n }\n\n edges = edges.slice(0, indices.length);\n\n edges.sort (compareEdges);\n\n // Make sure each edge is used exactly twice\n let sameEdgeCount = 0;\n\n for (let i = 0; i < edges.length; i++)\n {\n if (i === 0 || 0 !== compareEdges (\n edges[i], edges[i-1]\n )) {\n // different edge\n if (0 !== i && sameEdgeCount !== 2)\n {\n return false;\n }\n\n sameEdgeCount = 1;\n }\n else\n {\n // same edge\n sameEdgeCount++;\n }\n }\n\n if (edges.length > 0 && sameEdgeCount !== 2)\n {\n return false;\n }\n\n // Each edge is used exactly twice, this is a\n // watertight surface and hence a solid geometry.\n return true;\n};\n\nexport {isTriangleMeshSolid};","/**\n * @private\n * @param buf\n * @returns {ArrayBuffer}\n */\nexport function toArrayBuffer(buf) {\n const ab = new ArrayBuffer(buf.length);\n const view = new Uint8Array(ab);\n for (let i = 0; i < buf.length; ++i) {\n view[i] = buf[i];\n }\n return ab;\n}","function isString(value) {\n return (typeof value === 'string' || value instanceof String);\n}\n\nfunction apply(o, o2) {\n for (const name in o) {\n if (o.hasOwnProperty(name)) {\n o2[name] = o[name];\n }\n }\n return o2;\n}\n\n/**\n * @private\n */\nconst utils = {\n isString,\n apply\n};\n\nexport {utils};\n","import {XKT_INFO} from \"../XKT_INFO.js\";\nimport * as pako from 'pako';\n\nconst XKT_VERSION = XKT_INFO.xktVersion;\nconst NUM_TEXTURE_ATTRIBUTES = 9;\nconst NUM_MATERIAL_ATTRIBUTES = 6;\n\n/**\n * Writes an {@link XKTModel} to an {@link ArrayBuffer}.\n *\n * @param {XKTModel} xktModel The {@link XKTModel}.\n * @param {String} metaModelJSON The metamodel JSON in a string.\n * @param {Object} [stats] Collects statistics.\n * @param {Object} options Options for how the XKT is written.\n * @param {Boolean} [options.zip=true] ZIP the contents?\n * @returns {ArrayBuffer} The {@link ArrayBuffer}.\n */\nfunction writeXKTModelToArrayBuffer(xktModel, metaModelJSON, stats, options) {\n if (! options.zip) {\n return writeXKTModelToArrayBufferUncompressed(xktModel, metaModelJSON, stats);\n }\n const data = getModelData(xktModel, metaModelJSON, stats);\n const deflatedData = deflateData(data, metaModelJSON, options);\n stats.texturesSize += deflatedData.textureData.byteLength;\n const arrayBuffer = createArrayBuffer(deflatedData);\n return arrayBuffer;\n}\n\n// V11\nfunction writeXKTModelToArrayBufferUncompressed(xktModel, metaModelJSON, stats) {\n const data = getModelData(xktModel, metaModelJSON, stats);\n stats.texturesSize += data.textureData.byteLength;\n\n const object2Array = (function() {\n const encoder = new TextEncoder();\n return obj => encoder.encode(JSON.stringify(obj));\n })();\n\n const arrays = [\n object2Array(metaModelJSON || data.metadata),\n data.textureData,\n data.eachTextureDataPortion,\n data.eachTextureAttributes,\n data.positions,\n data.normals,\n data.colors,\n data.uvs,\n data.indices,\n data.edgeIndices,\n data.eachTextureSetTextures,\n data.matrices,\n data.reusedGeometriesDecodeMatrix,\n data.eachGeometryPrimitiveType,\n data.eachGeometryPositionsPortion,\n data.eachGeometryNormalsPortion,\n data.eachGeometryColorsPortion,\n data.eachGeometryUVsPortion,\n data.eachGeometryIndicesPortion,\n data.eachGeometryEdgeIndicesPortion,\n data.eachMeshGeometriesPortion,\n data.eachMeshMatricesPortion,\n data.eachMeshTextureSet,\n data.eachMeshMaterialAttributes,\n object2Array(data.eachEntityId),\n data.eachEntityMeshesPortion,\n data.eachTileAABB,\n data.eachTileEntitiesPortion\n ];\n\n const arraysCnt = arrays.length;\n const dataView = new DataView(new ArrayBuffer((1 + 2 * arraysCnt) * 4));\n\n dataView.setUint32(0, XKT_VERSION, true);\n\n let byteOffset = dataView.byteLength;\n const offsets = [ ];\n\n // Store arrays' offsets and lengths\n for (let i = 0; i < arraysCnt; i++) {\n const arr = arrays[i];\n const BPE = arr.BYTES_PER_ELEMENT;\n // align to BPE, so the arrayBuffer can be used for a typed array\n byteOffset = Math.ceil(byteOffset / BPE) * BPE;\n const byteLength = arr.byteLength;\n\n const idx = 1 + 2 * i;\n dataView.setUint32(idx * 4, byteOffset, true);\n dataView.setUint32((idx + 1) * 4, byteLength, true);\n\n offsets.push(byteOffset);\n byteOffset += byteLength;\n }\n\n const dataArray = new Uint8Array(byteOffset);\n dataArray.set(new Uint8Array(dataView.buffer), 0);\n\n const requiresSwapToLittleEndian = (function() {\n const buffer = new ArrayBuffer(2);\n new Uint16Array(buffer)[0] = 1;\n return new Uint8Array(buffer)[0] !== 1;\n })();\n\n // Store arrays themselves\n for (let i = 0; i < arraysCnt; i++) {\n const arr = arrays[i];\n const subarray = new Uint8Array(arr.buffer, arr.byteOffset, arr.byteLength);\n\n const BPE = arr.BYTES_PER_ELEMENT;\n if (requiresSwapToLittleEndian && (BPE > 1)) {\n const swaps = BPE / 2;\n const cnt = subarray.length / BPE;\n for (let b = 0; b < cnt; b++) {\n const offset = b * BPE;\n for (let j = 0; j < swaps; j++) {\n const i1 = offset + j;\n const i2 = offset - j + BPE - 1;\n const tmp = subarray[i1];\n subarray[i1] = subarray[i2];\n subarray[i2] = tmp;\n }\n }\n }\n\n dataArray.set(subarray, offsets[i]);\n }\n\n return dataArray.buffer;\n}\n\nfunction getModelData(xktModel, metaModelDataStr, stats) {\n\n //------------------------------------------------------------------------------------------------------------------\n // Allocate data\n //------------------------------------------------------------------------------------------------------------------\n\n const propertySetsList = xktModel.propertySetsList;\n const metaObjectsList = xktModel.metaObjectsList;\n const geometriesList = xktModel.geometriesList;\n const texturesList = xktModel.texturesList;\n const textureSetsList = xktModel.textureSetsList;\n const meshesList = xktModel.meshesList;\n const entitiesList = xktModel.entitiesList;\n const tilesList = xktModel.tilesList;\n\n const numPropertySets = propertySetsList.length;\n const numMetaObjects = metaObjectsList.length;\n const numGeometries = geometriesList.length;\n const numTextures = texturesList.length;\n const numTextureSets = textureSetsList.length;\n const numMeshes = meshesList.length;\n const numEntities = entitiesList.length;\n const numTiles = tilesList.length;\n\n let lenPositions = 0;\n let lenNormals = 0;\n let lenColors = 0;\n let lenUVs = 0;\n let lenIndices = 0;\n let lenEdgeIndices = 0;\n let lenMatrices = 0;\n let lenTextures = 0;\n\n for (let geometryIndex = 0; geometryIndex < numGeometries; geometryIndex++) {\n const geometry = geometriesList [geometryIndex];\n if (geometry.positionsQuantized) {\n lenPositions += geometry.positionsQuantized.length;\n }\n if (geometry.normalsOctEncoded) {\n lenNormals += geometry.normalsOctEncoded.length;\n }\n if (geometry.colorsCompressed) {\n lenColors += geometry.colorsCompressed.length;\n }\n if (geometry.uvs) {\n lenUVs += geometry.uvs.length;\n }\n if (geometry.indices) {\n lenIndices += geometry.indices.length;\n }\n if (geometry.edgeIndices) {\n lenEdgeIndices += geometry.edgeIndices.length;\n }\n }\n\n for (let textureIndex = 0; textureIndex < numTextures; textureIndex++) {\n const xktTexture = texturesList[textureIndex];\n const imageData = xktTexture.imageData;\n lenTextures += imageData.byteLength;\n\n if (xktTexture.compressed) {\n stats.numCompressedTextures++;\n }\n }\n\n for (let meshIndex = 0; meshIndex < numMeshes; meshIndex++) {\n const mesh = meshesList[meshIndex];\n if (mesh.geometry.numInstances > 1) {\n lenMatrices += 16;\n }\n }\n\n const data = {\n metadata: {},\n textureData: new Uint8Array(lenTextures), // All textures\n eachTextureDataPortion: new Uint32Array(numTextures), // For each texture, an index to its first element in textureData\n eachTextureAttributes: new Uint16Array(numTextures * NUM_TEXTURE_ATTRIBUTES),\n positions: new Uint16Array(lenPositions), // All geometry arrays\n normals: new Int8Array(lenNormals),\n colors: new Uint8Array(lenColors),\n uvs: new Float32Array(lenUVs),\n indices: new Uint32Array(lenIndices),\n edgeIndices: new Uint32Array(lenEdgeIndices),\n eachTextureSetTextures: new Int32Array(numTextureSets * 5), // For each texture set, a set of five Texture indices [color, metal/roughness,normals,emissive,occlusion]; each index has value -1 if no texture\n matrices: new Float32Array(lenMatrices), // Modeling matrices for entities that share geometries. Each entity either shares all it's geometries, or owns all its geometries exclusively. Exclusively-owned geometries are pre-transformed into World-space, and so their entities don't have modeling matrices in this array.\n reusedGeometriesDecodeMatrix: new Float32Array(xktModel.reusedGeometriesDecodeMatrix), // A single, global vertex position de-quantization matrix for all reused geometries. Reused geometries are quantized to their collective Local-space AABB, and this matrix is derived from that AABB.\n eachGeometryPrimitiveType: new Uint8Array(numGeometries), // Primitive type for each geometry (0=solid triangles, 1=surface triangles, 2=lines, 3=points, 4=line-strip)\n eachGeometryPositionsPortion: new Uint32Array(numGeometries), // For each geometry, an index to its first element in data.positions. Every primitive type has positions.\n eachGeometryNormalsPortion: new Uint32Array(numGeometries), // For each geometry, an index to its first element in data.normals. If the next geometry has the same index, then this geometry has no normals.\n eachGeometryColorsPortion: new Uint32Array(numGeometries), // For each geometry, an index to its first element in data.colors. If the next geometry has the same index, then this geometry has no colors.\n eachGeometryUVsPortion: new Uint32Array(numGeometries), // For each geometry, an index to its first element in data.uvs. If the next geometry has the same index, then this geometry has no UVs.\n eachGeometryIndicesPortion: new Uint32Array(numGeometries), // For each geometry, an index to its first element in data.indices. If the next geometry has the same index, then this geometry has no indices.\n eachGeometryEdgeIndicesPortion: new Uint32Array(numGeometries), // For each geometry, an index to its first element in data.edgeIndices. If the next geometry has the same index, then this geometry has no edge indices.\n eachMeshGeometriesPortion: new Uint32Array(numMeshes), // For each mesh, an index into the eachGeometry* arrays\n eachMeshMatricesPortion: new Uint32Array(numMeshes), // For each mesh that shares its geometry, an index to its first element in data.matrices, to indicate the modeling matrix that transforms the shared geometry Local-space vertex positions. This is ignored for meshes that don't share geometries, because the vertex positions of non-shared geometries are pre-transformed into World-space.\n eachMeshTextureSet: new Int32Array(numMeshes), // For each mesh, the index of its texture set in data.eachTextureSetTextures; this array contains signed integers so that we can use -1 to indicate when a mesh has no texture set\n eachMeshMaterialAttributes: new Uint8Array(numMeshes * NUM_MATERIAL_ATTRIBUTES), // For each mesh, an RGBA integer color of format [0..255, 0..255, 0..255, 0..255], and PBR metallic and roughness factors, of format [0..255, 0..255]\n eachEntityId: [], // For each entity, an ID string\n eachEntityMeshesPortion: new Uint32Array(numEntities), // For each entity, the index of the first element of meshes used by the entity\n eachTileAABB: new Float64Array(numTiles * 6), // For each tile, an axis-aligned bounding box\n eachTileEntitiesPortion: new Uint32Array(numTiles) // For each tile, the index of the first element of eachEntityId, eachEntityMeshesPortion and eachEntityMatricesPortion used by the tile\n };\n\n let countPositions = 0;\n let countNormals = 0;\n let countColors = 0;\n let countUVs = 0;\n let countIndices = 0;\n let countEdgeIndices = 0;\n\n // Metadata\n\n data.metadata = {\n id: xktModel.modelId,\n projectId: xktModel.projectId,\n revisionId: xktModel.revisionId,\n author: xktModel.author,\n createdAt: xktModel.createdAt,\n creatingApplication: xktModel.creatingApplication,\n schema: xktModel.schema,\n propertySets: [],\n metaObjects: []\n };\n\n // Property sets\n\n for (let propertySetsIndex = 0; propertySetsIndex < numPropertySets; propertySetsIndex++) {\n const propertySet = propertySetsList[propertySetsIndex];\n const propertySetJSON = {\n id: \"\" + propertySet.propertySetId,\n name: propertySet.propertySetName,\n type: propertySet.propertySetType,\n properties: propertySet.properties\n };\n data.metadata.propertySets.push(propertySetJSON);\n }\n\n // Metaobjects\n\n if (!metaModelDataStr) {\n for (let metaObjectsIndex = 0; metaObjectsIndex < numMetaObjects; metaObjectsIndex++) {\n const metaObject = metaObjectsList[metaObjectsIndex];\n const metaObjectJSON = {\n name: metaObject.metaObjectName,\n type: metaObject.metaObjectType,\n id: \"\" + metaObject.metaObjectId\n };\n if (metaObject.parentMetaObjectId !== undefined && metaObject.parentMetaObjectId !== null) {\n metaObjectJSON.parent = \"\" + metaObject.parentMetaObjectId;\n }\n if (metaObject.propertySetIds && metaObject.propertySetIds.length > 0) {\n metaObjectJSON.propertySetIds = metaObject.propertySetIds;\n }\n if (metaObject.external) {\n metaObjectJSON.external = metaObject.external;\n }\n data.metadata.metaObjects.push(metaObjectJSON);\n }\n }\n\n // Geometries\n\n for (let geometryIndex = 0; geometryIndex < numGeometries; geometryIndex++) {\n const geometry = geometriesList [geometryIndex];\n let primitiveType = 1;\n switch (geometry.primitiveType) {\n case \"triangles\":\n primitiveType = geometry.solid ? 0 : 1;\n break;\n case \"points\":\n primitiveType = 2;\n break;\n case \"lines\":\n primitiveType = 3;\n break;\n case \"line-strip\":\n case \"line-loop\":\n primitiveType = 4;\n break;\n case \"triangle-strip\":\n primitiveType = 5;\n break;\n case \"triangle-fan\":\n primitiveType = 6;\n break;\n default:\n primitiveType = 1\n }\n data.eachGeometryPrimitiveType [geometryIndex] = primitiveType;\n data.eachGeometryPositionsPortion [geometryIndex] = countPositions;\n data.eachGeometryNormalsPortion [geometryIndex] = countNormals;\n data.eachGeometryColorsPortion [geometryIndex] = countColors;\n data.eachGeometryUVsPortion [geometryIndex] = countUVs;\n data.eachGeometryIndicesPortion [geometryIndex] = countIndices;\n data.eachGeometryEdgeIndicesPortion [geometryIndex] = countEdgeIndices;\n if (geometry.positionsQuantized) {\n data.positions.set(geometry.positionsQuantized, countPositions);\n countPositions += geometry.positionsQuantized.length;\n }\n if (geometry.normalsOctEncoded) {\n data.normals.set(geometry.normalsOctEncoded, countNormals);\n countNormals += geometry.normalsOctEncoded.length;\n }\n if (geometry.colorsCompressed) {\n data.colors.set(geometry.colorsCompressed, countColors);\n countColors += geometry.colorsCompressed.length;\n }\n if (geometry.uvs) {\n data.uvs.set(geometry.uvs, countUVs);\n countUVs += geometry.uvs.length;\n }\n if (geometry.indices) {\n data.indices.set(geometry.indices, countIndices);\n countIndices += geometry.indices.length;\n }\n if (geometry.edgeIndices) {\n data.edgeIndices.set(geometry.edgeIndices, countEdgeIndices);\n countEdgeIndices += geometry.edgeIndices.length;\n }\n }\n\n // Textures\n\n for (let textureIndex = 0, numTextures = xktModel.texturesList.length, portionIdx = 0; textureIndex < numTextures; textureIndex++) {\n const xktTexture = xktModel.texturesList[textureIndex];\n const imageData = xktTexture.imageData;\n data.textureData.set(imageData, portionIdx);\n data.eachTextureDataPortion[textureIndex] = portionIdx;\n\n portionIdx += imageData.byteLength;\n\n let textureAttrIdx = textureIndex * NUM_TEXTURE_ATTRIBUTES;\n data.eachTextureAttributes[textureAttrIdx++] = xktTexture.compressed ? 1 : 0;\n data.eachTextureAttributes[textureAttrIdx++] = xktTexture.mediaType; // GIFMediaType | PNGMediaType | JPEGMediaType\n data.eachTextureAttributes[textureAttrIdx++] = xktTexture.width;\n data.eachTextureAttributes[textureAttrIdx++] = xktTexture.height;\n data.eachTextureAttributes[textureAttrIdx++] = xktTexture.minFilter; // LinearMipmapLinearFilter | LinearMipMapNearestFilter | NearestMipMapNearestFilter | NearestMipMapLinearFilter | LinearMipMapLinearFilter\n data.eachTextureAttributes[textureAttrIdx++] = xktTexture.magFilter; // LinearFilter | NearestFilter\n data.eachTextureAttributes[textureAttrIdx++] = xktTexture.wrapS; // ClampToEdgeWrapping | MirroredRepeatWrapping | RepeatWrapping\n data.eachTextureAttributes[textureAttrIdx++] = xktTexture.wrapT; // ClampToEdgeWrapping | MirroredRepeatWrapping | RepeatWrapping\n data.eachTextureAttributes[textureAttrIdx++] = xktTexture.wrapR; // ClampToEdgeWrapping | MirroredRepeatWrapping | RepeatWrapping\n }\n\n // Texture sets\n\n for (let textureSetIndex = 0, numTextureSets = xktModel.textureSetsList.length, eachTextureSetTexturesIndex = 0; textureSetIndex < numTextureSets; textureSetIndex++) {\n const textureSet = textureSetsList[textureSetIndex];\n data.eachTextureSetTextures[eachTextureSetTexturesIndex++] = textureSet.colorTexture ? textureSet.colorTexture.textureIndex : -1; // Color map\n data.eachTextureSetTextures[eachTextureSetTexturesIndex++] = textureSet.metallicRoughnessTexture ? textureSet.metallicRoughnessTexture.textureIndex : -1; // Metal/rough map\n data.eachTextureSetTextures[eachTextureSetTexturesIndex++] = textureSet.normalsTexture ? textureSet.normalsTexture.textureIndex : -1; // Normal map\n data.eachTextureSetTextures[eachTextureSetTexturesIndex++] = textureSet.emissiveTexture ? textureSet.emissiveTexture.textureIndex : -1; // Emissive map\n data.eachTextureSetTextures[eachTextureSetTexturesIndex++] = textureSet.occlusionTexture ? textureSet.occlusionTexture.textureIndex : -1; // Occlusion map\n }\n\n // Tiles -> Entities -> Meshes\n\n let entityIndex = 0;\n let countEntityMeshesPortion = 0;\n let eachMeshMaterialAttributesIndex = 0;\n let matricesIndex = 0;\n let meshIndex = 0;\n\n for (let tileIndex = 0; tileIndex < numTiles; tileIndex++) {\n\n const tile = tilesList [tileIndex];\n const tileEntities = tile.entities;\n const numTileEntities = tileEntities.length;\n\n if (numTileEntities === 0) {\n continue;\n }\n\n data.eachTileEntitiesPortion[tileIndex] = entityIndex;\n\n const tileAABB = tile.aabb;\n\n for (let j = 0; j < numTileEntities; j++) {\n\n const entity = tileEntities[j];\n const entityMeshes = entity.meshes;\n const numEntityMeshes = entityMeshes.length;\n\n for (let k = 0; k < numEntityMeshes; k++) {\n\n const mesh = entityMeshes[k];\n const geometry = mesh.geometry;\n const geometryIndex = geometry.geometryIndex;\n\n data.eachMeshGeometriesPortion [countEntityMeshesPortion + k] = geometryIndex;\n\n if (mesh.geometry.numInstances > 1) {\n data.matrices.set(mesh.matrix, matricesIndex);\n data.eachMeshMatricesPortion [meshIndex] = matricesIndex;\n matricesIndex += 16;\n }\n\n data.eachMeshTextureSet[meshIndex] = mesh.textureSet ? mesh.textureSet.textureSetIndex : -1;\n\n data.eachMeshMaterialAttributes[eachMeshMaterialAttributesIndex++] = (mesh.color[0] * 255); // Color RGB\n data.eachMeshMaterialAttributes[eachMeshMaterialAttributesIndex++] = (mesh.color[1] * 255);\n data.eachMeshMaterialAttributes[eachMeshMaterialAttributesIndex++] = (mesh.color[2] * 255);\n data.eachMeshMaterialAttributes[eachMeshMaterialAttributesIndex++] = (mesh.opacity * 255); // Opacity\n data.eachMeshMaterialAttributes[eachMeshMaterialAttributesIndex++] = (mesh.metallic * 255); // Metallic\n data.eachMeshMaterialAttributes[eachMeshMaterialAttributesIndex++] = (mesh.roughness * 255); // Roughness\n\n meshIndex++;\n }\n\n data.eachEntityId [entityIndex] = entity.entityId;\n data.eachEntityMeshesPortion[entityIndex] = countEntityMeshesPortion; // <<<<<<<<<<<<<<<<<<<< Error here? Order/value of countEntityMeshesPortion correct?\n\n entityIndex++;\n countEntityMeshesPortion += numEntityMeshes;\n }\n\n const tileAABBIndex = tileIndex * 6;\n\n data.eachTileAABB.set(tileAABB, tileAABBIndex);\n }\n\n return data;\n}\n\nfunction deflateData(data, metaModelJSON, options) {\n\n function deflate(buffer) {\n return (options.zip !== false) ? pako.deflate(buffer) : buffer;\n }\n\n let metaModelBytes;\n if (metaModelJSON) {\n const deflatedJSON = deflateJSON(metaModelJSON);\n metaModelBytes = deflate(deflatedJSON)\n } else {\n const deflatedJSON = deflateJSON(data.metadata);\n metaModelBytes = deflate(deflatedJSON)\n }\n\n return {\n metadata: metaModelBytes,\n textureData: deflate(data.textureData.buffer),\n eachTextureDataPortion: deflate(data.eachTextureDataPortion.buffer),\n eachTextureAttributes: deflate(data.eachTextureAttributes.buffer),\n positions: deflate(data.positions.buffer),\n normals: deflate(data.normals.buffer),\n colors: deflate(data.colors.buffer),\n uvs: deflate(data.uvs.buffer),\n indices: deflate(data.indices.buffer),\n edgeIndices: deflate(data.edgeIndices.buffer),\n eachTextureSetTextures: deflate(data.eachTextureSetTextures.buffer),\n matrices: deflate(data.matrices.buffer),\n reusedGeometriesDecodeMatrix: deflate(data.reusedGeometriesDecodeMatrix.buffer),\n eachGeometryPrimitiveType: deflate(data.eachGeometryPrimitiveType.buffer),\n eachGeometryPositionsPortion: deflate(data.eachGeometryPositionsPortion.buffer),\n eachGeometryNormalsPortion: deflate(data.eachGeometryNormalsPortion.buffer),\n eachGeometryColorsPortion: deflate(data.eachGeometryColorsPortion.buffer),\n eachGeometryUVsPortion: deflate(data.eachGeometryUVsPortion.buffer),\n eachGeometryIndicesPortion: deflate(data.eachGeometryIndicesPortion.buffer),\n eachGeometryEdgeIndicesPortion: deflate(data.eachGeometryEdgeIndicesPortion.buffer),\n eachMeshGeometriesPortion: deflate(data.eachMeshGeometriesPortion.buffer),\n eachMeshMatricesPortion: deflate(data.eachMeshMatricesPortion.buffer),\n eachMeshTextureSet: deflate(data.eachMeshTextureSet.buffer),\n eachMeshMaterialAttributes: deflate(data.eachMeshMaterialAttributes.buffer),\n eachEntityId: deflate(JSON.stringify(data.eachEntityId)\n .replace(/[\\u007F-\\uFFFF]/g, function (chr) { // Produce only ASCII-chars, so that the data can be inflated later\n return \"\\\\u\" + (\"0000\" + chr.charCodeAt(0).toString(16)).substr(-4)\n })),\n eachEntityMeshesPortion: deflate(data.eachEntityMeshesPortion.buffer),\n eachTileAABB: deflate(data.eachTileAABB.buffer),\n eachTileEntitiesPortion: deflate(data.eachTileEntitiesPortion.buffer)\n };\n}\n\nfunction deflateJSON(strings) {\n return JSON.stringify(strings)\n .replace(/[\\u007F-\\uFFFF]/g, function (chr) { // Produce only ASCII-chars, so that the data can be inflated later\n return \"\\\\u\" + (\"0000\" + chr.charCodeAt(0).toString(16)).substr(-4)\n });\n}\n\nfunction createArrayBuffer(deflatedData) {\n return toArrayBuffer([\n deflatedData.metadata,\n deflatedData.textureData,\n deflatedData.eachTextureDataPortion,\n deflatedData.eachTextureAttributes,\n deflatedData.positions,\n deflatedData.normals,\n deflatedData.colors,\n deflatedData.uvs,\n deflatedData.indices,\n deflatedData.edgeIndices,\n deflatedData.eachTextureSetTextures,\n deflatedData.matrices,\n deflatedData.reusedGeometriesDecodeMatrix,\n deflatedData.eachGeometryPrimitiveType,\n deflatedData.eachGeometryPositionsPortion,\n deflatedData.eachGeometryNormalsPortion,\n deflatedData.eachGeometryColorsPortion,\n deflatedData.eachGeometryUVsPortion,\n deflatedData.eachGeometryIndicesPortion,\n deflatedData.eachGeometryEdgeIndicesPortion,\n deflatedData.eachMeshGeometriesPortion,\n deflatedData.eachMeshMatricesPortion,\n deflatedData.eachMeshTextureSet,\n deflatedData.eachMeshMaterialAttributes,\n deflatedData.eachEntityId,\n deflatedData.eachEntityMeshesPortion,\n deflatedData.eachTileAABB,\n deflatedData.eachTileEntitiesPortion\n ]);\n}\n\nfunction toArrayBuffer(elements) {\n const indexData = new Uint32Array(elements.length + 2);\n indexData[0] = 10; // XKT_VERSION for legacy v10 mode\n indexData [1] = elements.length; // Stored Data 1.1: number of stored elements\n let dataLen = 0; // Stored Data 1.2: length of stored elements\n for (let i = 0, len = elements.length; i < len; i++) {\n const element = elements[i];\n const elementsize = element.length;\n indexData[i + 2] = elementsize;\n dataLen += elementsize;\n }\n const indexBuf = new Uint8Array(indexData.buffer);\n const dataArray = new Uint8Array(indexBuf.length + dataLen);\n dataArray.set(indexBuf);\n let offset = indexBuf.length;\n for (let i = 0, len = elements.length; i < len; i++) { // Stored Data 2: the elements themselves\n const element = elements[i];\n dataArray.set(element, offset);\n offset += element.length;\n }\n return dataArray.buffer;\n}\n\nexport {writeXKTModelToArrayBuffer};","/**\n * @desc Provides info on the XKT generated by xeokit-convert.\n */\nconst XKT_INFO = {\n\n /**\n * The XKT version generated by xeokit-convert.\n *\n * This is the XKT version that's modeled by {@link XKTModel}, serialized\n * by {@link writeXKTModelToArrayBuffer}, and written by {@link convert2xkt}.\n *\n * * Current XKT version: **10**\n * * [XKT format specs](https://github.com/xeokit/xeokit-convert/blob/main/specs/index.md)\n *\n * @property xktVersion\n * @type {number}\n */\n xktVersion: 11\n};\n\nexport {XKT_INFO};","/*----------------------------------------------------------------------------------------------------------------------\n * NOTE: The values of these constants must match those within xeokit-sdk\n *--------------------------------------------------------------------------------------------------------------------*/\n\n/**\n * Texture wrapping mode in which the texture repeats to infinity.\n */\nexport const RepeatWrapping = 1000;\n\n/**\n * Texture wrapping mode in which the last pixel of the texture stretches to the edge of the mesh.\n */\nexport const ClampToEdgeWrapping = 1001;\n\n/**\n * Texture wrapping mode in which the texture repeats to infinity, mirroring on each repeat.\n */\nexport const MirroredRepeatWrapping = 1002;\n\n/**\n * Texture magnification and minification filter that returns the nearest texel to the given sample coordinates.\n */\nexport const NearestFilter = 1003;\n\n/**\n * Texture minification filter that chooses the mipmap that most closely matches the size of the pixel being textured and returns the nearest texel to the given sample coordinates.\n */\nexport const NearestMipMapNearestFilter = 1004;\n\n/**\n * Texture minification filter that chooses the mipmap that most closely matches the size of the pixel being textured\n * and returns the nearest texel to the given sample coordinates.\n */\nexport const NearestMipmapNearestFilter = 1004;\n\n/**\n * Texture minification filter that chooses two mipmaps that most closely match the size of the pixel being textured\n * and returns the nearest texel to the center of the pixel at the given sample coordinates.\n */\nexport const NearestMipmapLinearFilter = 1005;\n\n/**\n * Texture minification filter that chooses two mipmaps that most closely match the size of the pixel being textured\n * and returns the nearest texel to the center of the pixel at the given sample coordinates.\n */\nexport const NearestMipMapLinearFilter = 1005;\n\n/**\n * Texture magnification and minification filter that returns the weighted average of the four nearest texels to the given sample coordinates.\n */\nexport const LinearFilter = 1006;\n\n/**\n * Texture minification filter that chooses the mipmap that most closely matches the size of the pixel being textured and\n * returns the weighted average of the four nearest texels to the given sample coordinates.\n */\nexport const LinearMipmapNearestFilter = 1007;\n\n/**\n * Texture minification filter that chooses the mipmap that most closely matches the size of the pixel being textured and\n * returns the weighted average of the four nearest texels to the given sample coordinates.\n */\nexport const LinearMipMapNearestFilter = 1007;\n\n/**\n * Texture minification filter that chooses two mipmaps that most closely match the size of the pixel being textured,\n * finds within each mipmap the weighted average of the nearest texel to the center of the pixel, then returns the\n * weighted average of those two values.\n */\nexport const LinearMipmapLinearFilter = 1008;\n\n/**\n * Texture minification filter that chooses two mipmaps that most closely match the size of the pixel being textured,\n * finds within each mipmap the weighted average of the nearest texel to the center of the pixel, then returns the\n * weighted average of those two values.\n */\nexport const LinearMipMapLinearFilter = 1008;\n\n/**\n * Media type for GIF images.\n */\nexport const GIFMediaType = 10000;\n\n/**\n * Media type for JPEG images.\n */\nexport const JPEGMediaType = 10001;\n\n/**\n * Media type for PNG images.\n */\nexport const PNGMediaType = 10002;","import {XKT_INFO} from \"./XKT_INFO.js\";\nimport {XKTModel} from \"./XKTModel/XKTModel.js\";\nimport {parseCityJSONIntoXKTModel} from \"./parsers/parseCityJSONIntoXKTModel.js\";\nimport {parseGLTFIntoXKTModel} from \"./parsers/parseGLTFIntoXKTModel.js\";\nimport {parseIFCIntoXKTModel} from \"./parsers/parseIFCIntoXKTModel.js\";\nimport {parseLASIntoXKTModel} from \"./parsers/parseLASIntoXKTModel.js\";\nimport {parsePCDIntoXKTModel} from \"./parsers/parsePCDIntoXKTModel.js\";\nimport {parsePLYIntoXKTModel} from \"./parsers/parsePLYIntoXKTModel.js\";\nimport {parseSTLIntoXKTModel} from \"./parsers/parseSTLIntoXKTModel.js\";\nimport {writeXKTModelToArrayBuffer} from \"./XKTModel/writeXKTModelToArrayBuffer.js\";\n\nimport {toArrayBuffer} from \"./XKTModel/lib/toArraybuffer\";\n\nconst fs = require('fs');\nconst path = require(\"path\");\n\n/**\n * Converts model files into xeokit's native XKT format.\n *\n * Supported source formats are: IFC, CityJSON, glTF, LAZ and LAS.\n *\n * **Only bundled in xeokit-convert.cjs.js.**\n *\n * ## Usage\n *\n * ````javascript\n * const convert2xkt = require(\"@xeokit/xeokit-convert/dist/convert2xkt.cjs.js\");\n * const fs = require('fs');\n *\n * convert2xkt({\n * sourceData: fs.readFileSync(\"rme_advanced_sample_project.ifc\"),\n * outputXKT: (xtkArrayBuffer) => {\n * fs.writeFileSync(\"rme_advanced_sample_project.ifc.xkt\", xtkArrayBuffer);\n * }\n * }).then(() => {\n * console.log(\"Converted.\");\n * }, (errMsg) => {\n * console.error(\"Conversion failed: \" + errMsg)\n * });\n ````\n * @param {Object} params Conversion parameters.\n * @param {Object} params.WebIFC The WebIFC library. We pass this in as an external dependency, in order to give the\n * caller the choice of whether to use the Browser or NodeJS version.\n * @param {*} [params.configs] Configurations.\n * @param {String} [params.source] Path to source file. Alternative to ````sourceData````.\n * @param {ArrayBuffer|JSON} [params.sourceData] Source file data. Alternative to ````source````.\n * @param {String} [params.sourceFormat] Format of source file/data. Always needed with ````sourceData````, but not normally needed with ````source````, because convert2xkt will determine the format automatically from the file extension of ````source````.\n * @param {String} [params.metaModelDataStr] Source file data. Overrides metadata from ````metaModelSource````, ````sourceData```` and ````source````.\n * @param {String} [params.metaModelSource] Path to source metaModel file. Overrides metadata from ````sourceData```` and ````source````. Overridden by ````metaModelData````.\n * @param {String} [params.output] Path to destination XKT file. Directories on this path are automatically created if not existing.\n * @param {Function} [params.outputXKTModel] Callback to collect the ````XKTModel```` that is internally build by this method.\n * @param {Function} [params.outputXKT] Callback to collect XKT file data.\n * @param {String[]} [params.includeTypes] Option to only convert objects of these types.\n * @param {String[]} [params.excludeTypes] Option to never convert objects of these types.\n * @param {Object} [stats] Collects conversion statistics. Statistics are attached to this object if provided.\n * @param {Function} [params.outputStats] Callback to collect statistics.\n * @param {Boolean} [params.rotateX=false] Whether to rotate the model 90 degrees about the X axis to make the Y axis \"up\", if necessary. Applies to CityJSON and LAS/LAZ models.\n * @param {Boolean} [params.reuseGeometries=true] When true, will enable geometry reuse within the XKT. When false,\n * will automatically \"expand\" all reused geometries into duplicate copies. This has the drawback of increasing the XKT\n * file size (~10-30% for typical models), but can make the model more responsive in the xeokit Viewer, especially if the model\n * has excessive geometry reuse. An example of excessive geometry reuse would be when a model (eg. glTF) has 4000 geometries that are\n * shared amongst 2000 objects, ie. a large number of geometries with a low amount of reuse, which can present a\n * pathological performance case for xeokit's underlying graphics APIs (WebGL, WebGPU etc).\n * @param {Boolean} [params.includeTextures=true] Whether to convert textures. Only works for ````glTF```` models.\n * @param {Boolean} [params.includeNormals=true] Whether to convert normals. When false, the parser will ignore\n * geometry normals, and the modelwill rely on the xeokit ````Viewer```` to automatically generate them. This has\n * the limitation that the normals will be face-aligned, and therefore the ````Viewer```` will only be able to render\n * a flat-shaded non-PBR representation of the model.\n * @param {Number} [params.minTileSize=200] Minimum RTC coordinate tile size. Set this to a value between 100 and 10000,\n * depending on how far from the coordinate origin the model's vertex positions are; specify larger tile sizes when close\n * to the origin, and smaller sizes when distant. This compensates for decreasing precision as floats get bigger.\n * @param {Function} [params.log] Logging callback.\n * @return {Promise}\n */\nfunction convert2xkt({\n WebIFC,\n configs = {},\n source,\n sourceData,\n sourceFormat,\n metaModelSource,\n metaModelDataStr,\n modelAABB,\n output,\n outputXKTModel,\n outputXKT,\n includeTypes,\n excludeTypes,\n reuseGeometries = true,\n minTileSize = 200,\n stats = {},\n outputStats,\n rotateX = false,\n includeTextures = true,\n includeNormals = true,\n zip = true,\n log = function (msg) {\n }\n }) {\n\n stats.sourceFormat = \"\";\n stats.schemaVersion = \"\";\n stats.title = \"\";\n stats.author = \"\";\n stats.created = \"\";\n stats.numMetaObjects = 0;\n stats.numPropertySets = 0;\n stats.numTriangles = 0;\n stats.numVertices = 0;\n stats.numNormals = 0;\n stats.numUVs = 0;\n stats.numTextures = 0;\n stats.numTextureSets = 0;\n stats.numObjects = 0;\n stats.numGeometries = 0;\n stats.sourceSize = 0;\n stats.xktSize = 0;\n stats.texturesSize = 0;\n stats.xktVersion = \"\";\n stats.compressionRatio = 0;\n stats.conversionTime = 0;\n stats.aabb = null;\n\n function getFileExtension(fileName) {\n let ext = path.extname(fileName);\n if (ext.charAt(0) === \".\") {\n ext = ext.substring(1);\n }\n return ext;\n }\n\n return new Promise(function (resolve, reject) {\n const _log = log;\n log = (msg) => {\n _log(`[convert2xkt] ${msg}`)\n }\n\n if (!source && !sourceData) {\n reject(\"Argument expected: source or sourceData\");\n return;\n }\n\n if (!sourceFormat && sourceData) {\n reject(\"Argument expected: sourceFormat is required with sourceData\");\n return;\n }\n\n if (!output && !outputXKTModel && !outputXKT) {\n reject(\"Argument expected: output, outputXKTModel or outputXKT\");\n return;\n }\n\n if (source) {\n log('Reading input file: ' + source);\n }\n\n const startTime = new Date();\n\n const sourceConfigs = configs.sourceConfigs || {};\n const ext = sourceFormat || getFileExtension(source);\n\n log(`Input file extension: \"${ext}\"`);\n\n let fileTypeConfigs = sourceConfigs[ext];\n\n if (!fileTypeConfigs) {\n log(`[WARNING] Could not find configs sourceConfigs entry for source format \"${ext}\". This is derived from the source file name extension. Will use internal default configs.`);\n fileTypeConfigs = {};\n }\n\n function overrideOption(option1, option2) {\n if (option1 !== undefined) {\n return option1;\n }\n return option2;\n }\n\n if (!sourceData) {\n try {\n sourceData = fs.readFileSync(source);\n } catch (err) {\n reject(err);\n return;\n }\n }\n\n const sourceFileSizeBytes = sourceData.byteLength;\n\n log(\"Input file size: \" + (sourceFileSizeBytes / 1000).toFixed(2) + \" kB\");\n\n if (!metaModelDataStr && metaModelSource) {\n log('Reading input metadata file: ' + metaModelSource);\n try {\n metaModelDataStr = fs.readFileSync(metaModelSource);\n } catch (err) {\n reject(err);\n return;\n }\n } else {\n log(`Not embedding metadata in XKT`);\n }\n\n let metaModelJSON;\n\n if (metaModelDataStr) {\n try {\n metaModelJSON = JSON.parse(metaModelDataStr);\n } catch (e) {\n metaModelJSON = {};\n log(`Error parsing metadata JSON: ${e}`);\n }\n }\n\n minTileSize = overrideOption(fileTypeConfigs.minTileSize, minTileSize);\n rotateX = overrideOption(fileTypeConfigs.rotateX, rotateX);\n reuseGeometries = overrideOption(fileTypeConfigs.reuseGeometries, reuseGeometries);\n includeTextures = overrideOption(fileTypeConfigs.includeTextures, includeTextures);\n includeNormals = overrideOption(fileTypeConfigs.includeNormals, includeNormals);\n includeTypes = overrideOption(fileTypeConfigs.includeTypes, includeTypes);\n excludeTypes = overrideOption(fileTypeConfigs.excludeTypes, excludeTypes);\n\n if (reuseGeometries === false) {\n log(\"Geometry reuse is disabled\");\n }\n\n const xktModel = new XKTModel({\n minTileSize,\n modelAABB\n });\n\n switch (ext) {\n case \"json\":\n convert(parseCityJSONIntoXKTModel, {\n data: JSON.parse(sourceData),\n xktModel,\n stats,\n rotateX,\n center: fileTypeConfigs.center,\n transform: fileTypeConfigs.transform,\n log\n });\n break;\n\n case \"glb\":\n sourceData = toArrayBuffer(sourceData);\n convert(parseGLTFIntoXKTModel, {\n data: sourceData,\n reuseGeometries,\n includeTextures: true,\n includeNormals,\n metaModelData: metaModelJSON,\n xktModel,\n stats,\n log\n });\n break;\n\n case \"gltf\":\n sourceData = toArrayBuffer(sourceData);\n const gltfBasePath = source ? path.dirname(source) : \"\";\n convert(parseGLTFIntoXKTModel, {\n baseUri: gltfBasePath,\n data: sourceData,\n reuseGeometries,\n includeTextures: true,\n includeNormals,\n metaModelData: metaModelJSON,\n xktModel,\n stats,\n log\n });\n break;\n\n // case \"gltf\":\n // const gltfJSON = JSON.parse(sourceData);\n // const gltfBasePath = source ? getBasePath(source) : \"\";\n // convert(parseGLTFIntoXKTModel, {\n // baseUri: gltfBasePath,\n // data: gltfJSON,\n // reuseGeometries,\n // includeTextures,\n // includeNormals,\n // metaModelData: metaModelJSON,\n // xktModel,\n // getAttachment: async (name) => {\n // const filePath = gltfBasePath + name;\n // log(`Reading attachment file: ${filePath}`);\n // const buffer = fs.readFileSync(filePath);\n // const arrayBuf = toArrayBuffer(buffer);\n // return arrayBuf;\n // },\n // stats,\n // log\n // });\n // break;\n\n case \"ifc\":\n convert(parseIFCIntoXKTModel, {\n WebIFC,\n data: sourceData,\n xktModel,\n wasmPath: \"./\",\n includeTypes,\n excludeTypes,\n stats,\n log\n });\n break;\n\n case \"laz\":\n convert(parseLASIntoXKTModel, {\n data: sourceData,\n xktModel,\n stats,\n fp64: fileTypeConfigs.fp64,\n colorDepth: fileTypeConfigs.colorDepth,\n center: fileTypeConfigs.center,\n transform: fileTypeConfigs.transform,\n skip: overrideOption(fileTypeConfigs.skip, 1),\n log\n });\n break;\n\n case \"las\":\n convert(parseLASIntoXKTModel, {\n data: sourceData,\n xktModel,\n stats,\n fp64: fileTypeConfigs.fp64,\n colorDepth: fileTypeConfigs.colorDepth,\n center: fileTypeConfigs.center,\n transform: fileTypeConfigs.transform,\n skip: overrideOption(fileTypeConfigs.skip, 1),\n log\n });\n break;\n\n case \"pcd\":\n convert(parsePCDIntoXKTModel, {\n data: sourceData,\n xktModel,\n stats,\n log\n });\n break;\n\n case \"ply\":\n convert(parsePLYIntoXKTModel, {\n data: sourceData,\n xktModel,\n stats,\n log\n });\n break;\n\n case \"stl\":\n convert(parseSTLIntoXKTModel, {\n data: sourceData,\n xktModel,\n stats,\n log\n });\n break;\n\n default:\n reject(`Error: unsupported source format: \"${ext}\".`);\n return;\n }\n\n function convert(parser, converterParams) {\n\n parser(converterParams).then(() => {\n\n if (!metaModelJSON) {\n log(\"Creating default metamodel in XKT\");\n xktModel.createDefaultMetaObjects();\n }\n\n log(\"Input file parsed OK. Building XKT document...\");\n\n xktModel.finalize().then(() => {\n\n log(\"XKT document built OK. Writing to XKT file...\");\n\n const xktArrayBuffer = writeXKTModelToArrayBuffer(xktModel, metaModelJSON, stats, {zip: zip});\n\n const xktContent = Buffer.from(xktArrayBuffer);\n\n const targetFileSizeBytes = xktArrayBuffer.byteLength;\n\n stats.minTileSize = minTileSize || 200;\n stats.sourceSize = (sourceFileSizeBytes / 1000).toFixed(2);\n stats.xktSize = (targetFileSizeBytes / 1000).toFixed(2);\n stats.xktVersion = zip ? 10 : XKT_INFO.xktVersion;\n stats.compressionRatio = (sourceFileSizeBytes / targetFileSizeBytes).toFixed(2);\n stats.conversionTime = ((new Date() - startTime) / 1000.0).toFixed(2);\n stats.aabb = xktModel.aabb;\n log(`Converted to: XKT v${stats.xktVersion}`);\n if (includeTypes) {\n log(\"Include types: \" + (includeTypes ? includeTypes : \"(include all)\"));\n }\n if (excludeTypes) {\n log(\"Exclude types: \" + (excludeTypes ? excludeTypes : \"(exclude none)\"));\n }\n log(\"XKT size: \" + stats.xktSize + \" kB\");\n log(\"XKT textures size: \" + (stats.texturesSize / 1000).toFixed(2) + \"kB\");\n log(\"Compression ratio: \" + stats.compressionRatio);\n log(\"Conversion time: \" + stats.conversionTime + \" s\");\n log(\"Converted metaobjects: \" + stats.numMetaObjects);\n log(\"Converted property sets: \" + stats.numPropertySets);\n log(\"Converted drawable objects: \" + stats.numObjects);\n log(\"Converted geometries: \" + stats.numGeometries);\n log(\"Converted textures: \" + stats.numTextures);\n log(\"Converted textureSets: \" + stats.numTextureSets);\n log(\"Converted triangles: \" + stats.numTriangles);\n log(\"Converted vertices: \" + stats.numVertices);\n log(\"Converted UVs: \" + stats.numUVs);\n log(\"Converted normals: \" + stats.numNormals);\n log(\"Converted tiles: \" + xktModel.tilesList.length);\n log(\"minTileSize: \" + stats.minTileSize);\n\n if (output) {\n const outputDir = path.dirname(output);\n if (outputDir !== \"\" && !fs.existsSync(outputDir)) {\n fs.mkdirSync(outputDir, {recursive: true});\n }\n log('Writing XKT file: ' + output);\n fs.writeFileSync(output, xktContent);\n }\n\n if (outputXKTModel) {\n outputXKTModel(xktModel);\n }\n\n if (outputXKT) {\n outputXKT(xktContent);\n }\n\n if (outputStats) {\n outputStats(stats);\n }\n\n resolve();\n });\n }, (err) => {\n reject(err);\n });\n }\n });\n}\n\nexport {convert2xkt};","/**\n * @desc Creates box-shaped triangle mesh geometry arrays.\n *\n * ## Usage\n *\n * In the example below we'll create an {@link XKTModel}, then create an {@link XKTMesh} with a box-shaped {@link XKTGeometry}.\n *\n * [[Run this example](http://xeokit.github.io/xeokit-sdk/examples/#geometry_builders_buildBoxGeometry)]\n *\n * ````javascript\n * const xktModel = new XKTModel();\n *\n * const box = buildBoxGeometry({\n * primitiveType: \"triangles\" // or \"lines\"\n * center: [0,0,0],\n * xSize: 1, // Half-size on each axis\n * ySize: 1,\n * zSize: 1\n * });\n *\n * const xktGeometry = xktModel.createGeometry({\n * geometryId: \"boxGeometry\",\n * primitiveType: box.primitiveType,\n * positions: box.positions,\n * normals: box.normals,\n * indices: box.indices\n * });\n *\n * const xktMesh = xktModel.createMesh({\n * meshId: \"redBoxMesh\",\n * geometryId: \"boxGeometry\",\n * position: [-4, -6, -4],\n * scale: [1, 3, 1],\n * rotation: [0, 0, 0],\n * color: [1, 0, 0],\n * opacity: 1\n * });\n *\n * const xktEntity = xktModel.createEntity({\n * entityId: \"redBox\",\n * meshIds: [\"redBoxMesh\"]\n * });\n *\n * xktModel.finalize();\n * ````\n *\n * @function buildBoxGeometry\n * @param {*} [cfg] Configs\n * @param {Number[]} [cfg.center] 3D point indicating the center position.\n * @param {Number} [cfg.xSize=1.0] Half-size on the X-axis.\n * @param {Number} [cfg.ySize=1.0] Half-size on the Y-axis.\n * @param {Number} [cfg.zSize=1.0] Half-size on the Z-axis.\n * @returns {Object} Geometry arrays for {@link XKTModel#createGeometry} or {@link XKTModel#createMesh}.\n */\nfunction buildBoxGeometry(cfg = {}) {\n\n let xSize = cfg.xSize || 1;\n if (xSize < 0) {\n console.error(\"negative xSize not allowed - will invert\");\n xSize *= -1;\n }\n\n let ySize = cfg.ySize || 1;\n if (ySize < 0) {\n console.error(\"negative ySize not allowed - will invert\");\n ySize *= -1;\n }\n\n let zSize = cfg.zSize || 1;\n if (zSize < 0) {\n console.error(\"negative zSize not allowed - will invert\");\n zSize *= -1;\n }\n\n const center = cfg.center;\n const centerX = center ? center[0] : 0;\n const centerY = center ? center[1] : 0;\n const centerZ = center ? center[2] : 0;\n\n const xmin = -xSize + centerX;\n const ymin = -ySize + centerY;\n const zmin = -zSize + centerZ;\n const xmax = xSize + centerX;\n const ymax = ySize + centerY;\n const zmax = zSize + centerZ;\n\n return {\n\n primitiveType: \"triangles\",\n\n // The vertices - eight for our cube, each\n // one spanning three array elements for X,Y and Z\n\n positions: [\n\n // v0-v1-v2-v3 front\n xmax, ymax, zmax,\n xmin, ymax, zmax,\n xmin, ymin, zmax,\n xmax, ymin, zmax,\n\n // v0-v3-v4-v1 right\n xmax, ymax, zmax,\n xmax, ymin, zmax,\n xmax, ymin, zmin,\n xmax, ymax, zmin,\n\n // v0-v1-v6-v1 top\n xmax, ymax, zmax,\n xmax, ymax, zmin,\n xmin, ymax, zmin,\n xmin, ymax, zmax,\n\n // v1-v6-v7-v2 left\n xmin, ymax, zmax,\n xmin, ymax, zmin,\n xmin, ymin, zmin,\n xmin, ymin, zmax,\n\n // v7-v4-v3-v2 bottom\n xmin, ymin, zmin,\n xmax, ymin, zmin,\n xmax, ymin, zmax,\n xmin, ymin, zmax,\n\n // v4-v7-v6-v1 back\n xmax, ymin, zmin,\n xmin, ymin, zmin,\n xmin, ymax, zmin,\n xmax, ymax, zmin\n ],\n\n // Normal vectors, one for each vertex\n normals: [\n\n // v0-v1-v2-v3 front\n 0, 0, 1,\n 0, 0, 1,\n 0, 0, 1,\n 0, 0, 1,\n\n // v0-v3-v4-v5 right\n 1, 0, 0,\n 1, 0, 0,\n 1, 0, 0,\n 1, 0, 0,\n\n // v0-v5-v6-v1 top\n 0, 1, 0,\n 0, 1, 0,\n 0, 1, 0,\n 0, 1, 0,\n\n // v1-v6-v7-v2 left\n -1, 0, 0,\n -1, 0, 0,\n -1, 0, 0,\n -1, 0, 0,\n\n // v7-v4-v3-v2 bottom\n 0, -1, 0,\n 0, -1, 0,\n 0, -1, 0,\n 0, -1, 0,\n\n // v4-v7-v6-v5 back\n 0, 0, -1,\n 0, 0, -1,\n 0, 0, -1,\n 0, 0, -1\n ],\n\n // UV coords\n uv: [\n\n // v0-v1-v2-v3 front\n 1, 0,\n 0, 0,\n 0, 1,\n 1, 1,\n\n // v0-v3-v4-v1 right\n 0, 0,\n 0, 1,\n 1, 1,\n 1, 0,\n\n // v0-v1-v6-v1 top\n 1, 1,\n 1, 0,\n 0, 0,\n 0, 1,\n\n // v1-v6-v7-v2 left\n 1, 0,\n 0, 0,\n 0, 1,\n 1, 1,\n\n // v7-v4-v3-v2 bottom\n 0, 1,\n 1, 1,\n 1, 0,\n 0, 0,\n\n // v4-v7-v6-v1 back\n 0, 1,\n 1, 1,\n 1, 0,\n 0, 0\n ],\n\n // Indices - these organise the\n // positions and uv texture coordinates\n // into geometric primitives in accordance\n // with the \"primitive\" parameter,\n // in this case a set of three indices\n // for each triangle.\n //\n // Note that each triangle is specified\n // in counter-clockwise winding order.\n //\n // You can specify them in clockwise\n // order if you configure the Modes\n // node's frontFace flag as \"cw\", instead of\n // the default \"ccw\".\n indices: [\n 0, 1, 2,\n 0, 2, 3,\n // front\n 4, 5, 6,\n 4, 6, 7,\n // right\n 8, 9, 10,\n 8, 10, 11,\n // top\n 12, 13, 14,\n 12, 14, 15,\n // left\n 16, 17, 18,\n 16, 18, 19,\n // bottom\n 20, 21, 22,\n 20, 22, 23\n ]\n };\n}\n\nexport {buildBoxGeometry};\n","/**\n * @desc Creates box-shaped line segment geometry arrays.\n *\n * ## Usage\n *\n * In the example below we'll create an {@link XKTModel}, then create an {@link XKTMesh} with a box-shaped {@link XKTGeometry}.\n *\n * [[Run this example](http://xeokit.github.io/xeokit-sdk/examples/#geometry_builders_buildBoxLinesGeometry)]\n *\n * ````javascript\n * const xktModel = new XKTModel();\n *\n * const box = buildBoxLinesGeometry({\n * center: [0,0,0],\n * xSize: 1, // Half-size on each axis\n * ySize: 1,\n * zSize: 1\n * });\n *\n * const xktGeometry = xktModel.createGeometry({\n * geometryId: \"boxGeometry\",\n * primitiveType: box.primitiveType, // \"lines\"\n * positions: box.positions,\n * normals: box.normals,\n * indices: box.indices\n * });\n *\n * const xktMesh = xktModel.createMesh({\n * meshId: \"redBoxMesh\",\n * geometryId: \"boxGeometry\",\n * position: [-4, -6, -4],\n * scale: [1, 3, 1],\n * rotation: [0, 0, 0],\n * color: [1, 0, 0],\n * opacity: 1\n * });\n *\n * const xktEntity = xktModel.createEntity({\n * entityId: \"redBox\",\n * meshIds: [\"redBoxMesh\"]\n * });\n *\n * xktModel.finalize();\n * ````\n *\n * @function buildBoxLinesGeometry\n * @param {*} [cfg] Configs\n * @param {Number[]} [cfg.center] 3D point indicating the center position.\n * @param {Number} [cfg.xSize=1.0] Half-size on the X-axis.\n * @param {Number} [cfg.ySize=1.0] Half-size on the Y-axis.\n * @param {Number} [cfg.zSize=1.0] Half-size on the Z-axis.\n * @returns {Object} Geometry arrays for {@link XKTModel#createGeometry} or {@link XKTModel#createMesh}.\n */\nfunction buildBoxLinesGeometry(cfg = {}) {\n\n let xSize = cfg.xSize || 1;\n if (xSize < 0) {\n console.error(\"negative xSize not allowed - will invert\");\n xSize *= -1;\n }\n\n let ySize = cfg.ySize || 1;\n if (ySize < 0) {\n console.error(\"negative ySize not allowed - will invert\");\n ySize *= -1;\n }\n\n let zSize = cfg.zSize || 1;\n if (zSize < 0) {\n console.error(\"negative zSize not allowed - will invert\");\n zSize *= -1;\n }\n\n const center = cfg.center;\n const centerX = center ? center[0] : 0;\n const centerY = center ? center[1] : 0;\n const centerZ = center ? center[2] : 0;\n\n const xmin = -xSize + centerX;\n const ymin = -ySize + centerY;\n const zmin = -zSize + centerZ;\n const xmax = xSize + centerX;\n const ymax = ySize + centerY;\n const zmax = zSize + centerZ;\n\n return {\n primitiveType: \"lines\",\n positions: [\n xmin, ymin, zmin,\n xmin, ymin, zmax,\n xmin, ymax, zmin,\n xmin, ymax, zmax,\n xmax, ymin, zmin,\n xmax, ymin, zmax,\n xmax, ymax, zmin,\n xmax, ymax, zmax\n ],\n indices: [\n 0, 1,\n 1, 3,\n 3, 2,\n 2, 0,\n 4, 5,\n 5, 7,\n 7, 6,\n 6, 4,\n 0, 4,\n 1, 5,\n 2, 6,\n 3, 7\n ]\n }\n}\n\nexport {buildBoxLinesGeometry};\n","/**\n * @desc Creates cylinder-shaped geometry arrays.\n *\n * ## Usage\n *\n * In the example below we'll create an {@link XKTModel}, then create an {@link XKTMesh} with a cylinder-shaped {@link XKTGeometry}.\n *\n * [[Run this example](http://xeokit.github.io/xeokit-sdk/examples/#geometry_builders_buildCylinderGeometry)]\n *\n * ````javascript\n * const xktModel = new XKTModel();\n *\n * const cylinder = buildCylinderGeometry({\n * center: [0,0,0],\n * radiusTop: 2.0,\n * radiusBottom: 2.0,\n * height: 5.0,\n * radialSegments: 20,\n * heightSegments: 1,\n * openEnded: false\n * });\n *\n * const xktGeometry = xktModel.createGeometry({\n * geometryId: \"cylinderGeometry\",\n * primitiveType: cylinder.primitiveType,\n * positions: cylinder.positions,\n * normals: cylinder.normals,\n * indices: cylinder.indices\n * });\n *\n * const xktMesh = xktModel.createMesh({\n * meshId: \"redCylinderMesh\",\n * geometryId: \"cylinderGeometry\",\n * position: [-4, -6, -4],\n * scale: [1, 3, 1],\n * rotation: [0, 0, 0],\n * color: [1, 0, 0],\n * opacity: 1\n * });\n *\n * const xktEntity = xktModel.createEntity({\n * entityId: \"redCylinder\",\n * meshIds: [\"redCylinderMesh\"]\n * });\n *\n * xktModel.finalize();\n * ````\n *\n * @function buildCylinderGeometry\n * @param {*} [cfg] Configs\n * @param {Number[]} [cfg.center] 3D point indicating the center position.\n * @param {Number} [cfg.radiusTop=1] Radius of top.\n * @param {Number} [cfg.radiusBottom=1] Radius of bottom.\n * @param {Number} [cfg.height=1] Height.\n * @param {Number} [cfg.radialSegments=60] Number of horizontal segments.\n * @param {Number} [cfg.heightSegments=1] Number of vertical segments.\n * @param {Boolean} [cfg.openEnded=false] Whether or not the cylinder has solid caps on the ends.\n * @returns {Object} Geometry arrays for {@link XKTModel#createGeometry} or {@link XKTModel#createMesh}.\n */\nfunction buildCylinderGeometry(cfg = {}) {\n\n let radiusTop = cfg.radiusTop || 1;\n if (radiusTop < 0) {\n console.error(\"negative radiusTop not allowed - will invert\");\n radiusTop *= -1;\n }\n\n let radiusBottom = cfg.radiusBottom || 1;\n if (radiusBottom < 0) {\n console.error(\"negative radiusBottom not allowed - will invert\");\n radiusBottom *= -1;\n }\n\n let height = cfg.height || 1;\n if (height < 0) {\n console.error(\"negative height not allowed - will invert\");\n height *= -1;\n }\n\n let radialSegments = cfg.radialSegments || 32;\n if (radialSegments < 0) {\n console.error(\"negative radialSegments not allowed - will invert\");\n radialSegments *= -1;\n }\n if (radialSegments < 3) {\n radialSegments = 3;\n }\n\n let heightSegments = cfg.heightSegments || 1;\n if (heightSegments < 0) {\n console.error(\"negative heightSegments not allowed - will invert\");\n heightSegments *= -1;\n }\n if (heightSegments < 1) {\n heightSegments = 1;\n }\n\n const openEnded = !!cfg.openEnded;\n\n let center = cfg.center;\n const centerX = center ? center[0] : 0;\n const centerY = center ? center[1] : 0;\n const centerZ = center ? center[2] : 0;\n\n const heightHalf = height / 2;\n const heightLength = height / heightSegments;\n const radialAngle = (2.0 * Math.PI / radialSegments);\n const radialLength = 1.0 / radialSegments;\n //var nextRadius = this._radiusBottom;\n const radiusChange = (radiusTop - radiusBottom) / heightSegments;\n\n const positions = [];\n const normals = [];\n const uvs = [];\n const indices = [];\n\n let h;\n let i;\n\n let x;\n let z;\n\n let currentRadius;\n let currentHeight;\n\n let first;\n let second;\n\n let startIndex;\n let tu;\n let tv;\n\n // create vertices\n const normalY = (90.0 - (Math.atan(height / (radiusBottom - radiusTop))) * 180 / Math.PI) / 90.0;\n\n for (h = 0; h <= heightSegments; h++) {\n currentRadius = radiusTop - h * radiusChange;\n currentHeight = heightHalf - h * heightLength;\n\n for (i = 0; i <= radialSegments; i++) {\n x = Math.sin(i * radialAngle);\n z = Math.cos(i * radialAngle);\n\n normals.push(currentRadius * x);\n normals.push(normalY); //todo\n normals.push(currentRadius * z);\n\n uvs.push((i * radialLength));\n uvs.push(h * 1 / heightSegments);\n\n positions.push((currentRadius * x) + centerX);\n positions.push((currentHeight) + centerY);\n positions.push((currentRadius * z) + centerZ);\n }\n }\n\n // create faces\n for (h = 0; h < heightSegments; h++) {\n for (i = 0; i <= radialSegments; i++) {\n\n first = h * (radialSegments + 1) + i;\n second = first + radialSegments;\n\n indices.push(first);\n indices.push(second);\n indices.push(second + 1);\n\n indices.push(first);\n indices.push(second + 1);\n indices.push(first + 1);\n }\n }\n\n // create top cap\n if (!openEnded && radiusTop > 0) {\n startIndex = (positions.length / 3);\n\n // top center\n normals.push(0.0);\n normals.push(1.0);\n normals.push(0.0);\n\n uvs.push(0.5);\n uvs.push(0.5);\n\n positions.push(0 + centerX);\n positions.push(heightHalf + centerY);\n positions.push(0 + centerZ);\n\n // top triangle fan\n for (i = 0; i <= radialSegments; i++) {\n x = Math.sin(i * radialAngle);\n z = Math.cos(i * radialAngle);\n tu = (0.5 * Math.sin(i * radialAngle)) + 0.5;\n tv = (0.5 * Math.cos(i * radialAngle)) + 0.5;\n\n normals.push(radiusTop * x);\n normals.push(1.0);\n normals.push(radiusTop * z);\n\n uvs.push(tu);\n uvs.push(tv);\n\n positions.push((radiusTop * x) + centerX);\n positions.push((heightHalf) + centerY);\n positions.push((radiusTop * z) + centerZ);\n }\n\n for (i = 0; i < radialSegments; i++) {\n center = startIndex;\n first = startIndex + 1 + i;\n\n indices.push(first);\n indices.push(first + 1);\n indices.push(center);\n }\n }\n\n // create bottom cap\n if (!openEnded && radiusBottom > 0) {\n\n startIndex = (positions.length / 3);\n\n // top center\n normals.push(0.0);\n normals.push(-1.0);\n normals.push(0.0);\n\n uvs.push(0.5);\n uvs.push(0.5);\n\n positions.push(0 + centerX);\n positions.push(0 - heightHalf + centerY);\n positions.push(0 + centerZ);\n\n // top triangle fan\n for (i = 0; i <= radialSegments; i++) {\n\n x = Math.sin(i * radialAngle);\n z = Math.cos(i * radialAngle);\n\n tu = (0.5 * Math.sin(i * radialAngle)) + 0.5;\n tv = (0.5 * Math.cos(i * radialAngle)) + 0.5;\n\n normals.push(radiusBottom * x);\n normals.push(-1.0);\n normals.push(radiusBottom * z);\n\n uvs.push(tu);\n uvs.push(tv);\n\n positions.push((radiusBottom * x) + centerX);\n positions.push((0 - heightHalf) + centerY);\n positions.push((radiusBottom * z) + centerZ);\n }\n\n for (i = 0; i < radialSegments; i++) {\n\n center = startIndex;\n first = startIndex + 1 + i;\n\n indices.push(center);\n indices.push(first + 1);\n indices.push(first);\n }\n }\n\n return {\n primitiveType: \"triangles\",\n positions: positions,\n normals: normals,\n uv: uvs,\n uvs: uvs,\n indices: indices\n };\n}\n\n\nexport {buildCylinderGeometry};\n","/**\n * @desc Creates grid-shaped geometry arrays..\n *\n * ## Usage\n *\n * In the example below we'll create an {@link XKTModel}, then create an {@link XKTMesh} with a grid-shaped {@link XKTGeometry}.\n *\n * [[Run this example](http://xeokit.github.io/xeokit-sdk/examples/#geometry_builders_buildGridGeometry)]\n *\n * ````javascript\n * const xktModel = new XKTModel();\n *\n * const grid = buildGridGeometry({\n * size: 1000,\n * divisions: 500\n * });\n *\n * const xktGeometry = xktModel.createGeometry({\n * geometryId: \"gridGeometry\",\n * primitiveType: grid.primitiveType, // Will be \"lines\"\n * positions: grid.positions,\n * indices: grid.indices\n * });\n *\n * const xktMesh = xktModel.createMesh({\n * meshId: \"redGridMesh\",\n * geometryId: \"gridGeometry\",\n * position: [-4, -6, -4],\n * scale: [1, 3, 1],\n * rotation: [0, 0, 0],\n * color: [1, 0, 0],\n * opacity: 1\n * });\n *\n * const xktEntity = xktModel.createEntity({\n * entityId: \"redGrid\",\n * meshIds: [\"redGridMesh\"]\n * });\n *\n * xktModel.finalize();\n * ````\n *\n * @function buildGridGeometry\n * @param {*} [cfg] Configs\n * @param {Number} [cfg.size=1] Dimension on the X and Z-axis.\n * @param {Number} [cfg.divisions=1] Number of divisions on X and Z axis..\n * @returns {Object} Geometry arrays for {@link XKTModel#createGeometry} or {@link XKTModel#createMesh}.\n */\nfunction buildGridGeometry(cfg = {}) {\n\n let size = cfg.size || 1;\n if (size < 0) {\n console.error(\"negative size not allowed - will invert\");\n size *= -1;\n }\n\n let divisions = cfg.divisions || 1;\n if (divisions < 0) {\n console.error(\"negative divisions not allowed - will invert\");\n divisions *= -1;\n }\n if (divisions < 1) {\n divisions = 1;\n }\n\n size = size || 10;\n divisions = divisions || 10;\n\n const step = size / divisions;\n const halfSize = size / 2;\n\n const positions = [];\n const indices = [];\n let l = 0;\n\n for (let i = 0, j = 0, k = -halfSize; i <= divisions; i++, k += step) {\n\n positions.push(-halfSize);\n positions.push(0);\n positions.push(k);\n\n positions.push(halfSize);\n positions.push(0);\n positions.push(k);\n\n positions.push(k);\n positions.push(0);\n positions.push(-halfSize);\n\n positions.push(k);\n positions.push(0);\n positions.push(halfSize);\n\n indices.push(l++);\n indices.push(l++);\n indices.push(l++);\n indices.push(l++);\n }\n\n return {\n primitiveType: \"lines\",\n positions: positions,\n indices: indices\n };\n}\n\n\nexport {buildGridGeometry};\n","/**\n * @desc Creates plane-shaped geometry arrays.\n *\n * ## Usage\n *\n * In the example below we'll create an {@link XKTModel}, then create an {@link XKTMesh} with a plane-shaped {@link XKTGeometry}.\n *\n * [[Run this example](http://xeokit.github.io/xeokit-sdk/examples/#geometry_builders_buildPlaneGeometry)]\n *\n * ````javascript\n * const xktModel = new XKTModel();\n *\n * const plane = buildPlaneGeometry({\n * center: [0,0,0],\n * xSize: 2,\n * zSize: 2,\n * xSegments: 10,\n * zSegments: 10\n * });\n *\n * const xktGeometry = xktModel.createGeometry({\n * geometryId: \"planeGeometry\",\n * primitiveType: plane.primitiveType, // Will be \"triangles\"\n * positions: plane.positions,\n * normals: plane.normals,\n * indices: plane.indices\n * });\n *\n * const xktMesh = xktModel.createMesh({\n * meshId: \"redPlaneMesh\",\n * geometryId: \"planeGeometry\",\n * position: [-4, -6, -4],\n * scale: [1, 3, 1],\n * rotation: [0, 0, 0],\n * color: [1, 0, 0],\n * opacity: 1\n * });\n *\n * const xktEntity = xktModel.createEntity({\n * entityId: \"redPlane\",\n * meshIds: [\"redPlaneMesh\"]\n * });\n *\n * xktModel.finalize();\n * ````\n *\n * @function buildPlaneGeometry\n * @param {*} [cfg] Configs\n * @param {Number[]} [cfg.center] 3D point indicating the center position.\n * @param {Number} [cfg.xSize=1] Dimension on the X-axis.\n * @param {Number} [cfg.zSize=1] Dimension on the Z-axis.\n * @param {Number} [cfg.xSegments=1] Number of segments on the X-axis.\n * @param {Number} [cfg.zSegments=1] Number of segments on the Z-axis.\n * @returns {Object} Geometry arrays for {@link XKTModel#createGeometry} or {@link XKTModel#createMesh}.\n */\nfunction buildPlaneGeometry(cfg = {}) {\n\n let xSize = cfg.xSize || 1;\n if (xSize < 0) {\n console.error(\"negative xSize not allowed - will invert\");\n xSize *= -1;\n }\n\n let zSize = cfg.zSize || 1;\n if (zSize < 0) {\n console.error(\"negative zSize not allowed - will invert\");\n zSize *= -1;\n }\n\n let xSegments = cfg.xSegments || 1;\n if (xSegments < 0) {\n console.error(\"negative xSegments not allowed - will invert\");\n xSegments *= -1;\n }\n if (xSegments < 1) {\n xSegments = 1;\n }\n\n let zSegments = cfg.xSegments || 1;\n if (zSegments < 0) {\n console.error(\"negative zSegments not allowed - will invert\");\n zSegments *= -1;\n }\n if (zSegments < 1) {\n zSegments = 1;\n }\n\n const center = cfg.center;\n const centerX = center ? center[0] : 0;\n const centerY = center ? center[1] : 0;\n const centerZ = center ? center[2] : 0;\n\n const halfWidth = xSize / 2;\n const halfHeight = zSize / 2;\n\n const planeX = Math.floor(xSegments) || 1;\n const planeZ = Math.floor(zSegments) || 1;\n\n const planeX1 = planeX + 1;\n const planeZ1 = planeZ + 1;\n\n const segmentWidth = xSize / planeX;\n const segmentHeight = zSize / planeZ;\n\n const positions = new Float32Array(planeX1 * planeZ1 * 3);\n const normals = new Float32Array(planeX1 * planeZ1 * 3);\n const uvs = new Float32Array(planeX1 * planeZ1 * 2);\n\n let offset = 0;\n let offset2 = 0;\n\n let iz;\n let ix;\n let x;\n let a;\n let b;\n let c;\n let d;\n\n for (iz = 0; iz < planeZ1; iz++) {\n\n const z = iz * segmentHeight - halfHeight;\n\n for (ix = 0; ix < planeX1; ix++) {\n\n x = ix * segmentWidth - halfWidth;\n\n positions[offset] = x + centerX;\n positions[offset + 1] = centerY;\n positions[offset + 2] = -z + centerZ;\n\n normals[offset + 2] = -1;\n\n uvs[offset2] = (ix) / planeX;\n uvs[offset2 + 1] = ((planeZ - iz) / planeZ);\n\n offset += 3;\n offset2 += 2;\n }\n }\n\n offset = 0;\n\n const indices = new ((positions.length / 3) > 65535 ? Uint32Array : Uint16Array)(planeX * planeZ * 6);\n\n for (iz = 0; iz < planeZ; iz++) {\n\n for (ix = 0; ix < planeX; ix++) {\n\n a = ix + planeX1 * iz;\n b = ix + planeX1 * (iz + 1);\n c = (ix + 1) + planeX1 * (iz + 1);\n d = (ix + 1) + planeX1 * iz;\n\n indices[offset] = d;\n indices[offset + 1] = b;\n indices[offset + 2] = a;\n\n indices[offset + 3] = d;\n indices[offset + 4] = c;\n indices[offset + 5] = b;\n\n offset += 6;\n }\n }\n\n return {\n primitiveType: \"triangles\",\n positions: positions,\n normals: normals,\n uv: uvs,\n uvs: uvs,\n indices: indices\n };\n}\n\nexport {buildPlaneGeometry};\n","/**\n * @desc Creates sphere-shaped geometry arrays.\n *\n * ## Usage\n *\n * In the example below we'll create an {@link XKTModel}, then create an {@link XKTMesh} with a sphere-shaped {@link XKTGeometry}.\n *\n * [[Run this example](http://xeokit.github.io/xeokit-sdk/examples/#geometry_builders_buildSphereGeometry)]\n *\n * ````javascript\n * const xktModel = new XKTModel();\n *\n * const sphere = buildSphereGeometry({\n * center: [0,0,0],\n * radius: 1.5,\n * heightSegments: 60,\n * widthSegments: 60\n * });\n *\n * const xktGeometry = xktModel.createGeometry({\n * geometryId: \"sphereGeometry\",\n * primitiveType: sphere.primitiveType, // Will be \"triangles\"\n * positions: sphere.positions,\n * normals: sphere.normals,\n * indices: sphere.indices\n * });\n *\n * const xktMesh = xktModel.createMesh({\n * meshId: \"redSphereMesh\",\n * geometryId: \"sphereGeometry\",\n * position: [-4, -6, -4],\n * scale: [1, 3, 1],\n * rotation: [0, 0, 0],\n * color: [1, 0, 0],\n * opacity: 1\n * });\n *\n *const xktEntity = xktModel.createEntity({\n * entityId: \"redSphere\",\n * meshIds: [\"redSphereMesh\"]\n * });\n *\n * xktModel.finalize();\n * ````\n *\n * @function buildSphereGeometry\n * @param {*} [cfg] Configs\n * @param {Number[]} [cfg.center] 3D point indicating the center position.\n * @param {Number} [cfg.radius=1] Radius.\n * @param {Number} [cfg.heightSegments=24] Number of latitudinal bands.\n * @param {Number} [cfg.widthSegments=18] Number of longitudinal bands.\n * @returns {Object} Geometry arrays for {@link XKTModel#createGeometry} or {@link XKTModel#createMesh}.\n */\nfunction buildSphereGeometry(cfg = {}) {\n\n const lod = cfg.lod || 1;\n\n const centerX = cfg.center ? cfg.center[0] : 0;\n const centerY = cfg.center ? cfg.center[1] : 0;\n const centerZ = cfg.center ? cfg.center[2] : 0;\n\n let radius = cfg.radius || 1;\n if (radius < 0) {\n console.error(\"negative radius not allowed - will invert\");\n radius *= -1;\n }\n\n let heightSegments = cfg.heightSegments || 18;\n if (heightSegments < 0) {\n console.error(\"negative heightSegments not allowed - will invert\");\n heightSegments *= -1;\n }\n heightSegments = Math.floor(lod * heightSegments);\n if (heightSegments < 18) {\n heightSegments = 18;\n }\n\n let widthSegments = cfg.widthSegments || 18;\n if (widthSegments < 0) {\n console.error(\"negative widthSegments not allowed - will invert\");\n widthSegments *= -1;\n }\n widthSegments = Math.floor(lod * widthSegments);\n if (widthSegments < 18) {\n widthSegments = 18;\n }\n\n const positions = [];\n const normals = [];\n const uvs = [];\n const indices = [];\n\n let i;\n let j;\n\n let theta;\n let sinTheta;\n let cosTheta;\n\n let phi;\n let sinPhi;\n let cosPhi;\n\n let x;\n let y;\n let z;\n\n let u;\n let v;\n\n let first;\n let second;\n\n for (i = 0; i <= heightSegments; i++) {\n\n theta = i * Math.PI / heightSegments;\n sinTheta = Math.sin(theta);\n cosTheta = Math.cos(theta);\n\n for (j = 0; j <= widthSegments; j++) {\n\n phi = j * 2 * Math.PI / widthSegments;\n sinPhi = Math.sin(phi);\n cosPhi = Math.cos(phi);\n\n x = cosPhi * sinTheta;\n y = cosTheta;\n z = sinPhi * sinTheta;\n u = 1.0 - j / widthSegments;\n v = i / heightSegments;\n\n normals.push(x);\n normals.push(y);\n normals.push(z);\n\n uvs.push(u);\n uvs.push(v);\n\n positions.push(centerX + radius * x);\n positions.push(centerY + radius * y);\n positions.push(centerZ + radius * z);\n }\n }\n\n for (i = 0; i < heightSegments; i++) {\n for (j = 0; j < widthSegments; j++) {\n\n first = (i * (widthSegments + 1)) + j;\n second = first + widthSegments + 1;\n\n indices.push(first + 1);\n indices.push(second + 1);\n indices.push(second);\n indices.push(first + 1);\n indices.push(second);\n indices.push(first);\n }\n }\n\n return {\n primitiveType: \"triangles\",\n positions: positions,\n normals: normals,\n uv: uvs,\n uvs: uvs,\n indices: indices\n };\n}\n\nexport {buildSphereGeometry};\n","import {math} from '../lib/math.js';\n\n/**\n * @desc Creates torus-shaped geometry arrays.\n *\n * ## Usage\n *\n * In the example below we'll create an {@link XKTModel}, then create an {@link XKTMesh} with a torus-shaped {@link XKTGeometry}.\n *\n * [[Run this example](http://xeokit.github.io/xeokit-sdk/examples/#geometry_builders_buildTorusGeometry)]\n *\n * ````javascript\n * const xktModel = new XKTModel();\n *\n * const torus = buildTorusGeometry({\n * center: [0,0,0],\n * radius: 1.0,\n * tube: 0.5,\n * radialSegments: 32,\n * tubeSegments: 24,\n * arc: Math.PI * 2.0\n * });\n *\n * const xktGeometry = xktModel.createGeometry({\n * geometryId: \"torusGeometry\",\n * primitiveType: torus.primitiveType, // Will be \"triangles\"\n * positions: torus.positions,\n * normals: torus.normals,\n * indices: torus.indices\n * });\n *\n * const xktMesh = xktModel.createMesh({\n * meshId: \"redTorusMesh\",\n * geometryId: \"torusGeometry\",\n * position: [-4, -6, -4],\n * scale: [1, 3, 1],\n * rotation: [0, 0, 0],\n * color: [1, 0, 0],\n * opacity: 1\n * });\n *\n * const xktEntity = xktModel.createEntity({\n * entityId: \"redTorus\",\n * meshIds: [\"redTorusMesh\"]\n * });\n *\n * xktModel.finalize();\n * ````\n *\n * @function buildTorusGeometry\n * @param {*} [cfg] Configs\n * @param {Number[]} [cfg.center] 3D point indicating the center position.\n * @param {Number} [cfg.radius=1] The overall radius.\n * @param {Number} [cfg.tube=0.3] The tube radius.\n * @param {Number} [cfg.radialSegments=32] The number of radial segments.\n * @param {Number} [cfg.tubeSegments=24] The number of tubular segments.\n * @param {Number} [cfg.arc=Math.PI*0.5] The length of the arc in radians, where Math.PI*2 is a closed torus.\n * @returns {Object} Geometry arrays for {@link XKTModel#createGeometry} or {@link XKTModel#createMesh}.\n */\nfunction buildTorusGeometry(cfg = {}) {\n\n let radius = cfg.radius || 1;\n if (radius < 0) {\n console.error(\"negative radius not allowed - will invert\");\n radius *= -1;\n }\n radius *= 0.5;\n\n let tube = cfg.tube || 0.3;\n if (tube < 0) {\n console.error(\"negative tube not allowed - will invert\");\n tube *= -1;\n }\n\n let radialSegments = cfg.radialSegments || 32;\n if (radialSegments < 0) {\n console.error(\"negative radialSegments not allowed - will invert\");\n radialSegments *= -1;\n }\n if (radialSegments < 4) {\n radialSegments = 4;\n }\n\n let tubeSegments = cfg.tubeSegments || 24;\n if (tubeSegments < 0) {\n console.error(\"negative tubeSegments not allowed - will invert\");\n tubeSegments *= -1;\n }\n if (tubeSegments < 4) {\n tubeSegments = 4;\n }\n\n let arc = cfg.arc || Math.PI * 2;\n if (arc < 0) {\n console.warn(\"negative arc not allowed - will invert\");\n arc *= -1;\n }\n if (arc > 360) {\n arc = 360;\n }\n\n const center = cfg.center;\n let centerX = center ? center[0] : 0;\n let centerY = center ? center[1] : 0;\n const centerZ = center ? center[2] : 0;\n\n const positions = [];\n const normals = [];\n const uvs = [];\n const indices = [];\n\n let u;\n let v;\n let x;\n let y;\n let z;\n let vec;\n\n let i;\n let j;\n\n for (j = 0; j <= tubeSegments; j++) {\n for (i = 0; i <= radialSegments; i++) {\n\n u = i / radialSegments * arc;\n v = 0.785398 + (j / tubeSegments * Math.PI * 2);\n\n centerX = radius * Math.cos(u);\n centerY = radius * Math.sin(u);\n\n x = (radius + tube * Math.cos(v)) * Math.cos(u);\n y = (radius + tube * Math.cos(v)) * Math.sin(u);\n z = tube * Math.sin(v);\n\n positions.push(x + centerX);\n positions.push(y + centerY);\n positions.push(z + centerZ);\n\n uvs.push(1 - (i / radialSegments));\n uvs.push((j / tubeSegments));\n\n vec = math.normalizeVec3(math.subVec3([x, y, z], [centerX, centerY, centerZ], []), []);\n\n normals.push(vec[0]);\n normals.push(vec[1]);\n normals.push(vec[2]);\n }\n }\n\n let a;\n let b;\n let c;\n let d;\n\n for (j = 1; j <= tubeSegments; j++) {\n for (i = 1; i <= radialSegments; i++) {\n\n a = (radialSegments + 1) * j + i - 1;\n b = (radialSegments + 1) * (j - 1) + i - 1;\n c = (radialSegments + 1) * (j - 1) + i;\n d = (radialSegments + 1) * j + i;\n\n indices.push(a);\n indices.push(b);\n indices.push(c);\n\n indices.push(c);\n indices.push(d);\n indices.push(a);\n }\n }\n\n return {\n primitiveType: \"triangles\",\n positions: positions,\n normals: normals,\n uv: uvs,\n uvs: uvs,\n indices: indices\n };\n}\n\nexport {buildTorusGeometry};\n","const letters = {\n ' ': {width: 16, points: []},\n '!': {\n width: 10, points: [\n [5, 21],\n [5, 7],\n [-1, -1],\n [5, 2],\n [4, 1],\n [5, 0],\n [6, 1],\n [5, 2]\n ]\n },\n '\"': {\n width: 16, points: [\n [4, 21],\n [4, 14],\n [-1, -1],\n [12, 21],\n [12, 14]\n ]\n },\n '#': {\n width: 21, points: [\n [11, 25],\n [4, -7],\n [-1, -1],\n [17, 25],\n [10, -7],\n [-1, -1],\n [4, 12],\n [18, 12],\n [-1, -1],\n [3, 6],\n [17, 6]\n ]\n },\n '$': {\n width: 20, points: [\n [8, 25],\n [8, -4],\n [-1, -1],\n [12, 25],\n [12, -4],\n [-1, -1],\n [17, 18],\n [15, 20],\n [12, 21],\n [8, 21],\n [5, 20],\n [3, 18],\n [3, 16],\n [4, 14],\n [5, 13],\n [7, 12],\n [13, 10],\n [15, 9],\n [16, 8],\n [17, 6],\n [17, 3],\n [15, 1],\n [12, 0],\n [8, 0],\n [5, 1],\n [3, 3]\n ]\n },\n '%': {\n width: 24, points: [\n [21, 21],\n [3, 0],\n [-1, -1],\n [8, 21],\n [10, 19],\n [10, 17],\n [9, 15],\n [7, 14],\n [5, 14],\n [3, 16],\n [3, 18],\n [4, 20],\n [6, 21],\n [8, 21],\n [10, 20],\n [13, 19],\n [16, 19],\n [19, 20],\n [21, 21],\n [-1, -1],\n [17, 7],\n [15, 6],\n [14, 4],\n [14, 2],\n [16, 0],\n [18, 0],\n [20, 1],\n [21, 3],\n [21, 5],\n [19, 7],\n [17, 7]\n ]\n },\n '&': {\n width: 26, points: [\n [23, 12],\n [23, 13],\n [22, 14],\n [21, 14],\n [20, 13],\n [19, 11],\n [17, 6],\n [15, 3],\n [13, 1],\n [11, 0],\n [7, 0],\n [5, 1],\n [4, 2],\n [3, 4],\n [3, 6],\n [4, 8],\n [5, 9],\n [12, 13],\n [13, 14],\n [14, 16],\n [14, 18],\n [13, 20],\n [11, 21],\n [9, 20],\n [8, 18],\n [8, 16],\n [9, 13],\n [11, 10],\n [16, 3],\n [18, 1],\n [20, 0],\n [22, 0],\n [23, 1],\n [23, 2]\n ]\n },\n '\\'': {\n width: 10, points: [\n [5, 19],\n [4, 20],\n [5, 21],\n [6, 20],\n [6, 18],\n [5, 16],\n [4, 15]\n ]\n },\n '(': {\n width: 14, points: [\n [11, 25],\n [9, 23],\n [7, 20],\n [5, 16],\n [4, 11],\n [4, 7],\n [5, 2],\n [7, -2],\n [9, -5],\n [11, -7]\n ]\n },\n ')': {\n width: 14, points: [\n [3, 25],\n [5, 23],\n [7, 20],\n [9, 16],\n [10, 11],\n [10, 7],\n [9, 2],\n [7, -2],\n [5, -5],\n [3, -7]\n ]\n },\n '*': {\n width: 16, points: [\n [8, 21],\n [8, 9],\n [-1, -1],\n [3, 18],\n [13, 12],\n [-1, -1],\n [13, 18],\n [3, 12]\n ]\n },\n '+': {\n width: 26, points: [\n [13, 18],\n [13, 0],\n [-1, -1],\n [4, 9],\n [22, 9]\n ]\n },\n ',': {\n width: 10, points: [\n [6, 1],\n [5, 0],\n [4, 1],\n [5, 2],\n [6, 1],\n [6, -1],\n [5, -3],\n [4, -4]\n ]\n },\n '-': {\n width: 26, points: [\n [4, 9],\n [22, 9]\n ]\n },\n '.': {\n width: 10, points: [\n [5, 2],\n [4, 1],\n [5, 0],\n [6, 1],\n [5, 2]\n ]\n },\n '/': {\n width: 22, points: [\n [20, 25],\n [2, -7]\n ]\n },\n '0': {\n width: 20, points: [\n [9, 21],\n [6, 20],\n [4, 17],\n [3, 12],\n [3, 9],\n [4, 4],\n [6, 1],\n [9, 0],\n [11, 0],\n [14, 1],\n [16, 4],\n [17, 9],\n [17, 12],\n [16, 17],\n [14, 20],\n [11, 21],\n [9, 21]\n ]\n },\n '1': {\n width: 20, points: [\n [6, 17],\n [8, 18],\n [11, 21],\n [11, 0]\n ]\n },\n '2': {\n width: 20, points: [\n [4, 16],\n [4, 17],\n [5, 19],\n [6, 20],\n [8, 21],\n [12, 21],\n [14, 20],\n [15, 19],\n [16, 17],\n [16, 15],\n [15, 13],\n [13, 10],\n [3, 0],\n [17, 0]\n ]\n },\n '3': {\n width: 20, points: [\n [5, 21],\n [16, 21],\n [10, 13],\n [13, 13],\n [15, 12],\n [16, 11],\n [17, 8],\n [17, 6],\n [16, 3],\n [14, 1],\n [11, 0],\n [8, 0],\n [5, 1],\n [4, 2],\n [3, 4]\n ]\n },\n '4': {\n width: 20, points: [\n [13, 21],\n [3, 7],\n [18, 7],\n [-1, -1],\n [13, 21],\n [13, 0]\n ]\n },\n '5': {\n width: 20, points: [\n [15, 21],\n [5, 21],\n [4, 12],\n [5, 13],\n [8, 14],\n [11, 14],\n [14, 13],\n [16, 11],\n [17, 8],\n [17, 6],\n [16, 3],\n [14, 1],\n [11, 0],\n [8, 0],\n [5, 1],\n [4, 2],\n [3, 4]\n ]\n },\n '6': {\n width: 20, points: [\n [16, 18],\n [15, 20],\n [12, 21],\n [10, 21],\n [7, 20],\n [5, 17],\n [4, 12],\n [4, 7],\n [5, 3],\n [7, 1],\n [10, 0],\n [11, 0],\n [14, 1],\n [16, 3],\n [17, 6],\n [17, 7],\n [16, 10],\n [14, 12],\n [11, 13],\n [10, 13],\n [7, 12],\n [5, 10],\n [4, 7]\n ]\n },\n '7': {\n width: 20, points: [\n [17, 21],\n [7, 0],\n [-1, -1],\n [3, 21],\n [17, 21]\n ]\n },\n '8': {\n width: 20, points: [\n [8, 21],\n [5, 20],\n [4, 18],\n [4, 16],\n [5, 14],\n [7, 13],\n [11, 12],\n [14, 11],\n [16, 9],\n [17, 7],\n [17, 4],\n [16, 2],\n [15, 1],\n [12, 0],\n [8, 0],\n [5, 1],\n [4, 2],\n [3, 4],\n [3, 7],\n [4, 9],\n [6, 11],\n [9, 12],\n [13, 13],\n [15, 14],\n [16, 16],\n [16, 18],\n [15, 20],\n [12, 21],\n [8, 21]\n ]\n },\n '9': {\n width: 20, points: [\n [16, 14],\n [15, 11],\n [13, 9],\n [10, 8],\n [9, 8],\n [6, 9],\n [4, 11],\n [3, 14],\n [3, 15],\n [4, 18],\n [6, 20],\n [9, 21],\n [10, 21],\n [13, 20],\n [15, 18],\n [16, 14],\n [16, 9],\n [15, 4],\n [13, 1],\n [10, 0],\n [8, 0],\n [5, 1],\n [4, 3]\n ]\n },\n ':': {\n width: 10, points: [\n [5, 14],\n [4, 13],\n [5, 12],\n [6, 13],\n [5, 14],\n [-1, -1],\n [5, 2],\n [4, 1],\n [5, 0],\n [6, 1],\n [5, 2]\n ]\n },\n ';': {\n width: 10, points: [\n [5, 14],\n [4, 13],\n [5, 12],\n [6, 13],\n [5, 14],\n [-1, -1],\n [6, 1],\n [5, 0],\n [4, 1],\n [5, 2],\n [6, 1],\n [6, -1],\n [5, -3],\n [4, -4]\n ]\n },\n '<': {\n width: 24, points: [\n [20, 18],\n [4, 9],\n [20, 0]\n ]\n },\n '=': {\n width: 26, points: [\n [4, 12],\n [22, 12],\n [-1, -1],\n [4, 6],\n [22, 6]\n ]\n },\n '>': {\n width: 24, points: [\n [4, 18],\n [20, 9],\n [4, 0]\n ]\n },\n '?': {\n width: 18, points: [\n [3, 16],\n [3, 17],\n [4, 19],\n [5, 20],\n [7, 21],\n [11, 21],\n [13, 20],\n [14, 19],\n [15, 17],\n [15, 15],\n [14, 13],\n [13, 12],\n [9, 10],\n [9, 7],\n [-1, -1],\n [9, 2],\n [8, 1],\n [9, 0],\n [10, 1],\n [9, 2]\n ]\n },\n '@': {\n width: 27, points: [\n [18, 13],\n [17, 15],\n [15, 16],\n [12, 16],\n [10, 15],\n [9, 14],\n [8, 11],\n [8, 8],\n [9, 6],\n [11, 5],\n [14, 5],\n [16, 6],\n [17, 8],\n [-1, -1],\n [12, 16],\n [10, 14],\n [9, 11],\n [9, 8],\n [10, 6],\n [11, 5],\n [-1, -1],\n [18, 16],\n [17, 8],\n [17, 6],\n [19, 5],\n [21, 5],\n [23, 7],\n [24, 10],\n [24, 12],\n [23, 15],\n [22, 17],\n [20, 19],\n [18, 20],\n [15, 21],\n [12, 21],\n [9, 20],\n [7, 19],\n [5, 17],\n [4, 15],\n [3, 12],\n [3, 9],\n [4, 6],\n [5, 4],\n [7, 2],\n [9, 1],\n [12, 0],\n [15, 0],\n [18, 1],\n [20, 2],\n [21, 3],\n [-1, -1],\n [19, 16],\n [18, 8],\n [18, 6],\n [19, 5]\n ]\n },\n 'A': {\n width: 18, points: [\n [9, 21],\n [1, 0],\n [-1, -1],\n [9, 21],\n [17, 0],\n [-1, -1],\n [4, 7],\n [14, 7]\n ]\n },\n 'B': {\n width: 21, points: [\n [4, 21],\n [4, 0],\n [-1, -1],\n [4, 21],\n [13, 21],\n [16, 20],\n [17, 19],\n [18, 17],\n [18, 15],\n [17, 13],\n [16, 12],\n [13, 11],\n [-1, -1],\n [4, 11],\n [13, 11],\n [16, 10],\n [17, 9],\n [18, 7],\n [18, 4],\n [17, 2],\n [16, 1],\n [13, 0],\n [4, 0]\n ]\n },\n 'C': {\n width: 21, points: [\n [18, 16],\n [17, 18],\n [15, 20],\n [13, 21],\n [9, 21],\n [7, 20],\n [5, 18],\n [4, 16],\n [3, 13],\n [3, 8],\n [4, 5],\n [5, 3],\n [7, 1],\n [9, 0],\n [13, 0],\n [15, 1],\n [17, 3],\n [18, 5]\n ]\n },\n 'D': {\n width: 21, points: [\n [4, 21],\n [4, 0],\n [-1, -1],\n [4, 21],\n [11, 21],\n [14, 20],\n [16, 18],\n [17, 16],\n [18, 13],\n [18, 8],\n [17, 5],\n [16, 3],\n [14, 1],\n [11, 0],\n [4, 0]\n ]\n },\n 'E': {\n width: 19, points: [\n [4, 21],\n [4, 0],\n [-1, -1],\n [4, 21],\n [17, 21],\n [-1, -1],\n [4, 11],\n [12, 11],\n [-1, -1],\n [4, 0],\n [17, 0]\n ]\n },\n 'F': {\n width: 18, points: [\n [4, 21],\n [4, 0],\n [-1, -1],\n [4, 21],\n [17, 21],\n [-1, -1],\n [4, 11],\n [12, 11]\n ]\n },\n 'G': {\n width: 21, points: [\n [18, 16],\n [17, 18],\n [15, 20],\n [13, 21],\n [9, 21],\n [7, 20],\n [5, 18],\n [4, 16],\n [3, 13],\n [3, 8],\n [4, 5],\n [5, 3],\n [7, 1],\n [9, 0],\n [13, 0],\n [15, 1],\n [17, 3],\n [18, 5],\n [18, 8],\n [-1, -1],\n [13, 8],\n [18, 8]\n ]\n },\n 'H': {\n width: 22, points: [\n [4, 21],\n [4, 0],\n [-1, -1],\n [18, 21],\n [18, 0],\n [-1, -1],\n [4, 11],\n [18, 11]\n ]\n },\n 'I': {\n width: 8, points: [\n [4, 21],\n [4, 0]\n ]\n },\n 'J': {\n width: 16, points: [\n [12, 21],\n [12, 5],\n [11, 2],\n [10, 1],\n [8, 0],\n [6, 0],\n [4, 1],\n [3, 2],\n [2, 5],\n [2, 7]\n ]\n },\n 'K': {\n width: 21, points: [\n [4, 21],\n [4, 0],\n [-1, -1],\n [18, 21],\n [4, 7],\n [-1, -1],\n [9, 12],\n [18, 0]\n ]\n },\n 'L': {\n width: 17, points: [\n [4, 21],\n [4, 0],\n [-1, -1],\n [4, 0],\n [16, 0]\n ]\n },\n 'M': {\n width: 24, points: [\n [4, 21],\n [4, 0],\n [-1, -1],\n [4, 21],\n [12, 0],\n [-1, -1],\n [20, 21],\n [12, 0],\n [-1, -1],\n [20, 21],\n [20, 0]\n ]\n },\n 'N': {\n width: 22, points: [\n [4, 21],\n [4, 0],\n [-1, -1],\n [4, 21],\n [18, 0],\n [-1, -1],\n [18, 21],\n [18, 0]\n ]\n },\n 'O': {\n width: 22, points: [\n [9, 21],\n [7, 20],\n [5, 18],\n [4, 16],\n [3, 13],\n [3, 8],\n [4, 5],\n [5, 3],\n [7, 1],\n [9, 0],\n [13, 0],\n [15, 1],\n [17, 3],\n [18, 5],\n [19, 8],\n [19, 13],\n [18, 16],\n [17, 18],\n [15, 20],\n [13, 21],\n [9, 21]\n ]\n },\n 'P': {\n width: 21, points: [\n [4, 21],\n [4, 0],\n [-1, -1],\n [4, 21],\n [13, 21],\n [16, 20],\n [17, 19],\n [18, 17],\n [18, 14],\n [17, 12],\n [16, 11],\n [13, 10],\n [4, 10]\n ]\n },\n 'Q': {\n width: 22, points: [\n [9, 21],\n [7, 20],\n [5, 18],\n [4, 16],\n [3, 13],\n [3, 8],\n [4, 5],\n [5, 3],\n [7, 1],\n [9, 0],\n [13, 0],\n [15, 1],\n [17, 3],\n [18, 5],\n [19, 8],\n [19, 13],\n [18, 16],\n [17, 18],\n [15, 20],\n [13, 21],\n [9, 21],\n [-1, -1],\n [12, 4],\n [18, -2]\n ]\n },\n 'R': {\n width: 21, points: [\n [4, 21],\n [4, 0],\n [-1, -1],\n [4, 21],\n [13, 21],\n [16, 20],\n [17, 19],\n [18, 17],\n [18, 15],\n [17, 13],\n [16, 12],\n [13, 11],\n [4, 11],\n [-1, -1],\n [11, 11],\n [18, 0]\n ]\n },\n 'S': {\n width: 20, points: [\n [17, 18],\n [15, 20],\n [12, 21],\n [8, 21],\n [5, 20],\n [3, 18],\n [3, 16],\n [4, 14],\n [5, 13],\n [7, 12],\n [13, 10],\n [15, 9],\n [16, 8],\n [17, 6],\n [17, 3],\n [15, 1],\n [12, 0],\n [8, 0],\n [5, 1],\n [3, 3]\n ]\n },\n 'T': {\n width: 16, points: [\n [8, 21],\n [8, 0],\n [-1, -1],\n [1, 21],\n [15, 21]\n ]\n },\n 'U': {\n width: 22, points: [\n [4, 21],\n [4, 6],\n [5, 3],\n [7, 1],\n [10, 0],\n [12, 0],\n [15, 1],\n [17, 3],\n [18, 6],\n [18, 21]\n ]\n },\n 'V': {\n width: 18, points: [\n [1, 21],\n [9, 0],\n [-1, -1],\n [17, 21],\n [9, 0]\n ]\n },\n 'W': {\n width: 24, points: [\n [2, 21],\n [7, 0],\n [-1, -1],\n [12, 21],\n [7, 0],\n [-1, -1],\n [12, 21],\n [17, 0],\n [-1, -1],\n [22, 21],\n [17, 0]\n ]\n },\n 'X': {\n width: 20, points: [\n [3, 21],\n [17, 0],\n [-1, -1],\n [17, 21],\n [3, 0]\n ]\n },\n 'Y': {\n width: 18, points: [\n [1, 21],\n [9, 11],\n [9, 0],\n [-1, -1],\n [17, 21],\n [9, 11]\n ]\n },\n 'Z': {\n width: 20, points: [\n [17, 21],\n [3, 0],\n [-1, -1],\n [3, 21],\n [17, 21],\n [-1, -1],\n [3, 0],\n [17, 0]\n ]\n },\n '[': {\n width: 14, points: [\n [4, 25],\n [4, -7],\n [-1, -1],\n [5, 25],\n [5, -7],\n [-1, -1],\n [4, 25],\n [11, 25],\n [-1, -1],\n [4, -7],\n [11, -7]\n ]\n },\n '\\\\': {\n width: 14, points: [\n [0, 21],\n [14, -3]\n ]\n },\n ']': {\n width: 14, points: [\n [9, 25],\n [9, -7],\n [-1, -1],\n [10, 25],\n [10, -7],\n [-1, -1],\n [3, 25],\n [10, 25],\n [-1, -1],\n [3, -7],\n [10, -7]\n ]\n },\n '^': {\n width: 16, points: [\n [6, 15],\n [8, 18],\n [10, 15],\n [-1, -1],\n [3, 12],\n [8, 17],\n [13, 12],\n [-1, -1],\n [8, 17],\n [8, 0]\n ]\n },\n '_': {\n width: 16, points: [\n [0, -2],\n [16, -2]\n ]\n },\n '`': {\n width: 10, points: [\n [6, 21],\n [5, 20],\n [4, 18],\n [4, 16],\n [5, 15],\n [6, 16],\n [5, 17]\n ]\n },\n 'a': {\n width: 19, points: [\n [15, 14],\n [15, 0],\n [-1, -1],\n [15, 11],\n [13, 13],\n [11, 14],\n [8, 14],\n [6, 13],\n [4, 11],\n [3, 8],\n [3, 6],\n [4, 3],\n [6, 1],\n [8, 0],\n [11, 0],\n [13, 1],\n [15, 3]\n ]\n },\n 'b': {\n width: 19, points: [\n [4, 21],\n [4, 0],\n [-1, -1],\n [4, 11],\n [6, 13],\n [8, 14],\n [11, 14],\n [13, 13],\n [15, 11],\n [16, 8],\n [16, 6],\n [15, 3],\n [13, 1],\n [11, 0],\n [8, 0],\n [6, 1],\n [4, 3]\n ]\n },\n 'c': {\n width: 18, points: [\n [15, 11],\n [13, 13],\n [11, 14],\n [8, 14],\n [6, 13],\n [4, 11],\n [3, 8],\n [3, 6],\n [4, 3],\n [6, 1],\n [8, 0],\n [11, 0],\n [13, 1],\n [15, 3]\n ]\n },\n 'd': {\n width: 19, points: [\n [15, 21],\n [15, 0],\n [-1, -1],\n [15, 11],\n [13, 13],\n [11, 14],\n [8, 14],\n [6, 13],\n [4, 11],\n [3, 8],\n [3, 6],\n [4, 3],\n [6, 1],\n [8, 0],\n [11, 0],\n [13, 1],\n [15, 3]\n ]\n },\n 'e': {\n width: 18, points: [\n [3, 8],\n [15, 8],\n [15, 10],\n [14, 12],\n [13, 13],\n [11, 14],\n [8, 14],\n [6, 13],\n [4, 11],\n [3, 8],\n [3, 6],\n [4, 3],\n [6, 1],\n [8, 0],\n [11, 0],\n [13, 1],\n [15, 3]\n ]\n },\n 'f': {\n width: 12, points: [\n [10, 21],\n [8, 21],\n [6, 20],\n [5, 17],\n [5, 0],\n [-1, -1],\n [2, 14],\n [9, 14]\n ]\n },\n 'g': {\n width: 19, points: [\n [15, 14],\n [15, -2],\n [14, -5],\n [13, -6],\n [11, -7],\n [8, -7],\n [6, -6],\n [-1, -1],\n [15, 11],\n [13, 13],\n [11, 14],\n [8, 14],\n [6, 13],\n [4, 11],\n [3, 8],\n [3, 6],\n [4, 3],\n [6, 1],\n [8, 0],\n [11, 0],\n [13, 1],\n [15, 3]\n ]\n },\n 'h': {\n width: 19, points: [\n [4, 21],\n [4, 0],\n [-1, -1],\n [4, 10],\n [7, 13],\n [9, 14],\n [12, 14],\n [14, 13],\n [15, 10],\n [15, 0]\n ]\n },\n 'i': {\n width: 8, points: [\n [3, 21],\n [4, 20],\n [5, 21],\n [4, 22],\n [3, 21],\n [-1, -1],\n [4, 14],\n [4, 0]\n ]\n },\n 'j': {\n width: 10, points: [\n [5, 21],\n [6, 20],\n [7, 21],\n [6, 22],\n [5, 21],\n [-1, -1],\n [6, 14],\n [6, -3],\n [5, -6],\n [3, -7],\n [1, -7]\n ]\n },\n 'k': {\n width: 17, points: [\n [4, 21],\n [4, 0],\n [-1, -1],\n [14, 14],\n [4, 4],\n [-1, -1],\n [8, 8],\n [15, 0]\n ]\n },\n 'l': {\n width: 8, points: [\n [4, 21],\n [4, 0]\n ]\n },\n 'm': {\n width: 30, points: [\n [4, 14],\n [4, 0],\n [-1, -1],\n [4, 10],\n [7, 13],\n [9, 14],\n [12, 14],\n [14, 13],\n [15, 10],\n [15, 0],\n [-1, -1],\n [15, 10],\n [18, 13],\n [20, 14],\n [23, 14],\n [25, 13],\n [26, 10],\n [26, 0]\n ]\n },\n 'n': {\n width: 19, points: [\n [4, 14],\n [4, 0],\n [-1, -1],\n [4, 10],\n [7, 13],\n [9, 14],\n [12, 14],\n [14, 13],\n [15, 10],\n [15, 0]\n ]\n },\n 'o': {\n width: 19, points: [\n [8, 14],\n [6, 13],\n [4, 11],\n [3, 8],\n [3, 6],\n [4, 3],\n [6, 1],\n [8, 0],\n [11, 0],\n [13, 1],\n [15, 3],\n [16, 6],\n [16, 8],\n [15, 11],\n [13, 13],\n [11, 14],\n [8, 14]\n ]\n },\n 'p': {\n width: 19, points: [\n [4, 14],\n [4, -7],\n [-1, -1],\n [4, 11],\n [6, 13],\n [8, 14],\n [11, 14],\n [13, 13],\n [15, 11],\n [16, 8],\n [16, 6],\n [15, 3],\n [13, 1],\n [11, 0],\n [8, 0],\n [6, 1],\n [4, 3]\n ]\n },\n 'q': {\n width: 19, points: [\n [15, 14],\n [15, -7],\n [-1, -1],\n [15, 11],\n [13, 13],\n [11, 14],\n [8, 14],\n [6, 13],\n [4, 11],\n [3, 8],\n [3, 6],\n [4, 3],\n [6, 1],\n [8, 0],\n [11, 0],\n [13, 1],\n [15, 3]\n ]\n },\n 'r': {\n width: 13, points: [\n [4, 14],\n [4, 0],\n [-1, -1],\n [4, 8],\n [5, 11],\n [7, 13],\n [9, 14],\n [12, 14]\n ]\n },\n 's': {\n width: 17, points: [\n [14, 11],\n [13, 13],\n [10, 14],\n [7, 14],\n [4, 13],\n [3, 11],\n [4, 9],\n [6, 8],\n [11, 7],\n [13, 6],\n [14, 4],\n [14, 3],\n [13, 1],\n [10, 0],\n [7, 0],\n [4, 1],\n [3, 3]\n ]\n },\n 't': {\n width: 12, points: [\n [5, 21],\n [5, 4],\n [6, 1],\n [8, 0],\n [10, 0],\n [-1, -1],\n [2, 14],\n [9, 14]\n ]\n },\n 'u': {\n width: 19, points: [\n [4, 14],\n [4, 4],\n [5, 1],\n [7, 0],\n [10, 0],\n [12, 1],\n [15, 4],\n [-1, -1],\n [15, 14],\n [15, 0]\n ]\n },\n 'v': {\n width: 16, points: [\n [2, 14],\n [8, 0],\n [-1, -1],\n [14, 14],\n [8, 0]\n ]\n },\n 'w': {\n width: 22, points: [\n [3, 14],\n [7, 0],\n [-1, -1],\n [11, 14],\n [7, 0],\n [-1, -1],\n [11, 14],\n [15, 0],\n [-1, -1],\n [19, 14],\n [15, 0]\n ]\n },\n 'x': {\n width: 17, points: [\n [3, 14],\n [14, 0],\n [-1, -1],\n [14, 14],\n [3, 0]\n ]\n },\n 'y': {\n width: 16, points: [\n [2, 14],\n [8, 0],\n [-1, -1],\n [14, 14],\n [8, 0],\n [6, -4],\n [4, -6],\n [2, -7],\n [1, -7]\n ]\n },\n 'z': {\n width: 17, points: [\n [14, 14],\n [3, 0],\n [-1, -1],\n [3, 14],\n [14, 14],\n [-1, -1],\n [3, 0],\n [14, 0]\n ]\n },\n '{': {\n width: 14, points: [\n [9, 25],\n [7, 24],\n [6, 23],\n [5, 21],\n [5, 19],\n [6, 17],\n [7, 16],\n [8, 14],\n [8, 12],\n [6, 10],\n [-1, -1],\n [7, 24],\n [6, 22],\n [6, 20],\n [7, 18],\n [8, 17],\n [9, 15],\n [9, 13],\n [8, 11],\n [4, 9],\n [8, 7],\n [9, 5],\n [9, 3],\n [8, 1],\n [7, 0],\n [6, -2],\n [6, -4],\n [7, -6],\n [-1, -1],\n [6, 8],\n [8, 6],\n [8, 4],\n [7, 2],\n [6, 1],\n [5, -1],\n [5, -3],\n [6, -5],\n [7, -6],\n [9, -7]\n ]\n },\n '|': {\n width: 8, points: [\n [4, 25],\n [4, -7]\n ]\n },\n '}': {\n width: 14, points: [\n [5, 25],\n [7, 24],\n [8, 23],\n [9, 21],\n [9, 19],\n [8, 17],\n [7, 16],\n [6, 14],\n [6, 12],\n [8, 10],\n [-1, -1],\n [7, 24],\n [8, 22],\n [8, 20],\n [7, 18],\n [6, 17],\n [5, 15],\n [5, 13],\n [6, 11],\n [10, 9],\n [6, 7],\n [5, 5],\n [5, 3],\n [6, 1],\n [7, 0],\n [8, -2],\n [8, -4],\n [7, -6],\n [-1, -1],\n [8, 8],\n [6, 6],\n [6, 4],\n [7, 2],\n [8, 1],\n [9, -1],\n [9, -3],\n [8, -5],\n [7, -6],\n [5, -7]\n ]\n },\n '~': {\n width: 24, points: [\n [3, 6],\n [3, 8],\n [4, 11],\n [6, 12],\n [8, 12],\n [10, 11],\n [14, 8],\n [16, 7],\n [18, 7],\n [20, 8],\n [21, 10],\n [-1, -1],\n [3, 8],\n [4, 10],\n [6, 11],\n [8, 11],\n [10, 10],\n [14, 7],\n [16, 6],\n [18, 6],\n [20, 7],\n [21, 10],\n [21, 12]\n ]\n }\n};\n\n/**\n * @desc Creates wireframe text-shaped geometry arrays.\n *\n * ## Usage\n *\n * In the example below we'll create an {@link XKTModel}, then create an {@link XKTMesh} with a text-shaped {@link XKTGeometry}.\n *\n * [[Run this example](http://xeokit.github.io/xeokit-sdk/examples/#geometry_builders_buildVectorTextGeometry)]\n *\n * ````javascript\n * const xktModel = new XKTModel();\n *\n * const text = buildVectorTextGeometry({\n * origin: [0,0,0],\n * text: \"On the other side of the screen, it all looked so easy\"\n * });\n *\n * const xktGeometry = xktModel.createGeometry({\n * geometryId: \"textGeometry\",\n * primitiveType: text.primitiveType, // Will be \"lines\"\n * positions: text.positions,\n * indices: text.indices\n * });\n *\n * const xktMesh = xktModel.createMesh({\n * meshId: \"redTextMesh\",\n * geometryId: \"textGeometry\",\n * position: [-4, -6, -4],\n * scale: [1, 3, 1],\n * rotation: [0, 0, 0],\n * color: [1, 0, 0],\n * opacity: 1\n * });\n *\n * const xktEntity = xktModel.createEntity({\n * entityId: \"redText\",\n * meshIds: [\"redTextMesh\"]\n * });\n *\n * xktModel.finalize();\n * ````\n *\n * @function buildVectorTextGeometry\n * @param {*} [cfg] Configs\n * @param {Number[]} [cfg.center] 3D point indicating the center position.\n * @param {Number[]} [cfg.origin] 3D point indicating the top left corner.\n * @param {Number} [cfg.size=1] Size of each character.\n * @param {String} [cfg.text=\"\"] The text.\n * @returns {Object} Geometry arrays for {@link XKTModel#createGeometry} or {@link XKTModel#createMesh}.\n */\nfunction buildVectorTextGeometry(cfg = {}) {\n\n var origin = cfg.origin || [0, 0, 0];\n var xOrigin = origin[0];\n var yOrigin = origin[1];\n var zOrigin = origin[2];\n var size = cfg.size || 1;\n\n var positions = [];\n var indices = [];\n var text = (\"\" + cfg.text).trim();\n var lines = (text || \"\").split(\"\\n\");\n var countVerts = 0;\n var y = 0;\n var x;\n var str;\n var len;\n var c;\n var mag = 1.0 / 25.0;\n var penUp;\n var p1;\n var p2;\n var needLine;\n var pointsLen;\n var a;\n\n for (var iLine = 0; iLine < lines.length; iLine++) {\n\n x = 0;\n str = lines[iLine];\n len = str.length;\n\n for (var i = 0; i < len; i++) {\n\n c = letters[str.charAt(i)];\n\n if (c === '\\n') {\n //alert(\"newline\");\n }\n\n if (!c) {\n continue;\n }\n\n penUp = 1;\n p1 = -1;\n p2 = -1;\n needLine = false;\n\n pointsLen = c.points.length;\n\n for (var j = 0; j < pointsLen; j++) {\n a = c.points[j];\n\n if (a[0] === -1 && a[1] === -1) {\n penUp = 1;\n needLine = false;\n continue;\n }\n\n positions.push((x + (a[0] * size) * mag) + xOrigin);\n positions.push((y + (a[1] * size) * mag) + yOrigin);\n positions.push(0 + zOrigin);\n\n if (p1 === -1) {\n p1 = countVerts;\n } else if (p2 === -1) {\n p2 = countVerts;\n } else {\n p1 = p2;\n p2 = countVerts;\n }\n countVerts++;\n\n if (penUp) {\n penUp = false;\n\n } else {\n indices.push(p1);\n indices.push(p2);\n }\n\n needLine = true;\n }\n x += c.width * mag * size;\n\n }\n y -= 35 * mag * size;\n }\n\n return {\n primitiveType: \"lines\",\n positions: positions,\n indices: indices\n };\n}\n\n\nexport {buildVectorTextGeometry}\n","export {XKT_INFO} from \"./XKT_INFO.js\";\nexport * from \"./constants.js\";\nexport {XKTModel} from \"./XKTModel/XKTModel.js\";\nexport {writeXKTModelToArrayBuffer} from \"./XKTModel/writeXKTModelToArrayBuffer.js\";\n\nexport {parseCityJSONIntoXKTModel} from \"./parsers/parseCityJSONIntoXKTModel.js\";\nexport {parseGLTFIntoXKTModel} from \"./parsers/parseGLTFIntoXKTModel.js\";\nexport {parseGLTFJSONIntoXKTModel} from \"./parsers/parseGLTFJSONIntoXKTModel.js\";\nexport {parseIFCIntoXKTModel} from \"./parsers/parseIFCIntoXKTModel.js\";\nexport {parseLASIntoXKTModel} from \"./parsers/parseLASIntoXKTModel.js\";\nexport {parseMetaModelIntoXKTModel} from \"./parsers/parseMetaModelIntoXKTModel.js\";\nexport {parsePCDIntoXKTModel} from \"./parsers/parsePCDIntoXKTModel.js\";\nexport {parsePLYIntoXKTModel} from \"./parsers/parsePLYIntoXKTModel.js\";\nexport {parseSTLIntoXKTModel} from \"./parsers/parseSTLIntoXKTModel.js\";\n\nexport {buildBoxGeometry} from \"./geometryBuilders/buildBoxGeometry.js\";\nexport {buildBoxLinesGeometry} from \"./geometryBuilders/buildBoxLinesGeometry.js\";\nexport {buildCylinderGeometry} from \"./geometryBuilders/buildCylinderGeometry.js\";\nexport {buildGridGeometry} from \"./geometryBuilders/buildGridGeometry.js\";\nexport {buildPlaneGeometry} from \"./geometryBuilders/buildPlaneGeometry.js\";\nexport {buildSphereGeometry} from \"./geometryBuilders/buildSphereGeometry.js\";\nexport {buildTorusGeometry} from \"./geometryBuilders/buildTorusGeometry.js\";\nexport {buildVectorTextGeometry} from \"./geometryBuilders/buildVectorTextGeometry.js\";\n\n","/** @private */\nfunction earcut(data, holeIndices, dim) {\n\n dim = dim || 2;\n\n var hasHoles = holeIndices && holeIndices.length,\n outerLen = hasHoles ? holeIndices[0] * dim : data.length,\n outerNode = linkedList(data, 0, outerLen, dim, true),\n triangles = [];\n\n if (!outerNode || outerNode.next === outerNode.prev) return triangles;\n\n var minX, minY, maxX, maxY, x, y, invSize;\n\n if (hasHoles) outerNode = eliminateHoles(data, holeIndices, outerNode, dim);\n\n // if the shape is not too simple, we'll use z-order curve hash later; calculate polygon bbox\n if (data.length > 80 * dim) {\n minX = maxX = data[0];\n minY = maxY = data[1];\n\n for (var i = dim; i < outerLen; i += dim) {\n x = data[i];\n y = data[i + 1];\n if (x < minX) minX = x;\n if (y < minY) minY = y;\n if (x > maxX) maxX = x;\n if (y > maxY) maxY = y;\n }\n\n // minX, minY and invSize are later used to transform coords into integers for z-order calculation\n invSize = Math.max(maxX - minX, maxY - minY);\n invSize = invSize !== 0 ? 1 / invSize : 0;\n }\n\n earcutLinked(outerNode, triangles, dim, minX, minY, invSize);\n\n return triangles;\n}\n\n// create a circular doubly linked list from polygon points in the specified winding order\nfunction linkedList(data, start, end, dim, clockwise) {\n var i, last;\n\n if (clockwise === (signedArea(data, start, end, dim) > 0)) {\n for (i = start; i < end; i += dim) last = insertNode(i, data[i], data[i + 1], last);\n } else {\n for (i = end - dim; i >= start; i -= dim) last = insertNode(i, data[i], data[i + 1], last);\n }\n\n if (last && equals(last, last.next)) {\n removeNode(last);\n last = last.next;\n }\n\n return last;\n}\n\n// eliminate colinear or duplicate points\nfunction filterPoints(start, end) {\n if (!start) return start;\n if (!end) end = start;\n\n var p = start,\n again;\n do {\n again = false;\n\n if (!p.steiner && (equals(p, p.next) || area(p.prev, p, p.next) === 0)) {\n removeNode(p);\n p = end = p.prev;\n if (p === p.next) break;\n again = true;\n\n } else {\n p = p.next;\n }\n } while (again || p !== end);\n\n return end;\n}\n\n// main ear slicing loop which triangulates a polygon (given as a linked list)\nfunction earcutLinked(ear, triangles, dim, minX, minY, invSize, pass) {\n if (!ear) return;\n\n // interlink polygon nodes in z-order\n if (!pass && invSize) indexCurve(ear, minX, minY, invSize);\n\n var stop = ear,\n prev, next;\n\n // iterate through ears, slicing them one by one\n while (ear.prev !== ear.next) {\n prev = ear.prev;\n next = ear.next;\n\n if (invSize ? isEarHashed(ear, minX, minY, invSize) : isEar(ear)) {\n // cut off the triangle\n triangles.push(prev.i / dim);\n triangles.push(ear.i / dim);\n triangles.push(next.i / dim);\n\n removeNode(ear);\n\n // skipping the next vertex leads to less sliver triangles\n ear = next.next;\n stop = next.next;\n\n continue;\n }\n\n ear = next;\n\n // if we looped through the whole remaining polygon and can't find any more ears\n if (ear === stop) {\n // try filtering points and slicing again\n if (!pass) {\n earcutLinked(filterPoints(ear), triangles, dim, minX, minY, invSize, 1);\n\n // if this didn't work, try curing all small self-intersections locally\n } else if (pass === 1) {\n ear = cureLocalIntersections(filterPoints(ear), triangles, dim);\n earcutLinked(ear, triangles, dim, minX, minY, invSize, 2);\n\n // as a last resort, try splitting the remaining polygon into two\n } else if (pass === 2) {\n splitEarcut(ear, triangles, dim, minX, minY, invSize);\n }\n\n break;\n }\n }\n}\n\n// check whether a polygon node forms a valid ear with adjacent nodes\nfunction isEar(ear) {\n var a = ear.prev,\n b = ear,\n c = ear.next;\n\n if (area(a, b, c) >= 0) return false; // reflex, can't be an ear\n\n // now make sure we don't have other points inside the potential ear\n var p = ear.next.next;\n\n while (p !== ear.prev) {\n if (pointInTriangle(a.x, a.y, b.x, b.y, c.x, c.y, p.x, p.y) &&\n area(p.prev, p, p.next) >= 0) return false;\n p = p.next;\n }\n\n return true;\n}\n\nfunction isEarHashed(ear, minX, minY, invSize) {\n var a = ear.prev,\n b = ear,\n c = ear.next;\n\n if (area(a, b, c) >= 0) return false; // reflex, can't be an ear\n\n // triangle bbox; min & max are calculated like this for speed\n var minTX = a.x < b.x ? (a.x < c.x ? a.x : c.x) : (b.x < c.x ? b.x : c.x),\n minTY = a.y < b.y ? (a.y < c.y ? a.y : c.y) : (b.y < c.y ? b.y : c.y),\n maxTX = a.x > b.x ? (a.x > c.x ? a.x : c.x) : (b.x > c.x ? b.x : c.x),\n maxTY = a.y > b.y ? (a.y > c.y ? a.y : c.y) : (b.y > c.y ? b.y : c.y);\n\n // z-order range for the current triangle bbox;\n var minZ = zOrder(minTX, minTY, minX, minY, invSize),\n maxZ = zOrder(maxTX, maxTY, minX, minY, invSize);\n\n var p = ear.prevZ,\n n = ear.nextZ;\n\n // look for points inside the triangle in both directions\n while (p && p.z >= minZ && n && n.z <= maxZ) {\n if (p !== ear.prev && p !== ear.next &&\n pointInTriangle(a.x, a.y, b.x, b.y, c.x, c.y, p.x, p.y) &&\n area(p.prev, p, p.next) >= 0) return false;\n p = p.prevZ;\n\n if (n !== ear.prev && n !== ear.next &&\n pointInTriangle(a.x, a.y, b.x, b.y, c.x, c.y, n.x, n.y) &&\n area(n.prev, n, n.next) >= 0) return false;\n n = n.nextZ;\n }\n\n // look for remaining points in decreasing z-order\n while (p && p.z >= minZ) {\n if (p !== ear.prev && p !== ear.next &&\n pointInTriangle(a.x, a.y, b.x, b.y, c.x, c.y, p.x, p.y) &&\n area(p.prev, p, p.next) >= 0) return false;\n p = p.prevZ;\n }\n\n // look for remaining points in increasing z-order\n while (n && n.z <= maxZ) {\n if (n !== ear.prev && n !== ear.next &&\n pointInTriangle(a.x, a.y, b.x, b.y, c.x, c.y, n.x, n.y) &&\n area(n.prev, n, n.next) >= 0) return false;\n n = n.nextZ;\n }\n\n return true;\n}\n\n// go through all polygon nodes and cure small local self-intersections\nfunction cureLocalIntersections(start, triangles, dim) {\n var p = start;\n do {\n var a = p.prev,\n b = p.next.next;\n\n if (!equals(a, b) && intersects(a, p, p.next, b) && locallyInside(a, b) && locallyInside(b, a)) {\n\n triangles.push(a.i / dim);\n triangles.push(p.i / dim);\n triangles.push(b.i / dim);\n\n // remove two nodes involved\n removeNode(p);\n removeNode(p.next);\n\n p = start = b;\n }\n p = p.next;\n } while (p !== start);\n\n return filterPoints(p);\n}\n\n// try splitting polygon into two and triangulate them independently\nfunction splitEarcut(start, triangles, dim, minX, minY, invSize) {\n // look for a valid diagonal that divides the polygon into two\n var a = start;\n do {\n var b = a.next.next;\n while (b !== a.prev) {\n if (a.i !== b.i && isValidDiagonal(a, b)) {\n // split the polygon in two by the diagonal\n var c = splitPolygon(a, b);\n\n // filter colinear points around the cuts\n a = filterPoints(a, a.next);\n c = filterPoints(c, c.next);\n\n // run earcut on each half\n earcutLinked(a, triangles, dim, minX, minY, invSize);\n earcutLinked(c, triangles, dim, minX, minY, invSize);\n return;\n }\n b = b.next;\n }\n a = a.next;\n } while (a !== start);\n}\n\n// link every hole into the outer loop, producing a single-ring polygon without holes\nfunction eliminateHoles(data, holeIndices, outerNode, dim) {\n var queue = [],\n i, len, start, end, list;\n\n for (i = 0, len = holeIndices.length; i < len; i++) {\n start = holeIndices[i] * dim;\n end = i < len - 1 ? holeIndices[i + 1] * dim : data.length;\n list = linkedList(data, start, end, dim, false);\n if (list === list.next) list.steiner = true;\n queue.push(getLeftmost(list));\n }\n\n queue.sort(compareX);\n\n // process holes from left to right\n for (i = 0; i < queue.length; i++) {\n eliminateHole(queue[i], outerNode);\n outerNode = filterPoints(outerNode, outerNode.next);\n }\n\n return outerNode;\n}\n\nfunction compareX(a, b) {\n return a.x - b.x;\n}\n\n// find a bridge between vertices that connects hole with an outer ring and and link it\nfunction eliminateHole(hole, outerNode) {\n outerNode = findHoleBridge(hole, outerNode);\n if (outerNode) {\n var b = splitPolygon(outerNode, hole);\n\n // filter collinear points around the cuts\n filterPoints(outerNode, outerNode.next);\n filterPoints(b, b.next);\n }\n}\n\n// David Eberly's algorithm for finding a bridge between hole and outer polygon\nfunction findHoleBridge(hole, outerNode) {\n var p = outerNode,\n hx = hole.x,\n hy = hole.y,\n qx = -Infinity,\n m;\n\n // find a segment intersected by a ray from the hole's leftmost point to the left;\n // segment's endpoint with lesser x will be potential connection point\n do {\n if (hy <= p.y && hy >= p.next.y && p.next.y !== p.y) {\n var x = p.x + (hy - p.y) * (p.next.x - p.x) / (p.next.y - p.y);\n if (x <= hx && x > qx) {\n qx = x;\n if (x === hx) {\n if (hy === p.y) return p;\n if (hy === p.next.y) return p.next;\n }\n m = p.x < p.next.x ? p : p.next;\n }\n }\n p = p.next;\n } while (p !== outerNode);\n\n if (!m) return null;\n\n if (hx === qx) return m; // hole touches outer segment; pick leftmost endpoint\n\n // look for points inside the triangle of hole point, segment intersection and endpoint;\n // if there are no points found, we have a valid connection;\n // otherwise choose the point of the minimum angle with the ray as connection point\n\n var stop = m,\n mx = m.x,\n my = m.y,\n tanMin = Infinity,\n tan;\n\n p = m;\n\n do {\n if (hx >= p.x && p.x >= mx && hx !== p.x &&\n pointInTriangle(hy < my ? hx : qx, hy, mx, my, hy < my ? qx : hx, hy, p.x, p.y)) {\n\n tan = Math.abs(hy - p.y) / (hx - p.x); // tangential\n\n if (locallyInside(p, hole) &&\n (tan < tanMin || (tan === tanMin && (p.x > m.x || (p.x === m.x && sectorContainsSector(m, p)))))) {\n m = p;\n tanMin = tan;\n }\n }\n\n p = p.next;\n } while (p !== stop);\n\n return m;\n}\n\n// whether sector in vertex m contains sector in vertex p in the same coordinates\nfunction sectorContainsSector(m, p) {\n return area(m.prev, m, p.prev) < 0 && area(p.next, m, m.next) < 0;\n}\n\n// interlink polygon nodes in z-order\nfunction indexCurve(start, minX, minY, invSize) {\n var p = start;\n do {\n if (p.z === null) p.z = zOrder(p.x, p.y, minX, minY, invSize);\n p.prevZ = p.prev;\n p.nextZ = p.next;\n p = p.next;\n } while (p !== start);\n\n p.prevZ.nextZ = null;\n p.prevZ = null;\n\n sortLinked(p);\n}\n\n// Simon Tatham's linked list merge sort algorithm\n// http://www.chiark.greenend.org.uk/~sgtatham/algorithms/listsort.html\nfunction sortLinked(list) {\n var i, p, q, e, tail, numMerges, pSize, qSize,\n inSize = 1;\n\n do {\n p = list;\n list = null;\n tail = null;\n numMerges = 0;\n\n while (p) {\n numMerges++;\n q = p;\n pSize = 0;\n for (i = 0; i < inSize; i++) {\n pSize++;\n q = q.nextZ;\n if (!q) break;\n }\n qSize = inSize;\n\n while (pSize > 0 || (qSize > 0 && q)) {\n\n if (pSize !== 0 && (qSize === 0 || !q || p.z <= q.z)) {\n e = p;\n p = p.nextZ;\n pSize--;\n } else {\n e = q;\n q = q.nextZ;\n qSize--;\n }\n\n if (tail) tail.nextZ = e;\n else list = e;\n\n e.prevZ = tail;\n tail = e;\n }\n\n p = q;\n }\n\n tail.nextZ = null;\n inSize *= 2;\n\n } while (numMerges > 1);\n\n return list;\n}\n\n// z-order of a point given coords and inverse of the longer side of data bbox\nfunction zOrder(x, y, minX, minY, invSize) {\n // coords are transformed into non-negative 15-bit integer range\n x = 32767 * (x - minX) * invSize;\n y = 32767 * (y - minY) * invSize;\n\n x = (x | (x << 8)) & 0x00FF00FF;\n x = (x | (x << 4)) & 0x0F0F0F0F;\n x = (x | (x << 2)) & 0x33333333;\n x = (x | (x << 1)) & 0x55555555;\n\n y = (y | (y << 8)) & 0x00FF00FF;\n y = (y | (y << 4)) & 0x0F0F0F0F;\n y = (y | (y << 2)) & 0x33333333;\n y = (y | (y << 1)) & 0x55555555;\n\n return x | (y << 1);\n}\n\n// find the leftmost node of a polygon ring\nfunction getLeftmost(start) {\n var p = start,\n leftmost = start;\n do {\n if (p.x < leftmost.x || (p.x === leftmost.x && p.y < leftmost.y)) leftmost = p;\n p = p.next;\n } while (p !== start);\n\n return leftmost;\n}\n\n// check if a point lies within a convex triangle\nfunction pointInTriangle(ax, ay, bx, by, cx, cy, px, py) {\n return (cx - px) * (ay - py) - (ax - px) * (cy - py) >= 0 &&\n (ax - px) * (by - py) - (bx - px) * (ay - py) >= 0 &&\n (bx - px) * (cy - py) - (cx - px) * (by - py) >= 0;\n}\n\n// check if a diagonal between two polygon nodes is valid (lies in polygon interior)\nfunction isValidDiagonal(a, b) {\n return a.next.i !== b.i && a.prev.i !== b.i && !intersectsPolygon(a, b) && // dones't intersect other edges\n (locallyInside(a, b) && locallyInside(b, a) && middleInside(a, b) && // locally visible\n (area(a.prev, a, b.prev) || area(a, b.prev, b)) || // does not create opposite-facing sectors\n equals(a, b) && area(a.prev, a, a.next) > 0 && area(b.prev, b, b.next) > 0); // special zero-length case\n}\n\n// signed area of a triangle\nfunction area(p, q, r) {\n return (q.y - p.y) * (r.x - q.x) - (q.x - p.x) * (r.y - q.y);\n}\n\n// check if two points are equal\nfunction equals(p1, p2) {\n return p1.x === p2.x && p1.y === p2.y;\n}\n\n// check if two segments intersect\nfunction intersects(p1, q1, p2, q2) {\n var o1 = sign(area(p1, q1, p2));\n var o2 = sign(area(p1, q1, q2));\n var o3 = sign(area(p2, q2, p1));\n var o4 = sign(area(p2, q2, q1));\n\n if (o1 !== o2 && o3 !== o4) return true; // general case\n\n if (o1 === 0 && onSegment(p1, p2, q1)) return true; // p1, q1 and p2 are collinear and p2 lies on p1q1\n if (o2 === 0 && onSegment(p1, q2, q1)) return true; // p1, q1 and q2 are collinear and q2 lies on p1q1\n if (o3 === 0 && onSegment(p2, p1, q2)) return true; // p2, q2 and p1 are collinear and p1 lies on p2q2\n if (o4 === 0 && onSegment(p2, q1, q2)) return true; // p2, q2 and q1 are collinear and q1 lies on p2q2\n\n return false;\n}\n\n// for collinear points p, q, r, check if point q lies on segment pr\nfunction onSegment(p, q, r) {\n return q.x <= Math.max(p.x, r.x) && q.x >= Math.min(p.x, r.x) && q.y <= Math.max(p.y, r.y) && q.y >= Math.min(p.y, r.y);\n}\n\nfunction sign(num) {\n return num > 0 ? 1 : num < 0 ? -1 : 0;\n}\n\n// check if a polygon diagonal intersects any polygon segments\nfunction intersectsPolygon(a, b) {\n var p = a;\n do {\n if (p.i !== a.i && p.next.i !== a.i && p.i !== b.i && p.next.i !== b.i &&\n intersects(p, p.next, a, b)) return true;\n p = p.next;\n } while (p !== a);\n\n return false;\n}\n\n// check if a polygon diagonal is locally inside the polygon\nfunction locallyInside(a, b) {\n return area(a.prev, a, a.next) < 0 ?\n area(a, b, a.next) >= 0 && area(a, a.prev, b) >= 0 :\n area(a, b, a.prev) < 0 || area(a, a.next, b) < 0;\n}\n\n// check if the middle point of a polygon diagonal is inside the polygon\nfunction middleInside(a, b) {\n var p = a,\n inside = false,\n px = (a.x + b.x) / 2,\n py = (a.y + b.y) / 2;\n do {\n if (((p.y > py) !== (p.next.y > py)) && p.next.y !== p.y &&\n (px < (p.next.x - p.x) * (py - p.y) / (p.next.y - p.y) + p.x))\n inside = !inside;\n p = p.next;\n } while (p !== a);\n\n return inside;\n}\n\n// link two polygon vertices with a bridge; if the vertices belong to the same ring, it splits polygon into two;\n// if one belongs to the outer ring and another to a hole, it merges it into a single ring\nfunction splitPolygon(a, b) {\n var a2 = new Node(a.i, a.x, a.y),\n b2 = new Node(b.i, b.x, b.y),\n an = a.next,\n bp = b.prev;\n\n a.next = b;\n b.prev = a;\n\n a2.next = an;\n an.prev = a2;\n\n b2.next = a2;\n a2.prev = b2;\n\n bp.next = b2;\n b2.prev = bp;\n\n return b2;\n}\n\n// create a node and optionally link it with previous one (in a circular doubly linked list)\nfunction insertNode(i, x, y, last) {\n var p = new Node(i, x, y);\n\n if (!last) {\n p.prev = p;\n p.next = p;\n\n } else {\n p.next = last.next;\n p.prev = last;\n last.next.prev = p;\n last.next = p;\n }\n return p;\n}\n\nfunction removeNode(p) {\n p.next.prev = p.prev;\n p.prev.next = p.next;\n\n if (p.prevZ) p.prevZ.nextZ = p.nextZ;\n if (p.nextZ) p.nextZ.prevZ = p.prevZ;\n}\n\nfunction Node(i, x, y) {\n // vertex index in coordinates array\n this.i = i;\n\n // vertex coordinates\n this.x = x;\n this.y = y;\n\n // previous and next vertex nodes in a polygon ring\n this.prev = null;\n this.next = null;\n\n // z-order curve value\n this.z = null;\n\n // previous and next nodes in z-order\n this.prevZ = null;\n this.nextZ = null;\n\n // indicates whether this is a steiner point\n this.steiner = false;\n}\n\n// return a percentage difference between the polygon area and its triangulation area;\n// used to verify correctness of triangulation\nearcut.deviation = function (data, holeIndices, dim, triangles) {\n var hasHoles = holeIndices && holeIndices.length;\n var outerLen = hasHoles ? holeIndices[0] * dim : data.length;\n\n var polygonArea = Math.abs(signedArea(data, 0, outerLen, dim));\n if (hasHoles) {\n for (var i = 0, len = holeIndices.length; i < len; i++) {\n var start = holeIndices[i] * dim;\n var end = i < len - 1 ? holeIndices[i + 1] * dim : data.length;\n polygonArea -= Math.abs(signedArea(data, start, end, dim));\n }\n }\n\n var trianglesArea = 0;\n for (i = 0; i < triangles.length; i += 3) {\n var a = triangles[i] * dim;\n var b = triangles[i + 1] * dim;\n var c = triangles[i + 2] * dim;\n trianglesArea += Math.abs(\n (data[a] - data[c]) * (data[b + 1] - data[a + 1]) -\n (data[a] - data[b]) * (data[c + 1] - data[a + 1]));\n }\n\n return polygonArea === 0 && trianglesArea === 0 ? 0 :\n Math.abs((trianglesArea - polygonArea) / polygonArea);\n};\n\nfunction signedArea(data, start, end, dim) {\n var sum = 0;\n for (var i = start, j = end - dim; i < end; i += dim) {\n sum += (data[j] - data[i]) * (data[i + 1] + data[j + 1]);\n j = i;\n }\n return sum;\n}\n\n// turn a polygon in a multi-dimensional array form (e.g. as in GeoJSON) into a form Earcut accepts\nearcut.flatten = function (data) {\n var dim = data[0][0].length,\n result = {vertices: [], holes: [], dimensions: dim},\n holeIndex = 0;\n\n for (var i = 0; i < data.length; i++) {\n for (var j = 0; j < data[i].length; j++) {\n for (var d = 0; d < dim; d++) result.vertices.push(data[i][j][d]);\n }\n if (i > 0) {\n holeIndex += data[i - 1].length;\n result.holes.push(holeIndex);\n }\n }\n return result;\n};\n\nexport {earcut};","import {math} from \"./math.js\";\n\n/**\n * Converts surface-perpendicular face normals to vertex normals. Assumes that the mesh contains disjoint triangles\n * that don't share vertex array elements. Works by finding groups of vertices that have the same location and\n * averaging their normal vectors.\n *\n * @returns {{positions: Array, normals: *}}\n * @private\n */\nfunction faceToVertexNormals(positions, normals, options = {}) {\n const smoothNormalsAngleThreshold = options.smoothNormalsAngleThreshold || 20;\n const vertexMap = {};\n const vertexNormals = [];\n const vertexNormalAccum = {};\n let acc;\n let vx;\n let vy;\n let vz;\n let key;\n const precisionPoints = 4; // number of decimal points, e.g. 4 for epsilon of 0.0001\n const precision = 10 ** precisionPoints;\n let posi;\n let i;\n let j;\n let len;\n let a;\n let b;\n let c;\n\n for (i = 0, len = positions.length; i < len; i += 3) {\n\n posi = i / 3;\n\n vx = positions[i];\n vy = positions[i + 1];\n vz = positions[i + 2];\n\n key = `${Math.round(vx * precision)}_${Math.round(vy * precision)}_${Math.round(vz * precision)}`;\n\n if (vertexMap[key] === undefined) {\n vertexMap[key] = [posi];\n } else {\n vertexMap[key].push(posi);\n }\n\n const normal = math.normalizeVec3([normals[i], normals[i + 1], normals[i + 2]]);\n\n vertexNormals[posi] = normal;\n\n acc = math.vec4([normal[0], normal[1], normal[2], 1]);\n\n vertexNormalAccum[posi] = acc;\n }\n\n for (key in vertexMap) {\n\n if (vertexMap.hasOwnProperty(key)) {\n\n const vertices = vertexMap[key];\n const numVerts = vertices.length;\n\n for (i = 0; i < numVerts; i++) {\n\n const ii = vertices[i];\n\n acc = vertexNormalAccum[ii];\n\n for (j = 0; j < numVerts; j++) {\n\n if (i === j) {\n continue;\n }\n\n const jj = vertices[j];\n\n a = vertexNormals[ii];\n b = vertexNormals[jj];\n\n const angle = Math.abs(math.angleVec3(a, b) / math.DEGTORAD);\n\n if (angle < smoothNormalsAngleThreshold) {\n\n acc[0] += b[0];\n acc[1] += b[1];\n acc[2] += b[2];\n acc[3] += 1.0;\n }\n }\n }\n }\n }\n\n for (i = 0, len = normals.length; i < len; i += 3) {\n\n acc = vertexNormalAccum[i / 3];\n\n normals[i + 0] = acc[0] / acc[3];\n normals[i + 1] = acc[1] / acc[3];\n normals[i + 2] = acc[2] / acc[3];\n\n }\n}\n\nexport {faceToVertexNormals};","// Some temporary vars to help avoid garbage collection\n\nconst doublePrecision = true;\nconst FloatArrayType = doublePrecision ? Float64Array : Float32Array;\n\nconst tempMat1 = new FloatArrayType(16);\nconst tempMat2 = new FloatArrayType(16);\nconst tempVec4 = new FloatArrayType(4);\n\n/**\n * @private\n */\nconst math = {\n\n MIN_DOUBLE: -Number.MAX_SAFE_INTEGER,\n MAX_DOUBLE: Number.MAX_SAFE_INTEGER,\n\n /**\n * The number of radiians in a degree (0.0174532925).\n * @property DEGTORAD\n * @type {Number}\n */\n DEGTORAD: 0.0174532925,\n\n /**\n * The number of degrees in a radian.\n * @property RADTODEG\n * @type {Number}\n */\n RADTODEG: 57.295779513,\n\n /**\n * Returns a new, uninitialized two-element vector.\n * @method vec2\n * @param [values] Initial values.\n * @static\n * @returns {Number[]}\n */\n vec2(values) {\n return new FloatArrayType(values || 2);\n },\n\n /**\n * Returns a new, uninitialized three-element vector.\n * @method vec3\n * @param [values] Initial values.\n * @static\n * @returns {Number[]}\n */\n vec3(values) {\n return new FloatArrayType(values || 3);\n },\n\n /**\n * Returns a new, uninitialized four-element vector.\n * @method vec4\n * @param [values] Initial values.\n * @static\n * @returns {Number[]}\n */\n vec4(values) {\n return new FloatArrayType(values || 4);\n },\n\n /**\n * Returns a new, uninitialized 3x3 matrix.\n * @method mat3\n * @param [values] Initial values.\n * @static\n * @returns {Number[]}\n */\n mat3(values) {\n return new FloatArrayType(values || 9);\n },\n\n /**\n * Converts a 3x3 matrix to 4x4\n * @method mat3ToMat4\n * @param mat3 3x3 matrix.\n * @param mat4 4x4 matrix\n * @static\n * @returns {Number[]}\n */\n mat3ToMat4(mat3, mat4 = new FloatArrayType(16)) {\n mat4[0] = mat3[0];\n mat4[1] = mat3[1];\n mat4[2] = mat3[2];\n mat4[3] = 0;\n mat4[4] = mat3[3];\n mat4[5] = mat3[4];\n mat4[6] = mat3[5];\n mat4[7] = 0;\n mat4[8] = mat3[6];\n mat4[9] = mat3[7];\n mat4[10] = mat3[8];\n mat4[11] = 0;\n mat4[12] = 0;\n mat4[13] = 0;\n mat4[14] = 0;\n mat4[15] = 1;\n return mat4;\n },\n\n /**\n * Returns a new, uninitialized 4x4 matrix.\n * @method mat4\n * @param [values] Initial values.\n * @static\n * @returns {Number[]}\n */\n mat4(values) {\n return new FloatArrayType(values || 16);\n },\n\n /**\n * Converts a 4x4 matrix to 3x3\n * @method mat4ToMat3\n * @param mat4 4x4 matrix.\n * @param mat3 3x3 matrix\n * @static\n * @returns {Number[]}\n */\n mat4ToMat3(mat4, mat3) { // TODO\n //return new FloatArrayType(values || 9);\n },\n\n /**\n * Returns a new UUID.\n * @method createUUID\n * @static\n * @return string The new UUID\n */\n createUUID: ((() => {\n const self = {};\n const lut = [];\n for (let i = 0; i < 256; i++) {\n lut[i] = (i < 16 ? '0' : '') + (i).toString(16);\n }\n return () => {\n const d0 = Math.random() * 0xffffffff | 0;\n const d1 = Math.random() * 0xffffffff | 0;\n const d2 = Math.random() * 0xffffffff | 0;\n const d3 = Math.random() * 0xffffffff | 0;\n return `${lut[d0 & 0xff] + lut[d0 >> 8 & 0xff] + lut[d0 >> 16 & 0xff] + lut[d0 >> 24 & 0xff]}-${lut[d1 & 0xff]}${lut[d1 >> 8 & 0xff]}-${lut[d1 >> 16 & 0x0f | 0x40]}${lut[d1 >> 24 & 0xff]}-${lut[d2 & 0x3f | 0x80]}${lut[d2 >> 8 & 0xff]}-${lut[d2 >> 16 & 0xff]}${lut[d2 >> 24 & 0xff]}${lut[d3 & 0xff]}${lut[d3 >> 8 & 0xff]}${lut[d3 >> 16 & 0xff]}${lut[d3 >> 24 & 0xff]}`;\n };\n }))(),\n\n /**\n * Clamps a value to the given range.\n * @param {Number} value Value to clamp.\n * @param {Number} min Lower bound.\n * @param {Number} max Upper bound.\n * @returns {Number} Clamped result.\n */\n clamp(value, min, max) {\n return Math.max(min, Math.min(max, value));\n },\n\n /**\n * Floating-point modulus\n * @method fmod\n * @static\n * @param {Number} a\n * @param {Number} b\n * @returns {*}\n */\n fmod(a, b) {\n if (a < b) {\n console.error(\"math.fmod : Attempting to find modulus within negative range - would be infinite loop - ignoring\");\n return a;\n }\n while (b <= a) {\n a -= b;\n }\n return a;\n },\n\n /**\n * Negates a four-element vector.\n * @method negateVec4\n * @static\n * @param {Array(Number)} v Vector to negate\n * @param {Array(Number)} [dest] Destination vector\n * @return {Array(Number)} dest if specified, v otherwise\n */\n negateVec4(v, dest) {\n if (!dest) {\n dest = v;\n }\n dest[0] = -v[0];\n dest[1] = -v[1];\n dest[2] = -v[2];\n dest[3] = -v[3];\n return dest;\n },\n\n /**\n * Adds one four-element vector to another.\n * @method addVec4\n * @static\n * @param {Array(Number)} u First vector\n * @param {Array(Number)} v Second vector\n * @param {Array(Number)} [dest] Destination vector\n * @return {Array(Number)} dest if specified, u otherwise\n */\n addVec4(u, v, dest) {\n if (!dest) {\n dest = u;\n }\n dest[0] = u[0] + v[0];\n dest[1] = u[1] + v[1];\n dest[2] = u[2] + v[2];\n dest[3] = u[3] + v[3];\n return dest;\n },\n\n /**\n * Adds a scalar value to each element of a four-element vector.\n * @method addVec4Scalar\n * @static\n * @param {Array(Number)} v The vector\n * @param {Number} s The scalar\n * @param {Array(Number)} [dest] Destination vector\n * @return {Array(Number)} dest if specified, v otherwise\n */\n addVec4Scalar(v, s, dest) {\n if (!dest) {\n dest = v;\n }\n dest[0] = v[0] + s;\n dest[1] = v[1] + s;\n dest[2] = v[2] + s;\n dest[3] = v[3] + s;\n return dest;\n },\n\n /**\n * Adds one three-element vector to another.\n * @method addVec3\n * @static\n * @param {Array(Number)} u First vector\n * @param {Array(Number)} v Second vector\n * @param {Array(Number)} [dest] Destination vector\n * @return {Array(Number)} dest if specified, u otherwise\n */\n addVec3(u, v, dest) {\n if (!dest) {\n dest = u;\n }\n dest[0] = u[0] + v[0];\n dest[1] = u[1] + v[1];\n dest[2] = u[2] + v[2];\n return dest;\n },\n\n /**\n * Adds a scalar value to each element of a three-element vector.\n * @method addVec4Scalar\n * @static\n * @param {Array(Number)} v The vector\n * @param {Number} s The scalar\n * @param {Array(Number)} [dest] Destination vector\n * @return {Array(Number)} dest if specified, v otherwise\n */\n addVec3Scalar(v, s, dest) {\n if (!dest) {\n dest = v;\n }\n dest[0] = v[0] + s;\n dest[1] = v[1] + s;\n dest[2] = v[2] + s;\n return dest;\n },\n\n /**\n * Subtracts one four-element vector from another.\n * @method subVec4\n * @static\n * @param {Array(Number)} u First vector\n * @param {Array(Number)} v Vector to subtract\n * @param {Array(Number)} [dest] Destination vector\n * @return {Array(Number)} dest if specified, u otherwise\n */\n subVec4(u, v, dest) {\n if (!dest) {\n dest = u;\n }\n dest[0] = u[0] - v[0];\n dest[1] = u[1] - v[1];\n dest[2] = u[2] - v[2];\n dest[3] = u[3] - v[3];\n return dest;\n },\n\n /**\n * Subtracts one three-element vector from another.\n * @method subVec3\n * @static\n * @param {Array(Number)} u First vector\n * @param {Array(Number)} v Vector to subtract\n * @param {Array(Number)} [dest] Destination vector\n * @return {Array(Number)} dest if specified, u otherwise\n */\n subVec3(u, v, dest) {\n if (!dest) {\n dest = u;\n }\n dest[0] = u[0] - v[0];\n dest[1] = u[1] - v[1];\n dest[2] = u[2] - v[2];\n return dest;\n },\n\n /**\n * Subtracts one two-element vector from another.\n * @method subVec2\n * @static\n * @param {Array(Number)} u First vector\n * @param {Array(Number)} v Vector to subtract\n * @param {Array(Number)} [dest] Destination vector\n * @return {Array(Number)} dest if specified, u otherwise\n */\n subVec2(u, v, dest) {\n if (!dest) {\n dest = u;\n }\n dest[0] = u[0] - v[0];\n dest[1] = u[1] - v[1];\n return dest;\n },\n\n /**\n * Subtracts a scalar value from each element of a four-element vector.\n * @method subVec4Scalar\n * @static\n * @param {Array(Number)} v The vector\n * @param {Number} s The scalar\n * @param {Array(Number)} [dest] Destination vector\n * @return {Array(Number)} dest if specified, v otherwise\n */\n subVec4Scalar(v, s, dest) {\n if (!dest) {\n dest = v;\n }\n dest[0] = v[0] - s;\n dest[1] = v[1] - s;\n dest[2] = v[2] - s;\n dest[3] = v[3] - s;\n return dest;\n },\n\n /**\n * Sets each element of a 4-element vector to a scalar value minus the value of that element.\n * @method subScalarVec4\n * @static\n * @param {Array(Number)} v The vector\n * @param {Number} s The scalar\n * @param {Array(Number)} [dest] Destination vector\n * @return {Array(Number)} dest if specified, v otherwise\n */\n subScalarVec4(v, s, dest) {\n if (!dest) {\n dest = v;\n }\n dest[0] = s - v[0];\n dest[1] = s - v[1];\n dest[2] = s - v[2];\n dest[3] = s - v[3];\n return dest;\n },\n\n /**\n * Multiplies one three-element vector by another.\n * @method mulVec3\n * @static\n * @param {Array(Number)} u First vector\n * @param {Array(Number)} v Second vector\n * @param {Array(Number)} [dest] Destination vector\n * @return {Array(Number)} dest if specified, u otherwise\n */\n mulVec4(u, v, dest) {\n if (!dest) {\n dest = u;\n }\n dest[0] = u[0] * v[0];\n dest[1] = u[1] * v[1];\n dest[2] = u[2] * v[2];\n dest[3] = u[3] * v[3];\n return dest;\n },\n\n /**\n * Multiplies each element of a four-element vector by a scalar.\n * @method mulVec34calar\n * @static\n * @param {Array(Number)} v The vector\n * @param {Number} s The scalar\n * @param {Array(Number)} [dest] Destination vector\n * @return {Array(Number)} dest if specified, v otherwise\n */\n mulVec4Scalar(v, s, dest) {\n if (!dest) {\n dest = v;\n }\n dest[0] = v[0] * s;\n dest[1] = v[1] * s;\n dest[2] = v[2] * s;\n dest[3] = v[3] * s;\n return dest;\n },\n\n /**\n * Multiplies each element of a three-element vector by a scalar.\n * @method mulVec3Scalar\n * @static\n * @param {Array(Number)} v The vector\n * @param {Number} s The scalar\n * @param {Array(Number)} [dest] Destination vector\n * @return {Array(Number)} dest if specified, v otherwise\n */\n mulVec3Scalar(v, s, dest) {\n if (!dest) {\n dest = v;\n }\n dest[0] = v[0] * s;\n dest[1] = v[1] * s;\n dest[2] = v[2] * s;\n return dest;\n },\n\n /**\n * Multiplies each element of a two-element vector by a scalar.\n * @method mulVec2Scalar\n * @static\n * @param {Array(Number)} v The vector\n * @param {Number} s The scalar\n * @param {Array(Number)} [dest] Destination vector\n * @return {Array(Number)} dest if specified, v otherwise\n */\n mulVec2Scalar(v, s, dest) {\n if (!dest) {\n dest = v;\n }\n dest[0] = v[0] * s;\n dest[1] = v[1] * s;\n return dest;\n },\n\n /**\n * Divides one three-element vector by another.\n * @method divVec3\n * @static\n * @param {Array(Number)} u First vector\n * @param {Array(Number)} v Second vector\n * @param {Array(Number)} [dest] Destination vector\n * @return {Array(Number)} dest if specified, u otherwise\n */\n divVec3(u, v, dest) {\n if (!dest) {\n dest = u;\n }\n dest[0] = u[0] / v[0];\n dest[1] = u[1] / v[1];\n dest[2] = u[2] / v[2];\n return dest;\n },\n\n /**\n * Divides one four-element vector by another.\n * @method divVec4\n * @static\n * @param {Array(Number)} u First vector\n * @param {Array(Number)} v Second vector\n * @param {Array(Number)} [dest] Destination vector\n * @return {Array(Number)} dest if specified, u otherwise\n */\n divVec4(u, v, dest) {\n if (!dest) {\n dest = u;\n }\n dest[0] = u[0] / v[0];\n dest[1] = u[1] / v[1];\n dest[2] = u[2] / v[2];\n dest[3] = u[3] / v[3];\n return dest;\n },\n\n /**\n * Divides a scalar by a three-element vector, returning a new vector.\n * @method divScalarVec3\n * @static\n * @param v vec3\n * @param s scalar\n * @param dest vec3 - optional destination\n * @return [] dest if specified, v otherwise\n */\n divScalarVec3(s, v, dest) {\n if (!dest) {\n dest = v;\n }\n dest[0] = s / v[0];\n dest[1] = s / v[1];\n dest[2] = s / v[2];\n return dest;\n },\n\n /**\n * Divides a three-element vector by a scalar.\n * @method divVec3Scalar\n * @static\n * @param v vec3\n * @param s scalar\n * @param dest vec3 - optional destination\n * @return [] dest if specified, v otherwise\n */\n divVec3Scalar(v, s, dest) {\n if (!dest) {\n dest = v;\n }\n dest[0] = v[0] / s;\n dest[1] = v[1] / s;\n dest[2] = v[2] / s;\n return dest;\n },\n\n /**\n * Divides a four-element vector by a scalar.\n * @method divVec4Scalar\n * @static\n * @param v vec4\n * @param s scalar\n * @param dest vec4 - optional destination\n * @return [] dest if specified, v otherwise\n */\n divVec4Scalar(v, s, dest) {\n if (!dest) {\n dest = v;\n }\n dest[0] = v[0] / s;\n dest[1] = v[1] / s;\n dest[2] = v[2] / s;\n dest[3] = v[3] / s;\n return dest;\n },\n\n\n /**\n * Divides a scalar by a four-element vector, returning a new vector.\n * @method divScalarVec4\n * @static\n * @param s scalar\n * @param v vec4\n * @param dest vec4 - optional destination\n * @return [] dest if specified, v otherwise\n */\n divScalarVec4(s, v, dest) {\n if (!dest) {\n dest = v;\n }\n dest[0] = s / v[0];\n dest[1] = s / v[1];\n dest[2] = s / v[2];\n dest[3] = s / v[3];\n return dest;\n },\n\n /**\n * Returns the dot product of two four-element vectors.\n * @method dotVec4\n * @static\n * @param {Array(Number)} u First vector\n * @param {Array(Number)} v Second vector\n * @return The dot product\n */\n dotVec4(u, v) {\n return (u[0] * v[0] + u[1] * v[1] + u[2] * v[2] + u[3] * v[3]);\n },\n\n /**\n * Returns the cross product of two four-element vectors.\n * @method cross3Vec4\n * @static\n * @param {Array(Number)} u First vector\n * @param {Array(Number)} v Second vector\n * @return The cross product\n */\n cross3Vec4(u, v) {\n const u0 = u[0];\n const u1 = u[1];\n const u2 = u[2];\n const v0 = v[0];\n const v1 = v[1];\n const v2 = v[2];\n return [\n u1 * v2 - u2 * v1,\n u2 * v0 - u0 * v2,\n u0 * v1 - u1 * v0,\n 0.0];\n },\n\n /**\n * Returns the cross product of two three-element vectors.\n * @method cross3Vec3\n * @static\n * @param {Array(Number)} u First vector\n * @param {Array(Number)} v Second vector\n * @return The cross product\n */\n cross3Vec3(u, v, dest) {\n if (!dest) {\n dest = u;\n }\n const x = u[0];\n const y = u[1];\n const z = u[2];\n const x2 = v[0];\n const y2 = v[1];\n const z2 = v[2];\n dest[0] = y * z2 - z * y2;\n dest[1] = z * x2 - x * z2;\n dest[2] = x * y2 - y * x2;\n return dest;\n },\n\n\n sqLenVec4(v) { // TODO\n return math.dotVec4(v, v);\n },\n\n /**\n * Returns the length of a four-element vector.\n * @method lenVec4\n * @static\n * @param {Array(Number)} v The vector\n * @return The length\n */\n lenVec4(v) {\n return Math.sqrt(math.sqLenVec4(v));\n },\n\n /**\n * Returns the dot product of two three-element vectors.\n * @method dotVec3\n * @static\n * @param {Array(Number)} u First vector\n * @param {Array(Number)} v Second vector\n * @return The dot product\n */\n dotVec3(u, v) {\n return (u[0] * v[0] + u[1] * v[1] + u[2] * v[2]);\n },\n\n /**\n * Returns the dot product of two two-element vectors.\n * @method dotVec4\n * @static\n * @param {Array(Number)} u First vector\n * @param {Array(Number)} v Second vector\n * @return The dot product\n */\n dotVec2(u, v) {\n return (u[0] * v[0] + u[1] * v[1]);\n },\n\n\n sqLenVec3(v) {\n return math.dotVec3(v, v);\n },\n\n\n sqLenVec2(v) {\n return math.dotVec2(v, v);\n },\n\n /**\n * Returns the length of a three-element vector.\n * @method lenVec3\n * @static\n * @param {Array(Number)} v The vector\n * @return The length\n */\n lenVec3(v) {\n return Math.sqrt(math.sqLenVec3(v));\n },\n\n distVec3: ((() => {\n const vec = new FloatArrayType(3);\n return (v, w) => math.lenVec3(math.subVec3(v, w, vec));\n }))(),\n\n /**\n * Returns the length of a two-element vector.\n * @method lenVec2\n * @static\n * @param {Array(Number)} v The vector\n * @return The length\n */\n lenVec2(v) {\n return Math.sqrt(math.sqLenVec2(v));\n },\n\n distVec2: ((() => {\n const vec = new FloatArrayType(2);\n return (v, w) => math.lenVec2(math.subVec2(v, w, vec));\n }))(),\n\n /**\n * @method rcpVec3\n * @static\n * @param v vec3\n * @param dest vec3 - optional destination\n * @return [] dest if specified, v otherwise\n *\n */\n rcpVec3(v, dest) {\n return math.divScalarVec3(1.0, v, dest);\n },\n\n /**\n * Normalizes a four-element vector\n * @method normalizeVec4\n * @static\n * @param v vec4\n * @param dest vec4 - optional destination\n * @return [] dest if specified, v otherwise\n *\n */\n normalizeVec4(v, dest) {\n const f = 1.0 / math.lenVec4(v);\n return math.mulVec4Scalar(v, f, dest);\n },\n\n /**\n * Normalizes a three-element vector\n * @method normalizeVec4\n * @static\n */\n normalizeVec3(v, dest) {\n const f = 1.0 / math.lenVec3(v);\n return math.mulVec3Scalar(v, f, dest);\n },\n\n /**\n * Normalizes a two-element vector\n * @method normalizeVec2\n * @static\n */\n normalizeVec2(v, dest) {\n const f = 1.0 / math.lenVec2(v);\n return math.mulVec2Scalar(v, f, dest);\n },\n\n /**\n * Gets the angle between two vectors\n * @method angleVec3\n * @param v\n * @param w\n * @returns {number}\n */\n angleVec3(v, w) {\n let theta = math.dotVec3(v, w) / (Math.sqrt(math.sqLenVec3(v) * math.sqLenVec3(w)));\n theta = theta < -1 ? -1 : (theta > 1 ? 1 : theta); // Clamp to handle numerical problems\n return Math.acos(theta);\n },\n\n /**\n * Creates a three-element vector from the rotation part of a sixteen-element matrix.\n * @param m\n * @param dest\n */\n vec3FromMat4Scale: ((() => {\n\n const tempVec3 = new FloatArrayType(3);\n\n return (m, dest) => {\n\n tempVec3[0] = m[0];\n tempVec3[1] = m[1];\n tempVec3[2] = m[2];\n\n dest[0] = math.lenVec3(tempVec3);\n\n tempVec3[0] = m[4];\n tempVec3[1] = m[5];\n tempVec3[2] = m[6];\n\n dest[1] = math.lenVec3(tempVec3);\n\n tempVec3[0] = m[8];\n tempVec3[1] = m[9];\n tempVec3[2] = m[10];\n\n dest[2] = math.lenVec3(tempVec3);\n\n return dest;\n };\n }))(),\n\n /**\n * Converts an n-element vector to a JSON-serializable\n * array with values rounded to two decimal places.\n */\n vecToArray: ((() => {\n function trunc(v) {\n return Math.round(v * 100000) / 100000\n }\n\n return v => {\n v = Array.prototype.slice.call(v);\n for (let i = 0, len = v.length; i < len; i++) {\n v[i] = trunc(v[i]);\n }\n return v;\n };\n }))(),\n\n /**\n * Converts a 3-element vector from an array to an object of the form ````{x:999, y:999, z:999}````.\n * @param arr\n * @returns {{x: *, y: *, z: *}}\n */\n xyzArrayToObject(arr) {\n return {\"x\": arr[0], \"y\": arr[1], \"z\": arr[2]};\n },\n\n /**\n * Converts a 3-element vector object of the form ````{x:999, y:999, z:999}```` to an array.\n * @param xyz\n * @param [arry]\n * @returns {*[]}\n */\n xyzObjectToArray(xyz, arry) {\n arry = arry || new FloatArrayType(3);\n arry[0] = xyz.x;\n arry[1] = xyz.y;\n arry[2] = xyz.z;\n return arry;\n },\n\n /**\n * Duplicates a 4x4 identity matrix.\n * @method dupMat4\n * @static\n */\n dupMat4(m) {\n return m.slice(0, 16);\n },\n\n /**\n * Extracts a 3x3 matrix from a 4x4 matrix.\n * @method mat4To3\n * @static\n */\n mat4To3(m) {\n return [\n m[0], m[1], m[2],\n m[4], m[5], m[6],\n m[8], m[9], m[10]\n ];\n },\n\n /**\n * Returns a 4x4 matrix with each element set to the given scalar value.\n * @method m4s\n * @static\n */\n m4s(s) {\n return [\n s, s, s, s,\n s, s, s, s,\n s, s, s, s,\n s, s, s, s\n ];\n },\n\n /**\n * Returns a 4x4 matrix with each element set to zero.\n * @method setMat4ToZeroes\n * @static\n */\n setMat4ToZeroes() {\n return math.m4s(0.0);\n },\n\n /**\n * Returns a 4x4 matrix with each element set to 1.0.\n * @method setMat4ToOnes\n * @static\n */\n setMat4ToOnes() {\n return math.m4s(1.0);\n },\n\n /**\n * Returns a 4x4 matrix with each element set to 1.0.\n * @method setMat4ToOnes\n * @static\n */\n diagonalMat4v(v) {\n return new FloatArrayType([\n v[0], 0.0, 0.0, 0.0,\n 0.0, v[1], 0.0, 0.0,\n 0.0, 0.0, v[2], 0.0,\n 0.0, 0.0, 0.0, v[3]\n ]);\n },\n\n /**\n * Returns a 4x4 matrix with diagonal elements set to the given vector.\n * @method diagonalMat4c\n * @static\n */\n diagonalMat4c(x, y, z, w) {\n return math.diagonalMat4v([x, y, z, w]);\n },\n\n /**\n * Returns a 4x4 matrix with diagonal elements set to the given scalar.\n * @method diagonalMat4s\n * @static\n */\n diagonalMat4s(s) {\n return math.diagonalMat4c(s, s, s, s);\n },\n\n /**\n * Returns a 4x4 identity matrix.\n * @method identityMat4\n * @static\n */\n identityMat4(mat = new FloatArrayType(16)) {\n mat[0] = 1.0;\n mat[1] = 0.0;\n mat[2] = 0.0;\n mat[3] = 0.0;\n\n mat[4] = 0.0;\n mat[5] = 1.0;\n mat[6] = 0.0;\n mat[7] = 0.0;\n\n mat[8] = 0.0;\n mat[9] = 0.0;\n mat[10] = 1.0;\n mat[11] = 0.0;\n\n mat[12] = 0.0;\n mat[13] = 0.0;\n mat[14] = 0.0;\n mat[15] = 1.0;\n\n return mat;\n },\n\n /**\n * Returns a 3x3 identity matrix.\n * @method identityMat3\n * @static\n */\n identityMat3(mat = new FloatArrayType(9)) {\n mat[0] = 1.0;\n mat[1] = 0.0;\n mat[2] = 0.0;\n\n mat[3] = 0.0;\n mat[4] = 1.0;\n mat[5] = 0.0;\n\n mat[6] = 0.0;\n mat[7] = 0.0;\n mat[8] = 1.0;\n\n return mat;\n },\n\n /**\n * Tests if the given 4x4 matrix is the identity matrix.\n * @method isIdentityMat4\n * @static\n */\n isIdentityMat4(m) {\n if (m[0] !== 1.0 || m[1] !== 0.0 || m[2] !== 0.0 || m[3] !== 0.0 ||\n m[4] !== 0.0 || m[5] !== 1.0 || m[6] !== 0.0 || m[7] !== 0.0 ||\n m[8] !== 0.0 || m[9] !== 0.0 || m[10] !== 1.0 || m[11] !== 0.0 ||\n m[12] !== 0.0 || m[13] !== 0.0 || m[14] !== 0.0 || m[15] !== 1.0) {\n return false;\n }\n return true;\n },\n\n /**\n * Negates the given 4x4 matrix.\n * @method negateMat4\n * @static\n */\n negateMat4(m, dest) {\n if (!dest) {\n dest = m;\n }\n dest[0] = -m[0];\n dest[1] = -m[1];\n dest[2] = -m[2];\n dest[3] = -m[3];\n dest[4] = -m[4];\n dest[5] = -m[5];\n dest[6] = -m[6];\n dest[7] = -m[7];\n dest[8] = -m[8];\n dest[9] = -m[9];\n dest[10] = -m[10];\n dest[11] = -m[11];\n dest[12] = -m[12];\n dest[13] = -m[13];\n dest[14] = -m[14];\n dest[15] = -m[15];\n return dest;\n },\n\n /**\n * Adds the given 4x4 matrices together.\n * @method addMat4\n * @static\n */\n addMat4(a, b, dest) {\n if (!dest) {\n dest = a;\n }\n dest[0] = a[0] + b[0];\n dest[1] = a[1] + b[1];\n dest[2] = a[2] + b[2];\n dest[3] = a[3] + b[3];\n dest[4] = a[4] + b[4];\n dest[5] = a[5] + b[5];\n dest[6] = a[6] + b[6];\n dest[7] = a[7] + b[7];\n dest[8] = a[8] + b[8];\n dest[9] = a[9] + b[9];\n dest[10] = a[10] + b[10];\n dest[11] = a[11] + b[11];\n dest[12] = a[12] + b[12];\n dest[13] = a[13] + b[13];\n dest[14] = a[14] + b[14];\n dest[15] = a[15] + b[15];\n return dest;\n },\n\n /**\n * Adds the given scalar to each element of the given 4x4 matrix.\n * @method addMat4Scalar\n * @static\n */\n addMat4Scalar(m, s, dest) {\n if (!dest) {\n dest = m;\n }\n dest[0] = m[0] + s;\n dest[1] = m[1] + s;\n dest[2] = m[2] + s;\n dest[3] = m[3] + s;\n dest[4] = m[4] + s;\n dest[5] = m[5] + s;\n dest[6] = m[6] + s;\n dest[7] = m[7] + s;\n dest[8] = m[8] + s;\n dest[9] = m[9] + s;\n dest[10] = m[10] + s;\n dest[11] = m[11] + s;\n dest[12] = m[12] + s;\n dest[13] = m[13] + s;\n dest[14] = m[14] + s;\n dest[15] = m[15] + s;\n return dest;\n },\n\n /**\n * Adds the given scalar to each element of the given 4x4 matrix.\n * @method addScalarMat4\n * @static\n */\n addScalarMat4(s, m, dest) {\n return math.addMat4Scalar(m, s, dest);\n },\n\n /**\n * Subtracts the second 4x4 matrix from the first.\n * @method subMat4\n * @static\n */\n subMat4(a, b, dest) {\n if (!dest) {\n dest = a;\n }\n dest[0] = a[0] - b[0];\n dest[1] = a[1] - b[1];\n dest[2] = a[2] - b[2];\n dest[3] = a[3] - b[3];\n dest[4] = a[4] - b[4];\n dest[5] = a[5] - b[5];\n dest[6] = a[6] - b[6];\n dest[7] = a[7] - b[7];\n dest[8] = a[8] - b[8];\n dest[9] = a[9] - b[9];\n dest[10] = a[10] - b[10];\n dest[11] = a[11] - b[11];\n dest[12] = a[12] - b[12];\n dest[13] = a[13] - b[13];\n dest[14] = a[14] - b[14];\n dest[15] = a[15] - b[15];\n return dest;\n },\n\n /**\n * Subtracts the given scalar from each element of the given 4x4 matrix.\n * @method subMat4Scalar\n * @static\n */\n subMat4Scalar(m, s, dest) {\n if (!dest) {\n dest = m;\n }\n dest[0] = m[0] - s;\n dest[1] = m[1] - s;\n dest[2] = m[2] - s;\n dest[3] = m[3] - s;\n dest[4] = m[4] - s;\n dest[5] = m[5] - s;\n dest[6] = m[6] - s;\n dest[7] = m[7] - s;\n dest[8] = m[8] - s;\n dest[9] = m[9] - s;\n dest[10] = m[10] - s;\n dest[11] = m[11] - s;\n dest[12] = m[12] - s;\n dest[13] = m[13] - s;\n dest[14] = m[14] - s;\n dest[15] = m[15] - s;\n return dest;\n },\n\n /**\n * Subtracts the given scalar from each element of the given 4x4 matrix.\n * @method subScalarMat4\n * @static\n */\n subScalarMat4(s, m, dest) {\n if (!dest) {\n dest = m;\n }\n dest[0] = s - m[0];\n dest[1] = s - m[1];\n dest[2] = s - m[2];\n dest[3] = s - m[3];\n dest[4] = s - m[4];\n dest[5] = s - m[5];\n dest[6] = s - m[6];\n dest[7] = s - m[7];\n dest[8] = s - m[8];\n dest[9] = s - m[9];\n dest[10] = s - m[10];\n dest[11] = s - m[11];\n dest[12] = s - m[12];\n dest[13] = s - m[13];\n dest[14] = s - m[14];\n dest[15] = s - m[15];\n return dest;\n },\n\n /**\n * Multiplies the two given 4x4 matrix by each other.\n * @method mulMat4\n * @static\n */\n mulMat4(a, b, dest) {\n if (!dest) {\n dest = a;\n }\n\n // Cache the matrix values (makes for huge speed increases!)\n const a00 = a[0];\n\n const a01 = a[1];\n const a02 = a[2];\n const a03 = a[3];\n const a10 = a[4];\n const a11 = a[5];\n const a12 = a[6];\n const a13 = a[7];\n const a20 = a[8];\n const a21 = a[9];\n const a22 = a[10];\n const a23 = a[11];\n const a30 = a[12];\n const a31 = a[13];\n const a32 = a[14];\n const a33 = a[15];\n const b00 = b[0];\n const b01 = b[1];\n const b02 = b[2];\n const b03 = b[3];\n const b10 = b[4];\n const b11 = b[5];\n const b12 = b[6];\n const b13 = b[7];\n const b20 = b[8];\n const b21 = b[9];\n const b22 = b[10];\n const b23 = b[11];\n const b30 = b[12];\n const b31 = b[13];\n const b32 = b[14];\n const b33 = b[15];\n\n dest[0] = b00 * a00 + b01 * a10 + b02 * a20 + b03 * a30;\n dest[1] = b00 * a01 + b01 * a11 + b02 * a21 + b03 * a31;\n dest[2] = b00 * a02 + b01 * a12 + b02 * a22 + b03 * a32;\n dest[3] = b00 * a03 + b01 * a13 + b02 * a23 + b03 * a33;\n dest[4] = b10 * a00 + b11 * a10 + b12 * a20 + b13 * a30;\n dest[5] = b10 * a01 + b11 * a11 + b12 * a21 + b13 * a31;\n dest[6] = b10 * a02 + b11 * a12 + b12 * a22 + b13 * a32;\n dest[7] = b10 * a03 + b11 * a13 + b12 * a23 + b13 * a33;\n dest[8] = b20 * a00 + b21 * a10 + b22 * a20 + b23 * a30;\n dest[9] = b20 * a01 + b21 * a11 + b22 * a21 + b23 * a31;\n dest[10] = b20 * a02 + b21 * a12 + b22 * a22 + b23 * a32;\n dest[11] = b20 * a03 + b21 * a13 + b22 * a23 + b23 * a33;\n dest[12] = b30 * a00 + b31 * a10 + b32 * a20 + b33 * a30;\n dest[13] = b30 * a01 + b31 * a11 + b32 * a21 + b33 * a31;\n dest[14] = b30 * a02 + b31 * a12 + b32 * a22 + b33 * a32;\n dest[15] = b30 * a03 + b31 * a13 + b32 * a23 + b33 * a33;\n\n return dest;\n },\n\n /**\n * Multiplies the two given 3x3 matrices by each other.\n * @method mulMat4\n * @static\n */\n mulMat3(a, b, dest) {\n if (!dest) {\n dest = new FloatArrayType(9);\n }\n\n const a11 = a[0];\n const a12 = a[3];\n const a13 = a[6];\n const a21 = a[1];\n const a22 = a[4];\n const a23 = a[7];\n const a31 = a[2];\n const a32 = a[5];\n const a33 = a[8];\n const b11 = b[0];\n const b12 = b[3];\n const b13 = b[6];\n const b21 = b[1];\n const b22 = b[4];\n const b23 = b[7];\n const b31 = b[2];\n const b32 = b[5];\n const b33 = b[8];\n\n dest[0] = a11 * b11 + a12 * b21 + a13 * b31;\n dest[3] = a11 * b12 + a12 * b22 + a13 * b32;\n dest[6] = a11 * b13 + a12 * b23 + a13 * b33;\n\n dest[1] = a21 * b11 + a22 * b21 + a23 * b31;\n dest[4] = a21 * b12 + a22 * b22 + a23 * b32;\n dest[7] = a21 * b13 + a22 * b23 + a23 * b33;\n\n dest[2] = a31 * b11 + a32 * b21 + a33 * b31;\n dest[5] = a31 * b12 + a32 * b22 + a33 * b32;\n dest[8] = a31 * b13 + a32 * b23 + a33 * b33;\n\n return dest;\n },\n\n /**\n * Multiplies each element of the given 4x4 matrix by the given scalar.\n * @method mulMat4Scalar\n * @static\n */\n mulMat4Scalar(m, s, dest) {\n if (!dest) {\n dest = m;\n }\n dest[0] = m[0] * s;\n dest[1] = m[1] * s;\n dest[2] = m[2] * s;\n dest[3] = m[3] * s;\n dest[4] = m[4] * s;\n dest[5] = m[5] * s;\n dest[6] = m[6] * s;\n dest[7] = m[7] * s;\n dest[8] = m[8] * s;\n dest[9] = m[9] * s;\n dest[10] = m[10] * s;\n dest[11] = m[11] * s;\n dest[12] = m[12] * s;\n dest[13] = m[13] * s;\n dest[14] = m[14] * s;\n dest[15] = m[15] * s;\n return dest;\n },\n\n /**\n * Multiplies the given 4x4 matrix by the given four-element vector.\n * @method mulMat4v4\n * @static\n */\n mulMat4v4(m, v, dest = math.vec4()) {\n const v0 = v[0];\n const v1 = v[1];\n const v2 = v[2];\n const v3 = v[3];\n dest[0] = m[0] * v0 + m[4] * v1 + m[8] * v2 + m[12] * v3;\n dest[1] = m[1] * v0 + m[5] * v1 + m[9] * v2 + m[13] * v3;\n dest[2] = m[2] * v0 + m[6] * v1 + m[10] * v2 + m[14] * v3;\n dest[3] = m[3] * v0 + m[7] * v1 + m[11] * v2 + m[15] * v3;\n return dest;\n },\n\n /**\n * Transposes the given 4x4 matrix.\n * @method transposeMat4\n * @static\n */\n transposeMat4(mat, dest) {\n // If we are transposing ourselves we can skip a few steps but have to cache some values\n const m4 = mat[4];\n\n const m14 = mat[14];\n const m8 = mat[8];\n const m13 = mat[13];\n const m12 = mat[12];\n const m9 = mat[9];\n if (!dest || mat === dest) {\n const a01 = mat[1];\n const a02 = mat[2];\n const a03 = mat[3];\n const a12 = mat[6];\n const a13 = mat[7];\n const a23 = mat[11];\n mat[1] = m4;\n mat[2] = m8;\n mat[3] = m12;\n mat[4] = a01;\n mat[6] = m9;\n mat[7] = m13;\n mat[8] = a02;\n mat[9] = a12;\n mat[11] = m14;\n mat[12] = a03;\n mat[13] = a13;\n mat[14] = a23;\n return mat;\n }\n dest[0] = mat[0];\n dest[1] = m4;\n dest[2] = m8;\n dest[3] = m12;\n dest[4] = mat[1];\n dest[5] = mat[5];\n dest[6] = m9;\n dest[7] = m13;\n dest[8] = mat[2];\n dest[9] = mat[6];\n dest[10] = mat[10];\n dest[11] = m14;\n dest[12] = mat[3];\n dest[13] = mat[7];\n dest[14] = mat[11];\n dest[15] = mat[15];\n return dest;\n },\n\n /**\n * Transposes the given 3x3 matrix.\n *\n * @method transposeMat3\n * @static\n */\n transposeMat3(mat, dest) {\n if (dest === mat) {\n const a01 = mat[1];\n const a02 = mat[2];\n const a12 = mat[5];\n dest[1] = mat[3];\n dest[2] = mat[6];\n dest[3] = a01;\n dest[5] = mat[7];\n dest[6] = a02;\n dest[7] = a12;\n } else {\n dest[0] = mat[0];\n dest[1] = mat[3];\n dest[2] = mat[6];\n dest[3] = mat[1];\n dest[4] = mat[4];\n dest[5] = mat[7];\n dest[6] = mat[2];\n dest[7] = mat[5];\n dest[8] = mat[8];\n }\n return dest;\n },\n\n /**\n * Returns the determinant of the given 4x4 matrix.\n * @method determinantMat4\n * @static\n */\n determinantMat4(mat) {\n // Cache the matrix values (makes for huge speed increases!)\n const a00 = mat[0];\n\n const a01 = mat[1];\n const a02 = mat[2];\n const a03 = mat[3];\n const a10 = mat[4];\n const a11 = mat[5];\n const a12 = mat[6];\n const a13 = mat[7];\n const a20 = mat[8];\n const a21 = mat[9];\n const a22 = mat[10];\n const a23 = mat[11];\n const a30 = mat[12];\n const a31 = mat[13];\n const a32 = mat[14];\n const a33 = mat[15];\n return a30 * a21 * a12 * a03 - a20 * a31 * a12 * a03 - a30 * a11 * a22 * a03 + a10 * a31 * a22 * a03 +\n a20 * a11 * a32 * a03 - a10 * a21 * a32 * a03 - a30 * a21 * a02 * a13 + a20 * a31 * a02 * a13 +\n a30 * a01 * a22 * a13 - a00 * a31 * a22 * a13 - a20 * a01 * a32 * a13 + a00 * a21 * a32 * a13 +\n a30 * a11 * a02 * a23 - a10 * a31 * a02 * a23 - a30 * a01 * a12 * a23 + a00 * a31 * a12 * a23 +\n a10 * a01 * a32 * a23 - a00 * a11 * a32 * a23 - a20 * a11 * a02 * a33 + a10 * a21 * a02 * a33 +\n a20 * a01 * a12 * a33 - a00 * a21 * a12 * a33 - a10 * a01 * a22 * a33 + a00 * a11 * a22 * a33;\n },\n\n /**\n * Returns the inverse of the given 4x4 matrix.\n * @method inverseMat4\n * @static\n */\n inverseMat4(mat, dest) {\n if (!dest) {\n dest = mat;\n }\n\n // Cache the matrix values (makes for huge speed increases!)\n const a00 = mat[0];\n\n const a01 = mat[1];\n const a02 = mat[2];\n const a03 = mat[3];\n const a10 = mat[4];\n const a11 = mat[5];\n const a12 = mat[6];\n const a13 = mat[7];\n const a20 = mat[8];\n const a21 = mat[9];\n const a22 = mat[10];\n const a23 = mat[11];\n const a30 = mat[12];\n const a31 = mat[13];\n const a32 = mat[14];\n const a33 = mat[15];\n const b00 = a00 * a11 - a01 * a10;\n const b01 = a00 * a12 - a02 * a10;\n const b02 = a00 * a13 - a03 * a10;\n const b03 = a01 * a12 - a02 * a11;\n const b04 = a01 * a13 - a03 * a11;\n const b05 = a02 * a13 - a03 * a12;\n const b06 = a20 * a31 - a21 * a30;\n const b07 = a20 * a32 - a22 * a30;\n const b08 = a20 * a33 - a23 * a30;\n const b09 = a21 * a32 - a22 * a31;\n const b10 = a21 * a33 - a23 * a31;\n const b11 = a22 * a33 - a23 * a32;\n\n // Calculate the determinant (inlined to avoid double-caching)\n const invDet = 1 / (b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06);\n\n dest[0] = (a11 * b11 - a12 * b10 + a13 * b09) * invDet;\n dest[1] = (-a01 * b11 + a02 * b10 - a03 * b09) * invDet;\n dest[2] = (a31 * b05 - a32 * b04 + a33 * b03) * invDet;\n dest[3] = (-a21 * b05 + a22 * b04 - a23 * b03) * invDet;\n dest[4] = (-a10 * b11 + a12 * b08 - a13 * b07) * invDet;\n dest[5] = (a00 * b11 - a02 * b08 + a03 * b07) * invDet;\n dest[6] = (-a30 * b05 + a32 * b02 - a33 * b01) * invDet;\n dest[7] = (a20 * b05 - a22 * b02 + a23 * b01) * invDet;\n dest[8] = (a10 * b10 - a11 * b08 + a13 * b06) * invDet;\n dest[9] = (-a00 * b10 + a01 * b08 - a03 * b06) * invDet;\n dest[10] = (a30 * b04 - a31 * b02 + a33 * b00) * invDet;\n dest[11] = (-a20 * b04 + a21 * b02 - a23 * b00) * invDet;\n dest[12] = (-a10 * b09 + a11 * b07 - a12 * b06) * invDet;\n dest[13] = (a00 * b09 - a01 * b07 + a02 * b06) * invDet;\n dest[14] = (-a30 * b03 + a31 * b01 - a32 * b00) * invDet;\n dest[15] = (a20 * b03 - a21 * b01 + a22 * b00) * invDet;\n\n return dest;\n },\n\n /**\n * Returns the trace of the given 4x4 matrix.\n * @method traceMat4\n * @static\n */\n traceMat4(m) {\n return (m[0] + m[5] + m[10] + m[15]);\n },\n\n /**\n * Returns 4x4 translation matrix.\n * @method translationMat4\n * @static\n */\n translationMat4v(v, dest) {\n const m = dest || math.identityMat4();\n m[12] = v[0];\n m[13] = v[1];\n m[14] = v[2];\n return m;\n },\n\n /**\n * Returns 3x3 translation matrix.\n * @method translationMat3\n * @static\n */\n translationMat3v(v, dest) {\n const m = dest || math.identityMat3();\n m[6] = v[0];\n m[7] = v[1];\n return m;\n },\n\n /**\n * Returns 4x4 translation matrix.\n * @method translationMat4c\n * @static\n */\n translationMat4c: ((() => {\n const xyz = new FloatArrayType(3);\n return (x, y, z, dest) => {\n xyz[0] = x;\n xyz[1] = y;\n xyz[2] = z;\n return math.translationMat4v(xyz, dest);\n };\n }))(),\n\n /**\n * Returns 4x4 translation matrix.\n * @method translationMat4s\n * @static\n */\n translationMat4s(s, dest) {\n return math.translationMat4c(s, s, s, dest);\n },\n\n /**\n * Efficiently post-concatenates a translation to the given matrix.\n * @param v\n * @param m\n */\n translateMat4v(xyz, m) {\n return math.translateMat4c(xyz[0], xyz[1], xyz[2], m);\n },\n\n /**\n * Efficiently post-concatenates a translation to the given matrix.\n * @param x\n * @param y\n * @param z\n * @param m\n */\n OLDtranslateMat4c(x, y, z, m) {\n\n const m12 = m[12];\n m[0] += m12 * x;\n m[4] += m12 * y;\n m[8] += m12 * z;\n\n const m13 = m[13];\n m[1] += m13 * x;\n m[5] += m13 * y;\n m[9] += m13 * z;\n\n const m14 = m[14];\n m[2] += m14 * x;\n m[6] += m14 * y;\n m[10] += m14 * z;\n\n const m15 = m[15];\n m[3] += m15 * x;\n m[7] += m15 * y;\n m[11] += m15 * z;\n\n return m;\n },\n\n translateMat4c(x, y, z, m) {\n\n const m3 = m[3];\n m[0] += m3 * x;\n m[1] += m3 * y;\n m[2] += m3 * z;\n\n const m7 = m[7];\n m[4] += m7 * x;\n m[5] += m7 * y;\n m[6] += m7 * z;\n\n const m11 = m[11];\n m[8] += m11 * x;\n m[9] += m11 * y;\n m[10] += m11 * z;\n\n const m15 = m[15];\n m[12] += m15 * x;\n m[13] += m15 * y;\n m[14] += m15 * z;\n\n return m;\n },\n /**\n * Returns 4x4 rotation matrix.\n * @method rotationMat4v\n * @static\n */\n rotationMat4v(anglerad, axis, m) {\n const ax = math.normalizeVec4([axis[0], axis[1], axis[2], 0.0], []);\n const s = Math.sin(anglerad);\n const c = Math.cos(anglerad);\n const q = 1.0 - c;\n\n const x = ax[0];\n const y = ax[1];\n const z = ax[2];\n\n let xy;\n let yz;\n let zx;\n let xs;\n let ys;\n let zs;\n\n //xx = x * x; used once\n //yy = y * y; used once\n //zz = z * z; used once\n xy = x * y;\n yz = y * z;\n zx = z * x;\n xs = x * s;\n ys = y * s;\n zs = z * s;\n\n m = m || math.mat4();\n\n m[0] = (q * x * x) + c;\n m[1] = (q * xy) + zs;\n m[2] = (q * zx) - ys;\n m[3] = 0.0;\n\n m[4] = (q * xy) - zs;\n m[5] = (q * y * y) + c;\n m[6] = (q * yz) + xs;\n m[7] = 0.0;\n\n m[8] = (q * zx) + ys;\n m[9] = (q * yz) - xs;\n m[10] = (q * z * z) + c;\n m[11] = 0.0;\n\n m[12] = 0.0;\n m[13] = 0.0;\n m[14] = 0.0;\n m[15] = 1.0;\n\n return m;\n },\n\n /**\n * Returns 4x4 rotation matrix.\n * @method rotationMat4c\n * @static\n */\n rotationMat4c(anglerad, x, y, z, mat) {\n return math.rotationMat4v(anglerad, [x, y, z], mat);\n },\n\n /**\n * Returns 4x4 scale matrix.\n * @method scalingMat4v\n * @static\n */\n scalingMat4v(v, m = math.identityMat4()) {\n m[0] = v[0];\n m[5] = v[1];\n m[10] = v[2];\n return m;\n },\n\n /**\n * Returns 3x3 scale matrix.\n * @method scalingMat3v\n * @static\n */\n scalingMat3v(v, m = math.identityMat3()) {\n m[0] = v[0];\n m[4] = v[1];\n return m;\n },\n\n /**\n * Returns 4x4 scale matrix.\n * @method scalingMat4c\n * @static\n */\n scalingMat4c: ((() => {\n const xyz = new FloatArrayType(3);\n return (x, y, z, dest) => {\n xyz[0] = x;\n xyz[1] = y;\n xyz[2] = z;\n return math.scalingMat4v(xyz, dest);\n };\n }))(),\n\n /**\n * Efficiently post-concatenates a scaling to the given matrix.\n * @method scaleMat4c\n * @param x\n * @param y\n * @param z\n * @param m\n */\n scaleMat4c(x, y, z, m) {\n\n m[0] *= x;\n m[4] *= y;\n m[8] *= z;\n\n m[1] *= x;\n m[5] *= y;\n m[9] *= z;\n\n m[2] *= x;\n m[6] *= y;\n m[10] *= z;\n\n m[3] *= x;\n m[7] *= y;\n m[11] *= z;\n return m;\n },\n\n /**\n * Efficiently post-concatenates a scaling to the given matrix.\n * @method scaleMat4c\n * @param xyz\n * @param m\n */\n scaleMat4v(xyz, m) {\n\n const x = xyz[0];\n const y = xyz[1];\n const z = xyz[2];\n\n m[0] *= x;\n m[4] *= y;\n m[8] *= z;\n m[1] *= x;\n m[5] *= y;\n m[9] *= z;\n m[2] *= x;\n m[6] *= y;\n m[10] *= z;\n m[3] *= x;\n m[7] *= y;\n m[11] *= z;\n\n return m;\n },\n\n /**\n * Returns 4x4 scale matrix.\n * @method scalingMat4s\n * @static\n */\n scalingMat4s(s) {\n return math.scalingMat4c(s, s, s);\n },\n\n /**\n * Creates a matrix from a quaternion rotation and vector translation\n *\n * @param {Number[]} q Rotation quaternion\n * @param {Number[]} v Translation vector\n * @param {Number[]} dest Destination matrix\n * @returns {Number[]} dest\n */\n rotationTranslationMat4(q, v, dest = math.mat4()) {\n const x = q[0];\n const y = q[1];\n const z = q[2];\n const w = q[3];\n\n const x2 = x + x;\n const y2 = y + y;\n const z2 = z + z;\n const xx = x * x2;\n const xy = x * y2;\n const xz = x * z2;\n const yy = y * y2;\n const yz = y * z2;\n const zz = z * z2;\n const wx = w * x2;\n const wy = w * y2;\n const wz = w * z2;\n\n dest[0] = 1 - (yy + zz);\n dest[1] = xy + wz;\n dest[2] = xz - wy;\n dest[3] = 0;\n dest[4] = xy - wz;\n dest[5] = 1 - (xx + zz);\n dest[6] = yz + wx;\n dest[7] = 0;\n dest[8] = xz + wy;\n dest[9] = yz - wx;\n dest[10] = 1 - (xx + yy);\n dest[11] = 0;\n dest[12] = v[0];\n dest[13] = v[1];\n dest[14] = v[2];\n dest[15] = 1;\n\n return dest;\n },\n\n /**\n * Gets Euler angles from a 4x4 matrix.\n *\n * @param {Number[]} mat The 4x4 matrix.\n * @param {String} order Desired Euler angle order: \"XYZ\", \"YXZ\", \"ZXY\" etc.\n * @param {Number[]} [dest] Destination Euler angles, created by default.\n * @returns {Number[]} The Euler angles.\n */\n mat4ToEuler(mat, order, dest = math.vec4()) {\n const clamp = math.clamp;\n\n // Assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled)\n\n const m11 = mat[0];\n\n const m12 = mat[4];\n const m13 = mat[8];\n const m21 = mat[1];\n const m22 = mat[5];\n const m23 = mat[9];\n const m31 = mat[2];\n const m32 = mat[6];\n const m33 = mat[10];\n\n if (order === 'XYZ') {\n\n dest[1] = Math.asin(clamp(m13, -1, 1));\n\n if (Math.abs(m13) < 0.99999) {\n dest[0] = Math.atan2(-m23, m33);\n dest[2] = Math.atan2(-m12, m11);\n } else {\n dest[0] = Math.atan2(m32, m22);\n dest[2] = 0;\n\n }\n\n } else if (order === 'YXZ') {\n\n dest[0] = Math.asin(-clamp(m23, -1, 1));\n\n if (Math.abs(m23) < 0.99999) {\n dest[1] = Math.atan2(m13, m33);\n dest[2] = Math.atan2(m21, m22);\n } else {\n dest[1] = Math.atan2(-m31, m11);\n dest[2] = 0;\n }\n\n } else if (order === 'ZXY') {\n\n dest[0] = Math.asin(clamp(m32, -1, 1));\n\n if (Math.abs(m32) < 0.99999) {\n dest[1] = Math.atan2(-m31, m33);\n dest[2] = Math.atan2(-m12, m22);\n } else {\n dest[1] = 0;\n dest[2] = Math.atan2(m21, m11);\n }\n\n } else if (order === 'ZYX') {\n\n dest[1] = Math.asin(-clamp(m31, -1, 1));\n\n if (Math.abs(m31) < 0.99999) {\n dest[0] = Math.atan2(m32, m33);\n dest[2] = Math.atan2(m21, m11);\n } else {\n dest[0] = 0;\n dest[2] = Math.atan2(-m12, m22);\n }\n\n } else if (order === 'YZX') {\n\n dest[2] = Math.asin(clamp(m21, -1, 1));\n\n if (Math.abs(m21) < 0.99999) {\n dest[0] = Math.atan2(-m23, m22);\n dest[1] = Math.atan2(-m31, m11);\n } else {\n dest[0] = 0;\n dest[1] = Math.atan2(m13, m33);\n }\n\n } else if (order === 'XZY') {\n\n dest[2] = Math.asin(-clamp(m12, -1, 1));\n\n if (Math.abs(m12) < 0.99999) {\n dest[0] = Math.atan2(m32, m22);\n dest[1] = Math.atan2(m13, m11);\n } else {\n dest[0] = Math.atan2(-m23, m33);\n dest[1] = 0;\n }\n }\n\n return dest;\n },\n\n composeMat4(position, quaternion, scale, mat = math.mat4()) {\n math.quaternionToRotationMat4(quaternion, mat);\n math.scaleMat4v(scale, mat);\n math.translateMat4v(position, mat);\n\n return mat;\n },\n\n decomposeMat4: (() => {\n\n const vec = new FloatArrayType(3);\n const matrix = new FloatArrayType(16);\n\n return function decompose(mat, position, quaternion, scale) {\n\n vec[0] = mat[0];\n vec[1] = mat[1];\n vec[2] = mat[2];\n\n let sx = math.lenVec3(vec);\n\n vec[0] = mat[4];\n vec[1] = mat[5];\n vec[2] = mat[6];\n\n const sy = math.lenVec3(vec);\n\n vec[8] = mat[8];\n vec[9] = mat[9];\n vec[10] = mat[10];\n\n const sz = math.lenVec3(vec);\n\n // if determine is negative, we need to invert one scale\n const det = math.determinantMat4(mat);\n\n if (det < 0) {\n sx = -sx;\n }\n\n position[0] = mat[12];\n position[1] = mat[13];\n position[2] = mat[14];\n\n // scale the rotation part\n matrix.set(mat);\n\n const invSX = 1 / sx;\n const invSY = 1 / sy;\n const invSZ = 1 / sz;\n\n matrix[0] *= invSX;\n matrix[1] *= invSX;\n matrix[2] *= invSX;\n\n matrix[4] *= invSY;\n matrix[5] *= invSY;\n matrix[6] *= invSY;\n\n matrix[8] *= invSZ;\n matrix[9] *= invSZ;\n matrix[10] *= invSZ;\n\n math.mat4ToQuaternion(matrix, quaternion);\n\n scale[0] = sx;\n scale[1] = sy;\n scale[2] = sz;\n\n return this;\n\n };\n\n })(),\n\n /**\n * Returns a 4x4 'lookat' viewing transform matrix.\n * @method lookAtMat4v\n * @param pos vec3 position of the viewer\n * @param target vec3 point the viewer is looking at\n * @param up vec3 pointing \"up\"\n * @param dest mat4 Optional, mat4 matrix will be written into\n *\n * @return {mat4} dest if specified, a new mat4 otherwise\n */\n lookAtMat4v(pos, target, up, dest) {\n if (!dest) {\n dest = math.mat4();\n }\n\n const posx = pos[0];\n const posy = pos[1];\n const posz = pos[2];\n const upx = up[0];\n const upy = up[1];\n const upz = up[2];\n const targetx = target[0];\n const targety = target[1];\n const targetz = target[2];\n\n if (posx === targetx && posy === targety && posz === targetz) {\n return math.identityMat4();\n }\n\n let z0;\n let z1;\n let z2;\n let x0;\n let x1;\n let x2;\n let y0;\n let y1;\n let y2;\n let len;\n\n //vec3.direction(eye, center, z);\n z0 = posx - targetx;\n z1 = posy - targety;\n z2 = posz - targetz;\n\n // normalize (no check needed for 0 because of early return)\n len = 1 / Math.sqrt(z0 * z0 + z1 * z1 + z2 * z2);\n z0 *= len;\n z1 *= len;\n z2 *= len;\n\n //vec3.normalize(vec3.cross(up, z, x));\n x0 = upy * z2 - upz * z1;\n x1 = upz * z0 - upx * z2;\n x2 = upx * z1 - upy * z0;\n len = Math.sqrt(x0 * x0 + x1 * x1 + x2 * x2);\n if (!len) {\n x0 = 0;\n x1 = 0;\n x2 = 0;\n } else {\n len = 1 / len;\n x0 *= len;\n x1 *= len;\n x2 *= len;\n }\n\n //vec3.normalize(vec3.cross(z, x, y));\n y0 = z1 * x2 - z2 * x1;\n y1 = z2 * x0 - z0 * x2;\n y2 = z0 * x1 - z1 * x0;\n\n len = Math.sqrt(y0 * y0 + y1 * y1 + y2 * y2);\n if (!len) {\n y0 = 0;\n y1 = 0;\n y2 = 0;\n } else {\n len = 1 / len;\n y0 *= len;\n y1 *= len;\n y2 *= len;\n }\n\n dest[0] = x0;\n dest[1] = y0;\n dest[2] = z0;\n dest[3] = 0;\n dest[4] = x1;\n dest[5] = y1;\n dest[6] = z1;\n dest[7] = 0;\n dest[8] = x2;\n dest[9] = y2;\n dest[10] = z2;\n dest[11] = 0;\n dest[12] = -(x0 * posx + x1 * posy + x2 * posz);\n dest[13] = -(y0 * posx + y1 * posy + y2 * posz);\n dest[14] = -(z0 * posx + z1 * posy + z2 * posz);\n dest[15] = 1;\n\n return dest;\n },\n\n /**\n * Returns a 4x4 'lookat' viewing transform matrix.\n * @method lookAtMat4c\n * @static\n */\n lookAtMat4c(posx, posy, posz, targetx, targety, targetz, upx, upy, upz) {\n return math.lookAtMat4v([posx, posy, posz], [targetx, targety, targetz], [upx, upy, upz], []);\n },\n\n /**\n * Returns a 4x4 orthographic projection matrix.\n * @method orthoMat4c\n * @static\n */\n orthoMat4c(left, right, bottom, top, near, far, dest) {\n if (!dest) {\n dest = math.mat4();\n }\n const rl = (right - left);\n const tb = (top - bottom);\n const fn = (far - near);\n\n dest[0] = 2.0 / rl;\n dest[1] = 0.0;\n dest[2] = 0.0;\n dest[3] = 0.0;\n\n dest[4] = 0.0;\n dest[5] = 2.0 / tb;\n dest[6] = 0.0;\n dest[7] = 0.0;\n\n dest[8] = 0.0;\n dest[9] = 0.0;\n dest[10] = -2.0 / fn;\n dest[11] = 0.0;\n\n dest[12] = -(left + right) / rl;\n dest[13] = -(top + bottom) / tb;\n dest[14] = -(far + near) / fn;\n dest[15] = 1.0;\n\n return dest;\n },\n\n /**\n * Returns a 4x4 perspective projection matrix.\n * @method frustumMat4v\n * @static\n */\n frustumMat4v(fmin, fmax, m) {\n if (!m) {\n m = math.mat4();\n }\n\n const fmin4 = [fmin[0], fmin[1], fmin[2], 0.0];\n const fmax4 = [fmax[0], fmax[1], fmax[2], 0.0];\n\n math.addVec4(fmax4, fmin4, tempMat1);\n math.subVec4(fmax4, fmin4, tempMat2);\n\n const t = 2.0 * fmin4[2];\n\n const tempMat20 = tempMat2[0];\n const tempMat21 = tempMat2[1];\n const tempMat22 = tempMat2[2];\n\n m[0] = t / tempMat20;\n m[1] = 0.0;\n m[2] = 0.0;\n m[3] = 0.0;\n\n m[4] = 0.0;\n m[5] = t / tempMat21;\n m[6] = 0.0;\n m[7] = 0.0;\n\n m[8] = tempMat1[0] / tempMat20;\n m[9] = tempMat1[1] / tempMat21;\n m[10] = -tempMat1[2] / tempMat22;\n m[11] = -1.0;\n\n m[12] = 0.0;\n m[13] = 0.0;\n m[14] = -t * fmax4[2] / tempMat22;\n m[15] = 0.0;\n\n return m;\n },\n\n /**\n * Returns a 4x4 perspective projection matrix.\n * @method frustumMat4v\n * @static\n */\n frustumMat4(left, right, bottom, top, near, far, dest) {\n if (!dest) {\n dest = math.mat4();\n }\n const rl = (right - left);\n const tb = (top - bottom);\n const fn = (far - near);\n dest[0] = (near * 2) / rl;\n dest[1] = 0;\n dest[2] = 0;\n dest[3] = 0;\n dest[4] = 0;\n dest[5] = (near * 2) / tb;\n dest[6] = 0;\n dest[7] = 0;\n dest[8] = (right + left) / rl;\n dest[9] = (top + bottom) / tb;\n dest[10] = -(far + near) / fn;\n dest[11] = -1;\n dest[12] = 0;\n dest[13] = 0;\n dest[14] = -(far * near * 2) / fn;\n dest[15] = 0;\n return dest;\n },\n\n /**\n * Returns a 4x4 perspective projection matrix.\n * @method perspectiveMat4v\n * @static\n */\n perspectiveMat4(fovyrad, aspectratio, znear, zfar, m) {\n const pmin = [];\n const pmax = [];\n\n pmin[2] = znear;\n pmax[2] = zfar;\n\n pmax[1] = pmin[2] * Math.tan(fovyrad / 2.0);\n pmin[1] = -pmax[1];\n\n pmax[0] = pmax[1] * aspectratio;\n pmin[0] = -pmax[0];\n\n return math.frustumMat4v(pmin, pmax, m);\n },\n\n /**\n * Transforms a three-element position by a 4x4 matrix.\n * @method transformPoint3\n * @static\n */\n transformPoint3(m, p, dest = math.vec3()) {\n\n const x = p[0];\n const y = p[1];\n const z = p[2];\n\n dest[0] = (m[0] * x) + (m[4] * y) + (m[8] * z) + m[12];\n dest[1] = (m[1] * x) + (m[5] * y) + (m[9] * z) + m[13];\n dest[2] = (m[2] * x) + (m[6] * y) + (m[10] * z) + m[14];\n\n return dest;\n },\n\n /**\n * Transforms a homogeneous coordinate by a 4x4 matrix.\n * @method transformPoint3\n * @static\n */\n transformPoint4(m, v, dest = math.vec4()) {\n dest[0] = m[0] * v[0] + m[4] * v[1] + m[8] * v[2] + m[12] * v[3];\n dest[1] = m[1] * v[0] + m[5] * v[1] + m[9] * v[2] + m[13] * v[3];\n dest[2] = m[2] * v[0] + m[6] * v[1] + m[10] * v[2] + m[14] * v[3];\n dest[3] = m[3] * v[0] + m[7] * v[1] + m[11] * v[2] + m[15] * v[3];\n\n return dest;\n },\n\n\n /**\n * Transforms an array of three-element positions by a 4x4 matrix.\n * @method transformPoints3\n * @static\n */\n transformPoints3(m, points, points2) {\n const result = points2 || [];\n const len = points.length;\n let p0;\n let p1;\n let p2;\n let pi;\n\n // cache values\n const m0 = m[0];\n\n const m1 = m[1];\n const m2 = m[2];\n const m3 = m[3];\n const m4 = m[4];\n const m5 = m[5];\n const m6 = m[6];\n const m7 = m[7];\n const m8 = m[8];\n const m9 = m[9];\n const m10 = m[10];\n const m11 = m[11];\n const m12 = m[12];\n const m13 = m[13];\n const m14 = m[14];\n const m15 = m[15];\n\n let r;\n\n for (let i = 0; i < len; ++i) {\n\n // cache values\n pi = points[i];\n\n p0 = pi[0];\n p1 = pi[1];\n p2 = pi[2];\n\n r = result[i] || (result[i] = [0, 0, 0]);\n\n r[0] = (m0 * p0) + (m4 * p1) + (m8 * p2) + m12;\n r[1] = (m1 * p0) + (m5 * p1) + (m9 * p2) + m13;\n r[2] = (m2 * p0) + (m6 * p1) + (m10 * p2) + m14;\n r[3] = (m3 * p0) + (m7 * p1) + (m11 * p2) + m15;\n }\n\n result.length = len;\n\n return result;\n },\n\n /**\n * Transforms an array of positions by a 4x4 matrix.\n * @method transformPositions3\n * @static\n */\n transformPositions3(m, p, p2 = p) {\n let i;\n const len = p.length;\n\n let x;\n let y;\n let z;\n\n const m0 = m[0];\n const m1 = m[1];\n const m2 = m[2];\n const m3 = m[3];\n const m4 = m[4];\n const m5 = m[5];\n const m6 = m[6];\n const m7 = m[7];\n const m8 = m[8];\n const m9 = m[9];\n const m10 = m[10];\n const m11 = m[11];\n const m12 = m[12];\n const m13 = m[13];\n const m14 = m[14];\n const m15 = m[15];\n\n for (i = 0; i < len; i += 3) {\n\n x = p[i + 0];\n y = p[i + 1];\n z = p[i + 2];\n\n p2[i + 0] = (m0 * x) + (m4 * y) + (m8 * z) + m12;\n p2[i + 1] = (m1 * x) + (m5 * y) + (m9 * z) + m13;\n p2[i + 2] = (m2 * x) + (m6 * y) + (m10 * z) + m14;\n p2[i + 3] = (m3 * x) + (m7 * y) + (m11 * z) + m15;\n }\n\n return p2;\n },\n\n /**\n * Transforms an array of positions by a 4x4 matrix.\n * @method transformPositions4\n * @static\n */\n transformPositions4(m, p, p2 = p) {\n let i;\n const len = p.length;\n\n let x;\n let y;\n let z;\n\n const m0 = m[0];\n const m1 = m[1];\n const m2 = m[2];\n const m3 = m[3];\n const m4 = m[4];\n const m5 = m[5];\n const m6 = m[6];\n const m7 = m[7];\n const m8 = m[8];\n const m9 = m[9];\n const m10 = m[10];\n const m11 = m[11];\n const m12 = m[12];\n const m13 = m[13];\n const m14 = m[14];\n const m15 = m[15];\n\n for (i = 0; i < len; i += 4) {\n\n x = p[i + 0];\n y = p[i + 1];\n z = p[i + 2];\n\n p2[i + 0] = (m0 * x) + (m4 * y) + (m8 * z) + m12;\n p2[i + 1] = (m1 * x) + (m5 * y) + (m9 * z) + m13;\n p2[i + 2] = (m2 * x) + (m6 * y) + (m10 * z) + m14;\n p2[i + 3] = (m3 * x) + (m7 * y) + (m11 * z) + m15;\n }\n\n return p2;\n },\n\n /**\n * Transforms a three-element vector by a 4x4 matrix.\n * @method transformVec3\n * @static\n */\n transformVec3(m, v, dest) {\n const v0 = v[0];\n const v1 = v[1];\n const v2 = v[2];\n dest = dest || this.vec3();\n dest[0] = (m[0] * v0) + (m[4] * v1) + (m[8] * v2);\n dest[1] = (m[1] * v0) + (m[5] * v1) + (m[9] * v2);\n dest[2] = (m[2] * v0) + (m[6] * v1) + (m[10] * v2);\n return dest;\n },\n\n /**\n * Transforms a four-element vector by a 4x4 matrix.\n * @method transformVec4\n * @static\n */\n transformVec4(m, v, dest) {\n const v0 = v[0];\n const v1 = v[1];\n const v2 = v[2];\n const v3 = v[3];\n dest = dest || math.vec4();\n dest[0] = m[0] * v0 + m[4] * v1 + m[8] * v2 + m[12] * v3;\n dest[1] = m[1] * v0 + m[5] * v1 + m[9] * v2 + m[13] * v3;\n dest[2] = m[2] * v0 + m[6] * v1 + m[10] * v2 + m[14] * v3;\n dest[3] = m[3] * v0 + m[7] * v1 + m[11] * v2 + m[15] * v3;\n return dest;\n },\n\n /**\n * Rotate a 3D vector around the x-axis\n *\n * @method rotateVec3X\n * @param {Number[]} a The vec3 point to rotate\n * @param {Number[]} b The origin of the rotation\n * @param {Number} c The angle of rotation\n * @param {Number[]} dest The receiving vec3\n * @returns {Number[]} dest\n * @static\n */\n rotateVec3X(a, b, c, dest) {\n const p = [];\n const r = [];\n\n //Translate point to the origin\n p[0] = a[0] - b[0];\n p[1] = a[1] - b[1];\n p[2] = a[2] - b[2];\n\n //perform rotation\n r[0] = p[0];\n r[1] = p[1] * Math.cos(c) - p[2] * Math.sin(c);\n r[2] = p[1] * Math.sin(c) + p[2] * Math.cos(c);\n\n //translate to correct position\n dest[0] = r[0] + b[0];\n dest[1] = r[1] + b[1];\n dest[2] = r[2] + b[2];\n\n return dest;\n },\n\n /**\n * Rotate a 3D vector around the y-axis\n *\n * @method rotateVec3Y\n * @param {Number[]} a The vec3 point to rotate\n * @param {Number[]} b The origin of the rotation\n * @param {Number} c The angle of rotation\n * @param {Number[]} dest The receiving vec3\n * @returns {Number[]} dest\n * @static\n */\n rotateVec3Y(a, b, c, dest) {\n const p = [];\n const r = [];\n\n //Translate point to the origin\n p[0] = a[0] - b[0];\n p[1] = a[1] - b[1];\n p[2] = a[2] - b[2];\n\n //perform rotation\n r[0] = p[2] * Math.sin(c) + p[0] * Math.cos(c);\n r[1] = p[1];\n r[2] = p[2] * Math.cos(c) - p[0] * Math.sin(c);\n\n //translate to correct position\n dest[0] = r[0] + b[0];\n dest[1] = r[1] + b[1];\n dest[2] = r[2] + b[2];\n\n return dest;\n },\n\n /**\n * Rotate a 3D vector around the z-axis\n *\n * @method rotateVec3Z\n * @param {Number[]} a The vec3 point to rotate\n * @param {Number[]} b The origin of the rotation\n * @param {Number} c The angle of rotation\n * @param {Number[]} dest The receiving vec3\n * @returns {Number[]} dest\n * @static\n */\n rotateVec3Z(a, b, c, dest) {\n const p = [];\n const r = [];\n\n //Translate point to the origin\n p[0] = a[0] - b[0];\n p[1] = a[1] - b[1];\n p[2] = a[2] - b[2];\n\n //perform rotation\n r[0] = p[0] * Math.cos(c) - p[1] * Math.sin(c);\n r[1] = p[0] * Math.sin(c) + p[1] * Math.cos(c);\n r[2] = p[2];\n\n //translate to correct position\n dest[0] = r[0] + b[0];\n dest[1] = r[1] + b[1];\n dest[2] = r[2] + b[2];\n\n return dest;\n },\n\n /**\n * Transforms a four-element vector by a 4x4 projection matrix.\n *\n * @method projectVec4\n * @param {Number[]} p 3D View-space coordinate\n * @param {Number[]} q 2D Projected coordinate\n * @returns {Number[]} 2D Projected coordinate\n * @static\n */\n projectVec4(p, q) {\n const f = 1.0 / p[3];\n q = q || math.vec2();\n q[0] = v[0] * f;\n q[1] = v[1] * f;\n return q;\n },\n\n /**\n * Unprojects a three-element vector.\n *\n * @method unprojectVec3\n * @param {Number[]} p 3D Projected coordinate\n * @param {Number[]} viewMat View matrix\n * @returns {Number[]} projMat Projection matrix\n * @static\n */\n unprojectVec3: ((() => {\n const mat = new FloatArrayType(16);\n const mat2 = new FloatArrayType(16);\n const mat3 = new FloatArrayType(16);\n return function (p, viewMat, projMat, q) {\n return this.transformVec3(this.mulMat4(this.inverseMat4(viewMat, mat), this.inverseMat4(projMat, mat2), mat3), p, q)\n };\n }))(),\n\n /**\n * Linearly interpolates between two 3D vectors.\n * @method lerpVec3\n * @static\n */\n lerpVec3(t, t1, t2, p1, p2, dest) {\n const result = dest || math.vec3();\n const f = (t - t1) / (t2 - t1);\n result[0] = p1[0] + (f * (p2[0] - p1[0]));\n result[1] = p1[1] + (f * (p2[1] - p1[1]));\n result[2] = p1[2] + (f * (p2[2] - p1[2]));\n return result;\n },\n\n\n /**\n * Flattens a two-dimensional array into a one-dimensional array.\n *\n * @method flatten\n * @static\n * @param {Array of Arrays} a A 2D array\n * @returns Flattened 1D array\n */\n flatten(a) {\n\n const result = [];\n\n let i;\n let leni;\n let j;\n let lenj;\n let item;\n\n for (i = 0, leni = a.length; i < leni; i++) {\n item = a[i];\n for (j = 0, lenj = item.length; j < lenj; j++) {\n result.push(item[j]);\n }\n }\n\n return result;\n },\n\n\n identityQuaternion(dest = math.vec4()) {\n dest[0] = 0.0;\n dest[1] = 0.0;\n dest[2] = 0.0;\n dest[3] = 1.0;\n return dest;\n },\n\n /**\n * Initializes a quaternion from Euler angles.\n *\n * @param {Number[]} euler The Euler angles.\n * @param {String} order Euler angle order: \"XYZ\", \"YXZ\", \"ZXY\" etc.\n * @param {Number[]} [dest] Destination quaternion, created by default.\n * @returns {Number[]} The quaternion.\n */\n eulerToQuaternion(euler, order, dest = math.vec4()) {\n // http://www.mathworks.com/matlabcentral/fileexchange/\n // \t20696-function-to-convert-between-dcm-euler-angles-quaternions-and-euler-vectors/\n //\tcontent/SpinCalc.m\n\n const a = (euler[0] * math.DEGTORAD) / 2;\n const b = (euler[1] * math.DEGTORAD) / 2;\n const c = (euler[2] * math.DEGTORAD) / 2;\n\n const c1 = Math.cos(a);\n const c2 = Math.cos(b);\n const c3 = Math.cos(c);\n const s1 = Math.sin(a);\n const s2 = Math.sin(b);\n const s3 = Math.sin(c);\n\n if (order === 'XYZ') {\n\n dest[0] = s1 * c2 * c3 + c1 * s2 * s3;\n dest[1] = c1 * s2 * c3 - s1 * c2 * s3;\n dest[2] = c1 * c2 * s3 + s1 * s2 * c3;\n dest[3] = c1 * c2 * c3 - s1 * s2 * s3;\n\n } else if (order === 'YXZ') {\n\n dest[0] = s1 * c2 * c3 + c1 * s2 * s3;\n dest[1] = c1 * s2 * c3 - s1 * c2 * s3;\n dest[2] = c1 * c2 * s3 - s1 * s2 * c3;\n dest[3] = c1 * c2 * c3 + s1 * s2 * s3;\n\n } else if (order === 'ZXY') {\n\n dest[0] = s1 * c2 * c3 - c1 * s2 * s3;\n dest[1] = c1 * s2 * c3 + s1 * c2 * s3;\n dest[2] = c1 * c2 * s3 + s1 * s2 * c3;\n dest[3] = c1 * c2 * c3 - s1 * s2 * s3;\n\n } else if (order === 'ZYX') {\n\n dest[0] = s1 * c2 * c3 - c1 * s2 * s3;\n dest[1] = c1 * s2 * c3 + s1 * c2 * s3;\n dest[2] = c1 * c2 * s3 - s1 * s2 * c3;\n dest[3] = c1 * c2 * c3 + s1 * s2 * s3;\n\n } else if (order === 'YZX') {\n\n dest[0] = s1 * c2 * c3 + c1 * s2 * s3;\n dest[1] = c1 * s2 * c3 + s1 * c2 * s3;\n dest[2] = c1 * c2 * s3 - s1 * s2 * c3;\n dest[3] = c1 * c2 * c3 - s1 * s2 * s3;\n\n } else if (order === 'XZY') {\n\n dest[0] = s1 * c2 * c3 - c1 * s2 * s3;\n dest[1] = c1 * s2 * c3 - s1 * c2 * s3;\n dest[2] = c1 * c2 * s3 + s1 * s2 * c3;\n dest[3] = c1 * c2 * c3 + s1 * s2 * s3;\n }\n\n return dest;\n },\n\n mat4ToQuaternion(m, dest = math.vec4()) {\n // http://www.euclideanspace.com/maths/geometry/rotations/conversions/matrixToQuaternion/index.htm\n\n // Assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled)\n\n const m11 = m[0];\n const m12 = m[4];\n const m13 = m[8];\n const m21 = m[1];\n const m22 = m[5];\n const m23 = m[9];\n const m31 = m[2];\n const m32 = m[6];\n const m33 = m[10];\n let s;\n\n const trace = m11 + m22 + m33;\n\n if (trace > 0) {\n\n s = 0.5 / Math.sqrt(trace + 1.0);\n\n dest[3] = 0.25 / s;\n dest[0] = (m32 - m23) * s;\n dest[1] = (m13 - m31) * s;\n dest[2] = (m21 - m12) * s;\n\n } else if (m11 > m22 && m11 > m33) {\n\n s = 2.0 * Math.sqrt(1.0 + m11 - m22 - m33);\n\n dest[3] = (m32 - m23) / s;\n dest[0] = 0.25 * s;\n dest[1] = (m12 + m21) / s;\n dest[2] = (m13 + m31) / s;\n\n } else if (m22 > m33) {\n\n s = 2.0 * Math.sqrt(1.0 + m22 - m11 - m33);\n\n dest[3] = (m13 - m31) / s;\n dest[0] = (m12 + m21) / s;\n dest[1] = 0.25 * s;\n dest[2] = (m23 + m32) / s;\n\n } else {\n\n s = 2.0 * Math.sqrt(1.0 + m33 - m11 - m22);\n\n dest[3] = (m21 - m12) / s;\n dest[0] = (m13 + m31) / s;\n dest[1] = (m23 + m32) / s;\n dest[2] = 0.25 * s;\n }\n\n return dest;\n },\n\n vec3PairToQuaternion(u, v, dest = math.vec4()) {\n const norm_u_norm_v = Math.sqrt(math.dotVec3(u, u) * math.dotVec3(v, v));\n let real_part = norm_u_norm_v + math.dotVec3(u, v);\n\n if (real_part < 0.00000001 * norm_u_norm_v) {\n\n // If u and v are exactly opposite, rotate 180 degrees\n // around an arbitrary orthogonal axis. Axis normalisation\n // can happen later, when we normalise the quaternion.\n\n real_part = 0.0;\n\n if (Math.abs(u[0]) > Math.abs(u[2])) {\n\n dest[0] = -u[1];\n dest[1] = u[0];\n dest[2] = 0;\n\n } else {\n dest[0] = 0;\n dest[1] = -u[2];\n dest[2] = u[1]\n }\n\n } else {\n\n // Otherwise, build quaternion the standard way.\n math.cross3Vec3(u, v, dest);\n }\n\n dest[3] = real_part;\n\n return math.normalizeQuaternion(dest);\n },\n\n angleAxisToQuaternion(angleAxis, dest = math.vec4()) {\n const halfAngle = angleAxis[3] / 2.0;\n const fsin = Math.sin(halfAngle);\n dest[0] = fsin * angleAxis[0];\n dest[1] = fsin * angleAxis[1];\n dest[2] = fsin * angleAxis[2];\n dest[3] = Math.cos(halfAngle);\n return dest;\n },\n\n quaternionToEuler: ((() => {\n const mat = new FloatArrayType(16);\n return (q, order, dest) => {\n dest = dest || math.vec3();\n math.quaternionToRotationMat4(q, mat);\n math.mat4ToEuler(mat, order, dest);\n return dest;\n };\n }))(),\n\n mulQuaternions(p, q, dest = math.vec4()) {\n const p0 = p[0];\n const p1 = p[1];\n const p2 = p[2];\n const p3 = p[3];\n const q0 = q[0];\n const q1 = q[1];\n const q2 = q[2];\n const q3 = q[3];\n dest[0] = p3 * q0 + p0 * q3 + p1 * q2 - p2 * q1;\n dest[1] = p3 * q1 + p1 * q3 + p2 * q0 - p0 * q2;\n dest[2] = p3 * q2 + p2 * q3 + p0 * q1 - p1 * q0;\n dest[3] = p3 * q3 - p0 * q0 - p1 * q1 - p2 * q2;\n return dest;\n },\n\n vec3ApplyQuaternion(q, vec, dest = math.vec3()) {\n const x = vec[0];\n const y = vec[1];\n const z = vec[2];\n\n const qx = q[0];\n const qy = q[1];\n const qz = q[2];\n const qw = q[3];\n\n // calculate quat * vector\n\n const ix = qw * x + qy * z - qz * y;\n const iy = qw * y + qz * x - qx * z;\n const iz = qw * z + qx * y - qy * x;\n const iw = -qx * x - qy * y - qz * z;\n\n // calculate result * inverse quat\n\n dest[0] = ix * qw + iw * -qx + iy * -qz - iz * -qy;\n dest[1] = iy * qw + iw * -qy + iz * -qx - ix * -qz;\n dest[2] = iz * qw + iw * -qz + ix * -qy - iy * -qx;\n\n return dest;\n },\n\n quaternionToMat4(q, dest) {\n\n dest = math.identityMat4(dest);\n\n const q0 = q[0]; //x\n const q1 = q[1]; //y\n const q2 = q[2]; //z\n const q3 = q[3]; //w\n\n const tx = 2.0 * q0;\n const ty = 2.0 * q1;\n const tz = 2.0 * q2;\n\n const twx = tx * q3;\n const twy = ty * q3;\n const twz = tz * q3;\n\n const txx = tx * q0;\n const txy = ty * q0;\n const txz = tz * q0;\n\n const tyy = ty * q1;\n const tyz = tz * q1;\n const tzz = tz * q2;\n\n dest[0] = 1.0 - (tyy + tzz);\n dest[1] = txy + twz;\n dest[2] = txz - twy;\n\n dest[4] = txy - twz;\n dest[5] = 1.0 - (txx + tzz);\n dest[6] = tyz + twx;\n\n dest[8] = txz + twy;\n dest[9] = tyz - twx;\n\n dest[10] = 1.0 - (txx + tyy);\n\n return dest;\n },\n\n quaternionToRotationMat4(q, m) {\n const x = q[0];\n const y = q[1];\n const z = q[2];\n const w = q[3];\n\n const x2 = x + x;\n const y2 = y + y;\n const z2 = z + z;\n const xx = x * x2;\n const xy = x * y2;\n const xz = x * z2;\n const yy = y * y2;\n const yz = y * z2;\n const zz = z * z2;\n const wx = w * x2;\n const wy = w * y2;\n const wz = w * z2;\n\n m[0] = 1 - (yy + zz);\n m[4] = xy - wz;\n m[8] = xz + wy;\n\n m[1] = xy + wz;\n m[5] = 1 - (xx + zz);\n m[9] = yz - wx;\n\n m[2] = xz - wy;\n m[6] = yz + wx;\n m[10] = 1 - (xx + yy);\n\n // last column\n m[3] = 0;\n m[7] = 0;\n m[11] = 0;\n\n // bottom row\n m[12] = 0;\n m[13] = 0;\n m[14] = 0;\n m[15] = 1;\n\n return m;\n },\n\n normalizeQuaternion(q, dest = q) {\n const len = math.lenVec4([q[0], q[1], q[2], q[3]]);\n dest[0] = q[0] / len;\n dest[1] = q[1] / len;\n dest[2] = q[2] / len;\n dest[3] = q[3] / len;\n return dest;\n },\n\n conjugateQuaternion(q, dest = q) {\n dest[0] = -q[0];\n dest[1] = -q[1];\n dest[2] = -q[2];\n dest[3] = q[3];\n return dest;\n },\n\n inverseQuaternion(q, dest) {\n return math.normalizeQuaternion(math.conjugateQuaternion(q, dest));\n },\n\n quaternionToAngleAxis(q, angleAxis = math.vec4()) {\n q = math.normalizeQuaternion(q, tempVec4);\n const q3 = q[3];\n const angle = 2 * Math.acos(q3);\n const s = Math.sqrt(1 - q3 * q3);\n if (s < 0.001) { // test to avoid divide by zero, s is always positive due to sqrt\n angleAxis[0] = q[0];\n angleAxis[1] = q[1];\n angleAxis[2] = q[2];\n } else {\n angleAxis[0] = q[0] / s;\n angleAxis[1] = q[1] / s;\n angleAxis[2] = q[2] / s;\n }\n angleAxis[3] = angle; // * 57.295779579;\n return angleAxis;\n },\n\n //------------------------------------------------------------------------------------------------------------------\n // Boundaries\n //------------------------------------------------------------------------------------------------------------------\n\n /**\n * Returns a new, uninitialized 3D axis-aligned bounding box.\n *\n * @private\n */\n AABB3(values) {\n return new FloatArrayType(values || 6);\n },\n\n /**\n * Returns a new, uninitialized 2D axis-aligned bounding box.\n *\n * @private\n */\n AABB2(values) {\n return new FloatArrayType(values || 4);\n },\n\n /**\n * Returns a new, uninitialized 3D oriented bounding box (OBB).\n *\n * @private\n */\n OBB3(values) {\n return new FloatArrayType(values || 32);\n },\n\n /**\n * Returns a new, uninitialized 2D oriented bounding box (OBB).\n *\n * @private\n */\n OBB2(values) {\n return new FloatArrayType(values || 16);\n },\n\n /** Returns a new 3D bounding sphere */\n Sphere3(x, y, z, r) {\n return new FloatArrayType([x, y, z, r]);\n },\n\n /**\n * Transforms an OBB3 by a 4x4 matrix.\n *\n * @private\n */\n transformOBB3(m, p, p2 = p) {\n let i;\n const len = p.length;\n\n let x;\n let y;\n let z;\n\n const m0 = m[0];\n const m1 = m[1];\n const m2 = m[2];\n const m3 = m[3];\n const m4 = m[4];\n const m5 = m[5];\n const m6 = m[6];\n const m7 = m[7];\n const m8 = m[8];\n const m9 = m[9];\n const m10 = m[10];\n const m11 = m[11];\n const m12 = m[12];\n const m13 = m[13];\n const m14 = m[14];\n const m15 = m[15];\n\n for (i = 0; i < len; i += 4) {\n\n x = p[i + 0];\n y = p[i + 1];\n z = p[i + 2];\n\n p2[i + 0] = (m0 * x) + (m4 * y) + (m8 * z) + m12;\n p2[i + 1] = (m1 * x) + (m5 * y) + (m9 * z) + m13;\n p2[i + 2] = (m2 * x) + (m6 * y) + (m10 * z) + m14;\n p2[i + 3] = (m3 * x) + (m7 * y) + (m11 * z) + m15;\n }\n\n return p2;\n },\n\n /** Returns true if the first AABB contains the second AABB.\n * @param aabb1\n * @param aabb2\n * @returns {boolean}\n */\n containsAABB3: function (aabb1, aabb2) {\n const result = (\n aabb1[0] <= aabb2[0] && aabb2[3] <= aabb1[3] &&\n aabb1[1] <= aabb2[1] && aabb2[4] <= aabb1[4] &&\n aabb1[2] <= aabb2[2] && aabb2[5] <= aabb1[5]);\n return result;\n },\n\n /**\n * Gets the diagonal size of an AABB3 given as minima and maxima.\n *\n * @private\n */\n getAABB3Diag: ((() => {\n\n const min = new FloatArrayType(3);\n const max = new FloatArrayType(3);\n const tempVec3 = new FloatArrayType(3);\n\n return aabb => {\n\n min[0] = aabb[0];\n min[1] = aabb[1];\n min[2] = aabb[2];\n\n max[0] = aabb[3];\n max[1] = aabb[4];\n max[2] = aabb[5];\n\n math.subVec3(max, min, tempVec3);\n\n return Math.abs(math.lenVec3(tempVec3));\n };\n }))(),\n\n /**\n * Get a diagonal boundary size that is symmetrical about the given point.\n *\n * @private\n */\n getAABB3DiagPoint: ((() => {\n\n const min = new FloatArrayType(3);\n const max = new FloatArrayType(3);\n const tempVec3 = new FloatArrayType(3);\n\n return (aabb, p) => {\n\n min[0] = aabb[0];\n min[1] = aabb[1];\n min[2] = aabb[2];\n\n max[0] = aabb[3];\n max[1] = aabb[4];\n max[2] = aabb[5];\n\n const diagVec = math.subVec3(max, min, tempVec3);\n\n const xneg = p[0] - aabb[0];\n const xpos = aabb[3] - p[0];\n const yneg = p[1] - aabb[1];\n const ypos = aabb[4] - p[1];\n const zneg = p[2] - aabb[2];\n const zpos = aabb[5] - p[2];\n\n diagVec[0] += (xneg > xpos) ? xneg : xpos;\n diagVec[1] += (yneg > ypos) ? yneg : ypos;\n diagVec[2] += (zneg > zpos) ? zneg : zpos;\n\n return Math.abs(math.lenVec3(diagVec));\n };\n }))(),\n\n /**\n * Gets the center of an AABB.\n *\n * @private\n */\n getAABB3Center(aabb, dest) {\n const r = dest || math.vec3();\n\n r[0] = (aabb[0] + aabb[3]) / 2;\n r[1] = (aabb[1] + aabb[4]) / 2;\n r[2] = (aabb[2] + aabb[5]) / 2;\n\n return r;\n },\n\n /**\n * Gets the center of a 2D AABB.\n *\n * @private\n */\n getAABB2Center(aabb, dest) {\n const r = dest || math.vec2();\n\n r[0] = (aabb[2] + aabb[0]) / 2;\n r[1] = (aabb[3] + aabb[1]) / 2;\n\n return r;\n },\n\n /**\n * Collapses a 3D axis-aligned boundary, ready to expand to fit 3D points.\n * Creates new AABB if none supplied.\n *\n * @private\n */\n collapseAABB3(aabb = math.AABB3()) {\n aabb[0] = math.MAX_DOUBLE;\n aabb[1] = math.MAX_DOUBLE;\n aabb[2] = math.MAX_DOUBLE;\n aabb[3] = -math.MAX_DOUBLE;\n aabb[4] = -math.MAX_DOUBLE;\n aabb[5] = -math.MAX_DOUBLE;\n\n return aabb;\n },\n\n /**\n * Converts an axis-aligned 3D boundary into an oriented boundary consisting of\n * an array of eight 3D positions, one for each corner of the boundary.\n *\n * @private\n */\n AABB3ToOBB3(aabb, obb = math.OBB3()) {\n obb[0] = aabb[0];\n obb[1] = aabb[1];\n obb[2] = aabb[2];\n obb[3] = 1;\n\n obb[4] = aabb[3];\n obb[5] = aabb[1];\n obb[6] = aabb[2];\n obb[7] = 1;\n\n obb[8] = aabb[3];\n obb[9] = aabb[4];\n obb[10] = aabb[2];\n obb[11] = 1;\n\n obb[12] = aabb[0];\n obb[13] = aabb[4];\n obb[14] = aabb[2];\n obb[15] = 1;\n\n obb[16] = aabb[0];\n obb[17] = aabb[1];\n obb[18] = aabb[5];\n obb[19] = 1;\n\n obb[20] = aabb[3];\n obb[21] = aabb[1];\n obb[22] = aabb[5];\n obb[23] = 1;\n\n obb[24] = aabb[3];\n obb[25] = aabb[4];\n obb[26] = aabb[5];\n obb[27] = 1;\n\n obb[28] = aabb[0];\n obb[29] = aabb[4];\n obb[30] = aabb[5];\n obb[31] = 1;\n\n return obb;\n },\n\n /**\n * Finds the minimum axis-aligned 3D boundary enclosing the homogeneous 3D points (x,y,z,w) given in a flattened array.\n *\n * @private\n */\n positions3ToAABB3: ((() => {\n\n const p = new FloatArrayType(3);\n\n return (positions, aabb, positionsDecodeMatrix) => {\n aabb = aabb || math.AABB3();\n\n let xmin = math.MAX_DOUBLE;\n let ymin = math.MAX_DOUBLE;\n let zmin = math.MAX_DOUBLE;\n let xmax = -math.MAX_DOUBLE;\n let ymax = -math.MAX_DOUBLE;\n let zmax = -math.MAX_DOUBLE;\n\n let x;\n let y;\n let z;\n\n for (let i = 0, len = positions.length; i < len; i += 3) {\n\n if (positionsDecodeMatrix) {\n\n p[0] = positions[i + 0];\n p[1] = positions[i + 1];\n p[2] = positions[i + 2];\n\n math.decompressPosition(p, positionsDecodeMatrix, p);\n\n x = p[0];\n y = p[1];\n z = p[2];\n\n } else {\n x = positions[i + 0];\n y = positions[i + 1];\n z = positions[i + 2];\n }\n\n if (x < xmin) {\n xmin = x;\n }\n\n if (y < ymin) {\n ymin = y;\n }\n\n if (z < zmin) {\n zmin = z;\n }\n\n if (x > xmax) {\n xmax = x;\n }\n\n if (y > ymax) {\n ymax = y;\n }\n\n if (z > zmax) {\n zmax = z;\n }\n }\n\n aabb[0] = xmin;\n aabb[1] = ymin;\n aabb[2] = zmin;\n aabb[3] = xmax;\n aabb[4] = ymax;\n aabb[5] = zmax;\n\n return aabb;\n };\n }))(),\n\n /**\n * Finds the minimum axis-aligned 3D boundary enclosing the homogeneous 3D points (x,y,z,w) given in a flattened array.\n *\n * @private\n */\n OBB3ToAABB3(obb, aabb = math.AABB3()) {\n let xmin = math.MAX_DOUBLE;\n let ymin = math.MAX_DOUBLE;\n let zmin = math.MAX_DOUBLE;\n let xmax = -math.MAX_DOUBLE;\n let ymax = -math.MAX_DOUBLE;\n let zmax = -math.MAX_DOUBLE;\n\n let x;\n let y;\n let z;\n\n for (let i = 0, len = obb.length; i < len; i += 4) {\n\n x = obb[i + 0];\n y = obb[i + 1];\n z = obb[i + 2];\n\n if (x < xmin) {\n xmin = x;\n }\n\n if (y < ymin) {\n ymin = y;\n }\n\n if (z < zmin) {\n zmin = z;\n }\n\n if (x > xmax) {\n xmax = x;\n }\n\n if (y > ymax) {\n ymax = y;\n }\n\n if (z > zmax) {\n zmax = z;\n }\n }\n\n aabb[0] = xmin;\n aabb[1] = ymin;\n aabb[2] = zmin;\n aabb[3] = xmax;\n aabb[4] = ymax;\n aabb[5] = zmax;\n\n return aabb;\n },\n\n /**\n * Finds the minimum axis-aligned 3D boundary enclosing the given 3D points.\n *\n * @private\n */\n points3ToAABB3(points, aabb = math.AABB3()) {\n let xmin = math.MAX_DOUBLE;\n let ymin = math.MAX_DOUBLE;\n let zmin = math.MAX_DOUBLE;\n let xmax = -math.MAX_DOUBLE;\n let ymax = -math.MAX_DOUBLE;\n let zmax = -math.MAX_DOUBLE;\n\n let x;\n let y;\n let z;\n\n for (let i = 0, len = points.length; i < len; i++) {\n\n x = points[i][0];\n y = points[i][1];\n z = points[i][2];\n\n if (x < xmin) {\n xmin = x;\n }\n\n if (y < ymin) {\n ymin = y;\n }\n\n if (z < zmin) {\n zmin = z;\n }\n\n if (x > xmax) {\n xmax = x;\n }\n\n if (y > ymax) {\n ymax = y;\n }\n\n if (z > zmax) {\n zmax = z;\n }\n }\n\n aabb[0] = xmin;\n aabb[1] = ymin;\n aabb[2] = zmin;\n aabb[3] = xmax;\n aabb[4] = ymax;\n aabb[5] = zmax;\n\n return aabb;\n },\n\n /**\n * Finds the minimum boundary sphere enclosing the given 3D points.\n *\n * @private\n */\n points3ToSphere3: ((() => {\n\n const tempVec3 = new FloatArrayType(3);\n\n return (points, sphere) => {\n\n sphere = sphere || math.vec4();\n\n let x = 0;\n let y = 0;\n let z = 0;\n\n let i;\n const numPoints = points.length;\n\n for (i = 0; i < numPoints; i++) {\n x += points[i][0];\n y += points[i][1];\n z += points[i][2];\n }\n\n sphere[0] = x / numPoints;\n sphere[1] = y / numPoints;\n sphere[2] = z / numPoints;\n\n let radius = 0;\n let dist;\n\n for (i = 0; i < numPoints; i++) {\n\n dist = Math.abs(math.lenVec3(math.subVec3(points[i], sphere, tempVec3)));\n\n if (dist > radius) {\n radius = dist;\n }\n }\n\n sphere[3] = radius;\n\n return sphere;\n };\n }))(),\n\n /**\n * Finds the minimum boundary sphere enclosing the given 3D positions.\n *\n * @private\n */\n positions3ToSphere3: ((() => {\n\n const tempVec3a = new FloatArrayType(3);\n const tempVec3b = new FloatArrayType(3);\n\n return (positions, sphere) => {\n\n sphere = sphere || math.vec4();\n\n let x = 0;\n let y = 0;\n let z = 0;\n\n let i;\n const lenPositions = positions.length;\n let radius = 0;\n\n for (i = 0; i < lenPositions; i += 3) {\n x += positions[i];\n y += positions[i + 1];\n z += positions[i + 2];\n }\n\n const numPositions = lenPositions / 3;\n\n sphere[0] = x / numPositions;\n sphere[1] = y / numPositions;\n sphere[2] = z / numPositions;\n\n let dist;\n\n for (i = 0; i < lenPositions; i += 3) {\n\n tempVec3a[0] = positions[i];\n tempVec3a[1] = positions[i + 1];\n tempVec3a[2] = positions[i + 2];\n\n dist = Math.abs(math.lenVec3(math.subVec3(tempVec3a, sphere, tempVec3b)));\n\n if (dist > radius) {\n radius = dist;\n }\n }\n\n sphere[3] = radius;\n\n return sphere;\n };\n }))(),\n\n /**\n * Finds the minimum boundary sphere enclosing the given 3D points.\n *\n * @private\n */\n OBB3ToSphere3: ((() => {\n\n const point = new FloatArrayType(3);\n const tempVec3 = new FloatArrayType(3);\n\n return (points, sphere) => {\n\n sphere = sphere || math.vec4();\n\n let x = 0;\n let y = 0;\n let z = 0;\n\n let i;\n const lenPoints = points.length;\n const numPoints = lenPoints / 4;\n\n for (i = 0; i < lenPoints; i += 4) {\n x += points[i + 0];\n y += points[i + 1];\n z += points[i + 2];\n }\n\n sphere[0] = x / numPoints;\n sphere[1] = y / numPoints;\n sphere[2] = z / numPoints;\n\n let radius = 0;\n let dist;\n\n for (i = 0; i < lenPoints; i += 4) {\n\n point[0] = points[i + 0];\n point[1] = points[i + 1];\n point[2] = points[i + 2];\n\n dist = Math.abs(math.lenVec3(math.subVec3(point, sphere, tempVec3)));\n\n if (dist > radius) {\n radius = dist;\n }\n }\n\n sphere[3] = radius;\n\n return sphere;\n };\n }))(),\n\n /**\n * Gets the center of a bounding sphere.\n *\n * @private\n */\n getSphere3Center(sphere, dest = math.vec3()) {\n dest[0] = sphere[0];\n dest[1] = sphere[1];\n dest[2] = sphere[2];\n\n return dest;\n },\n\n /**\n * Expands the first axis-aligned 3D boundary to enclose the second, if required.\n *\n * @private\n */\n expandAABB3(aabb1, aabb2) {\n\n if (aabb1[0] > aabb2[0]) {\n aabb1[0] = aabb2[0];\n }\n\n if (aabb1[1] > aabb2[1]) {\n aabb1[1] = aabb2[1];\n }\n\n if (aabb1[2] > aabb2[2]) {\n aabb1[2] = aabb2[2];\n }\n\n if (aabb1[3] < aabb2[3]) {\n aabb1[3] = aabb2[3];\n }\n\n if (aabb1[4] < aabb2[4]) {\n aabb1[4] = aabb2[4];\n }\n\n if (aabb1[5] < aabb2[5]) {\n aabb1[5] = aabb2[5];\n }\n\n return aabb1;\n },\n\n /**\n * Expands an axis-aligned 3D boundary to enclose the given point, if needed.\n *\n * @private\n */\n expandAABB3Point3(aabb, p) {\n\n if (aabb[0] > p[0]) {\n aabb[0] = p[0];\n }\n\n if (aabb[1] > p[1]) {\n aabb[1] = p[1];\n }\n\n if (aabb[2] > p[2]) {\n aabb[2] = p[2];\n }\n\n if (aabb[3] < p[0]) {\n aabb[3] = p[0];\n }\n\n if (aabb[4] < p[1]) {\n aabb[4] = p[1];\n }\n\n if (aabb[5] < p[2]) {\n aabb[5] = p[2];\n }\n\n return aabb;\n },\n\n /**\n * Calculates the normal vector of a triangle.\n *\n * @private\n */\n triangleNormal(a, b, c, normal = math.vec3()) {\n const p1x = b[0] - a[0];\n const p1y = b[1] - a[1];\n const p1z = b[2] - a[2];\n\n const p2x = c[0] - a[0];\n const p2y = c[1] - a[1];\n const p2z = c[2] - a[2];\n\n const p3x = p1y * p2z - p1z * p2y;\n const p3y = p1z * p2x - p1x * p2z;\n const p3z = p1x * p2y - p1y * p2x;\n\n const mag = Math.sqrt(p3x * p3x + p3y * p3y + p3z * p3z);\n if (mag === 0) {\n normal[0] = 0;\n normal[1] = 0;\n normal[2] = 0;\n } else {\n normal[0] = p3x / mag;\n normal[1] = p3y / mag;\n normal[2] = p3z / mag;\n }\n\n return normal\n }\n};\n\nexport {math};","/**\n * Given geometry defined as an array of positions, optional normals, option uv and an array of indices, returns\n * modified arrays that have duplicate vertices removed.\n *\n * @private\n */\nfunction mergeVertices(positions, indices, mergedPositions, mergedIndices) {\n const positionsMap = {};\n const indicesLookup = [];\n const precisionPoints = 4; // number of decimal points, e.g. 4 for epsilon of 0.0001\n const precision = 10 ** precisionPoints;\n let uvi = 0;\n for (let i = 0, len = positions.length; i < len; i += 3) {\n const vx = positions[i];\n const vy = positions[i + 1];\n const vz = positions[i + 2];\n const key = `${Math.round(vx * precision)}_${Math.round(vy * precision)}_${Math.round(vz * precision)}`;\n if (positionsMap[key] === undefined) {\n positionsMap[key] = mergedPositions.length / 3;\n mergedPositions.push(vx);\n mergedPositions.push(vy);\n mergedPositions.push(vz);\n }\n indicesLookup[i / 3] = positionsMap[key];\n uvi += 2;\n }\n for (let i = 0, len = indices.length; i < len; i++) {\n mergedIndices[i] = indicesLookup[indices[i]];\n }\n}\n\nexport {mergeVertices};","import {earcut} from './../lib/earcut';\nimport {math} from \"./../lib/math.js\";\n\nconst tempVec2a = math.vec2();\nconst tempVec3a = math.vec3();\nconst tempVec3b = math.vec3();\nconst tempVec3c = math.vec3();\n\n/**\n * @desc Parses a CityJSON model into an {@link XKTModel}.\n *\n * [CityJSON](https://www.cityjson.org) is a JSON-based encoding for a subset of the CityGML data model (version 2.0.0),\n * which is an open standardised data model and exchange format to store digital 3D models of cities and\n * landscapes. CityGML is an official standard of the [Open Geospatial Consortium](https://www.ogc.org/).\n *\n * This converter function supports most of the [CityJSON 1.0.2 Specification](https://www.cityjson.org/specs/1.0.2),\n * with the following limitations:\n *\n * * Does not (yet) support CityJSON semantics for geometry primitives.\n * * Does not (yet) support textured geometries.\n * * Does not (yet) support geometry templates.\n * * When the CityJSON file provides multiple *themes* for a geometry, then we parse only the first of the provided themes for that geometry.\n *\n * ## Usage\n *\n * In the example below we'll create an {@link XKTModel}, then load a CityJSON model into it.\n *\n * ````javascript\n * utils.loadJSON(\"./models/cityjson/DenHaag.json\", async (data) => {\n *\n * const xktModel = new XKTModel();\n *\n * parseCityJSONIntoXKTModel({\n * data,\n * xktModel,\n * log: (msg) => { console.log(msg); }\n * }).then(()=>{\n * xktModel.finalize();\n * },\n * (msg) => {\n * console.error(msg);\n * });\n * });\n * ````\n *\n * @param {Object} params Parsing params.\n * @param {Object} params.data CityJSON data.\n * @param {XKTModel} params.xktModel XKTModel to parse into.\n * @param {boolean} [params.center=false] Set true to center the CityJSON vertex positions to [0,0,0]. This is applied before the transformation matrix, if specified.\n * @param {Boolean} [params.transform] 4x4 transformation matrix to transform CityJSON vertex positions. Use this to rotate, translate and scale them if neccessary.\n * @param {Object} [params.stats] Collects statistics.\n * @param {function} [params.log] Logging callback.\n @returns {Promise} Resolves when CityJSON has been parsed.\n */\nfunction parseCityJSONIntoXKTModel({\n data,\n xktModel,\n center = false,\n transform = null,\n stats = {}, log\n }) {\n\n return new Promise(function (resolve, reject) {\n\n if (!data) {\n reject(\"Argument expected: data\");\n return;\n }\n\n if (data.type !== \"CityJSON\") {\n reject(\"Invalid argument: data is not a CityJSON file\");\n return;\n }\n\n if (!xktModel) {\n reject(\"Argument expected: xktModel\");\n return;\n }\n\n let vertices;\n\n log(\"Using parser: parseCityJSONIntoXKTModel\");\n\n log(`center: ${center}`);\n if (transform) {\n log(`transform: [${transform}]`);\n }\n\n if (data.transform || center || transform) {\n vertices = copyVertices(data.vertices);\n if (data.transform) {\n transformVertices(vertices, data.transform)\n }\n if (center) {\n centerVertices(vertices);\n }\n if (transform) {\n customTransformVertices(vertices, transform);\n }\n } else {\n vertices = data.vertices;\n }\n\n stats.sourceFormat = data.type || \"\";\n stats.schemaVersion = data.version || \"\";\n stats.title = \"\";\n stats.author = \"\";\n stats.created = \"\";\n stats.numMetaObjects = 0;\n stats.numPropertySets = 0;\n stats.numTriangles = 0;\n stats.numVertices = 0;\n stats.numObjects = 0;\n stats.numGeometries = 0;\n\n const rootMetaObjectId = math.createUUID();\n\n xktModel.createMetaObject({\n metaObjectId: rootMetaObjectId,\n metaObjectType: \"Model\",\n metaObjectName: \"Model\"\n });\n\n stats.numMetaObjects++;\n\n const modelMetaObjectId = math.createUUID();\n\n xktModel.createMetaObject({\n metaObjectId: modelMetaObjectId,\n metaObjectType: \"CityJSON\",\n metaObjectName: \"CityJSON\",\n parentMetaObjectId: rootMetaObjectId\n });\n\n stats.numMetaObjects++;\n\n const ctx = {\n data,\n vertices,\n xktModel,\n rootMetaObjectId: modelMetaObjectId,\n log: (log || function (msg) {\n }),\n nextId: 0,\n stats\n };\n\n ctx.xktModel.schema = data.type + \" \" + data.version;\n\n ctx.log(\"Converting \" + ctx.xktModel.schema);\n\n parseCityJSON(ctx);\n\n resolve();\n });\n}\n\nfunction copyVertices(vertices) {\n const vertices2 = [];\n for (let i = 0, j = 0; i < vertices.length; i++, j += 3) {\n const x = vertices[i][0];\n const y = vertices[i][1];\n const z = vertices[i][2];\n vertices2.push([x, y, z]);\n }\n return vertices2;\n}\n\nfunction transformVertices(vertices, cityJSONTransform) {\n const scale = cityJSONTransform.scale || math.vec3([1, 1, 1]);\n const translate = cityJSONTransform.translate || math.vec3([0, 0, 0]);\n for (let i = 0; i < vertices.length; i++) {\n const vertex = vertices[i];\n vertex[0] = (vertex[0] * scale[0]) + translate[0];\n vertex[1] = (vertex[1] * scale[1]) + translate[1];\n vertex[2] = (vertex[2] * scale[2]) + translate[2];\n }\n}\n\nfunction centerVertices(vertices) {\n if (center) {\n const centerPos = math.vec3();\n const numPoints = vertices.length;\n for (let i = 0, len = vertices.length; i < len; i++) {\n const vertex = vertices[i];\n centerPos[0] += vertex[0];\n centerPos[1] += vertex[1];\n centerPos[2] += vertex[2];\n }\n centerPos[0] /= numPoints;\n centerPos[1] /= numPoints;\n centerPos[2] /= numPoints;\n for (let i = 0, len = vertices.length; i < len; i++) {\n const vertex = vertices[i];\n vertex[0] -= centerPos[0];\n vertex[1] -= centerPos[1];\n vertex[2] -= centerPos[2];\n }\n }\n}\n\nfunction customTransformVertices(vertices, transform) {\n if (transform) {\n const mat = math.mat4(transform);\n for (let i = 0, len = vertices.length; i < len; i++) {\n const vertex = vertices[i];\n math.transformPoint3(mat, vertex, vertex);\n }\n }\n}\n\nfunction parseCityJSON(ctx) {\n\n const data = ctx.data;\n const cityObjects = data.CityObjects;\n\n for (const objectId in cityObjects) {\n if (cityObjects.hasOwnProperty(objectId)) {\n const cityObject = cityObjects[objectId];\n parseCityObject(ctx, cityObject, objectId);\n }\n }\n}\n\nfunction parseCityObject(ctx, cityObject, objectId) {\n\n const xktModel = ctx.xktModel;\n const data = ctx.data;\n const metaObjectId = objectId;\n const metaObjectType = cityObject.type;\n const metaObjectName = metaObjectType + \" : \" + objectId;\n\n const parentMetaObjectId = cityObject.parents ? cityObject.parents[0] : ctx.rootMetaObjectId;\n\n xktModel.createMetaObject({\n metaObjectId,\n metaObjectName,\n metaObjectType,\n parentMetaObjectId\n });\n\n ctx.stats.numMetaObjects++;\n\n if (!(cityObject.geometry && cityObject.geometry.length > 0)) {\n return;\n }\n\n const meshIds = [];\n\n for (let i = 0, len = cityObject.geometry.length; i < len; i++) {\n\n const geometry = cityObject.geometry[i];\n\n let objectMaterial;\n let surfaceMaterials;\n\n const appearance = data.appearance;\n if (appearance) {\n const materials = appearance.materials;\n if (materials) {\n const geometryMaterial = geometry.material;\n if (geometryMaterial) {\n const themeIds = Object.keys(geometryMaterial);\n if (themeIds.length > 0) {\n const themeId = themeIds[0];\n const theme = geometryMaterial[themeId];\n if (theme.value !== undefined) {\n objectMaterial = materials[theme.value];\n } else {\n const values = theme.values;\n if (values) {\n surfaceMaterials = [];\n for (let j = 0, lenj = values.length; j < lenj; j++) {\n const value = values[i];\n const surfaceMaterial = materials[value];\n surfaceMaterials.push(surfaceMaterial);\n }\n }\n }\n }\n }\n }\n }\n\n if (surfaceMaterials) {\n parseGeometrySurfacesWithOwnMaterials(ctx, geometry, surfaceMaterials, meshIds);\n\n } else {\n parseGeometrySurfacesWithSharedMaterial(ctx, geometry, objectMaterial, meshIds);\n }\n }\n\n if (meshIds.length > 0) {\n xktModel.createEntity({\n entityId: objectId,\n meshIds: meshIds\n });\n\n ctx.stats.numObjects++;\n }\n}\n\nfunction parseGeometrySurfacesWithOwnMaterials(ctx, geometry, surfaceMaterials, meshIds) {\n\n const geomType = geometry.type;\n\n switch (geomType) {\n\n case \"MultiPoint\":\n break;\n\n case \"MultiLineString\":\n break;\n\n case \"MultiSurface\":\n\n case \"CompositeSurface\":\n const surfaces = geometry.boundaries;\n parseSurfacesWithOwnMaterials(ctx, surfaceMaterials, surfaces, meshIds);\n break;\n\n case \"Solid\":\n const shells = geometry.boundaries;\n for (let j = 0; j < shells.length; j++) {\n const surfaces = shells[j];\n parseSurfacesWithOwnMaterials(ctx, surfaceMaterials, surfaces, meshIds);\n }\n break;\n\n case \"MultiSolid\":\n\n case \"CompositeSolid\":\n const solids = geometry.boundaries;\n for (let j = 0; j < solids.length; j++) {\n for (let k = 0; k < solids[j].length; k++) {\n const surfaces = solids[j][k];\n parseSurfacesWithOwnMaterials(ctx, surfaceMaterials, surfaces, meshIds);\n }\n }\n break;\n\n case \"GeometryInstance\":\n break;\n }\n}\n\nfunction parseSurfacesWithOwnMaterials(ctx, surfaceMaterials, surfaces, meshIds) {\n\n const vertices = ctx.vertices;\n const xktModel = ctx.xktModel;\n\n for (let i = 0; i < surfaces.length; i++) {\n\n const surface = surfaces[i];\n const surfaceMaterial = surfaceMaterials[i] || {diffuseColor: [0.8, 0.8, 0.8], transparency: 1.0};\n\n const face = [];\n const holes = [];\n\n const sharedIndices = [];\n\n const geometryCfg = {\n positions: [],\n indices: []\n };\n\n for (let j = 0; j < surface.length; j++) {\n\n if (face.length > 0) {\n holes.push(face.length);\n }\n\n const newFace = extractLocalIndices(ctx, surface[j], sharedIndices, geometryCfg);\n\n face.push(...newFace);\n }\n\n if (face.length === 3) { // Triangle\n\n geometryCfg.indices.push(face[0]);\n geometryCfg.indices.push(face[1]);\n geometryCfg.indices.push(face[2]);\n\n } else if (face.length > 3) { // Polygon\n\n // Prepare to triangulate\n\n const pList = [];\n\n for (let k = 0; k < face.length; k++) {\n pList.push({\n x: vertices[sharedIndices[face[k]]][0],\n y: vertices[sharedIndices[face[k]]][1],\n z: vertices[sharedIndices[face[k]]][2]\n });\n }\n\n const normal = getNormalOfPositions(pList, math.vec3());\n\n // Convert to 2D\n\n let pv = [];\n\n for (let k = 0; k < pList.length; k++) {\n\n to2D(pList[k], normal, tempVec2a);\n\n pv.unshift(tempVec2a[0]);\n pv.unshift(tempVec2a[1]);\n }\n\n // Triangulate\n\n const tr = earcut(pv, holes, 2);\n\n // Create triangles\n\n for (let k = 0; k < tr.length; k += 3) {\n geometryCfg.indices.unshift(face[tr[k]]);\n geometryCfg.indices.unshift(face[tr[k + 1]]);\n geometryCfg.indices.unshift(face[tr[k + 2]]);\n }\n }\n\n const geometryId = \"\" + ctx.nextId++;\n const meshId = \"\" + ctx.nextId++;\n\n xktModel.createGeometry({\n geometryId: geometryId,\n primitiveType: \"triangles\",\n positions: geometryCfg.positions,\n indices: geometryCfg.indices\n });\n\n xktModel.createMesh({\n meshId: meshId,\n geometryId: geometryId,\n color: (surfaceMaterial && surfaceMaterial.diffuseColor) ? surfaceMaterial.diffuseColor : [0.8, 0.8, 0.8],\n opacity: 1.0\n //opacity: (surfaceMaterial && surfaceMaterial.transparency !== undefined) ? (1.0 - surfaceMaterial.transparency) : 1.0\n });\n\n meshIds.push(meshId);\n\n ctx.stats.numGeometries++;\n ctx.stats.numVertices += geometryCfg.positions.length / 3;\n ctx.stats.numTriangles += geometryCfg.indices.length / 3;\n }\n}\n\nfunction parseGeometrySurfacesWithSharedMaterial(ctx, geometry, objectMaterial, meshIds) {\n\n const xktModel = ctx.xktModel;\n const sharedIndices = [];\n const geometryCfg = {\n positions: [],\n indices: []\n };\n\n const geomType = geometry.type;\n\n switch (geomType) {\n case \"MultiPoint\":\n break;\n\n case \"MultiLineString\":\n break;\n\n case \"MultiSurface\":\n case \"CompositeSurface\":\n const surfaces = geometry.boundaries;\n parseSurfacesWithSharedMaterial(ctx, surfaces, sharedIndices, geometryCfg);\n break;\n\n case \"Solid\":\n const shells = geometry.boundaries;\n for (let j = 0; j < shells.length; j++) {\n const surfaces = shells[j];\n parseSurfacesWithSharedMaterial(ctx, surfaces, sharedIndices, geometryCfg);\n }\n break;\n\n case \"MultiSolid\":\n case \"CompositeSolid\":\n const solids = geometry.boundaries;\n for (let j = 0; j < solids.length; j++) {\n for (let k = 0; k < solids[j].length; k++) {\n const surfaces = solids[j][k];\n parseSurfacesWithSharedMaterial(ctx, surfaces, sharedIndices, geometryCfg);\n }\n }\n break;\n\n case \"GeometryInstance\":\n break;\n }\n\n const geometryId = \"\" + ctx.nextId++;\n const meshId = \"\" + ctx.nextId++;\n\n xktModel.createGeometry({\n geometryId: geometryId,\n primitiveType: \"triangles\",\n positions: geometryCfg.positions,\n indices: geometryCfg.indices\n });\n\n xktModel.createMesh({\n meshId: meshId,\n geometryId: geometryId,\n color: (objectMaterial && objectMaterial.diffuseColor) ? objectMaterial.diffuseColor : [0.8, 0.8, 0.8],\n opacity: 1.0\n //opacity: (objectMaterial && objectMaterial.transparency !== undefined) ? (1.0 - objectMaterial.transparency) : 1.0\n });\n\n meshIds.push(meshId);\n\n ctx.stats.numGeometries++;\n ctx.stats.numVertices += geometryCfg.positions.length / 3;\n ctx.stats.numTriangles += geometryCfg.indices.length / 3;\n}\n\nfunction parseSurfacesWithSharedMaterial(ctx, surfaces, sharedIndices, primitiveCfg) {\n\n const vertices = ctx.vertices;\n\n for (let i = 0; i < surfaces.length; i++) {\n\n let boundary = [];\n let holes = [];\n\n for (let j = 0; j < surfaces[i].length; j++) {\n if (boundary.length > 0) {\n holes.push(boundary.length);\n }\n const newBoundary = extractLocalIndices(ctx, surfaces[i][j], sharedIndices, primitiveCfg);\n boundary.push(...newBoundary);\n }\n\n if (boundary.length === 3) { // Triangle\n\n primitiveCfg.indices.push(boundary[0]);\n primitiveCfg.indices.push(boundary[1]);\n primitiveCfg.indices.push(boundary[2]);\n\n } else if (boundary.length > 3) { // Polygon\n\n let pList = [];\n\n for (let k = 0; k < boundary.length; k++) {\n pList.push({\n x: vertices[sharedIndices[boundary[k]]][0],\n y: vertices[sharedIndices[boundary[k]]][1],\n z: vertices[sharedIndices[boundary[k]]][2]\n });\n }\n\n const normal = getNormalOfPositions(pList, math.vec3());\n let pv = [];\n\n for (let k = 0; k < pList.length; k++) {\n to2D(pList[k], normal, tempVec2a);\n pv.unshift(tempVec2a[0]);\n pv.unshift(tempVec2a[1]);\n }\n\n const tr = earcut(pv, holes, 2);\n\n for (let k = 0; k < tr.length; k += 3) {\n primitiveCfg.indices.unshift(boundary[tr[k]]);\n primitiveCfg.indices.unshift(boundary[tr[k + 1]]);\n primitiveCfg.indices.unshift(boundary[tr[k + 2]]);\n }\n }\n }\n}\n\nfunction extractLocalIndices(ctx, boundary, sharedIndices, geometryCfg) {\n\n const vertices = ctx.vertices;\n const newBoundary = []\n\n for (let i = 0, len = boundary.length; i < len; i++) {\n\n const index = boundary[i];\n\n if (sharedIndices.includes(index)) {\n const vertexIndex = sharedIndices.indexOf(index);\n newBoundary.push(vertexIndex);\n\n } else {\n geometryCfg.positions.push(vertices[index][0]);\n geometryCfg.positions.push(vertices[index][1]);\n geometryCfg.positions.push(vertices[index][2]);\n\n newBoundary.push(sharedIndices.length);\n\n sharedIndices.push(index);\n }\n }\n\n return newBoundary\n}\n\nfunction getNormalOfPositions(positions, normal) {\n\n for (let i = 0; i < positions.length; i++) {\n\n let nexti = i + 1;\n if (nexti === positions.length) {\n nexti = 0;\n }\n\n normal[0] += ((positions[i].y - positions[nexti].y) * (positions[i].z + positions[nexti].z));\n normal[1] += ((positions[i].z - positions[nexti].z) * (positions[i].x + positions[nexti].x));\n normal[2] += ((positions[i].x - positions[nexti].x) * (positions[i].y + positions[nexti].y));\n }\n\n return math.normalizeVec3(normal);\n}\n\nfunction to2D(_p, _n, re) {\n\n const p = tempVec3a;\n const n = tempVec3b;\n const x3 = tempVec3c;\n\n p[0] = _p.x;\n p[1] = _p.y;\n p[2] = _p.z;\n\n n[0] = _n.x;\n n[1] = _n.y;\n n[2] = _n.z;\n\n x3[0] = 1.1;\n x3[1] = 1.1;\n x3[2] = 1.1;\n\n const dist = math.lenVec3(math.subVec3(x3, n));\n\n if (dist < 0.01) {\n x3[0] += 1.0;\n x3[1] += 2.0;\n x3[2] += 3.0;\n }\n\n const dot = math.dotVec3(x3, n);\n const tmp2 = math.mulVec3Scalar(n, dot, math.vec3());\n\n x3[0] -= tmp2[0];\n x3[1] -= tmp2[1];\n x3[2] -= tmp2[2];\n\n math.normalizeVec3(x3);\n\n const y3 = math.cross3Vec3(n, x3, math.vec3());\n const x = math.dotVec3(p, x3);\n const y = math.dotVec3(p, y3);\n\n re[0] = x;\n re[1] = y;\n}\n\nexport {parseCityJSONIntoXKTModel};","import {utils} from \"../XKTModel/lib/utils.js\";\nimport {math} from \"../lib/math.js\";\n\nimport {parse} from '@loaders.gl/core';\nimport {GLTFLoader} from '@loaders.gl/gltf';\nimport {\n ClampToEdgeWrapping,\n LinearFilter,\n LinearMipMapLinearFilter,\n LinearMipMapNearestFilter,\n MirroredRepeatWrapping,\n NearestFilter,\n NearestMipMapLinearFilter,\n NearestMipMapNearestFilter,\n RepeatWrapping\n} from \"../constants.js\";\n\n/**\n * @desc Parses glTF into an {@link XKTModel}, supporting ````.glb```` and textures.\n *\n * * Supports ````.glb```` and textures\n * * For a lightweight glTF JSON parser that ignores textures, see {@link parseGLTFJSONIntoXKTModel}.\n *\n * ## Usage\n *\n * In the example below we'll create an {@link XKTModel}, then load a binary glTF model into it.\n *\n * ````javascript\n * utils.loadArraybuffer(\"../assets/models/gltf/HousePlan/glTF-Binary/HousePlan.glb\", async (data) => {\n *\n * const xktModel = new XKTModel();\n *\n * parseGLTFIntoXKTModel({\n * data,\n * xktModel,\n * log: (msg) => { console.log(msg); }\n * }).then(()=>{\n * xktModel.finalize();\n * },\n * (msg) => {\n * console.error(msg);\n * });\n * });\n * ````\n *\n * @param {Object} params Parsing parameters.\n * @param {ArrayBuffer} params.data The glTF.\n * @param {String} [params.baseUri] The base URI used to load this glTF, if any. For resolving relative uris to linked resources.\n * @param {Object} [params.metaModelData] Metamodel JSON. If this is provided, then parsing is able to ensure that the XKTObjects it creates will fit the metadata properly.\n * @param {XKTModel} params.xktModel XKTModel to parse into.\n * @param {Boolean} [params.includeTextures=true] Whether to parse textures.\n * @param {Boolean} [params.includeNormals=true] Whether to parse normals. When false, the parser will ignore the glTF\n * geometry normals, and the glTF data will rely on the xeokit ````Viewer```` to automatically generate them. This has\n * the limitation that the normals will be face-aligned, and therefore the ````Viewer```` will only be able to render\n * a flat-shaded non-PBR representation of the glTF.\n * @param {Object} [params.stats] Collects statistics.\n * @param {function} [params.log] Logging callback.\n @returns {Promise} Resolves when glTF has been parsed.\n */\nfunction parseGLTFIntoXKTModel({\n data,\n baseUri,\n xktModel,\n metaModelData,\n includeTextures = true,\n includeNormals = true,\n getAttachment,\n stats = {},\n log\n }) {\n\n return new Promise(function (resolve, reject) {\n\n if (!data) {\n reject(\"Argument expected: data\");\n return;\n }\n\n if (!xktModel) {\n reject(\"Argument expected: xktModel\");\n return;\n }\n\n stats.sourceFormat = \"glTF\";\n stats.schemaVersion = \"2.0\";\n stats.title = \"\";\n stats.author = \"\";\n stats.created = \"\";\n stats.numTriangles = 0;\n stats.numVertices = 0;\n stats.numNormals = 0;\n stats.numUVs = 0;\n stats.numTextures = 0;\n stats.numObjects = 0;\n stats.numGeometries = 0;\n\n parse(data, GLTFLoader, {\n baseUri\n }).then((gltfData) => {\n\n const ctx = {\n gltfData,\n nodesHaveNames: false, // determined in testIfNodesHaveNames()\n getAttachment: getAttachment || (() => {\n throw new Error('You must define getAttachment() method to convert glTF with external resources')\n }),\n log: (log || function (msg) {\n }),\n error: function (msg) {\n console.error(msg);\n },\n xktModel,\n includeNormals: (includeNormals !== false),\n includeTextures: (includeTextures !== false),\n geometryCreated: {},\n nextId: 0,\n geometriesCreated : {},\n stats\n };\n\n ctx.log(\"Using parser: parseGLTFIntoXKTModel\");\n ctx.log(`Parsing normals: ${ctx.includeNormals ? \"enabled\" : \"disabled\"}`);\n ctx.log(`Parsing textures: ${ctx.includeTextures ? \"enabled\" : \"disabled\"}`);\n\n if (ctx.includeTextures) {\n parseTextures(ctx);\n }\n parseMaterials(ctx);\n parseDefaultScene(ctx);\n\n resolve();\n\n }, (errMsg) => {\n reject(`[parseGLTFIntoXKTModel] ${errMsg}`);\n });\n });\n}\n\nfunction parseTextures(ctx) {\n const gltfData = ctx.gltfData;\n const textures = gltfData.textures;\n if (textures) {\n for (let i = 0, len = textures.length; i < len; i++) {\n parseTexture(ctx, textures[i]);\n ctx.stats.numTextures++;\n }\n }\n}\n\nfunction parseTexture(ctx, texture) {\n if (!texture.source || !texture.source.image) {\n return;\n }\n const textureId = `texture-${ctx.nextId++}`;\n\n let minFilter = NearestMipMapLinearFilter;\n switch (texture.sampler.minFilter) {\n case 9728:\n minFilter = NearestFilter;\n break;\n case 9729:\n minFilter = LinearFilter;\n break;\n case 9984:\n minFilter = NearestMipMapNearestFilter;\n break;\n case 9985:\n minFilter = LinearMipMapNearestFilter;\n break;\n case 9986:\n minFilter = NearestMipMapLinearFilter;\n break;\n case 9987:\n minFilter = LinearMipMapLinearFilter;\n break;\n }\n\n let magFilter = LinearFilter;\n switch (texture.sampler.magFilter) {\n case 9728:\n magFilter = NearestFilter;\n break;\n case 9729:\n magFilter = LinearFilter;\n break;\n }\n\n let wrapS = RepeatWrapping;\n switch (texture.sampler.wrapS) {\n case 33071:\n wrapS = ClampToEdgeWrapping;\n break;\n case 33648:\n wrapS = MirroredRepeatWrapping;\n break;\n case 10497:\n wrapS = RepeatWrapping;\n break;\n }\n\n let wrapT = RepeatWrapping;\n switch (texture.sampler.wrapT) {\n case 33071:\n wrapT = ClampToEdgeWrapping;\n break;\n case 33648:\n wrapT = MirroredRepeatWrapping;\n break;\n case 10497:\n wrapT = RepeatWrapping;\n break;\n }\n\n let wrapR = RepeatWrapping;\n switch (texture.sampler.wrapR) {\n case 33071:\n wrapR = ClampToEdgeWrapping;\n break;\n case 33648:\n wrapR = MirroredRepeatWrapping;\n break;\n case 10497:\n wrapR = RepeatWrapping;\n break;\n }\n\n ctx.xktModel.createTexture({\n textureId: textureId,\n imageData: texture.source.image,\n mediaType: texture.source.mediaType,\n compressed: true,\n width: texture.source.image.width,\n height: texture.source.image.height,\n minFilter,\n magFilter,\n wrapS,\n wrapT,\n wrapR,\n flipY: !!texture.flipY,\n // encoding: \"sRGB\"\n });\n texture._textureId = textureId;\n}\n\nfunction parseMaterials(ctx) {\n const gltfData = ctx.gltfData;\n const materials = gltfData.materials;\n if (materials) {\n for (let i = 0, len = materials.length; i < len; i++) {\n const material = materials[i];\n material._textureSetId = ctx.includeTextures ? parseTextureSet(ctx, material) : null;\n material._attributes = parseMaterialAttributes(ctx, material);\n }\n }\n}\n\nfunction parseTextureSet(ctx, material) {\n const textureSetCfg = {};\n if (material.normalTexture) {\n textureSetCfg.normalTextureId = material.normalTexture.texture._textureId;\n }\n if (material.occlusionTexture) {\n textureSetCfg.occlusionTextureId = material.occlusionTexture.texture._textureId;\n }\n if (material.emissiveTexture) {\n textureSetCfg.emissiveTextureId = material.emissiveTexture.texture._textureId;\n }\n const metallicPBR = material.pbrMetallicRoughness;\n if (material.pbrMetallicRoughness) {\n const pbrMetallicRoughness = material.pbrMetallicRoughness;\n const baseColorTexture = pbrMetallicRoughness.baseColorTexture || pbrMetallicRoughness.colorTexture;\n if (baseColorTexture) {\n if (baseColorTexture.texture) {\n textureSetCfg.colorTextureId = baseColorTexture.texture._textureId;\n } else {\n textureSetCfg.colorTextureId = ctx.gltfData.textures[baseColorTexture.index]._textureId;\n }\n }\n if (metallicPBR.metallicRoughnessTexture) {\n textureSetCfg.metallicRoughnessTextureId = metallicPBR.metallicRoughnessTexture.texture._textureId;\n }\n }\n const extensions = material.extensions;\n if (extensions) {\n const specularPBR = extensions[\"KHR_materials_pbrSpecularGlossiness\"];\n if (specularPBR) {\n const specularTexture = specularPBR.specularTexture;\n if (specularTexture !== null && specularTexture !== undefined) {\n // textureSetCfg.colorTextureId = ctx.gltfData.textures[specularColorTexture.index]._textureId;\n }\n const specularColorTexture = specularPBR.specularColorTexture;\n if (specularColorTexture !== null && specularColorTexture !== undefined) {\n textureSetCfg.colorTextureId = ctx.gltfData.textures[specularColorTexture.index]._textureId;\n }\n }\n }\n if (textureSetCfg.normalTextureId !== undefined ||\n textureSetCfg.occlusionTextureId !== undefined ||\n textureSetCfg.emissiveTextureId !== undefined ||\n textureSetCfg.colorTextureId !== undefined ||\n textureSetCfg.metallicRoughnessTextureId !== undefined) {\n textureSetCfg.textureSetId = `textureSet-${ctx.nextId++};`\n ctx.xktModel.createTextureSet(textureSetCfg);\n ctx.stats.numTextureSets++;\n return textureSetCfg.textureSetId;\n }\n return null;\n}\n\nfunction parseMaterialAttributes(ctx, material) { // Substitute RGBA for material, to use fast flat shading instead\n const extensions = material.extensions;\n const materialAttributes = {\n color: new Float32Array([1, 1, 1, 1]),\n opacity: 1,\n metallic: 0,\n roughness: 1\n };\n if (extensions) {\n const specularPBR = extensions[\"KHR_materials_pbrSpecularGlossiness\"];\n if (specularPBR) {\n const diffuseFactor = specularPBR.diffuseFactor;\n if (diffuseFactor !== null && diffuseFactor !== undefined) {\n materialAttributes.color.set(diffuseFactor);\n }\n }\n const common = extensions[\"KHR_materials_common\"];\n if (common) {\n const technique = common.technique;\n const values = common.values || {};\n const blinn = technique === \"BLINN\";\n const phong = technique === \"PHONG\";\n const lambert = technique === \"LAMBERT\";\n const diffuse = values.diffuse;\n if (diffuse && (blinn || phong || lambert)) {\n if (!utils.isString(diffuse)) {\n materialAttributes.color.set(diffuse);\n }\n }\n const transparency = values.transparency;\n if (transparency !== null && transparency !== undefined) {\n materialAttributes.opacity = transparency;\n }\n const transparent = values.transparent;\n if (transparent !== null && transparent !== undefined) {\n materialAttributes.opacity = transparent;\n }\n }\n }\n const metallicPBR = material.pbrMetallicRoughness;\n if (metallicPBR) {\n const baseColorFactor = metallicPBR.baseColorFactor;\n if (baseColorFactor) {\n materialAttributes.color[0] = baseColorFactor[0];\n materialAttributes.color[1] = baseColorFactor[1];\n materialAttributes.color[2] = baseColorFactor[2];\n materialAttributes.opacity = baseColorFactor[3];\n }\n const metallicFactor = metallicPBR.metallicFactor;\n if (metallicFactor !== null && metallicFactor !== undefined) {\n materialAttributes.metallic = metallicFactor;\n }\n const roughnessFactor = metallicPBR.roughnessFactor;\n if (roughnessFactor !== null && roughnessFactor !== undefined) {\n materialAttributes.roughness = roughnessFactor;\n }\n }\n return materialAttributes;\n}\n\nfunction parseDefaultScene(ctx) {\n const gltfData = ctx.gltfData;\n const scene = gltfData.scene || gltfData.scenes[0];\n if (!scene) {\n ctx.error(\"glTF has no default scene\");\n return;\n }\n parseScene(ctx, scene);\n}\n\nfunction parseScene(ctx, scene) {\n const nodes = scene.nodes;\n if (!nodes) {\n return;\n }\n for (let i = 0, len = nodes.length; i < len; i++) {\n const node = nodes[i];\n countMeshUsage(ctx, node);\n }\n for (let i = 0, len = nodes.length; i < len && !ctx.nodesHaveNames; i++) {\n const node = nodes[i];\n if (testIfNodesHaveNames(node)) {\n ctx.nodesHaveNames = true;\n }\n }\n if (!ctx.nodesHaveNames) {\n ctx.log(`Warning: No \"name\" attributes found on glTF scene nodes - objects in XKT may not be what you expect`);\n for (let i = 0, len = nodes.length; i < len; i++) {\n const node = nodes[i];\n parseNodesWithoutNames(ctx, node, 0, null);\n }\n } else {\n for (let i = 0, len = nodes.length; i < len; i++) {\n const node = nodes[i];\n parseNodesWithNames(ctx, node, 0, null);\n }\n }\n}\n\nfunction countMeshUsage(ctx, node, level = 0) {\n if (!node) {\n return;\n }\n const mesh = node.mesh;\n if (mesh) {\n mesh.instances = mesh.instances ? mesh.instances + 1 : 1;\n }\n if (node.children) {\n const children = node.children;\n for (let i = 0, len = children.length; i < len; i++) {\n const childNode = children[i];\n if (!childNode) {\n ctx.error(\"Node not found: \" + i);\n continue;\n }\n countMeshUsage(ctx, childNode, level + 1);\n }\n }\n}\n\nfunction testIfNodesHaveNames(node, level = 0) {\n if (!node) {\n return;\n }\n if (node.name) {\n return true;\n }\n if (node.children) {\n const children = node.children;\n for (let i = 0, len = children.length; i < len; i++) {\n const childNode = children[i];\n if (testIfNodesHaveNames(childNode, level + 1)) {\n return true;\n }\n }\n }\n return false;\n}\n\n/**\n * Parses a glTF node hierarchy that is known to NOT contain \"name\" attributes on the nodes.\n * Create a XKTMesh for each mesh primitive, and a single XKTEntity.\n */\nconst parseNodesWithoutNames = (function () {\n\n const meshIds = [];\n\n return function (ctx, node, depth, matrix) {\n if (!node) {\n return;\n }\n matrix = parseNodeMatrix(node, matrix);\n if (node.mesh) {\n parseNodeMesh(node, ctx, matrix, meshIds);\n }\n if (node.children) {\n const children = node.children;\n for (let i = 0, len = children.length; i < len; i++) {\n const childNode = children[i];\n parseNodesWithoutNames(ctx, childNode, depth + 1, matrix);\n }\n }\n if (depth === 0) {\n let entityId = \"entity-\" + ctx.nextId++;\n if (meshIds && meshIds.length > 0) {\n ctx.log(\"Creating XKTEntity with default ID: \" + entityId);\n ctx.xktModel.createEntity({\n entityId,\n meshIds\n });\n meshIds.length = 0;\n }\n ctx.stats.numObjects++;\n }\n }\n})();\n\n\n/**\n * Parses a glTF node hierarchy that is known to contain \"name\" attributes on the nodes.\n *\n * Create a XKTMesh for each mesh primitive, and XKTEntity for each named node.\n *\n * Following a depth-first traversal, each XKTEntity is created on post-visit of each named node,\n * and gets all the XKTMeshes created since the last XKTEntity created.\n */\nconst parseNodesWithNames = (function () {\n\n const objectIdStack = [];\n const meshIdsStack = [];\n let meshIds = null;\n\n return function (ctx, node, depth, matrix) {\n if (!node) {\n return;\n }\n matrix = parseNodeMatrix(node, matrix);\n if (node.name) {\n meshIds = [];\n let xktEntityId = node.name;\n if (!!xktEntityId && ctx.xktModel.entities[xktEntityId]) {\n ctx.log(`Warning: Two or more glTF nodes found with same 'name' attribute: '${xktEntityId} - will randomly-generating an object ID in XKT`);\n }\n while (!xktEntityId || ctx.xktModel.entities[xktEntityId]) {\n xktEntityId = \"entity-\" + ctx.nextId++;\n }\n objectIdStack.push(xktEntityId);\n meshIdsStack.push(meshIds);\n }\n if (meshIds && node.mesh) {\n parseNodeMesh(node, ctx, matrix, meshIds);\n }\n if (node.children) {\n const children = node.children;\n for (let i = 0, len = children.length; i < len; i++) {\n const childNode = children[i];\n parseNodesWithNames(ctx, childNode, depth + 1, matrix);\n }\n }\n const nodeName = node.name;\n if ((nodeName !== undefined && nodeName !== null) || depth === 0) {\n let xktEntityId = objectIdStack.pop();\n if (!xktEntityId) { // For when there are no nodes with names\n xktEntityId = \"entity-\" + ctx.nextId++;\n }\n let entityMeshIds = meshIdsStack.pop();\n if (meshIds && meshIds.length > 0) {\n ctx.xktModel.createEntity({\n entityId: xktEntityId,\n meshIds: entityMeshIds\n });\n }\n ctx.stats.numObjects++;\n meshIds = meshIdsStack.length > 0 ? meshIdsStack[meshIdsStack.length - 1] : null;\n }\n }\n})();\n\n/**\n * Parses transform at the given glTF node.\n *\n * @param node the glTF node\n * @param matrix Transfor matrix from parent nodes\n * @returns {*} Transform matrix for the node\n */\nfunction parseNodeMatrix(node, matrix) {\n if (!node) {\n return;\n }\n let localMatrix;\n if (node.matrix) {\n localMatrix = node.matrix;\n if (matrix) {\n matrix = math.mulMat4(matrix, localMatrix, math.mat4());\n } else {\n matrix = localMatrix;\n }\n }\n if (node.translation) {\n localMatrix = math.translationMat4v(node.translation);\n if (matrix) {\n matrix = math.mulMat4(matrix, localMatrix, math.mat4());\n } else {\n matrix = localMatrix;\n }\n }\n if (node.rotation) {\n localMatrix = math.quaternionToMat4(node.rotation);\n if (matrix) {\n matrix = math.mulMat4(matrix, localMatrix, math.mat4());\n } else {\n matrix = localMatrix;\n }\n }\n if (node.scale) {\n localMatrix = math.scalingMat4v(node.scale);\n if (matrix) {\n matrix = math.mulMat4(matrix, localMatrix, math.mat4());\n } else {\n matrix = localMatrix;\n }\n }\n return matrix;\n}\n\nfunction createPrimitiveHash(primitive) {\n const hash = [];\n const attributes = primitive.attributes;\n if (attributes) {\n for (let key in attributes) {\n hash.push(attributes[key].id);\n }\n }\n if (primitive.indices) {\n hash.push(primitive.indices.id);\n }\n return hash.join(\".\");\n}\n\n/**\n * Parses primitives referenced by the mesh belonging to the given node, creating XKTMeshes in the XKTModel.\n *\n * @param node glTF node\n * @param ctx Parsing context\n * @param matrix Matrix for the XKTMeshes\n * @param meshIds returns IDs of the new XKTMeshes\n */\nfunction parseNodeMesh(node, ctx, matrix, meshIds) {\n if (!node) {\n return;\n }\n const mesh = node.mesh;\n if (!mesh) {\n return;\n }\n const numPrimitives = mesh.primitives.length;\n if (numPrimitives > 0) {\n for (let i = 0; i < numPrimitives; i++) {\n try {\n const primitive = mesh.primitives[i];\n const geometryId = createPrimitiveHash(primitive);\n if (!ctx.geometriesCreated[geometryId]) {\n const geometryCfg = {\n geometryId\n };\n switch (primitive.mode) {\n case 0: // POINTS\n geometryCfg.primitiveType = \"points\";\n break;\n case 1: // LINES\n geometryCfg.primitiveType = \"lines\";\n break;\n case 2: // LINE_LOOP\n geometryCfg.primitiveType = \"line-loop\";\n break;\n case 3: // LINE_STRIP\n geometryCfg.primitiveType = \"line-strip\";\n break;\n case 4: // TRIANGLES\n geometryCfg.primitiveType = \"triangles\";\n break;\n case 5: // TRIANGLE_STRIP\n geometryCfg.primitiveType = \"triangle-strip\";\n break;\n case 6: // TRIANGLE_FAN\n geometryCfg.primitiveType = \"triangle-fan\";\n break;\n default:\n geometryCfg.primitiveType = \"triangles\";\n }\n const POSITION = primitive.attributes.POSITION;\n if (!POSITION) {\n continue;\n }\n geometryCfg.positions = primitive.attributes.POSITION.value;\n ctx.stats.numVertices += geometryCfg.positions.length / 3;\n if (ctx.includeNormals) {\n if (primitive.attributes.NORMAL) {\n geometryCfg.normals = primitive.attributes.NORMAL.value;\n ctx.stats.numNormals += geometryCfg.normals.length / 3;\n }\n }\n if (primitive.attributes.COLOR_0) {\n geometryCfg.colorsCompressed = primitive.attributes.COLOR_0.value;\n }\n if (ctx.includeTextures) {\n if (primitive.attributes.TEXCOORD_0) {\n geometryCfg.uvs = primitive.attributes.TEXCOORD_0.value;\n ctx.stats.numUVs += geometryCfg.uvs.length / 2;\n }\n }\n if (primitive.indices) {\n geometryCfg.indices = primitive.indices.value;\n if (primitive.mode === 4) {\n ctx.stats.numTriangles += geometryCfg.indices.length / 3;\n }\n }\n ctx.xktModel.createGeometry(geometryCfg);\n ctx.geometriesCreated[geometryId] = true;\n ctx.stats.numGeometries++;\n }\n const xktMeshId = ctx.nextId++;\n const meshCfg = {\n meshId: xktMeshId,\n geometryId,\n matrix: matrix ? matrix.slice() : math.identityMat4()\n };\n const material = primitive.material;\n if (material) {\n meshCfg.textureSetId = material._textureSetId;\n meshCfg.color = material._attributes.color;\n meshCfg.opacity = material._attributes.opacity;\n meshCfg.metallic = material._attributes.metallic;\n meshCfg.roughness = material._attributes.roughness;\n } else {\n meshCfg.color = [1.0, 1.0, 1.0];\n meshCfg.opacity = 1.0;\n }\n ctx.xktModel.createMesh(meshCfg);\n meshIds.push(xktMeshId);\n } catch (e) {\n console.log(e);\n }\n }\n }\n}\n\nexport {parseGLTFIntoXKTModel};","import {utils} from \"../XKTModel/lib/utils.js\";\nimport {math} from \"../lib/math.js\";\n\nconst atob2 = (typeof atob !== 'undefined') ? atob : a => Buffer.from(a, 'base64').toString('binary');\n\nconst WEBGL_COMPONENT_TYPES = {\n 5120: Int8Array,\n 5121: Uint8Array,\n 5122: Int16Array,\n 5123: Uint16Array,\n 5125: Uint32Array,\n 5126: Float32Array\n};\n\nconst WEBGL_TYPE_SIZES = {\n 'SCALAR': 1,\n 'VEC2': 2,\n 'VEC3': 3,\n 'VEC4': 4,\n 'MAT2': 4,\n 'MAT3': 9,\n 'MAT4': 16\n};\n\n/**\n * @desc Parses glTF JSON into an {@link XKTModel}, without ````.glb```` and textures.\n *\n * * Lightweight JSON-based glTF parser which ignores textures\n * * For texture and ````.glb```` support, see {@link parseGLTFIntoXKTModel}\n *\n * ## Usage\n *\n * In the example below we'll create an {@link XKTModel}, then load a glTF model into it.\n *\n * ````javascript\n * utils.loadJSON(\"./models/gltf/duplex/scene.gltf\", async (data) => {\n *\n * const xktModel = new XKTModel();\n *\n * parseGLTFJSONIntoXKTModel({\n * data,\n * xktModel,\n * log: (msg) => { console.log(msg); }\n * }).then(()=>{\n * xktModel.finalize();\n * },\n * (msg) => {\n * console.error(msg);\n * });\n * });\n * ````\n *\n * @param {Object} params Parsing parameters.\n * @param {Object} params.data The glTF JSON.\n * @param {Object} [params.metaModelData] Metamodel JSON. If this is provided, then parsing is able to ensure that the XKTObjects it creates will fit the metadata properly.\n * @param {XKTModel} params.xktModel XKTModel to parse into.\n * @param {Boolean} [params.includeNormals=false] Whether to parse normals. When false, the parser will ignore the glTF\n * geometry normals, and the glTF data will rely on the xeokit ````Viewer```` to automatically generate them. This has\n * the limitation that the normals will be face-aligned, and therefore the ````Viewer```` will only be able to render\n * a flat-shaded representation of the glTF.\n * @param {Boolean} [params.reuseGeometries=true] When true, the parser will enable geometry reuse within the XKTModel. When false,\n * will automatically \"expand\" all reused geometries into duplicate copies. This has the drawback of increasing the XKT\n * file size (~10-30% for typical models), but can make the model more responsive in the xeokit Viewer, especially if the model\n * has excessive geometry reuse. An example of excessive geometry reuse would be if we have 4000 geometries that are\n * shared amongst 2000 objects, ie. a large number of geometries with a low amount of reuse, which can present a\n * pathological performance case for xeokit's underlying graphics APIs (WebGL, WebGPU etc).\n * @param {function} [params.getAttachment] Callback through which to fetch attachments, if the glTF has them.\n * @param {Object} [params.stats] Collects statistics.\n * @param {function} [params.log] Logging callback.\n * @returns {Promise}\n */\nfunction parseGLTFJSONIntoXKTModel({\n data,\n xktModel,\n metaModelData,\n includeNormals,\n reuseGeometries,\n getAttachment,\n stats = {},\n log\n }) {\n\n if (log) {\n log(\"Using parser: parseGLTFJSONIntoXKTModel\");\n }\n\n return new Promise(function (resolve, reject) {\n\n if (!data) {\n reject(\"Argument expected: data\");\n return;\n }\n\n if (!xktModel) {\n reject(\"Argument expected: xktModel\");\n return;\n }\n\n stats.sourceFormat = \"glTF\";\n stats.schemaVersion = \"2.0\";\n stats.title = \"\";\n stats.author = \"\";\n stats.created = \"\";\n stats.numTriangles = 0;\n stats.numVertices = 0;\n stats.numNormals = 0;\n stats.numObjects = 0;\n stats.numGeometries = 0;\n\n const ctx = {\n gltf: data,\n metaModelCorrections: metaModelData ? getMetaModelCorrections(metaModelData) : null,\n getAttachment: getAttachment || (() => {\n throw new Error('You must define getAttachment() method to convert glTF with external resources')\n }),\n log: (log || function (msg) {\n }),\n xktModel,\n includeNormals,\n createXKTGeometryIds: {},\n nextMeshId: 0,\n reuseGeometries: (reuseGeometries !== false),\n stats\n };\n\n ctx.log(`Parsing normals: ${ctx.includeNormals ? \"enabled\" : \"disabled\"}`);\n\n parseBuffers(ctx).then(() => {\n\n parseBufferViews(ctx);\n freeBuffers(ctx);\n parseMaterials(ctx);\n parseDefaultScene(ctx);\n\n resolve();\n\n }, (errMsg) => {\n reject(errMsg);\n });\n });\n}\n\nfunction getMetaModelCorrections(metaModelData) {\n const eachRootStats = {};\n const eachChildRoot = {};\n const metaObjects = metaModelData.metaObjects || [];\n const metaObjectsMap = {};\n for (let i = 0, len = metaObjects.length; i < len; i++) {\n const metaObject = metaObjects[i];\n metaObjectsMap[metaObject.id] = metaObject;\n }\n for (let i = 0, len = metaObjects.length; i < len; i++) {\n const metaObject = metaObjects[i];\n if (metaObject.parent !== undefined && metaObject.parent !== null) {\n const metaObjectParent = metaObjectsMap[metaObject.parent];\n if (metaObject.type === metaObjectParent.type) {\n let rootMetaObject = metaObjectParent;\n while (rootMetaObject.parent && metaObjectsMap[rootMetaObject.parent].type === rootMetaObject.type) {\n rootMetaObject = metaObjectsMap[rootMetaObject.parent];\n }\n const rootStats = eachRootStats[rootMetaObject.id] || (eachRootStats[rootMetaObject.id] = {\n numChildren: 0,\n countChildren: 0\n });\n rootStats.numChildren++;\n eachChildRoot[metaObject.id] = rootMetaObject;\n } else {\n\n }\n }\n }\n const metaModelCorrections = {\n metaObjectsMap,\n eachRootStats,\n eachChildRoot\n };\n return metaModelCorrections;\n}\n\nfunction parseBuffers(ctx) { // Parses geometry buffers into temporary \"_buffer\" Unit8Array properties on the glTF \"buffer\" elements\n const buffers = ctx.gltf.buffers;\n if (buffers) {\n return Promise.all(buffers.map(buffer => parseBuffer(ctx, buffer)));\n } else {\n return new Promise(function (resolve, reject) {\n resolve();\n });\n }\n}\n\nfunction parseBuffer(ctx, bufferInfo) {\n return new Promise(function (resolve, reject) {\n // Allow a shortcut where the glTF buffer is \"enrichened\" with direct\n // access to the data-arrayBuffer, w/out needing to either:\n // - read the file indicated by the \".uri\" component of the buffer\n // - base64-decode the encoded data in the \".uri\" component\n if (bufferInfo._arrayBuffer) {\n bufferInfo._buffer = bufferInfo._arrayBuffer;\n resolve(bufferInfo);\n return;\n }\n // Otherwise, proceed with \"standard-glTF\" .uri component.\n const uri = bufferInfo.uri;\n if (!uri) {\n reject('gltf/handleBuffer missing uri in ' + JSON.stringify(bufferInfo));\n return;\n }\n parseArrayBuffer(ctx, uri).then((arrayBuffer) => {\n bufferInfo._buffer = arrayBuffer;\n resolve(arrayBuffer);\n }, (errMsg) => {\n reject(errMsg);\n })\n });\n}\n\nfunction parseArrayBuffer(ctx, uri) {\n return new Promise(function (resolve, reject) {\n const dataUriRegex = /^data:(.*?)(;base64)?,(.*)$/; // Check for data: URI\n const dataUriRegexResult = uri.match(dataUriRegex);\n if (dataUriRegexResult) { // Safari can't handle data URIs through XMLHttpRequest\n const isBase64 = !!dataUriRegexResult[2];\n let data = dataUriRegexResult[3];\n data = decodeURIComponent(data);\n if (isBase64) {\n data = atob2(data);\n }\n const buffer = new ArrayBuffer(data.length);\n const view = new Uint8Array(buffer);\n for (let i = 0; i < data.length; i++) {\n view[i] = data.charCodeAt(i);\n }\n resolve(buffer);\n } else { // Uri is a path to a file\n ctx.getAttachment(uri).then(\n (arrayBuffer) => {\n resolve(arrayBuffer);\n },\n (errMsg) => {\n reject(errMsg);\n });\n }\n });\n}\n\nfunction parseBufferViews(ctx) { // Parses our temporary \"_buffer\" properties into \"_buffer\" properties on glTF \"bufferView\" elements\n const bufferViewsInfo = ctx.gltf.bufferViews;\n if (bufferViewsInfo) {\n for (let i = 0, len = bufferViewsInfo.length; i < len; i++) {\n parseBufferView(ctx, bufferViewsInfo[i]);\n }\n }\n}\n\nfunction parseBufferView(ctx, bufferViewInfo) {\n const buffer = ctx.gltf.buffers[bufferViewInfo.buffer];\n bufferViewInfo._typedArray = null;\n const byteLength = bufferViewInfo.byteLength || 0;\n const byteOffset = bufferViewInfo.byteOffset || 0;\n bufferViewInfo._buffer = buffer._buffer.slice(byteOffset, byteOffset + byteLength);\n}\n\nfunction freeBuffers(ctx) { // Deletes the \"_buffer\" properties from the glTF \"buffer\" elements, to save memory\n const buffers = ctx.gltf.buffers;\n if (buffers) {\n for (let i = 0, len = buffers.length; i < len; i++) {\n buffers[i]._buffer = null;\n }\n }\n}\n\nfunction parseMaterials(ctx) {\n const materialsInfo = ctx.gltf.materials;\n if (materialsInfo) {\n for (let i = 0, len = materialsInfo.length; i < len; i++) {\n const materialInfo = materialsInfo[i];\n const material = parseMaterial(ctx, materialInfo);\n materialInfo._materialData = material;\n }\n }\n}\n\nfunction parseMaterial(ctx, materialInfo) { // Attempts to extract an RGBA color for a glTF material\n const material = {\n color: new Float32Array([1, 1, 1]),\n opacity: 1.0,\n metallic: 0,\n roughness: 1\n };\n const extensions = materialInfo.extensions;\n if (extensions) {\n const specularPBR = extensions[\"KHR_materials_pbrSpecularGlossiness\"];\n if (specularPBR) {\n const diffuseFactor = specularPBR.diffuseFactor;\n if (diffuseFactor !== null && diffuseFactor !== undefined) {\n material.color[0] = diffuseFactor[0];\n material.color[1] = diffuseFactor[1];\n material.color[2] = diffuseFactor[2];\n }\n }\n const common = extensions[\"KHR_materials_common\"];\n if (common) {\n const technique = common.technique;\n const values = common.values || {};\n const blinn = technique === \"BLINN\";\n const phong = technique === \"PHONG\";\n const lambert = technique === \"LAMBERT\";\n const diffuse = values.diffuse;\n if (diffuse && (blinn || phong || lambert)) {\n if (!utils.isString(diffuse)) {\n material.color[0] = diffuse[0];\n material.color[1] = diffuse[1];\n material.color[2] = diffuse[2];\n }\n }\n const transparency = values.transparency;\n if (transparency !== null && transparency !== undefined) {\n material.opacity = transparency;\n }\n const transparent = values.transparent;\n if (transparent !== null && transparent !== undefined) {\n material.opacity = transparent;\n }\n }\n }\n const metallicPBR = materialInfo.pbrMetallicRoughness;\n if (metallicPBR) {\n const baseColorFactor = metallicPBR.baseColorFactor;\n if (baseColorFactor) {\n material.color[0] = baseColorFactor[0];\n material.color[1] = baseColorFactor[1];\n material.color[2] = baseColorFactor[2];\n material.opacity = baseColorFactor[3];\n }\n const metallicFactor = metallicPBR.metallicFactor;\n if (metallicFactor !== null && metallicFactor !== undefined) {\n material.metallic = metallicFactor;\n }\n const roughnessFactor = metallicPBR.roughnessFactor;\n if (roughnessFactor !== null && roughnessFactor !== undefined) {\n material.roughness = roughnessFactor;\n }\n }\n return material;\n}\n\nfunction parseDefaultScene(ctx) {\n const scene = ctx.gltf.scene || 0;\n const defaultSceneInfo = ctx.gltf.scenes[scene];\n if (!defaultSceneInfo) {\n throw new Error(\"glTF has no default scene\");\n }\n parseScene(ctx, defaultSceneInfo);\n}\n\n\nfunction parseScene(ctx, sceneInfo) {\n const nodes = sceneInfo.nodes;\n if (!nodes) {\n return;\n }\n for (let i = 0, len = nodes.length; i < len; i++) {\n const glTFNode = ctx.gltf.nodes[nodes[i]];\n if (glTFNode) {\n parseNode(ctx, glTFNode, 0, null);\n }\n }\n}\n\nlet deferredMeshIds = [];\n\nfunction parseNode(ctx, glTFNode, depth, matrix) {\n\n const gltf = ctx.gltf;\n const xktModel = ctx.xktModel;\n\n let localMatrix;\n\n if (glTFNode.matrix) {\n localMatrix = glTFNode.matrix;\n if (matrix) {\n matrix = math.mulMat4(matrix, localMatrix, math.mat4());\n } else {\n matrix = localMatrix;\n }\n }\n\n if (glTFNode.translation) {\n localMatrix = math.translationMat4v(glTFNode.translation);\n if (matrix) {\n matrix = math.mulMat4(matrix, localMatrix, localMatrix);\n } else {\n matrix = localMatrix;\n }\n }\n\n if (glTFNode.rotation) {\n localMatrix = math.quaternionToMat4(glTFNode.rotation);\n if (matrix) {\n matrix = math.mulMat4(matrix, localMatrix, localMatrix);\n } else {\n matrix = localMatrix;\n }\n }\n\n if (glTFNode.scale) {\n localMatrix = math.scalingMat4v(glTFNode.scale);\n if (matrix) {\n matrix = math.mulMat4(matrix, localMatrix, localMatrix);\n } else {\n matrix = localMatrix;\n }\n }\n\n const gltfMeshId = glTFNode.mesh;\n\n if (gltfMeshId !== undefined) {\n\n const meshInfo = gltf.meshes[gltfMeshId];\n\n if (meshInfo) {\n\n const numPrimitivesInMesh = meshInfo.primitives.length;\n\n if (numPrimitivesInMesh > 0) {\n\n for (let i = 0; i < numPrimitivesInMesh; i++) {\n\n const primitiveInfo = meshInfo.primitives[i];\n\n const geometryHash = createPrimitiveGeometryHash(primitiveInfo);\n\n let xktGeometryId = ctx.createXKTGeometryIds[geometryHash];\n\n if ((!ctx.reuseGeometries) || !xktGeometryId) {\n\n xktGeometryId = \"geometry-\" + ctx.nextMeshId++\n\n const geometryArrays = {};\n\n parsePrimitiveGeometry(ctx, primitiveInfo, geometryArrays);\n\n const colors = geometryArrays.colors;\n\n let colorsCompressed;\n\n if (geometryArrays.colors) {\n colorsCompressed = [];\n for (let j = 0, lenj = colors.length; j < lenj; j += 4) {\n colorsCompressed.push(colors[j + 0]);\n colorsCompressed.push(colors[j + 1]);\n colorsCompressed.push(colors[j + 2]);\n colorsCompressed.push(255);\n }\n }\n\n xktModel.createGeometry({\n geometryId: xktGeometryId,\n primitiveType: geometryArrays.primitive,\n positions: geometryArrays.positions,\n normals: ctx.includeNormals ? geometryArrays.normals : null,\n colorsCompressed: colorsCompressed,\n indices: geometryArrays.indices\n });\n\n ctx.stats.numGeometries++;\n ctx.stats.numVertices += geometryArrays.positions ? geometryArrays.positions.length / 3 : 0;\n ctx.stats.numNormals += (ctx.includeNormals && geometryArrays.normals) ? geometryArrays.normals.length / 3 : 0;\n ctx.stats.numTriangles += geometryArrays.indices ? geometryArrays.indices.length / 3 : 0;\n\n ctx.createXKTGeometryIds[geometryHash] = xktGeometryId;\n } else {\n// Geometry reused\n }\n\n const materialIndex = primitiveInfo.material;\n const materialInfo = (materialIndex !== null && materialIndex !== undefined) ? gltf.materials[materialIndex] : null;\n const color = materialInfo ? materialInfo._materialData.color : new Float32Array([1.0, 1.0, 1.0, 1.0]);\n const opacity = materialInfo ? materialInfo._materialData.opacity : 1.0;\n const metallic = materialInfo ? materialInfo._materialData.metallic : 0.0;\n const roughness = materialInfo ? materialInfo._materialData.roughness : 1.0;\n\n const xktMeshId = \"mesh-\" + ctx.nextMeshId++;\n\n xktModel.createMesh({\n meshId: xktMeshId,\n geometryId: xktGeometryId,\n matrix: matrix ? matrix.slice() : math.identityMat4(),\n color: color,\n opacity: opacity,\n metallic: metallic,\n roughness: roughness\n });\n\n deferredMeshIds.push(xktMeshId);\n }\n }\n }\n }\n\n\n if (glTFNode.children) {\n const children = glTFNode.children;\n for (let i = 0, len = children.length; i < len; i++) {\n const childNodeIdx = children[i];\n const childGLTFNode = gltf.nodes[childNodeIdx];\n if (!childGLTFNode) {\n console.warn('Node not found: ' + i);\n continue;\n }\n parseNode(ctx, childGLTFNode, depth + 1, matrix);\n }\n }\n\n // Post-order visit scene node\n\n const nodeName = glTFNode.name;\n if (((nodeName !== undefined && nodeName !== null) || depth === 0) && deferredMeshIds.length > 0) {\n if (nodeName === undefined || nodeName === null) {\n ctx.log(`[parseGLTFJSONIntoXKTModel] Warning: 'name' properties not found on glTF scene nodes - will randomly-generate object IDs in XKT`);\n }\n let xktEntityId = nodeName; // Fall back on generated ID when `name` not found on glTF scene node(s)\n if (xktEntityId === undefined || xktEntityId === null) {\n if (xktModel.entities[xktEntityId]) {\n ctx.error(\"Two or more glTF nodes found with same 'name' attribute: '\" + nodeName + \"'\");\n }\n while (!xktEntityId || xktModel.entities[xktEntityId]) {\n xktEntityId = \"entity-\" + ctx.nextId++;\n }\n }\n if (ctx.metaModelCorrections) { // Merging meshes into XKTObjects that map to metaobjects\n const rootMetaObject = ctx.metaModelCorrections.eachChildRoot[xktEntityId];\n if (rootMetaObject) {\n const rootMetaObjectStats = ctx.metaModelCorrections.eachRootStats[rootMetaObject.id];\n rootMetaObjectStats.countChildren++;\n if (rootMetaObjectStats.countChildren >= rootMetaObjectStats.numChildren) {\n xktModel.createEntity({\n entityId: rootMetaObject.id,\n meshIds: deferredMeshIds\n });\n ctx.stats.numObjects++;\n deferredMeshIds = [];\n }\n } else {\n const metaObject = ctx.metaModelCorrections.metaObjectsMap[xktEntityId];\n if (metaObject) {\n xktModel.createEntity({\n entityId: xktEntityId,\n meshIds: deferredMeshIds\n });\n ctx.stats.numObjects++;\n deferredMeshIds = [];\n }\n }\n } else { // Create an XKTObject from the meshes at each named glTF node, don't care about metaobjects\n xktModel.createEntity({\n entityId: xktEntityId,\n meshIds: deferredMeshIds\n });\n ctx.stats.numObjects++;\n deferredMeshIds = [];\n }\n }\n}\n\nfunction createPrimitiveGeometryHash(primitiveInfo) {\n const attributes = primitiveInfo.attributes;\n if (!attributes) {\n return \"empty\";\n }\n const mode = primitiveInfo.mode;\n const material = primitiveInfo.material;\n const indices = primitiveInfo.indices;\n const positions = primitiveInfo.attributes.POSITION;\n const normals = primitiveInfo.attributes.NORMAL;\n const colors = primitiveInfo.attributes.COLOR_0;\n const uv = primitiveInfo.attributes.TEXCOORD_0;\n return [\n mode,\n // material,\n (indices !== null && indices !== undefined) ? indices : \"-\",\n (positions !== null && positions !== undefined) ? positions : \"-\",\n (normals !== null && normals !== undefined) ? normals : \"-\",\n (colors !== null && colors !== undefined) ? colors : \"-\",\n (uv !== null && uv !== undefined) ? uv : \"-\"\n ].join(\";\");\n}\n\nfunction parsePrimitiveGeometry(ctx, primitiveInfo, geometryArrays) {\n const attributes = primitiveInfo.attributes;\n if (!attributes) {\n return;\n }\n switch (primitiveInfo.mode) {\n case 0: // POINTS\n geometryArrays.primitive = \"points\";\n break;\n case 1: // LINES\n geometryArrays.primitive = \"lines\";\n break;\n case 2: // LINE_LOOP\n // TODO: convert\n geometryArrays.primitive = \"lines\";\n break;\n case 3: // LINE_STRIP\n // TODO: convert\n geometryArrays.primitive = \"lines\";\n break;\n case 4: // TRIANGLES\n geometryArrays.primitive = \"triangles\";\n break;\n case 5: // TRIANGLE_STRIP\n // TODO: convert\n console.log(\"TRIANGLE_STRIP\");\n geometryArrays.primitive = \"triangles\";\n break;\n case 6: // TRIANGLE_FAN\n // TODO: convert\n console.log(\"TRIANGLE_FAN\");\n geometryArrays.primitive = \"triangles\";\n break;\n default:\n geometryArrays.primitive = \"triangles\";\n }\n const accessors = ctx.gltf.accessors;\n const indicesIndex = primitiveInfo.indices;\n if (indicesIndex !== null && indicesIndex !== undefined) {\n const accessorInfo = accessors[indicesIndex];\n geometryArrays.indices = parseAccessorTypedArray(ctx, accessorInfo);\n }\n const positionsIndex = attributes.POSITION;\n if (positionsIndex !== null && positionsIndex !== undefined) {\n const accessorInfo = accessors[positionsIndex];\n geometryArrays.positions = parseAccessorTypedArray(ctx, accessorInfo);\n }\n const normalsIndex = attributes.NORMAL;\n if (normalsIndex !== null && normalsIndex !== undefined) {\n const accessorInfo = accessors[normalsIndex];\n geometryArrays.normals = parseAccessorTypedArray(ctx, accessorInfo);\n }\n const colorsIndex = attributes.COLOR_0;\n if (colorsIndex !== null && colorsIndex !== undefined) {\n const accessorInfo = accessors[colorsIndex];\n geometryArrays.colors = parseAccessorTypedArray(ctx, accessorInfo);\n }\n}\n\nfunction parseAccessorTypedArray(ctx, accessorInfo) {\n const bufferView = ctx.gltf.bufferViews[accessorInfo.bufferView];\n const itemSize = WEBGL_TYPE_SIZES[accessorInfo.type];\n const TypedArray = WEBGL_COMPONENT_TYPES[accessorInfo.componentType];\n const elementBytes = TypedArray.BYTES_PER_ELEMENT; // For VEC3: itemSize is 3, elementBytes is 4, itemBytes is 12.\n const itemBytes = elementBytes * itemSize;\n if (accessorInfo.byteStride && accessorInfo.byteStride !== itemBytes) { // The buffer is not interleaved if the stride is the item size in bytes.\n throw new Error(\"interleaved buffer!\"); // TODO\n } else {\n return new TypedArray(bufferView._buffer, accessorInfo.byteOffset || 0, accessorInfo.count * itemSize);\n }\n}\n\nexport {parseGLTFJSONIntoXKTModel};\n","/**\n * @desc Parses IFC STEP file data into an {@link XKTModel}.\n *\n * This function uses [web-ifc](https://github.com/tomvandig/web-ifc) to parse the IFC, which relies on a\n * WASM file to do the parsing.\n *\n * Depending on how we use this function, we may need to provide it with a path to the directory where that WASM file is stored.\n *\n * This function is tested with web-ifc version 0.0.34.\n *\n * ## Usage\n *\n * In the example below we'll create an {@link XKTModel}, then load an IFC model into it.\n *\n * ````javascript\n * import {XKTModel, parseIFCIntoXKTModel, writeXKTModelToArrayBuffer} from \"xeokit-convert.es.js\";\n *\n * import * as WebIFC from \"web-ifc-api.js\";\n *\n * utils.loadArraybuffer(\"rac_advanced_sample_project.ifc\", async (data) => {\n *\n * const xktModel = new XKTModel();\n *\n * parseIFCIntoXKTModel({\n * WebIFC,\n * data,\n * xktModel,\n * wasmPath: \"../dist/\",\n * autoNormals: true,\n * log: (msg) => { console.log(msg); }\n * }).then(()=>{\n * xktModel.finalize();\n * },\n * (msg) => {\n * console.error(msg);\n * });\n * });\n * ````\n *\n * @param {Object} params Parsing params.\n * @param {Object} params.WebIFC The WebIFC library. We pass this in as an external dependency, in order to give the\n * caller the choice of whether to use the Browser or NodeJS version.\n * @param {ArrayBuffer} [params.data] IFC file data.\n * @param {XKTModel} [params.xktModel] XKTModel to parse into.\n * @param {Boolean} [params.autoNormals=true] When true, the parser will ignore the IFC geometry normals, and the IFC\n * data will rely on the xeokit ````Viewer```` to automatically generate them. This has the limitation that the\n * normals will be face-aligned, and therefore the ````Viewer```` will only be able to render a flat-shaded representation\n * of the IFC model. This is ````true```` by default, because IFC models tend to look acceptable with flat-shading,\n * and we always want to minimize IFC model size wherever possible.\n * @param {String[]} [params.includeTypes] Option to only convert objects of these types.\n * @param {String[]} [params.excludeTypes] Option to never convert objects of these types.\n * @param {String} params.wasmPath Path to ````web-ifc.wasm````, required by this function.\n * @param {Object} [params.stats={}] Collects statistics.\n * @param {function} [params.log] Logging callback.\n * @returns {Promise} Resolves when IFC has been parsed.\n */\nfunction parseIFCIntoXKTModel({\n WebIFC,\n data,\n xktModel,\n autoNormals = true,\n includeTypes,\n excludeTypes,\n wasmPath,\n stats = {},\n log\n }) {\n\n if (log) {\n log(\"Using parser: parseIFCIntoXKTModel\");\n }\n\n return new Promise(function (resolve, reject) {\n\n if (!data) {\n reject(\"Argument expected: data\");\n return;\n }\n\n if (!xktModel) {\n reject(\"Argument expected: xktModel\");\n return;\n }\n\n if (!wasmPath) {\n reject(\"Argument expected: wasmPath\");\n return;\n }\n\n const ifcAPI = new WebIFC.IfcAPI();\n\n if (wasmPath) {\n ifcAPI.SetWasmPath(wasmPath);\n }\n\n ifcAPI.Init().then(() => {\n\n const dataArray = new Uint8Array(data);\n\n const modelID = ifcAPI.OpenModel(dataArray);\n\n stats.sourceFormat = \"IFC\";\n stats.schemaVersion = \"\";\n stats.title = \"\";\n stats.author = \"\";\n stats.created = \"\";\n stats.numMetaObjects = 0;\n stats.numPropertySets = 0;\n stats.numObjects = 0;\n stats.numGeometries = 0;\n stats.numTriangles = 0;\n stats.numVertices = 0;\n\n const ctx = {\n WebIFC,\n modelID,\n ifcAPI,\n xktModel,\n autoNormals,\n log: (log || function (msg) {\n }),\n nextId: 0,\n stats\n };\n\n if (includeTypes) {\n ctx.includeTypes = {};\n for (let i = 0, len = includeTypes.length; i < len; i++) {\n ctx.includeTypes[includeTypes[i]] = true;\n }\n }\n\n if (excludeTypes) {\n ctx.excludeTypes = {};\n for (let i = 0, len = excludeTypes.length; i < len; i++) {\n ctx.excludeTypes[excludeTypes[i]] = true;\n }\n }\n\n const lines = ctx.ifcAPI.GetLineIDsWithType(modelID, WebIFC.IFCPROJECT);\n const ifcProjectId = lines.get(0);\n const ifcProject = ctx.ifcAPI.GetLine(modelID, ifcProjectId);\n\n ctx.xktModel.schema = \"\";\n ctx.xktModel.modelId = \"\" + modelID;\n ctx.xktModel.projectId = \"\" + ifcProjectId;\n\n parseMetadata(ctx);\n parseGeometry(ctx);\n parsePropertySets(ctx);\n\n resolve();\n\n }).catch((e) => {\n\n reject(e);\n })\n });\n}\n\nfunction parsePropertySets(ctx) {\n\n const lines = ctx.ifcAPI.GetLineIDsWithType(ctx.modelID, ctx.WebIFC.IFCRELDEFINESBYPROPERTIES);\n\n for (let i = 0; i < lines.size(); i++) {\n\n let relID = lines.get(i);\n\n let rel = ctx.ifcAPI.GetLine(ctx.modelID, relID, true);\n\n if (rel) {\n\n const relatingPropertyDefinition = rel.RelatingPropertyDefinition;\n if (!relatingPropertyDefinition) {\n continue;\n }\n\n const propertySetId = relatingPropertyDefinition.GlobalId.value;\n\n const relatedObjects = rel.RelatedObjects;\n if (relatedObjects) {\n for (let i = 0, len = relatedObjects.length; i < len; i++) {\n const relatedObject = relatedObjects[i];\n const metaObjectId = relatedObject.GlobalId.value;\n const metaObject = ctx.xktModel.metaObjects[metaObjectId];\n if (metaObject) {\n if (!metaObject.propertySetIds) {\n metaObject.propertySetIds = [];\n }\n metaObject.propertySetIds.push(propertySetId);\n }\n }\n }\n\n const props = relatingPropertyDefinition.HasProperties;\n if (props && props.length > 0) {\n const propertySetType = \"Default\";\n const propertySetName = relatingPropertyDefinition.Name.value;\n const properties = [];\n for (let i = 0, len = props.length; i < len; i++) {\n const prop = props[i];\n const name = prop.Name;\n const nominalValue = prop.NominalValue;\n if (name && nominalValue) {\n const property = {\n name: name.value,\n type: nominalValue.type,\n value: nominalValue.value,\n valueType: nominalValue.valueType\n };\n if (prop.Description) {\n property.description = prop.Description.value;\n } else if (nominalValue.description) {\n property.description = nominalValue.description;\n }\n properties.push(property);\n }\n }\n ctx.xktModel.createPropertySet({propertySetId, propertySetType, propertySetName, properties});\n ctx.stats.numPropertySets++;\n }\n }\n }\n}\n\nfunction parseMetadata(ctx) {\n\n const lines = ctx.ifcAPI.GetLineIDsWithType(ctx.modelID, ctx.WebIFC.IFCPROJECT);\n const ifcProjectId = lines.get(0);\n const ifcProject = ctx.ifcAPI.GetLine(ctx.modelID, ifcProjectId);\n\n parseSpatialChildren(ctx, ifcProject);\n}\n\nfunction parseSpatialChildren(ctx, ifcElement, parentMetaObjectId) {\n\n const metaObjectType = ifcElement.__proto__.constructor.name;\n\n if (ctx.includeTypes && (!ctx.includeTypes[metaObjectType])) {\n return;\n }\n\n if (ctx.excludeTypes && ctx.excludeTypes[metaObjectType]) {\n return;\n }\n\n createMetaObject(ctx, ifcElement, parentMetaObjectId);\n\n const metaObjectId = ifcElement.GlobalId.value;\n\n parseRelatedItemsOfType(\n ctx,\n ifcElement.expressID,\n 'RelatingObject',\n 'RelatedObjects',\n ctx.WebIFC.IFCRELAGGREGATES,\n metaObjectId);\n\n parseRelatedItemsOfType(\n ctx,\n ifcElement.expressID,\n 'RelatingStructure',\n 'RelatedElements',\n ctx.WebIFC.IFCRELCONTAINEDINSPATIALSTRUCTURE,\n metaObjectId);\n}\n\nfunction createMetaObject(ctx, ifcElement, parentMetaObjectId) {\n\n const metaObjectId = ifcElement.GlobalId.value;\n const propertySetIds = null;\n const metaObjectType = ifcElement.__proto__.constructor.name;\n const metaObjectName = (ifcElement.Name && ifcElement.Name.value !== \"\") ? ifcElement.Name.value : metaObjectType;\n\n ctx.xktModel.createMetaObject({metaObjectId, propertySetIds, metaObjectType, metaObjectName, parentMetaObjectId});\n ctx.stats.numMetaObjects++;\n}\n\nfunction parseRelatedItemsOfType(ctx, id, relation, related, type, parentMetaObjectId) {\n\n const lines = ctx.ifcAPI.GetLineIDsWithType(ctx.modelID, type);\n\n for (let i = 0; i < lines.size(); i++) {\n\n const relID = lines.get(i);\n const rel = ctx.ifcAPI.GetLine(ctx.modelID, relID);\n const relatedItems = rel[relation];\n\n let foundElement = false;\n\n if (Array.isArray(relatedItems)) {\n const values = relatedItems.map((item) => item.value);\n foundElement = values.includes(id);\n\n } else {\n foundElement = (relatedItems.value === id);\n }\n\n if (foundElement) {\n\n const element = rel[related];\n\n if (!Array.isArray(element)) {\n\n const ifcElement = ctx.ifcAPI.GetLine(ctx.modelID, element.value);\n\n parseSpatialChildren(ctx, ifcElement, parentMetaObjectId);\n\n } else {\n\n element.forEach((element2) => {\n\n const ifcElement = ctx.ifcAPI.GetLine(ctx.modelID, element2.value);\n\n parseSpatialChildren(ctx, ifcElement, parentMetaObjectId);\n });\n }\n }\n }\n}\n\nfunction parseGeometry(ctx) {\n\n // Parses the geometry and materials in the IFC, creates\n // XKTEntity, XKTMesh and XKTGeometry components within the XKTModel.\n\n const flatMeshes = ctx.ifcAPI.LoadAllGeometry(ctx.modelID);\n\n for (let i = 0, len = flatMeshes.size(); i < len; i++) {\n const flatMesh = flatMeshes.get(i);\n createObject(ctx, flatMesh);\n }\n\n // LoadAllGeometry does not return IFCSpace meshes\n // here is a workaround\n\n const lines = ctx.ifcAPI.GetLineIDsWithType(ctx.modelID, ctx.WebIFC.IFCSPACE);\n for (let j = 0, len = lines.size(); j < len; j++) {\n const ifcSpaceId = lines.get(j);\n const flatMesh = ctx.ifcAPI.GetFlatMesh(ctx.modelID, ifcSpaceId);\n createObject(ctx, flatMesh);\n }\n}\n\nfunction createObject(ctx, flatMesh) {\n\n const flatMeshExpressID = flatMesh.expressID;\n const placedGeometries = flatMesh.geometries;\n\n const meshIds = [];\n\n const properties = ctx.ifcAPI.GetLine(ctx.modelID, flatMeshExpressID);\n const entityId = properties.GlobalId.value;\n\n const metaObjectId = entityId;\n const metaObject = ctx.xktModel.metaObjects[metaObjectId];\n\n if (ctx.includeTypes && (!metaObject || (!ctx.includeTypes[metaObject.metaObjectType]))) {\n return;\n }\n\n if (ctx.excludeTypes && (!metaObject || ctx.excludeTypes[metaObject.metaObjectType])) {\n console.log(\"excluding: \" + metaObjectId)\n return;\n }\n\n for (let j = 0, lenj = placedGeometries.size(); j < lenj; j++) {\n\n const placedGeometry = placedGeometries.get(j);\n const geometryId = \"\" + placedGeometry.geometryExpressID;\n\n if (!ctx.xktModel.geometries[geometryId]) {\n\n const geometry = ctx.ifcAPI.GetGeometry(ctx.modelID, placedGeometry.geometryExpressID);\n const vertexData = ctx.ifcAPI.GetVertexArray(geometry.GetVertexData(), geometry.GetVertexDataSize());\n const indices = ctx.ifcAPI.GetIndexArray(geometry.GetIndexData(), geometry.GetIndexDataSize());\n\n // De-interleave vertex arrays\n\n const positions = [];\n const normals = [];\n\n for (let k = 0, lenk = vertexData.length / 6; k < lenk; k++) {\n positions.push(vertexData[k * 6 + 0]);\n positions.push(vertexData[k * 6 + 1]);\n positions.push(vertexData[k * 6 + 2]);\n }\n\n if (!ctx.autoNormals) {\n for (let k = 0, lenk = vertexData.length / 6; k < lenk; k++) {\n normals.push(vertexData[k * 6 + 3]);\n normals.push(vertexData[k * 6 + 4]);\n normals.push(vertexData[k * 6 + 5]);\n }\n }\n\n ctx.xktModel.createGeometry({\n geometryId: geometryId,\n primitiveType: \"triangles\",\n positions: positions,\n normals: ctx.autoNormals ? null : normals,\n indices: indices\n });\n\n ctx.stats.numGeometries++;\n ctx.stats.numVertices += (positions.length / 3);\n ctx.stats.numTriangles += (indices.length / 3);\n }\n\n const meshId = (\"mesh\" + ctx.nextId++);\n\n ctx.xktModel.createMesh({\n meshId: meshId,\n geometryId: geometryId,\n matrix: placedGeometry.flatTransformation,\n color: [placedGeometry.color.x, placedGeometry.color.y, placedGeometry.color.z],\n opacity: placedGeometry.color.w\n });\n\n meshIds.push(meshId);\n }\n\n if (meshIds.length > 0) {\n ctx.xktModel.createEntity({\n entityId: entityId,\n meshIds: meshIds\n });\n ctx.stats.numObjects++;\n }\n}\n\nexport {parseIFCIntoXKTModel};\n","import {parse} from '@loaders.gl/core';\nimport {LASLoader} from '@loaders.gl/las';\n\nimport {math} from \"../lib/math.js\";\n\nconst MAX_VERTICES = 500000; // TODO: Rough estimate\n\n/**\n * @desc Parses LAS and LAZ point cloud data into an {@link XKTModel}.\n *\n * This parser handles both the LASER file format (LAS) and its compressed version (LAZ),\n * a public format for the interchange of 3-dimensional point cloud data data, developed\n * for LIDAR mapping purposes.\n *\n * ## Usage\n *\n * In the example below we'll create an {@link XKTModel}, then load an LAZ point cloud model into it.\n *\n * ````javascript\n * utils.loadArraybuffer(\"./models/laz/autzen.laz\", async (data) => {\n *\n * const xktModel = new XKTModel();\n *\n * await parseLASIntoXKTModel({\n * data,\n * xktModel,\n * rotateX: true,\n * log: (msg) => { console.log(msg); }\n * }).then(()=>{\n * xktModel.finalize();\n * },\n * (msg) => {\n * console.error(msg);\n * });\n * });\n * ````\n *\n * @param {Object} params Parsing params.\n * @param {ArrayBuffer} params.data LAS/LAZ file data.\n * @param {XKTModel} params.xktModel XKTModel to parse into.\n * @param {boolean} [params.center=false] Set true to center the LAS point positions to [0,0,0]. This is applied before the transformation matrix, if specified.\n * @param {Boolean} [params.transform] 4x4 transformation matrix to transform point positions. Use this to rotate, translate and scale them if neccessary.\n * @param {Number|String} [params.colorDepth=8] Whether colors encoded using 8 or 16 bits. Can be set to 'auto'. LAS specification recommends 16 bits.\n * @param {Boolean} [params.fp64=false] Configures if LASLoaderPlugin assumes that LAS positions are stored in 64-bit floats instead of 32-bit.\n * @param {Number} [params.skip=1] Read one from every n points.\n * @param {Object} [params.stats] Collects statistics.\n * @param {function} [params.log] Logging callback.\n * @returns {Promise} Resolves when LAS has been parsed.\n */\nfunction parseLASIntoXKTModel({\n data,\n xktModel,\n center = false,\n transform = null,\n colorDepth = \"auto\",\n fp64 = false,\n skip = 1,\n stats,\n log = () => {\n }\n }) {\n\n if (log) {\n log(\"Using parser: parseLASIntoXKTModel\");\n }\n\n return new Promise(function (resolve, reject) {\n\n if (!data) {\n reject(\"Argument expected: data\");\n return;\n }\n\n if (!xktModel) {\n reject(\"Argument expected: xktModel\");\n return;\n }\n\n log(\"Converting LAZ/LAS\");\n\n log(`center: ${center}`);\n if (transform) {\n log(`transform: [${transform}]`);\n }\n log(`colorDepth: ${colorDepth}`);\n log(`fp64: ${fp64}`);\n log(`skip: ${skip}`);\n\n parse(data, LASLoader, {\n las: {\n colorDepth,\n fp64\n }\n }).then((parsedData) => {\n\n const attributes = parsedData.attributes;\n\n const loaderData = parsedData.loaderData;\n const pointsFormatId = loaderData.pointsFormatId !== undefined ? loaderData.pointsFormatId : -1;\n\n if (!attributes.POSITION) {\n log(\"No positions found in file (expected for all LAS point formats)\");\n return;\n }\n\n let readAttributes = {};\n\n switch (pointsFormatId) {\n case 0:\n if (!attributes.intensity) {\n log(\"No intensities found in file (expected for LAS point format 0)\");\n return;\n }\n\n readAttributes = readIntensities(attributes.POSITION, attributes.intensity);\n break;\n case 1:\n if (!attributes.intensity) {\n log(\"No intensities found in file (expected for LAS point format 1)\");\n return;\n }\n readAttributes = readIntensities(attributes.POSITION, attributes.intensity);\n break;\n case 2:\n if (!attributes.intensity) {\n log(\"No intensities found in file (expected for LAS point format 2)\");\n return;\n }\n\n readAttributes = readColorsAndIntensities(attributes.POSITION, attributes.COLOR_0, attributes.intensity);\n break;\n case 3:\n if (!attributes.intensity) {\n log(\"No intensities found in file (expected for LAS point format 3)\");\n return;\n }\n readAttributes = readColorsAndIntensities(attributes.POSITION, attributes.COLOR_0, attributes.intensity);\n break;\n }\n\n const pointsChunks = chunkArray(readPositions(readAttributes.positions), MAX_VERTICES * 3);\n const colorsChunks = chunkArray(readAttributes.colors, MAX_VERTICES * 4);\n\n const meshIds = [];\n\n for (let j = 0, lenj = pointsChunks.length; j < lenj; j++) {\n\n const geometryId = `geometry-${j}`;\n const meshId = `mesh-${j}`;\n\n meshIds.push(meshId);\n\n xktModel.createGeometry({\n geometryId: geometryId,\n primitiveType: \"points\",\n positions: pointsChunks[j],\n colorsCompressed: colorsChunks[j]\n });\n\n xktModel.createMesh({\n meshId,\n geometryId\n });\n }\n\n const entityId = math.createUUID();\n\n xktModel.createEntity({\n entityId,\n meshIds\n });\n\n const rootMetaObjectId = math.createUUID();\n\n xktModel.createMetaObject({\n metaObjectId: rootMetaObjectId,\n metaObjectType: \"Model\",\n metaObjectName: \"Model\"\n });\n\n xktModel.createMetaObject({\n metaObjectId: entityId,\n metaObjectType: \"PointCloud\",\n metaObjectName: \"PointCloud (LAZ)\",\n parentMetaObjectId: rootMetaObjectId\n });\n\n if (stats) {\n stats.sourceFormat = \"LAS\";\n stats.schemaVersion = \"\";\n stats.title = \"\";\n stats.author = \"\";\n stats.created = \"\";\n stats.numMetaObjects = 2;\n stats.numPropertySets = 0;\n stats.numObjects = 1;\n stats.numGeometries = 1;\n stats.numVertices = readAttributes.positions.length / 3;\n }\n\n resolve();\n\n }, (errMsg) => {\n reject(errMsg);\n });\n });\n\n function readPositions(positionsValue) {\n if (positionsValue) {\n if (center) {\n const centerPos = math.vec3();\n const numPoints = positionsValue.length;\n for (let i = 0, len = positionsValue.length; i < len; i += 3) {\n centerPos[0] += positionsValue[i + 0];\n centerPos[1] += positionsValue[i + 1];\n centerPos[2] += positionsValue[i + 2];\n }\n centerPos[0] /= numPoints;\n centerPos[1] /= numPoints;\n centerPos[2] /= numPoints;\n for (let i = 0, len = positionsValue.length; i < len; i += 3) {\n positionsValue[i + 0] -= centerPos[0];\n positionsValue[i + 1] -= centerPos[1];\n positionsValue[i + 2] -= centerPos[2];\n }\n }\n if (transform) {\n const mat = math.mat4(transform);\n const pos = math.vec3();\n for (let i = 0, len = positionsValue.length; i < len; i += 3) {\n pos[0] = positionsValue[i + 0];\n pos[1] = positionsValue[i + 1];\n pos[2] = positionsValue[i + 2];\n math.transformPoint3(mat, pos, pos);\n positionsValue[i + 0] = pos[0];\n positionsValue[i + 1] = pos[1];\n positionsValue[i + 2] = pos[2];\n }\n }\n }\n return positionsValue;\n }\n\n function readColorsAndIntensities(attributesPosition, attributesColor, attributesIntensity) {\n const positionsValue = attributesPosition.value;\n const colors = attributesColor.value;\n const colorSize = attributesColor.size;\n const intensities = attributesIntensity.value;\n const colorsCompressedSize = intensities.length * 4;\n const positions = [];\n const colorsCompressed = new Uint8Array(colorsCompressedSize / skip);\n let count = skip;\n for (let i = 0, j = 0, k = 0, l = 0, m = 0, n=0,len = intensities.length; i < len; i++, k += colorSize, j += 4, l += 3) {\n if (count <= 0) {\n colorsCompressed[m++] = colors[k + 0];\n colorsCompressed[m++] = colors[k + 1];\n colorsCompressed[m++] = colors[k + 2];\n colorsCompressed[m++] = Math.round((intensities[i] / 65536) * 255);\n positions[n++] = positionsValue[l + 0];\n positions[n++] = positionsValue[l + 1];\n positions[n++] = positionsValue[l + 2];\n count = skip;\n } else {\n count--;\n }\n }\n return {\n positions,\n colors: colorsCompressed\n };\n }\n\n function readIntensities(attributesPosition, attributesIntensity) {\n const positionsValue = attributesPosition.value;\n const intensities = attributesIntensity.value;\n const colorsCompressedSize = intensities.length * 4;\n const positions = [];\n const colorsCompressed = new Uint8Array(colorsCompressedSize / skip);\n let count = skip;\n for (let i = 0, j = 0, k = 0, l = 0, m = 0, n = 0, len = intensities.length; i < len; i++, k += 3, j += 4, l += 3) {\n if (count <= 0) {\n colorsCompressed[m++] = 0;\n colorsCompressed[m++] = 0;\n colorsCompressed[m++] = 0;\n colorsCompressed[m++] = Math.round((intensities[i] / 65536) * 255);\n positions[n++] = positionsValue[l + 0];\n positions[n++] = positionsValue[l + 1];\n positions[n++] = positionsValue[l + 2];\n count = skip;\n } else {\n count--;\n }\n }\n return {\n positions,\n colors: colorsCompressed\n };\n }\n\n function chunkArray(array, chunkSize) {\n if (chunkSize >= array.length) {\n return [array]; // One chunk\n }\n let result = [];\n for (let i = 0; i < array.length; i += chunkSize) {\n result.push(array.slice(i, i + chunkSize));\n }\n return result;\n }\n\n}\n\nexport {parseLASIntoXKTModel};","/**\n * @desc Parses JSON metamodel into an {@link XKTModel}.\n *\n * @param {Object} params Parsing parameters.\n * @param {JSON} params.metaModelData Metamodel data.\n * @param {String[]} [params.excludeTypes] Types to exclude from parsing.\n * @param {String[]} [params.includeTypes] Types to include in parsing.\n * @param {XKTModel} params.xktModel XKTModel to parse into.\n * @param {function} [params.log] Logging callback.\n @returns {Promise} Resolves when JSON has been parsed.\n */\nfunction parseMetaModelIntoXKTModel({metaModelData, xktModel, includeTypes, excludeTypes, log}) {\n\n if (log) {\n log(\"Using parser: parseMetaModelIntoXKTModel\");\n }\n\n return new Promise(function (resolve, reject) {\n\n const metaObjects = metaModelData.metaObjects || [];\n const propertySets = metaModelData.propertySets || [];\n\n xktModel.modelId = metaModelData.revisionId || \"\"; // HACK\n xktModel.projectId = metaModelData.projectId || \"\";\n xktModel.revisionId = metaModelData.revisionId || \"\";\n xktModel.author = metaModelData.author || \"\";\n xktModel.createdAt = metaModelData.createdAt || \"\";\n xktModel.creatingApplication = metaModelData.creatingApplication || \"\";\n xktModel.schema = metaModelData.schema || \"\";\n\n for (let i = 0, len = propertySets.length; i < len; i++) {\n\n const propertySet = propertySets[i];\n\n xktModel.createPropertySet({\n propertySetId: propertySet.id,\n propertySetName: propertySet.name,\n propertySetType: propertySet.type,\n properties: propertySet.properties\n });\n }\n\n let includeTypesMap;\n if (includeTypes) {\n includeTypesMap = {};\n for (let i = 0, len = includeTypes.length; i < len; i++) {\n includeTypesMap[includeTypes[i]] = true;\n }\n }\n\n let excludeTypesMap;\n if (excludeTypes) {\n excludeTypesMap = {};\n for (let i = 0, len = excludeTypes.length; i < len; i++) {\n excludeTypesMap[excludeTypes[i]] = true;\n }\n }\n\n const metaObjectsMap = {};\n\n for (let i = 0, len = metaObjects.length; i < len; i++) {\n const newObject = metaObjects[i];\n metaObjectsMap[newObject.id] = newObject;\n }\n\n let countMetaObjects = 0;\n\n for (let i = 0, len = metaObjects.length; i < len; i++) {\n\n const metaObject = metaObjects[i];\n const type = metaObject.type;\n\n if (excludeTypesMap && excludeTypesMap[type]) {\n continue;\n }\n\n if (includeTypesMap && !includeTypesMap[type]) {\n continue;\n }\n\n if (metaObject.parent !== undefined && metaObject.parent !== null) {\n const metaObjectParent = metaObjectsMap[metaObject.parent];\n if (metaObject.type === metaObjectParent.type) { // Don't create redundant sub-objects\n continue\n }\n }\n\n const propertySetIds = [];\n if (metaObject.propertySetIds) {\n for (let j = 0, lenj = metaObject.propertySetIds.length; j < lenj; j++) {\n const propertySetId = metaObject.propertySetIds[j];\n if (propertySetId !== undefined && propertySetId !== null && propertySetId !== \"\") {\n propertySetIds.push(propertySetId);\n }\n }\n }\n if (metaObject.propertySetId !== undefined && metaObject.propertySetId !== null && metaObject.propertySetId !== \"\") {\n propertySetIds.push(metaObject.propertySetId);\n }\n\n xktModel.createMetaObject({\n metaObjectId: metaObject.id,\n metaObjectType: metaObject.type,\n metaObjectName: metaObject.name,\n parentMetaObjectId: metaObject.parent,\n propertySetIds: propertySetIds.length > 0 ? propertySetIds : null\n });\n\n countMetaObjects++;\n }\n\n if (log) {\n log(\"Converted meta objects: \" + countMetaObjects);\n }\n\n resolve();\n });\n}\n\nexport {parseMetaModelIntoXKTModel};\n","/**\n * @desc Parses PCD point cloud data into an {@link XKTModel}.\n *\n * ## Usage\n *\n * In the example below we'll create an {@link XKTModel}, then load an LAZ point cloud model into it.\n *\n * ````javascript\n * utils.loadArraybuffer(\"\"./models/pcd/ism_test_cat.pcd\"\", async (data) => {\n *\n * const xktModel = new XKTModel();\n *\n * await parsePCDIntoXKTModel({\n * data,\n * xktModel,\n * log: (msg) => { console.log(msg); }\n * }).then(()=>{\n * xktModel.finalize();\n * },\n * (msg) => {\n * console.error(msg);\n * });\n * });\n * ````\n *\n * @param {Object} params Parsing params.\n * @param {ArrayBuffer} params.data PCD file data.\n * @param {Boolean} [params.littleEndian=true] Whether PCD binary data is Little-Endian or Big-Endian.\n * @param {XKTModel} params.xktModel XKTModel to parse into.\n * @param {Object} [params.stats] Collects statistics.\n * @param {function} [params.log] Logging callback.\n @returns {Promise} Resolves when PCD has been parsed.\n */\nfunction parsePCDIntoXKTModel({data, xktModel, littleEndian = true, stats, log}) {\n\n if (log) {\n log(\"Using parser: parsePCDIntoXKTModel\");\n }\n\n return new Promise(function(resolve, reject) {\n\n const textData = decodeText(new Uint8Array(data));\n\n const header = parseHeader(textData);\n\n const positions = [];\n const normals = [];\n const colors = [];\n\n if (header.data === 'ascii') {\n\n const offset = header.offset;\n const data = textData.substr(header.headerLen);\n const lines = data.split('\\n');\n\n for (let i = 0, l = lines.length; i < l; i++) {\n\n if (lines[i] === '') {\n continue;\n }\n\n const line = lines[i].split(' ');\n\n if (offset.x !== undefined) {\n positions.push(parseFloat(line[offset.x]));\n positions.push(parseFloat(line[offset.y]));\n positions.push(parseFloat(line[offset.z]));\n }\n\n if (offset.rgb !== undefined) {\n const rgb = parseFloat(line[offset.rgb]);\n const r = (rgb >> 16) & 0x0000ff;\n const g = (rgb >> 8) & 0x0000ff;\n const b = (rgb >> 0) & 0x0000ff;\n colors.push(r, g, b, 255);\n } else {\n colors.push(255);\n colors.push(255);\n colors.push(255);\n }\n }\n }\n\n if (header.data === 'binary_compressed') {\n\n const sizes = new Uint32Array(data.slice(header.headerLen, header.headerLen + 8));\n const compressedSize = sizes[0];\n const decompressedSize = sizes[1];\n const decompressed = decompressLZF(new Uint8Array(data, header.headerLen + 8, compressedSize), decompressedSize);\n const dataview = new DataView(decompressed.buffer);\n const offset = header.offset;\n\n for (let i = 0; i < header.points; i++) {\n\n if (offset.x !== undefined) {\n positions.push(dataview.getFloat32((header.points * offset.x) + header.size[0] * i, littleEndian));\n positions.push(dataview.getFloat32((header.points * offset.y) + header.size[1] * i, littleEndian));\n positions.push(dataview.getFloat32((header.points * offset.z) + header.size[2] * i, littleEndian));\n }\n\n if (offset.rgb !== undefined) {\n colors.push(dataview.getUint8((header.points * offset.rgb) + header.size[3] * i + 0));\n colors.push(dataview.getUint8((header.points * offset.rgb) + header.size[3] * i + 1));\n colors.push(dataview.getUint8((header.points * offset.rgb) + header.size[3] * i + 2));\n // colors.push(255);\n } else {\n colors.push(1);\n colors.push(1);\n colors.push(1);\n }\n }\n }\n\n if (header.data === 'binary') {\n\n const dataview = new DataView(data, header.headerLen);\n const offset = header.offset;\n\n for (let i = 0, row = 0; i < header.points; i++, row += header.rowSize) {\n if (offset.x !== undefined) {\n positions.push(dataview.getFloat32(row + offset.x, littleEndian));\n positions.push(dataview.getFloat32(row + offset.y, littleEndian));\n positions.push(dataview.getFloat32(row + offset.z, littleEndian));\n }\n\n if (offset.rgb !== undefined) {\n colors.push(dataview.getUint8(row + offset.rgb + 2));\n colors.push(dataview.getUint8(row + offset.rgb + 1));\n colors.push(dataview.getUint8(row + offset.rgb + 0));\n } else {\n colors.push(255);\n colors.push(255);\n colors.push(255);\n }\n }\n }\n\n xktModel.createGeometry({\n geometryId: \"pointsGeometry\",\n primitiveType: \"points\",\n positions: positions,\n colors: colors && colors.length > 0 ? colors : null\n });\n\n xktModel.createMesh({\n meshId: \"pointsMesh\",\n geometryId: \"pointsGeometry\"\n });\n\n xktModel.createEntity({\n entityId: \"geometries\",\n meshIds: [\"pointsMesh\"]\n });\n\n if (log) {\n log(\"Converted drawable objects: 1\");\n log(\"Converted geometries: 1\");\n log(\"Converted vertices: \" + positions.length / 3);\n }\n\n if (stats) {\n stats.sourceFormat = \"PCD\";\n stats.schemaVersion = \"\";\n stats.title = \"\";\n stats.author = \"\";\n stats.created = \"\";\n stats.numObjects = 1;\n stats.numGeometries = 1;\n stats.numVertices = positions.length / 3;\n }\n\n resolve();\n });\n}\n\nfunction parseHeader(data) {\n const header = {};\n const result1 = data.search(/[\\r\\n]DATA\\s(\\S*)\\s/i);\n const result2 = /[\\r\\n]DATA\\s(\\S*)\\s/i.exec(data.substr(result1 - 1));\n header.data = result2[1];\n header.headerLen = result2[0].length + result1;\n header.str = data.substr(0, header.headerLen);\n header.str = header.str.replace(/\\#.*/gi, ''); // Strip comments\n header.version = /VERSION (.*)/i.exec(header.str); // Parse\n header.fields = /FIELDS (.*)/i.exec(header.str);\n header.size = /SIZE (.*)/i.exec(header.str);\n header.type = /TYPE (.*)/i.exec(header.str);\n header.count = /COUNT (.*)/i.exec(header.str);\n header.width = /WIDTH (.*)/i.exec(header.str);\n header.height = /HEIGHT (.*)/i.exec(header.str);\n header.viewpoint = /VIEWPOINT (.*)/i.exec(header.str);\n header.points = /POINTS (.*)/i.exec(header.str);\n if (header.version !== null) {\n header.version = parseFloat(header.version[1]);\n }\n if (header.fields !== null) {\n header.fields = header.fields[1].split(' ');\n }\n if (header.type !== null) {\n header.type = header.type[1].split(' ');\n }\n if (header.width !== null) {\n header.width = parseInt(header.width[1]);\n }\n if (header.height !== null) {\n header.height = parseInt(header.height[1]);\n }\n if (header.viewpoint !== null) {\n header.viewpoint = header.viewpoint[1];\n }\n if (header.points !== null) {\n header.points = parseInt(header.points[1], 10);\n }\n if (header.points === null) {\n header.points = header.width * header.height;\n }\n if (header.size !== null) {\n header.size = header.size[1].split(' ').map(function (x) {\n return parseInt(x, 10);\n });\n }\n if (header.count !== null) {\n header.count = header.count[1].split(' ').map(function (x) {\n return parseInt(x, 10);\n });\n } else {\n header.count = [];\n for (let i = 0, l = header.fields.length; i < l; i++) {\n header.count.push(1);\n }\n }\n header.offset = {};\n let sizeSum = 0;\n for (let i = 0, l = header.fields.length; i < l; i++) {\n if (header.data === 'ascii') {\n header.offset[header.fields[i]] = i;\n } else {\n header.offset[header.fields[i]] = sizeSum;\n sizeSum += header.size[i] * header.count[i];\n }\n }\n header.rowSize = sizeSum; // For binary only\n return header;\n}\n\nfunction decodeText(array) {\n if (typeof TextDecoder !== 'undefined') {\n return new TextDecoder().decode(array);\n }\n let s = '';\n for (let i = 0, il = array.length; i < il; i++) {\n s += String.fromCharCode(array[i]);\n }\n try {\n return decodeURIComponent(escape(s));\n } catch (e) {\n return s;\n }\n}\n\nfunction decompressLZF(inData, outLength) { // https://gitlab.com/taketwo/three-pcd-loader/blob/master/decompress-lzf.js\n const inLength = inData.length;\n const outData = new Uint8Array(outLength);\n let inPtr = 0;\n let outPtr = 0;\n let ctrl;\n let len;\n let ref;\n do {\n ctrl = inData[inPtr++];\n if (ctrl < (1 << 5)) {\n ctrl++;\n if (outPtr + ctrl > outLength) throw new Error('Output buffer is not large enough');\n if (inPtr + ctrl > inLength) throw new Error('Invalid compressed data');\n do {\n outData[outPtr++] = inData[inPtr++];\n } while (--ctrl);\n } else {\n len = ctrl >> 5;\n ref = outPtr - ((ctrl & 0x1f) << 8) - 1;\n if (inPtr >= inLength) throw new Error('Invalid compressed data');\n if (len === 7) {\n len += inData[inPtr++];\n if (inPtr >= inLength) throw new Error('Invalid compressed data');\n }\n ref -= inData[inPtr++];\n if (outPtr + len + 2 > outLength) throw new Error('Output buffer is not large enough');\n if (ref < 0) throw new Error('Invalid compressed data');\n if (ref >= outPtr) throw new Error('Invalid compressed data');\n do {\n outData[outPtr++] = outData[ref++];\n } while (--len + 2);\n }\n } while (inPtr < inLength);\n return outData;\n}\n\nexport {parsePCDIntoXKTModel};","import {parse} from '@loaders.gl/core';\nimport {PLYLoader} from '@loaders.gl/ply';\n\n/**\n * @desc Parses PLY file data into an {@link XKTModel}.\n *\n * ## Usage\n *\n * In the example below we'll create an {@link XKTModel}, then load a PLY model into it.\n *\n * ````javascript\n * utils.loadArraybuffer(\"./models/ply/test.ply\", async (data) => {\n *\n * const xktModel = new XKTModel();\n *\n * parsePLYIntoXKTModel({data, xktModel}).then(()=>{\n * xktModel.finalize();\n * },\n * (msg) => {\n * console.error(msg);\n * });\n * });\n * ````\n *\n * @param {Object} params Parsing params.\n * @param {ArrayBuffer} params.data PLY file data.\n * @param {XKTModel} params.xktModel XKTModel to parse into.\n * @param {Object} [params.stats] Collects statistics.\n * @param {function} [params.log] Logging callback.\n @returns {Promise} Resolves when PLY has been parsed.\n */\nasync function parsePLYIntoXKTModel({data, xktModel, stats, log}) {\n\n if (log) {\n log(\"Using parser: parsePLYIntoXKTModel\");\n }\n\n if (!data) {\n throw \"Argument expected: data\";\n }\n\n if (!xktModel) {\n throw \"Argument expected: xktModel\";\n }\n\n let parsedData;\n try {\n parsedData = await parse(data, PLYLoader);\n } catch (e) {\n if (log) {\n log(\"Error: \" + e);\n }\n return;\n }\n\n const attributes = parsedData.attributes;\n const hasColors = !!attributes.COLOR_0;\n\n if (hasColors) {\n const colorsValue = hasColors ? attributes.COLOR_0.value : null;\n const colorsCompressed = [];\n for (let i = 0, len = colorsValue.length; i < len; i += 4) {\n colorsCompressed.push(colorsValue[i]);\n colorsCompressed.push(colorsValue[i + 1]);\n colorsCompressed.push(colorsValue[i + 2]);\n }\n xktModel.createGeometry({\n geometryId: \"plyGeometry\",\n primitiveType: \"triangles\",\n positions: attributes.POSITION.value,\n indices: parsedData.indices ? parsedData.indices.value : [],\n colorsCompressed: colorsCompressed\n });\n } else {\n xktModel.createGeometry({\n geometryId: \"plyGeometry\",\n primitiveType: \"triangles\",\n positions: attributes.POSITION.value,\n indices: parsedData.indices ? parsedData.indices.value : []\n });\n }\n\n xktModel.createMesh({\n meshId: \"plyMesh\",\n geometryId: \"plyGeometry\",\n color: (!hasColors) ? [1, 1, 1] : null\n });\n\n xktModel.createEntity({\n entityId: \"ply\",\n meshIds: [\"plyMesh\"]\n });\n\n if (stats) {\n stats.sourceFormat = \"PLY\";\n stats.schemaVersion = \"\";\n stats.title = \"\";\n stats.author = \"\";\n stats.created = \"\";\n stats.numMetaObjects = 2;\n stats.numPropertySets = 0;\n stats.numObjects = 1;\n stats.numGeometries = 1;\n stats.numVertices = attributes.POSITION.value.length / 3;\n }\n}\n\nexport {parsePLYIntoXKTModel};\n","import {faceToVertexNormals} from \"../lib/faceToVertexNormals.js\";\nimport {math} from \"../lib/math.js\";\n\n/**\n * @desc Parses STL file data into an {@link XKTModel}.\n *\n * * Supports binary and ASCII STL formats.\n * * Option to create a separate {@link XKTEntity} for each group of faces that share the same vertex colors.\n * * Option to smooth face-aligned normals loaded from STL.\n * * Option to reduce XKT file size by ignoring STL normals and relying on xeokit to auto-generate them.\n *\n * ## Usage\n *\n * In the example below we'll create an {@link XKTModel}, then load an STL model into it.\n *\n * ````javascript\n * utils.loadArraybuffer(\"./models/stl/binary/spurGear.stl\", async (data) => {\n *\n * const xktModel = new XKTModel();\n *\n * parseSTLIntoXKTModel({data, xktModel});\n *\n * xktModel.finalize();\n * });\n * ````\n *\n * @param {Object} params Parsing params.\n * @param {ArrayBuffer|String} [params.data] STL file data. Can be binary or string.\n * @param {Boolean} [params.autoNormals=false] When true, the parser will ignore the STL geometry normals, and the STL\n * data will rely on the xeokit ````Viewer```` to automatically generate them. This has the limitation that the\n * normals will be face-aligned, and therefore the ````Viewer```` will only be able to render a flat-shaded representation\n * of the STL.\n * Overrides ````smoothNormals```` when ````true````. This ignores the normals in the STL, and loads no\n * normals from the STL into the {@link XKTModel}, resulting in the XKT file storing no normals for the STL model. The\n * xeokit-sdk will then automatically generate the normals within its shaders. The disadvantages are that auto-normals\n * may slow rendering down a little bit, and that the normals can only be face-aligned (and thus rendered using flat\n * shading). The advantages, however, are a smaller XKT file size, and the ability to apply certain geometry optimizations\n * during parsing, such as removing duplicated STL vertex positions, that are not possible when normals are loaded\n * for the STL vertices.\n * @param {Boolean} [params.smoothNormals=true] When true, automatically converts face-oriented STL normals to vertex normals, for a smooth appearance. Ignored if ````autoNormals```` is ````true````.\n * @param {Number} [params.smoothNormalsAngleThreshold=20] This is the threshold angle between normals of adjacent triangles, below which their shared wireframe edge is not drawn.\n * @param {Boolean} [params.splitMeshes=true] When true, creates a separate {@link XKTEntity} for each group of faces that share the same vertex colors. Only works with binary STL (ie. when ````data```` is an ArrayBuffer).\n * @param {XKTModel} [params.xktModel] XKTModel to parse into.\n * @param {Object} [params.stats] Collects statistics.\n * @param {function} [params.log] Logging callback.\n @returns {Promise} Resolves when STL has been parsed.\n */\nasync function parseSTLIntoXKTModel({\n data,\n splitMeshes,\n autoNormals,\n smoothNormals,\n smoothNormalsAngleThreshold,\n xktModel,\n stats,\n log\n }) {\n\n if (log) {\n log(\"Using parser: parseSTLIntoXKTModel\");\n }\n\n return new Promise(function (resolve, reject) {\n\n if (!data) {\n reject(\"Argument expected: data\");\n return;\n }\n\n if (!xktModel) {\n reject(\"Argument expected: xktModel\");\n return;\n }\n\n const rootMetaObjectId = math.createUUID();\n\n const rootMetaObject = xktModel.createMetaObject({\n metaObjectId: rootMetaObjectId,\n metaObjectType: \"Model\",\n metaObjectName: \"Model\"\n });\n\n const ctx = {\n data,\n splitMeshes,\n autoNormals,\n smoothNormals,\n smoothNormalsAngleThreshold,\n xktModel,\n rootMetaObject,\n nextId: 0,\n log: (log || function (msg) {\n }),\n stats: {\n numObjects: 0,\n numGeometries: 0,\n numTriangles: 0,\n numVertices: 0\n }\n };\n\n const binData = ensureBinary(data);\n\n if (isBinary(binData)) {\n parseBinary(ctx, binData);\n } else {\n parseASCII(ctx, ensureString(data));\n }\n\n if (stats) {\n stats.sourceFormat = \"STL\";\n stats.schemaVersion = \"\";\n stats.title = \"\";\n stats.author = \"\";\n stats.created = \"\";\n stats.numMetaObjects = 2;\n stats.numPropertySets = 0;\n stats.numObjects = 1;\n stats.numGeometries = 1;\n stats.numTriangles = ctx.stats.numTriangles;\n stats.numVertices = ctx.stats.numVertices;\n }\n\n resolve();\n });\n}\n\nfunction isBinary(data) {\n const reader = new DataView(data);\n const numFaces = reader.getUint32(80, true);\n const faceSize = (32 / 8 * 3) + ((32 / 8 * 3) * 3) + (16 / 8);\n const numExpectedBytes = 80 + (32 / 8) + (numFaces * faceSize);\n if (numExpectedBytes === reader.byteLength) {\n return true;\n }\n const solid = [115, 111, 108, 105, 100];\n for (let i = 0; i < 5; i++) {\n if (solid[i] !== reader.getUint8(i, false)) {\n return true;\n }\n }\n return false;\n}\n\nfunction parseBinary(ctx, data) {\n const reader = new DataView(data);\n const faces = reader.getUint32(80, true);\n let r;\n let g;\n let b;\n let hasColors = false;\n let colors;\n let defaultR;\n let defaultG;\n let defaultB;\n let lastR = null;\n let lastG = null;\n let lastB = null;\n let newMesh = false;\n let alpha;\n for (let index = 0; index < 80 - 10; index++) {\n if ((reader.getUint32(index, false) === 0x434F4C4F /*COLO*/) &&\n (reader.getUint8(index + 4) === 0x52 /*'R'*/) &&\n (reader.getUint8(index + 5) === 0x3D /*'='*/)) {\n hasColors = true;\n colors = [];\n defaultR = reader.getUint8(index + 6) / 255;\n defaultG = reader.getUint8(index + 7) / 255;\n defaultB = reader.getUint8(index + 8) / 255;\n alpha = reader.getUint8(index + 9) / 255;\n }\n }\n let dataOffset = 84;\n let faceLength = 12 * 4 + 2;\n let positions = [];\n let normals = [];\n let splitMeshes = ctx.splitMeshes;\n for (let face = 0; face < faces; face++) {\n let start = dataOffset + face * faceLength;\n let normalX = reader.getFloat32(start, true);\n let normalY = reader.getFloat32(start + 4, true);\n let normalZ = reader.getFloat32(start + 8, true);\n if (hasColors) {\n let packedColor = reader.getUint16(start + 48, true);\n if ((packedColor & 0x8000) === 0) {\n r = (packedColor & 0x1F) / 31;\n g = ((packedColor >> 5) & 0x1F) / 31;\n b = ((packedColor >> 10) & 0x1F) / 31;\n } else {\n r = defaultR;\n g = defaultG;\n b = defaultB;\n }\n if (splitMeshes && r !== lastR || g !== lastG || b !== lastB) {\n if (lastR !== null) {\n newMesh = true;\n }\n lastR = r;\n lastG = g;\n lastB = b;\n }\n }\n for (let i = 1; i <= 3; i++) {\n let vertexstart = start + i * 12;\n positions.push(reader.getFloat32(vertexstart, true));\n positions.push(reader.getFloat32(vertexstart + 4, true));\n positions.push(reader.getFloat32(vertexstart + 8, true));\n if (!ctx.autoNormals) {\n normals.push(normalX, normalY, normalZ);\n }\n if (hasColors) {\n colors.push(r, g, b, 1); // TODO: handle alpha\n }\n }\n if (splitMeshes && newMesh) {\n addMesh(ctx, positions, normals, colors);\n positions = [];\n normals = [];\n colors = colors ? [] : null;\n newMesh = false;\n }\n }\n if (positions.length > 0) {\n addMesh(ctx, positions, normals, colors);\n }\n}\n\nfunction parseASCII(ctx, data) {\n const faceRegex = /facet([\\s\\S]*?)endfacet/g;\n let faceCounter = 0;\n const floatRegex = /[\\s]+([+-]?(?:\\d+.\\d+|\\d+.|\\d+|.\\d+)(?:[eE][+-]?\\d+)?)/.source;\n const vertexRegex = new RegExp('vertex' + floatRegex + floatRegex + floatRegex, 'g');\n const normalRegex = new RegExp('normal' + floatRegex + floatRegex + floatRegex, 'g');\n const positions = [];\n const normals = [];\n const colors = null;\n let normalx;\n let normaly;\n let normalz;\n let result;\n let verticesPerFace;\n let normalsPerFace;\n let text;\n while ((result = faceRegex.exec(data)) !== null) {\n verticesPerFace = 0;\n normalsPerFace = 0;\n text = result[0];\n while ((result = normalRegex.exec(text)) !== null) {\n normalx = parseFloat(result[1]);\n normaly = parseFloat(result[2]);\n normalz = parseFloat(result[3]);\n normalsPerFace++;\n }\n while ((result = vertexRegex.exec(text)) !== null) {\n positions.push(parseFloat(result[1]), parseFloat(result[2]), parseFloat(result[3]));\n normals.push(normalx, normaly, normalz);\n verticesPerFace++;\n }\n if (normalsPerFace !== 1) {\n ctx.log(\"Error in normal of face \" + faceCounter);\n return -1;\n }\n if (verticesPerFace !== 3) {\n ctx.log(\"Error in positions of face \" + faceCounter);\n return -1;\n }\n faceCounter++;\n }\n addMesh(ctx, positions, normals, colors);\n}\n\nlet nextGeometryId = 0;\n\nfunction addMesh(ctx, positions, normals, colors) {\n\n const indices = new Int32Array(positions.length / 3);\n for (let ni = 0, len = indices.length; ni < len; ni++) {\n indices[ni] = ni;\n }\n\n normals = normals && normals.length > 0 ? normals : null;\n colors = colors && colors.length > 0 ? colors : null;\n\n if (!ctx.autoNormals && ctx.smoothNormals) {\n faceToVertexNormals(positions, normals, {smoothNormalsAngleThreshold: ctx.smoothNormalsAngleThreshold});\n }\n\n const geometryId = \"\" + nextGeometryId++;\n const meshId = \"\" + nextGeometryId++;\n const entityId = \"\" + nextGeometryId++;\n\n ctx.xktModel.createGeometry({\n geometryId: geometryId,\n primitiveType: \"triangles\",\n positions: positions,\n normals: (!ctx.autoNormals) ? normals : null,\n colors: colors,\n indices: indices\n });\n\n ctx.xktModel.createMesh({\n meshId: meshId,\n geometryId: geometryId,\n color: colors ? null : [1, 1, 1],\n metallic: 0.9,\n roughness: 0.1\n });\n\n ctx.xktModel.createEntity({\n entityId: entityId,\n meshIds: [meshId]\n });\n\n ctx.xktModel.createMetaObject({\n metaObjectId: entityId,\n metaObjectType: \"Default\",\n metaObjectName: \"STL Mesh\",\n parentMetaObjectId: ctx.rootMetaObject.metaObjectId\n });\n\n ctx.stats.numGeometries++;\n ctx.stats.numObjects++;\n ctx.stats.numVertices += positions.length / 3;\n ctx.stats.numTriangles += indices.length / 3;\n}\n\nfunction ensureString(buffer) {\n if (typeof buffer !== 'string') {\n return decodeText(new Uint8Array(buffer));\n }\n return buffer;\n}\n\nfunction ensureBinary(buffer) {\n if (typeof buffer === 'string') {\n const arrayBuffer = new Uint8Array(buffer.length);\n for (let i = 0; i < buffer.length; i++) {\n arrayBuffer[i] = buffer.charCodeAt(i) & 0xff; // implicitly assumes little-endian\n }\n return arrayBuffer.buffer || arrayBuffer;\n } else {\n return buffer;\n }\n}\n\nfunction decodeText(array) {\n if (typeof TextDecoder !== 'undefined') {\n return new TextDecoder().decode(array);\n }\n let s = '';\n for (let i = 0, il = array.length; i < il; i++) {\n s += String.fromCharCode(array[i]); // Implicitly assumes little-endian.\n }\n return decodeURIComponent(escape(s));\n}\n\nexport {parseSTLIntoXKTModel};\n","module.exports = require(\"@loaders.gl/core\");","module.exports = require(\"@loaders.gl/gltf\");","module.exports = require(\"@loaders.gl/images\");","module.exports = require(\"@loaders.gl/las\");","module.exports = require(\"@loaders.gl/ply\");","module.exports = require(\"@loaders.gl/polyfills\");","module.exports = require(\"@loaders.gl/textures\");","module.exports = require(\"fs\");","module.exports = require(\"pako\");","module.exports = require(\"path\");","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","import '@loaders.gl/polyfills';\nimport {installFilePolyfills} from '@loaders.gl/polyfills';\n\ninstallFilePolyfills();\n\nexport * from \"./src/index.js\";\nexport {convert2xkt} from \"./src/convert2xkt.js\"; // convert2xkt is only bundled for Node.js\n"],"names":["KDNode","_createClass","aabb","_classCallCheck","entities","left","right","math","XKTEntity","entityId","meshes","entityIndex","AABB3","hasReusedGeometries","XKTGeometry","cfg","geometryId","primitiveType","geometryIndex","numInstances","positions","positionsQuantized","Uint16Array","length","normals","normalsOctEncoded","colorsCompressed","uvs","uvsCompressed","indices","edgeIndices","solid","key","get","XKTMesh","meshId","meshIndex","matrix","geometry","color","Float32Array","metallic","undefined","roughness","opacity","textureSet","entity","XKTMetaObject","metaObjectId","propertySetIds","metaObjectType","metaObjectName","parentMetaObjectId","_regeneratorRuntime","exports","Op","Object","prototype","hasOwn","hasOwnProperty","defineProperty","obj","desc","value","$Symbol","Symbol","iteratorSymbol","iterator","asyncIteratorSymbol","asyncIterator","toStringTagSymbol","toStringTag","define","enumerable","configurable","writable","err","wrap","innerFn","outerFn","self","tryLocsList","protoGenerator","Generator","generator","create","context","Context","makeInvokeMethod","tryCatch","fn","arg","type","call","ContinueSentinel","GeneratorFunction","GeneratorFunctionPrototype","IteratorPrototype","getProto","getPrototypeOf","NativeIteratorPrototype","values","Gp","defineIteratorMethods","forEach","method","_invoke","AsyncIterator","PromiseImpl","invoke","resolve","reject","record","result","_typeof","__await","then","unwrapped","error","previousPromise","callInvokeWithMethodAndArg","state","Error","doneResult","delegate","delegateResult","maybeInvokeDelegate","sent","_sent","dispatchException","abrupt","done","methodName","TypeError","info","resultName","next","nextLoc","pushTryEntry","locs","entry","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","push","resetTryEntry","completion","reset","iterable","iteratorMethod","isNaN","i","displayName","isGeneratorFunction","genFun","ctor","constructor","name","mark","setPrototypeOf","__proto__","awrap","async","Promise","iter","keys","val","object","reverse","pop","skipTempReset","prev","charAt","slice","stop","rootRecord","rval","exception","handle","loc","caught","hasCatch","hasFinally","finallyEntry","complete","finish","_catch","thrown","delegateYield","asyncGeneratorStep","gen","_next","_throw","_asyncToGenerator","args","arguments","apply","instance","Constructor","_defineProperties","target","props","descriptor","_toPropertyKey","protoProps","staticProps","_toPrimitive","String","input","hint","prim","toPrimitive","res","Number","geometryCompression","buildEdgeIndices","isTriangleMeshSolid","XKTTile","XKTPropertySet","mergeVertices","XKT_INFO","XKTTexture","XKTTextureSet","encode","load","KTX2BasisWriter","ImageLoader","tempVec4a","vec4","tempVec4b","tempMat4","mat4","tempMat4b","kdTreeDimLength","Float64Array","COLOR_TEXTURE","METALLIC_ROUGHNESS_TEXTURE","NORMALS_TEXTURE","EMISSIVE_TEXTURE","OCCLUSION_TEXTURE","TEXTURE_ENCODING_OPTIONS","useSRGB","qualityLevel","encodeUASTC","mipmaps","XKTModel","modelId","projectId","revisionId","author","createdAt","creatingApplication","schema","xktVersion","edgeThreshold","minTileSize","modelAABB","propertySets","propertySetsList","metaObjects","metaObjectsList","reusedGeometriesDecodeMatrix","geometries","geometriesList","textures","texturesList","textureSets","textureSetsList","meshesList","entitiesList","tilesList","finalized","createPropertySet","params","propertySetId","properties","console","propertySetType","propertySetName","propertySet","createMetaObject","metaObject","_rootMetaObject","createTexture","textureId","imageData","src","fileExt","split","concat","texture","mediaType","minFilter","magFilter","wrapS","wrapT","wrapR","width","height","compressed","createTextureSet","textureSetId","colorTexture","colorTextureId","channel","metallicRoughnessTexture","metallicRoughnessTextureId","normalsTexture","normalsTextureId","emissiveTexture","emissiveTextureId","occlusionTexture","occlusionTextureId","textureSetIndex","createGeometry","triangles","points","lines","line_strip","line_loop","triangle_strip","triangle_fan","_createDefaultIndices","colors","xktGeometryCfg","uv","Uint8Array","len","Math","floor","mergedPositions","mergedIndices","numIndices","createMesh","position","scale","rotation","identityMat4","quaternion","eulerToQuaternion","identityQuaternion","composeMat4","mesh","createEntity","meshIds","warn","createUUID","meshIdIdx","meshIdLen","createDefaultMetaObjects","_finalize","_callee","rootKDNode","_callee$","_context","log","_removeUnusedTextures","_compressTextures","_bakeSingleUseGeometryPositions","_bakeAndOctEncodeNormals","_createEntityAABBs","_createKDTree","_createTilesFromKDTree","_createReusedGeometriesDecodeMatrix","_flagSolidGeometries","set","finalize","leni","textureIndex","_this","countTextures","_loop","encodingOptions","image","encodedData","encodedImageData","j","lenj","isIdentityMat4","transformPoint4","Int8Array","octEncodeNormals","modelNormalMatrix","inverseMat4","transposeMat4","transformAndOctEncodeNormals","entityAABB","collapseAABB3","expandAABB3Point3","expandAABB3","_insertEntityIntoKDTree","kdNode","nodeAABB","nodeAABBDiag","getAABB3Diag","containsAABB3","dim","aabbLeft","aabbRight","_createTilesFromKDNode","_createTileFromEntities","tileAABB","tileCenter","getAABB3Center","tileCenterNeg","mulVec3Scalar","vec3","rtcAABB","reused","k","lenk","quantizePositions","translateMat4v","tile","tempVec3a","reusedGeometriesAABB","countReusedGeometries","numGeometries","createPositionsDecodeMatrix","maxNumPositions","maxNumIndices","vertexIndexMapping","Array","edges","RepeatWrapping","LinearMipMapNearestFilter","materialType","materialIndex","uniquePositions","indicesLookup","indicesReverseLookup","weldedIndices","faces","numFaces","compa","compb","compc","a","b","c","cb","ab","cross","normal","inverseNormal","weldVertices","positionsMap","vx","vy","vz","precisionPoints","precision","pow","lenUniquePositions","round","buildFaces","positionsDecodeMatrix","ia","ib","ic","decompressPosition","subVec3","cross3Vec3","normalizeVec3","face","thresholdDot","cos","DEGTORAD","edge1","edge2","index1","index2","largeIndex","edge","normal1","normal2","dot","faceIndex","min","max","face1","face2","abs","dotVec3","dot2","Uint32Array","lenPositions","quantizedPositions","xmin","ymin","zmin","xwid","ywid","zwid","maxInt","xMultiplier","yMultiplier","zMultiplier","verify","num","compressPosition","p","q","multiplier","translate","translationMat4v","scalingMat4v","mulMat4","lenNormals","compressedNormals","lenCompressedNormals","oct","dec","best","currentCos","bestCos","ei","localNormal","worldNormal","transformVec3","octEncodeVec3","octDecodeVec2","array","xfunc","yfunc","x","y","tempx","tempy","z","sqrt","compareIndexPositions","posA","posB","newIndices","sort","uniqueVertexIndex","a2","b2","c2","temp","compareEdges","e1","e2","sameEdgeCount","toArrayBuffer","buf","ArrayBuffer","view","isString","o","o2","utils","pako","XKT_VERSION","NUM_TEXTURE_ATTRIBUTES","NUM_MATERIAL_ATTRIBUTES","writeXKTModelToArrayBuffer","xktModel","metaModelJSON","stats","options","zip","writeXKTModelToArrayBufferUncompressed","data","getModelData","deflatedData","deflateData","texturesSize","textureData","byteLength","arrayBuffer","createArrayBuffer","object2Array","encoder","TextEncoder","JSON","stringify","arrays","metadata","eachTextureDataPortion","eachTextureAttributes","eachTextureSetTextures","matrices","eachGeometryPrimitiveType","eachGeometryPositionsPortion","eachGeometryNormalsPortion","eachGeometryColorsPortion","eachGeometryUVsPortion","eachGeometryIndicesPortion","eachGeometryEdgeIndicesPortion","eachMeshGeometriesPortion","eachMeshMatricesPortion","eachMeshTextureSet","eachMeshMaterialAttributes","eachEntityId","eachEntityMeshesPortion","eachTileAABB","eachTileEntitiesPortion","arraysCnt","dataView","DataView","setUint32","byteOffset","offsets","arr","BPE","BYTES_PER_ELEMENT","ceil","idx","dataArray","buffer","requiresSwapToLittleEndian","subarray","swaps","cnt","offset","i1","i2","tmp","metaModelDataStr","numPropertySets","numMetaObjects","numTextures","numTextureSets","numMeshes","numEntities","numTiles","lenColors","lenUVs","lenIndices","lenEdgeIndices","lenMatrices","lenTextures","xktTexture","numCompressedTextures","Int32Array","countPositions","countNormals","countColors","countUVs","countIndices","countEdgeIndices","id","propertySetsIndex","propertySetJSON","metaObjectsIndex","metaObjectJSON","parent","external","portionIdx","textureAttrIdx","eachTextureSetTexturesIndex","countEntityMeshesPortion","eachMeshMaterialAttributesIndex","matricesIndex","tileIndex","tileEntities","numTileEntities","entityMeshes","numEntityMeshes","tileAABBIndex","deflate","metaModelBytes","deflatedJSON","deflateJSON","replace","chr","charCodeAt","toString","substr","strings","elements","indexData","dataLen","element","elementsize","indexBuf","ClampToEdgeWrapping","MirroredRepeatWrapping","NearestFilter","NearestMipMapNearestFilter","NearestMipmapNearestFilter","NearestMipmapLinearFilter","NearestMipMapLinearFilter","LinearFilter","LinearMipmapNearestFilter","LinearMipmapLinearFilter","LinearMipMapLinearFilter","GIFMediaType","JPEGMediaType","PNGMediaType","parseCityJSONIntoXKTModel","parseGLTFIntoXKTModel","parseIFCIntoXKTModel","parseLASIntoXKTModel","parsePCDIntoXKTModel","parsePLYIntoXKTModel","parseSTLIntoXKTModel","fs","require","path","convert2xkt","_ref","WebIFC","_ref$configs","configs","source","sourceData","sourceFormat","metaModelSource","output","outputXKTModel","outputXKT","includeTypes","excludeTypes","_ref$reuseGeometries","reuseGeometries","_ref$minTileSize","_ref$stats","outputStats","_ref$rotateX","rotateX","_ref$includeTextures","includeTextures","_ref$includeNormals","includeNormals","_ref$zip","_ref$log","msg","schemaVersion","title","created","numTriangles","numVertices","numNormals","numUVs","numObjects","sourceSize","xktSize","compressionRatio","conversionTime","getFileExtension","fileName","ext","extname","substring","_log","startTime","Date","sourceConfigs","fileTypeConfigs","overrideOption","option1","option2","readFileSync","sourceFileSizeBytes","toFixed","parse","e","convert","center","transform","metaModelData","gltfBasePath","dirname","baseUri","wasmPath","fp64","colorDepth","skip","parser","converterParams","xktArrayBuffer","xktContent","Buffer","from","targetFileSizeBytes","outputDir","existsSync","mkdirSync","recursive","writeFileSync","buildBoxGeometry","xSize","ySize","zSize","centerX","centerY","centerZ","xmax","ymax","zmax","buildBoxLinesGeometry","buildCylinderGeometry","radiusTop","radiusBottom","radialSegments","heightSegments","openEnded","heightHalf","heightLength","radialAngle","PI","radialLength","radiusChange","h","currentRadius","currentHeight","first","second","startIndex","tu","tv","normalY","atan","sin","buildGridGeometry","size","divisions","step","halfSize","l","buildPlaneGeometry","xSegments","zSegments","halfWidth","halfHeight","planeX","planeZ","planeX1","planeZ1","segmentWidth","segmentHeight","offset2","iz","ix","d","buildSphereGeometry","lod","radius","widthSegments","theta","sinTheta","cosTheta","phi","sinPhi","cosPhi","u","v","buildTorusGeometry","tube","tubeSegments","arc","vec","letters","buildVectorTextGeometry","origin","xOrigin","yOrigin","zOrigin","text","trim","countVerts","str","mag","penUp","p1","p2","needLine","pointsLen","iLine","parseGLTFJSONIntoXKTModel","parseMetaModelIntoXKTModel","earcut","holeIndices","hasHoles","outerLen","outerNode","linkedList","minX","minY","maxX","maxY","invSize","eliminateHoles","earcutLinked","start","end","clockwise","last","signedArea","insertNode","equals","removeNode","filterPoints","again","steiner","area","ear","pass","indexCurve","isEarHashed","isEar","cureLocalIntersections","splitEarcut","pointInTriangle","minTX","minTY","maxTX","maxTY","minZ","zOrder","maxZ","prevZ","n","nextZ","intersects","locallyInside","isValidDiagonal","splitPolygon","queue","list","getLeftmost","compareX","eliminateHole","hole","findHoleBridge","hx","hy","qx","Infinity","m","mx","my","tanMin","tan","sectorContainsSector","sortLinked","tail","numMerges","pSize","qSize","inSize","leftmost","ax","ay","bx","by","cx","cy","px","py","intersectsPolygon","middleInside","r","q1","q2","o1","sign","o3","o4","onSegment","inside","Node","an","bp","deviation","polygonArea","trianglesArea","sum","flatten","vertices","holes","dimensions","holeIndex","faceToVertexNormals","smoothNormalsAngleThreshold","vertexMap","vertexNormals","vertexNormalAccum","acc","posi","numVerts","ii","jj","angle","angleVec3","doublePrecision","FloatArrayType","tempMat1","tempMat2","tempVec4","MIN_DOUBLE","MAX_SAFE_INTEGER","MAX_DOUBLE","RADTODEG","vec2","mat3","mat3ToMat4","mat4ToMat3","lut","d0","random","d1","d2","d3","clamp","fmod","negateVec4","dest","addVec4","addVec4Scalar","s","addVec3","addVec3Scalar","subVec4","subVec2","subVec4Scalar","subScalarVec4","mulVec4","mulVec4Scalar","mulVec2Scalar","divVec3","divVec4","divScalarVec3","divVec3Scalar","divVec4Scalar","divScalarVec4","dotVec4","cross3Vec4","u0","u1","u2","v0","v1","v2","x2","y2","z2","sqLenVec4","lenVec4","dotVec2","sqLenVec3","sqLenVec2","lenVec3","distVec3","w","lenVec2","distVec2","rcpVec3","normalizeVec4","f","normalizeVec2","acos","vec3FromMat4Scale","tempVec3","vecToArray","trunc","xyzArrayToObject","xyzObjectToArray","xyz","arry","dupMat4","mat4To3","m4s","setMat4ToZeroes","setMat4ToOnes","diagonalMat4v","diagonalMat4c","diagonalMat4s","mat","identityMat3","negateMat4","addMat4","addMat4Scalar","addScalarMat4","subMat4","subMat4Scalar","subScalarMat4","a00","a01","a02","a03","a10","a11","a12","a13","a20","a21","a22","a23","a30","a31","a32","a33","b00","b01","b02","b03","b10","b11","b12","b13","b20","b21","b22","b23","b30","b31","b32","b33","mulMat3","mulMat4Scalar","mulMat4v4","v3","m4","m14","m8","m13","m12","m9","transposeMat3","determinantMat4","b04","b05","b06","b07","b08","b09","invDet","traceMat4","translationMat3v","translationMat4c","translationMat4s","translateMat4c","OLDtranslateMat4c","m15","m3","m7","m11","rotationMat4v","anglerad","axis","xy","yz","zx","xs","ys","zs","rotationMat4c","scalingMat3v","scalingMat4c","scaleMat4c","scaleMat4v","scalingMat4s","rotationTranslationMat4","xx","xz","yy","zz","wx","wy","wz","mat4ToEuler","order","m21","m22","m23","m31","m32","m33","asin","atan2","quaternionToRotationMat4","decomposeMat4","decompose","sx","sy","sz","det","invSX","invSY","invSZ","mat4ToQuaternion","lookAtMat4v","pos","up","posx","posy","posz","upx","upy","upz","targetx","targety","targetz","z0","z1","x0","x1","y0","y1","lookAtMat4c","orthoMat4c","bottom","top","near","far","rl","tb","frustumMat4v","fmin","fmax","fmin4","fmax4","t","tempMat20","tempMat21","tempMat22","frustumMat4","perspectiveMat4","fovyrad","aspectratio","znear","zfar","pmin","pmax","transformPoint3","transformPoints3","points2","p0","pi","m0","m1","m2","m5","m6","m10","transformPositions3","transformPositions4","transformVec4","rotateVec3X","rotateVec3Y","rotateVec3Z","projectVec4","unprojectVec3","mat2","viewMat","projMat","lerpVec3","t1","t2","item","euler","c1","c3","s1","s2","s3","trace","vec3PairToQuaternion","norm_u_norm_v","real_part","normalizeQuaternion","angleAxisToQuaternion","angleAxis","halfAngle","fsin","quaternionToEuler","mulQuaternions","p3","q0","q3","vec3ApplyQuaternion","qy","qz","qw","iy","iw","quaternionToMat4","tx","ty","tz","twx","twy","twz","txx","txy","txz","tyy","tyz","tzz","conjugateQuaternion","inverseQuaternion","quaternionToAngleAxis","AABB2","OBB3","OBB2","Sphere3","transformOBB3","aabb1","aabb2","getAABB3DiagPoint","diagVec","xneg","xpos","yneg","ypos","zneg","zpos","getAABB2Center","AABB3ToOBB3","obb","positions3ToAABB3","OBB3ToAABB3","points3ToAABB3","points3ToSphere3","sphere","numPoints","dist","positions3ToSphere3","tempVec3b","numPositions","OBB3ToSphere3","point","lenPoints","getSphere3Center","triangleNormal","p1x","p1y","p1z","p2x","p2y","p2z","p3x","p3y","p3z","uvi","tempVec2a","tempVec3c","_ref$center","_ref$transform","copyVertices","transformVertices","centerVertices","customTransformVertices","version","rootMetaObjectId","modelMetaObjectId","ctx","nextId","parseCityJSON","vertices2","cityJSONTransform","vertex","centerPos","cityObjects","CityObjects","objectId","cityObject","parseCityObject","parents","objectMaterial","surfaceMaterials","appearance","materials","geometryMaterial","material","themeIds","themeId","theme","surfaceMaterial","parseGeometrySurfacesWithOwnMaterials","parseGeometrySurfacesWithSharedMaterial","geomType","surfaces","boundaries","parseSurfacesWithOwnMaterials","shells","solids","surface","diffuseColor","transparency","sharedIndices","geometryCfg","newFace","extractLocalIndices","_toConsumableArray","pList","getNormalOfPositions","pv","to2D","unshift","tr","parseSurfacesWithSharedMaterial","primitiveCfg","boundary","newBoundary","index","includes","vertexIndex","indexOf","nexti","_p","_n","re","x3","tmp2","y3","GLTFLoader","getAttachment","gltfData","nodesHaveNames","geometryCreated","geometriesCreated","parseTextures","parseMaterials","parseDefaultScene","errMsg","parseTexture","sampler","flipY","_textureId","_textureSetId","parseTextureSet","_attributes","parseMaterialAttributes","textureSetCfg","normalTexture","normalTextureId","metallicPBR","pbrMetallicRoughness","baseColorTexture","extensions","specularPBR","specularTexture","specularColorTexture","materialAttributes","diffuseFactor","common","technique","blinn","phong","lambert","diffuse","transparent","baseColorFactor","metallicFactor","roughnessFactor","scene","scenes","parseScene","nodes","node","countMeshUsage","testIfNodesHaveNames","parseNodesWithoutNames","parseNodesWithNames","level","instances","children","childNode","depth","parseNodeMatrix","parseNodeMesh","objectIdStack","meshIdsStack","xktEntityId","nodeName","entityMeshIds","localMatrix","translation","createPrimitiveHash","primitive","hash","attributes","join","numPrimitives","primitives","mode","POSITION","NORMAL","COLOR_0","TEXCOORD_0","xktMeshId","meshCfg","atob2","atob","WEBGL_COMPONENT_TYPES","Int16Array","WEBGL_TYPE_SIZES","gltf","metaModelCorrections","getMetaModelCorrections","createXKTGeometryIds","nextMeshId","parseBuffers","parseBufferViews","freeBuffers","eachRootStats","eachChildRoot","metaObjectsMap","metaObjectParent","rootMetaObject","rootStats","numChildren","countChildren","buffers","all","map","parseBuffer","bufferInfo","_arrayBuffer","_buffer","uri","parseArrayBuffer","dataUriRegex","dataUriRegexResult","match","isBase64","decodeURIComponent","bufferViewsInfo","bufferViews","parseBufferView","bufferViewInfo","_typedArray","materialsInfo","materialInfo","parseMaterial","_materialData","defaultSceneInfo","sceneInfo","glTFNode","parseNode","deferredMeshIds","gltfMeshId","meshInfo","numPrimitivesInMesh","primitiveInfo","geometryHash","createPrimitiveGeometryHash","xktGeometryId","geometryArrays","parsePrimitiveGeometry","childNodeIdx","childGLTFNode","rootMetaObjectStats","accessors","indicesIndex","accessorInfo","parseAccessorTypedArray","positionsIndex","normalsIndex","colorsIndex","bufferView","itemSize","TypedArray","componentType","elementBytes","itemBytes","byteStride","count","_ref$autoNormals","autoNormals","ifcAPI","IfcAPI","SetWasmPath","Init","modelID","OpenModel","GetLineIDsWithType","IFCPROJECT","ifcProjectId","ifcProject","GetLine","parseMetadata","parseGeometry","parsePropertySets","IFCRELDEFINESBYPROPERTIES","relID","rel","relatingPropertyDefinition","RelatingPropertyDefinition","GlobalId","relatedObjects","RelatedObjects","relatedObject","HasProperties","Name","prop","nominalValue","NominalValue","property","valueType","Description","description","parseSpatialChildren","ifcElement","parseRelatedItemsOfType","expressID","IFCRELAGGREGATES","IFCRELCONTAINEDINSPATIALSTRUCTURE","relation","related","relatedItems","foundElement","isArray","element2","flatMeshes","LoadAllGeometry","flatMesh","createObject","IFCSPACE","ifcSpaceId","GetFlatMesh","flatMeshExpressID","placedGeometries","placedGeometry","geometryExpressID","GetGeometry","vertexData","GetVertexArray","GetVertexData","GetVertexDataSize","GetIndexArray","GetIndexData","GetIndexDataSize","flatTransformation","LASLoader","MAX_VERTICES","_ref$colorDepth","_ref$fp","_ref$skip","las","parsedData","loaderData","pointsFormatId","readAttributes","intensity","readIntensities","readColorsAndIntensities","pointsChunks","chunkArray","readPositions","colorsChunks","positionsValue","attributesPosition","attributesColor","attributesIntensity","colorSize","intensities","colorsCompressedSize","chunkSize","includeTypesMap","excludeTypesMap","newObject","countMetaObjects","_ref$littleEndian","littleEndian","textData","decodeText","header","parseHeader","headerLen","line","parseFloat","rgb","g","sizes","compressedSize","decompressedSize","decompressed","decompressLZF","dataview","getFloat32","getUint8","row","rowSize","result1","search","result2","exec","fields","viewpoint","parseInt","sizeSum","TextDecoder","decode","il","fromCharCode","escape","inData","outLength","inLength","outData","inPtr","outPtr","ctrl","ref","PLYLoader","_x","_parsePLYIntoXKTModel","hasColors","colorsValue","t0","_parseSTLIntoXKTModel","splitMeshes","smoothNormals","binData","ensureBinary","isBinary","parseBinary","parseASCII","ensureString","reader","getUint32","faceSize","numExpectedBytes","defaultR","defaultG","defaultB","lastR","lastG","lastB","newMesh","alpha","dataOffset","faceLength","normalX","normalZ","packedColor","getUint16","vertexstart","addMesh","faceRegex","faceCounter","floatRegex","vertexRegex","RegExp","normalRegex","normalx","normaly","normalz","verticesPerFace","normalsPerFace","nextGeometryId","ni","installFilePolyfills"],"sourceRoot":""} \ No newline at end of file diff --git a/dist/xeokit-convert.es.js b/dist/xeokit-convert.es.js index b9988eb..329ba1e 100644 --- a/dist/xeokit-convert.es.js +++ b/dist/xeokit-convert.es.js @@ -23975,6 +23975,9 @@ function createPrimitiveHash(primitive) { hash.push(attributes[key].id); } } + if (primitive.indices) { + hash.push(primitive.indices.id); + } return hash.join("."); } diff --git a/docs/ast/source/parsers/parseGLTFIntoXKTModel.js.json b/docs/ast/source/parsers/parseGLTFIntoXKTModel.js.json index 383fb26..ccb80d1 100644 --- a/docs/ast/source/parsers/parseGLTFIntoXKTModel.js.json +++ b/docs/ast/source/parsers/parseGLTFIntoXKTModel.js.json @@ -1,28 +1,28 @@ { "type": "File", "start": 0, - "end": 24873, + "end": 24949, "loc": { "start": { "line": 1, "column": 0 }, "end": { - "line": 714, + "line": 717, "column": 31 } }, "program": { "type": "Program", "start": 0, - "end": 24873, + "end": 24949, "loc": { "start": { "line": 1, "column": 0 }, "end": { - "line": 714, + "line": 717, "column": 31 } }, @@ -36695,14 +36695,14 @@ { "type": "FunctionDeclaration", "start": 19900, - "end": 20155, + "end": 20231, "loc": { "start": { "line": 595, "column": 0 }, "end": { - "line": 604, + "line": 607, "column": 1 } }, @@ -36748,14 +36748,14 @@ "body": { "type": "BlockStatement", "start": 19940, - "end": 20155, + "end": 20231, "loc": { "start": { "line": 595, "column": 40 }, "end": { - "line": 604, + "line": 607, "column": 1 } }, @@ -37244,58 +37244,307 @@ "alternate": null }, { - "type": "ReturnStatement", + "type": "IfStatement", "start": 20131, - "end": 20153, + "end": 20202, "loc": { "start": { "line": 603, "column": 4 }, "end": { - "line": 603, + "line": 605, + "column": 5 + } + }, + "test": { + "type": "MemberExpression", + "start": 20135, + "end": 20152, + "loc": { + "start": { + "line": 603, + "column": 8 + }, + "end": { + "line": 603, + "column": 25 + } + }, + "object": { + "type": "Identifier", + "start": 20135, + "end": 20144, + "loc": { + "start": { + "line": 603, + "column": 8 + }, + "end": { + "line": 603, + "column": 17 + }, + "identifierName": "primitive" + }, + "name": "primitive" + }, + "property": { + "type": "Identifier", + "start": 20145, + "end": 20152, + "loc": { + "start": { + "line": 603, + "column": 18 + }, + "end": { + "line": 603, + "column": 25 + }, + "identifierName": "indices" + }, + "name": "indices" + }, + "computed": false + }, + "consequent": { + "type": "BlockStatement", + "start": 20154, + "end": 20202, + "loc": { + "start": { + "line": 603, + "column": 27 + }, + "end": { + "line": 605, + "column": 5 + } + }, + "body": [ + { + "type": "ExpressionStatement", + "start": 20164, + "end": 20196, + "loc": { + "start": { + "line": 604, + "column": 8 + }, + "end": { + "line": 604, + "column": 40 + } + }, + "expression": { + "type": "CallExpression", + "start": 20164, + "end": 20195, + "loc": { + "start": { + "line": 604, + "column": 8 + }, + "end": { + "line": 604, + "column": 39 + } + }, + "callee": { + "type": "MemberExpression", + "start": 20164, + "end": 20173, + "loc": { + "start": { + "line": 604, + "column": 8 + }, + "end": { + "line": 604, + "column": 17 + } + }, + "object": { + "type": "Identifier", + "start": 20164, + "end": 20168, + "loc": { + "start": { + "line": 604, + "column": 8 + }, + "end": { + "line": 604, + "column": 12 + }, + "identifierName": "hash" + }, + "name": "hash" + }, + "property": { + "type": "Identifier", + "start": 20169, + "end": 20173, + "loc": { + "start": { + "line": 604, + "column": 13 + }, + "end": { + "line": 604, + "column": 17 + }, + "identifierName": "push" + }, + "name": "push" + }, + "computed": false + }, + "arguments": [ + { + "type": "MemberExpression", + "start": 20174, + "end": 20194, + "loc": { + "start": { + "line": 604, + "column": 18 + }, + "end": { + "line": 604, + "column": 38 + } + }, + "object": { + "type": "MemberExpression", + "start": 20174, + "end": 20191, + "loc": { + "start": { + "line": 604, + "column": 18 + }, + "end": { + "line": 604, + "column": 35 + } + }, + "object": { + "type": "Identifier", + "start": 20174, + "end": 20183, + "loc": { + "start": { + "line": 604, + "column": 18 + }, + "end": { + "line": 604, + "column": 27 + }, + "identifierName": "primitive" + }, + "name": "primitive" + }, + "property": { + "type": "Identifier", + "start": 20184, + "end": 20191, + "loc": { + "start": { + "line": 604, + "column": 28 + }, + "end": { + "line": 604, + "column": 35 + }, + "identifierName": "indices" + }, + "name": "indices" + }, + "computed": false + }, + "property": { + "type": "Identifier", + "start": 20192, + "end": 20194, + "loc": { + "start": { + "line": 604, + "column": 36 + }, + "end": { + "line": 604, + "column": 38 + }, + "identifierName": "id" + }, + "name": "id" + }, + "computed": false + } + ] + } + } + ], + "directives": [] + }, + "alternate": null + }, + { + "type": "ReturnStatement", + "start": 20207, + "end": 20229, + "loc": { + "start": { + "line": 606, + "column": 4 + }, + "end": { + "line": 606, "column": 26 } }, "argument": { "type": "CallExpression", - "start": 20138, - "end": 20152, + "start": 20214, + "end": 20228, "loc": { "start": { - "line": 603, + "line": 606, "column": 11 }, "end": { - "line": 603, + "line": 606, "column": 25 } }, "callee": { "type": "MemberExpression", - "start": 20138, - "end": 20147, + "start": 20214, + "end": 20223, "loc": { "start": { - "line": 603, + "line": 606, "column": 11 }, "end": { - "line": 603, + "line": 606, "column": 20 } }, "object": { "type": "Identifier", - "start": 20138, - "end": 20142, + "start": 20214, + "end": 20218, "loc": { "start": { - "line": 603, + "line": 606, "column": 11 }, "end": { - "line": 603, + "line": 606, "column": 15 }, "identifierName": "hash" @@ -37304,15 +37553,15 @@ }, "property": { "type": "Identifier", - "start": 20143, - "end": 20147, + "start": 20219, + "end": 20223, "loc": { "start": { - "line": 603, + "line": 606, "column": 16 }, "end": { - "line": 603, + "line": 606, "column": 20 }, "identifierName": "join" @@ -37324,15 +37573,15 @@ "arguments": [ { "type": "StringLiteral", - "start": 20148, - "end": 20151, + "start": 20224, + "end": 20227, "loc": { "start": { - "line": 603, + "line": 606, "column": 21 }, "end": { - "line": 603, + "line": 606, "column": 24 } }, @@ -37353,15 +37602,15 @@ { "type": "CommentBlock", "value": "*\n * Parses primitives referenced by the mesh belonging to the given node, creating XKTMeshes in the XKTModel.\n *\n * @param node glTF node\n * @param ctx Parsing context\n * @param matrix Matrix for the XKTMeshes\n * @param meshIds returns IDs of the new XKTMeshes\n ", - "start": 20157, - "end": 20424, + "start": 20233, + "end": 20500, "loc": { "start": { - "line": 606, + "line": 609, "column": 0 }, "end": { - "line": 613, + "line": 616, "column": 3 } } @@ -37370,29 +37619,29 @@ }, { "type": "FunctionDeclaration", - "start": 20425, - "end": 24840, + "start": 20501, + "end": 24916, "loc": { "start": { - "line": 614, + "line": 617, "column": 0 }, "end": { - "line": 712, + "line": 715, "column": 1 } }, "id": { "type": "Identifier", - "start": 20434, - "end": 20447, + "start": 20510, + "end": 20523, "loc": { "start": { - "line": 614, + "line": 617, "column": 9 }, "end": { - "line": 614, + "line": 617, "column": 22 }, "identifierName": "parseNodeMesh" @@ -37406,15 +37655,15 @@ "params": [ { "type": "Identifier", - "start": 20448, - "end": 20452, + "start": 20524, + "end": 20528, "loc": { "start": { - "line": 614, + "line": 617, "column": 23 }, "end": { - "line": 614, + "line": 617, "column": 27 }, "identifierName": "node" @@ -37423,15 +37672,15 @@ }, { "type": "Identifier", - "start": 20454, - "end": 20457, + "start": 20530, + "end": 20533, "loc": { "start": { - "line": 614, + "line": 617, "column": 29 }, "end": { - "line": 614, + "line": 617, "column": 32 }, "identifierName": "ctx" @@ -37440,15 +37689,15 @@ }, { "type": "Identifier", - "start": 20459, - "end": 20465, + "start": 20535, + "end": 20541, "loc": { "start": { - "line": 614, + "line": 617, "column": 34 }, "end": { - "line": 614, + "line": 617, "column": 40 }, "identifierName": "matrix" @@ -37457,15 +37706,15 @@ }, { "type": "Identifier", - "start": 20467, - "end": 20474, + "start": 20543, + "end": 20550, "loc": { "start": { - "line": 614, + "line": 617, "column": 42 }, "end": { - "line": 614, + "line": 617, "column": 49 }, "identifierName": "meshIds" @@ -37475,44 +37724,44 @@ ], "body": { "type": "BlockStatement", - "start": 20476, - "end": 24840, + "start": 20552, + "end": 24916, "loc": { "start": { - "line": 614, + "line": 617, "column": 51 }, "end": { - "line": 712, + "line": 715, "column": 1 } }, "body": [ { "type": "IfStatement", - "start": 20482, - "end": 20516, + "start": 20558, + "end": 20592, "loc": { "start": { - "line": 615, + "line": 618, "column": 4 }, "end": { - "line": 617, + "line": 620, "column": 5 } }, "test": { "type": "UnaryExpression", - "start": 20486, - "end": 20491, + "start": 20562, + "end": 20567, "loc": { "start": { - "line": 615, + "line": 618, "column": 8 }, "end": { - "line": 615, + "line": 618, "column": 13 } }, @@ -37520,15 +37769,15 @@ "prefix": true, "argument": { "type": "Identifier", - "start": 20487, - "end": 20491, + "start": 20563, + "end": 20567, "loc": { "start": { - "line": 615, + "line": 618, "column": 9 }, "end": { - "line": 615, + "line": 618, "column": 13 }, "identifierName": "node" @@ -37541,30 +37790,30 @@ }, "consequent": { "type": "BlockStatement", - "start": 20493, - "end": 20516, + "start": 20569, + "end": 20592, "loc": { "start": { - "line": 615, + "line": 618, "column": 15 }, "end": { - "line": 617, + "line": 620, "column": 5 } }, "body": [ { "type": "ReturnStatement", - "start": 20503, - "end": 20510, + "start": 20579, + "end": 20586, "loc": { "start": { - "line": 616, + "line": 619, "column": 8 }, "end": { - "line": 616, + "line": 619, "column": 15 } }, @@ -37577,44 +37826,44 @@ }, { "type": "VariableDeclaration", - "start": 20521, - "end": 20544, + "start": 20597, + "end": 20620, "loc": { "start": { - "line": 618, + "line": 621, "column": 4 }, "end": { - "line": 618, + "line": 621, "column": 27 } }, "declarations": [ { "type": "VariableDeclarator", - "start": 20527, - "end": 20543, + "start": 20603, + "end": 20619, "loc": { "start": { - "line": 618, + "line": 621, "column": 10 }, "end": { - "line": 618, + "line": 621, "column": 26 } }, "id": { "type": "Identifier", - "start": 20527, - "end": 20531, + "start": 20603, + "end": 20607, "loc": { "start": { - "line": 618, + "line": 621, "column": 10 }, "end": { - "line": 618, + "line": 621, "column": 14 }, "identifierName": "mesh" @@ -37623,29 +37872,29 @@ }, "init": { "type": "MemberExpression", - "start": 20534, - "end": 20543, + "start": 20610, + "end": 20619, "loc": { "start": { - "line": 618, + "line": 621, "column": 17 }, "end": { - "line": 618, + "line": 621, "column": 26 } }, "object": { "type": "Identifier", - "start": 20534, - "end": 20538, + "start": 20610, + "end": 20614, "loc": { "start": { - "line": 618, + "line": 621, "column": 17 }, "end": { - "line": 618, + "line": 621, "column": 21 }, "identifierName": "node" @@ -37654,15 +37903,15 @@ }, "property": { "type": "Identifier", - "start": 20539, - "end": 20543, + "start": 20615, + "end": 20619, "loc": { "start": { - "line": 618, + "line": 621, "column": 22 }, "end": { - "line": 618, + "line": 621, "column": 26 }, "identifierName": "mesh" @@ -37677,29 +37926,29 @@ }, { "type": "IfStatement", - "start": 20549, - "end": 20583, + "start": 20625, + "end": 20659, "loc": { "start": { - "line": 619, + "line": 622, "column": 4 }, "end": { - "line": 621, + "line": 624, "column": 5 } }, "test": { "type": "UnaryExpression", - "start": 20553, - "end": 20558, + "start": 20629, + "end": 20634, "loc": { "start": { - "line": 619, + "line": 622, "column": 8 }, "end": { - "line": 619, + "line": 622, "column": 13 } }, @@ -37707,15 +37956,15 @@ "prefix": true, "argument": { "type": "Identifier", - "start": 20554, - "end": 20558, + "start": 20630, + "end": 20634, "loc": { "start": { - "line": 619, + "line": 622, "column": 9 }, "end": { - "line": 619, + "line": 622, "column": 13 }, "identifierName": "mesh" @@ -37728,30 +37977,30 @@ }, "consequent": { "type": "BlockStatement", - "start": 20560, - "end": 20583, + "start": 20636, + "end": 20659, "loc": { "start": { - "line": 619, + "line": 622, "column": 15 }, "end": { - "line": 621, + "line": 624, "column": 5 } }, "body": [ { "type": "ReturnStatement", - "start": 20570, - "end": 20577, + "start": 20646, + "end": 20653, "loc": { "start": { - "line": 620, + "line": 623, "column": 8 }, "end": { - "line": 620, + "line": 623, "column": 15 } }, @@ -37764,44 +38013,44 @@ }, { "type": "VariableDeclaration", - "start": 20588, - "end": 20633, + "start": 20664, + "end": 20709, "loc": { "start": { - "line": 622, + "line": 625, "column": 4 }, "end": { - "line": 622, + "line": 625, "column": 49 } }, "declarations": [ { "type": "VariableDeclarator", - "start": 20594, - "end": 20632, + "start": 20670, + "end": 20708, "loc": { "start": { - "line": 622, + "line": 625, "column": 10 }, "end": { - "line": 622, + "line": 625, "column": 48 } }, "id": { "type": "Identifier", - "start": 20594, - "end": 20607, + "start": 20670, + "end": 20683, "loc": { "start": { - "line": 622, + "line": 625, "column": 10 }, "end": { - "line": 622, + "line": 625, "column": 23 }, "identifierName": "numPrimitives" @@ -37810,43 +38059,43 @@ }, "init": { "type": "MemberExpression", - "start": 20610, - "end": 20632, + "start": 20686, + "end": 20708, "loc": { "start": { - "line": 622, + "line": 625, "column": 26 }, "end": { - "line": 622, + "line": 625, "column": 48 } }, "object": { "type": "MemberExpression", - "start": 20610, - "end": 20625, + "start": 20686, + "end": 20701, "loc": { "start": { - "line": 622, + "line": 625, "column": 26 }, "end": { - "line": 622, + "line": 625, "column": 41 } }, "object": { "type": "Identifier", - "start": 20610, - "end": 20614, + "start": 20686, + "end": 20690, "loc": { "start": { - "line": 622, + "line": 625, "column": 26 }, "end": { - "line": 622, + "line": 625, "column": 30 }, "identifierName": "mesh" @@ -37855,15 +38104,15 @@ }, "property": { "type": "Identifier", - "start": 20615, - "end": 20625, + "start": 20691, + "end": 20701, "loc": { "start": { - "line": 622, + "line": 625, "column": 31 }, "end": { - "line": 622, + "line": 625, "column": 41 }, "identifierName": "primitives" @@ -37874,15 +38123,15 @@ }, "property": { "type": "Identifier", - "start": 20626, - "end": 20632, + "start": 20702, + "end": 20708, "loc": { "start": { - "line": 622, + "line": 625, "column": 42 }, "end": { - "line": 622, + "line": 625, "column": 48 }, "identifierName": "length" @@ -37897,43 +38146,43 @@ }, { "type": "IfStatement", - "start": 20638, - "end": 24838, + "start": 20714, + "end": 24914, "loc": { "start": { - "line": 623, + "line": 626, "column": 4 }, "end": { - "line": 711, + "line": 714, "column": 5 } }, "test": { "type": "BinaryExpression", - "start": 20642, - "end": 20659, + "start": 20718, + "end": 20735, "loc": { "start": { - "line": 623, + "line": 626, "column": 8 }, "end": { - "line": 623, + "line": 626, "column": 25 } }, "left": { "type": "Identifier", - "start": 20642, - "end": 20655, + "start": 20718, + "end": 20731, "loc": { "start": { - "line": 623, + "line": 626, "column": 8 }, "end": { - "line": 623, + "line": 626, "column": 21 }, "identifierName": "numPrimitives" @@ -37943,15 +38192,15 @@ "operator": ">", "right": { "type": "NumericLiteral", - "start": 20658, - "end": 20659, + "start": 20734, + "end": 20735, "loc": { "start": { - "line": 623, + "line": 626, "column": 24 }, "end": { - "line": 623, + "line": 626, "column": 25 } }, @@ -37964,73 +38213,73 @@ }, "consequent": { "type": "BlockStatement", - "start": 20661, - "end": 24838, + "start": 20737, + "end": 24914, "loc": { "start": { - "line": 623, + "line": 626, "column": 27 }, "end": { - "line": 711, + "line": 714, "column": 5 } }, "body": [ { "type": "ForStatement", - "start": 20671, - "end": 24832, + "start": 20747, + "end": 24908, "loc": { "start": { - "line": 624, + "line": 627, "column": 8 }, "end": { - "line": 710, + "line": 713, "column": 9 } }, "init": { "type": "VariableDeclaration", - "start": 20676, - "end": 20685, + "start": 20752, + "end": 20761, "loc": { "start": { - "line": 624, + "line": 627, "column": 13 }, "end": { - "line": 624, + "line": 627, "column": 22 } }, "declarations": [ { "type": "VariableDeclarator", - "start": 20680, - "end": 20685, + "start": 20756, + "end": 20761, "loc": { "start": { - "line": 624, + "line": 627, "column": 17 }, "end": { - "line": 624, + "line": 627, "column": 22 } }, "id": { "type": "Identifier", - "start": 20680, - "end": 20681, + "start": 20756, + "end": 20757, "loc": { "start": { - "line": 624, + "line": 627, "column": 17 }, "end": { - "line": 624, + "line": 627, "column": 18 }, "identifierName": "i" @@ -38039,15 +38288,15 @@ }, "init": { "type": "NumericLiteral", - "start": 20684, - "end": 20685, + "start": 20760, + "end": 20761, "loc": { "start": { - "line": 624, + "line": 627, "column": 21 }, "end": { - "line": 624, + "line": 627, "column": 22 } }, @@ -38063,29 +38312,29 @@ }, "test": { "type": "BinaryExpression", - "start": 20687, - "end": 20704, + "start": 20763, + "end": 20780, "loc": { "start": { - "line": 624, + "line": 627, "column": 24 }, "end": { - "line": 624, + "line": 627, "column": 41 } }, "left": { "type": "Identifier", - "start": 20687, - "end": 20688, + "start": 20763, + "end": 20764, "loc": { "start": { - "line": 624, + "line": 627, "column": 24 }, "end": { - "line": 624, + "line": 627, "column": 25 }, "identifierName": "i" @@ -38095,15 +38344,15 @@ "operator": "<", "right": { "type": "Identifier", - "start": 20691, - "end": 20704, + "start": 20767, + "end": 20780, "loc": { "start": { - "line": 624, + "line": 627, "column": 28 }, "end": { - "line": 624, + "line": 627, "column": 41 }, "identifierName": "numPrimitives" @@ -38113,15 +38362,15 @@ }, "update": { "type": "UpdateExpression", - "start": 20706, - "end": 20709, + "start": 20782, + "end": 20785, "loc": { "start": { - "line": 624, + "line": 627, "column": 43 }, "end": { - "line": 624, + "line": 627, "column": 46 } }, @@ -38129,15 +38378,15 @@ "prefix": false, "argument": { "type": "Identifier", - "start": 20706, - "end": 20707, + "start": 20782, + "end": 20783, "loc": { "start": { - "line": 624, + "line": 627, "column": 43 }, "end": { - "line": 624, + "line": 627, "column": 44 }, "identifierName": "i" @@ -38147,88 +38396,88 @@ }, "body": { "type": "BlockStatement", - "start": 20711, - "end": 24832, + "start": 20787, + "end": 24908, "loc": { "start": { - "line": 624, + "line": 627, "column": 48 }, "end": { - "line": 710, + "line": 713, "column": 9 } }, "body": [ { "type": "TryStatement", - "start": 20725, - "end": 24822, + "start": 20801, + "end": 24898, "loc": { "start": { - "line": 625, + "line": 628, "column": 12 }, "end": { - "line": 709, + "line": 712, "column": 13 } }, "block": { "type": "BlockStatement", - "start": 20729, - "end": 24764, + "start": 20805, + "end": 24840, "loc": { "start": { - "line": 625, + "line": 628, "column": 16 }, "end": { - "line": 707, + "line": 710, "column": 13 } }, "body": [ { "type": "VariableDeclaration", - "start": 20747, - "end": 20784, + "start": 20823, + "end": 20860, "loc": { "start": { - "line": 626, + "line": 629, "column": 16 }, "end": { - "line": 626, + "line": 629, "column": 53 } }, "declarations": [ { "type": "VariableDeclarator", - "start": 20753, - "end": 20783, + "start": 20829, + "end": 20859, "loc": { "start": { - "line": 626, + "line": 629, "column": 22 }, "end": { - "line": 626, + "line": 629, "column": 52 } }, "id": { "type": "Identifier", - "start": 20753, - "end": 20762, + "start": 20829, + "end": 20838, "loc": { "start": { - "line": 626, + "line": 629, "column": 22 }, "end": { - "line": 626, + "line": 629, "column": 31 }, "identifierName": "primitive" @@ -38237,43 +38486,43 @@ }, "init": { "type": "MemberExpression", - "start": 20765, - "end": 20783, + "start": 20841, + "end": 20859, "loc": { "start": { - "line": 626, + "line": 629, "column": 34 }, "end": { - "line": 626, + "line": 629, "column": 52 } }, "object": { "type": "MemberExpression", - "start": 20765, - "end": 20780, + "start": 20841, + "end": 20856, "loc": { "start": { - "line": 626, + "line": 629, "column": 34 }, "end": { - "line": 626, + "line": 629, "column": 49 } }, "object": { "type": "Identifier", - "start": 20765, - "end": 20769, + "start": 20841, + "end": 20845, "loc": { "start": { - "line": 626, + "line": 629, "column": 34 }, "end": { - "line": 626, + "line": 629, "column": 38 }, "identifierName": "mesh" @@ -38282,15 +38531,15 @@ }, "property": { "type": "Identifier", - "start": 20770, - "end": 20780, + "start": 20846, + "end": 20856, "loc": { "start": { - "line": 626, + "line": 629, "column": 39 }, "end": { - "line": 626, + "line": 629, "column": 49 }, "identifierName": "primitives" @@ -38301,15 +38550,15 @@ }, "property": { "type": "Identifier", - "start": 20781, - "end": 20782, + "start": 20857, + "end": 20858, "loc": { "start": { - "line": 626, + "line": 629, "column": 50 }, "end": { - "line": 626, + "line": 629, "column": 51 }, "identifierName": "i" @@ -38324,44 +38573,44 @@ }, { "type": "VariableDeclaration", - "start": 20801, - "end": 20851, + "start": 20877, + "end": 20927, "loc": { "start": { - "line": 627, + "line": 630, "column": 16 }, "end": { - "line": 627, + "line": 630, "column": 66 } }, "declarations": [ { "type": "VariableDeclarator", - "start": 20807, - "end": 20850, + "start": 20883, + "end": 20926, "loc": { "start": { - "line": 627, + "line": 630, "column": 22 }, "end": { - "line": 627, + "line": 630, "column": 65 } }, "id": { "type": "Identifier", - "start": 20807, - "end": 20817, + "start": 20883, + "end": 20893, "loc": { "start": { - "line": 627, + "line": 630, "column": 22 }, "end": { - "line": 627, + "line": 630, "column": 32 }, "identifierName": "geometryId" @@ -38370,29 +38619,29 @@ }, "init": { "type": "CallExpression", - "start": 20820, - "end": 20850, + "start": 20896, + "end": 20926, "loc": { "start": { - "line": 627, + "line": 630, "column": 35 }, "end": { - "line": 627, + "line": 630, "column": 65 } }, "callee": { "type": "Identifier", - "start": 20820, - "end": 20839, + "start": 20896, + "end": 20915, "loc": { "start": { - "line": 627, + "line": 630, "column": 35 }, "end": { - "line": 627, + "line": 630, "column": 54 }, "identifierName": "createPrimitiveHash" @@ -38402,15 +38651,15 @@ "arguments": [ { "type": "Identifier", - "start": 20840, - "end": 20849, + "start": 20916, + "end": 20925, "loc": { "start": { - "line": 627, + "line": 630, "column": 55 }, "end": { - "line": 627, + "line": 630, "column": 64 }, "identifierName": "primitive" @@ -38425,29 +38674,29 @@ }, { "type": "IfStatement", - "start": 20868, - "end": 23848, + "start": 20944, + "end": 23924, "loc": { "start": { - "line": 628, + "line": 631, "column": 16 }, "end": { - "line": 687, + "line": 690, "column": 17 } }, "test": { "type": "UnaryExpression", - "start": 20872, - "end": 20906, + "start": 20948, + "end": 20982, "loc": { "start": { - "line": 628, + "line": 631, "column": 20 }, "end": { - "line": 628, + "line": 631, "column": 54 } }, @@ -38455,43 +38704,43 @@ "prefix": true, "argument": { "type": "MemberExpression", - "start": 20873, - "end": 20906, + "start": 20949, + "end": 20982, "loc": { "start": { - "line": 628, + "line": 631, "column": 21 }, "end": { - "line": 628, + "line": 631, "column": 54 } }, "object": { "type": "MemberExpression", - "start": 20873, - "end": 20894, + "start": 20949, + "end": 20970, "loc": { "start": { - "line": 628, + "line": 631, "column": 21 }, "end": { - "line": 628, + "line": 631, "column": 42 } }, "object": { "type": "Identifier", - "start": 20873, - "end": 20876, + "start": 20949, + "end": 20952, "loc": { "start": { - "line": 628, + "line": 631, "column": 21 }, "end": { - "line": 628, + "line": 631, "column": 24 }, "identifierName": "ctx" @@ -38500,15 +38749,15 @@ }, "property": { "type": "Identifier", - "start": 20877, - "end": 20894, + "start": 20953, + "end": 20970, "loc": { "start": { - "line": 628, + "line": 631, "column": 25 }, "end": { - "line": 628, + "line": 631, "column": 42 }, "identifierName": "geometriesCreated" @@ -38519,15 +38768,15 @@ }, "property": { "type": "Identifier", - "start": 20895, - "end": 20905, + "start": 20971, + "end": 20981, "loc": { "start": { - "line": 628, + "line": 631, "column": 43 }, "end": { - "line": 628, + "line": 631, "column": 53 }, "identifierName": "geometryId" @@ -38542,59 +38791,59 @@ }, "consequent": { "type": "BlockStatement", - "start": 20908, - "end": 23848, + "start": 20984, + "end": 23924, "loc": { "start": { - "line": 628, + "line": 631, "column": 56 }, "end": { - "line": 687, + "line": 690, "column": 17 } }, "body": [ { "type": "VariableDeclaration", - "start": 20930, - "end": 21009, + "start": 21006, + "end": 21085, "loc": { "start": { - "line": 629, + "line": 632, "column": 20 }, "end": { - "line": 631, + "line": 634, "column": 22 } }, "declarations": [ { "type": "VariableDeclarator", - "start": 20936, - "end": 21008, + "start": 21012, + "end": 21084, "loc": { "start": { - "line": 629, + "line": 632, "column": 26 }, "end": { - "line": 631, + "line": 634, "column": 21 } }, "id": { "type": "Identifier", - "start": 20936, - "end": 20947, + "start": 21012, + "end": 21023, "loc": { "start": { - "line": 629, + "line": 632, "column": 26 }, "end": { - "line": 629, + "line": 632, "column": 37 }, "identifierName": "geometryCfg" @@ -38603,30 +38852,30 @@ }, "init": { "type": "ObjectExpression", - "start": 20950, - "end": 21008, + "start": 21026, + "end": 21084, "loc": { "start": { - "line": 629, + "line": 632, "column": 40 }, "end": { - "line": 631, + "line": 634, "column": 21 } }, "properties": [ { "type": "ObjectProperty", - "start": 20976, - "end": 20986, + "start": 21052, + "end": 21062, "loc": { "start": { - "line": 630, + "line": 633, "column": 24 }, "end": { - "line": 630, + "line": 633, "column": 34 } }, @@ -38635,15 +38884,15 @@ "computed": false, "key": { "type": "Identifier", - "start": 20976, - "end": 20986, + "start": 21052, + "end": 21062, "loc": { "start": { - "line": 630, + "line": 633, "column": 24 }, "end": { - "line": 630, + "line": 633, "column": 34 }, "identifierName": "geometryId" @@ -38652,15 +38901,15 @@ }, "value": { "type": "Identifier", - "start": 20976, - "end": 20986, + "start": 21052, + "end": 21062, "loc": { "start": { - "line": 630, + "line": 633, "column": 24 }, "end": { - "line": 630, + "line": 633, "column": 34 }, "identifierName": "geometryId" @@ -38679,43 +38928,43 @@ }, { "type": "SwitchStatement", - "start": 21030, - "end": 22226, + "start": 21106, + "end": 22302, "loc": { "start": { - "line": 632, + "line": 635, "column": 20 }, "end": { - "line": 656, + "line": 659, "column": 21 } }, "discriminant": { "type": "MemberExpression", - "start": 21038, - "end": 21052, + "start": 21114, + "end": 21128, "loc": { "start": { - "line": 632, + "line": 635, "column": 28 }, "end": { - "line": 632, + "line": 635, "column": 42 } }, "object": { "type": "Identifier", - "start": 21038, - "end": 21047, + "start": 21114, + "end": 21123, "loc": { "start": { - "line": 632, + "line": 635, "column": 28 }, "end": { - "line": 632, + "line": 635, "column": 37 }, "identifierName": "primitive" @@ -38724,15 +38973,15 @@ }, "property": { "type": "Identifier", - "start": 21048, - "end": 21052, + "start": 21124, + "end": 21128, "loc": { "start": { - "line": 632, + "line": 635, "column": 38 }, "end": { - "line": 632, + "line": 635, "column": 42 }, "identifierName": "mode" @@ -38744,183 +38993,8 @@ "cases": [ { "type": "SwitchCase", - "start": 21080, - "end": 21198, - "loc": { - "start": { - "line": 633, - "column": 24 - }, - "end": { - "line": 635, - "column": 34 - } - }, - "consequent": [ - { - "type": "ExpressionStatement", - "start": 21126, - "end": 21163, - "loc": { - "start": { - "line": 634, - "column": 28 - }, - "end": { - "line": 634, - "column": 65 - } - }, - "expression": { - "type": "AssignmentExpression", - "start": 21126, - "end": 21162, - "loc": { - "start": { - "line": 634, - "column": 28 - }, - "end": { - "line": 634, - "column": 64 - } - }, - "operator": "=", - "left": { - "type": "MemberExpression", - "start": 21126, - "end": 21151, - "loc": { - "start": { - "line": 634, - "column": 28 - }, - "end": { - "line": 634, - "column": 53 - } - }, - "object": { - "type": "Identifier", - "start": 21126, - "end": 21137, - "loc": { - "start": { - "line": 634, - "column": 28 - }, - "end": { - "line": 634, - "column": 39 - }, - "identifierName": "geometryCfg" - }, - "name": "geometryCfg", - "leadingComments": null - }, - "property": { - "type": "Identifier", - "start": 21138, - "end": 21151, - "loc": { - "start": { - "line": 634, - "column": 40 - }, - "end": { - "line": 634, - "column": 53 - }, - "identifierName": "primitiveType" - }, - "name": "primitiveType" - }, - "computed": false, - "leadingComments": null - }, - "right": { - "type": "StringLiteral", - "start": 21154, - "end": 21162, - "loc": { - "start": { - "line": 634, - "column": 56 - }, - "end": { - "line": 634, - "column": 64 - } - }, - "extra": { - "rawValue": "points", - "raw": "\"points\"" - }, - "value": "points" - }, - "leadingComments": null - }, - "leadingComments": [ - { - "type": "CommentLine", - "value": " POINTS", - "start": 21088, - "end": 21097, - "loc": { - "start": { - "line": 633, - "column": 32 - }, - "end": { - "line": 633, - "column": 41 - } - } - } - ] - }, - { - "type": "BreakStatement", - "start": 21192, - "end": 21198, - "loc": { - "start": { - "line": 635, - "column": 28 - }, - "end": { - "line": 635, - "column": 34 - } - }, - "label": null - } - ], - "test": { - "type": "NumericLiteral", - "start": 21085, - "end": 21086, - "loc": { - "start": { - "line": 633, - "column": 29 - }, - "end": { - "line": 633, - "column": 30 - } - }, - "extra": { - "rawValue": 0, - "raw": "0" - }, - "value": 0 - } - }, - { - "type": "SwitchCase", - "start": 21223, - "end": 21339, + "start": 21156, + "end": 21274, "loc": { "start": { "line": 636, @@ -38934,8 +39008,8 @@ "consequent": [ { "type": "ExpressionStatement", - "start": 21268, - "end": 21304, + "start": 21202, + "end": 21239, "loc": { "start": { "line": 637, @@ -38943,13 +39017,13 @@ }, "end": { "line": 637, - "column": 64 + "column": 65 } }, "expression": { "type": "AssignmentExpression", - "start": 21268, - "end": 21303, + "start": 21202, + "end": 21238, "loc": { "start": { "line": 637, @@ -38957,14 +39031,14 @@ }, "end": { "line": 637, - "column": 63 + "column": 64 } }, "operator": "=", "left": { "type": "MemberExpression", - "start": 21268, - "end": 21293, + "start": 21202, + "end": 21227, "loc": { "start": { "line": 637, @@ -38977,8 +39051,8 @@ }, "object": { "type": "Identifier", - "start": 21268, - "end": 21279, + "start": 21202, + "end": 21213, "loc": { "start": { "line": 637, @@ -38995,8 +39069,8 @@ }, "property": { "type": "Identifier", - "start": 21280, - "end": 21293, + "start": 21214, + "end": 21227, "loc": { "start": { "line": 637, @@ -39015,8 +39089,8 @@ }, "right": { "type": "StringLiteral", - "start": 21296, - "end": 21303, + "start": 21230, + "end": 21238, "loc": { "start": { "line": 637, @@ -39024,23 +39098,23 @@ }, "end": { "line": 637, - "column": 63 + "column": 64 } }, "extra": { - "rawValue": "lines", - "raw": "\"lines\"" + "rawValue": "points", + "raw": "\"points\"" }, - "value": "lines" + "value": "points" }, "leadingComments": null }, "leadingComments": [ { "type": "CommentLine", - "value": " LINES", - "start": 21231, - "end": 21239, + "value": " POINTS", + "start": 21164, + "end": 21173, "loc": { "start": { "line": 636, @@ -39048,7 +39122,7 @@ }, "end": { "line": 636, - "column": 40 + "column": 41 } } } @@ -39056,8 +39130,8 @@ }, { "type": "BreakStatement", - "start": 21333, - "end": 21339, + "start": 21268, + "end": 21274, "loc": { "start": { "line": 638, @@ -39073,8 +39147,8 @@ ], "test": { "type": "NumericLiteral", - "start": 21228, - "end": 21229, + "start": 21161, + "end": 21162, "loc": { "start": { "line": 636, @@ -39086,16 +39160,16 @@ } }, "extra": { - "rawValue": 1, - "raw": "1" + "rawValue": 0, + "raw": "0" }, - "value": 1 + "value": 0 } }, { "type": "SwitchCase", - "start": 21364, - "end": 21488, + "start": 21299, + "end": 21415, "loc": { "start": { "line": 639, @@ -39109,8 +39183,8 @@ "consequent": [ { "type": "ExpressionStatement", - "start": 21413, - "end": 21453, + "start": 21344, + "end": 21380, "loc": { "start": { "line": 640, @@ -39118,13 +39192,13 @@ }, "end": { "line": 640, - "column": 68 + "column": 64 } }, "expression": { "type": "AssignmentExpression", - "start": 21413, - "end": 21452, + "start": 21344, + "end": 21379, "loc": { "start": { "line": 640, @@ -39132,14 +39206,14 @@ }, "end": { "line": 640, - "column": 67 + "column": 63 } }, "operator": "=", "left": { "type": "MemberExpression", - "start": 21413, - "end": 21438, + "start": 21344, + "end": 21369, "loc": { "start": { "line": 640, @@ -39152,8 +39226,8 @@ }, "object": { "type": "Identifier", - "start": 21413, - "end": 21424, + "start": 21344, + "end": 21355, "loc": { "start": { "line": 640, @@ -39170,8 +39244,8 @@ }, "property": { "type": "Identifier", - "start": 21425, - "end": 21438, + "start": 21356, + "end": 21369, "loc": { "start": { "line": 640, @@ -39190,8 +39264,8 @@ }, "right": { "type": "StringLiteral", - "start": 21441, - "end": 21452, + "start": 21372, + "end": 21379, "loc": { "start": { "line": 640, @@ -39199,23 +39273,23 @@ }, "end": { "line": 640, - "column": 67 + "column": 63 } }, "extra": { - "rawValue": "line-loop", - "raw": "\"line-loop\"" + "rawValue": "lines", + "raw": "\"lines\"" }, - "value": "line-loop" + "value": "lines" }, "leadingComments": null }, "leadingComments": [ { "type": "CommentLine", - "value": " LINE_LOOP", - "start": 21372, - "end": 21384, + "value": " LINES", + "start": 21307, + "end": 21315, "loc": { "start": { "line": 639, @@ -39223,7 +39297,7 @@ }, "end": { "line": 639, - "column": 44 + "column": 40 } } } @@ -39231,8 +39305,8 @@ }, { "type": "BreakStatement", - "start": 21482, - "end": 21488, + "start": 21409, + "end": 21415, "loc": { "start": { "line": 641, @@ -39248,8 +39322,8 @@ ], "test": { "type": "NumericLiteral", - "start": 21369, - "end": 21370, + "start": 21304, + "end": 21305, "loc": { "start": { "line": 639, @@ -39261,16 +39335,16 @@ } }, "extra": { - "rawValue": 2, - "raw": "2" + "rawValue": 1, + "raw": "1" }, - "value": 2 + "value": 1 } }, { "type": "SwitchCase", - "start": 21513, - "end": 21639, + "start": 21440, + "end": 21564, "loc": { "start": { "line": 642, @@ -39284,8 +39358,8 @@ "consequent": [ { "type": "ExpressionStatement", - "start": 21563, - "end": 21604, + "start": 21489, + "end": 21529, "loc": { "start": { "line": 643, @@ -39293,13 +39367,13 @@ }, "end": { "line": 643, - "column": 69 + "column": 68 } }, "expression": { "type": "AssignmentExpression", - "start": 21563, - "end": 21603, + "start": 21489, + "end": 21528, "loc": { "start": { "line": 643, @@ -39307,14 +39381,14 @@ }, "end": { "line": 643, - "column": 68 + "column": 67 } }, "operator": "=", "left": { "type": "MemberExpression", - "start": 21563, - "end": 21588, + "start": 21489, + "end": 21514, "loc": { "start": { "line": 643, @@ -39327,8 +39401,8 @@ }, "object": { "type": "Identifier", - "start": 21563, - "end": 21574, + "start": 21489, + "end": 21500, "loc": { "start": { "line": 643, @@ -39345,8 +39419,8 @@ }, "property": { "type": "Identifier", - "start": 21575, - "end": 21588, + "start": 21501, + "end": 21514, "loc": { "start": { "line": 643, @@ -39365,8 +39439,8 @@ }, "right": { "type": "StringLiteral", - "start": 21591, - "end": 21603, + "start": 21517, + "end": 21528, "loc": { "start": { "line": 643, @@ -39374,23 +39448,23 @@ }, "end": { "line": 643, - "column": 68 + "column": 67 } }, "extra": { - "rawValue": "line-strip", - "raw": "\"line-strip\"" + "rawValue": "line-loop", + "raw": "\"line-loop\"" }, - "value": "line-strip" + "value": "line-loop" }, "leadingComments": null }, "leadingComments": [ { "type": "CommentLine", - "value": " LINE_STRIP", - "start": 21521, - "end": 21534, + "value": " LINE_LOOP", + "start": 21448, + "end": 21460, "loc": { "start": { "line": 642, @@ -39398,7 +39472,7 @@ }, "end": { "line": 642, - "column": 45 + "column": 44 } } } @@ -39406,8 +39480,8 @@ }, { "type": "BreakStatement", - "start": 21633, - "end": 21639, + "start": 21558, + "end": 21564, "loc": { "start": { "line": 644, @@ -39423,8 +39497,8 @@ ], "test": { "type": "NumericLiteral", - "start": 21518, - "end": 21519, + "start": 21445, + "end": 21446, "loc": { "start": { "line": 642, @@ -39436,16 +39510,16 @@ } }, "extra": { - "rawValue": 3, - "raw": "3" + "rawValue": 2, + "raw": "2" }, - "value": 3 + "value": 2 } }, { "type": "SwitchCase", - "start": 21664, - "end": 21788, + "start": 21589, + "end": 21715, "loc": { "start": { "line": 645, @@ -39459,8 +39533,8 @@ "consequent": [ { "type": "ExpressionStatement", - "start": 21713, - "end": 21753, + "start": 21639, + "end": 21680, "loc": { "start": { "line": 646, @@ -39468,13 +39542,13 @@ }, "end": { "line": 646, - "column": 68 + "column": 69 } }, "expression": { "type": "AssignmentExpression", - "start": 21713, - "end": 21752, + "start": 21639, + "end": 21679, "loc": { "start": { "line": 646, @@ -39482,14 +39556,14 @@ }, "end": { "line": 646, - "column": 67 + "column": 68 } }, "operator": "=", "left": { "type": "MemberExpression", - "start": 21713, - "end": 21738, + "start": 21639, + "end": 21664, "loc": { "start": { "line": 646, @@ -39502,8 +39576,8 @@ }, "object": { "type": "Identifier", - "start": 21713, - "end": 21724, + "start": 21639, + "end": 21650, "loc": { "start": { "line": 646, @@ -39520,8 +39594,8 @@ }, "property": { "type": "Identifier", - "start": 21725, - "end": 21738, + "start": 21651, + "end": 21664, "loc": { "start": { "line": 646, @@ -39540,8 +39614,8 @@ }, "right": { "type": "StringLiteral", - "start": 21741, - "end": 21752, + "start": 21667, + "end": 21679, "loc": { "start": { "line": 646, @@ -39549,23 +39623,23 @@ }, "end": { "line": 646, - "column": 67 + "column": 68 } }, "extra": { - "rawValue": "triangles", - "raw": "\"triangles\"" + "rawValue": "line-strip", + "raw": "\"line-strip\"" }, - "value": "triangles" + "value": "line-strip" }, "leadingComments": null }, "leadingComments": [ { "type": "CommentLine", - "value": " TRIANGLES", - "start": 21672, - "end": 21684, + "value": " LINE_STRIP", + "start": 21597, + "end": 21610, "loc": { "start": { "line": 645, @@ -39573,7 +39647,7 @@ }, "end": { "line": 645, - "column": 44 + "column": 45 } } } @@ -39581,8 +39655,8 @@ }, { "type": "BreakStatement", - "start": 21782, - "end": 21788, + "start": 21709, + "end": 21715, "loc": { "start": { "line": 647, @@ -39598,8 +39672,8 @@ ], "test": { "type": "NumericLiteral", - "start": 21669, - "end": 21670, + "start": 21594, + "end": 21595, "loc": { "start": { "line": 645, @@ -39611,16 +39685,16 @@ } }, "extra": { - "rawValue": 4, - "raw": "4" + "rawValue": 3, + "raw": "3" }, - "value": 4 + "value": 3 } }, { "type": "SwitchCase", - "start": 21813, - "end": 21947, + "start": 21740, + "end": 21864, "loc": { "start": { "line": 648, @@ -39634,8 +39708,8 @@ "consequent": [ { "type": "ExpressionStatement", - "start": 21867, - "end": 21912, + "start": 21789, + "end": 21829, "loc": { "start": { "line": 649, @@ -39643,13 +39717,13 @@ }, "end": { "line": 649, - "column": 73 + "column": 68 } }, "expression": { "type": "AssignmentExpression", - "start": 21867, - "end": 21911, + "start": 21789, + "end": 21828, "loc": { "start": { "line": 649, @@ -39657,14 +39731,14 @@ }, "end": { "line": 649, - "column": 72 + "column": 67 } }, "operator": "=", "left": { "type": "MemberExpression", - "start": 21867, - "end": 21892, + "start": 21789, + "end": 21814, "loc": { "start": { "line": 649, @@ -39677,8 +39751,8 @@ }, "object": { "type": "Identifier", - "start": 21867, - "end": 21878, + "start": 21789, + "end": 21800, "loc": { "start": { "line": 649, @@ -39695,8 +39769,8 @@ }, "property": { "type": "Identifier", - "start": 21879, - "end": 21892, + "start": 21801, + "end": 21814, "loc": { "start": { "line": 649, @@ -39715,8 +39789,8 @@ }, "right": { "type": "StringLiteral", - "start": 21895, - "end": 21911, + "start": 21817, + "end": 21828, "loc": { "start": { "line": 649, @@ -39724,23 +39798,23 @@ }, "end": { "line": 649, - "column": 72 + "column": 67 } }, "extra": { - "rawValue": "triangle-strip", - "raw": "\"triangle-strip\"" + "rawValue": "triangles", + "raw": "\"triangles\"" }, - "value": "triangle-strip" + "value": "triangles" }, "leadingComments": null }, "leadingComments": [ { "type": "CommentLine", - "value": " TRIANGLE_STRIP", - "start": 21821, - "end": 21838, + "value": " TRIANGLES", + "start": 21748, + "end": 21760, "loc": { "start": { "line": 648, @@ -39748,7 +39822,7 @@ }, "end": { "line": 648, - "column": 49 + "column": 44 } } } @@ -39756,8 +39830,8 @@ }, { "type": "BreakStatement", - "start": 21941, - "end": 21947, + "start": 21858, + "end": 21864, "loc": { "start": { "line": 650, @@ -39773,8 +39847,8 @@ ], "test": { "type": "NumericLiteral", - "start": 21818, - "end": 21819, + "start": 21745, + "end": 21746, "loc": { "start": { "line": 648, @@ -39786,16 +39860,16 @@ } }, "extra": { - "rawValue": 5, - "raw": "5" + "rawValue": 4, + "raw": "4" }, - "value": 5 + "value": 4 } }, { "type": "SwitchCase", - "start": 21972, - "end": 22102, + "start": 21889, + "end": 22023, "loc": { "start": { "line": 651, @@ -39809,8 +39883,8 @@ "consequent": [ { "type": "ExpressionStatement", - "start": 22024, - "end": 22067, + "start": 21943, + "end": 21988, "loc": { "start": { "line": 652, @@ -39818,13 +39892,13 @@ }, "end": { "line": 652, - "column": 71 + "column": 73 } }, "expression": { "type": "AssignmentExpression", - "start": 22024, - "end": 22066, + "start": 21943, + "end": 21987, "loc": { "start": { "line": 652, @@ -39832,14 +39906,14 @@ }, "end": { "line": 652, - "column": 70 + "column": 72 } }, "operator": "=", "left": { "type": "MemberExpression", - "start": 22024, - "end": 22049, + "start": 21943, + "end": 21968, "loc": { "start": { "line": 652, @@ -39852,8 +39926,8 @@ }, "object": { "type": "Identifier", - "start": 22024, - "end": 22035, + "start": 21943, + "end": 21954, "loc": { "start": { "line": 652, @@ -39870,8 +39944,8 @@ }, "property": { "type": "Identifier", - "start": 22036, - "end": 22049, + "start": 21955, + "end": 21968, "loc": { "start": { "line": 652, @@ -39890,8 +39964,8 @@ }, "right": { "type": "StringLiteral", - "start": 22052, - "end": 22066, + "start": 21971, + "end": 21987, "loc": { "start": { "line": 652, @@ -39899,23 +39973,23 @@ }, "end": { "line": 652, - "column": 70 + "column": 72 } }, "extra": { - "rawValue": "triangle-fan", - "raw": "\"triangle-fan\"" + "rawValue": "triangle-strip", + "raw": "\"triangle-strip\"" }, - "value": "triangle-fan" + "value": "triangle-strip" }, "leadingComments": null }, "leadingComments": [ { "type": "CommentLine", - "value": " TRIANGLE_FAN", - "start": 21980, - "end": 21995, + "value": " TRIANGLE_STRIP", + "start": 21897, + "end": 21914, "loc": { "start": { "line": 651, @@ -39923,7 +39997,7 @@ }, "end": { "line": 651, - "column": 47 + "column": 49 } } } @@ -39931,8 +40005,8 @@ }, { "type": "BreakStatement", - "start": 22096, - "end": 22102, + "start": 22017, + "end": 22023, "loc": { "start": { "line": 653, @@ -39948,8 +40022,8 @@ ], "test": { "type": "NumericLiteral", - "start": 21977, - "end": 21978, + "start": 21894, + "end": 21895, "loc": { "start": { "line": 651, @@ -39961,31 +40035,31 @@ } }, "extra": { - "rawValue": 6, - "raw": "6" + "rawValue": 5, + "raw": "5" }, - "value": 6 + "value": 5 } }, { "type": "SwitchCase", - "start": 22127, - "end": 22204, + "start": 22048, + "end": 22178, "loc": { "start": { "line": 654, "column": 24 }, "end": { - "line": 655, - "column": 68 + "line": 656, + "column": 34 } }, "consequent": [ { "type": "ExpressionStatement", - "start": 22164, - "end": 22204, + "start": 22100, + "end": 22143, "loc": { "start": { "line": 655, @@ -39993,13 +40067,13 @@ }, "end": { "line": 655, - "column": 68 + "column": 71 } }, "expression": { "type": "AssignmentExpression", - "start": 22164, - "end": 22203, + "start": 22100, + "end": 22142, "loc": { "start": { "line": 655, @@ -40007,14 +40081,14 @@ }, "end": { "line": 655, - "column": 67 + "column": 70 } }, "operator": "=", "left": { "type": "MemberExpression", - "start": 22164, - "end": 22189, + "start": 22100, + "end": 22125, "loc": { "start": { "line": 655, @@ -40027,8 +40101,8 @@ }, "object": { "type": "Identifier", - "start": 22164, - "end": 22175, + "start": 22100, + "end": 22111, "loc": { "start": { "line": 655, @@ -40040,12 +40114,13 @@ }, "identifierName": "geometryCfg" }, - "name": "geometryCfg" + "name": "geometryCfg", + "leadingComments": null }, "property": { "type": "Identifier", - "start": 22176, - "end": 22189, + "start": 22112, + "end": 22125, "loc": { "start": { "line": 655, @@ -40059,12 +40134,13 @@ }, "name": "primitiveType" }, - "computed": false + "computed": false, + "leadingComments": null }, "right": { "type": "StringLiteral", - "start": 22192, - "end": 22203, + "start": 22128, + "end": 22142, "loc": { "start": { "line": 655, @@ -40072,6 +40148,179 @@ }, "end": { "line": 655, + "column": 70 + } + }, + "extra": { + "rawValue": "triangle-fan", + "raw": "\"triangle-fan\"" + }, + "value": "triangle-fan" + }, + "leadingComments": null + }, + "leadingComments": [ + { + "type": "CommentLine", + "value": " TRIANGLE_FAN", + "start": 22056, + "end": 22071, + "loc": { + "start": { + "line": 654, + "column": 32 + }, + "end": { + "line": 654, + "column": 47 + } + } + } + ] + }, + { + "type": "BreakStatement", + "start": 22172, + "end": 22178, + "loc": { + "start": { + "line": 656, + "column": 28 + }, + "end": { + "line": 656, + "column": 34 + } + }, + "label": null + } + ], + "test": { + "type": "NumericLiteral", + "start": 22053, + "end": 22054, + "loc": { + "start": { + "line": 654, + "column": 29 + }, + "end": { + "line": 654, + "column": 30 + } + }, + "extra": { + "rawValue": 6, + "raw": "6" + }, + "value": 6 + } + }, + { + "type": "SwitchCase", + "start": 22203, + "end": 22280, + "loc": { + "start": { + "line": 657, + "column": 24 + }, + "end": { + "line": 658, + "column": 68 + } + }, + "consequent": [ + { + "type": "ExpressionStatement", + "start": 22240, + "end": 22280, + "loc": { + "start": { + "line": 658, + "column": 28 + }, + "end": { + "line": 658, + "column": 68 + } + }, + "expression": { + "type": "AssignmentExpression", + "start": 22240, + "end": 22279, + "loc": { + "start": { + "line": 658, + "column": 28 + }, + "end": { + "line": 658, + "column": 67 + } + }, + "operator": "=", + "left": { + "type": "MemberExpression", + "start": 22240, + "end": 22265, + "loc": { + "start": { + "line": 658, + "column": 28 + }, + "end": { + "line": 658, + "column": 53 + } + }, + "object": { + "type": "Identifier", + "start": 22240, + "end": 22251, + "loc": { + "start": { + "line": 658, + "column": 28 + }, + "end": { + "line": 658, + "column": 39 + }, + "identifierName": "geometryCfg" + }, + "name": "geometryCfg" + }, + "property": { + "type": "Identifier", + "start": 22252, + "end": 22265, + "loc": { + "start": { + "line": 658, + "column": 40 + }, + "end": { + "line": 658, + "column": 53 + }, + "identifierName": "primitiveType" + }, + "name": "primitiveType" + }, + "computed": false + }, + "right": { + "type": "StringLiteral", + "start": 22268, + "end": 22279, + "loc": { + "start": { + "line": 658, + "column": 56 + }, + "end": { + "line": 658, "column": 67 } }, @@ -40090,44 +40339,44 @@ }, { "type": "VariableDeclaration", - "start": 22247, - "end": 22294, + "start": 22323, + "end": 22370, "loc": { "start": { - "line": 657, + "line": 660, "column": 20 }, "end": { - "line": 657, + "line": 660, "column": 67 } }, "declarations": [ { "type": "VariableDeclarator", - "start": 22253, - "end": 22293, + "start": 22329, + "end": 22369, "loc": { "start": { - "line": 657, + "line": 660, "column": 26 }, "end": { - "line": 657, + "line": 660, "column": 66 } }, "id": { "type": "Identifier", - "start": 22253, - "end": 22261, + "start": 22329, + "end": 22337, "loc": { "start": { - "line": 657, + "line": 660, "column": 26 }, "end": { - "line": 657, + "line": 660, "column": 34 }, "identifierName": "POSITION" @@ -40136,43 +40385,43 @@ }, "init": { "type": "MemberExpression", - "start": 22264, - "end": 22293, + "start": 22340, + "end": 22369, "loc": { "start": { - "line": 657, + "line": 660, "column": 37 }, "end": { - "line": 657, + "line": 660, "column": 66 } }, "object": { "type": "MemberExpression", - "start": 22264, - "end": 22284, + "start": 22340, + "end": 22360, "loc": { "start": { - "line": 657, + "line": 660, "column": 37 }, "end": { - "line": 657, + "line": 660, "column": 57 } }, "object": { "type": "Identifier", - "start": 22264, - "end": 22273, + "start": 22340, + "end": 22349, "loc": { "start": { - "line": 657, + "line": 660, "column": 37 }, "end": { - "line": 657, + "line": 660, "column": 46 }, "identifierName": "primitive" @@ -40181,15 +40430,15 @@ }, "property": { "type": "Identifier", - "start": 22274, - "end": 22284, + "start": 22350, + "end": 22360, "loc": { "start": { - "line": 657, + "line": 660, "column": 47 }, "end": { - "line": 657, + "line": 660, "column": 57 }, "identifierName": "attributes" @@ -40200,15 +40449,15 @@ }, "property": { "type": "Identifier", - "start": 22285, - "end": 22293, + "start": 22361, + "end": 22369, "loc": { "start": { - "line": 657, + "line": 660, "column": 58 }, "end": { - "line": 657, + "line": 660, "column": 66 }, "identifierName": "POSITION" @@ -40223,29 +40472,29 @@ }, { "type": "IfStatement", - "start": 22315, - "end": 22387, + "start": 22391, + "end": 22463, "loc": { "start": { - "line": 658, + "line": 661, "column": 20 }, "end": { - "line": 660, + "line": 663, "column": 21 } }, "test": { "type": "UnaryExpression", - "start": 22319, - "end": 22328, + "start": 22395, + "end": 22404, "loc": { "start": { - "line": 658, + "line": 661, "column": 24 }, "end": { - "line": 658, + "line": 661, "column": 33 } }, @@ -40253,15 +40502,15 @@ "prefix": true, "argument": { "type": "Identifier", - "start": 22320, - "end": 22328, + "start": 22396, + "end": 22404, "loc": { "start": { - "line": 658, + "line": 661, "column": 25 }, "end": { - "line": 658, + "line": 661, "column": 33 }, "identifierName": "POSITION" @@ -40274,30 +40523,30 @@ }, "consequent": { "type": "BlockStatement", - "start": 22330, - "end": 22387, + "start": 22406, + "end": 22463, "loc": { "start": { - "line": 658, + "line": 661, "column": 35 }, "end": { - "line": 660, + "line": 663, "column": 21 } }, "body": [ { "type": "ContinueStatement", - "start": 22356, - "end": 22365, + "start": 22432, + "end": 22441, "loc": { "start": { - "line": 659, + "line": 662, "column": 24 }, "end": { - "line": 659, + "line": 662, "column": 33 } }, @@ -40310,58 +40559,58 @@ }, { "type": "ExpressionStatement", - "start": 22408, - "end": 22468, + "start": 22484, + "end": 22544, "loc": { "start": { - "line": 661, + "line": 664, "column": 20 }, "end": { - "line": 661, + "line": 664, "column": 80 } }, "expression": { "type": "AssignmentExpression", - "start": 22408, - "end": 22467, + "start": 22484, + "end": 22543, "loc": { "start": { - "line": 661, + "line": 664, "column": 20 }, "end": { - "line": 661, + "line": 664, "column": 79 } }, "operator": "=", "left": { "type": "MemberExpression", - "start": 22408, - "end": 22429, + "start": 22484, + "end": 22505, "loc": { "start": { - "line": 661, + "line": 664, "column": 20 }, "end": { - "line": 661, + "line": 664, "column": 41 } }, "object": { "type": "Identifier", - "start": 22408, - "end": 22419, + "start": 22484, + "end": 22495, "loc": { "start": { - "line": 661, + "line": 664, "column": 20 }, "end": { - "line": 661, + "line": 664, "column": 31 }, "identifierName": "geometryCfg" @@ -40370,15 +40619,15 @@ }, "property": { "type": "Identifier", - "start": 22420, - "end": 22429, + "start": 22496, + "end": 22505, "loc": { "start": { - "line": 661, + "line": 664, "column": 32 }, "end": { - "line": 661, + "line": 664, "column": 41 }, "identifierName": "positions" @@ -40389,57 +40638,57 @@ }, "right": { "type": "MemberExpression", - "start": 22432, - "end": 22467, + "start": 22508, + "end": 22543, "loc": { "start": { - "line": 661, + "line": 664, "column": 44 }, "end": { - "line": 661, + "line": 664, "column": 79 } }, "object": { "type": "MemberExpression", - "start": 22432, - "end": 22461, + "start": 22508, + "end": 22537, "loc": { "start": { - "line": 661, + "line": 664, "column": 44 }, "end": { - "line": 661, + "line": 664, "column": 73 } }, "object": { "type": "MemberExpression", - "start": 22432, - "end": 22452, + "start": 22508, + "end": 22528, "loc": { "start": { - "line": 661, + "line": 664, "column": 44 }, "end": { - "line": 661, + "line": 664, "column": 64 } }, "object": { "type": "Identifier", - "start": 22432, - "end": 22441, + "start": 22508, + "end": 22517, "loc": { "start": { - "line": 661, + "line": 664, "column": 44 }, "end": { - "line": 661, + "line": 664, "column": 53 }, "identifierName": "primitive" @@ -40448,15 +40697,15 @@ }, "property": { "type": "Identifier", - "start": 22442, - "end": 22452, + "start": 22518, + "end": 22528, "loc": { "start": { - "line": 661, + "line": 664, "column": 54 }, "end": { - "line": 661, + "line": 664, "column": 64 }, "identifierName": "attributes" @@ -40467,15 +40716,15 @@ }, "property": { "type": "Identifier", - "start": 22453, - "end": 22461, + "start": 22529, + "end": 22537, "loc": { "start": { - "line": 661, + "line": 664, "column": 65 }, "end": { - "line": 661, + "line": 664, "column": 73 }, "identifierName": "POSITION" @@ -40486,15 +40735,15 @@ }, "property": { "type": "Identifier", - "start": 22462, - "end": 22467, + "start": 22538, + "end": 22543, "loc": { "start": { - "line": 661, + "line": 664, "column": 74 }, "end": { - "line": 661, + "line": 664, "column": 79 }, "identifierName": "value" @@ -40507,72 +40756,72 @@ }, { "type": "ExpressionStatement", - "start": 22489, - "end": 22547, + "start": 22565, + "end": 22623, "loc": { "start": { - "line": 662, + "line": 665, "column": 20 }, "end": { - "line": 662, + "line": 665, "column": 78 } }, "expression": { "type": "AssignmentExpression", - "start": 22489, - "end": 22546, + "start": 22565, + "end": 22622, "loc": { "start": { - "line": 662, + "line": 665, "column": 20 }, "end": { - "line": 662, + "line": 665, "column": 77 } }, "operator": "+=", "left": { "type": "MemberExpression", - "start": 22489, - "end": 22510, + "start": 22565, + "end": 22586, "loc": { "start": { - "line": 662, + "line": 665, "column": 20 }, "end": { - "line": 662, + "line": 665, "column": 41 } }, "object": { "type": "MemberExpression", - "start": 22489, - "end": 22498, + "start": 22565, + "end": 22574, "loc": { "start": { - "line": 662, + "line": 665, "column": 20 }, "end": { - "line": 662, + "line": 665, "column": 29 } }, "object": { "type": "Identifier", - "start": 22489, - "end": 22492, + "start": 22565, + "end": 22568, "loc": { "start": { - "line": 662, + "line": 665, "column": 20 }, "end": { - "line": 662, + "line": 665, "column": 23 }, "identifierName": "ctx" @@ -40581,15 +40830,15 @@ }, "property": { "type": "Identifier", - "start": 22493, - "end": 22498, + "start": 22569, + "end": 22574, "loc": { "start": { - "line": 662, + "line": 665, "column": 24 }, "end": { - "line": 662, + "line": 665, "column": 29 }, "identifierName": "stats" @@ -40600,15 +40849,15 @@ }, "property": { "type": "Identifier", - "start": 22499, - "end": 22510, + "start": 22575, + "end": 22586, "loc": { "start": { - "line": 662, + "line": 665, "column": 30 }, "end": { - "line": 662, + "line": 665, "column": 41 }, "identifierName": "numVertices" @@ -40619,57 +40868,57 @@ }, "right": { "type": "BinaryExpression", - "start": 22514, - "end": 22546, + "start": 22590, + "end": 22622, "loc": { "start": { - "line": 662, + "line": 665, "column": 45 }, "end": { - "line": 662, + "line": 665, "column": 77 } }, "left": { "type": "MemberExpression", - "start": 22514, - "end": 22542, + "start": 22590, + "end": 22618, "loc": { "start": { - "line": 662, + "line": 665, "column": 45 }, "end": { - "line": 662, + "line": 665, "column": 73 } }, "object": { "type": "MemberExpression", - "start": 22514, - "end": 22535, + "start": 22590, + "end": 22611, "loc": { "start": { - "line": 662, + "line": 665, "column": 45 }, "end": { - "line": 662, + "line": 665, "column": 66 } }, "object": { "type": "Identifier", - "start": 22514, - "end": 22525, + "start": 22590, + "end": 22601, "loc": { "start": { - "line": 662, + "line": 665, "column": 45 }, "end": { - "line": 662, + "line": 665, "column": 56 }, "identifierName": "geometryCfg" @@ -40678,15 +40927,15 @@ }, "property": { "type": "Identifier", - "start": 22526, - "end": 22535, + "start": 22602, + "end": 22611, "loc": { "start": { - "line": 662, + "line": 665, "column": 57 }, "end": { - "line": 662, + "line": 665, "column": 66 }, "identifierName": "positions" @@ -40697,15 +40946,15 @@ }, "property": { "type": "Identifier", - "start": 22536, - "end": 22542, + "start": 22612, + "end": 22618, "loc": { "start": { - "line": 662, + "line": 665, "column": 67 }, "end": { - "line": 662, + "line": 665, "column": 73 }, "identifierName": "length" @@ -40717,15 +40966,15 @@ "operator": "/", "right": { "type": "NumericLiteral", - "start": 22545, - "end": 22546, + "start": 22621, + "end": 22622, "loc": { "start": { - "line": 662, + "line": 665, "column": 76 }, "end": { - "line": 662, + "line": 665, "column": 77 } }, @@ -40740,43 +40989,43 @@ }, { "type": "IfStatement", - "start": 22568, - "end": 22869, + "start": 22644, + "end": 22945, "loc": { "start": { - "line": 663, + "line": 666, "column": 20 }, "end": { - "line": 668, + "line": 671, "column": 21 } }, "test": { "type": "MemberExpression", - "start": 22572, - "end": 22590, + "start": 22648, + "end": 22666, "loc": { "start": { - "line": 663, + "line": 666, "column": 24 }, "end": { - "line": 663, + "line": 666, "column": 42 } }, "object": { "type": "Identifier", - "start": 22572, - "end": 22575, + "start": 22648, + "end": 22651, "loc": { "start": { - "line": 663, + "line": 666, "column": 24 }, "end": { - "line": 663, + "line": 666, "column": 27 }, "identifierName": "ctx" @@ -40785,15 +41034,15 @@ }, "property": { "type": "Identifier", - "start": 22576, - "end": 22590, + "start": 22652, + "end": 22666, "loc": { "start": { - "line": 663, + "line": 666, "column": 28 }, "end": { - "line": 663, + "line": 666, "column": 42 }, "identifierName": "includeNormals" @@ -40804,72 +41053,72 @@ }, "consequent": { "type": "BlockStatement", - "start": 22592, - "end": 22869, + "start": 22668, + "end": 22945, "loc": { "start": { - "line": 663, + "line": 666, "column": 44 }, "end": { - "line": 668, + "line": 671, "column": 21 } }, "body": [ { "type": "IfStatement", - "start": 22618, - "end": 22847, + "start": 22694, + "end": 22923, "loc": { "start": { - "line": 664, + "line": 667, "column": 24 }, "end": { - "line": 667, + "line": 670, "column": 25 } }, "test": { "type": "MemberExpression", - "start": 22622, - "end": 22649, + "start": 22698, + "end": 22725, "loc": { "start": { - "line": 664, + "line": 667, "column": 28 }, "end": { - "line": 664, + "line": 667, "column": 55 } }, "object": { "type": "MemberExpression", - "start": 22622, - "end": 22642, + "start": 22698, + "end": 22718, "loc": { "start": { - "line": 664, + "line": 667, "column": 28 }, "end": { - "line": 664, + "line": 667, "column": 48 } }, "object": { "type": "Identifier", - "start": 22622, - "end": 22631, + "start": 22698, + "end": 22707, "loc": { "start": { - "line": 664, + "line": 667, "column": 28 }, "end": { - "line": 664, + "line": 667, "column": 37 }, "identifierName": "primitive" @@ -40878,15 +41127,15 @@ }, "property": { "type": "Identifier", - "start": 22632, - "end": 22642, + "start": 22708, + "end": 22718, "loc": { "start": { - "line": 664, + "line": 667, "column": 38 }, "end": { - "line": 664, + "line": 667, "column": 48 }, "identifierName": "attributes" @@ -40897,15 +41146,15 @@ }, "property": { "type": "Identifier", - "start": 22643, - "end": 22649, + "start": 22719, + "end": 22725, "loc": { "start": { - "line": 664, + "line": 667, "column": 49 }, "end": { - "line": 664, + "line": 667, "column": 55 }, "identifierName": "NORMAL" @@ -40916,73 +41165,73 @@ }, "consequent": { "type": "BlockStatement", - "start": 22651, - "end": 22847, + "start": 22727, + "end": 22923, "loc": { "start": { - "line": 664, + "line": 667, "column": 57 }, "end": { - "line": 667, + "line": 670, "column": 25 } }, "body": [ { "type": "ExpressionStatement", - "start": 22681, - "end": 22737, + "start": 22757, + "end": 22813, "loc": { "start": { - "line": 665, + "line": 668, "column": 28 }, "end": { - "line": 665, + "line": 668, "column": 84 } }, "expression": { "type": "AssignmentExpression", - "start": 22681, - "end": 22736, + "start": 22757, + "end": 22812, "loc": { "start": { - "line": 665, + "line": 668, "column": 28 }, "end": { - "line": 665, + "line": 668, "column": 83 } }, "operator": "=", "left": { "type": "MemberExpression", - "start": 22681, - "end": 22700, + "start": 22757, + "end": 22776, "loc": { "start": { - "line": 665, + "line": 668, "column": 28 }, "end": { - "line": 665, + "line": 668, "column": 47 } }, "object": { "type": "Identifier", - "start": 22681, - "end": 22692, + "start": 22757, + "end": 22768, "loc": { "start": { - "line": 665, + "line": 668, "column": 28 }, "end": { - "line": 665, + "line": 668, "column": 39 }, "identifierName": "geometryCfg" @@ -40991,15 +41240,15 @@ }, "property": { "type": "Identifier", - "start": 22693, - "end": 22700, + "start": 22769, + "end": 22776, "loc": { "start": { - "line": 665, + "line": 668, "column": 40 }, "end": { - "line": 665, + "line": 668, "column": 47 }, "identifierName": "normals" @@ -41010,57 +41259,57 @@ }, "right": { "type": "MemberExpression", - "start": 22703, - "end": 22736, + "start": 22779, + "end": 22812, "loc": { "start": { - "line": 665, + "line": 668, "column": 50 }, "end": { - "line": 665, + "line": 668, "column": 83 } }, "object": { "type": "MemberExpression", - "start": 22703, - "end": 22730, + "start": 22779, + "end": 22806, "loc": { "start": { - "line": 665, + "line": 668, "column": 50 }, "end": { - "line": 665, + "line": 668, "column": 77 } }, "object": { "type": "MemberExpression", - "start": 22703, - "end": 22723, + "start": 22779, + "end": 22799, "loc": { "start": { - "line": 665, + "line": 668, "column": 50 }, "end": { - "line": 665, + "line": 668, "column": 70 } }, "object": { "type": "Identifier", - "start": 22703, - "end": 22712, + "start": 22779, + "end": 22788, "loc": { "start": { - "line": 665, + "line": 668, "column": 50 }, "end": { - "line": 665, + "line": 668, "column": 59 }, "identifierName": "primitive" @@ -41069,15 +41318,15 @@ }, "property": { "type": "Identifier", - "start": 22713, - "end": 22723, + "start": 22789, + "end": 22799, "loc": { "start": { - "line": 665, + "line": 668, "column": 60 }, "end": { - "line": 665, + "line": 668, "column": 70 }, "identifierName": "attributes" @@ -41088,15 +41337,15 @@ }, "property": { "type": "Identifier", - "start": 22724, - "end": 22730, + "start": 22800, + "end": 22806, "loc": { "start": { - "line": 665, + "line": 668, "column": 71 }, "end": { - "line": 665, + "line": 668, "column": 77 }, "identifierName": "NORMAL" @@ -41107,15 +41356,15 @@ }, "property": { "type": "Identifier", - "start": 22731, - "end": 22736, + "start": 22807, + "end": 22812, "loc": { "start": { - "line": 665, + "line": 668, "column": 78 }, "end": { - "line": 665, + "line": 668, "column": 83 }, "identifierName": "value" @@ -41128,72 +41377,72 @@ }, { "type": "ExpressionStatement", - "start": 22766, - "end": 22821, + "start": 22842, + "end": 22897, "loc": { "start": { - "line": 666, + "line": 669, "column": 28 }, "end": { - "line": 666, + "line": 669, "column": 83 } }, "expression": { "type": "AssignmentExpression", - "start": 22766, - "end": 22820, + "start": 22842, + "end": 22896, "loc": { "start": { - "line": 666, + "line": 669, "column": 28 }, "end": { - "line": 666, + "line": 669, "column": 82 } }, "operator": "+=", "left": { "type": "MemberExpression", - "start": 22766, - "end": 22786, + "start": 22842, + "end": 22862, "loc": { "start": { - "line": 666, + "line": 669, "column": 28 }, "end": { - "line": 666, + "line": 669, "column": 48 } }, "object": { "type": "MemberExpression", - "start": 22766, - "end": 22775, + "start": 22842, + "end": 22851, "loc": { "start": { - "line": 666, + "line": 669, "column": 28 }, "end": { - "line": 666, + "line": 669, "column": 37 } }, "object": { "type": "Identifier", - "start": 22766, - "end": 22769, + "start": 22842, + "end": 22845, "loc": { "start": { - "line": 666, + "line": 669, "column": 28 }, "end": { - "line": 666, + "line": 669, "column": 31 }, "identifierName": "ctx" @@ -41202,15 +41451,15 @@ }, "property": { "type": "Identifier", - "start": 22770, - "end": 22775, + "start": 22846, + "end": 22851, "loc": { "start": { - "line": 666, + "line": 669, "column": 32 }, "end": { - "line": 666, + "line": 669, "column": 37 }, "identifierName": "stats" @@ -41221,15 +41470,15 @@ }, "property": { "type": "Identifier", - "start": 22776, - "end": 22786, + "start": 22852, + "end": 22862, "loc": { "start": { - "line": 666, + "line": 669, "column": 38 }, "end": { - "line": 666, + "line": 669, "column": 48 }, "identifierName": "numNormals" @@ -41240,57 +41489,57 @@ }, "right": { "type": "BinaryExpression", - "start": 22790, - "end": 22820, + "start": 22866, + "end": 22896, "loc": { "start": { - "line": 666, + "line": 669, "column": 52 }, "end": { - "line": 666, + "line": 669, "column": 82 } }, "left": { "type": "MemberExpression", - "start": 22790, - "end": 22816, + "start": 22866, + "end": 22892, "loc": { "start": { - "line": 666, + "line": 669, "column": 52 }, "end": { - "line": 666, + "line": 669, "column": 78 } }, "object": { "type": "MemberExpression", - "start": 22790, - "end": 22809, + "start": 22866, + "end": 22885, "loc": { "start": { - "line": 666, + "line": 669, "column": 52 }, "end": { - "line": 666, + "line": 669, "column": 71 } }, "object": { "type": "Identifier", - "start": 22790, - "end": 22801, + "start": 22866, + "end": 22877, "loc": { "start": { - "line": 666, + "line": 669, "column": 52 }, "end": { - "line": 666, + "line": 669, "column": 63 }, "identifierName": "geometryCfg" @@ -41299,15 +41548,15 @@ }, "property": { "type": "Identifier", - "start": 22802, - "end": 22809, + "start": 22878, + "end": 22885, "loc": { "start": { - "line": 666, + "line": 669, "column": 64 }, "end": { - "line": 666, + "line": 669, "column": 71 }, "identifierName": "normals" @@ -41318,15 +41567,15 @@ }, "property": { "type": "Identifier", - "start": 22810, - "end": 22816, + "start": 22886, + "end": 22892, "loc": { "start": { - "line": 666, + "line": 669, "column": 72 }, "end": { - "line": 666, + "line": 669, "column": 78 }, "identifierName": "length" @@ -41338,15 +41587,15 @@ "operator": "/", "right": { "type": "NumericLiteral", - "start": 22819, - "end": 22820, + "start": 22895, + "end": 22896, "loc": { "start": { - "line": 666, + "line": 669, "column": 81 }, "end": { - "line": 666, + "line": 669, "column": 82 } }, @@ -41371,57 +41620,57 @@ }, { "type": "IfStatement", - "start": 22890, - "end": 23038, + "start": 22966, + "end": 23114, "loc": { "start": { - "line": 669, + "line": 672, "column": 20 }, "end": { - "line": 671, + "line": 674, "column": 21 } }, "test": { "type": "MemberExpression", - "start": 22894, - "end": 22922, + "start": 22970, + "end": 22998, "loc": { "start": { - "line": 669, + "line": 672, "column": 24 }, "end": { - "line": 669, + "line": 672, "column": 52 } }, "object": { "type": "MemberExpression", - "start": 22894, - "end": 22914, + "start": 22970, + "end": 22990, "loc": { "start": { - "line": 669, + "line": 672, "column": 24 }, "end": { - "line": 669, + "line": 672, "column": 44 } }, "object": { "type": "Identifier", - "start": 22894, - "end": 22903, + "start": 22970, + "end": 22979, "loc": { "start": { - "line": 669, + "line": 672, "column": 24 }, "end": { - "line": 669, + "line": 672, "column": 33 }, "identifierName": "primitive" @@ -41430,15 +41679,15 @@ }, "property": { "type": "Identifier", - "start": 22904, - "end": 22914, + "start": 22980, + "end": 22990, "loc": { "start": { - "line": 669, + "line": 672, "column": 34 }, "end": { - "line": 669, + "line": 672, "column": 44 }, "identifierName": "attributes" @@ -41449,15 +41698,15 @@ }, "property": { "type": "Identifier", - "start": 22915, - "end": 22922, + "start": 22991, + "end": 22998, "loc": { "start": { - "line": 669, + "line": 672, "column": 45 }, "end": { - "line": 669, + "line": 672, "column": 52 }, "identifierName": "COLOR_0" @@ -41468,73 +41717,73 @@ }, "consequent": { "type": "BlockStatement", - "start": 22924, - "end": 23038, + "start": 23000, + "end": 23114, "loc": { "start": { - "line": 669, + "line": 672, "column": 54 }, "end": { - "line": 671, + "line": 674, "column": 21 } }, "body": [ { "type": "ExpressionStatement", - "start": 22950, - "end": 23016, + "start": 23026, + "end": 23092, "loc": { "start": { - "line": 670, + "line": 673, "column": 24 }, "end": { - "line": 670, + "line": 673, "column": 90 } }, "expression": { "type": "AssignmentExpression", - "start": 22950, - "end": 23015, + "start": 23026, + "end": 23091, "loc": { "start": { - "line": 670, + "line": 673, "column": 24 }, "end": { - "line": 670, + "line": 673, "column": 89 } }, "operator": "=", "left": { "type": "MemberExpression", - "start": 22950, - "end": 22978, + "start": 23026, + "end": 23054, "loc": { "start": { - "line": 670, + "line": 673, "column": 24 }, "end": { - "line": 670, + "line": 673, "column": 52 } }, "object": { "type": "Identifier", - "start": 22950, - "end": 22961, + "start": 23026, + "end": 23037, "loc": { "start": { - "line": 670, + "line": 673, "column": 24 }, "end": { - "line": 670, + "line": 673, "column": 35 }, "identifierName": "geometryCfg" @@ -41543,15 +41792,15 @@ }, "property": { "type": "Identifier", - "start": 22962, - "end": 22978, + "start": 23038, + "end": 23054, "loc": { "start": { - "line": 670, + "line": 673, "column": 36 }, "end": { - "line": 670, + "line": 673, "column": 52 }, "identifierName": "colorsCompressed" @@ -41562,57 +41811,57 @@ }, "right": { "type": "MemberExpression", - "start": 22981, - "end": 23015, + "start": 23057, + "end": 23091, "loc": { "start": { - "line": 670, + "line": 673, "column": 55 }, "end": { - "line": 670, + "line": 673, "column": 89 } }, "object": { "type": "MemberExpression", - "start": 22981, - "end": 23009, + "start": 23057, + "end": 23085, "loc": { "start": { - "line": 670, + "line": 673, "column": 55 }, "end": { - "line": 670, + "line": 673, "column": 83 } }, "object": { "type": "MemberExpression", - "start": 22981, - "end": 23001, + "start": 23057, + "end": 23077, "loc": { "start": { - "line": 670, + "line": 673, "column": 55 }, "end": { - "line": 670, + "line": 673, "column": 75 } }, "object": { "type": "Identifier", - "start": 22981, - "end": 22990, + "start": 23057, + "end": 23066, "loc": { "start": { - "line": 670, + "line": 673, "column": 55 }, "end": { - "line": 670, + "line": 673, "column": 64 }, "identifierName": "primitive" @@ -41621,15 +41870,15 @@ }, "property": { "type": "Identifier", - "start": 22991, - "end": 23001, + "start": 23067, + "end": 23077, "loc": { "start": { - "line": 670, + "line": 673, "column": 65 }, "end": { - "line": 670, + "line": 673, "column": 75 }, "identifierName": "attributes" @@ -41640,15 +41889,15 @@ }, "property": { "type": "Identifier", - "start": 23002, - "end": 23009, + "start": 23078, + "end": 23085, "loc": { "start": { - "line": 670, + "line": 673, "column": 76 }, "end": { - "line": 670, + "line": 673, "column": 83 }, "identifierName": "COLOR_0" @@ -41659,15 +41908,15 @@ }, "property": { "type": "Identifier", - "start": 23010, - "end": 23015, + "start": 23086, + "end": 23091, "loc": { "start": { - "line": 670, + "line": 673, "column": 84 }, "end": { - "line": 670, + "line": 673, "column": 89 }, "identifierName": "value" @@ -41685,43 +41934,43 @@ }, { "type": "IfStatement", - "start": 23059, - "end": 23357, + "start": 23135, + "end": 23433, "loc": { "start": { - "line": 672, + "line": 675, "column": 20 }, "end": { - "line": 677, + "line": 680, "column": 21 } }, "test": { "type": "MemberExpression", - "start": 23063, - "end": 23082, + "start": 23139, + "end": 23158, "loc": { "start": { - "line": 672, + "line": 675, "column": 24 }, "end": { - "line": 672, + "line": 675, "column": 43 } }, "object": { "type": "Identifier", - "start": 23063, - "end": 23066, + "start": 23139, + "end": 23142, "loc": { "start": { - "line": 672, + "line": 675, "column": 24 }, "end": { - "line": 672, + "line": 675, "column": 27 }, "identifierName": "ctx" @@ -41730,15 +41979,15 @@ }, "property": { "type": "Identifier", - "start": 23067, - "end": 23082, + "start": 23143, + "end": 23158, "loc": { "start": { - "line": 672, + "line": 675, "column": 28 }, "end": { - "line": 672, + "line": 675, "column": 43 }, "identifierName": "includeTextures" @@ -41749,72 +41998,72 @@ }, "consequent": { "type": "BlockStatement", - "start": 23084, - "end": 23357, + "start": 23160, + "end": 23433, "loc": { "start": { - "line": 672, + "line": 675, "column": 45 }, "end": { - "line": 677, + "line": 680, "column": 21 } }, "body": [ { "type": "IfStatement", - "start": 23110, - "end": 23335, + "start": 23186, + "end": 23411, "loc": { "start": { - "line": 673, + "line": 676, "column": 24 }, "end": { - "line": 676, + "line": 679, "column": 25 } }, "test": { "type": "MemberExpression", - "start": 23114, - "end": 23145, + "start": 23190, + "end": 23221, "loc": { "start": { - "line": 673, + "line": 676, "column": 28 }, "end": { - "line": 673, + "line": 676, "column": 59 } }, "object": { "type": "MemberExpression", - "start": 23114, - "end": 23134, + "start": 23190, + "end": 23210, "loc": { "start": { - "line": 673, + "line": 676, "column": 28 }, "end": { - "line": 673, + "line": 676, "column": 48 } }, "object": { "type": "Identifier", - "start": 23114, - "end": 23123, + "start": 23190, + "end": 23199, "loc": { "start": { - "line": 673, + "line": 676, "column": 28 }, "end": { - "line": 673, + "line": 676, "column": 37 }, "identifierName": "primitive" @@ -41823,15 +42072,15 @@ }, "property": { "type": "Identifier", - "start": 23124, - "end": 23134, + "start": 23200, + "end": 23210, "loc": { "start": { - "line": 673, + "line": 676, "column": 38 }, "end": { - "line": 673, + "line": 676, "column": 48 }, "identifierName": "attributes" @@ -41842,15 +42091,15 @@ }, "property": { "type": "Identifier", - "start": 23135, - "end": 23145, + "start": 23211, + "end": 23221, "loc": { "start": { - "line": 673, + "line": 676, "column": 49 }, "end": { - "line": 673, + "line": 676, "column": 59 }, "identifierName": "TEXCOORD_0" @@ -41861,73 +42110,73 @@ }, "consequent": { "type": "BlockStatement", - "start": 23147, - "end": 23335, + "start": 23223, + "end": 23411, "loc": { "start": { - "line": 673, + "line": 676, "column": 61 }, "end": { - "line": 676, + "line": 679, "column": 25 } }, "body": [ { "type": "ExpressionStatement", - "start": 23177, - "end": 23233, + "start": 23253, + "end": 23309, "loc": { "start": { - "line": 674, + "line": 677, "column": 28 }, "end": { - "line": 674, + "line": 677, "column": 84 } }, "expression": { "type": "AssignmentExpression", - "start": 23177, - "end": 23232, + "start": 23253, + "end": 23308, "loc": { "start": { - "line": 674, + "line": 677, "column": 28 }, "end": { - "line": 674, + "line": 677, "column": 83 } }, "operator": "=", "left": { "type": "MemberExpression", - "start": 23177, - "end": 23192, + "start": 23253, + "end": 23268, "loc": { "start": { - "line": 674, + "line": 677, "column": 28 }, "end": { - "line": 674, + "line": 677, "column": 43 } }, "object": { "type": "Identifier", - "start": 23177, - "end": 23188, + "start": 23253, + "end": 23264, "loc": { "start": { - "line": 674, + "line": 677, "column": 28 }, "end": { - "line": 674, + "line": 677, "column": 39 }, "identifierName": "geometryCfg" @@ -41936,15 +42185,15 @@ }, "property": { "type": "Identifier", - "start": 23189, - "end": 23192, + "start": 23265, + "end": 23268, "loc": { "start": { - "line": 674, + "line": 677, "column": 40 }, "end": { - "line": 674, + "line": 677, "column": 43 }, "identifierName": "uvs" @@ -41955,57 +42204,57 @@ }, "right": { "type": "MemberExpression", - "start": 23195, - "end": 23232, + "start": 23271, + "end": 23308, "loc": { "start": { - "line": 674, + "line": 677, "column": 46 }, "end": { - "line": 674, + "line": 677, "column": 83 } }, "object": { "type": "MemberExpression", - "start": 23195, - "end": 23226, + "start": 23271, + "end": 23302, "loc": { "start": { - "line": 674, + "line": 677, "column": 46 }, "end": { - "line": 674, + "line": 677, "column": 77 } }, "object": { "type": "MemberExpression", - "start": 23195, - "end": 23215, + "start": 23271, + "end": 23291, "loc": { "start": { - "line": 674, + "line": 677, "column": 46 }, "end": { - "line": 674, + "line": 677, "column": 66 } }, "object": { "type": "Identifier", - "start": 23195, - "end": 23204, + "start": 23271, + "end": 23280, "loc": { "start": { - "line": 674, + "line": 677, "column": 46 }, "end": { - "line": 674, + "line": 677, "column": 55 }, "identifierName": "primitive" @@ -42014,15 +42263,15 @@ }, "property": { "type": "Identifier", - "start": 23205, - "end": 23215, + "start": 23281, + "end": 23291, "loc": { "start": { - "line": 674, + "line": 677, "column": 56 }, "end": { - "line": 674, + "line": 677, "column": 66 }, "identifierName": "attributes" @@ -42033,15 +42282,15 @@ }, "property": { "type": "Identifier", - "start": 23216, - "end": 23226, + "start": 23292, + "end": 23302, "loc": { "start": { - "line": 674, + "line": 677, "column": 67 }, "end": { - "line": 674, + "line": 677, "column": 77 }, "identifierName": "TEXCOORD_0" @@ -42052,15 +42301,15 @@ }, "property": { "type": "Identifier", - "start": 23227, - "end": 23232, + "start": 23303, + "end": 23308, "loc": { "start": { - "line": 674, + "line": 677, "column": 78 }, "end": { - "line": 674, + "line": 677, "column": 83 }, "identifierName": "value" @@ -42073,72 +42322,72 @@ }, { "type": "ExpressionStatement", - "start": 23262, - "end": 23309, + "start": 23338, + "end": 23385, "loc": { "start": { - "line": 675, + "line": 678, "column": 28 }, "end": { - "line": 675, + "line": 678, "column": 75 } }, "expression": { "type": "AssignmentExpression", - "start": 23262, - "end": 23308, + "start": 23338, + "end": 23384, "loc": { "start": { - "line": 675, + "line": 678, "column": 28 }, "end": { - "line": 675, + "line": 678, "column": 74 } }, "operator": "+=", "left": { "type": "MemberExpression", - "start": 23262, - "end": 23278, + "start": 23338, + "end": 23354, "loc": { "start": { - "line": 675, + "line": 678, "column": 28 }, "end": { - "line": 675, + "line": 678, "column": 44 } }, "object": { "type": "MemberExpression", - "start": 23262, - "end": 23271, + "start": 23338, + "end": 23347, "loc": { "start": { - "line": 675, + "line": 678, "column": 28 }, "end": { - "line": 675, + "line": 678, "column": 37 } }, "object": { "type": "Identifier", - "start": 23262, - "end": 23265, + "start": 23338, + "end": 23341, "loc": { "start": { - "line": 675, + "line": 678, "column": 28 }, "end": { - "line": 675, + "line": 678, "column": 31 }, "identifierName": "ctx" @@ -42147,15 +42396,15 @@ }, "property": { "type": "Identifier", - "start": 23266, - "end": 23271, + "start": 23342, + "end": 23347, "loc": { "start": { - "line": 675, + "line": 678, "column": 32 }, "end": { - "line": 675, + "line": 678, "column": 37 }, "identifierName": "stats" @@ -42166,15 +42415,15 @@ }, "property": { "type": "Identifier", - "start": 23272, - "end": 23278, + "start": 23348, + "end": 23354, "loc": { "start": { - "line": 675, + "line": 678, "column": 38 }, "end": { - "line": 675, + "line": 678, "column": 44 }, "identifierName": "numUVs" @@ -42185,57 +42434,57 @@ }, "right": { "type": "BinaryExpression", - "start": 23282, - "end": 23308, + "start": 23358, + "end": 23384, "loc": { "start": { - "line": 675, + "line": 678, "column": 48 }, "end": { - "line": 675, + "line": 678, "column": 74 } }, "left": { "type": "MemberExpression", - "start": 23282, - "end": 23304, + "start": 23358, + "end": 23380, "loc": { "start": { - "line": 675, + "line": 678, "column": 48 }, "end": { - "line": 675, + "line": 678, "column": 70 } }, "object": { "type": "MemberExpression", - "start": 23282, - "end": 23297, + "start": 23358, + "end": 23373, "loc": { "start": { - "line": 675, + "line": 678, "column": 48 }, "end": { - "line": 675, + "line": 678, "column": 63 } }, "object": { "type": "Identifier", - "start": 23282, - "end": 23293, + "start": 23358, + "end": 23369, "loc": { "start": { - "line": 675, + "line": 678, "column": 48 }, "end": { - "line": 675, + "line": 678, "column": 59 }, "identifierName": "geometryCfg" @@ -42244,15 +42493,15 @@ }, "property": { "type": "Identifier", - "start": 23294, - "end": 23297, + "start": 23370, + "end": 23373, "loc": { "start": { - "line": 675, + "line": 678, "column": 60 }, "end": { - "line": 675, + "line": 678, "column": 63 }, "identifierName": "uvs" @@ -42263,15 +42512,15 @@ }, "property": { "type": "Identifier", - "start": 23298, - "end": 23304, + "start": 23374, + "end": 23380, "loc": { "start": { - "line": 675, + "line": 678, "column": 64 }, "end": { - "line": 675, + "line": 678, "column": 70 }, "identifierName": "length" @@ -42283,15 +42532,15 @@ "operator": "/", "right": { "type": "NumericLiteral", - "start": 23307, - "end": 23308, + "start": 23383, + "end": 23384, "loc": { "start": { - "line": 675, + "line": 678, "column": 73 }, "end": { - "line": 675, + "line": 678, "column": 74 } }, @@ -42316,43 +42565,43 @@ }, { "type": "IfStatement", - "start": 23378, - "end": 23659, + "start": 23454, + "end": 23735, "loc": { "start": { - "line": 678, + "line": 681, "column": 20 }, "end": { - "line": 683, + "line": 686, "column": 21 } }, "test": { "type": "MemberExpression", - "start": 23382, - "end": 23399, + "start": 23458, + "end": 23475, "loc": { "start": { - "line": 678, + "line": 681, "column": 24 }, "end": { - "line": 678, + "line": 681, "column": 41 } }, "object": { "type": "Identifier", - "start": 23382, - "end": 23391, + "start": 23458, + "end": 23467, "loc": { "start": { - "line": 678, + "line": 681, "column": 24 }, "end": { - "line": 678, + "line": 681, "column": 33 }, "identifierName": "primitive" @@ -42361,15 +42610,15 @@ }, "property": { "type": "Identifier", - "start": 23392, - "end": 23399, + "start": 23468, + "end": 23475, "loc": { "start": { - "line": 678, + "line": 681, "column": 34 }, "end": { - "line": 678, + "line": 681, "column": 41 }, "identifierName": "indices" @@ -42380,73 +42629,73 @@ }, "consequent": { "type": "BlockStatement", - "start": 23401, - "end": 23659, + "start": 23477, + "end": 23735, "loc": { "start": { - "line": 678, + "line": 681, "column": 43 }, "end": { - "line": 683, + "line": 686, "column": 21 } }, "body": [ { "type": "ExpressionStatement", - "start": 23427, - "end": 23473, + "start": 23503, + "end": 23549, "loc": { "start": { - "line": 679, + "line": 682, "column": 24 }, "end": { - "line": 679, + "line": 682, "column": 70 } }, "expression": { "type": "AssignmentExpression", - "start": 23427, - "end": 23472, + "start": 23503, + "end": 23548, "loc": { "start": { - "line": 679, + "line": 682, "column": 24 }, "end": { - "line": 679, + "line": 682, "column": 69 } }, "operator": "=", "left": { "type": "MemberExpression", - "start": 23427, - "end": 23446, + "start": 23503, + "end": 23522, "loc": { "start": { - "line": 679, + "line": 682, "column": 24 }, "end": { - "line": 679, + "line": 682, "column": 43 } }, "object": { "type": "Identifier", - "start": 23427, - "end": 23438, + "start": 23503, + "end": 23514, "loc": { "start": { - "line": 679, + "line": 682, "column": 24 }, "end": { - "line": 679, + "line": 682, "column": 35 }, "identifierName": "geometryCfg" @@ -42455,15 +42704,15 @@ }, "property": { "type": "Identifier", - "start": 23439, - "end": 23446, + "start": 23515, + "end": 23522, "loc": { "start": { - "line": 679, + "line": 682, "column": 36 }, "end": { - "line": 679, + "line": 682, "column": 43 }, "identifierName": "indices" @@ -42474,43 +42723,43 @@ }, "right": { "type": "MemberExpression", - "start": 23449, - "end": 23472, + "start": 23525, + "end": 23548, "loc": { "start": { - "line": 679, + "line": 682, "column": 46 }, "end": { - "line": 679, + "line": 682, "column": 69 } }, "object": { "type": "MemberExpression", - "start": 23449, - "end": 23466, + "start": 23525, + "end": 23542, "loc": { "start": { - "line": 679, + "line": 682, "column": 46 }, "end": { - "line": 679, + "line": 682, "column": 63 } }, "object": { "type": "Identifier", - "start": 23449, - "end": 23458, + "start": 23525, + "end": 23534, "loc": { "start": { - "line": 679, + "line": 682, "column": 46 }, "end": { - "line": 679, + "line": 682, "column": 55 }, "identifierName": "primitive" @@ -42519,15 +42768,15 @@ }, "property": { "type": "Identifier", - "start": 23459, - "end": 23466, + "start": 23535, + "end": 23542, "loc": { "start": { - "line": 679, + "line": 682, "column": 56 }, "end": { - "line": 679, + "line": 682, "column": 63 }, "identifierName": "indices" @@ -42538,15 +42787,15 @@ }, "property": { "type": "Identifier", - "start": 23467, - "end": 23472, + "start": 23543, + "end": 23548, "loc": { "start": { - "line": 679, + "line": 682, "column": 64 }, "end": { - "line": 679, + "line": 682, "column": 69 }, "identifierName": "value" @@ -42559,57 +42808,57 @@ }, { "type": "IfStatement", - "start": 23498, - "end": 23637, + "start": 23574, + "end": 23713, "loc": { "start": { - "line": 680, + "line": 683, "column": 24 }, "end": { - "line": 682, + "line": 685, "column": 25 } }, "test": { "type": "BinaryExpression", - "start": 23502, - "end": 23522, + "start": 23578, + "end": 23598, "loc": { "start": { - "line": 680, + "line": 683, "column": 28 }, "end": { - "line": 680, + "line": 683, "column": 48 } }, "left": { "type": "MemberExpression", - "start": 23502, - "end": 23516, + "start": 23578, + "end": 23592, "loc": { "start": { - "line": 680, + "line": 683, "column": 28 }, "end": { - "line": 680, + "line": 683, "column": 42 } }, "object": { "type": "Identifier", - "start": 23502, - "end": 23511, + "start": 23578, + "end": 23587, "loc": { "start": { - "line": 680, + "line": 683, "column": 28 }, "end": { - "line": 680, + "line": 683, "column": 37 }, "identifierName": "primitive" @@ -42618,15 +42867,15 @@ }, "property": { "type": "Identifier", - "start": 23512, - "end": 23516, + "start": 23588, + "end": 23592, "loc": { "start": { - "line": 680, + "line": 683, "column": 38 }, "end": { - "line": 680, + "line": 683, "column": 42 }, "identifierName": "mode" @@ -42638,15 +42887,15 @@ "operator": "===", "right": { "type": "NumericLiteral", - "start": 23521, - "end": 23522, + "start": 23597, + "end": 23598, "loc": { "start": { - "line": 680, + "line": 683, "column": 47 }, "end": { - "line": 680, + "line": 683, "column": 48 } }, @@ -42659,87 +42908,87 @@ }, "consequent": { "type": "BlockStatement", - "start": 23524, - "end": 23637, + "start": 23600, + "end": 23713, "loc": { "start": { - "line": 680, + "line": 683, "column": 50 }, "end": { - "line": 682, + "line": 685, "column": 25 } }, "body": [ { "type": "ExpressionStatement", - "start": 23554, - "end": 23611, + "start": 23630, + "end": 23687, "loc": { "start": { - "line": 681, + "line": 684, "column": 28 }, "end": { - "line": 681, + "line": 684, "column": 85 } }, "expression": { "type": "AssignmentExpression", - "start": 23554, - "end": 23610, + "start": 23630, + "end": 23686, "loc": { "start": { - "line": 681, + "line": 684, "column": 28 }, "end": { - "line": 681, + "line": 684, "column": 84 } }, "operator": "+=", "left": { "type": "MemberExpression", - "start": 23554, - "end": 23576, + "start": 23630, + "end": 23652, "loc": { "start": { - "line": 681, + "line": 684, "column": 28 }, "end": { - "line": 681, + "line": 684, "column": 50 } }, "object": { "type": "MemberExpression", - "start": 23554, - "end": 23563, + "start": 23630, + "end": 23639, "loc": { "start": { - "line": 681, + "line": 684, "column": 28 }, "end": { - "line": 681, + "line": 684, "column": 37 } }, "object": { "type": "Identifier", - "start": 23554, - "end": 23557, + "start": 23630, + "end": 23633, "loc": { "start": { - "line": 681, + "line": 684, "column": 28 }, "end": { - "line": 681, + "line": 684, "column": 31 }, "identifierName": "ctx" @@ -42748,15 +42997,15 @@ }, "property": { "type": "Identifier", - "start": 23558, - "end": 23563, + "start": 23634, + "end": 23639, "loc": { "start": { - "line": 681, + "line": 684, "column": 32 }, "end": { - "line": 681, + "line": 684, "column": 37 }, "identifierName": "stats" @@ -42767,15 +43016,15 @@ }, "property": { "type": "Identifier", - "start": 23564, - "end": 23576, + "start": 23640, + "end": 23652, "loc": { "start": { - "line": 681, + "line": 684, "column": 38 }, "end": { - "line": 681, + "line": 684, "column": 50 }, "identifierName": "numTriangles" @@ -42786,57 +43035,57 @@ }, "right": { "type": "BinaryExpression", - "start": 23580, - "end": 23610, + "start": 23656, + "end": 23686, "loc": { "start": { - "line": 681, + "line": 684, "column": 54 }, "end": { - "line": 681, + "line": 684, "column": 84 } }, "left": { "type": "MemberExpression", - "start": 23580, - "end": 23606, + "start": 23656, + "end": 23682, "loc": { "start": { - "line": 681, + "line": 684, "column": 54 }, "end": { - "line": 681, + "line": 684, "column": 80 } }, "object": { "type": "MemberExpression", - "start": 23580, - "end": 23599, + "start": 23656, + "end": 23675, "loc": { "start": { - "line": 681, + "line": 684, "column": 54 }, "end": { - "line": 681, + "line": 684, "column": 73 } }, "object": { "type": "Identifier", - "start": 23580, - "end": 23591, + "start": 23656, + "end": 23667, "loc": { "start": { - "line": 681, + "line": 684, "column": 54 }, "end": { - "line": 681, + "line": 684, "column": 65 }, "identifierName": "geometryCfg" @@ -42845,15 +43094,15 @@ }, "property": { "type": "Identifier", - "start": 23592, - "end": 23599, + "start": 23668, + "end": 23675, "loc": { "start": { - "line": 681, + "line": 684, "column": 66 }, "end": { - "line": 681, + "line": 684, "column": 73 }, "identifierName": "indices" @@ -42864,15 +43113,15 @@ }, "property": { "type": "Identifier", - "start": 23600, - "end": 23606, + "start": 23676, + "end": 23682, "loc": { "start": { - "line": 681, + "line": 684, "column": 74 }, "end": { - "line": 681, + "line": 684, "column": 80 }, "identifierName": "length" @@ -42884,15 +43133,15 @@ "operator": "/", "right": { "type": "NumericLiteral", - "start": 23609, - "end": 23610, + "start": 23685, + "end": 23686, "loc": { "start": { - "line": 681, + "line": 684, "column": 83 }, "end": { - "line": 681, + "line": 684, "column": 84 } }, @@ -42917,71 +43166,71 @@ }, { "type": "ExpressionStatement", - "start": 23680, - "end": 23721, + "start": 23756, + "end": 23797, "loc": { "start": { - "line": 684, + "line": 687, "column": 20 }, "end": { - "line": 684, + "line": 687, "column": 61 } }, "expression": { "type": "CallExpression", - "start": 23680, - "end": 23720, + "start": 23756, + "end": 23796, "loc": { "start": { - "line": 684, + "line": 687, "column": 20 }, "end": { - "line": 684, + "line": 687, "column": 60 } }, "callee": { "type": "MemberExpression", - "start": 23680, - "end": 23707, + "start": 23756, + "end": 23783, "loc": { "start": { - "line": 684, + "line": 687, "column": 20 }, "end": { - "line": 684, + "line": 687, "column": 47 } }, "object": { "type": "MemberExpression", - "start": 23680, - "end": 23692, + "start": 23756, + "end": 23768, "loc": { "start": { - "line": 684, + "line": 687, "column": 20 }, "end": { - "line": 684, + "line": 687, "column": 32 } }, "object": { "type": "Identifier", - "start": 23680, - "end": 23683, + "start": 23756, + "end": 23759, "loc": { "start": { - "line": 684, + "line": 687, "column": 20 }, "end": { - "line": 684, + "line": 687, "column": 23 }, "identifierName": "ctx" @@ -42990,15 +43239,15 @@ }, "property": { "type": "Identifier", - "start": 23684, - "end": 23692, + "start": 23760, + "end": 23768, "loc": { "start": { - "line": 684, + "line": 687, "column": 24 }, "end": { - "line": 684, + "line": 687, "column": 32 }, "identifierName": "xktModel" @@ -43009,15 +43258,15 @@ }, "property": { "type": "Identifier", - "start": 23693, - "end": 23707, + "start": 23769, + "end": 23783, "loc": { "start": { - "line": 684, + "line": 687, "column": 33 }, "end": { - "line": 684, + "line": 687, "column": 47 }, "identifierName": "createGeometry" @@ -43029,15 +43278,15 @@ "arguments": [ { "type": "Identifier", - "start": 23708, - "end": 23719, + "start": 23784, + "end": 23795, "loc": { "start": { - "line": 684, + "line": 687, "column": 48 }, "end": { - "line": 684, + "line": 687, "column": 59 }, "identifierName": "geometryCfg" @@ -43049,72 +43298,72 @@ }, { "type": "ExpressionStatement", - "start": 23742, - "end": 23783, + "start": 23818, + "end": 23859, "loc": { "start": { - "line": 685, + "line": 688, "column": 20 }, "end": { - "line": 685, + "line": 688, "column": 61 } }, "expression": { "type": "AssignmentExpression", - "start": 23742, - "end": 23782, + "start": 23818, + "end": 23858, "loc": { "start": { - "line": 685, + "line": 688, "column": 20 }, "end": { - "line": 685, + "line": 688, "column": 60 } }, "operator": "=", "left": { "type": "MemberExpression", - "start": 23742, - "end": 23775, + "start": 23818, + "end": 23851, "loc": { "start": { - "line": 685, + "line": 688, "column": 20 }, "end": { - "line": 685, + "line": 688, "column": 53 } }, "object": { "type": "MemberExpression", - "start": 23742, - "end": 23763, + "start": 23818, + "end": 23839, "loc": { "start": { - "line": 685, + "line": 688, "column": 20 }, "end": { - "line": 685, + "line": 688, "column": 41 } }, "object": { "type": "Identifier", - "start": 23742, - "end": 23745, + "start": 23818, + "end": 23821, "loc": { "start": { - "line": 685, + "line": 688, "column": 20 }, "end": { - "line": 685, + "line": 688, "column": 23 }, "identifierName": "ctx" @@ -43123,15 +43372,15 @@ }, "property": { "type": "Identifier", - "start": 23746, - "end": 23763, + "start": 23822, + "end": 23839, "loc": { "start": { - "line": 685, + "line": 688, "column": 24 }, "end": { - "line": 685, + "line": 688, "column": 41 }, "identifierName": "geometriesCreated" @@ -43142,15 +43391,15 @@ }, "property": { "type": "Identifier", - "start": 23764, - "end": 23774, + "start": 23840, + "end": 23850, "loc": { "start": { - "line": 685, + "line": 688, "column": 42 }, "end": { - "line": 685, + "line": 688, "column": 52 }, "identifierName": "geometryId" @@ -43161,15 +43410,15 @@ }, "right": { "type": "BooleanLiteral", - "start": 23778, - "end": 23782, + "start": 23854, + "end": 23858, "loc": { "start": { - "line": 685, + "line": 688, "column": 56 }, "end": { - "line": 685, + "line": 688, "column": 60 } }, @@ -43179,29 +43428,29 @@ }, { "type": "ExpressionStatement", - "start": 23804, - "end": 23830, + "start": 23880, + "end": 23906, "loc": { "start": { - "line": 686, + "line": 689, "column": 20 }, "end": { - "line": 686, + "line": 689, "column": 46 } }, "expression": { "type": "UpdateExpression", - "start": 23804, - "end": 23829, + "start": 23880, + "end": 23905, "loc": { "start": { - "line": 686, + "line": 689, "column": 20 }, "end": { - "line": 686, + "line": 689, "column": 45 } }, @@ -43209,43 +43458,43 @@ "prefix": false, "argument": { "type": "MemberExpression", - "start": 23804, - "end": 23827, + "start": 23880, + "end": 23903, "loc": { "start": { - "line": 686, + "line": 689, "column": 20 }, "end": { - "line": 686, + "line": 689, "column": 43 } }, "object": { "type": "MemberExpression", - "start": 23804, - "end": 23813, + "start": 23880, + "end": 23889, "loc": { "start": { - "line": 686, + "line": 689, "column": 20 }, "end": { - "line": 686, + "line": 689, "column": 29 } }, "object": { "type": "Identifier", - "start": 23804, - "end": 23807, + "start": 23880, + "end": 23883, "loc": { "start": { - "line": 686, + "line": 689, "column": 20 }, "end": { - "line": 686, + "line": 689, "column": 23 }, "identifierName": "ctx" @@ -43254,15 +43503,15 @@ }, "property": { "type": "Identifier", - "start": 23808, - "end": 23813, + "start": 23884, + "end": 23889, "loc": { "start": { - "line": 686, + "line": 689, "column": 24 }, "end": { - "line": 686, + "line": 689, "column": 29 }, "identifierName": "stats" @@ -43273,15 +43522,15 @@ }, "property": { "type": "Identifier", - "start": 23814, - "end": 23827, + "start": 23890, + "end": 23903, "loc": { "start": { - "line": 686, + "line": 689, "column": 30 }, "end": { - "line": 686, + "line": 689, "column": 43 }, "identifierName": "numGeometries" @@ -43299,44 +43548,44 @@ }, { "type": "VariableDeclaration", - "start": 23865, - "end": 23896, + "start": 23941, + "end": 23972, "loc": { "start": { - "line": 688, + "line": 691, "column": 16 }, "end": { - "line": 688, + "line": 691, "column": 47 } }, "declarations": [ { "type": "VariableDeclarator", - "start": 23871, - "end": 23895, + "start": 23947, + "end": 23971, "loc": { "start": { - "line": 688, + "line": 691, "column": 22 }, "end": { - "line": 688, + "line": 691, "column": 46 } }, "id": { "type": "Identifier", - "start": 23871, - "end": 23880, + "start": 23947, + "end": 23956, "loc": { "start": { - "line": 688, + "line": 691, "column": 22 }, "end": { - "line": 688, + "line": 691, "column": 31 }, "identifierName": "xktMeshId" @@ -43345,15 +43594,15 @@ }, "init": { "type": "UpdateExpression", - "start": 23883, - "end": 23895, + "start": 23959, + "end": 23971, "loc": { "start": { - "line": 688, + "line": 691, "column": 34 }, "end": { - "line": 688, + "line": 691, "column": 46 } }, @@ -43361,29 +43610,29 @@ "prefix": false, "argument": { "type": "MemberExpression", - "start": 23883, - "end": 23893, + "start": 23959, + "end": 23969, "loc": { "start": { - "line": 688, + "line": 691, "column": 34 }, "end": { - "line": 688, + "line": 691, "column": 44 } }, "object": { "type": "Identifier", - "start": 23883, - "end": 23886, + "start": 23959, + "end": 23962, "loc": { "start": { - "line": 688, + "line": 691, "column": 34 }, "end": { - "line": 688, + "line": 691, "column": 37 }, "identifierName": "ctx" @@ -43392,15 +43641,15 @@ }, "property": { "type": "Identifier", - "start": 23887, - "end": 23893, + "start": 23963, + "end": 23969, "loc": { "start": { - "line": 688, + "line": 691, "column": 38 }, "end": { - "line": 688, + "line": 691, "column": 44 }, "identifierName": "nextId" @@ -43416,44 +43665,44 @@ }, { "type": "VariableDeclaration", - "start": 23913, - "end": 24094, + "start": 23989, + "end": 24170, "loc": { "start": { - "line": 689, + "line": 692, "column": 16 }, "end": { - "line": 693, + "line": 696, "column": 18 } }, "declarations": [ { "type": "VariableDeclarator", - "start": 23919, - "end": 24093, + "start": 23995, + "end": 24169, "loc": { "start": { - "line": 689, + "line": 692, "column": 22 }, "end": { - "line": 693, + "line": 696, "column": 17 } }, "id": { "type": "Identifier", - "start": 23919, - "end": 23926, + "start": 23995, + "end": 24002, "loc": { "start": { - "line": 689, + "line": 692, "column": 22 }, "end": { - "line": 689, + "line": 692, "column": 29 }, "identifierName": "meshCfg" @@ -43462,30 +43711,30 @@ }, "init": { "type": "ObjectExpression", - "start": 23929, - "end": 24093, + "start": 24005, + "end": 24169, "loc": { "start": { - "line": 689, + "line": 692, "column": 32 }, "end": { - "line": 693, + "line": 696, "column": 17 } }, "properties": [ { "type": "ObjectProperty", - "start": 23951, - "end": 23968, + "start": 24027, + "end": 24044, "loc": { "start": { - "line": 690, + "line": 693, "column": 20 }, "end": { - "line": 690, + "line": 693, "column": 37 } }, @@ -43494,15 +43743,15 @@ "computed": false, "key": { "type": "Identifier", - "start": 23951, - "end": 23957, + "start": 24027, + "end": 24033, "loc": { "start": { - "line": 690, + "line": 693, "column": 20 }, "end": { - "line": 690, + "line": 693, "column": 26 }, "identifierName": "meshId" @@ -43511,15 +43760,15 @@ }, "value": { "type": "Identifier", - "start": 23959, - "end": 23968, + "start": 24035, + "end": 24044, "loc": { "start": { - "line": 690, + "line": 693, "column": 28 }, "end": { - "line": 690, + "line": 693, "column": 37 }, "identifierName": "xktMeshId" @@ -43529,15 +43778,15 @@ }, { "type": "ObjectProperty", - "start": 23990, - "end": 24000, + "start": 24066, + "end": 24076, "loc": { "start": { - "line": 691, + "line": 694, "column": 20 }, "end": { - "line": 691, + "line": 694, "column": 30 } }, @@ -43546,15 +43795,15 @@ "computed": false, "key": { "type": "Identifier", - "start": 23990, - "end": 24000, + "start": 24066, + "end": 24076, "loc": { "start": { - "line": 691, + "line": 694, "column": 20 }, "end": { - "line": 691, + "line": 694, "column": 30 }, "identifierName": "geometryId" @@ -43563,15 +43812,15 @@ }, "value": { "type": "Identifier", - "start": 23990, - "end": 24000, + "start": 24066, + "end": 24076, "loc": { "start": { - "line": 691, + "line": 694, "column": 20 }, "end": { - "line": 691, + "line": 694, "column": 30 }, "identifierName": "geometryId" @@ -43584,15 +43833,15 @@ }, { "type": "ObjectProperty", - "start": 24022, - "end": 24075, + "start": 24098, + "end": 24151, "loc": { "start": { - "line": 692, + "line": 695, "column": 20 }, "end": { - "line": 692, + "line": 695, "column": 73 } }, @@ -43601,15 +43850,15 @@ "computed": false, "key": { "type": "Identifier", - "start": 24022, - "end": 24028, + "start": 24098, + "end": 24104, "loc": { "start": { - "line": 692, + "line": 695, "column": 20 }, "end": { - "line": 692, + "line": 695, "column": 26 }, "identifierName": "matrix" @@ -43618,29 +43867,29 @@ }, "value": { "type": "ConditionalExpression", - "start": 24030, - "end": 24075, + "start": 24106, + "end": 24151, "loc": { "start": { - "line": 692, + "line": 695, "column": 28 }, "end": { - "line": 692, + "line": 695, "column": 73 } }, "test": { "type": "Identifier", - "start": 24030, - "end": 24036, + "start": 24106, + "end": 24112, "loc": { "start": { - "line": 692, + "line": 695, "column": 28 }, "end": { - "line": 692, + "line": 695, "column": 34 }, "identifierName": "matrix" @@ -43649,43 +43898,43 @@ }, "consequent": { "type": "CallExpression", - "start": 24039, - "end": 24053, + "start": 24115, + "end": 24129, "loc": { "start": { - "line": 692, + "line": 695, "column": 37 }, "end": { - "line": 692, + "line": 695, "column": 51 } }, "callee": { "type": "MemberExpression", - "start": 24039, - "end": 24051, + "start": 24115, + "end": 24127, "loc": { "start": { - "line": 692, + "line": 695, "column": 37 }, "end": { - "line": 692, + "line": 695, "column": 49 } }, "object": { "type": "Identifier", - "start": 24039, - "end": 24045, + "start": 24115, + "end": 24121, "loc": { "start": { - "line": 692, + "line": 695, "column": 37 }, "end": { - "line": 692, + "line": 695, "column": 43 }, "identifierName": "matrix" @@ -43694,15 +43943,15 @@ }, "property": { "type": "Identifier", - "start": 24046, - "end": 24051, + "start": 24122, + "end": 24127, "loc": { "start": { - "line": 692, + "line": 695, "column": 44 }, "end": { - "line": 692, + "line": 695, "column": 49 }, "identifierName": "slice" @@ -43715,43 +43964,43 @@ }, "alternate": { "type": "CallExpression", - "start": 24056, - "end": 24075, + "start": 24132, + "end": 24151, "loc": { "start": { - "line": 692, + "line": 695, "column": 54 }, "end": { - "line": 692, + "line": 695, "column": 73 } }, "callee": { "type": "MemberExpression", - "start": 24056, - "end": 24073, + "start": 24132, + "end": 24149, "loc": { "start": { - "line": 692, + "line": 695, "column": 54 }, "end": { - "line": 692, + "line": 695, "column": 71 } }, "object": { "type": "Identifier", - "start": 24056, - "end": 24060, + "start": 24132, + "end": 24136, "loc": { "start": { - "line": 692, + "line": 695, "column": 54 }, "end": { - "line": 692, + "line": 695, "column": 58 }, "identifierName": "math" @@ -43760,15 +44009,15 @@ }, "property": { "type": "Identifier", - "start": 24061, - "end": 24073, + "start": 24137, + "end": 24149, "loc": { "start": { - "line": 692, + "line": 695, "column": 59 }, "end": { - "line": 692, + "line": 695, "column": 71 }, "identifierName": "identityMat4" @@ -43789,44 +44038,44 @@ }, { "type": "VariableDeclaration", - "start": 24111, - "end": 24147, + "start": 24187, + "end": 24223, "loc": { "start": { - "line": 694, + "line": 697, "column": 16 }, "end": { - "line": 694, + "line": 697, "column": 52 } }, "declarations": [ { "type": "VariableDeclarator", - "start": 24117, - "end": 24146, + "start": 24193, + "end": 24222, "loc": { "start": { - "line": 694, + "line": 697, "column": 22 }, "end": { - "line": 694, + "line": 697, "column": 51 } }, "id": { "type": "Identifier", - "start": 24117, - "end": 24125, + "start": 24193, + "end": 24201, "loc": { "start": { - "line": 694, + "line": 697, "column": 22 }, "end": { - "line": 694, + "line": 697, "column": 30 }, "identifierName": "material" @@ -43835,29 +44084,29 @@ }, "init": { "type": "MemberExpression", - "start": 24128, - "end": 24146, + "start": 24204, + "end": 24222, "loc": { "start": { - "line": 694, + "line": 697, "column": 33 }, "end": { - "line": 694, + "line": 697, "column": 51 } }, "object": { "type": "Identifier", - "start": 24128, - "end": 24137, + "start": 24204, + "end": 24213, "loc": { "start": { - "line": 694, + "line": 697, "column": 33 }, "end": { - "line": 694, + "line": 697, "column": 42 }, "identifierName": "primitive" @@ -43866,15 +44115,15 @@ }, "property": { "type": "Identifier", - "start": 24138, - "end": 24146, + "start": 24214, + "end": 24222, "loc": { "start": { - "line": 694, + "line": 697, "column": 43 }, "end": { - "line": 694, + "line": 697, "column": 51 }, "identifierName": "material" @@ -43889,29 +44138,29 @@ }, { "type": "IfStatement", - "start": 24164, - "end": 24659, + "start": 24240, + "end": 24735, "loc": { "start": { - "line": 695, + "line": 698, "column": 16 }, "end": { - "line": 704, + "line": 707, "column": 17 } }, "test": { "type": "Identifier", - "start": 24168, - "end": 24176, + "start": 24244, + "end": 24252, "loc": { "start": { - "line": 695, + "line": 698, "column": 20 }, "end": { - "line": 695, + "line": 698, "column": 28 }, "identifierName": "material" @@ -43920,73 +44169,73 @@ }, "consequent": { "type": "BlockStatement", - "start": 24178, - "end": 24538, + "start": 24254, + "end": 24614, "loc": { "start": { - "line": 695, + "line": 698, "column": 30 }, "end": { - "line": 701, + "line": 704, "column": 17 } }, "body": [ { "type": "ExpressionStatement", - "start": 24200, - "end": 24246, + "start": 24276, + "end": 24322, "loc": { "start": { - "line": 696, + "line": 699, "column": 20 }, "end": { - "line": 696, + "line": 699, "column": 66 } }, "expression": { "type": "AssignmentExpression", - "start": 24200, - "end": 24245, + "start": 24276, + "end": 24321, "loc": { "start": { - "line": 696, + "line": 699, "column": 20 }, "end": { - "line": 696, + "line": 699, "column": 65 } }, "operator": "=", "left": { "type": "MemberExpression", - "start": 24200, - "end": 24220, + "start": 24276, + "end": 24296, "loc": { "start": { - "line": 696, + "line": 699, "column": 20 }, "end": { - "line": 696, + "line": 699, "column": 40 } }, "object": { "type": "Identifier", - "start": 24200, - "end": 24207, + "start": 24276, + "end": 24283, "loc": { "start": { - "line": 696, + "line": 699, "column": 20 }, "end": { - "line": 696, + "line": 699, "column": 27 }, "identifierName": "meshCfg" @@ -43995,15 +44244,15 @@ }, "property": { "type": "Identifier", - "start": 24208, - "end": 24220, + "start": 24284, + "end": 24296, "loc": { "start": { - "line": 696, + "line": 699, "column": 28 }, "end": { - "line": 696, + "line": 699, "column": 40 }, "identifierName": "textureSetId" @@ -44014,29 +44263,29 @@ }, "right": { "type": "MemberExpression", - "start": 24223, - "end": 24245, + "start": 24299, + "end": 24321, "loc": { "start": { - "line": 696, + "line": 699, "column": 43 }, "end": { - "line": 696, + "line": 699, "column": 65 } }, "object": { "type": "Identifier", - "start": 24223, - "end": 24231, + "start": 24299, + "end": 24307, "loc": { "start": { - "line": 696, + "line": 699, "column": 43 }, "end": { - "line": 696, + "line": 699, "column": 51 }, "identifierName": "material" @@ -44045,15 +44294,15 @@ }, "property": { "type": "Identifier", - "start": 24232, - "end": 24245, + "start": 24308, + "end": 24321, "loc": { "start": { - "line": 696, + "line": 699, "column": 52 }, "end": { - "line": 696, + "line": 699, "column": 65 }, "identifierName": "_textureSetId" @@ -44066,58 +44315,58 @@ }, { "type": "ExpressionStatement", - "start": 24267, - "end": 24310, + "start": 24343, + "end": 24386, "loc": { "start": { - "line": 697, + "line": 700, "column": 20 }, "end": { - "line": 697, + "line": 700, "column": 63 } }, "expression": { "type": "AssignmentExpression", - "start": 24267, - "end": 24309, + "start": 24343, + "end": 24385, "loc": { "start": { - "line": 697, + "line": 700, "column": 20 }, "end": { - "line": 697, + "line": 700, "column": 62 } }, "operator": "=", "left": { "type": "MemberExpression", - "start": 24267, - "end": 24280, + "start": 24343, + "end": 24356, "loc": { "start": { - "line": 697, + "line": 700, "column": 20 }, "end": { - "line": 697, + "line": 700, "column": 33 } }, "object": { "type": "Identifier", - "start": 24267, - "end": 24274, + "start": 24343, + "end": 24350, "loc": { "start": { - "line": 697, + "line": 700, "column": 20 }, "end": { - "line": 697, + "line": 700, "column": 27 }, "identifierName": "meshCfg" @@ -44126,15 +44375,15 @@ }, "property": { "type": "Identifier", - "start": 24275, - "end": 24280, + "start": 24351, + "end": 24356, "loc": { "start": { - "line": 697, + "line": 700, "column": 28 }, "end": { - "line": 697, + "line": 700, "column": 33 }, "identifierName": "color" @@ -44145,43 +44394,43 @@ }, "right": { "type": "MemberExpression", - "start": 24283, - "end": 24309, + "start": 24359, + "end": 24385, "loc": { "start": { - "line": 697, + "line": 700, "column": 36 }, "end": { - "line": 697, + "line": 700, "column": 62 } }, "object": { "type": "MemberExpression", - "start": 24283, - "end": 24303, + "start": 24359, + "end": 24379, "loc": { "start": { - "line": 697, + "line": 700, "column": 36 }, "end": { - "line": 697, + "line": 700, "column": 56 } }, "object": { "type": "Identifier", - "start": 24283, - "end": 24291, + "start": 24359, + "end": 24367, "loc": { "start": { - "line": 697, + "line": 700, "column": 36 }, "end": { - "line": 697, + "line": 700, "column": 44 }, "identifierName": "material" @@ -44190,15 +44439,15 @@ }, "property": { "type": "Identifier", - "start": 24292, - "end": 24303, + "start": 24368, + "end": 24379, "loc": { "start": { - "line": 697, + "line": 700, "column": 45 }, "end": { - "line": 697, + "line": 700, "column": 56 }, "identifierName": "_attributes" @@ -44209,15 +44458,15 @@ }, "property": { "type": "Identifier", - "start": 24304, - "end": 24309, + "start": 24380, + "end": 24385, "loc": { "start": { - "line": 697, + "line": 700, "column": 57 }, "end": { - "line": 697, + "line": 700, "column": 62 }, "identifierName": "color" @@ -44230,58 +44479,58 @@ }, { "type": "ExpressionStatement", - "start": 24331, - "end": 24378, + "start": 24407, + "end": 24454, "loc": { "start": { - "line": 698, + "line": 701, "column": 20 }, "end": { - "line": 698, + "line": 701, "column": 67 } }, "expression": { "type": "AssignmentExpression", - "start": 24331, - "end": 24377, + "start": 24407, + "end": 24453, "loc": { "start": { - "line": 698, + "line": 701, "column": 20 }, "end": { - "line": 698, + "line": 701, "column": 66 } }, "operator": "=", "left": { "type": "MemberExpression", - "start": 24331, - "end": 24346, + "start": 24407, + "end": 24422, "loc": { "start": { - "line": 698, + "line": 701, "column": 20 }, "end": { - "line": 698, + "line": 701, "column": 35 } }, "object": { "type": "Identifier", - "start": 24331, - "end": 24338, + "start": 24407, + "end": 24414, "loc": { "start": { - "line": 698, + "line": 701, "column": 20 }, "end": { - "line": 698, + "line": 701, "column": 27 }, "identifierName": "meshCfg" @@ -44290,15 +44539,15 @@ }, "property": { "type": "Identifier", - "start": 24339, - "end": 24346, + "start": 24415, + "end": 24422, "loc": { "start": { - "line": 698, + "line": 701, "column": 28 }, "end": { - "line": 698, + "line": 701, "column": 35 }, "identifierName": "opacity" @@ -44309,43 +44558,43 @@ }, "right": { "type": "MemberExpression", - "start": 24349, - "end": 24377, + "start": 24425, + "end": 24453, "loc": { "start": { - "line": 698, + "line": 701, "column": 38 }, "end": { - "line": 698, + "line": 701, "column": 66 } }, "object": { "type": "MemberExpression", - "start": 24349, - "end": 24369, + "start": 24425, + "end": 24445, "loc": { "start": { - "line": 698, + "line": 701, "column": 38 }, "end": { - "line": 698, + "line": 701, "column": 58 } }, "object": { "type": "Identifier", - "start": 24349, - "end": 24357, + "start": 24425, + "end": 24433, "loc": { "start": { - "line": 698, + "line": 701, "column": 38 }, "end": { - "line": 698, + "line": 701, "column": 46 }, "identifierName": "material" @@ -44354,15 +44603,15 @@ }, "property": { "type": "Identifier", - "start": 24358, - "end": 24369, + "start": 24434, + "end": 24445, "loc": { "start": { - "line": 698, + "line": 701, "column": 47 }, "end": { - "line": 698, + "line": 701, "column": 58 }, "identifierName": "_attributes" @@ -44373,15 +44622,15 @@ }, "property": { "type": "Identifier", - "start": 24370, - "end": 24377, + "start": 24446, + "end": 24453, "loc": { "start": { - "line": 698, + "line": 701, "column": 59 }, "end": { - "line": 698, + "line": 701, "column": 66 }, "identifierName": "opacity" @@ -44394,58 +44643,58 @@ }, { "type": "ExpressionStatement", - "start": 24399, - "end": 24448, + "start": 24475, + "end": 24524, "loc": { "start": { - "line": 699, + "line": 702, "column": 20 }, "end": { - "line": 699, + "line": 702, "column": 69 } }, "expression": { "type": "AssignmentExpression", - "start": 24399, - "end": 24447, + "start": 24475, + "end": 24523, "loc": { "start": { - "line": 699, + "line": 702, "column": 20 }, "end": { - "line": 699, + "line": 702, "column": 68 } }, "operator": "=", "left": { "type": "MemberExpression", - "start": 24399, - "end": 24415, + "start": 24475, + "end": 24491, "loc": { "start": { - "line": 699, + "line": 702, "column": 20 }, "end": { - "line": 699, + "line": 702, "column": 36 } }, "object": { "type": "Identifier", - "start": 24399, - "end": 24406, + "start": 24475, + "end": 24482, "loc": { "start": { - "line": 699, + "line": 702, "column": 20 }, "end": { - "line": 699, + "line": 702, "column": 27 }, "identifierName": "meshCfg" @@ -44454,15 +44703,15 @@ }, "property": { "type": "Identifier", - "start": 24407, - "end": 24415, + "start": 24483, + "end": 24491, "loc": { "start": { - "line": 699, + "line": 702, "column": 28 }, "end": { - "line": 699, + "line": 702, "column": 36 }, "identifierName": "metallic" @@ -44473,43 +44722,43 @@ }, "right": { "type": "MemberExpression", - "start": 24418, - "end": 24447, + "start": 24494, + "end": 24523, "loc": { "start": { - "line": 699, + "line": 702, "column": 39 }, "end": { - "line": 699, + "line": 702, "column": 68 } }, "object": { "type": "MemberExpression", - "start": 24418, - "end": 24438, + "start": 24494, + "end": 24514, "loc": { "start": { - "line": 699, + "line": 702, "column": 39 }, "end": { - "line": 699, + "line": 702, "column": 59 } }, "object": { "type": "Identifier", - "start": 24418, - "end": 24426, + "start": 24494, + "end": 24502, "loc": { "start": { - "line": 699, + "line": 702, "column": 39 }, "end": { - "line": 699, + "line": 702, "column": 47 }, "identifierName": "material" @@ -44518,15 +44767,15 @@ }, "property": { "type": "Identifier", - "start": 24427, - "end": 24438, + "start": 24503, + "end": 24514, "loc": { "start": { - "line": 699, + "line": 702, "column": 48 }, "end": { - "line": 699, + "line": 702, "column": 59 }, "identifierName": "_attributes" @@ -44537,15 +44786,15 @@ }, "property": { "type": "Identifier", - "start": 24439, - "end": 24447, + "start": 24515, + "end": 24523, "loc": { "start": { - "line": 699, + "line": 702, "column": 60 }, "end": { - "line": 699, + "line": 702, "column": 68 }, "identifierName": "metallic" @@ -44558,58 +44807,58 @@ }, { "type": "ExpressionStatement", - "start": 24469, - "end": 24520, + "start": 24545, + "end": 24596, "loc": { "start": { - "line": 700, + "line": 703, "column": 20 }, "end": { - "line": 700, + "line": 703, "column": 71 } }, "expression": { "type": "AssignmentExpression", - "start": 24469, - "end": 24519, + "start": 24545, + "end": 24595, "loc": { "start": { - "line": 700, + "line": 703, "column": 20 }, "end": { - "line": 700, + "line": 703, "column": 70 } }, "operator": "=", "left": { "type": "MemberExpression", - "start": 24469, - "end": 24486, + "start": 24545, + "end": 24562, "loc": { "start": { - "line": 700, + "line": 703, "column": 20 }, "end": { - "line": 700, + "line": 703, "column": 37 } }, "object": { "type": "Identifier", - "start": 24469, - "end": 24476, + "start": 24545, + "end": 24552, "loc": { "start": { - "line": 700, + "line": 703, "column": 20 }, "end": { - "line": 700, + "line": 703, "column": 27 }, "identifierName": "meshCfg" @@ -44618,15 +44867,15 @@ }, "property": { "type": "Identifier", - "start": 24477, - "end": 24486, + "start": 24553, + "end": 24562, "loc": { "start": { - "line": 700, + "line": 703, "column": 28 }, "end": { - "line": 700, + "line": 703, "column": 37 }, "identifierName": "roughness" @@ -44637,43 +44886,43 @@ }, "right": { "type": "MemberExpression", - "start": 24489, - "end": 24519, + "start": 24565, + "end": 24595, "loc": { "start": { - "line": 700, + "line": 703, "column": 40 }, "end": { - "line": 700, + "line": 703, "column": 70 } }, "object": { "type": "MemberExpression", - "start": 24489, - "end": 24509, + "start": 24565, + "end": 24585, "loc": { "start": { - "line": 700, + "line": 703, "column": 40 }, "end": { - "line": 700, + "line": 703, "column": 60 } }, "object": { "type": "Identifier", - "start": 24489, - "end": 24497, + "start": 24565, + "end": 24573, "loc": { "start": { - "line": 700, + "line": 703, "column": 40 }, "end": { - "line": 700, + "line": 703, "column": 48 }, "identifierName": "material" @@ -44682,15 +44931,15 @@ }, "property": { "type": "Identifier", - "start": 24498, - "end": 24509, + "start": 24574, + "end": 24585, "loc": { "start": { - "line": 700, + "line": 703, "column": 49 }, "end": { - "line": 700, + "line": 703, "column": 60 }, "identifierName": "_attributes" @@ -44701,15 +44950,15 @@ }, "property": { "type": "Identifier", - "start": 24510, - "end": 24519, + "start": 24586, + "end": 24595, "loc": { "start": { - "line": 700, + "line": 703, "column": 61 }, "end": { - "line": 700, + "line": 703, "column": 70 }, "identifierName": "roughness" @@ -44725,73 +44974,73 @@ }, "alternate": { "type": "BlockStatement", - "start": 24544, - "end": 24659, + "start": 24620, + "end": 24735, "loc": { "start": { - "line": 701, + "line": 704, "column": 23 }, "end": { - "line": 704, + "line": 707, "column": 17 } }, "body": [ { "type": "ExpressionStatement", - "start": 24566, - "end": 24598, + "start": 24642, + "end": 24674, "loc": { "start": { - "line": 702, + "line": 705, "column": 20 }, "end": { - "line": 702, + "line": 705, "column": 52 } }, "expression": { "type": "AssignmentExpression", - "start": 24566, - "end": 24597, + "start": 24642, + "end": 24673, "loc": { "start": { - "line": 702, + "line": 705, "column": 20 }, "end": { - "line": 702, + "line": 705, "column": 51 } }, "operator": "=", "left": { "type": "MemberExpression", - "start": 24566, - "end": 24579, + "start": 24642, + "end": 24655, "loc": { "start": { - "line": 702, + "line": 705, "column": 20 }, "end": { - "line": 702, + "line": 705, "column": 33 } }, "object": { "type": "Identifier", - "start": 24566, - "end": 24573, + "start": 24642, + "end": 24649, "loc": { "start": { - "line": 702, + "line": 705, "column": 20 }, "end": { - "line": 702, + "line": 705, "column": 27 }, "identifierName": "meshCfg" @@ -44800,15 +45049,15 @@ }, "property": { "type": "Identifier", - "start": 24574, - "end": 24579, + "start": 24650, + "end": 24655, "loc": { "start": { - "line": 702, + "line": 705, "column": 28 }, "end": { - "line": 702, + "line": 705, "column": 33 }, "identifierName": "color" @@ -44819,30 +45068,30 @@ }, "right": { "type": "ArrayExpression", - "start": 24582, - "end": 24597, + "start": 24658, + "end": 24673, "loc": { "start": { - "line": 702, + "line": 705, "column": 36 }, "end": { - "line": 702, + "line": 705, "column": 51 } }, "elements": [ { "type": "NumericLiteral", - "start": 24583, - "end": 24586, + "start": 24659, + "end": 24662, "loc": { "start": { - "line": 702, + "line": 705, "column": 37 }, "end": { - "line": 702, + "line": 705, "column": 40 } }, @@ -44854,15 +45103,15 @@ }, { "type": "NumericLiteral", - "start": 24588, - "end": 24591, + "start": 24664, + "end": 24667, "loc": { "start": { - "line": 702, + "line": 705, "column": 42 }, "end": { - "line": 702, + "line": 705, "column": 45 } }, @@ -44874,15 +45123,15 @@ }, { "type": "NumericLiteral", - "start": 24593, - "end": 24596, + "start": 24669, + "end": 24672, "loc": { "start": { - "line": 702, + "line": 705, "column": 47 }, "end": { - "line": 702, + "line": 705, "column": 50 } }, @@ -44898,58 +45147,58 @@ }, { "type": "ExpressionStatement", - "start": 24619, - "end": 24641, + "start": 24695, + "end": 24717, "loc": { "start": { - "line": 703, + "line": 706, "column": 20 }, "end": { - "line": 703, + "line": 706, "column": 42 } }, "expression": { "type": "AssignmentExpression", - "start": 24619, - "end": 24640, + "start": 24695, + "end": 24716, "loc": { "start": { - "line": 703, + "line": 706, "column": 20 }, "end": { - "line": 703, + "line": 706, "column": 41 } }, "operator": "=", "left": { "type": "MemberExpression", - "start": 24619, - "end": 24634, + "start": 24695, + "end": 24710, "loc": { "start": { - "line": 703, + "line": 706, "column": 20 }, "end": { - "line": 703, + "line": 706, "column": 35 } }, "object": { "type": "Identifier", - "start": 24619, - "end": 24626, + "start": 24695, + "end": 24702, "loc": { "start": { - "line": 703, + "line": 706, "column": 20 }, "end": { - "line": 703, + "line": 706, "column": 27 }, "identifierName": "meshCfg" @@ -44958,15 +45207,15 @@ }, "property": { "type": "Identifier", - "start": 24627, - "end": 24634, + "start": 24703, + "end": 24710, "loc": { "start": { - "line": 703, + "line": 706, "column": 28 }, "end": { - "line": 703, + "line": 706, "column": 35 }, "identifierName": "opacity" @@ -44977,15 +45226,15 @@ }, "right": { "type": "NumericLiteral", - "start": 24637, - "end": 24640, + "start": 24713, + "end": 24716, "loc": { "start": { - "line": 703, + "line": 706, "column": 38 }, "end": { - "line": 703, + "line": 706, "column": 41 } }, @@ -45003,71 +45252,71 @@ }, { "type": "ExpressionStatement", - "start": 24676, - "end": 24709, + "start": 24752, + "end": 24785, "loc": { "start": { - "line": 705, + "line": 708, "column": 16 }, "end": { - "line": 705, + "line": 708, "column": 49 } }, "expression": { "type": "CallExpression", - "start": 24676, - "end": 24708, + "start": 24752, + "end": 24784, "loc": { "start": { - "line": 705, + "line": 708, "column": 16 }, "end": { - "line": 705, + "line": 708, "column": 48 } }, "callee": { "type": "MemberExpression", - "start": 24676, - "end": 24699, + "start": 24752, + "end": 24775, "loc": { "start": { - "line": 705, + "line": 708, "column": 16 }, "end": { - "line": 705, + "line": 708, "column": 39 } }, "object": { "type": "MemberExpression", - "start": 24676, - "end": 24688, + "start": 24752, + "end": 24764, "loc": { "start": { - "line": 705, + "line": 708, "column": 16 }, "end": { - "line": 705, + "line": 708, "column": 28 } }, "object": { "type": "Identifier", - "start": 24676, - "end": 24679, + "start": 24752, + "end": 24755, "loc": { "start": { - "line": 705, + "line": 708, "column": 16 }, "end": { - "line": 705, + "line": 708, "column": 19 }, "identifierName": "ctx" @@ -45076,15 +45325,15 @@ }, "property": { "type": "Identifier", - "start": 24680, - "end": 24688, + "start": 24756, + "end": 24764, "loc": { "start": { - "line": 705, + "line": 708, "column": 20 }, "end": { - "line": 705, + "line": 708, "column": 28 }, "identifierName": "xktModel" @@ -45095,15 +45344,15 @@ }, "property": { "type": "Identifier", - "start": 24689, - "end": 24699, + "start": 24765, + "end": 24775, "loc": { "start": { - "line": 705, + "line": 708, "column": 29 }, "end": { - "line": 705, + "line": 708, "column": 39 }, "identifierName": "createMesh" @@ -45115,15 +45364,15 @@ "arguments": [ { "type": "Identifier", - "start": 24700, - "end": 24707, + "start": 24776, + "end": 24783, "loc": { "start": { - "line": 705, + "line": 708, "column": 40 }, "end": { - "line": 705, + "line": 708, "column": 47 }, "identifierName": "meshCfg" @@ -45135,57 +45384,57 @@ }, { "type": "ExpressionStatement", - "start": 24726, - "end": 24750, + "start": 24802, + "end": 24826, "loc": { "start": { - "line": 706, + "line": 709, "column": 16 }, "end": { - "line": 706, + "line": 709, "column": 40 } }, "expression": { "type": "CallExpression", - "start": 24726, - "end": 24749, + "start": 24802, + "end": 24825, "loc": { "start": { - "line": 706, + "line": 709, "column": 16 }, "end": { - "line": 706, + "line": 709, "column": 39 } }, "callee": { "type": "MemberExpression", - "start": 24726, - "end": 24738, + "start": 24802, + "end": 24814, "loc": { "start": { - "line": 706, + "line": 709, "column": 16 }, "end": { - "line": 706, + "line": 709, "column": 28 } }, "object": { "type": "Identifier", - "start": 24726, - "end": 24733, + "start": 24802, + "end": 24809, "loc": { "start": { - "line": 706, + "line": 709, "column": 16 }, "end": { - "line": 706, + "line": 709, "column": 23 }, "identifierName": "meshIds" @@ -45194,15 +45443,15 @@ }, "property": { "type": "Identifier", - "start": 24734, - "end": 24738, + "start": 24810, + "end": 24814, "loc": { "start": { - "line": 706, + "line": 709, "column": 24 }, "end": { - "line": 706, + "line": 709, "column": 28 }, "identifierName": "push" @@ -45214,15 +45463,15 @@ "arguments": [ { "type": "Identifier", - "start": 24739, - "end": 24748, + "start": 24815, + "end": 24824, "loc": { "start": { - "line": 706, + "line": 709, "column": 29 }, "end": { - "line": 706, + "line": 709, "column": 38 }, "identifierName": "xktMeshId" @@ -45237,29 +45486,29 @@ }, "handler": { "type": "CatchClause", - "start": 24765, - "end": 24822, + "start": 24841, + "end": 24898, "loc": { "start": { - "line": 707, + "line": 710, "column": 14 }, "end": { - "line": 709, + "line": 712, "column": 13 } }, "param": { "type": "Identifier", - "start": 24772, - "end": 24773, + "start": 24848, + "end": 24849, "loc": { "start": { - "line": 707, + "line": 710, "column": 21 }, "end": { - "line": 707, + "line": 710, "column": 22 }, "identifierName": "e" @@ -45268,72 +45517,72 @@ }, "body": { "type": "BlockStatement", - "start": 24775, - "end": 24822, + "start": 24851, + "end": 24898, "loc": { "start": { - "line": 707, + "line": 710, "column": 24 }, "end": { - "line": 709, + "line": 712, "column": 13 } }, "body": [ { "type": "ExpressionStatement", - "start": 24793, - "end": 24808, + "start": 24869, + "end": 24884, "loc": { "start": { - "line": 708, + "line": 711, "column": 16 }, "end": { - "line": 708, + "line": 711, "column": 31 } }, "expression": { "type": "CallExpression", - "start": 24793, - "end": 24807, + "start": 24869, + "end": 24883, "loc": { "start": { - "line": 708, + "line": 711, "column": 16 }, "end": { - "line": 708, + "line": 711, "column": 30 } }, "callee": { "type": "MemberExpression", - "start": 24793, - "end": 24804, + "start": 24869, + "end": 24880, "loc": { "start": { - "line": 708, + "line": 711, "column": 16 }, "end": { - "line": 708, + "line": 711, "column": 27 } }, "object": { "type": "Identifier", - "start": 24793, - "end": 24800, + "start": 24869, + "end": 24876, "loc": { "start": { - "line": 708, + "line": 711, "column": 16 }, "end": { - "line": 708, + "line": 711, "column": 23 }, "identifierName": "console" @@ -45342,15 +45591,15 @@ }, "property": { "type": "Identifier", - "start": 24801, - "end": 24804, + "start": 24877, + "end": 24880, "loc": { "start": { - "line": 708, + "line": 711, "column": 24 }, "end": { - "line": 708, + "line": 711, "column": 27 }, "identifierName": "log" @@ -45362,15 +45611,15 @@ "arguments": [ { "type": "Identifier", - "start": 24805, - "end": 24806, + "start": 24881, + "end": 24882, "loc": { "start": { - "line": 708, + "line": 711, "column": 28 }, "end": { - "line": 708, + "line": 711, "column": 29 }, "identifierName": "e" @@ -45403,15 +45652,15 @@ { "type": "CommentBlock", "value": "*\n * Parses primitives referenced by the mesh belonging to the given node, creating XKTMeshes in the XKTModel.\n *\n * @param node glTF node\n * @param ctx Parsing context\n * @param matrix Matrix for the XKTMeshes\n * @param meshIds returns IDs of the new XKTMeshes\n ", - "start": 20157, - "end": 20424, + "start": 20233, + "end": 20500, "loc": { "start": { - "line": 606, + "line": 609, "column": 0 }, "end": { - "line": 613, + "line": 616, "column": 3 } } @@ -45420,15 +45669,15 @@ }, { "type": "ExportNamedDeclaration", - "start": 24842, - "end": 24873, + "start": 24918, + "end": 24949, "loc": { "start": { - "line": 714, + "line": 717, "column": 0 }, "end": { - "line": 714, + "line": 717, "column": 31 } }, @@ -45436,29 +45685,29 @@ "specifiers": [ { "type": "ExportSpecifier", - "start": 24850, - "end": 24871, + "start": 24926, + "end": 24947, "loc": { "start": { - "line": 714, + "line": 717, "column": 8 }, "end": { - "line": 714, + "line": 717, "column": 29 } }, "local": { "type": "Identifier", - "start": 24850, - "end": 24871, + "start": 24926, + "end": 24947, "loc": { "start": { - "line": 714, + "line": 717, "column": 8 }, "end": { - "line": 714, + "line": 717, "column": 29 }, "identifierName": "parseGLTFIntoXKTModel" @@ -45467,15 +45716,15 @@ }, "exported": { "type": "Identifier", - "start": 24850, - "end": 24871, + "start": 24926, + "end": 24947, "loc": { "start": { - "line": 714, + "line": 717, "column": 8 }, "end": { - "line": 714, + "line": 717, "column": 29 }, "identifierName": "parseGLTFIntoXKTModel" @@ -45488,15 +45737,15 @@ }, { "type": "ExportNamedDeclaration", - "start": 24842, - "end": 24873, + "start": 24918, + "end": 24949, "loc": { "start": { - "line": 714, + "line": 717, "column": 0 }, "end": { - "line": 714, + "line": 717, "column": 31 } }, @@ -50478,15 +50727,15 @@ { "type": "CommentBlock", "value": "*\n * Parses primitives referenced by the mesh belonging to the given node, creating XKTMeshes in the XKTModel.\n *\n * @param node glTF node\n * @param ctx Parsing context\n * @param matrix Matrix for the XKTMeshes\n * @param meshIds returns IDs of the new XKTMeshes\n ", - "start": 20157, - "end": 20424, + "start": 20233, + "end": 20500, "loc": { "start": { - "line": 606, + "line": 609, "column": 0 }, "end": { - "line": 613, + "line": 616, "column": 3 } } @@ -50494,15 +50743,15 @@ { "type": "CommentLine", "value": " POINTS", - "start": 21088, - "end": 21097, + "start": 21164, + "end": 21173, "loc": { "start": { - "line": 633, + "line": 636, "column": 32 }, "end": { - "line": 633, + "line": 636, "column": 41 } } @@ -50510,15 +50759,15 @@ { "type": "CommentLine", "value": " LINES", - "start": 21231, - "end": 21239, + "start": 21307, + "end": 21315, "loc": { "start": { - "line": 636, + "line": 639, "column": 32 }, "end": { - "line": 636, + "line": 639, "column": 40 } } @@ -50526,15 +50775,15 @@ { "type": "CommentLine", "value": " LINE_LOOP", - "start": 21372, - "end": 21384, + "start": 21448, + "end": 21460, "loc": { "start": { - "line": 639, + "line": 642, "column": 32 }, "end": { - "line": 639, + "line": 642, "column": 44 } } @@ -50542,15 +50791,15 @@ { "type": "CommentLine", "value": " LINE_STRIP", - "start": 21521, - "end": 21534, + "start": 21597, + "end": 21610, "loc": { "start": { - "line": 642, + "line": 645, "column": 32 }, "end": { - "line": 642, + "line": 645, "column": 45 } } @@ -50558,15 +50807,15 @@ { "type": "CommentLine", "value": " TRIANGLES", - "start": 21672, - "end": 21684, + "start": 21748, + "end": 21760, "loc": { "start": { - "line": 645, + "line": 648, "column": 32 }, "end": { - "line": 645, + "line": 648, "column": 44 } } @@ -50574,15 +50823,15 @@ { "type": "CommentLine", "value": " TRIANGLE_STRIP", - "start": 21821, - "end": 21838, + "start": 21897, + "end": 21914, "loc": { "start": { - "line": 648, + "line": 651, "column": 32 }, "end": { - "line": 648, + "line": 651, "column": 49 } } @@ -50590,15 +50839,15 @@ { "type": "CommentLine", "value": " TRIANGLE_FAN", - "start": 21980, - "end": 21995, + "start": 22056, + "end": 22071, "loc": { "start": { - "line": 651, + "line": 654, "column": 32 }, "end": { - "line": 651, + "line": 654, "column": 47 } } @@ -125668,6 +125917,496 @@ } } }, + { + "type": { + "label": "if", + "keyword": "if", + "beforeExpr": false, + "startsExpr": false, + "rightAssociative": false, + "isLoop": false, + "isAssign": false, + "prefix": false, + "postfix": false, + "binop": null, + "updateContext": null + }, + "value": "if", + "start": 20131, + "end": 20133, + "loc": { + "start": { + "line": 603, + "column": 4 + }, + "end": { + "line": 603, + "column": 6 + } + } + }, + { + "type": { + "label": "(", + "beforeExpr": true, + "startsExpr": true, + "rightAssociative": false, + "isLoop": false, + "isAssign": false, + "prefix": false, + "postfix": false, + "binop": null + }, + "start": 20134, + "end": 20135, + "loc": { + "start": { + "line": 603, + "column": 7 + }, + "end": { + "line": 603, + "column": 8 + } + } + }, + { + "type": { + "label": "name", + "beforeExpr": false, + "startsExpr": true, + "rightAssociative": false, + "isLoop": false, + "isAssign": false, + "prefix": false, + "postfix": false, + "binop": null + }, + "value": "primitive", + "start": 20135, + "end": 20144, + "loc": { + "start": { + "line": 603, + "column": 8 + }, + "end": { + "line": 603, + "column": 17 + } + } + }, + { + "type": { + "label": ".", + "beforeExpr": false, + "startsExpr": false, + "rightAssociative": false, + "isLoop": false, + "isAssign": false, + "prefix": false, + "postfix": false, + "binop": null, + "updateContext": null + }, + "start": 20144, + "end": 20145, + "loc": { + "start": { + "line": 603, + "column": 17 + }, + "end": { + "line": 603, + "column": 18 + } + } + }, + { + "type": { + "label": "name", + "beforeExpr": false, + "startsExpr": true, + "rightAssociative": false, + "isLoop": false, + "isAssign": false, + "prefix": false, + "postfix": false, + "binop": null + }, + "value": "indices", + "start": 20145, + "end": 20152, + "loc": { + "start": { + "line": 603, + "column": 18 + }, + "end": { + "line": 603, + "column": 25 + } + } + }, + { + "type": { + "label": ")", + "beforeExpr": false, + "startsExpr": false, + "rightAssociative": false, + "isLoop": false, + "isAssign": false, + "prefix": false, + "postfix": false, + "binop": null + }, + "start": 20152, + "end": 20153, + "loc": { + "start": { + "line": 603, + "column": 25 + }, + "end": { + "line": 603, + "column": 26 + } + } + }, + { + "type": { + "label": "{", + "beforeExpr": true, + "startsExpr": true, + "rightAssociative": false, + "isLoop": false, + "isAssign": false, + "prefix": false, + "postfix": false, + "binop": null + }, + "start": 20154, + "end": 20155, + "loc": { + "start": { + "line": 603, + "column": 27 + }, + "end": { + "line": 603, + "column": 28 + } + } + }, + { + "type": { + "label": "name", + "beforeExpr": false, + "startsExpr": true, + "rightAssociative": false, + "isLoop": false, + "isAssign": false, + "prefix": false, + "postfix": false, + "binop": null + }, + "value": "hash", + "start": 20164, + "end": 20168, + "loc": { + "start": { + "line": 604, + "column": 8 + }, + "end": { + "line": 604, + "column": 12 + } + } + }, + { + "type": { + "label": ".", + "beforeExpr": false, + "startsExpr": false, + "rightAssociative": false, + "isLoop": false, + "isAssign": false, + "prefix": false, + "postfix": false, + "binop": null, + "updateContext": null + }, + "start": 20168, + "end": 20169, + "loc": { + "start": { + "line": 604, + "column": 12 + }, + "end": { + "line": 604, + "column": 13 + } + } + }, + { + "type": { + "label": "name", + "beforeExpr": false, + "startsExpr": true, + "rightAssociative": false, + "isLoop": false, + "isAssign": false, + "prefix": false, + "postfix": false, + "binop": null + }, + "value": "push", + "start": 20169, + "end": 20173, + "loc": { + "start": { + "line": 604, + "column": 13 + }, + "end": { + "line": 604, + "column": 17 + } + } + }, + { + "type": { + "label": "(", + "beforeExpr": true, + "startsExpr": true, + "rightAssociative": false, + "isLoop": false, + "isAssign": false, + "prefix": false, + "postfix": false, + "binop": null + }, + "start": 20173, + "end": 20174, + "loc": { + "start": { + "line": 604, + "column": 17 + }, + "end": { + "line": 604, + "column": 18 + } + } + }, + { + "type": { + "label": "name", + "beforeExpr": false, + "startsExpr": true, + "rightAssociative": false, + "isLoop": false, + "isAssign": false, + "prefix": false, + "postfix": false, + "binop": null + }, + "value": "primitive", + "start": 20174, + "end": 20183, + "loc": { + "start": { + "line": 604, + "column": 18 + }, + "end": { + "line": 604, + "column": 27 + } + } + }, + { + "type": { + "label": ".", + "beforeExpr": false, + "startsExpr": false, + "rightAssociative": false, + "isLoop": false, + "isAssign": false, + "prefix": false, + "postfix": false, + "binop": null, + "updateContext": null + }, + "start": 20183, + "end": 20184, + "loc": { + "start": { + "line": 604, + "column": 27 + }, + "end": { + "line": 604, + "column": 28 + } + } + }, + { + "type": { + "label": "name", + "beforeExpr": false, + "startsExpr": true, + "rightAssociative": false, + "isLoop": false, + "isAssign": false, + "prefix": false, + "postfix": false, + "binop": null + }, + "value": "indices", + "start": 20184, + "end": 20191, + "loc": { + "start": { + "line": 604, + "column": 28 + }, + "end": { + "line": 604, + "column": 35 + } + } + }, + { + "type": { + "label": ".", + "beforeExpr": false, + "startsExpr": false, + "rightAssociative": false, + "isLoop": false, + "isAssign": false, + "prefix": false, + "postfix": false, + "binop": null, + "updateContext": null + }, + "start": 20191, + "end": 20192, + "loc": { + "start": { + "line": 604, + "column": 35 + }, + "end": { + "line": 604, + "column": 36 + } + } + }, + { + "type": { + "label": "name", + "beforeExpr": false, + "startsExpr": true, + "rightAssociative": false, + "isLoop": false, + "isAssign": false, + "prefix": false, + "postfix": false, + "binop": null + }, + "value": "id", + "start": 20192, + "end": 20194, + "loc": { + "start": { + "line": 604, + "column": 36 + }, + "end": { + "line": 604, + "column": 38 + } + } + }, + { + "type": { + "label": ")", + "beforeExpr": false, + "startsExpr": false, + "rightAssociative": false, + "isLoop": false, + "isAssign": false, + "prefix": false, + "postfix": false, + "binop": null + }, + "start": 20194, + "end": 20195, + "loc": { + "start": { + "line": 604, + "column": 38 + }, + "end": { + "line": 604, + "column": 39 + } + } + }, + { + "type": { + "label": ";", + "beforeExpr": true, + "startsExpr": false, + "rightAssociative": false, + "isLoop": false, + "isAssign": false, + "prefix": false, + "postfix": false, + "binop": null, + "updateContext": null + }, + "start": 20195, + "end": 20196, + "loc": { + "start": { + "line": 604, + "column": 39 + }, + "end": { + "line": 604, + "column": 40 + } + } + }, + { + "type": { + "label": "}", + "beforeExpr": false, + "startsExpr": false, + "rightAssociative": false, + "isLoop": false, + "isAssign": false, + "prefix": false, + "postfix": false, + "binop": null + }, + "start": 20201, + "end": 20202, + "loc": { + "start": { + "line": 605, + "column": 4 + }, + "end": { + "line": 605, + "column": 5 + } + } + }, { "type": { "label": "return", @@ -125683,15 +126422,15 @@ "updateContext": null }, "value": "return", - "start": 20131, - "end": 20137, + "start": 20207, + "end": 20213, "loc": { "start": { - "line": 603, + "line": 606, "column": 4 }, "end": { - "line": 603, + "line": 606, "column": 10 } } @@ -125709,15 +126448,15 @@ "binop": null }, "value": "hash", - "start": 20138, - "end": 20142, + "start": 20214, + "end": 20218, "loc": { "start": { - "line": 603, + "line": 606, "column": 11 }, "end": { - "line": 603, + "line": 606, "column": 15 } } @@ -125735,15 +126474,15 @@ "binop": null, "updateContext": null }, - "start": 20142, - "end": 20143, + "start": 20218, + "end": 20219, "loc": { "start": { - "line": 603, + "line": 606, "column": 15 }, "end": { - "line": 603, + "line": 606, "column": 16 } } @@ -125761,15 +126500,15 @@ "binop": null }, "value": "join", - "start": 20143, - "end": 20147, + "start": 20219, + "end": 20223, "loc": { "start": { - "line": 603, + "line": 606, "column": 16 }, "end": { - "line": 603, + "line": 606, "column": 20 } } @@ -125786,15 +126525,15 @@ "postfix": false, "binop": null }, - "start": 20147, - "end": 20148, + "start": 20223, + "end": 20224, "loc": { "start": { - "line": 603, + "line": 606, "column": 20 }, "end": { - "line": 603, + "line": 606, "column": 21 } } @@ -125813,15 +126552,15 @@ "updateContext": null }, "value": ".", - "start": 20148, - "end": 20151, + "start": 20224, + "end": 20227, "loc": { "start": { - "line": 603, + "line": 606, "column": 21 }, "end": { - "line": 603, + "line": 606, "column": 24 } } @@ -125838,15 +126577,15 @@ "postfix": false, "binop": null }, - "start": 20151, - "end": 20152, + "start": 20227, + "end": 20228, "loc": { "start": { - "line": 603, + "line": 606, "column": 24 }, "end": { - "line": 603, + "line": 606, "column": 25 } } @@ -125864,15 +126603,15 @@ "binop": null, "updateContext": null }, - "start": 20152, - "end": 20153, + "start": 20228, + "end": 20229, "loc": { "start": { - "line": 603, + "line": 606, "column": 25 }, "end": { - "line": 603, + "line": 606, "column": 26 } } @@ -125889,15 +126628,15 @@ "postfix": false, "binop": null }, - "start": 20154, - "end": 20155, + "start": 20230, + "end": 20231, "loc": { "start": { - "line": 604, + "line": 607, "column": 0 }, "end": { - "line": 604, + "line": 607, "column": 1 } } @@ -125905,15 +126644,15 @@ { "type": "CommentBlock", "value": "*\n * Parses primitives referenced by the mesh belonging to the given node, creating XKTMeshes in the XKTModel.\n *\n * @param node glTF node\n * @param ctx Parsing context\n * @param matrix Matrix for the XKTMeshes\n * @param meshIds returns IDs of the new XKTMeshes\n ", - "start": 20157, - "end": 20424, + "start": 20233, + "end": 20500, "loc": { "start": { - "line": 606, + "line": 609, "column": 0 }, "end": { - "line": 613, + "line": 616, "column": 3 } } @@ -125932,15 +126671,15 @@ "binop": null }, "value": "function", - "start": 20425, - "end": 20433, + "start": 20501, + "end": 20509, "loc": { "start": { - "line": 614, + "line": 617, "column": 0 }, "end": { - "line": 614, + "line": 617, "column": 8 } } @@ -125958,15 +126697,15 @@ "binop": null }, "value": "parseNodeMesh", - "start": 20434, - "end": 20447, + "start": 20510, + "end": 20523, "loc": { "start": { - "line": 614, + "line": 617, "column": 9 }, "end": { - "line": 614, + "line": 617, "column": 22 } } @@ -125983,15 +126722,15 @@ "postfix": false, "binop": null }, - "start": 20447, - "end": 20448, + "start": 20523, + "end": 20524, "loc": { "start": { - "line": 614, + "line": 617, "column": 22 }, "end": { - "line": 614, + "line": 617, "column": 23 } } @@ -126009,15 +126748,15 @@ "binop": null }, "value": "node", - "start": 20448, - "end": 20452, + "start": 20524, + "end": 20528, "loc": { "start": { - "line": 614, + "line": 617, "column": 23 }, "end": { - "line": 614, + "line": 617, "column": 27 } } @@ -126035,15 +126774,15 @@ "binop": null, "updateContext": null }, - "start": 20452, - "end": 20453, + "start": 20528, + "end": 20529, "loc": { "start": { - "line": 614, + "line": 617, "column": 27 }, "end": { - "line": 614, + "line": 617, "column": 28 } } @@ -126061,15 +126800,15 @@ "binop": null }, "value": "ctx", - "start": 20454, - "end": 20457, + "start": 20530, + "end": 20533, "loc": { "start": { - "line": 614, + "line": 617, "column": 29 }, "end": { - "line": 614, + "line": 617, "column": 32 } } @@ -126087,15 +126826,15 @@ "binop": null, "updateContext": null }, - "start": 20457, - "end": 20458, + "start": 20533, + "end": 20534, "loc": { "start": { - "line": 614, + "line": 617, "column": 32 }, "end": { - "line": 614, + "line": 617, "column": 33 } } @@ -126113,15 +126852,15 @@ "binop": null }, "value": "matrix", - "start": 20459, - "end": 20465, + "start": 20535, + "end": 20541, "loc": { "start": { - "line": 614, + "line": 617, "column": 34 }, "end": { - "line": 614, + "line": 617, "column": 40 } } @@ -126139,15 +126878,15 @@ "binop": null, "updateContext": null }, - "start": 20465, - "end": 20466, + "start": 20541, + "end": 20542, "loc": { "start": { - "line": 614, + "line": 617, "column": 40 }, "end": { - "line": 614, + "line": 617, "column": 41 } } @@ -126165,15 +126904,15 @@ "binop": null }, "value": "meshIds", - "start": 20467, - "end": 20474, + "start": 20543, + "end": 20550, "loc": { "start": { - "line": 614, + "line": 617, "column": 42 }, "end": { - "line": 614, + "line": 617, "column": 49 } } @@ -126190,15 +126929,15 @@ "postfix": false, "binop": null }, - "start": 20474, - "end": 20475, + "start": 20550, + "end": 20551, "loc": { "start": { - "line": 614, + "line": 617, "column": 49 }, "end": { - "line": 614, + "line": 617, "column": 50 } } @@ -126215,15 +126954,15 @@ "postfix": false, "binop": null }, - "start": 20476, - "end": 20477, + "start": 20552, + "end": 20553, "loc": { "start": { - "line": 614, + "line": 617, "column": 51 }, "end": { - "line": 614, + "line": 617, "column": 52 } } @@ -126243,15 +126982,15 @@ "updateContext": null }, "value": "if", - "start": 20482, - "end": 20484, + "start": 20558, + "end": 20560, "loc": { "start": { - "line": 615, + "line": 618, "column": 4 }, "end": { - "line": 615, + "line": 618, "column": 6 } } @@ -126268,15 +127007,15 @@ "postfix": false, "binop": null }, - "start": 20485, - "end": 20486, + "start": 20561, + "end": 20562, "loc": { "start": { - "line": 615, + "line": 618, "column": 7 }, "end": { - "line": 615, + "line": 618, "column": 8 } } @@ -126295,15 +127034,15 @@ "updateContext": null }, "value": "!", - "start": 20486, - "end": 20487, + "start": 20562, + "end": 20563, "loc": { "start": { - "line": 615, + "line": 618, "column": 8 }, "end": { - "line": 615, + "line": 618, "column": 9 } } @@ -126321,15 +127060,15 @@ "binop": null }, "value": "node", - "start": 20487, - "end": 20491, + "start": 20563, + "end": 20567, "loc": { "start": { - "line": 615, + "line": 618, "column": 9 }, "end": { - "line": 615, + "line": 618, "column": 13 } } @@ -126346,15 +127085,15 @@ "postfix": false, "binop": null }, - "start": 20491, - "end": 20492, + "start": 20567, + "end": 20568, "loc": { "start": { - "line": 615, + "line": 618, "column": 13 }, "end": { - "line": 615, + "line": 618, "column": 14 } } @@ -126371,15 +127110,15 @@ "postfix": false, "binop": null }, - "start": 20493, - "end": 20494, + "start": 20569, + "end": 20570, "loc": { "start": { - "line": 615, + "line": 618, "column": 15 }, "end": { - "line": 615, + "line": 618, "column": 16 } } @@ -126399,15 +127138,15 @@ "updateContext": null }, "value": "return", - "start": 20503, - "end": 20509, + "start": 20579, + "end": 20585, "loc": { "start": { - "line": 616, + "line": 619, "column": 8 }, "end": { - "line": 616, + "line": 619, "column": 14 } } @@ -126425,15 +127164,15 @@ "binop": null, "updateContext": null }, - "start": 20509, - "end": 20510, + "start": 20585, + "end": 20586, "loc": { "start": { - "line": 616, + "line": 619, "column": 14 }, "end": { - "line": 616, + "line": 619, "column": 15 } } @@ -126450,15 +127189,15 @@ "postfix": false, "binop": null }, - "start": 20515, - "end": 20516, + "start": 20591, + "end": 20592, "loc": { "start": { - "line": 617, + "line": 620, "column": 4 }, "end": { - "line": 617, + "line": 620, "column": 5 } } @@ -126478,15 +127217,15 @@ "updateContext": null }, "value": "const", - "start": 20521, - "end": 20526, + "start": 20597, + "end": 20602, "loc": { "start": { - "line": 618, + "line": 621, "column": 4 }, "end": { - "line": 618, + "line": 621, "column": 9 } } @@ -126504,15 +127243,15 @@ "binop": null }, "value": "mesh", - "start": 20527, - "end": 20531, + "start": 20603, + "end": 20607, "loc": { "start": { - "line": 618, + "line": 621, "column": 10 }, "end": { - "line": 618, + "line": 621, "column": 14 } } @@ -126531,15 +127270,15 @@ "updateContext": null }, "value": "=", - "start": 20532, - "end": 20533, + "start": 20608, + "end": 20609, "loc": { "start": { - "line": 618, + "line": 621, "column": 15 }, "end": { - "line": 618, + "line": 621, "column": 16 } } @@ -126557,15 +127296,15 @@ "binop": null }, "value": "node", - "start": 20534, - "end": 20538, + "start": 20610, + "end": 20614, "loc": { "start": { - "line": 618, + "line": 621, "column": 17 }, "end": { - "line": 618, + "line": 621, "column": 21 } } @@ -126583,15 +127322,15 @@ "binop": null, "updateContext": null }, - "start": 20538, - "end": 20539, + "start": 20614, + "end": 20615, "loc": { "start": { - "line": 618, + "line": 621, "column": 21 }, "end": { - "line": 618, + "line": 621, "column": 22 } } @@ -126609,15 +127348,15 @@ "binop": null }, "value": "mesh", - "start": 20539, - "end": 20543, + "start": 20615, + "end": 20619, "loc": { "start": { - "line": 618, + "line": 621, "column": 22 }, "end": { - "line": 618, + "line": 621, "column": 26 } } @@ -126635,15 +127374,15 @@ "binop": null, "updateContext": null }, - "start": 20543, - "end": 20544, + "start": 20619, + "end": 20620, "loc": { "start": { - "line": 618, + "line": 621, "column": 26 }, "end": { - "line": 618, + "line": 621, "column": 27 } } @@ -126663,15 +127402,15 @@ "updateContext": null }, "value": "if", - "start": 20549, - "end": 20551, + "start": 20625, + "end": 20627, "loc": { "start": { - "line": 619, + "line": 622, "column": 4 }, "end": { - "line": 619, + "line": 622, "column": 6 } } @@ -126688,15 +127427,15 @@ "postfix": false, "binop": null }, - "start": 20552, - "end": 20553, + "start": 20628, + "end": 20629, "loc": { "start": { - "line": 619, + "line": 622, "column": 7 }, "end": { - "line": 619, + "line": 622, "column": 8 } } @@ -126715,15 +127454,15 @@ "updateContext": null }, "value": "!", - "start": 20553, - "end": 20554, + "start": 20629, + "end": 20630, "loc": { "start": { - "line": 619, + "line": 622, "column": 8 }, "end": { - "line": 619, + "line": 622, "column": 9 } } @@ -126741,15 +127480,15 @@ "binop": null }, "value": "mesh", - "start": 20554, - "end": 20558, + "start": 20630, + "end": 20634, "loc": { "start": { - "line": 619, + "line": 622, "column": 9 }, "end": { - "line": 619, + "line": 622, "column": 13 } } @@ -126766,15 +127505,15 @@ "postfix": false, "binop": null }, - "start": 20558, - "end": 20559, + "start": 20634, + "end": 20635, "loc": { "start": { - "line": 619, + "line": 622, "column": 13 }, "end": { - "line": 619, + "line": 622, "column": 14 } } @@ -126791,15 +127530,15 @@ "postfix": false, "binop": null }, - "start": 20560, - "end": 20561, + "start": 20636, + "end": 20637, "loc": { "start": { - "line": 619, + "line": 622, "column": 15 }, "end": { - "line": 619, + "line": 622, "column": 16 } } @@ -126819,15 +127558,15 @@ "updateContext": null }, "value": "return", - "start": 20570, - "end": 20576, + "start": 20646, + "end": 20652, "loc": { "start": { - "line": 620, + "line": 623, "column": 8 }, "end": { - "line": 620, + "line": 623, "column": 14 } } @@ -126845,15 +127584,15 @@ "binop": null, "updateContext": null }, - "start": 20576, - "end": 20577, + "start": 20652, + "end": 20653, "loc": { "start": { - "line": 620, + "line": 623, "column": 14 }, "end": { - "line": 620, + "line": 623, "column": 15 } } @@ -126870,15 +127609,15 @@ "postfix": false, "binop": null }, - "start": 20582, - "end": 20583, + "start": 20658, + "end": 20659, "loc": { "start": { - "line": 621, + "line": 624, "column": 4 }, "end": { - "line": 621, + "line": 624, "column": 5 } } @@ -126898,15 +127637,15 @@ "updateContext": null }, "value": "const", - "start": 20588, - "end": 20593, + "start": 20664, + "end": 20669, "loc": { "start": { - "line": 622, + "line": 625, "column": 4 }, "end": { - "line": 622, + "line": 625, "column": 9 } } @@ -126924,15 +127663,15 @@ "binop": null }, "value": "numPrimitives", - "start": 20594, - "end": 20607, + "start": 20670, + "end": 20683, "loc": { "start": { - "line": 622, + "line": 625, "column": 10 }, "end": { - "line": 622, + "line": 625, "column": 23 } } @@ -126951,15 +127690,15 @@ "updateContext": null }, "value": "=", - "start": 20608, - "end": 20609, + "start": 20684, + "end": 20685, "loc": { "start": { - "line": 622, + "line": 625, "column": 24 }, "end": { - "line": 622, + "line": 625, "column": 25 } } @@ -126977,15 +127716,15 @@ "binop": null }, "value": "mesh", - "start": 20610, - "end": 20614, + "start": 20686, + "end": 20690, "loc": { "start": { - "line": 622, + "line": 625, "column": 26 }, "end": { - "line": 622, + "line": 625, "column": 30 } } @@ -127003,15 +127742,15 @@ "binop": null, "updateContext": null }, - "start": 20614, - "end": 20615, + "start": 20690, + "end": 20691, "loc": { "start": { - "line": 622, + "line": 625, "column": 30 }, "end": { - "line": 622, + "line": 625, "column": 31 } } @@ -127029,15 +127768,15 @@ "binop": null }, "value": "primitives", - "start": 20615, - "end": 20625, + "start": 20691, + "end": 20701, "loc": { "start": { - "line": 622, + "line": 625, "column": 31 }, "end": { - "line": 622, + "line": 625, "column": 41 } } @@ -127055,15 +127794,15 @@ "binop": null, "updateContext": null }, - "start": 20625, - "end": 20626, + "start": 20701, + "end": 20702, "loc": { "start": { - "line": 622, + "line": 625, "column": 41 }, "end": { - "line": 622, + "line": 625, "column": 42 } } @@ -127081,15 +127820,15 @@ "binop": null }, "value": "length", - "start": 20626, - "end": 20632, + "start": 20702, + "end": 20708, "loc": { "start": { - "line": 622, + "line": 625, "column": 42 }, "end": { - "line": 622, + "line": 625, "column": 48 } } @@ -127107,15 +127846,15 @@ "binop": null, "updateContext": null }, - "start": 20632, - "end": 20633, + "start": 20708, + "end": 20709, "loc": { "start": { - "line": 622, + "line": 625, "column": 48 }, "end": { - "line": 622, + "line": 625, "column": 49 } } @@ -127135,15 +127874,15 @@ "updateContext": null }, "value": "if", - "start": 20638, - "end": 20640, + "start": 20714, + "end": 20716, "loc": { "start": { - "line": 623, + "line": 626, "column": 4 }, "end": { - "line": 623, + "line": 626, "column": 6 } } @@ -127160,15 +127899,15 @@ "postfix": false, "binop": null }, - "start": 20641, - "end": 20642, + "start": 20717, + "end": 20718, "loc": { "start": { - "line": 623, + "line": 626, "column": 7 }, "end": { - "line": 623, + "line": 626, "column": 8 } } @@ -127186,15 +127925,15 @@ "binop": null }, "value": "numPrimitives", - "start": 20642, - "end": 20655, + "start": 20718, + "end": 20731, "loc": { "start": { - "line": 623, + "line": 626, "column": 8 }, "end": { - "line": 623, + "line": 626, "column": 21 } } @@ -127213,15 +127952,15 @@ "updateContext": null }, "value": ">", - "start": 20656, - "end": 20657, + "start": 20732, + "end": 20733, "loc": { "start": { - "line": 623, + "line": 626, "column": 22 }, "end": { - "line": 623, + "line": 626, "column": 23 } } @@ -127240,15 +127979,15 @@ "updateContext": null }, "value": 0, - "start": 20658, - "end": 20659, + "start": 20734, + "end": 20735, "loc": { "start": { - "line": 623, + "line": 626, "column": 24 }, "end": { - "line": 623, + "line": 626, "column": 25 } } @@ -127265,15 +128004,15 @@ "postfix": false, "binop": null }, - "start": 20659, - "end": 20660, + "start": 20735, + "end": 20736, "loc": { "start": { - "line": 623, + "line": 626, "column": 25 }, "end": { - "line": 623, + "line": 626, "column": 26 } } @@ -127290,15 +128029,15 @@ "postfix": false, "binop": null }, - "start": 20661, - "end": 20662, + "start": 20737, + "end": 20738, "loc": { "start": { - "line": 623, + "line": 626, "column": 27 }, "end": { - "line": 623, + "line": 626, "column": 28 } } @@ -127318,15 +128057,15 @@ "updateContext": null }, "value": "for", - "start": 20671, - "end": 20674, + "start": 20747, + "end": 20750, "loc": { "start": { - "line": 624, + "line": 627, "column": 8 }, "end": { - "line": 624, + "line": 627, "column": 11 } } @@ -127343,15 +128082,15 @@ "postfix": false, "binop": null }, - "start": 20675, - "end": 20676, + "start": 20751, + "end": 20752, "loc": { "start": { - "line": 624, + "line": 627, "column": 12 }, "end": { - "line": 624, + "line": 627, "column": 13 } } @@ -127371,15 +128110,15 @@ "updateContext": null }, "value": "let", - "start": 20676, - "end": 20679, + "start": 20752, + "end": 20755, "loc": { "start": { - "line": 624, + "line": 627, "column": 13 }, "end": { - "line": 624, + "line": 627, "column": 16 } } @@ -127397,15 +128136,15 @@ "binop": null }, "value": "i", - "start": 20680, - "end": 20681, + "start": 20756, + "end": 20757, "loc": { "start": { - "line": 624, + "line": 627, "column": 17 }, "end": { - "line": 624, + "line": 627, "column": 18 } } @@ -127424,15 +128163,15 @@ "updateContext": null }, "value": "=", - "start": 20682, - "end": 20683, + "start": 20758, + "end": 20759, "loc": { "start": { - "line": 624, + "line": 627, "column": 19 }, "end": { - "line": 624, + "line": 627, "column": 20 } } @@ -127451,15 +128190,15 @@ "updateContext": null }, "value": 0, - "start": 20684, - "end": 20685, + "start": 20760, + "end": 20761, "loc": { "start": { - "line": 624, + "line": 627, "column": 21 }, "end": { - "line": 624, + "line": 627, "column": 22 } } @@ -127477,15 +128216,15 @@ "binop": null, "updateContext": null }, - "start": 20685, - "end": 20686, + "start": 20761, + "end": 20762, "loc": { "start": { - "line": 624, + "line": 627, "column": 22 }, "end": { - "line": 624, + "line": 627, "column": 23 } } @@ -127503,15 +128242,15 @@ "binop": null }, "value": "i", - "start": 20687, - "end": 20688, + "start": 20763, + "end": 20764, "loc": { "start": { - "line": 624, + "line": 627, "column": 24 }, "end": { - "line": 624, + "line": 627, "column": 25 } } @@ -127530,15 +128269,15 @@ "updateContext": null }, "value": "<", - "start": 20689, - "end": 20690, + "start": 20765, + "end": 20766, "loc": { "start": { - "line": 624, + "line": 627, "column": 26 }, "end": { - "line": 624, + "line": 627, "column": 27 } } @@ -127556,15 +128295,15 @@ "binop": null }, "value": "numPrimitives", - "start": 20691, - "end": 20704, + "start": 20767, + "end": 20780, "loc": { "start": { - "line": 624, + "line": 627, "column": 28 }, "end": { - "line": 624, + "line": 627, "column": 41 } } @@ -127582,15 +128321,15 @@ "binop": null, "updateContext": null }, - "start": 20704, - "end": 20705, + "start": 20780, + "end": 20781, "loc": { "start": { - "line": 624, + "line": 627, "column": 41 }, "end": { - "line": 624, + "line": 627, "column": 42 } } @@ -127608,15 +128347,15 @@ "binop": null }, "value": "i", - "start": 20706, - "end": 20707, + "start": 20782, + "end": 20783, "loc": { "start": { - "line": 624, + "line": 627, "column": 43 }, "end": { - "line": 624, + "line": 627, "column": 44 } } @@ -127634,15 +128373,15 @@ "binop": null }, "value": "++", - "start": 20707, - "end": 20709, + "start": 20783, + "end": 20785, "loc": { "start": { - "line": 624, + "line": 627, "column": 44 }, "end": { - "line": 624, + "line": 627, "column": 46 } } @@ -127659,15 +128398,15 @@ "postfix": false, "binop": null }, - "start": 20709, - "end": 20710, + "start": 20785, + "end": 20786, "loc": { "start": { - "line": 624, + "line": 627, "column": 46 }, "end": { - "line": 624, + "line": 627, "column": 47 } } @@ -127684,15 +128423,15 @@ "postfix": false, "binop": null }, - "start": 20711, - "end": 20712, + "start": 20787, + "end": 20788, "loc": { "start": { - "line": 624, + "line": 627, "column": 48 }, "end": { - "line": 624, + "line": 627, "column": 49 } } @@ -127712,15 +128451,15 @@ "updateContext": null }, "value": "try", - "start": 20725, - "end": 20728, + "start": 20801, + "end": 20804, "loc": { "start": { - "line": 625, + "line": 628, "column": 12 }, "end": { - "line": 625, + "line": 628, "column": 15 } } @@ -127737,15 +128476,15 @@ "postfix": false, "binop": null }, - "start": 20729, - "end": 20730, + "start": 20805, + "end": 20806, "loc": { "start": { - "line": 625, + "line": 628, "column": 16 }, "end": { - "line": 625, + "line": 628, "column": 17 } } @@ -127765,15 +128504,15 @@ "updateContext": null }, "value": "const", - "start": 20747, - "end": 20752, + "start": 20823, + "end": 20828, "loc": { "start": { - "line": 626, + "line": 629, "column": 16 }, "end": { - "line": 626, + "line": 629, "column": 21 } } @@ -127791,15 +128530,15 @@ "binop": null }, "value": "primitive", - "start": 20753, - "end": 20762, + "start": 20829, + "end": 20838, "loc": { "start": { - "line": 626, + "line": 629, "column": 22 }, "end": { - "line": 626, + "line": 629, "column": 31 } } @@ -127818,15 +128557,15 @@ "updateContext": null }, "value": "=", - "start": 20763, - "end": 20764, + "start": 20839, + "end": 20840, "loc": { "start": { - "line": 626, + "line": 629, "column": 32 }, "end": { - "line": 626, + "line": 629, "column": 33 } } @@ -127844,15 +128583,15 @@ "binop": null }, "value": "mesh", - "start": 20765, - "end": 20769, + "start": 20841, + "end": 20845, "loc": { "start": { - "line": 626, + "line": 629, "column": 34 }, "end": { - "line": 626, + "line": 629, "column": 38 } } @@ -127870,15 +128609,15 @@ "binop": null, "updateContext": null }, - "start": 20769, - "end": 20770, + "start": 20845, + "end": 20846, "loc": { "start": { - "line": 626, + "line": 629, "column": 38 }, "end": { - "line": 626, + "line": 629, "column": 39 } } @@ -127896,15 +128635,15 @@ "binop": null }, "value": "primitives", - "start": 20770, - "end": 20780, + "start": 20846, + "end": 20856, "loc": { "start": { - "line": 626, + "line": 629, "column": 39 }, "end": { - "line": 626, + "line": 629, "column": 49 } } @@ -127922,15 +128661,15 @@ "binop": null, "updateContext": null }, - "start": 20780, - "end": 20781, + "start": 20856, + "end": 20857, "loc": { "start": { - "line": 626, + "line": 629, "column": 49 }, "end": { - "line": 626, + "line": 629, "column": 50 } } @@ -127948,15 +128687,15 @@ "binop": null }, "value": "i", - "start": 20781, - "end": 20782, + "start": 20857, + "end": 20858, "loc": { "start": { - "line": 626, + "line": 629, "column": 50 }, "end": { - "line": 626, + "line": 629, "column": 51 } } @@ -127974,15 +128713,15 @@ "binop": null, "updateContext": null }, - "start": 20782, - "end": 20783, + "start": 20858, + "end": 20859, "loc": { "start": { - "line": 626, + "line": 629, "column": 51 }, "end": { - "line": 626, + "line": 629, "column": 52 } } @@ -128000,15 +128739,15 @@ "binop": null, "updateContext": null }, - "start": 20783, - "end": 20784, + "start": 20859, + "end": 20860, "loc": { "start": { - "line": 626, + "line": 629, "column": 52 }, "end": { - "line": 626, + "line": 629, "column": 53 } } @@ -128028,15 +128767,15 @@ "updateContext": null }, "value": "const", - "start": 20801, - "end": 20806, + "start": 20877, + "end": 20882, "loc": { "start": { - "line": 627, + "line": 630, "column": 16 }, "end": { - "line": 627, + "line": 630, "column": 21 } } @@ -128054,15 +128793,15 @@ "binop": null }, "value": "geometryId", - "start": 20807, - "end": 20817, + "start": 20883, + "end": 20893, "loc": { "start": { - "line": 627, + "line": 630, "column": 22 }, "end": { - "line": 627, + "line": 630, "column": 32 } } @@ -128081,15 +128820,15 @@ "updateContext": null }, "value": "=", - "start": 20818, - "end": 20819, + "start": 20894, + "end": 20895, "loc": { "start": { - "line": 627, + "line": 630, "column": 33 }, "end": { - "line": 627, + "line": 630, "column": 34 } } @@ -128107,15 +128846,15 @@ "binop": null }, "value": "createPrimitiveHash", - "start": 20820, - "end": 20839, + "start": 20896, + "end": 20915, "loc": { "start": { - "line": 627, + "line": 630, "column": 35 }, "end": { - "line": 627, + "line": 630, "column": 54 } } @@ -128132,15 +128871,15 @@ "postfix": false, "binop": null }, - "start": 20839, - "end": 20840, + "start": 20915, + "end": 20916, "loc": { "start": { - "line": 627, + "line": 630, "column": 54 }, "end": { - "line": 627, + "line": 630, "column": 55 } } @@ -128158,15 +128897,15 @@ "binop": null }, "value": "primitive", - "start": 20840, - "end": 20849, + "start": 20916, + "end": 20925, "loc": { "start": { - "line": 627, + "line": 630, "column": 55 }, "end": { - "line": 627, + "line": 630, "column": 64 } } @@ -128183,15 +128922,15 @@ "postfix": false, "binop": null }, - "start": 20849, - "end": 20850, + "start": 20925, + "end": 20926, "loc": { "start": { - "line": 627, + "line": 630, "column": 64 }, "end": { - "line": 627, + "line": 630, "column": 65 } } @@ -128209,15 +128948,15 @@ "binop": null, "updateContext": null }, - "start": 20850, - "end": 20851, + "start": 20926, + "end": 20927, "loc": { "start": { - "line": 627, + "line": 630, "column": 65 }, "end": { - "line": 627, + "line": 630, "column": 66 } } @@ -128237,15 +128976,15 @@ "updateContext": null }, "value": "if", - "start": 20868, - "end": 20870, + "start": 20944, + "end": 20946, "loc": { "start": { - "line": 628, + "line": 631, "column": 16 }, "end": { - "line": 628, + "line": 631, "column": 18 } } @@ -128262,15 +129001,15 @@ "postfix": false, "binop": null }, - "start": 20871, - "end": 20872, + "start": 20947, + "end": 20948, "loc": { "start": { - "line": 628, + "line": 631, "column": 19 }, "end": { - "line": 628, + "line": 631, "column": 20 } } @@ -128289,15 +129028,15 @@ "updateContext": null }, "value": "!", - "start": 20872, - "end": 20873, + "start": 20948, + "end": 20949, "loc": { "start": { - "line": 628, + "line": 631, "column": 20 }, "end": { - "line": 628, + "line": 631, "column": 21 } } @@ -128315,15 +129054,15 @@ "binop": null }, "value": "ctx", - "start": 20873, - "end": 20876, + "start": 20949, + "end": 20952, "loc": { "start": { - "line": 628, + "line": 631, "column": 21 }, "end": { - "line": 628, + "line": 631, "column": 24 } } @@ -128341,15 +129080,15 @@ "binop": null, "updateContext": null }, - "start": 20876, - "end": 20877, + "start": 20952, + "end": 20953, "loc": { "start": { - "line": 628, + "line": 631, "column": 24 }, "end": { - "line": 628, + "line": 631, "column": 25 } } @@ -128367,15 +129106,15 @@ "binop": null }, "value": "geometriesCreated", - "start": 20877, - "end": 20894, + "start": 20953, + "end": 20970, "loc": { "start": { - "line": 628, + "line": 631, "column": 25 }, "end": { - "line": 628, + "line": 631, "column": 42 } } @@ -128393,15 +129132,15 @@ "binop": null, "updateContext": null }, - "start": 20894, - "end": 20895, + "start": 20970, + "end": 20971, "loc": { "start": { - "line": 628, + "line": 631, "column": 42 }, "end": { - "line": 628, + "line": 631, "column": 43 } } @@ -128419,15 +129158,15 @@ "binop": null }, "value": "geometryId", - "start": 20895, - "end": 20905, + "start": 20971, + "end": 20981, "loc": { "start": { - "line": 628, + "line": 631, "column": 43 }, "end": { - "line": 628, + "line": 631, "column": 53 } } @@ -128445,15 +129184,15 @@ "binop": null, "updateContext": null }, - "start": 20905, - "end": 20906, + "start": 20981, + "end": 20982, "loc": { "start": { - "line": 628, + "line": 631, "column": 53 }, "end": { - "line": 628, + "line": 631, "column": 54 } } @@ -128470,15 +129209,15 @@ "postfix": false, "binop": null }, - "start": 20906, - "end": 20907, + "start": 20982, + "end": 20983, "loc": { "start": { - "line": 628, + "line": 631, "column": 54 }, "end": { - "line": 628, + "line": 631, "column": 55 } } @@ -128495,15 +129234,15 @@ "postfix": false, "binop": null }, - "start": 20908, - "end": 20909, + "start": 20984, + "end": 20985, "loc": { "start": { - "line": 628, + "line": 631, "column": 56 }, "end": { - "line": 628, + "line": 631, "column": 57 } } @@ -128523,15 +129262,15 @@ "updateContext": null }, "value": "const", - "start": 20930, - "end": 20935, + "start": 21006, + "end": 21011, "loc": { "start": { - "line": 629, + "line": 632, "column": 20 }, "end": { - "line": 629, + "line": 632, "column": 25 } } @@ -128549,15 +129288,15 @@ "binop": null }, "value": "geometryCfg", - "start": 20936, - "end": 20947, + "start": 21012, + "end": 21023, "loc": { "start": { - "line": 629, + "line": 632, "column": 26 }, "end": { - "line": 629, + "line": 632, "column": 37 } } @@ -128576,15 +129315,15 @@ "updateContext": null }, "value": "=", - "start": 20948, - "end": 20949, + "start": 21024, + "end": 21025, "loc": { "start": { - "line": 629, + "line": 632, "column": 38 }, "end": { - "line": 629, + "line": 632, "column": 39 } } @@ -128601,15 +129340,15 @@ "postfix": false, "binop": null }, - "start": 20950, - "end": 20951, + "start": 21026, + "end": 21027, "loc": { "start": { - "line": 629, + "line": 632, "column": 40 }, "end": { - "line": 629, + "line": 632, "column": 41 } } @@ -128627,15 +129366,15 @@ "binop": null }, "value": "geometryId", - "start": 20976, - "end": 20986, + "start": 21052, + "end": 21062, "loc": { "start": { - "line": 630, + "line": 633, "column": 24 }, "end": { - "line": 630, + "line": 633, "column": 34 } } @@ -128652,15 +129391,15 @@ "postfix": false, "binop": null }, - "start": 21007, - "end": 21008, + "start": 21083, + "end": 21084, "loc": { "start": { - "line": 631, + "line": 634, "column": 20 }, "end": { - "line": 631, + "line": 634, "column": 21 } } @@ -128678,15 +129417,15 @@ "binop": null, "updateContext": null }, - "start": 21008, - "end": 21009, + "start": 21084, + "end": 21085, "loc": { "start": { - "line": 631, + "line": 634, "column": 21 }, "end": { - "line": 631, + "line": 634, "column": 22 } } @@ -128706,15 +129445,15 @@ "updateContext": null }, "value": "switch", - "start": 21030, - "end": 21036, + "start": 21106, + "end": 21112, "loc": { "start": { - "line": 632, + "line": 635, "column": 20 }, "end": { - "line": 632, + "line": 635, "column": 26 } } @@ -128731,15 +129470,15 @@ "postfix": false, "binop": null }, - "start": 21037, - "end": 21038, + "start": 21113, + "end": 21114, "loc": { "start": { - "line": 632, + "line": 635, "column": 27 }, "end": { - "line": 632, + "line": 635, "column": 28 } } @@ -128757,15 +129496,15 @@ "binop": null }, "value": "primitive", - "start": 21038, - "end": 21047, + "start": 21114, + "end": 21123, "loc": { "start": { - "line": 632, + "line": 635, "column": 28 }, "end": { - "line": 632, + "line": 635, "column": 37 } } @@ -128783,15 +129522,15 @@ "binop": null, "updateContext": null }, - "start": 21047, - "end": 21048, + "start": 21123, + "end": 21124, "loc": { "start": { - "line": 632, + "line": 635, "column": 37 }, "end": { - "line": 632, + "line": 635, "column": 38 } } @@ -128809,15 +129548,15 @@ "binop": null }, "value": "mode", - "start": 21048, - "end": 21052, + "start": 21124, + "end": 21128, "loc": { "start": { - "line": 632, + "line": 635, "column": 38 }, "end": { - "line": 632, + "line": 635, "column": 42 } } @@ -128834,15 +129573,15 @@ "postfix": false, "binop": null }, - "start": 21052, - "end": 21053, + "start": 21128, + "end": 21129, "loc": { "start": { - "line": 632, + "line": 635, "column": 42 }, "end": { - "line": 632, + "line": 635, "column": 43 } } @@ -128859,15 +129598,15 @@ "postfix": false, "binop": null }, - "start": 21054, - "end": 21055, + "start": 21130, + "end": 21131, "loc": { "start": { - "line": 632, + "line": 635, "column": 44 }, "end": { - "line": 632, + "line": 635, "column": 45 } } @@ -128887,15 +129626,15 @@ "updateContext": null }, "value": "case", - "start": 21080, - "end": 21084, + "start": 21156, + "end": 21160, "loc": { "start": { - "line": 633, + "line": 636, "column": 24 }, "end": { - "line": 633, + "line": 636, "column": 28 } } @@ -128914,15 +129653,15 @@ "updateContext": null }, "value": 0, - "start": 21085, - "end": 21086, + "start": 21161, + "end": 21162, "loc": { "start": { - "line": 633, + "line": 636, "column": 29 }, "end": { - "line": 633, + "line": 636, "column": 30 } } @@ -128940,15 +129679,15 @@ "binop": null, "updateContext": null }, - "start": 21086, - "end": 21087, + "start": 21162, + "end": 21163, "loc": { "start": { - "line": 633, + "line": 636, "column": 30 }, "end": { - "line": 633, + "line": 636, "column": 31 } } @@ -128956,15 +129695,15 @@ { "type": "CommentLine", "value": " POINTS", - "start": 21088, - "end": 21097, + "start": 21164, + "end": 21173, "loc": { "start": { - "line": 633, + "line": 636, "column": 32 }, "end": { - "line": 633, + "line": 636, "column": 41 } } @@ -128982,15 +129721,15 @@ "binop": null }, "value": "geometryCfg", - "start": 21126, - "end": 21137, + "start": 21202, + "end": 21213, "loc": { "start": { - "line": 634, + "line": 637, "column": 28 }, "end": { - "line": 634, + "line": 637, "column": 39 } } @@ -129008,15 +129747,15 @@ "binop": null, "updateContext": null }, - "start": 21137, - "end": 21138, + "start": 21213, + "end": 21214, "loc": { "start": { - "line": 634, + "line": 637, "column": 39 }, "end": { - "line": 634, + "line": 637, "column": 40 } } @@ -129034,15 +129773,15 @@ "binop": null }, "value": "primitiveType", - "start": 21138, - "end": 21151, + "start": 21214, + "end": 21227, "loc": { "start": { - "line": 634, + "line": 637, "column": 40 }, "end": { - "line": 634, + "line": 637, "column": 53 } } @@ -129061,15 +129800,15 @@ "updateContext": null }, "value": "=", - "start": 21152, - "end": 21153, + "start": 21228, + "end": 21229, "loc": { "start": { - "line": 634, + "line": 637, "column": 54 }, "end": { - "line": 634, + "line": 637, "column": 55 } } @@ -129088,15 +129827,15 @@ "updateContext": null }, "value": "points", - "start": 21154, - "end": 21162, + "start": 21230, + "end": 21238, "loc": { "start": { - "line": 634, + "line": 637, "column": 56 }, "end": { - "line": 634, + "line": 637, "column": 64 } } @@ -129114,15 +129853,15 @@ "binop": null, "updateContext": null }, - "start": 21162, - "end": 21163, + "start": 21238, + "end": 21239, "loc": { "start": { - "line": 634, + "line": 637, "column": 64 }, "end": { - "line": 634, + "line": 637, "column": 65 } } @@ -129142,15 +129881,15 @@ "updateContext": null }, "value": "break", - "start": 21192, - "end": 21197, + "start": 21268, + "end": 21273, "loc": { "start": { - "line": 635, + "line": 638, "column": 28 }, "end": { - "line": 635, + "line": 638, "column": 33 } } @@ -129168,15 +129907,15 @@ "binop": null, "updateContext": null }, - "start": 21197, - "end": 21198, + "start": 21273, + "end": 21274, "loc": { "start": { - "line": 635, + "line": 638, "column": 33 }, "end": { - "line": 635, + "line": 638, "column": 34 } } @@ -129196,15 +129935,15 @@ "updateContext": null }, "value": "case", - "start": 21223, - "end": 21227, + "start": 21299, + "end": 21303, "loc": { "start": { - "line": 636, + "line": 639, "column": 24 }, "end": { - "line": 636, + "line": 639, "column": 28 } } @@ -129223,15 +129962,15 @@ "updateContext": null }, "value": 1, - "start": 21228, - "end": 21229, + "start": 21304, + "end": 21305, "loc": { "start": { - "line": 636, + "line": 639, "column": 29 }, "end": { - "line": 636, + "line": 639, "column": 30 } } @@ -129249,15 +129988,15 @@ "binop": null, "updateContext": null }, - "start": 21229, - "end": 21230, + "start": 21305, + "end": 21306, "loc": { "start": { - "line": 636, + "line": 639, "column": 30 }, "end": { - "line": 636, + "line": 639, "column": 31 } } @@ -129265,15 +130004,15 @@ { "type": "CommentLine", "value": " LINES", - "start": 21231, - "end": 21239, + "start": 21307, + "end": 21315, "loc": { "start": { - "line": 636, + "line": 639, "column": 32 }, "end": { - "line": 636, + "line": 639, "column": 40 } } @@ -129291,15 +130030,15 @@ "binop": null }, "value": "geometryCfg", - "start": 21268, - "end": 21279, + "start": 21344, + "end": 21355, "loc": { "start": { - "line": 637, + "line": 640, "column": 28 }, "end": { - "line": 637, + "line": 640, "column": 39 } } @@ -129317,15 +130056,15 @@ "binop": null, "updateContext": null }, - "start": 21279, - "end": 21280, + "start": 21355, + "end": 21356, "loc": { "start": { - "line": 637, + "line": 640, "column": 39 }, "end": { - "line": 637, + "line": 640, "column": 40 } } @@ -129343,15 +130082,15 @@ "binop": null }, "value": "primitiveType", - "start": 21280, - "end": 21293, + "start": 21356, + "end": 21369, "loc": { "start": { - "line": 637, + "line": 640, "column": 40 }, "end": { - "line": 637, + "line": 640, "column": 53 } } @@ -129370,15 +130109,15 @@ "updateContext": null }, "value": "=", - "start": 21294, - "end": 21295, + "start": 21370, + "end": 21371, "loc": { "start": { - "line": 637, + "line": 640, "column": 54 }, "end": { - "line": 637, + "line": 640, "column": 55 } } @@ -129397,15 +130136,15 @@ "updateContext": null }, "value": "lines", - "start": 21296, - "end": 21303, + "start": 21372, + "end": 21379, "loc": { "start": { - "line": 637, + "line": 640, "column": 56 }, "end": { - "line": 637, + "line": 640, "column": 63 } } @@ -129423,15 +130162,15 @@ "binop": null, "updateContext": null }, - "start": 21303, - "end": 21304, + "start": 21379, + "end": 21380, "loc": { "start": { - "line": 637, + "line": 640, "column": 63 }, "end": { - "line": 637, + "line": 640, "column": 64 } } @@ -129451,15 +130190,15 @@ "updateContext": null }, "value": "break", - "start": 21333, - "end": 21338, + "start": 21409, + "end": 21414, "loc": { "start": { - "line": 638, + "line": 641, "column": 28 }, "end": { - "line": 638, + "line": 641, "column": 33 } } @@ -129477,15 +130216,15 @@ "binop": null, "updateContext": null }, - "start": 21338, - "end": 21339, + "start": 21414, + "end": 21415, "loc": { "start": { - "line": 638, + "line": 641, "column": 33 }, "end": { - "line": 638, + "line": 641, "column": 34 } } @@ -129505,15 +130244,15 @@ "updateContext": null }, "value": "case", - "start": 21364, - "end": 21368, + "start": 21440, + "end": 21444, "loc": { "start": { - "line": 639, + "line": 642, "column": 24 }, "end": { - "line": 639, + "line": 642, "column": 28 } } @@ -129532,15 +130271,15 @@ "updateContext": null }, "value": 2, - "start": 21369, - "end": 21370, + "start": 21445, + "end": 21446, "loc": { "start": { - "line": 639, + "line": 642, "column": 29 }, "end": { - "line": 639, + "line": 642, "column": 30 } } @@ -129558,15 +130297,15 @@ "binop": null, "updateContext": null }, - "start": 21370, - "end": 21371, + "start": 21446, + "end": 21447, "loc": { "start": { - "line": 639, + "line": 642, "column": 30 }, "end": { - "line": 639, + "line": 642, "column": 31 } } @@ -129574,15 +130313,15 @@ { "type": "CommentLine", "value": " LINE_LOOP", - "start": 21372, - "end": 21384, + "start": 21448, + "end": 21460, "loc": { "start": { - "line": 639, + "line": 642, "column": 32 }, "end": { - "line": 639, + "line": 642, "column": 44 } } @@ -129600,15 +130339,15 @@ "binop": null }, "value": "geometryCfg", - "start": 21413, - "end": 21424, + "start": 21489, + "end": 21500, "loc": { "start": { - "line": 640, + "line": 643, "column": 28 }, "end": { - "line": 640, + "line": 643, "column": 39 } } @@ -129626,15 +130365,15 @@ "binop": null, "updateContext": null }, - "start": 21424, - "end": 21425, + "start": 21500, + "end": 21501, "loc": { "start": { - "line": 640, + "line": 643, "column": 39 }, "end": { - "line": 640, + "line": 643, "column": 40 } } @@ -129652,15 +130391,15 @@ "binop": null }, "value": "primitiveType", - "start": 21425, - "end": 21438, + "start": 21501, + "end": 21514, "loc": { "start": { - "line": 640, + "line": 643, "column": 40 }, "end": { - "line": 640, + "line": 643, "column": 53 } } @@ -129679,15 +130418,15 @@ "updateContext": null }, "value": "=", - "start": 21439, - "end": 21440, + "start": 21515, + "end": 21516, "loc": { "start": { - "line": 640, + "line": 643, "column": 54 }, "end": { - "line": 640, + "line": 643, "column": 55 } } @@ -129706,15 +130445,15 @@ "updateContext": null }, "value": "line-loop", - "start": 21441, - "end": 21452, + "start": 21517, + "end": 21528, "loc": { "start": { - "line": 640, + "line": 643, "column": 56 }, "end": { - "line": 640, + "line": 643, "column": 67 } } @@ -129732,15 +130471,15 @@ "binop": null, "updateContext": null }, - "start": 21452, - "end": 21453, + "start": 21528, + "end": 21529, "loc": { "start": { - "line": 640, + "line": 643, "column": 67 }, "end": { - "line": 640, + "line": 643, "column": 68 } } @@ -129760,15 +130499,15 @@ "updateContext": null }, "value": "break", - "start": 21482, - "end": 21487, + "start": 21558, + "end": 21563, "loc": { "start": { - "line": 641, + "line": 644, "column": 28 }, "end": { - "line": 641, + "line": 644, "column": 33 } } @@ -129786,15 +130525,15 @@ "binop": null, "updateContext": null }, - "start": 21487, - "end": 21488, + "start": 21563, + "end": 21564, "loc": { "start": { - "line": 641, + "line": 644, "column": 33 }, "end": { - "line": 641, + "line": 644, "column": 34 } } @@ -129814,15 +130553,15 @@ "updateContext": null }, "value": "case", - "start": 21513, - "end": 21517, + "start": 21589, + "end": 21593, "loc": { "start": { - "line": 642, + "line": 645, "column": 24 }, "end": { - "line": 642, + "line": 645, "column": 28 } } @@ -129841,15 +130580,15 @@ "updateContext": null }, "value": 3, - "start": 21518, - "end": 21519, + "start": 21594, + "end": 21595, "loc": { "start": { - "line": 642, + "line": 645, "column": 29 }, "end": { - "line": 642, + "line": 645, "column": 30 } } @@ -129867,15 +130606,15 @@ "binop": null, "updateContext": null }, - "start": 21519, - "end": 21520, + "start": 21595, + "end": 21596, "loc": { "start": { - "line": 642, + "line": 645, "column": 30 }, "end": { - "line": 642, + "line": 645, "column": 31 } } @@ -129883,15 +130622,15 @@ { "type": "CommentLine", "value": " LINE_STRIP", - "start": 21521, - "end": 21534, + "start": 21597, + "end": 21610, "loc": { "start": { - "line": 642, + "line": 645, "column": 32 }, "end": { - "line": 642, + "line": 645, "column": 45 } } @@ -129909,15 +130648,15 @@ "binop": null }, "value": "geometryCfg", - "start": 21563, - "end": 21574, + "start": 21639, + "end": 21650, "loc": { "start": { - "line": 643, + "line": 646, "column": 28 }, "end": { - "line": 643, + "line": 646, "column": 39 } } @@ -129935,15 +130674,15 @@ "binop": null, "updateContext": null }, - "start": 21574, - "end": 21575, + "start": 21650, + "end": 21651, "loc": { "start": { - "line": 643, + "line": 646, "column": 39 }, "end": { - "line": 643, + "line": 646, "column": 40 } } @@ -129961,15 +130700,15 @@ "binop": null }, "value": "primitiveType", - "start": 21575, - "end": 21588, + "start": 21651, + "end": 21664, "loc": { "start": { - "line": 643, + "line": 646, "column": 40 }, "end": { - "line": 643, + "line": 646, "column": 53 } } @@ -129988,15 +130727,15 @@ "updateContext": null }, "value": "=", - "start": 21589, - "end": 21590, + "start": 21665, + "end": 21666, "loc": { "start": { - "line": 643, + "line": 646, "column": 54 }, "end": { - "line": 643, + "line": 646, "column": 55 } } @@ -130015,15 +130754,15 @@ "updateContext": null }, "value": "line-strip", - "start": 21591, - "end": 21603, + "start": 21667, + "end": 21679, "loc": { "start": { - "line": 643, + "line": 646, "column": 56 }, "end": { - "line": 643, + "line": 646, "column": 68 } } @@ -130041,15 +130780,15 @@ "binop": null, "updateContext": null }, - "start": 21603, - "end": 21604, + "start": 21679, + "end": 21680, "loc": { "start": { - "line": 643, + "line": 646, "column": 68 }, "end": { - "line": 643, + "line": 646, "column": 69 } } @@ -130069,15 +130808,15 @@ "updateContext": null }, "value": "break", - "start": 21633, - "end": 21638, + "start": 21709, + "end": 21714, "loc": { "start": { - "line": 644, + "line": 647, "column": 28 }, "end": { - "line": 644, + "line": 647, "column": 33 } } @@ -130095,15 +130834,15 @@ "binop": null, "updateContext": null }, - "start": 21638, - "end": 21639, + "start": 21714, + "end": 21715, "loc": { "start": { - "line": 644, + "line": 647, "column": 33 }, "end": { - "line": 644, + "line": 647, "column": 34 } } @@ -130123,15 +130862,15 @@ "updateContext": null }, "value": "case", - "start": 21664, - "end": 21668, + "start": 21740, + "end": 21744, "loc": { "start": { - "line": 645, + "line": 648, "column": 24 }, "end": { - "line": 645, + "line": 648, "column": 28 } } @@ -130150,15 +130889,15 @@ "updateContext": null }, "value": 4, - "start": 21669, - "end": 21670, + "start": 21745, + "end": 21746, "loc": { "start": { - "line": 645, + "line": 648, "column": 29 }, "end": { - "line": 645, + "line": 648, "column": 30 } } @@ -130176,15 +130915,15 @@ "binop": null, "updateContext": null }, - "start": 21670, - "end": 21671, + "start": 21746, + "end": 21747, "loc": { "start": { - "line": 645, + "line": 648, "column": 30 }, "end": { - "line": 645, + "line": 648, "column": 31 } } @@ -130192,15 +130931,15 @@ { "type": "CommentLine", "value": " TRIANGLES", - "start": 21672, - "end": 21684, + "start": 21748, + "end": 21760, "loc": { "start": { - "line": 645, + "line": 648, "column": 32 }, "end": { - "line": 645, + "line": 648, "column": 44 } } @@ -130218,15 +130957,15 @@ "binop": null }, "value": "geometryCfg", - "start": 21713, - "end": 21724, + "start": 21789, + "end": 21800, "loc": { "start": { - "line": 646, + "line": 649, "column": 28 }, "end": { - "line": 646, + "line": 649, "column": 39 } } @@ -130244,15 +130983,15 @@ "binop": null, "updateContext": null }, - "start": 21724, - "end": 21725, + "start": 21800, + "end": 21801, "loc": { "start": { - "line": 646, + "line": 649, "column": 39 }, "end": { - "line": 646, + "line": 649, "column": 40 } } @@ -130270,15 +131009,15 @@ "binop": null }, "value": "primitiveType", - "start": 21725, - "end": 21738, + "start": 21801, + "end": 21814, "loc": { "start": { - "line": 646, + "line": 649, "column": 40 }, "end": { - "line": 646, + "line": 649, "column": 53 } } @@ -130297,15 +131036,15 @@ "updateContext": null }, "value": "=", - "start": 21739, - "end": 21740, + "start": 21815, + "end": 21816, "loc": { "start": { - "line": 646, + "line": 649, "column": 54 }, "end": { - "line": 646, + "line": 649, "column": 55 } } @@ -130324,15 +131063,15 @@ "updateContext": null }, "value": "triangles", - "start": 21741, - "end": 21752, + "start": 21817, + "end": 21828, "loc": { "start": { - "line": 646, + "line": 649, "column": 56 }, "end": { - "line": 646, + "line": 649, "column": 67 } } @@ -130350,15 +131089,15 @@ "binop": null, "updateContext": null }, - "start": 21752, - "end": 21753, + "start": 21828, + "end": 21829, "loc": { "start": { - "line": 646, + "line": 649, "column": 67 }, "end": { - "line": 646, + "line": 649, "column": 68 } } @@ -130378,15 +131117,15 @@ "updateContext": null }, "value": "break", - "start": 21782, - "end": 21787, + "start": 21858, + "end": 21863, "loc": { "start": { - "line": 647, + "line": 650, "column": 28 }, "end": { - "line": 647, + "line": 650, "column": 33 } } @@ -130404,15 +131143,15 @@ "binop": null, "updateContext": null }, - "start": 21787, - "end": 21788, + "start": 21863, + "end": 21864, "loc": { "start": { - "line": 647, + "line": 650, "column": 33 }, "end": { - "line": 647, + "line": 650, "column": 34 } } @@ -130432,15 +131171,15 @@ "updateContext": null }, "value": "case", - "start": 21813, - "end": 21817, + "start": 21889, + "end": 21893, "loc": { "start": { - "line": 648, + "line": 651, "column": 24 }, "end": { - "line": 648, + "line": 651, "column": 28 } } @@ -130459,15 +131198,15 @@ "updateContext": null }, "value": 5, - "start": 21818, - "end": 21819, + "start": 21894, + "end": 21895, "loc": { "start": { - "line": 648, + "line": 651, "column": 29 }, "end": { - "line": 648, + "line": 651, "column": 30 } } @@ -130485,15 +131224,15 @@ "binop": null, "updateContext": null }, - "start": 21819, - "end": 21820, + "start": 21895, + "end": 21896, "loc": { "start": { - "line": 648, + "line": 651, "column": 30 }, "end": { - "line": 648, + "line": 651, "column": 31 } } @@ -130501,15 +131240,15 @@ { "type": "CommentLine", "value": " TRIANGLE_STRIP", - "start": 21821, - "end": 21838, + "start": 21897, + "end": 21914, "loc": { "start": { - "line": 648, + "line": 651, "column": 32 }, "end": { - "line": 648, + "line": 651, "column": 49 } } @@ -130527,15 +131266,15 @@ "binop": null }, "value": "geometryCfg", - "start": 21867, - "end": 21878, + "start": 21943, + "end": 21954, "loc": { "start": { - "line": 649, + "line": 652, "column": 28 }, "end": { - "line": 649, + "line": 652, "column": 39 } } @@ -130553,15 +131292,15 @@ "binop": null, "updateContext": null }, - "start": 21878, - "end": 21879, + "start": 21954, + "end": 21955, "loc": { "start": { - "line": 649, + "line": 652, "column": 39 }, "end": { - "line": 649, + "line": 652, "column": 40 } } @@ -130579,15 +131318,15 @@ "binop": null }, "value": "primitiveType", - "start": 21879, - "end": 21892, + "start": 21955, + "end": 21968, "loc": { "start": { - "line": 649, + "line": 652, "column": 40 }, "end": { - "line": 649, + "line": 652, "column": 53 } } @@ -130606,15 +131345,15 @@ "updateContext": null }, "value": "=", - "start": 21893, - "end": 21894, + "start": 21969, + "end": 21970, "loc": { "start": { - "line": 649, + "line": 652, "column": 54 }, "end": { - "line": 649, + "line": 652, "column": 55 } } @@ -130633,15 +131372,15 @@ "updateContext": null }, "value": "triangle-strip", - "start": 21895, - "end": 21911, + "start": 21971, + "end": 21987, "loc": { "start": { - "line": 649, + "line": 652, "column": 56 }, "end": { - "line": 649, + "line": 652, "column": 72 } } @@ -130659,15 +131398,15 @@ "binop": null, "updateContext": null }, - "start": 21911, - "end": 21912, + "start": 21987, + "end": 21988, "loc": { "start": { - "line": 649, + "line": 652, "column": 72 }, "end": { - "line": 649, + "line": 652, "column": 73 } } @@ -130687,15 +131426,15 @@ "updateContext": null }, "value": "break", - "start": 21941, - "end": 21946, + "start": 22017, + "end": 22022, "loc": { "start": { - "line": 650, + "line": 653, "column": 28 }, "end": { - "line": 650, + "line": 653, "column": 33 } } @@ -130713,15 +131452,15 @@ "binop": null, "updateContext": null }, - "start": 21946, - "end": 21947, + "start": 22022, + "end": 22023, "loc": { "start": { - "line": 650, + "line": 653, "column": 33 }, "end": { - "line": 650, + "line": 653, "column": 34 } } @@ -130741,15 +131480,15 @@ "updateContext": null }, "value": "case", - "start": 21972, - "end": 21976, + "start": 22048, + "end": 22052, "loc": { "start": { - "line": 651, + "line": 654, "column": 24 }, "end": { - "line": 651, + "line": 654, "column": 28 } } @@ -130768,15 +131507,15 @@ "updateContext": null }, "value": 6, - "start": 21977, - "end": 21978, + "start": 22053, + "end": 22054, "loc": { "start": { - "line": 651, + "line": 654, "column": 29 }, "end": { - "line": 651, + "line": 654, "column": 30 } } @@ -130794,15 +131533,15 @@ "binop": null, "updateContext": null }, - "start": 21978, - "end": 21979, + "start": 22054, + "end": 22055, "loc": { "start": { - "line": 651, + "line": 654, "column": 30 }, "end": { - "line": 651, + "line": 654, "column": 31 } } @@ -130810,15 +131549,15 @@ { "type": "CommentLine", "value": " TRIANGLE_FAN", - "start": 21980, - "end": 21995, + "start": 22056, + "end": 22071, "loc": { "start": { - "line": 651, + "line": 654, "column": 32 }, "end": { - "line": 651, + "line": 654, "column": 47 } } @@ -130836,15 +131575,15 @@ "binop": null }, "value": "geometryCfg", - "start": 22024, - "end": 22035, + "start": 22100, + "end": 22111, "loc": { "start": { - "line": 652, + "line": 655, "column": 28 }, "end": { - "line": 652, + "line": 655, "column": 39 } } @@ -130862,15 +131601,15 @@ "binop": null, "updateContext": null }, - "start": 22035, - "end": 22036, + "start": 22111, + "end": 22112, "loc": { "start": { - "line": 652, + "line": 655, "column": 39 }, "end": { - "line": 652, + "line": 655, "column": 40 } } @@ -130888,15 +131627,15 @@ "binop": null }, "value": "primitiveType", - "start": 22036, - "end": 22049, + "start": 22112, + "end": 22125, "loc": { "start": { - "line": 652, + "line": 655, "column": 40 }, "end": { - "line": 652, + "line": 655, "column": 53 } } @@ -130915,15 +131654,15 @@ "updateContext": null }, "value": "=", - "start": 22050, - "end": 22051, + "start": 22126, + "end": 22127, "loc": { "start": { - "line": 652, + "line": 655, "column": 54 }, "end": { - "line": 652, + "line": 655, "column": 55 } } @@ -130942,15 +131681,15 @@ "updateContext": null }, "value": "triangle-fan", - "start": 22052, - "end": 22066, + "start": 22128, + "end": 22142, "loc": { "start": { - "line": 652, + "line": 655, "column": 56 }, "end": { - "line": 652, + "line": 655, "column": 70 } } @@ -130968,15 +131707,15 @@ "binop": null, "updateContext": null }, - "start": 22066, - "end": 22067, + "start": 22142, + "end": 22143, "loc": { "start": { - "line": 652, + "line": 655, "column": 70 }, "end": { - "line": 652, + "line": 655, "column": 71 } } @@ -130996,15 +131735,15 @@ "updateContext": null }, "value": "break", - "start": 22096, - "end": 22101, + "start": 22172, + "end": 22177, "loc": { "start": { - "line": 653, + "line": 656, "column": 28 }, "end": { - "line": 653, + "line": 656, "column": 33 } } @@ -131022,15 +131761,15 @@ "binop": null, "updateContext": null }, - "start": 22101, - "end": 22102, + "start": 22177, + "end": 22178, "loc": { "start": { - "line": 653, + "line": 656, "column": 33 }, "end": { - "line": 653, + "line": 656, "column": 34 } } @@ -131050,15 +131789,15 @@ "updateContext": null }, "value": "default", - "start": 22127, - "end": 22134, + "start": 22203, + "end": 22210, "loc": { "start": { - "line": 654, + "line": 657, "column": 24 }, "end": { - "line": 654, + "line": 657, "column": 31 } } @@ -131076,15 +131815,15 @@ "binop": null, "updateContext": null }, - "start": 22134, - "end": 22135, + "start": 22210, + "end": 22211, "loc": { "start": { - "line": 654, + "line": 657, "column": 31 }, "end": { - "line": 654, + "line": 657, "column": 32 } } @@ -131102,15 +131841,15 @@ "binop": null }, "value": "geometryCfg", - "start": 22164, - "end": 22175, + "start": 22240, + "end": 22251, "loc": { "start": { - "line": 655, + "line": 658, "column": 28 }, "end": { - "line": 655, + "line": 658, "column": 39 } } @@ -131128,15 +131867,15 @@ "binop": null, "updateContext": null }, - "start": 22175, - "end": 22176, + "start": 22251, + "end": 22252, "loc": { "start": { - "line": 655, + "line": 658, "column": 39 }, "end": { - "line": 655, + "line": 658, "column": 40 } } @@ -131154,15 +131893,15 @@ "binop": null }, "value": "primitiveType", - "start": 22176, - "end": 22189, + "start": 22252, + "end": 22265, "loc": { "start": { - "line": 655, + "line": 658, "column": 40 }, "end": { - "line": 655, + "line": 658, "column": 53 } } @@ -131181,15 +131920,15 @@ "updateContext": null }, "value": "=", - "start": 22190, - "end": 22191, + "start": 22266, + "end": 22267, "loc": { "start": { - "line": 655, + "line": 658, "column": 54 }, "end": { - "line": 655, + "line": 658, "column": 55 } } @@ -131208,15 +131947,15 @@ "updateContext": null }, "value": "triangles", - "start": 22192, - "end": 22203, + "start": 22268, + "end": 22279, "loc": { "start": { - "line": 655, + "line": 658, "column": 56 }, "end": { - "line": 655, + "line": 658, "column": 67 } } @@ -131234,15 +131973,15 @@ "binop": null, "updateContext": null }, - "start": 22203, - "end": 22204, + "start": 22279, + "end": 22280, "loc": { "start": { - "line": 655, + "line": 658, "column": 67 }, "end": { - "line": 655, + "line": 658, "column": 68 } } @@ -131259,15 +131998,15 @@ "postfix": false, "binop": null }, - "start": 22225, - "end": 22226, + "start": 22301, + "end": 22302, "loc": { "start": { - "line": 656, + "line": 659, "column": 20 }, "end": { - "line": 656, + "line": 659, "column": 21 } } @@ -131287,15 +132026,15 @@ "updateContext": null }, "value": "const", - "start": 22247, - "end": 22252, + "start": 22323, + "end": 22328, "loc": { "start": { - "line": 657, + "line": 660, "column": 20 }, "end": { - "line": 657, + "line": 660, "column": 25 } } @@ -131313,15 +132052,15 @@ "binop": null }, "value": "POSITION", - "start": 22253, - "end": 22261, + "start": 22329, + "end": 22337, "loc": { "start": { - "line": 657, + "line": 660, "column": 26 }, "end": { - "line": 657, + "line": 660, "column": 34 } } @@ -131340,15 +132079,15 @@ "updateContext": null }, "value": "=", - "start": 22262, - "end": 22263, + "start": 22338, + "end": 22339, "loc": { "start": { - "line": 657, + "line": 660, "column": 35 }, "end": { - "line": 657, + "line": 660, "column": 36 } } @@ -131366,15 +132105,15 @@ "binop": null }, "value": "primitive", - "start": 22264, - "end": 22273, + "start": 22340, + "end": 22349, "loc": { "start": { - "line": 657, + "line": 660, "column": 37 }, "end": { - "line": 657, + "line": 660, "column": 46 } } @@ -131392,15 +132131,15 @@ "binop": null, "updateContext": null }, - "start": 22273, - "end": 22274, + "start": 22349, + "end": 22350, "loc": { "start": { - "line": 657, + "line": 660, "column": 46 }, "end": { - "line": 657, + "line": 660, "column": 47 } } @@ -131418,15 +132157,15 @@ "binop": null }, "value": "attributes", - "start": 22274, - "end": 22284, + "start": 22350, + "end": 22360, "loc": { "start": { - "line": 657, + "line": 660, "column": 47 }, "end": { - "line": 657, + "line": 660, "column": 57 } } @@ -131444,15 +132183,15 @@ "binop": null, "updateContext": null }, - "start": 22284, - "end": 22285, + "start": 22360, + "end": 22361, "loc": { "start": { - "line": 657, + "line": 660, "column": 57 }, "end": { - "line": 657, + "line": 660, "column": 58 } } @@ -131470,15 +132209,15 @@ "binop": null }, "value": "POSITION", - "start": 22285, - "end": 22293, + "start": 22361, + "end": 22369, "loc": { "start": { - "line": 657, + "line": 660, "column": 58 }, "end": { - "line": 657, + "line": 660, "column": 66 } } @@ -131496,15 +132235,15 @@ "binop": null, "updateContext": null }, - "start": 22293, - "end": 22294, + "start": 22369, + "end": 22370, "loc": { "start": { - "line": 657, + "line": 660, "column": 66 }, "end": { - "line": 657, + "line": 660, "column": 67 } } @@ -131524,15 +132263,15 @@ "updateContext": null }, "value": "if", - "start": 22315, - "end": 22317, + "start": 22391, + "end": 22393, "loc": { "start": { - "line": 658, + "line": 661, "column": 20 }, "end": { - "line": 658, + "line": 661, "column": 22 } } @@ -131549,15 +132288,15 @@ "postfix": false, "binop": null }, - "start": 22318, - "end": 22319, + "start": 22394, + "end": 22395, "loc": { "start": { - "line": 658, + "line": 661, "column": 23 }, "end": { - "line": 658, + "line": 661, "column": 24 } } @@ -131576,15 +132315,15 @@ "updateContext": null }, "value": "!", - "start": 22319, - "end": 22320, + "start": 22395, + "end": 22396, "loc": { "start": { - "line": 658, + "line": 661, "column": 24 }, "end": { - "line": 658, + "line": 661, "column": 25 } } @@ -131602,15 +132341,15 @@ "binop": null }, "value": "POSITION", - "start": 22320, - "end": 22328, + "start": 22396, + "end": 22404, "loc": { "start": { - "line": 658, + "line": 661, "column": 25 }, "end": { - "line": 658, + "line": 661, "column": 33 } } @@ -131627,15 +132366,15 @@ "postfix": false, "binop": null }, - "start": 22328, - "end": 22329, + "start": 22404, + "end": 22405, "loc": { "start": { - "line": 658, + "line": 661, "column": 33 }, "end": { - "line": 658, + "line": 661, "column": 34 } } @@ -131652,15 +132391,15 @@ "postfix": false, "binop": null }, - "start": 22330, - "end": 22331, + "start": 22406, + "end": 22407, "loc": { "start": { - "line": 658, + "line": 661, "column": 35 }, "end": { - "line": 658, + "line": 661, "column": 36 } } @@ -131680,15 +132419,15 @@ "updateContext": null }, "value": "continue", - "start": 22356, - "end": 22364, + "start": 22432, + "end": 22440, "loc": { "start": { - "line": 659, + "line": 662, "column": 24 }, "end": { - "line": 659, + "line": 662, "column": 32 } } @@ -131706,15 +132445,15 @@ "binop": null, "updateContext": null }, - "start": 22364, - "end": 22365, + "start": 22440, + "end": 22441, "loc": { "start": { - "line": 659, + "line": 662, "column": 32 }, "end": { - "line": 659, + "line": 662, "column": 33 } } @@ -131731,15 +132470,15 @@ "postfix": false, "binop": null }, - "start": 22386, - "end": 22387, + "start": 22462, + "end": 22463, "loc": { "start": { - "line": 660, + "line": 663, "column": 20 }, "end": { - "line": 660, + "line": 663, "column": 21 } } @@ -131757,15 +132496,15 @@ "binop": null }, "value": "geometryCfg", - "start": 22408, - "end": 22419, + "start": 22484, + "end": 22495, "loc": { "start": { - "line": 661, + "line": 664, "column": 20 }, "end": { - "line": 661, + "line": 664, "column": 31 } } @@ -131783,15 +132522,15 @@ "binop": null, "updateContext": null }, - "start": 22419, - "end": 22420, + "start": 22495, + "end": 22496, "loc": { "start": { - "line": 661, + "line": 664, "column": 31 }, "end": { - "line": 661, + "line": 664, "column": 32 } } @@ -131809,15 +132548,15 @@ "binop": null }, "value": "positions", - "start": 22420, - "end": 22429, + "start": 22496, + "end": 22505, "loc": { "start": { - "line": 661, + "line": 664, "column": 32 }, "end": { - "line": 661, + "line": 664, "column": 41 } } @@ -131836,15 +132575,15 @@ "updateContext": null }, "value": "=", - "start": 22430, - "end": 22431, + "start": 22506, + "end": 22507, "loc": { "start": { - "line": 661, + "line": 664, "column": 42 }, "end": { - "line": 661, + "line": 664, "column": 43 } } @@ -131862,15 +132601,15 @@ "binop": null }, "value": "primitive", - "start": 22432, - "end": 22441, + "start": 22508, + "end": 22517, "loc": { "start": { - "line": 661, + "line": 664, "column": 44 }, "end": { - "line": 661, + "line": 664, "column": 53 } } @@ -131888,15 +132627,15 @@ "binop": null, "updateContext": null }, - "start": 22441, - "end": 22442, + "start": 22517, + "end": 22518, "loc": { "start": { - "line": 661, + "line": 664, "column": 53 }, "end": { - "line": 661, + "line": 664, "column": 54 } } @@ -131914,15 +132653,15 @@ "binop": null }, "value": "attributes", - "start": 22442, - "end": 22452, + "start": 22518, + "end": 22528, "loc": { "start": { - "line": 661, + "line": 664, "column": 54 }, "end": { - "line": 661, + "line": 664, "column": 64 } } @@ -131940,15 +132679,15 @@ "binop": null, "updateContext": null }, - "start": 22452, - "end": 22453, + "start": 22528, + "end": 22529, "loc": { "start": { - "line": 661, + "line": 664, "column": 64 }, "end": { - "line": 661, + "line": 664, "column": 65 } } @@ -131966,15 +132705,15 @@ "binop": null }, "value": "POSITION", - "start": 22453, - "end": 22461, + "start": 22529, + "end": 22537, "loc": { "start": { - "line": 661, + "line": 664, "column": 65 }, "end": { - "line": 661, + "line": 664, "column": 73 } } @@ -131992,15 +132731,15 @@ "binop": null, "updateContext": null }, - "start": 22461, - "end": 22462, + "start": 22537, + "end": 22538, "loc": { "start": { - "line": 661, + "line": 664, "column": 73 }, "end": { - "line": 661, + "line": 664, "column": 74 } } @@ -132018,15 +132757,15 @@ "binop": null }, "value": "value", - "start": 22462, - "end": 22467, + "start": 22538, + "end": 22543, "loc": { "start": { - "line": 661, + "line": 664, "column": 74 }, "end": { - "line": 661, + "line": 664, "column": 79 } } @@ -132044,15 +132783,15 @@ "binop": null, "updateContext": null }, - "start": 22467, - "end": 22468, + "start": 22543, + "end": 22544, "loc": { "start": { - "line": 661, + "line": 664, "column": 79 }, "end": { - "line": 661, + "line": 664, "column": 80 } } @@ -132070,15 +132809,15 @@ "binop": null }, "value": "ctx", - "start": 22489, - "end": 22492, + "start": 22565, + "end": 22568, "loc": { "start": { - "line": 662, + "line": 665, "column": 20 }, "end": { - "line": 662, + "line": 665, "column": 23 } } @@ -132096,15 +132835,15 @@ "binop": null, "updateContext": null }, - "start": 22492, - "end": 22493, + "start": 22568, + "end": 22569, "loc": { "start": { - "line": 662, + "line": 665, "column": 23 }, "end": { - "line": 662, + "line": 665, "column": 24 } } @@ -132122,15 +132861,15 @@ "binop": null }, "value": "stats", - "start": 22493, - "end": 22498, + "start": 22569, + "end": 22574, "loc": { "start": { - "line": 662, + "line": 665, "column": 24 }, "end": { - "line": 662, + "line": 665, "column": 29 } } @@ -132148,15 +132887,15 @@ "binop": null, "updateContext": null }, - "start": 22498, - "end": 22499, + "start": 22574, + "end": 22575, "loc": { "start": { - "line": 662, + "line": 665, "column": 29 }, "end": { - "line": 662, + "line": 665, "column": 30 } } @@ -132174,15 +132913,15 @@ "binop": null }, "value": "numVertices", - "start": 22499, - "end": 22510, + "start": 22575, + "end": 22586, "loc": { "start": { - "line": 662, + "line": 665, "column": 30 }, "end": { - "line": 662, + "line": 665, "column": 41 } } @@ -132201,15 +132940,15 @@ "updateContext": null }, "value": "+=", - "start": 22511, - "end": 22513, + "start": 22587, + "end": 22589, "loc": { "start": { - "line": 662, + "line": 665, "column": 42 }, "end": { - "line": 662, + "line": 665, "column": 44 } } @@ -132227,15 +132966,15 @@ "binop": null }, "value": "geometryCfg", - "start": 22514, - "end": 22525, + "start": 22590, + "end": 22601, "loc": { "start": { - "line": 662, + "line": 665, "column": 45 }, "end": { - "line": 662, + "line": 665, "column": 56 } } @@ -132253,15 +132992,15 @@ "binop": null, "updateContext": null }, - "start": 22525, - "end": 22526, + "start": 22601, + "end": 22602, "loc": { "start": { - "line": 662, + "line": 665, "column": 56 }, "end": { - "line": 662, + "line": 665, "column": 57 } } @@ -132279,15 +133018,15 @@ "binop": null }, "value": "positions", - "start": 22526, - "end": 22535, + "start": 22602, + "end": 22611, "loc": { "start": { - "line": 662, + "line": 665, "column": 57 }, "end": { - "line": 662, + "line": 665, "column": 66 } } @@ -132305,15 +133044,15 @@ "binop": null, "updateContext": null }, - "start": 22535, - "end": 22536, + "start": 22611, + "end": 22612, "loc": { "start": { - "line": 662, + "line": 665, "column": 66 }, "end": { - "line": 662, + "line": 665, "column": 67 } } @@ -132331,15 +133070,15 @@ "binop": null }, "value": "length", - "start": 22536, - "end": 22542, + "start": 22612, + "end": 22618, "loc": { "start": { - "line": 662, + "line": 665, "column": 67 }, "end": { - "line": 662, + "line": 665, "column": 73 } } @@ -132358,15 +133097,15 @@ "updateContext": null }, "value": "/", - "start": 22543, - "end": 22544, + "start": 22619, + "end": 22620, "loc": { "start": { - "line": 662, + "line": 665, "column": 74 }, "end": { - "line": 662, + "line": 665, "column": 75 } } @@ -132385,15 +133124,15 @@ "updateContext": null }, "value": 3, - "start": 22545, - "end": 22546, + "start": 22621, + "end": 22622, "loc": { "start": { - "line": 662, + "line": 665, "column": 76 }, "end": { - "line": 662, + "line": 665, "column": 77 } } @@ -132411,15 +133150,15 @@ "binop": null, "updateContext": null }, - "start": 22546, - "end": 22547, + "start": 22622, + "end": 22623, "loc": { "start": { - "line": 662, + "line": 665, "column": 77 }, "end": { - "line": 662, + "line": 665, "column": 78 } } @@ -132439,15 +133178,15 @@ "updateContext": null }, "value": "if", - "start": 22568, - "end": 22570, + "start": 22644, + "end": 22646, "loc": { "start": { - "line": 663, + "line": 666, "column": 20 }, "end": { - "line": 663, + "line": 666, "column": 22 } } @@ -132464,15 +133203,15 @@ "postfix": false, "binop": null }, - "start": 22571, - "end": 22572, + "start": 22647, + "end": 22648, "loc": { "start": { - "line": 663, + "line": 666, "column": 23 }, "end": { - "line": 663, + "line": 666, "column": 24 } } @@ -132490,15 +133229,15 @@ "binop": null }, "value": "ctx", - "start": 22572, - "end": 22575, + "start": 22648, + "end": 22651, "loc": { "start": { - "line": 663, + "line": 666, "column": 24 }, "end": { - "line": 663, + "line": 666, "column": 27 } } @@ -132516,15 +133255,15 @@ "binop": null, "updateContext": null }, - "start": 22575, - "end": 22576, + "start": 22651, + "end": 22652, "loc": { "start": { - "line": 663, + "line": 666, "column": 27 }, "end": { - "line": 663, + "line": 666, "column": 28 } } @@ -132542,15 +133281,15 @@ "binop": null }, "value": "includeNormals", - "start": 22576, - "end": 22590, + "start": 22652, + "end": 22666, "loc": { "start": { - "line": 663, + "line": 666, "column": 28 }, "end": { - "line": 663, + "line": 666, "column": 42 } } @@ -132567,15 +133306,15 @@ "postfix": false, "binop": null }, - "start": 22590, - "end": 22591, + "start": 22666, + "end": 22667, "loc": { "start": { - "line": 663, + "line": 666, "column": 42 }, "end": { - "line": 663, + "line": 666, "column": 43 } } @@ -132592,15 +133331,15 @@ "postfix": false, "binop": null }, - "start": 22592, - "end": 22593, + "start": 22668, + "end": 22669, "loc": { "start": { - "line": 663, + "line": 666, "column": 44 }, "end": { - "line": 663, + "line": 666, "column": 45 } } @@ -132620,15 +133359,15 @@ "updateContext": null }, "value": "if", - "start": 22618, - "end": 22620, + "start": 22694, + "end": 22696, "loc": { "start": { - "line": 664, + "line": 667, "column": 24 }, "end": { - "line": 664, + "line": 667, "column": 26 } } @@ -132645,15 +133384,15 @@ "postfix": false, "binop": null }, - "start": 22621, - "end": 22622, + "start": 22697, + "end": 22698, "loc": { "start": { - "line": 664, + "line": 667, "column": 27 }, "end": { - "line": 664, + "line": 667, "column": 28 } } @@ -132671,15 +133410,15 @@ "binop": null }, "value": "primitive", - "start": 22622, - "end": 22631, + "start": 22698, + "end": 22707, "loc": { "start": { - "line": 664, + "line": 667, "column": 28 }, "end": { - "line": 664, + "line": 667, "column": 37 } } @@ -132697,15 +133436,15 @@ "binop": null, "updateContext": null }, - "start": 22631, - "end": 22632, + "start": 22707, + "end": 22708, "loc": { "start": { - "line": 664, + "line": 667, "column": 37 }, "end": { - "line": 664, + "line": 667, "column": 38 } } @@ -132723,15 +133462,15 @@ "binop": null }, "value": "attributes", - "start": 22632, - "end": 22642, + "start": 22708, + "end": 22718, "loc": { "start": { - "line": 664, + "line": 667, "column": 38 }, "end": { - "line": 664, + "line": 667, "column": 48 } } @@ -132749,15 +133488,15 @@ "binop": null, "updateContext": null }, - "start": 22642, - "end": 22643, + "start": 22718, + "end": 22719, "loc": { "start": { - "line": 664, + "line": 667, "column": 48 }, "end": { - "line": 664, + "line": 667, "column": 49 } } @@ -132775,15 +133514,15 @@ "binop": null }, "value": "NORMAL", - "start": 22643, - "end": 22649, + "start": 22719, + "end": 22725, "loc": { "start": { - "line": 664, + "line": 667, "column": 49 }, "end": { - "line": 664, + "line": 667, "column": 55 } } @@ -132800,15 +133539,15 @@ "postfix": false, "binop": null }, - "start": 22649, - "end": 22650, + "start": 22725, + "end": 22726, "loc": { "start": { - "line": 664, + "line": 667, "column": 55 }, "end": { - "line": 664, + "line": 667, "column": 56 } } @@ -132825,15 +133564,15 @@ "postfix": false, "binop": null }, - "start": 22651, - "end": 22652, + "start": 22727, + "end": 22728, "loc": { "start": { - "line": 664, + "line": 667, "column": 57 }, "end": { - "line": 664, + "line": 667, "column": 58 } } @@ -132851,15 +133590,15 @@ "binop": null }, "value": "geometryCfg", - "start": 22681, - "end": 22692, + "start": 22757, + "end": 22768, "loc": { "start": { - "line": 665, + "line": 668, "column": 28 }, "end": { - "line": 665, + "line": 668, "column": 39 } } @@ -132877,15 +133616,15 @@ "binop": null, "updateContext": null }, - "start": 22692, - "end": 22693, + "start": 22768, + "end": 22769, "loc": { "start": { - "line": 665, + "line": 668, "column": 39 }, "end": { - "line": 665, + "line": 668, "column": 40 } } @@ -132903,15 +133642,15 @@ "binop": null }, "value": "normals", - "start": 22693, - "end": 22700, + "start": 22769, + "end": 22776, "loc": { "start": { - "line": 665, + "line": 668, "column": 40 }, "end": { - "line": 665, + "line": 668, "column": 47 } } @@ -132930,15 +133669,15 @@ "updateContext": null }, "value": "=", - "start": 22701, - "end": 22702, + "start": 22777, + "end": 22778, "loc": { "start": { - "line": 665, + "line": 668, "column": 48 }, "end": { - "line": 665, + "line": 668, "column": 49 } } @@ -132956,15 +133695,15 @@ "binop": null }, "value": "primitive", - "start": 22703, - "end": 22712, + "start": 22779, + "end": 22788, "loc": { "start": { - "line": 665, + "line": 668, "column": 50 }, "end": { - "line": 665, + "line": 668, "column": 59 } } @@ -132982,15 +133721,15 @@ "binop": null, "updateContext": null }, - "start": 22712, - "end": 22713, + "start": 22788, + "end": 22789, "loc": { "start": { - "line": 665, + "line": 668, "column": 59 }, "end": { - "line": 665, + "line": 668, "column": 60 } } @@ -133008,15 +133747,15 @@ "binop": null }, "value": "attributes", - "start": 22713, - "end": 22723, + "start": 22789, + "end": 22799, "loc": { "start": { - "line": 665, + "line": 668, "column": 60 }, "end": { - "line": 665, + "line": 668, "column": 70 } } @@ -133034,15 +133773,15 @@ "binop": null, "updateContext": null }, - "start": 22723, - "end": 22724, + "start": 22799, + "end": 22800, "loc": { "start": { - "line": 665, + "line": 668, "column": 70 }, "end": { - "line": 665, + "line": 668, "column": 71 } } @@ -133060,15 +133799,15 @@ "binop": null }, "value": "NORMAL", - "start": 22724, - "end": 22730, + "start": 22800, + "end": 22806, "loc": { "start": { - "line": 665, + "line": 668, "column": 71 }, "end": { - "line": 665, + "line": 668, "column": 77 } } @@ -133086,15 +133825,15 @@ "binop": null, "updateContext": null }, - "start": 22730, - "end": 22731, + "start": 22806, + "end": 22807, "loc": { "start": { - "line": 665, + "line": 668, "column": 77 }, "end": { - "line": 665, + "line": 668, "column": 78 } } @@ -133112,15 +133851,15 @@ "binop": null }, "value": "value", - "start": 22731, - "end": 22736, + "start": 22807, + "end": 22812, "loc": { "start": { - "line": 665, + "line": 668, "column": 78 }, "end": { - "line": 665, + "line": 668, "column": 83 } } @@ -133138,15 +133877,15 @@ "binop": null, "updateContext": null }, - "start": 22736, - "end": 22737, + "start": 22812, + "end": 22813, "loc": { "start": { - "line": 665, + "line": 668, "column": 83 }, "end": { - "line": 665, + "line": 668, "column": 84 } } @@ -133164,15 +133903,15 @@ "binop": null }, "value": "ctx", - "start": 22766, - "end": 22769, + "start": 22842, + "end": 22845, "loc": { "start": { - "line": 666, + "line": 669, "column": 28 }, "end": { - "line": 666, + "line": 669, "column": 31 } } @@ -133190,15 +133929,15 @@ "binop": null, "updateContext": null }, - "start": 22769, - "end": 22770, + "start": 22845, + "end": 22846, "loc": { "start": { - "line": 666, + "line": 669, "column": 31 }, "end": { - "line": 666, + "line": 669, "column": 32 } } @@ -133216,15 +133955,15 @@ "binop": null }, "value": "stats", - "start": 22770, - "end": 22775, + "start": 22846, + "end": 22851, "loc": { "start": { - "line": 666, + "line": 669, "column": 32 }, "end": { - "line": 666, + "line": 669, "column": 37 } } @@ -133242,15 +133981,15 @@ "binop": null, "updateContext": null }, - "start": 22775, - "end": 22776, + "start": 22851, + "end": 22852, "loc": { "start": { - "line": 666, + "line": 669, "column": 37 }, "end": { - "line": 666, + "line": 669, "column": 38 } } @@ -133268,15 +134007,15 @@ "binop": null }, "value": "numNormals", - "start": 22776, - "end": 22786, + "start": 22852, + "end": 22862, "loc": { "start": { - "line": 666, + "line": 669, "column": 38 }, "end": { - "line": 666, + "line": 669, "column": 48 } } @@ -133295,15 +134034,15 @@ "updateContext": null }, "value": "+=", - "start": 22787, - "end": 22789, + "start": 22863, + "end": 22865, "loc": { "start": { - "line": 666, + "line": 669, "column": 49 }, "end": { - "line": 666, + "line": 669, "column": 51 } } @@ -133321,15 +134060,15 @@ "binop": null }, "value": "geometryCfg", - "start": 22790, - "end": 22801, + "start": 22866, + "end": 22877, "loc": { "start": { - "line": 666, + "line": 669, "column": 52 }, "end": { - "line": 666, + "line": 669, "column": 63 } } @@ -133347,15 +134086,15 @@ "binop": null, "updateContext": null }, - "start": 22801, - "end": 22802, + "start": 22877, + "end": 22878, "loc": { "start": { - "line": 666, + "line": 669, "column": 63 }, "end": { - "line": 666, + "line": 669, "column": 64 } } @@ -133373,15 +134112,15 @@ "binop": null }, "value": "normals", - "start": 22802, - "end": 22809, + "start": 22878, + "end": 22885, "loc": { "start": { - "line": 666, + "line": 669, "column": 64 }, "end": { - "line": 666, + "line": 669, "column": 71 } } @@ -133399,15 +134138,15 @@ "binop": null, "updateContext": null }, - "start": 22809, - "end": 22810, + "start": 22885, + "end": 22886, "loc": { "start": { - "line": 666, + "line": 669, "column": 71 }, "end": { - "line": 666, + "line": 669, "column": 72 } } @@ -133425,15 +134164,15 @@ "binop": null }, "value": "length", - "start": 22810, - "end": 22816, + "start": 22886, + "end": 22892, "loc": { "start": { - "line": 666, + "line": 669, "column": 72 }, "end": { - "line": 666, + "line": 669, "column": 78 } } @@ -133452,15 +134191,15 @@ "updateContext": null }, "value": "/", - "start": 22817, - "end": 22818, + "start": 22893, + "end": 22894, "loc": { "start": { - "line": 666, + "line": 669, "column": 79 }, "end": { - "line": 666, + "line": 669, "column": 80 } } @@ -133479,15 +134218,15 @@ "updateContext": null }, "value": 3, - "start": 22819, - "end": 22820, + "start": 22895, + "end": 22896, "loc": { "start": { - "line": 666, + "line": 669, "column": 81 }, "end": { - "line": 666, + "line": 669, "column": 82 } } @@ -133505,15 +134244,15 @@ "binop": null, "updateContext": null }, - "start": 22820, - "end": 22821, + "start": 22896, + "end": 22897, "loc": { "start": { - "line": 666, + "line": 669, "column": 82 }, "end": { - "line": 666, + "line": 669, "column": 83 } } @@ -133530,15 +134269,15 @@ "postfix": false, "binop": null }, - "start": 22846, - "end": 22847, + "start": 22922, + "end": 22923, "loc": { "start": { - "line": 667, + "line": 670, "column": 24 }, "end": { - "line": 667, + "line": 670, "column": 25 } } @@ -133555,15 +134294,15 @@ "postfix": false, "binop": null }, - "start": 22868, - "end": 22869, + "start": 22944, + "end": 22945, "loc": { "start": { - "line": 668, + "line": 671, "column": 20 }, "end": { - "line": 668, + "line": 671, "column": 21 } } @@ -133583,15 +134322,15 @@ "updateContext": null }, "value": "if", - "start": 22890, - "end": 22892, + "start": 22966, + "end": 22968, "loc": { "start": { - "line": 669, + "line": 672, "column": 20 }, "end": { - "line": 669, + "line": 672, "column": 22 } } @@ -133608,15 +134347,15 @@ "postfix": false, "binop": null }, - "start": 22893, - "end": 22894, + "start": 22969, + "end": 22970, "loc": { "start": { - "line": 669, + "line": 672, "column": 23 }, "end": { - "line": 669, + "line": 672, "column": 24 } } @@ -133634,15 +134373,15 @@ "binop": null }, "value": "primitive", - "start": 22894, - "end": 22903, + "start": 22970, + "end": 22979, "loc": { "start": { - "line": 669, + "line": 672, "column": 24 }, "end": { - "line": 669, + "line": 672, "column": 33 } } @@ -133660,15 +134399,15 @@ "binop": null, "updateContext": null }, - "start": 22903, - "end": 22904, + "start": 22979, + "end": 22980, "loc": { "start": { - "line": 669, + "line": 672, "column": 33 }, "end": { - "line": 669, + "line": 672, "column": 34 } } @@ -133686,15 +134425,15 @@ "binop": null }, "value": "attributes", - "start": 22904, - "end": 22914, + "start": 22980, + "end": 22990, "loc": { "start": { - "line": 669, + "line": 672, "column": 34 }, "end": { - "line": 669, + "line": 672, "column": 44 } } @@ -133712,15 +134451,15 @@ "binop": null, "updateContext": null }, - "start": 22914, - "end": 22915, + "start": 22990, + "end": 22991, "loc": { "start": { - "line": 669, + "line": 672, "column": 44 }, "end": { - "line": 669, + "line": 672, "column": 45 } } @@ -133738,15 +134477,15 @@ "binop": null }, "value": "COLOR_0", - "start": 22915, - "end": 22922, + "start": 22991, + "end": 22998, "loc": { "start": { - "line": 669, + "line": 672, "column": 45 }, "end": { - "line": 669, + "line": 672, "column": 52 } } @@ -133763,15 +134502,15 @@ "postfix": false, "binop": null }, - "start": 22922, - "end": 22923, + "start": 22998, + "end": 22999, "loc": { "start": { - "line": 669, + "line": 672, "column": 52 }, "end": { - "line": 669, + "line": 672, "column": 53 } } @@ -133788,15 +134527,15 @@ "postfix": false, "binop": null }, - "start": 22924, - "end": 22925, + "start": 23000, + "end": 23001, "loc": { "start": { - "line": 669, + "line": 672, "column": 54 }, "end": { - "line": 669, + "line": 672, "column": 55 } } @@ -133814,15 +134553,15 @@ "binop": null }, "value": "geometryCfg", - "start": 22950, - "end": 22961, + "start": 23026, + "end": 23037, "loc": { "start": { - "line": 670, + "line": 673, "column": 24 }, "end": { - "line": 670, + "line": 673, "column": 35 } } @@ -133840,15 +134579,15 @@ "binop": null, "updateContext": null }, - "start": 22961, - "end": 22962, + "start": 23037, + "end": 23038, "loc": { "start": { - "line": 670, + "line": 673, "column": 35 }, "end": { - "line": 670, + "line": 673, "column": 36 } } @@ -133866,15 +134605,15 @@ "binop": null }, "value": "colorsCompressed", - "start": 22962, - "end": 22978, + "start": 23038, + "end": 23054, "loc": { "start": { - "line": 670, + "line": 673, "column": 36 }, "end": { - "line": 670, + "line": 673, "column": 52 } } @@ -133893,15 +134632,15 @@ "updateContext": null }, "value": "=", - "start": 22979, - "end": 22980, + "start": 23055, + "end": 23056, "loc": { "start": { - "line": 670, + "line": 673, "column": 53 }, "end": { - "line": 670, + "line": 673, "column": 54 } } @@ -133919,15 +134658,15 @@ "binop": null }, "value": "primitive", - "start": 22981, - "end": 22990, + "start": 23057, + "end": 23066, "loc": { "start": { - "line": 670, + "line": 673, "column": 55 }, "end": { - "line": 670, + "line": 673, "column": 64 } } @@ -133945,15 +134684,15 @@ "binop": null, "updateContext": null }, - "start": 22990, - "end": 22991, + "start": 23066, + "end": 23067, "loc": { "start": { - "line": 670, + "line": 673, "column": 64 }, "end": { - "line": 670, + "line": 673, "column": 65 } } @@ -133971,15 +134710,15 @@ "binop": null }, "value": "attributes", - "start": 22991, - "end": 23001, + "start": 23067, + "end": 23077, "loc": { "start": { - "line": 670, + "line": 673, "column": 65 }, "end": { - "line": 670, + "line": 673, "column": 75 } } @@ -133997,15 +134736,15 @@ "binop": null, "updateContext": null }, - "start": 23001, - "end": 23002, + "start": 23077, + "end": 23078, "loc": { "start": { - "line": 670, + "line": 673, "column": 75 }, "end": { - "line": 670, + "line": 673, "column": 76 } } @@ -134023,15 +134762,15 @@ "binop": null }, "value": "COLOR_0", - "start": 23002, - "end": 23009, + "start": 23078, + "end": 23085, "loc": { "start": { - "line": 670, + "line": 673, "column": 76 }, "end": { - "line": 670, + "line": 673, "column": 83 } } @@ -134049,15 +134788,15 @@ "binop": null, "updateContext": null }, - "start": 23009, - "end": 23010, + "start": 23085, + "end": 23086, "loc": { "start": { - "line": 670, + "line": 673, "column": 83 }, "end": { - "line": 670, + "line": 673, "column": 84 } } @@ -134075,15 +134814,15 @@ "binop": null }, "value": "value", - "start": 23010, - "end": 23015, + "start": 23086, + "end": 23091, "loc": { "start": { - "line": 670, + "line": 673, "column": 84 }, "end": { - "line": 670, + "line": 673, "column": 89 } } @@ -134101,15 +134840,15 @@ "binop": null, "updateContext": null }, - "start": 23015, - "end": 23016, + "start": 23091, + "end": 23092, "loc": { "start": { - "line": 670, + "line": 673, "column": 89 }, "end": { - "line": 670, + "line": 673, "column": 90 } } @@ -134126,15 +134865,15 @@ "postfix": false, "binop": null }, - "start": 23037, - "end": 23038, + "start": 23113, + "end": 23114, "loc": { "start": { - "line": 671, + "line": 674, "column": 20 }, "end": { - "line": 671, + "line": 674, "column": 21 } } @@ -134154,15 +134893,15 @@ "updateContext": null }, "value": "if", - "start": 23059, - "end": 23061, + "start": 23135, + "end": 23137, "loc": { "start": { - "line": 672, + "line": 675, "column": 20 }, "end": { - "line": 672, + "line": 675, "column": 22 } } @@ -134179,15 +134918,15 @@ "postfix": false, "binop": null }, - "start": 23062, - "end": 23063, + "start": 23138, + "end": 23139, "loc": { "start": { - "line": 672, + "line": 675, "column": 23 }, "end": { - "line": 672, + "line": 675, "column": 24 } } @@ -134205,15 +134944,15 @@ "binop": null }, "value": "ctx", - "start": 23063, - "end": 23066, + "start": 23139, + "end": 23142, "loc": { "start": { - "line": 672, + "line": 675, "column": 24 }, "end": { - "line": 672, + "line": 675, "column": 27 } } @@ -134231,15 +134970,15 @@ "binop": null, "updateContext": null }, - "start": 23066, - "end": 23067, + "start": 23142, + "end": 23143, "loc": { "start": { - "line": 672, + "line": 675, "column": 27 }, "end": { - "line": 672, + "line": 675, "column": 28 } } @@ -134257,15 +134996,15 @@ "binop": null }, "value": "includeTextures", - "start": 23067, - "end": 23082, + "start": 23143, + "end": 23158, "loc": { "start": { - "line": 672, + "line": 675, "column": 28 }, "end": { - "line": 672, + "line": 675, "column": 43 } } @@ -134282,15 +135021,15 @@ "postfix": false, "binop": null }, - "start": 23082, - "end": 23083, + "start": 23158, + "end": 23159, "loc": { "start": { - "line": 672, + "line": 675, "column": 43 }, "end": { - "line": 672, + "line": 675, "column": 44 } } @@ -134307,15 +135046,15 @@ "postfix": false, "binop": null }, - "start": 23084, - "end": 23085, + "start": 23160, + "end": 23161, "loc": { "start": { - "line": 672, + "line": 675, "column": 45 }, "end": { - "line": 672, + "line": 675, "column": 46 } } @@ -134335,15 +135074,15 @@ "updateContext": null }, "value": "if", - "start": 23110, - "end": 23112, + "start": 23186, + "end": 23188, "loc": { "start": { - "line": 673, + "line": 676, "column": 24 }, "end": { - "line": 673, + "line": 676, "column": 26 } } @@ -134360,15 +135099,15 @@ "postfix": false, "binop": null }, - "start": 23113, - "end": 23114, + "start": 23189, + "end": 23190, "loc": { "start": { - "line": 673, + "line": 676, "column": 27 }, "end": { - "line": 673, + "line": 676, "column": 28 } } @@ -134386,15 +135125,15 @@ "binop": null }, "value": "primitive", - "start": 23114, - "end": 23123, + "start": 23190, + "end": 23199, "loc": { "start": { - "line": 673, + "line": 676, "column": 28 }, "end": { - "line": 673, + "line": 676, "column": 37 } } @@ -134412,15 +135151,15 @@ "binop": null, "updateContext": null }, - "start": 23123, - "end": 23124, + "start": 23199, + "end": 23200, "loc": { "start": { - "line": 673, + "line": 676, "column": 37 }, "end": { - "line": 673, + "line": 676, "column": 38 } } @@ -134438,15 +135177,15 @@ "binop": null }, "value": "attributes", - "start": 23124, - "end": 23134, + "start": 23200, + "end": 23210, "loc": { "start": { - "line": 673, + "line": 676, "column": 38 }, "end": { - "line": 673, + "line": 676, "column": 48 } } @@ -134464,15 +135203,15 @@ "binop": null, "updateContext": null }, - "start": 23134, - "end": 23135, + "start": 23210, + "end": 23211, "loc": { "start": { - "line": 673, + "line": 676, "column": 48 }, "end": { - "line": 673, + "line": 676, "column": 49 } } @@ -134490,15 +135229,15 @@ "binop": null }, "value": "TEXCOORD_0", - "start": 23135, - "end": 23145, + "start": 23211, + "end": 23221, "loc": { "start": { - "line": 673, + "line": 676, "column": 49 }, "end": { - "line": 673, + "line": 676, "column": 59 } } @@ -134515,15 +135254,15 @@ "postfix": false, "binop": null }, - "start": 23145, - "end": 23146, + "start": 23221, + "end": 23222, "loc": { "start": { - "line": 673, + "line": 676, "column": 59 }, "end": { - "line": 673, + "line": 676, "column": 60 } } @@ -134540,15 +135279,15 @@ "postfix": false, "binop": null }, - "start": 23147, - "end": 23148, + "start": 23223, + "end": 23224, "loc": { "start": { - "line": 673, + "line": 676, "column": 61 }, "end": { - "line": 673, + "line": 676, "column": 62 } } @@ -134566,15 +135305,15 @@ "binop": null }, "value": "geometryCfg", - "start": 23177, - "end": 23188, + "start": 23253, + "end": 23264, "loc": { "start": { - "line": 674, + "line": 677, "column": 28 }, "end": { - "line": 674, + "line": 677, "column": 39 } } @@ -134592,15 +135331,15 @@ "binop": null, "updateContext": null }, - "start": 23188, - "end": 23189, + "start": 23264, + "end": 23265, "loc": { "start": { - "line": 674, + "line": 677, "column": 39 }, "end": { - "line": 674, + "line": 677, "column": 40 } } @@ -134618,15 +135357,15 @@ "binop": null }, "value": "uvs", - "start": 23189, - "end": 23192, + "start": 23265, + "end": 23268, "loc": { "start": { - "line": 674, + "line": 677, "column": 40 }, "end": { - "line": 674, + "line": 677, "column": 43 } } @@ -134645,15 +135384,15 @@ "updateContext": null }, "value": "=", - "start": 23193, - "end": 23194, + "start": 23269, + "end": 23270, "loc": { "start": { - "line": 674, + "line": 677, "column": 44 }, "end": { - "line": 674, + "line": 677, "column": 45 } } @@ -134671,15 +135410,15 @@ "binop": null }, "value": "primitive", - "start": 23195, - "end": 23204, + "start": 23271, + "end": 23280, "loc": { "start": { - "line": 674, + "line": 677, "column": 46 }, "end": { - "line": 674, + "line": 677, "column": 55 } } @@ -134697,15 +135436,15 @@ "binop": null, "updateContext": null }, - "start": 23204, - "end": 23205, + "start": 23280, + "end": 23281, "loc": { "start": { - "line": 674, + "line": 677, "column": 55 }, "end": { - "line": 674, + "line": 677, "column": 56 } } @@ -134723,15 +135462,15 @@ "binop": null }, "value": "attributes", - "start": 23205, - "end": 23215, + "start": 23281, + "end": 23291, "loc": { "start": { - "line": 674, + "line": 677, "column": 56 }, "end": { - "line": 674, + "line": 677, "column": 66 } } @@ -134749,15 +135488,15 @@ "binop": null, "updateContext": null }, - "start": 23215, - "end": 23216, + "start": 23291, + "end": 23292, "loc": { "start": { - "line": 674, + "line": 677, "column": 66 }, "end": { - "line": 674, + "line": 677, "column": 67 } } @@ -134775,15 +135514,15 @@ "binop": null }, "value": "TEXCOORD_0", - "start": 23216, - "end": 23226, + "start": 23292, + "end": 23302, "loc": { "start": { - "line": 674, + "line": 677, "column": 67 }, "end": { - "line": 674, + "line": 677, "column": 77 } } @@ -134801,15 +135540,15 @@ "binop": null, "updateContext": null }, - "start": 23226, - "end": 23227, + "start": 23302, + "end": 23303, "loc": { "start": { - "line": 674, + "line": 677, "column": 77 }, "end": { - "line": 674, + "line": 677, "column": 78 } } @@ -134827,15 +135566,15 @@ "binop": null }, "value": "value", - "start": 23227, - "end": 23232, + "start": 23303, + "end": 23308, "loc": { "start": { - "line": 674, + "line": 677, "column": 78 }, "end": { - "line": 674, + "line": 677, "column": 83 } } @@ -134853,15 +135592,15 @@ "binop": null, "updateContext": null }, - "start": 23232, - "end": 23233, + "start": 23308, + "end": 23309, "loc": { "start": { - "line": 674, + "line": 677, "column": 83 }, "end": { - "line": 674, + "line": 677, "column": 84 } } @@ -134879,15 +135618,15 @@ "binop": null }, "value": "ctx", - "start": 23262, - "end": 23265, + "start": 23338, + "end": 23341, "loc": { "start": { - "line": 675, + "line": 678, "column": 28 }, "end": { - "line": 675, + "line": 678, "column": 31 } } @@ -134905,15 +135644,15 @@ "binop": null, "updateContext": null }, - "start": 23265, - "end": 23266, + "start": 23341, + "end": 23342, "loc": { "start": { - "line": 675, + "line": 678, "column": 31 }, "end": { - "line": 675, + "line": 678, "column": 32 } } @@ -134931,15 +135670,15 @@ "binop": null }, "value": "stats", - "start": 23266, - "end": 23271, + "start": 23342, + "end": 23347, "loc": { "start": { - "line": 675, + "line": 678, "column": 32 }, "end": { - "line": 675, + "line": 678, "column": 37 } } @@ -134957,15 +135696,15 @@ "binop": null, "updateContext": null }, - "start": 23271, - "end": 23272, + "start": 23347, + "end": 23348, "loc": { "start": { - "line": 675, + "line": 678, "column": 37 }, "end": { - "line": 675, + "line": 678, "column": 38 } } @@ -134983,15 +135722,15 @@ "binop": null }, "value": "numUVs", - "start": 23272, - "end": 23278, + "start": 23348, + "end": 23354, "loc": { "start": { - "line": 675, + "line": 678, "column": 38 }, "end": { - "line": 675, + "line": 678, "column": 44 } } @@ -135010,15 +135749,15 @@ "updateContext": null }, "value": "+=", - "start": 23279, - "end": 23281, + "start": 23355, + "end": 23357, "loc": { "start": { - "line": 675, + "line": 678, "column": 45 }, "end": { - "line": 675, + "line": 678, "column": 47 } } @@ -135036,15 +135775,15 @@ "binop": null }, "value": "geometryCfg", - "start": 23282, - "end": 23293, + "start": 23358, + "end": 23369, "loc": { "start": { - "line": 675, + "line": 678, "column": 48 }, "end": { - "line": 675, + "line": 678, "column": 59 } } @@ -135062,15 +135801,15 @@ "binop": null, "updateContext": null }, - "start": 23293, - "end": 23294, + "start": 23369, + "end": 23370, "loc": { "start": { - "line": 675, + "line": 678, "column": 59 }, "end": { - "line": 675, + "line": 678, "column": 60 } } @@ -135088,15 +135827,15 @@ "binop": null }, "value": "uvs", - "start": 23294, - "end": 23297, + "start": 23370, + "end": 23373, "loc": { "start": { - "line": 675, + "line": 678, "column": 60 }, "end": { - "line": 675, + "line": 678, "column": 63 } } @@ -135114,15 +135853,15 @@ "binop": null, "updateContext": null }, - "start": 23297, - "end": 23298, + "start": 23373, + "end": 23374, "loc": { "start": { - "line": 675, + "line": 678, "column": 63 }, "end": { - "line": 675, + "line": 678, "column": 64 } } @@ -135140,15 +135879,15 @@ "binop": null }, "value": "length", - "start": 23298, - "end": 23304, + "start": 23374, + "end": 23380, "loc": { "start": { - "line": 675, + "line": 678, "column": 64 }, "end": { - "line": 675, + "line": 678, "column": 70 } } @@ -135167,15 +135906,15 @@ "updateContext": null }, "value": "/", - "start": 23305, - "end": 23306, + "start": 23381, + "end": 23382, "loc": { "start": { - "line": 675, + "line": 678, "column": 71 }, "end": { - "line": 675, + "line": 678, "column": 72 } } @@ -135194,15 +135933,15 @@ "updateContext": null }, "value": 2, - "start": 23307, - "end": 23308, + "start": 23383, + "end": 23384, "loc": { "start": { - "line": 675, + "line": 678, "column": 73 }, "end": { - "line": 675, + "line": 678, "column": 74 } } @@ -135220,15 +135959,15 @@ "binop": null, "updateContext": null }, - "start": 23308, - "end": 23309, + "start": 23384, + "end": 23385, "loc": { "start": { - "line": 675, + "line": 678, "column": 74 }, "end": { - "line": 675, + "line": 678, "column": 75 } } @@ -135245,15 +135984,15 @@ "postfix": false, "binop": null }, - "start": 23334, - "end": 23335, + "start": 23410, + "end": 23411, "loc": { "start": { - "line": 676, + "line": 679, "column": 24 }, "end": { - "line": 676, + "line": 679, "column": 25 } } @@ -135270,15 +136009,15 @@ "postfix": false, "binop": null }, - "start": 23356, - "end": 23357, + "start": 23432, + "end": 23433, "loc": { "start": { - "line": 677, + "line": 680, "column": 20 }, "end": { - "line": 677, + "line": 680, "column": 21 } } @@ -135298,15 +136037,15 @@ "updateContext": null }, "value": "if", - "start": 23378, - "end": 23380, + "start": 23454, + "end": 23456, "loc": { "start": { - "line": 678, + "line": 681, "column": 20 }, "end": { - "line": 678, + "line": 681, "column": 22 } } @@ -135323,15 +136062,15 @@ "postfix": false, "binop": null }, - "start": 23381, - "end": 23382, + "start": 23457, + "end": 23458, "loc": { "start": { - "line": 678, + "line": 681, "column": 23 }, "end": { - "line": 678, + "line": 681, "column": 24 } } @@ -135349,15 +136088,15 @@ "binop": null }, "value": "primitive", - "start": 23382, - "end": 23391, + "start": 23458, + "end": 23467, "loc": { "start": { - "line": 678, + "line": 681, "column": 24 }, "end": { - "line": 678, + "line": 681, "column": 33 } } @@ -135375,15 +136114,15 @@ "binop": null, "updateContext": null }, - "start": 23391, - "end": 23392, + "start": 23467, + "end": 23468, "loc": { "start": { - "line": 678, + "line": 681, "column": 33 }, "end": { - "line": 678, + "line": 681, "column": 34 } } @@ -135401,15 +136140,15 @@ "binop": null }, "value": "indices", - "start": 23392, - "end": 23399, + "start": 23468, + "end": 23475, "loc": { "start": { - "line": 678, + "line": 681, "column": 34 }, "end": { - "line": 678, + "line": 681, "column": 41 } } @@ -135426,15 +136165,15 @@ "postfix": false, "binop": null }, - "start": 23399, - "end": 23400, + "start": 23475, + "end": 23476, "loc": { "start": { - "line": 678, + "line": 681, "column": 41 }, "end": { - "line": 678, + "line": 681, "column": 42 } } @@ -135451,15 +136190,15 @@ "postfix": false, "binop": null }, - "start": 23401, - "end": 23402, + "start": 23477, + "end": 23478, "loc": { "start": { - "line": 678, + "line": 681, "column": 43 }, "end": { - "line": 678, + "line": 681, "column": 44 } } @@ -135477,15 +136216,15 @@ "binop": null }, "value": "geometryCfg", - "start": 23427, - "end": 23438, + "start": 23503, + "end": 23514, "loc": { "start": { - "line": 679, + "line": 682, "column": 24 }, "end": { - "line": 679, + "line": 682, "column": 35 } } @@ -135503,15 +136242,15 @@ "binop": null, "updateContext": null }, - "start": 23438, - "end": 23439, + "start": 23514, + "end": 23515, "loc": { "start": { - "line": 679, + "line": 682, "column": 35 }, "end": { - "line": 679, + "line": 682, "column": 36 } } @@ -135529,15 +136268,15 @@ "binop": null }, "value": "indices", - "start": 23439, - "end": 23446, + "start": 23515, + "end": 23522, "loc": { "start": { - "line": 679, + "line": 682, "column": 36 }, "end": { - "line": 679, + "line": 682, "column": 43 } } @@ -135556,15 +136295,15 @@ "updateContext": null }, "value": "=", - "start": 23447, - "end": 23448, + "start": 23523, + "end": 23524, "loc": { "start": { - "line": 679, + "line": 682, "column": 44 }, "end": { - "line": 679, + "line": 682, "column": 45 } } @@ -135582,15 +136321,15 @@ "binop": null }, "value": "primitive", - "start": 23449, - "end": 23458, + "start": 23525, + "end": 23534, "loc": { "start": { - "line": 679, + "line": 682, "column": 46 }, "end": { - "line": 679, + "line": 682, "column": 55 } } @@ -135608,15 +136347,15 @@ "binop": null, "updateContext": null }, - "start": 23458, - "end": 23459, + "start": 23534, + "end": 23535, "loc": { "start": { - "line": 679, + "line": 682, "column": 55 }, "end": { - "line": 679, + "line": 682, "column": 56 } } @@ -135634,15 +136373,15 @@ "binop": null }, "value": "indices", - "start": 23459, - "end": 23466, + "start": 23535, + "end": 23542, "loc": { "start": { - "line": 679, + "line": 682, "column": 56 }, "end": { - "line": 679, + "line": 682, "column": 63 } } @@ -135660,15 +136399,15 @@ "binop": null, "updateContext": null }, - "start": 23466, - "end": 23467, + "start": 23542, + "end": 23543, "loc": { "start": { - "line": 679, + "line": 682, "column": 63 }, "end": { - "line": 679, + "line": 682, "column": 64 } } @@ -135686,15 +136425,15 @@ "binop": null }, "value": "value", - "start": 23467, - "end": 23472, + "start": 23543, + "end": 23548, "loc": { "start": { - "line": 679, + "line": 682, "column": 64 }, "end": { - "line": 679, + "line": 682, "column": 69 } } @@ -135712,15 +136451,15 @@ "binop": null, "updateContext": null }, - "start": 23472, - "end": 23473, + "start": 23548, + "end": 23549, "loc": { "start": { - "line": 679, + "line": 682, "column": 69 }, "end": { - "line": 679, + "line": 682, "column": 70 } } @@ -135740,15 +136479,15 @@ "updateContext": null }, "value": "if", - "start": 23498, - "end": 23500, + "start": 23574, + "end": 23576, "loc": { "start": { - "line": 680, + "line": 683, "column": 24 }, "end": { - "line": 680, + "line": 683, "column": 26 } } @@ -135765,15 +136504,15 @@ "postfix": false, "binop": null }, - "start": 23501, - "end": 23502, + "start": 23577, + "end": 23578, "loc": { "start": { - "line": 680, + "line": 683, "column": 27 }, "end": { - "line": 680, + "line": 683, "column": 28 } } @@ -135791,15 +136530,15 @@ "binop": null }, "value": "primitive", - "start": 23502, - "end": 23511, + "start": 23578, + "end": 23587, "loc": { "start": { - "line": 680, + "line": 683, "column": 28 }, "end": { - "line": 680, + "line": 683, "column": 37 } } @@ -135817,15 +136556,15 @@ "binop": null, "updateContext": null }, - "start": 23511, - "end": 23512, + "start": 23587, + "end": 23588, "loc": { "start": { - "line": 680, + "line": 683, "column": 37 }, "end": { - "line": 680, + "line": 683, "column": 38 } } @@ -135843,15 +136582,15 @@ "binop": null }, "value": "mode", - "start": 23512, - "end": 23516, + "start": 23588, + "end": 23592, "loc": { "start": { - "line": 680, + "line": 683, "column": 38 }, "end": { - "line": 680, + "line": 683, "column": 42 } } @@ -135870,15 +136609,15 @@ "updateContext": null }, "value": "===", - "start": 23517, - "end": 23520, + "start": 23593, + "end": 23596, "loc": { "start": { - "line": 680, + "line": 683, "column": 43 }, "end": { - "line": 680, + "line": 683, "column": 46 } } @@ -135897,15 +136636,15 @@ "updateContext": null }, "value": 4, - "start": 23521, - "end": 23522, + "start": 23597, + "end": 23598, "loc": { "start": { - "line": 680, + "line": 683, "column": 47 }, "end": { - "line": 680, + "line": 683, "column": 48 } } @@ -135922,15 +136661,15 @@ "postfix": false, "binop": null }, - "start": 23522, - "end": 23523, + "start": 23598, + "end": 23599, "loc": { "start": { - "line": 680, + "line": 683, "column": 48 }, "end": { - "line": 680, + "line": 683, "column": 49 } } @@ -135947,15 +136686,15 @@ "postfix": false, "binop": null }, - "start": 23524, - "end": 23525, + "start": 23600, + "end": 23601, "loc": { "start": { - "line": 680, + "line": 683, "column": 50 }, "end": { - "line": 680, + "line": 683, "column": 51 } } @@ -135973,15 +136712,15 @@ "binop": null }, "value": "ctx", - "start": 23554, - "end": 23557, + "start": 23630, + "end": 23633, "loc": { "start": { - "line": 681, + "line": 684, "column": 28 }, "end": { - "line": 681, + "line": 684, "column": 31 } } @@ -135999,15 +136738,15 @@ "binop": null, "updateContext": null }, - "start": 23557, - "end": 23558, + "start": 23633, + "end": 23634, "loc": { "start": { - "line": 681, + "line": 684, "column": 31 }, "end": { - "line": 681, + "line": 684, "column": 32 } } @@ -136025,15 +136764,15 @@ "binop": null }, "value": "stats", - "start": 23558, - "end": 23563, + "start": 23634, + "end": 23639, "loc": { "start": { - "line": 681, + "line": 684, "column": 32 }, "end": { - "line": 681, + "line": 684, "column": 37 } } @@ -136051,15 +136790,15 @@ "binop": null, "updateContext": null }, - "start": 23563, - "end": 23564, + "start": 23639, + "end": 23640, "loc": { "start": { - "line": 681, + "line": 684, "column": 37 }, "end": { - "line": 681, + "line": 684, "column": 38 } } @@ -136077,15 +136816,15 @@ "binop": null }, "value": "numTriangles", - "start": 23564, - "end": 23576, + "start": 23640, + "end": 23652, "loc": { "start": { - "line": 681, + "line": 684, "column": 38 }, "end": { - "line": 681, + "line": 684, "column": 50 } } @@ -136104,15 +136843,15 @@ "updateContext": null }, "value": "+=", - "start": 23577, - "end": 23579, + "start": 23653, + "end": 23655, "loc": { "start": { - "line": 681, + "line": 684, "column": 51 }, "end": { - "line": 681, + "line": 684, "column": 53 } } @@ -136130,15 +136869,15 @@ "binop": null }, "value": "geometryCfg", - "start": 23580, - "end": 23591, + "start": 23656, + "end": 23667, "loc": { "start": { - "line": 681, + "line": 684, "column": 54 }, "end": { - "line": 681, + "line": 684, "column": 65 } } @@ -136156,15 +136895,15 @@ "binop": null, "updateContext": null }, - "start": 23591, - "end": 23592, + "start": 23667, + "end": 23668, "loc": { "start": { - "line": 681, + "line": 684, "column": 65 }, "end": { - "line": 681, + "line": 684, "column": 66 } } @@ -136182,15 +136921,15 @@ "binop": null }, "value": "indices", - "start": 23592, - "end": 23599, + "start": 23668, + "end": 23675, "loc": { "start": { - "line": 681, + "line": 684, "column": 66 }, "end": { - "line": 681, + "line": 684, "column": 73 } } @@ -136208,15 +136947,15 @@ "binop": null, "updateContext": null }, - "start": 23599, - "end": 23600, + "start": 23675, + "end": 23676, "loc": { "start": { - "line": 681, + "line": 684, "column": 73 }, "end": { - "line": 681, + "line": 684, "column": 74 } } @@ -136234,15 +136973,15 @@ "binop": null }, "value": "length", - "start": 23600, - "end": 23606, + "start": 23676, + "end": 23682, "loc": { "start": { - "line": 681, + "line": 684, "column": 74 }, "end": { - "line": 681, + "line": 684, "column": 80 } } @@ -136261,15 +137000,15 @@ "updateContext": null }, "value": "/", - "start": 23607, - "end": 23608, + "start": 23683, + "end": 23684, "loc": { "start": { - "line": 681, + "line": 684, "column": 81 }, "end": { - "line": 681, + "line": 684, "column": 82 } } @@ -136288,15 +137027,15 @@ "updateContext": null }, "value": 3, - "start": 23609, - "end": 23610, + "start": 23685, + "end": 23686, "loc": { "start": { - "line": 681, + "line": 684, "column": 83 }, "end": { - "line": 681, + "line": 684, "column": 84 } } @@ -136314,15 +137053,15 @@ "binop": null, "updateContext": null }, - "start": 23610, - "end": 23611, + "start": 23686, + "end": 23687, "loc": { "start": { - "line": 681, + "line": 684, "column": 84 }, "end": { - "line": 681, + "line": 684, "column": 85 } } @@ -136339,15 +137078,15 @@ "postfix": false, "binop": null }, - "start": 23636, - "end": 23637, + "start": 23712, + "end": 23713, "loc": { "start": { - "line": 682, + "line": 685, "column": 24 }, "end": { - "line": 682, + "line": 685, "column": 25 } } @@ -136364,15 +137103,15 @@ "postfix": false, "binop": null }, - "start": 23658, - "end": 23659, + "start": 23734, + "end": 23735, "loc": { "start": { - "line": 683, + "line": 686, "column": 20 }, "end": { - "line": 683, + "line": 686, "column": 21 } } @@ -136390,15 +137129,15 @@ "binop": null }, "value": "ctx", - "start": 23680, - "end": 23683, + "start": 23756, + "end": 23759, "loc": { "start": { - "line": 684, + "line": 687, "column": 20 }, "end": { - "line": 684, + "line": 687, "column": 23 } } @@ -136416,15 +137155,15 @@ "binop": null, "updateContext": null }, - "start": 23683, - "end": 23684, + "start": 23759, + "end": 23760, "loc": { "start": { - "line": 684, + "line": 687, "column": 23 }, "end": { - "line": 684, + "line": 687, "column": 24 } } @@ -136442,15 +137181,15 @@ "binop": null }, "value": "xktModel", - "start": 23684, - "end": 23692, + "start": 23760, + "end": 23768, "loc": { "start": { - "line": 684, + "line": 687, "column": 24 }, "end": { - "line": 684, + "line": 687, "column": 32 } } @@ -136468,15 +137207,15 @@ "binop": null, "updateContext": null }, - "start": 23692, - "end": 23693, + "start": 23768, + "end": 23769, "loc": { "start": { - "line": 684, + "line": 687, "column": 32 }, "end": { - "line": 684, + "line": 687, "column": 33 } } @@ -136494,15 +137233,15 @@ "binop": null }, "value": "createGeometry", - "start": 23693, - "end": 23707, + "start": 23769, + "end": 23783, "loc": { "start": { - "line": 684, + "line": 687, "column": 33 }, "end": { - "line": 684, + "line": 687, "column": 47 } } @@ -136519,15 +137258,15 @@ "postfix": false, "binop": null }, - "start": 23707, - "end": 23708, + "start": 23783, + "end": 23784, "loc": { "start": { - "line": 684, + "line": 687, "column": 47 }, "end": { - "line": 684, + "line": 687, "column": 48 } } @@ -136545,15 +137284,15 @@ "binop": null }, "value": "geometryCfg", - "start": 23708, - "end": 23719, + "start": 23784, + "end": 23795, "loc": { "start": { - "line": 684, + "line": 687, "column": 48 }, "end": { - "line": 684, + "line": 687, "column": 59 } } @@ -136570,15 +137309,15 @@ "postfix": false, "binop": null }, - "start": 23719, - "end": 23720, + "start": 23795, + "end": 23796, "loc": { "start": { - "line": 684, + "line": 687, "column": 59 }, "end": { - "line": 684, + "line": 687, "column": 60 } } @@ -136596,15 +137335,15 @@ "binop": null, "updateContext": null }, - "start": 23720, - "end": 23721, + "start": 23796, + "end": 23797, "loc": { "start": { - "line": 684, + "line": 687, "column": 60 }, "end": { - "line": 684, + "line": 687, "column": 61 } } @@ -136622,15 +137361,15 @@ "binop": null }, "value": "ctx", - "start": 23742, - "end": 23745, + "start": 23818, + "end": 23821, "loc": { "start": { - "line": 685, + "line": 688, "column": 20 }, "end": { - "line": 685, + "line": 688, "column": 23 } } @@ -136648,15 +137387,15 @@ "binop": null, "updateContext": null }, - "start": 23745, - "end": 23746, + "start": 23821, + "end": 23822, "loc": { "start": { - "line": 685, + "line": 688, "column": 23 }, "end": { - "line": 685, + "line": 688, "column": 24 } } @@ -136674,15 +137413,15 @@ "binop": null }, "value": "geometriesCreated", - "start": 23746, - "end": 23763, + "start": 23822, + "end": 23839, "loc": { "start": { - "line": 685, + "line": 688, "column": 24 }, "end": { - "line": 685, + "line": 688, "column": 41 } } @@ -136700,15 +137439,15 @@ "binop": null, "updateContext": null }, - "start": 23763, - "end": 23764, + "start": 23839, + "end": 23840, "loc": { "start": { - "line": 685, + "line": 688, "column": 41 }, "end": { - "line": 685, + "line": 688, "column": 42 } } @@ -136726,15 +137465,15 @@ "binop": null }, "value": "geometryId", - "start": 23764, - "end": 23774, + "start": 23840, + "end": 23850, "loc": { "start": { - "line": 685, + "line": 688, "column": 42 }, "end": { - "line": 685, + "line": 688, "column": 52 } } @@ -136752,15 +137491,15 @@ "binop": null, "updateContext": null }, - "start": 23774, - "end": 23775, + "start": 23850, + "end": 23851, "loc": { "start": { - "line": 685, + "line": 688, "column": 52 }, "end": { - "line": 685, + "line": 688, "column": 53 } } @@ -136779,15 +137518,15 @@ "updateContext": null }, "value": "=", - "start": 23776, - "end": 23777, + "start": 23852, + "end": 23853, "loc": { "start": { - "line": 685, + "line": 688, "column": 54 }, "end": { - "line": 685, + "line": 688, "column": 55 } } @@ -136807,15 +137546,15 @@ "updateContext": null }, "value": "true", - "start": 23778, - "end": 23782, + "start": 23854, + "end": 23858, "loc": { "start": { - "line": 685, + "line": 688, "column": 56 }, "end": { - "line": 685, + "line": 688, "column": 60 } } @@ -136833,15 +137572,15 @@ "binop": null, "updateContext": null }, - "start": 23782, - "end": 23783, + "start": 23858, + "end": 23859, "loc": { "start": { - "line": 685, + "line": 688, "column": 60 }, "end": { - "line": 685, + "line": 688, "column": 61 } } @@ -136859,15 +137598,15 @@ "binop": null }, "value": "ctx", - "start": 23804, - "end": 23807, + "start": 23880, + "end": 23883, "loc": { "start": { - "line": 686, + "line": 689, "column": 20 }, "end": { - "line": 686, + "line": 689, "column": 23 } } @@ -136885,15 +137624,15 @@ "binop": null, "updateContext": null }, - "start": 23807, - "end": 23808, + "start": 23883, + "end": 23884, "loc": { "start": { - "line": 686, + "line": 689, "column": 23 }, "end": { - "line": 686, + "line": 689, "column": 24 } } @@ -136911,15 +137650,15 @@ "binop": null }, "value": "stats", - "start": 23808, - "end": 23813, + "start": 23884, + "end": 23889, "loc": { "start": { - "line": 686, + "line": 689, "column": 24 }, "end": { - "line": 686, + "line": 689, "column": 29 } } @@ -136937,15 +137676,15 @@ "binop": null, "updateContext": null }, - "start": 23813, - "end": 23814, + "start": 23889, + "end": 23890, "loc": { "start": { - "line": 686, + "line": 689, "column": 29 }, "end": { - "line": 686, + "line": 689, "column": 30 } } @@ -136963,15 +137702,15 @@ "binop": null }, "value": "numGeometries", - "start": 23814, - "end": 23827, + "start": 23890, + "end": 23903, "loc": { "start": { - "line": 686, + "line": 689, "column": 30 }, "end": { - "line": 686, + "line": 689, "column": 43 } } @@ -136989,15 +137728,15 @@ "binop": null }, "value": "++", - "start": 23827, - "end": 23829, + "start": 23903, + "end": 23905, "loc": { "start": { - "line": 686, + "line": 689, "column": 43 }, "end": { - "line": 686, + "line": 689, "column": 45 } } @@ -137015,15 +137754,15 @@ "binop": null, "updateContext": null }, - "start": 23829, - "end": 23830, + "start": 23905, + "end": 23906, "loc": { "start": { - "line": 686, + "line": 689, "column": 45 }, "end": { - "line": 686, + "line": 689, "column": 46 } } @@ -137040,15 +137779,15 @@ "postfix": false, "binop": null }, - "start": 23847, - "end": 23848, + "start": 23923, + "end": 23924, "loc": { "start": { - "line": 687, + "line": 690, "column": 16 }, "end": { - "line": 687, + "line": 690, "column": 17 } } @@ -137068,15 +137807,15 @@ "updateContext": null }, "value": "const", - "start": 23865, - "end": 23870, + "start": 23941, + "end": 23946, "loc": { "start": { - "line": 688, + "line": 691, "column": 16 }, "end": { - "line": 688, + "line": 691, "column": 21 } } @@ -137094,15 +137833,15 @@ "binop": null }, "value": "xktMeshId", - "start": 23871, - "end": 23880, + "start": 23947, + "end": 23956, "loc": { "start": { - "line": 688, + "line": 691, "column": 22 }, "end": { - "line": 688, + "line": 691, "column": 31 } } @@ -137121,15 +137860,15 @@ "updateContext": null }, "value": "=", - "start": 23881, - "end": 23882, + "start": 23957, + "end": 23958, "loc": { "start": { - "line": 688, + "line": 691, "column": 32 }, "end": { - "line": 688, + "line": 691, "column": 33 } } @@ -137147,15 +137886,15 @@ "binop": null }, "value": "ctx", - "start": 23883, - "end": 23886, + "start": 23959, + "end": 23962, "loc": { "start": { - "line": 688, + "line": 691, "column": 34 }, "end": { - "line": 688, + "line": 691, "column": 37 } } @@ -137173,15 +137912,15 @@ "binop": null, "updateContext": null }, - "start": 23886, - "end": 23887, + "start": 23962, + "end": 23963, "loc": { "start": { - "line": 688, + "line": 691, "column": 37 }, "end": { - "line": 688, + "line": 691, "column": 38 } } @@ -137199,15 +137938,15 @@ "binop": null }, "value": "nextId", - "start": 23887, - "end": 23893, + "start": 23963, + "end": 23969, "loc": { "start": { - "line": 688, + "line": 691, "column": 38 }, "end": { - "line": 688, + "line": 691, "column": 44 } } @@ -137225,15 +137964,15 @@ "binop": null }, "value": "++", - "start": 23893, - "end": 23895, + "start": 23969, + "end": 23971, "loc": { "start": { - "line": 688, + "line": 691, "column": 44 }, "end": { - "line": 688, + "line": 691, "column": 46 } } @@ -137251,15 +137990,15 @@ "binop": null, "updateContext": null }, - "start": 23895, - "end": 23896, + "start": 23971, + "end": 23972, "loc": { "start": { - "line": 688, + "line": 691, "column": 46 }, "end": { - "line": 688, + "line": 691, "column": 47 } } @@ -137279,15 +138018,15 @@ "updateContext": null }, "value": "const", - "start": 23913, - "end": 23918, + "start": 23989, + "end": 23994, "loc": { "start": { - "line": 689, + "line": 692, "column": 16 }, "end": { - "line": 689, + "line": 692, "column": 21 } } @@ -137305,15 +138044,15 @@ "binop": null }, "value": "meshCfg", - "start": 23919, - "end": 23926, + "start": 23995, + "end": 24002, "loc": { "start": { - "line": 689, + "line": 692, "column": 22 }, "end": { - "line": 689, + "line": 692, "column": 29 } } @@ -137332,15 +138071,15 @@ "updateContext": null }, "value": "=", - "start": 23927, - "end": 23928, + "start": 24003, + "end": 24004, "loc": { "start": { - "line": 689, + "line": 692, "column": 30 }, "end": { - "line": 689, + "line": 692, "column": 31 } } @@ -137357,15 +138096,15 @@ "postfix": false, "binop": null }, - "start": 23929, - "end": 23930, + "start": 24005, + "end": 24006, "loc": { "start": { - "line": 689, + "line": 692, "column": 32 }, "end": { - "line": 689, + "line": 692, "column": 33 } } @@ -137383,15 +138122,15 @@ "binop": null }, "value": "meshId", - "start": 23951, - "end": 23957, + "start": 24027, + "end": 24033, "loc": { "start": { - "line": 690, + "line": 693, "column": 20 }, "end": { - "line": 690, + "line": 693, "column": 26 } } @@ -137409,15 +138148,15 @@ "binop": null, "updateContext": null }, - "start": 23957, - "end": 23958, + "start": 24033, + "end": 24034, "loc": { "start": { - "line": 690, + "line": 693, "column": 26 }, "end": { - "line": 690, + "line": 693, "column": 27 } } @@ -137435,15 +138174,15 @@ "binop": null }, "value": "xktMeshId", - "start": 23959, - "end": 23968, + "start": 24035, + "end": 24044, "loc": { "start": { - "line": 690, + "line": 693, "column": 28 }, "end": { - "line": 690, + "line": 693, "column": 37 } } @@ -137461,15 +138200,15 @@ "binop": null, "updateContext": null }, - "start": 23968, - "end": 23969, + "start": 24044, + "end": 24045, "loc": { "start": { - "line": 690, + "line": 693, "column": 37 }, "end": { - "line": 690, + "line": 693, "column": 38 } } @@ -137487,15 +138226,15 @@ "binop": null }, "value": "geometryId", - "start": 23990, - "end": 24000, + "start": 24066, + "end": 24076, "loc": { "start": { - "line": 691, + "line": 694, "column": 20 }, "end": { - "line": 691, + "line": 694, "column": 30 } } @@ -137513,15 +138252,15 @@ "binop": null, "updateContext": null }, - "start": 24000, - "end": 24001, + "start": 24076, + "end": 24077, "loc": { "start": { - "line": 691, + "line": 694, "column": 30 }, "end": { - "line": 691, + "line": 694, "column": 31 } } @@ -137539,15 +138278,15 @@ "binop": null }, "value": "matrix", - "start": 24022, - "end": 24028, + "start": 24098, + "end": 24104, "loc": { "start": { - "line": 692, + "line": 695, "column": 20 }, "end": { - "line": 692, + "line": 695, "column": 26 } } @@ -137565,15 +138304,15 @@ "binop": null, "updateContext": null }, - "start": 24028, - "end": 24029, + "start": 24104, + "end": 24105, "loc": { "start": { - "line": 692, + "line": 695, "column": 26 }, "end": { - "line": 692, + "line": 695, "column": 27 } } @@ -137591,15 +138330,15 @@ "binop": null }, "value": "matrix", - "start": 24030, - "end": 24036, + "start": 24106, + "end": 24112, "loc": { "start": { - "line": 692, + "line": 695, "column": 28 }, "end": { - "line": 692, + "line": 695, "column": 34 } } @@ -137617,15 +138356,15 @@ "binop": null, "updateContext": null }, - "start": 24037, - "end": 24038, + "start": 24113, + "end": 24114, "loc": { "start": { - "line": 692, + "line": 695, "column": 35 }, "end": { - "line": 692, + "line": 695, "column": 36 } } @@ -137643,15 +138382,15 @@ "binop": null }, "value": "matrix", - "start": 24039, - "end": 24045, + "start": 24115, + "end": 24121, "loc": { "start": { - "line": 692, + "line": 695, "column": 37 }, "end": { - "line": 692, + "line": 695, "column": 43 } } @@ -137669,15 +138408,15 @@ "binop": null, "updateContext": null }, - "start": 24045, - "end": 24046, + "start": 24121, + "end": 24122, "loc": { "start": { - "line": 692, + "line": 695, "column": 43 }, "end": { - "line": 692, + "line": 695, "column": 44 } } @@ -137695,15 +138434,15 @@ "binop": null }, "value": "slice", - "start": 24046, - "end": 24051, + "start": 24122, + "end": 24127, "loc": { "start": { - "line": 692, + "line": 695, "column": 44 }, "end": { - "line": 692, + "line": 695, "column": 49 } } @@ -137720,15 +138459,15 @@ "postfix": false, "binop": null }, - "start": 24051, - "end": 24052, + "start": 24127, + "end": 24128, "loc": { "start": { - "line": 692, + "line": 695, "column": 49 }, "end": { - "line": 692, + "line": 695, "column": 50 } } @@ -137745,15 +138484,15 @@ "postfix": false, "binop": null }, - "start": 24052, - "end": 24053, + "start": 24128, + "end": 24129, "loc": { "start": { - "line": 692, + "line": 695, "column": 50 }, "end": { - "line": 692, + "line": 695, "column": 51 } } @@ -137771,15 +138510,15 @@ "binop": null, "updateContext": null }, - "start": 24054, - "end": 24055, + "start": 24130, + "end": 24131, "loc": { "start": { - "line": 692, + "line": 695, "column": 52 }, "end": { - "line": 692, + "line": 695, "column": 53 } } @@ -137797,15 +138536,15 @@ "binop": null }, "value": "math", - "start": 24056, - "end": 24060, + "start": 24132, + "end": 24136, "loc": { "start": { - "line": 692, + "line": 695, "column": 54 }, "end": { - "line": 692, + "line": 695, "column": 58 } } @@ -137823,15 +138562,15 @@ "binop": null, "updateContext": null }, - "start": 24060, - "end": 24061, + "start": 24136, + "end": 24137, "loc": { "start": { - "line": 692, + "line": 695, "column": 58 }, "end": { - "line": 692, + "line": 695, "column": 59 } } @@ -137849,15 +138588,15 @@ "binop": null }, "value": "identityMat4", - "start": 24061, - "end": 24073, + "start": 24137, + "end": 24149, "loc": { "start": { - "line": 692, + "line": 695, "column": 59 }, "end": { - "line": 692, + "line": 695, "column": 71 } } @@ -137874,15 +138613,15 @@ "postfix": false, "binop": null }, - "start": 24073, - "end": 24074, + "start": 24149, + "end": 24150, "loc": { "start": { - "line": 692, + "line": 695, "column": 71 }, "end": { - "line": 692, + "line": 695, "column": 72 } } @@ -137899,15 +138638,15 @@ "postfix": false, "binop": null }, - "start": 24074, - "end": 24075, + "start": 24150, + "end": 24151, "loc": { "start": { - "line": 692, + "line": 695, "column": 72 }, "end": { - "line": 692, + "line": 695, "column": 73 } } @@ -137924,15 +138663,15 @@ "postfix": false, "binop": null }, - "start": 24092, - "end": 24093, + "start": 24168, + "end": 24169, "loc": { "start": { - "line": 693, + "line": 696, "column": 16 }, "end": { - "line": 693, + "line": 696, "column": 17 } } @@ -137950,15 +138689,15 @@ "binop": null, "updateContext": null }, - "start": 24093, - "end": 24094, + "start": 24169, + "end": 24170, "loc": { "start": { - "line": 693, + "line": 696, "column": 17 }, "end": { - "line": 693, + "line": 696, "column": 18 } } @@ -137978,15 +138717,15 @@ "updateContext": null }, "value": "const", - "start": 24111, - "end": 24116, + "start": 24187, + "end": 24192, "loc": { "start": { - "line": 694, + "line": 697, "column": 16 }, "end": { - "line": 694, + "line": 697, "column": 21 } } @@ -138004,15 +138743,15 @@ "binop": null }, "value": "material", - "start": 24117, - "end": 24125, + "start": 24193, + "end": 24201, "loc": { "start": { - "line": 694, + "line": 697, "column": 22 }, "end": { - "line": 694, + "line": 697, "column": 30 } } @@ -138031,15 +138770,15 @@ "updateContext": null }, "value": "=", - "start": 24126, - "end": 24127, + "start": 24202, + "end": 24203, "loc": { "start": { - "line": 694, + "line": 697, "column": 31 }, "end": { - "line": 694, + "line": 697, "column": 32 } } @@ -138057,15 +138796,15 @@ "binop": null }, "value": "primitive", - "start": 24128, - "end": 24137, + "start": 24204, + "end": 24213, "loc": { "start": { - "line": 694, + "line": 697, "column": 33 }, "end": { - "line": 694, + "line": 697, "column": 42 } } @@ -138083,15 +138822,15 @@ "binop": null, "updateContext": null }, - "start": 24137, - "end": 24138, + "start": 24213, + "end": 24214, "loc": { "start": { - "line": 694, + "line": 697, "column": 42 }, "end": { - "line": 694, + "line": 697, "column": 43 } } @@ -138109,15 +138848,15 @@ "binop": null }, "value": "material", - "start": 24138, - "end": 24146, + "start": 24214, + "end": 24222, "loc": { "start": { - "line": 694, + "line": 697, "column": 43 }, "end": { - "line": 694, + "line": 697, "column": 51 } } @@ -138135,15 +138874,15 @@ "binop": null, "updateContext": null }, - "start": 24146, - "end": 24147, + "start": 24222, + "end": 24223, "loc": { "start": { - "line": 694, + "line": 697, "column": 51 }, "end": { - "line": 694, + "line": 697, "column": 52 } } @@ -138163,15 +138902,15 @@ "updateContext": null }, "value": "if", - "start": 24164, - "end": 24166, + "start": 24240, + "end": 24242, "loc": { "start": { - "line": 695, + "line": 698, "column": 16 }, "end": { - "line": 695, + "line": 698, "column": 18 } } @@ -138188,15 +138927,15 @@ "postfix": false, "binop": null }, - "start": 24167, - "end": 24168, + "start": 24243, + "end": 24244, "loc": { "start": { - "line": 695, + "line": 698, "column": 19 }, "end": { - "line": 695, + "line": 698, "column": 20 } } @@ -138214,15 +138953,15 @@ "binop": null }, "value": "material", - "start": 24168, - "end": 24176, + "start": 24244, + "end": 24252, "loc": { "start": { - "line": 695, + "line": 698, "column": 20 }, "end": { - "line": 695, + "line": 698, "column": 28 } } @@ -138239,15 +138978,15 @@ "postfix": false, "binop": null }, - "start": 24176, - "end": 24177, + "start": 24252, + "end": 24253, "loc": { "start": { - "line": 695, + "line": 698, "column": 28 }, "end": { - "line": 695, + "line": 698, "column": 29 } } @@ -138264,15 +139003,15 @@ "postfix": false, "binop": null }, - "start": 24178, - "end": 24179, + "start": 24254, + "end": 24255, "loc": { "start": { - "line": 695, + "line": 698, "column": 30 }, "end": { - "line": 695, + "line": 698, "column": 31 } } @@ -138290,15 +139029,15 @@ "binop": null }, "value": "meshCfg", - "start": 24200, - "end": 24207, + "start": 24276, + "end": 24283, "loc": { "start": { - "line": 696, + "line": 699, "column": 20 }, "end": { - "line": 696, + "line": 699, "column": 27 } } @@ -138316,15 +139055,15 @@ "binop": null, "updateContext": null }, - "start": 24207, - "end": 24208, + "start": 24283, + "end": 24284, "loc": { "start": { - "line": 696, + "line": 699, "column": 27 }, "end": { - "line": 696, + "line": 699, "column": 28 } } @@ -138342,15 +139081,15 @@ "binop": null }, "value": "textureSetId", - "start": 24208, - "end": 24220, + "start": 24284, + "end": 24296, "loc": { "start": { - "line": 696, + "line": 699, "column": 28 }, "end": { - "line": 696, + "line": 699, "column": 40 } } @@ -138369,15 +139108,15 @@ "updateContext": null }, "value": "=", - "start": 24221, - "end": 24222, + "start": 24297, + "end": 24298, "loc": { "start": { - "line": 696, + "line": 699, "column": 41 }, "end": { - "line": 696, + "line": 699, "column": 42 } } @@ -138395,15 +139134,15 @@ "binop": null }, "value": "material", - "start": 24223, - "end": 24231, + "start": 24299, + "end": 24307, "loc": { "start": { - "line": 696, + "line": 699, "column": 43 }, "end": { - "line": 696, + "line": 699, "column": 51 } } @@ -138421,15 +139160,15 @@ "binop": null, "updateContext": null }, - "start": 24231, - "end": 24232, + "start": 24307, + "end": 24308, "loc": { "start": { - "line": 696, + "line": 699, "column": 51 }, "end": { - "line": 696, + "line": 699, "column": 52 } } @@ -138447,15 +139186,15 @@ "binop": null }, "value": "_textureSetId", - "start": 24232, - "end": 24245, + "start": 24308, + "end": 24321, "loc": { "start": { - "line": 696, + "line": 699, "column": 52 }, "end": { - "line": 696, + "line": 699, "column": 65 } } @@ -138473,15 +139212,15 @@ "binop": null, "updateContext": null }, - "start": 24245, - "end": 24246, + "start": 24321, + "end": 24322, "loc": { "start": { - "line": 696, + "line": 699, "column": 65 }, "end": { - "line": 696, + "line": 699, "column": 66 } } @@ -138499,15 +139238,15 @@ "binop": null }, "value": "meshCfg", - "start": 24267, - "end": 24274, + "start": 24343, + "end": 24350, "loc": { "start": { - "line": 697, + "line": 700, "column": 20 }, "end": { - "line": 697, + "line": 700, "column": 27 } } @@ -138525,15 +139264,15 @@ "binop": null, "updateContext": null }, - "start": 24274, - "end": 24275, + "start": 24350, + "end": 24351, "loc": { "start": { - "line": 697, + "line": 700, "column": 27 }, "end": { - "line": 697, + "line": 700, "column": 28 } } @@ -138551,15 +139290,15 @@ "binop": null }, "value": "color", - "start": 24275, - "end": 24280, + "start": 24351, + "end": 24356, "loc": { "start": { - "line": 697, + "line": 700, "column": 28 }, "end": { - "line": 697, + "line": 700, "column": 33 } } @@ -138578,15 +139317,15 @@ "updateContext": null }, "value": "=", - "start": 24281, - "end": 24282, + "start": 24357, + "end": 24358, "loc": { "start": { - "line": 697, + "line": 700, "column": 34 }, "end": { - "line": 697, + "line": 700, "column": 35 } } @@ -138604,15 +139343,15 @@ "binop": null }, "value": "material", - "start": 24283, - "end": 24291, + "start": 24359, + "end": 24367, "loc": { "start": { - "line": 697, + "line": 700, "column": 36 }, "end": { - "line": 697, + "line": 700, "column": 44 } } @@ -138630,15 +139369,15 @@ "binop": null, "updateContext": null }, - "start": 24291, - "end": 24292, + "start": 24367, + "end": 24368, "loc": { "start": { - "line": 697, + "line": 700, "column": 44 }, "end": { - "line": 697, + "line": 700, "column": 45 } } @@ -138656,15 +139395,15 @@ "binop": null }, "value": "_attributes", - "start": 24292, - "end": 24303, + "start": 24368, + "end": 24379, "loc": { "start": { - "line": 697, + "line": 700, "column": 45 }, "end": { - "line": 697, + "line": 700, "column": 56 } } @@ -138682,15 +139421,15 @@ "binop": null, "updateContext": null }, - "start": 24303, - "end": 24304, + "start": 24379, + "end": 24380, "loc": { "start": { - "line": 697, + "line": 700, "column": 56 }, "end": { - "line": 697, + "line": 700, "column": 57 } } @@ -138708,15 +139447,15 @@ "binop": null }, "value": "color", - "start": 24304, - "end": 24309, + "start": 24380, + "end": 24385, "loc": { "start": { - "line": 697, + "line": 700, "column": 57 }, "end": { - "line": 697, + "line": 700, "column": 62 } } @@ -138734,15 +139473,15 @@ "binop": null, "updateContext": null }, - "start": 24309, - "end": 24310, + "start": 24385, + "end": 24386, "loc": { "start": { - "line": 697, + "line": 700, "column": 62 }, "end": { - "line": 697, + "line": 700, "column": 63 } } @@ -138760,15 +139499,15 @@ "binop": null }, "value": "meshCfg", - "start": 24331, - "end": 24338, + "start": 24407, + "end": 24414, "loc": { "start": { - "line": 698, + "line": 701, "column": 20 }, "end": { - "line": 698, + "line": 701, "column": 27 } } @@ -138786,15 +139525,15 @@ "binop": null, "updateContext": null }, - "start": 24338, - "end": 24339, + "start": 24414, + "end": 24415, "loc": { "start": { - "line": 698, + "line": 701, "column": 27 }, "end": { - "line": 698, + "line": 701, "column": 28 } } @@ -138812,15 +139551,15 @@ "binop": null }, "value": "opacity", - "start": 24339, - "end": 24346, + "start": 24415, + "end": 24422, "loc": { "start": { - "line": 698, + "line": 701, "column": 28 }, "end": { - "line": 698, + "line": 701, "column": 35 } } @@ -138839,15 +139578,15 @@ "updateContext": null }, "value": "=", - "start": 24347, - "end": 24348, + "start": 24423, + "end": 24424, "loc": { "start": { - "line": 698, + "line": 701, "column": 36 }, "end": { - "line": 698, + "line": 701, "column": 37 } } @@ -138865,15 +139604,15 @@ "binop": null }, "value": "material", - "start": 24349, - "end": 24357, + "start": 24425, + "end": 24433, "loc": { "start": { - "line": 698, + "line": 701, "column": 38 }, "end": { - "line": 698, + "line": 701, "column": 46 } } @@ -138891,15 +139630,15 @@ "binop": null, "updateContext": null }, - "start": 24357, - "end": 24358, + "start": 24433, + "end": 24434, "loc": { "start": { - "line": 698, + "line": 701, "column": 46 }, "end": { - "line": 698, + "line": 701, "column": 47 } } @@ -138917,15 +139656,15 @@ "binop": null }, "value": "_attributes", - "start": 24358, - "end": 24369, + "start": 24434, + "end": 24445, "loc": { "start": { - "line": 698, + "line": 701, "column": 47 }, "end": { - "line": 698, + "line": 701, "column": 58 } } @@ -138943,15 +139682,15 @@ "binop": null, "updateContext": null }, - "start": 24369, - "end": 24370, + "start": 24445, + "end": 24446, "loc": { "start": { - "line": 698, + "line": 701, "column": 58 }, "end": { - "line": 698, + "line": 701, "column": 59 } } @@ -138969,15 +139708,15 @@ "binop": null }, "value": "opacity", - "start": 24370, - "end": 24377, + "start": 24446, + "end": 24453, "loc": { "start": { - "line": 698, + "line": 701, "column": 59 }, "end": { - "line": 698, + "line": 701, "column": 66 } } @@ -138995,15 +139734,15 @@ "binop": null, "updateContext": null }, - "start": 24377, - "end": 24378, + "start": 24453, + "end": 24454, "loc": { "start": { - "line": 698, + "line": 701, "column": 66 }, "end": { - "line": 698, + "line": 701, "column": 67 } } @@ -139021,15 +139760,15 @@ "binop": null }, "value": "meshCfg", - "start": 24399, - "end": 24406, + "start": 24475, + "end": 24482, "loc": { "start": { - "line": 699, + "line": 702, "column": 20 }, "end": { - "line": 699, + "line": 702, "column": 27 } } @@ -139047,15 +139786,15 @@ "binop": null, "updateContext": null }, - "start": 24406, - "end": 24407, + "start": 24482, + "end": 24483, "loc": { "start": { - "line": 699, + "line": 702, "column": 27 }, "end": { - "line": 699, + "line": 702, "column": 28 } } @@ -139073,15 +139812,15 @@ "binop": null }, "value": "metallic", - "start": 24407, - "end": 24415, + "start": 24483, + "end": 24491, "loc": { "start": { - "line": 699, + "line": 702, "column": 28 }, "end": { - "line": 699, + "line": 702, "column": 36 } } @@ -139100,15 +139839,15 @@ "updateContext": null }, "value": "=", - "start": 24416, - "end": 24417, + "start": 24492, + "end": 24493, "loc": { "start": { - "line": 699, + "line": 702, "column": 37 }, "end": { - "line": 699, + "line": 702, "column": 38 } } @@ -139126,15 +139865,15 @@ "binop": null }, "value": "material", - "start": 24418, - "end": 24426, + "start": 24494, + "end": 24502, "loc": { "start": { - "line": 699, + "line": 702, "column": 39 }, "end": { - "line": 699, + "line": 702, "column": 47 } } @@ -139152,15 +139891,15 @@ "binop": null, "updateContext": null }, - "start": 24426, - "end": 24427, + "start": 24502, + "end": 24503, "loc": { "start": { - "line": 699, + "line": 702, "column": 47 }, "end": { - "line": 699, + "line": 702, "column": 48 } } @@ -139178,15 +139917,15 @@ "binop": null }, "value": "_attributes", - "start": 24427, - "end": 24438, + "start": 24503, + "end": 24514, "loc": { "start": { - "line": 699, + "line": 702, "column": 48 }, "end": { - "line": 699, + "line": 702, "column": 59 } } @@ -139204,15 +139943,15 @@ "binop": null, "updateContext": null }, - "start": 24438, - "end": 24439, + "start": 24514, + "end": 24515, "loc": { "start": { - "line": 699, + "line": 702, "column": 59 }, "end": { - "line": 699, + "line": 702, "column": 60 } } @@ -139230,15 +139969,15 @@ "binop": null }, "value": "metallic", - "start": 24439, - "end": 24447, + "start": 24515, + "end": 24523, "loc": { "start": { - "line": 699, + "line": 702, "column": 60 }, "end": { - "line": 699, + "line": 702, "column": 68 } } @@ -139256,15 +139995,15 @@ "binop": null, "updateContext": null }, - "start": 24447, - "end": 24448, + "start": 24523, + "end": 24524, "loc": { "start": { - "line": 699, + "line": 702, "column": 68 }, "end": { - "line": 699, + "line": 702, "column": 69 } } @@ -139282,15 +140021,15 @@ "binop": null }, "value": "meshCfg", - "start": 24469, - "end": 24476, + "start": 24545, + "end": 24552, "loc": { "start": { - "line": 700, + "line": 703, "column": 20 }, "end": { - "line": 700, + "line": 703, "column": 27 } } @@ -139308,15 +140047,15 @@ "binop": null, "updateContext": null }, - "start": 24476, - "end": 24477, + "start": 24552, + "end": 24553, "loc": { "start": { - "line": 700, + "line": 703, "column": 27 }, "end": { - "line": 700, + "line": 703, "column": 28 } } @@ -139334,15 +140073,15 @@ "binop": null }, "value": "roughness", - "start": 24477, - "end": 24486, + "start": 24553, + "end": 24562, "loc": { "start": { - "line": 700, + "line": 703, "column": 28 }, "end": { - "line": 700, + "line": 703, "column": 37 } } @@ -139361,15 +140100,15 @@ "updateContext": null }, "value": "=", - "start": 24487, - "end": 24488, + "start": 24563, + "end": 24564, "loc": { "start": { - "line": 700, + "line": 703, "column": 38 }, "end": { - "line": 700, + "line": 703, "column": 39 } } @@ -139387,15 +140126,15 @@ "binop": null }, "value": "material", - "start": 24489, - "end": 24497, + "start": 24565, + "end": 24573, "loc": { "start": { - "line": 700, + "line": 703, "column": 40 }, "end": { - "line": 700, + "line": 703, "column": 48 } } @@ -139413,15 +140152,15 @@ "binop": null, "updateContext": null }, - "start": 24497, - "end": 24498, + "start": 24573, + "end": 24574, "loc": { "start": { - "line": 700, + "line": 703, "column": 48 }, "end": { - "line": 700, + "line": 703, "column": 49 } } @@ -139439,15 +140178,15 @@ "binop": null }, "value": "_attributes", - "start": 24498, - "end": 24509, + "start": 24574, + "end": 24585, "loc": { "start": { - "line": 700, + "line": 703, "column": 49 }, "end": { - "line": 700, + "line": 703, "column": 60 } } @@ -139465,15 +140204,15 @@ "binop": null, "updateContext": null }, - "start": 24509, - "end": 24510, + "start": 24585, + "end": 24586, "loc": { "start": { - "line": 700, + "line": 703, "column": 60 }, "end": { - "line": 700, + "line": 703, "column": 61 } } @@ -139491,15 +140230,15 @@ "binop": null }, "value": "roughness", - "start": 24510, - "end": 24519, + "start": 24586, + "end": 24595, "loc": { "start": { - "line": 700, + "line": 703, "column": 61 }, "end": { - "line": 700, + "line": 703, "column": 70 } } @@ -139517,15 +140256,15 @@ "binop": null, "updateContext": null }, - "start": 24519, - "end": 24520, + "start": 24595, + "end": 24596, "loc": { "start": { - "line": 700, + "line": 703, "column": 70 }, "end": { - "line": 700, + "line": 703, "column": 71 } } @@ -139542,15 +140281,15 @@ "postfix": false, "binop": null }, - "start": 24537, - "end": 24538, + "start": 24613, + "end": 24614, "loc": { "start": { - "line": 701, + "line": 704, "column": 16 }, "end": { - "line": 701, + "line": 704, "column": 17 } } @@ -139570,15 +140309,15 @@ "updateContext": null }, "value": "else", - "start": 24539, - "end": 24543, + "start": 24615, + "end": 24619, "loc": { "start": { - "line": 701, + "line": 704, "column": 18 }, "end": { - "line": 701, + "line": 704, "column": 22 } } @@ -139595,15 +140334,15 @@ "postfix": false, "binop": null }, - "start": 24544, - "end": 24545, + "start": 24620, + "end": 24621, "loc": { "start": { - "line": 701, + "line": 704, "column": 23 }, "end": { - "line": 701, + "line": 704, "column": 24 } } @@ -139621,15 +140360,15 @@ "binop": null }, "value": "meshCfg", - "start": 24566, - "end": 24573, + "start": 24642, + "end": 24649, "loc": { "start": { - "line": 702, + "line": 705, "column": 20 }, "end": { - "line": 702, + "line": 705, "column": 27 } } @@ -139647,15 +140386,15 @@ "binop": null, "updateContext": null }, - "start": 24573, - "end": 24574, + "start": 24649, + "end": 24650, "loc": { "start": { - "line": 702, + "line": 705, "column": 27 }, "end": { - "line": 702, + "line": 705, "column": 28 } } @@ -139673,15 +140412,15 @@ "binop": null }, "value": "color", - "start": 24574, - "end": 24579, + "start": 24650, + "end": 24655, "loc": { "start": { - "line": 702, + "line": 705, "column": 28 }, "end": { - "line": 702, + "line": 705, "column": 33 } } @@ -139700,15 +140439,15 @@ "updateContext": null }, "value": "=", - "start": 24580, - "end": 24581, + "start": 24656, + "end": 24657, "loc": { "start": { - "line": 702, + "line": 705, "column": 34 }, "end": { - "line": 702, + "line": 705, "column": 35 } } @@ -139726,15 +140465,15 @@ "binop": null, "updateContext": null }, - "start": 24582, - "end": 24583, + "start": 24658, + "end": 24659, "loc": { "start": { - "line": 702, + "line": 705, "column": 36 }, "end": { - "line": 702, + "line": 705, "column": 37 } } @@ -139753,15 +140492,15 @@ "updateContext": null }, "value": 1, - "start": 24583, - "end": 24586, + "start": 24659, + "end": 24662, "loc": { "start": { - "line": 702, + "line": 705, "column": 37 }, "end": { - "line": 702, + "line": 705, "column": 40 } } @@ -139779,15 +140518,15 @@ "binop": null, "updateContext": null }, - "start": 24586, - "end": 24587, + "start": 24662, + "end": 24663, "loc": { "start": { - "line": 702, + "line": 705, "column": 40 }, "end": { - "line": 702, + "line": 705, "column": 41 } } @@ -139806,15 +140545,15 @@ "updateContext": null }, "value": 1, - "start": 24588, - "end": 24591, + "start": 24664, + "end": 24667, "loc": { "start": { - "line": 702, + "line": 705, "column": 42 }, "end": { - "line": 702, + "line": 705, "column": 45 } } @@ -139832,15 +140571,15 @@ "binop": null, "updateContext": null }, - "start": 24591, - "end": 24592, + "start": 24667, + "end": 24668, "loc": { "start": { - "line": 702, + "line": 705, "column": 45 }, "end": { - "line": 702, + "line": 705, "column": 46 } } @@ -139859,15 +140598,15 @@ "updateContext": null }, "value": 1, - "start": 24593, - "end": 24596, + "start": 24669, + "end": 24672, "loc": { "start": { - "line": 702, + "line": 705, "column": 47 }, "end": { - "line": 702, + "line": 705, "column": 50 } } @@ -139885,15 +140624,15 @@ "binop": null, "updateContext": null }, - "start": 24596, - "end": 24597, + "start": 24672, + "end": 24673, "loc": { "start": { - "line": 702, + "line": 705, "column": 50 }, "end": { - "line": 702, + "line": 705, "column": 51 } } @@ -139911,15 +140650,15 @@ "binop": null, "updateContext": null }, - "start": 24597, - "end": 24598, + "start": 24673, + "end": 24674, "loc": { "start": { - "line": 702, + "line": 705, "column": 51 }, "end": { - "line": 702, + "line": 705, "column": 52 } } @@ -139937,15 +140676,15 @@ "binop": null }, "value": "meshCfg", - "start": 24619, - "end": 24626, + "start": 24695, + "end": 24702, "loc": { "start": { - "line": 703, + "line": 706, "column": 20 }, "end": { - "line": 703, + "line": 706, "column": 27 } } @@ -139963,15 +140702,15 @@ "binop": null, "updateContext": null }, - "start": 24626, - "end": 24627, + "start": 24702, + "end": 24703, "loc": { "start": { - "line": 703, + "line": 706, "column": 27 }, "end": { - "line": 703, + "line": 706, "column": 28 } } @@ -139989,15 +140728,15 @@ "binop": null }, "value": "opacity", - "start": 24627, - "end": 24634, + "start": 24703, + "end": 24710, "loc": { "start": { - "line": 703, + "line": 706, "column": 28 }, "end": { - "line": 703, + "line": 706, "column": 35 } } @@ -140016,15 +140755,15 @@ "updateContext": null }, "value": "=", - "start": 24635, - "end": 24636, + "start": 24711, + "end": 24712, "loc": { "start": { - "line": 703, + "line": 706, "column": 36 }, "end": { - "line": 703, + "line": 706, "column": 37 } } @@ -140043,15 +140782,15 @@ "updateContext": null }, "value": 1, - "start": 24637, - "end": 24640, + "start": 24713, + "end": 24716, "loc": { "start": { - "line": 703, + "line": 706, "column": 38 }, "end": { - "line": 703, + "line": 706, "column": 41 } } @@ -140069,15 +140808,15 @@ "binop": null, "updateContext": null }, - "start": 24640, - "end": 24641, + "start": 24716, + "end": 24717, "loc": { "start": { - "line": 703, + "line": 706, "column": 41 }, "end": { - "line": 703, + "line": 706, "column": 42 } } @@ -140094,15 +140833,15 @@ "postfix": false, "binop": null }, - "start": 24658, - "end": 24659, + "start": 24734, + "end": 24735, "loc": { "start": { - "line": 704, + "line": 707, "column": 16 }, "end": { - "line": 704, + "line": 707, "column": 17 } } @@ -140120,15 +140859,15 @@ "binop": null }, "value": "ctx", - "start": 24676, - "end": 24679, + "start": 24752, + "end": 24755, "loc": { "start": { - "line": 705, + "line": 708, "column": 16 }, "end": { - "line": 705, + "line": 708, "column": 19 } } @@ -140146,15 +140885,15 @@ "binop": null, "updateContext": null }, - "start": 24679, - "end": 24680, + "start": 24755, + "end": 24756, "loc": { "start": { - "line": 705, + "line": 708, "column": 19 }, "end": { - "line": 705, + "line": 708, "column": 20 } } @@ -140172,15 +140911,15 @@ "binop": null }, "value": "xktModel", - "start": 24680, - "end": 24688, + "start": 24756, + "end": 24764, "loc": { "start": { - "line": 705, + "line": 708, "column": 20 }, "end": { - "line": 705, + "line": 708, "column": 28 } } @@ -140198,15 +140937,15 @@ "binop": null, "updateContext": null }, - "start": 24688, - "end": 24689, + "start": 24764, + "end": 24765, "loc": { "start": { - "line": 705, + "line": 708, "column": 28 }, "end": { - "line": 705, + "line": 708, "column": 29 } } @@ -140224,15 +140963,15 @@ "binop": null }, "value": "createMesh", - "start": 24689, - "end": 24699, + "start": 24765, + "end": 24775, "loc": { "start": { - "line": 705, + "line": 708, "column": 29 }, "end": { - "line": 705, + "line": 708, "column": 39 } } @@ -140249,15 +140988,15 @@ "postfix": false, "binop": null }, - "start": 24699, - "end": 24700, + "start": 24775, + "end": 24776, "loc": { "start": { - "line": 705, + "line": 708, "column": 39 }, "end": { - "line": 705, + "line": 708, "column": 40 } } @@ -140275,15 +141014,15 @@ "binop": null }, "value": "meshCfg", - "start": 24700, - "end": 24707, + "start": 24776, + "end": 24783, "loc": { "start": { - "line": 705, + "line": 708, "column": 40 }, "end": { - "line": 705, + "line": 708, "column": 47 } } @@ -140300,15 +141039,15 @@ "postfix": false, "binop": null }, - "start": 24707, - "end": 24708, + "start": 24783, + "end": 24784, "loc": { "start": { - "line": 705, + "line": 708, "column": 47 }, "end": { - "line": 705, + "line": 708, "column": 48 } } @@ -140326,15 +141065,15 @@ "binop": null, "updateContext": null }, - "start": 24708, - "end": 24709, + "start": 24784, + "end": 24785, "loc": { "start": { - "line": 705, + "line": 708, "column": 48 }, "end": { - "line": 705, + "line": 708, "column": 49 } } @@ -140352,15 +141091,15 @@ "binop": null }, "value": "meshIds", - "start": 24726, - "end": 24733, + "start": 24802, + "end": 24809, "loc": { "start": { - "line": 706, + "line": 709, "column": 16 }, "end": { - "line": 706, + "line": 709, "column": 23 } } @@ -140378,15 +141117,15 @@ "binop": null, "updateContext": null }, - "start": 24733, - "end": 24734, + "start": 24809, + "end": 24810, "loc": { "start": { - "line": 706, + "line": 709, "column": 23 }, "end": { - "line": 706, + "line": 709, "column": 24 } } @@ -140404,15 +141143,15 @@ "binop": null }, "value": "push", - "start": 24734, - "end": 24738, + "start": 24810, + "end": 24814, "loc": { "start": { - "line": 706, + "line": 709, "column": 24 }, "end": { - "line": 706, + "line": 709, "column": 28 } } @@ -140429,15 +141168,15 @@ "postfix": false, "binop": null }, - "start": 24738, - "end": 24739, + "start": 24814, + "end": 24815, "loc": { "start": { - "line": 706, + "line": 709, "column": 28 }, "end": { - "line": 706, + "line": 709, "column": 29 } } @@ -140455,15 +141194,15 @@ "binop": null }, "value": "xktMeshId", - "start": 24739, - "end": 24748, + "start": 24815, + "end": 24824, "loc": { "start": { - "line": 706, + "line": 709, "column": 29 }, "end": { - "line": 706, + "line": 709, "column": 38 } } @@ -140480,15 +141219,15 @@ "postfix": false, "binop": null }, - "start": 24748, - "end": 24749, + "start": 24824, + "end": 24825, "loc": { "start": { - "line": 706, + "line": 709, "column": 38 }, "end": { - "line": 706, + "line": 709, "column": 39 } } @@ -140506,15 +141245,15 @@ "binop": null, "updateContext": null }, - "start": 24749, - "end": 24750, + "start": 24825, + "end": 24826, "loc": { "start": { - "line": 706, + "line": 709, "column": 39 }, "end": { - "line": 706, + "line": 709, "column": 40 } } @@ -140531,15 +141270,15 @@ "postfix": false, "binop": null }, - "start": 24763, - "end": 24764, + "start": 24839, + "end": 24840, "loc": { "start": { - "line": 707, + "line": 710, "column": 12 }, "end": { - "line": 707, + "line": 710, "column": 13 } } @@ -140559,15 +141298,15 @@ "updateContext": null }, "value": "catch", - "start": 24765, - "end": 24770, + "start": 24841, + "end": 24846, "loc": { "start": { - "line": 707, + "line": 710, "column": 14 }, "end": { - "line": 707, + "line": 710, "column": 19 } } @@ -140584,15 +141323,15 @@ "postfix": false, "binop": null }, - "start": 24771, - "end": 24772, + "start": 24847, + "end": 24848, "loc": { "start": { - "line": 707, + "line": 710, "column": 20 }, "end": { - "line": 707, + "line": 710, "column": 21 } } @@ -140610,15 +141349,15 @@ "binop": null }, "value": "e", - "start": 24772, - "end": 24773, + "start": 24848, + "end": 24849, "loc": { "start": { - "line": 707, + "line": 710, "column": 21 }, "end": { - "line": 707, + "line": 710, "column": 22 } } @@ -140635,15 +141374,15 @@ "postfix": false, "binop": null }, - "start": 24773, - "end": 24774, + "start": 24849, + "end": 24850, "loc": { "start": { - "line": 707, + "line": 710, "column": 22 }, "end": { - "line": 707, + "line": 710, "column": 23 } } @@ -140660,15 +141399,15 @@ "postfix": false, "binop": null }, - "start": 24775, - "end": 24776, + "start": 24851, + "end": 24852, "loc": { "start": { - "line": 707, + "line": 710, "column": 24 }, "end": { - "line": 707, + "line": 710, "column": 25 } } @@ -140686,15 +141425,15 @@ "binop": null }, "value": "console", - "start": 24793, - "end": 24800, + "start": 24869, + "end": 24876, "loc": { "start": { - "line": 708, + "line": 711, "column": 16 }, "end": { - "line": 708, + "line": 711, "column": 23 } } @@ -140712,15 +141451,15 @@ "binop": null, "updateContext": null }, - "start": 24800, - "end": 24801, + "start": 24876, + "end": 24877, "loc": { "start": { - "line": 708, + "line": 711, "column": 23 }, "end": { - "line": 708, + "line": 711, "column": 24 } } @@ -140738,15 +141477,15 @@ "binop": null }, "value": "log", - "start": 24801, - "end": 24804, + "start": 24877, + "end": 24880, "loc": { "start": { - "line": 708, + "line": 711, "column": 24 }, "end": { - "line": 708, + "line": 711, "column": 27 } } @@ -140763,15 +141502,15 @@ "postfix": false, "binop": null }, - "start": 24804, - "end": 24805, + "start": 24880, + "end": 24881, "loc": { "start": { - "line": 708, + "line": 711, "column": 27 }, "end": { - "line": 708, + "line": 711, "column": 28 } } @@ -140789,15 +141528,15 @@ "binop": null }, "value": "e", - "start": 24805, - "end": 24806, + "start": 24881, + "end": 24882, "loc": { "start": { - "line": 708, + "line": 711, "column": 28 }, "end": { - "line": 708, + "line": 711, "column": 29 } } @@ -140814,15 +141553,15 @@ "postfix": false, "binop": null }, - "start": 24806, - "end": 24807, + "start": 24882, + "end": 24883, "loc": { "start": { - "line": 708, + "line": 711, "column": 29 }, "end": { - "line": 708, + "line": 711, "column": 30 } } @@ -140840,15 +141579,15 @@ "binop": null, "updateContext": null }, - "start": 24807, - "end": 24808, + "start": 24883, + "end": 24884, "loc": { "start": { - "line": 708, + "line": 711, "column": 30 }, "end": { - "line": 708, + "line": 711, "column": 31 } } @@ -140865,15 +141604,15 @@ "postfix": false, "binop": null }, - "start": 24821, - "end": 24822, + "start": 24897, + "end": 24898, "loc": { "start": { - "line": 709, + "line": 712, "column": 12 }, "end": { - "line": 709, + "line": 712, "column": 13 } } @@ -140890,15 +141629,15 @@ "postfix": false, "binop": null }, - "start": 24831, - "end": 24832, + "start": 24907, + "end": 24908, "loc": { "start": { - "line": 710, + "line": 713, "column": 8 }, "end": { - "line": 710, + "line": 713, "column": 9 } } @@ -140915,15 +141654,15 @@ "postfix": false, "binop": null }, - "start": 24837, - "end": 24838, + "start": 24913, + "end": 24914, "loc": { "start": { - "line": 711, + "line": 714, "column": 4 }, "end": { - "line": 711, + "line": 714, "column": 5 } } @@ -140940,15 +141679,15 @@ "postfix": false, "binop": null }, - "start": 24839, - "end": 24840, + "start": 24915, + "end": 24916, "loc": { "start": { - "line": 712, + "line": 715, "column": 0 }, "end": { - "line": 712, + "line": 715, "column": 1 } } @@ -140968,15 +141707,15 @@ "updateContext": null }, "value": "export", - "start": 24842, - "end": 24848, + "start": 24918, + "end": 24924, "loc": { "start": { - "line": 714, + "line": 717, "column": 0 }, "end": { - "line": 714, + "line": 717, "column": 6 } } @@ -140993,15 +141732,15 @@ "postfix": false, "binop": null }, - "start": 24849, - "end": 24850, + "start": 24925, + "end": 24926, "loc": { "start": { - "line": 714, + "line": 717, "column": 7 }, "end": { - "line": 714, + "line": 717, "column": 8 } } @@ -141019,15 +141758,15 @@ "binop": null }, "value": "parseGLTFIntoXKTModel", - "start": 24850, - "end": 24871, + "start": 24926, + "end": 24947, "loc": { "start": { - "line": 714, + "line": 717, "column": 8 }, "end": { - "line": 714, + "line": 717, "column": 29 } } @@ -141044,15 +141783,15 @@ "postfix": false, "binop": null }, - "start": 24871, - "end": 24872, + "start": 24947, + "end": 24948, "loc": { "start": { - "line": 714, + "line": 717, "column": 29 }, "end": { - "line": 714, + "line": 717, "column": 30 } } @@ -141070,15 +141809,15 @@ "binop": null, "updateContext": null }, - "start": 24872, - "end": 24873, + "start": 24948, + "end": 24949, "loc": { "start": { - "line": 714, + "line": 717, "column": 30 }, "end": { - "line": 714, + "line": 717, "column": 31 } } @@ -141096,15 +141835,15 @@ "binop": null, "updateContext": null }, - "start": 24873, - "end": 24873, + "start": 24949, + "end": 24949, "loc": { "start": { - "line": 714, + "line": 717, "column": 31 }, "end": { - "line": 714, + "line": 717, "column": 31 } } diff --git a/docs/file/src/parsers/parseGLTFIntoXKTModel.js.html b/docs/file/src/parsers/parseGLTFIntoXKTModel.js.html index 0642306..af42962 100644 --- a/docs/file/src/parsers/parseGLTFIntoXKTModel.js.html +++ b/docs/file/src/parsers/parseGLTFIntoXKTModel.js.html @@ -683,6 +683,9 @@ hash.push(attributes[key].id); } } + if (primitive.indices) { + hash.push(primitive.indices.id); + } return hash.join("."); } diff --git a/docs/index.json b/docs/index.json index b1014f9..02b4954 100644 --- a/docs/index.json +++ b/docs/index.json @@ -12781,7 +12781,7 @@ "__docId__": 448, "kind": "file", "name": "src/parsers/parseGLTFIntoXKTModel.js", - "content": "import {utils} from \"../XKTModel/lib/utils.js\";\nimport {math} from \"../lib/math.js\";\n\nimport {parse} from '@loaders.gl/core';\nimport {GLTFLoader} from '@loaders.gl/gltf';\nimport {\n ClampToEdgeWrapping,\n LinearFilter,\n LinearMipMapLinearFilter,\n LinearMipMapNearestFilter,\n MirroredRepeatWrapping,\n NearestFilter,\n NearestMipMapLinearFilter,\n NearestMipMapNearestFilter,\n RepeatWrapping\n} from \"../constants.js\";\n\n/**\n * @desc Parses glTF into an {@link XKTModel}, supporting ````.glb```` and textures.\n *\n * * Supports ````.glb```` and textures\n * * For a lightweight glTF JSON parser that ignores textures, see {@link parseGLTFJSONIntoXKTModel}.\n *\n * ## Usage\n *\n * In the example below we'll create an {@link XKTModel}, then load a binary glTF model into it.\n *\n * ````javascript\n * utils.loadArraybuffer(\"../assets/models/gltf/HousePlan/glTF-Binary/HousePlan.glb\", async (data) => {\n *\n * const xktModel = new XKTModel();\n *\n * parseGLTFIntoXKTModel({\n * data,\n * xktModel,\n * log: (msg) => { console.log(msg); }\n * }).then(()=>{\n * xktModel.finalize();\n * },\n * (msg) => {\n * console.error(msg);\n * });\n * });\n * ````\n *\n * @param {Object} params Parsing parameters.\n * @param {ArrayBuffer} params.data The glTF.\n * @param {String} [params.baseUri] The base URI used to load this glTF, if any. For resolving relative uris to linked resources.\n * @param {Object} [params.metaModelData] Metamodel JSON. If this is provided, then parsing is able to ensure that the XKTObjects it creates will fit the metadata properly.\n * @param {XKTModel} params.xktModel XKTModel to parse into.\n * @param {Boolean} [params.includeTextures=true] Whether to parse textures.\n * @param {Boolean} [params.includeNormals=true] Whether to parse normals. When false, the parser will ignore the glTF\n * geometry normals, and the glTF data will rely on the xeokit ````Viewer```` to automatically generate them. This has\n * the limitation that the normals will be face-aligned, and therefore the ````Viewer```` will only be able to render\n * a flat-shaded non-PBR representation of the glTF.\n * @param {Object} [params.stats] Collects statistics.\n * @param {function} [params.log] Logging callback.\n @returns {Promise} Resolves when glTF has been parsed.\n */\nfunction parseGLTFIntoXKTModel({\n data,\n baseUri,\n xktModel,\n metaModelData,\n includeTextures = true,\n includeNormals = true,\n getAttachment,\n stats = {},\n log\n }) {\n\n return new Promise(function (resolve, reject) {\n\n if (!data) {\n reject(\"Argument expected: data\");\n return;\n }\n\n if (!xktModel) {\n reject(\"Argument expected: xktModel\");\n return;\n }\n\n stats.sourceFormat = \"glTF\";\n stats.schemaVersion = \"2.0\";\n stats.title = \"\";\n stats.author = \"\";\n stats.created = \"\";\n stats.numTriangles = 0;\n stats.numVertices = 0;\n stats.numNormals = 0;\n stats.numUVs = 0;\n stats.numTextures = 0;\n stats.numObjects = 0;\n stats.numGeometries = 0;\n\n parse(data, GLTFLoader, {\n baseUri\n }).then((gltfData) => {\n\n const ctx = {\n gltfData,\n nodesHaveNames: false, // determined in testIfNodesHaveNames()\n getAttachment: getAttachment || (() => {\n throw new Error('You must define getAttachment() method to convert glTF with external resources')\n }),\n log: (log || function (msg) {\n }),\n error: function (msg) {\n console.error(msg);\n },\n xktModel,\n includeNormals: (includeNormals !== false),\n includeTextures: (includeTextures !== false),\n geometryCreated: {},\n nextId: 0,\n geometriesCreated : {},\n stats\n };\n\n ctx.log(\"Using parser: parseGLTFIntoXKTModel\");\n ctx.log(`Parsing normals: ${ctx.includeNormals ? \"enabled\" : \"disabled\"}`);\n ctx.log(`Parsing textures: ${ctx.includeTextures ? \"enabled\" : \"disabled\"}`);\n\n if (ctx.includeTextures) {\n parseTextures(ctx);\n }\n parseMaterials(ctx);\n parseDefaultScene(ctx);\n\n resolve();\n\n }, (errMsg) => {\n reject(`[parseGLTFIntoXKTModel] ${errMsg}`);\n });\n });\n}\n\nfunction parseTextures(ctx) {\n const gltfData = ctx.gltfData;\n const textures = gltfData.textures;\n if (textures) {\n for (let i = 0, len = textures.length; i < len; i++) {\n parseTexture(ctx, textures[i]);\n ctx.stats.numTextures++;\n }\n }\n}\n\nfunction parseTexture(ctx, texture) {\n if (!texture.source || !texture.source.image) {\n return;\n }\n const textureId = `texture-${ctx.nextId++}`;\n\n let minFilter = NearestMipMapLinearFilter;\n switch (texture.sampler.minFilter) {\n case 9728:\n minFilter = NearestFilter;\n break;\n case 9729:\n minFilter = LinearFilter;\n break;\n case 9984:\n minFilter = NearestMipMapNearestFilter;\n break;\n case 9985:\n minFilter = LinearMipMapNearestFilter;\n break;\n case 9986:\n minFilter = NearestMipMapLinearFilter;\n break;\n case 9987:\n minFilter = LinearMipMapLinearFilter;\n break;\n }\n\n let magFilter = LinearFilter;\n switch (texture.sampler.magFilter) {\n case 9728:\n magFilter = NearestFilter;\n break;\n case 9729:\n magFilter = LinearFilter;\n break;\n }\n\n let wrapS = RepeatWrapping;\n switch (texture.sampler.wrapS) {\n case 33071:\n wrapS = ClampToEdgeWrapping;\n break;\n case 33648:\n wrapS = MirroredRepeatWrapping;\n break;\n case 10497:\n wrapS = RepeatWrapping;\n break;\n }\n\n let wrapT = RepeatWrapping;\n switch (texture.sampler.wrapT) {\n case 33071:\n wrapT = ClampToEdgeWrapping;\n break;\n case 33648:\n wrapT = MirroredRepeatWrapping;\n break;\n case 10497:\n wrapT = RepeatWrapping;\n break;\n }\n\n let wrapR = RepeatWrapping;\n switch (texture.sampler.wrapR) {\n case 33071:\n wrapR = ClampToEdgeWrapping;\n break;\n case 33648:\n wrapR = MirroredRepeatWrapping;\n break;\n case 10497:\n wrapR = RepeatWrapping;\n break;\n }\n\n ctx.xktModel.createTexture({\n textureId: textureId,\n imageData: texture.source.image,\n mediaType: texture.source.mediaType,\n compressed: true,\n width: texture.source.image.width,\n height: texture.source.image.height,\n minFilter,\n magFilter,\n wrapS,\n wrapT,\n wrapR,\n flipY: !!texture.flipY,\n // encoding: \"sRGB\"\n });\n texture._textureId = textureId;\n}\n\nfunction parseMaterials(ctx) {\n const gltfData = ctx.gltfData;\n const materials = gltfData.materials;\n if (materials) {\n for (let i = 0, len = materials.length; i < len; i++) {\n const material = materials[i];\n material._textureSetId = ctx.includeTextures ? parseTextureSet(ctx, material) : null;\n material._attributes = parseMaterialAttributes(ctx, material);\n }\n }\n}\n\nfunction parseTextureSet(ctx, material) {\n const textureSetCfg = {};\n if (material.normalTexture) {\n textureSetCfg.normalTextureId = material.normalTexture.texture._textureId;\n }\n if (material.occlusionTexture) {\n textureSetCfg.occlusionTextureId = material.occlusionTexture.texture._textureId;\n }\n if (material.emissiveTexture) {\n textureSetCfg.emissiveTextureId = material.emissiveTexture.texture._textureId;\n }\n const metallicPBR = material.pbrMetallicRoughness;\n if (material.pbrMetallicRoughness) {\n const pbrMetallicRoughness = material.pbrMetallicRoughness;\n const baseColorTexture = pbrMetallicRoughness.baseColorTexture || pbrMetallicRoughness.colorTexture;\n if (baseColorTexture) {\n if (baseColorTexture.texture) {\n textureSetCfg.colorTextureId = baseColorTexture.texture._textureId;\n } else {\n textureSetCfg.colorTextureId = ctx.gltfData.textures[baseColorTexture.index]._textureId;\n }\n }\n if (metallicPBR.metallicRoughnessTexture) {\n textureSetCfg.metallicRoughnessTextureId = metallicPBR.metallicRoughnessTexture.texture._textureId;\n }\n }\n const extensions = material.extensions;\n if (extensions) {\n const specularPBR = extensions[\"KHR_materials_pbrSpecularGlossiness\"];\n if (specularPBR) {\n const specularTexture = specularPBR.specularTexture;\n if (specularTexture !== null && specularTexture !== undefined) {\n // textureSetCfg.colorTextureId = ctx.gltfData.textures[specularColorTexture.index]._textureId;\n }\n const specularColorTexture = specularPBR.specularColorTexture;\n if (specularColorTexture !== null && specularColorTexture !== undefined) {\n textureSetCfg.colorTextureId = ctx.gltfData.textures[specularColorTexture.index]._textureId;\n }\n }\n }\n if (textureSetCfg.normalTextureId !== undefined ||\n textureSetCfg.occlusionTextureId !== undefined ||\n textureSetCfg.emissiveTextureId !== undefined ||\n textureSetCfg.colorTextureId !== undefined ||\n textureSetCfg.metallicRoughnessTextureId !== undefined) {\n textureSetCfg.textureSetId = `textureSet-${ctx.nextId++};`\n ctx.xktModel.createTextureSet(textureSetCfg);\n ctx.stats.numTextureSets++;\n return textureSetCfg.textureSetId;\n }\n return null;\n}\n\nfunction parseMaterialAttributes(ctx, material) { // Substitute RGBA for material, to use fast flat shading instead\n const extensions = material.extensions;\n const materialAttributes = {\n color: new Float32Array([1, 1, 1, 1]),\n opacity: 1,\n metallic: 0,\n roughness: 1\n };\n if (extensions) {\n const specularPBR = extensions[\"KHR_materials_pbrSpecularGlossiness\"];\n if (specularPBR) {\n const diffuseFactor = specularPBR.diffuseFactor;\n if (diffuseFactor !== null && diffuseFactor !== undefined) {\n materialAttributes.color.set(diffuseFactor);\n }\n }\n const common = extensions[\"KHR_materials_common\"];\n if (common) {\n const technique = common.technique;\n const values = common.values || {};\n const blinn = technique === \"BLINN\";\n const phong = technique === \"PHONG\";\n const lambert = technique === \"LAMBERT\";\n const diffuse = values.diffuse;\n if (diffuse && (blinn || phong || lambert)) {\n if (!utils.isString(diffuse)) {\n materialAttributes.color.set(diffuse);\n }\n }\n const transparency = values.transparency;\n if (transparency !== null && transparency !== undefined) {\n materialAttributes.opacity = transparency;\n }\n const transparent = values.transparent;\n if (transparent !== null && transparent !== undefined) {\n materialAttributes.opacity = transparent;\n }\n }\n }\n const metallicPBR = material.pbrMetallicRoughness;\n if (metallicPBR) {\n const baseColorFactor = metallicPBR.baseColorFactor;\n if (baseColorFactor) {\n materialAttributes.color[0] = baseColorFactor[0];\n materialAttributes.color[1] = baseColorFactor[1];\n materialAttributes.color[2] = baseColorFactor[2];\n materialAttributes.opacity = baseColorFactor[3];\n }\n const metallicFactor = metallicPBR.metallicFactor;\n if (metallicFactor !== null && metallicFactor !== undefined) {\n materialAttributes.metallic = metallicFactor;\n }\n const roughnessFactor = metallicPBR.roughnessFactor;\n if (roughnessFactor !== null && roughnessFactor !== undefined) {\n materialAttributes.roughness = roughnessFactor;\n }\n }\n return materialAttributes;\n}\n\nfunction parseDefaultScene(ctx) {\n const gltfData = ctx.gltfData;\n const scene = gltfData.scene || gltfData.scenes[0];\n if (!scene) {\n ctx.error(\"glTF has no default scene\");\n return;\n }\n parseScene(ctx, scene);\n}\n\nfunction parseScene(ctx, scene) {\n const nodes = scene.nodes;\n if (!nodes) {\n return;\n }\n for (let i = 0, len = nodes.length; i < len; i++) {\n const node = nodes[i];\n countMeshUsage(ctx, node);\n }\n for (let i = 0, len = nodes.length; i < len && !ctx.nodesHaveNames; i++) {\n const node = nodes[i];\n if (testIfNodesHaveNames(node)) {\n ctx.nodesHaveNames = true;\n }\n }\n if (!ctx.nodesHaveNames) {\n ctx.log(`Warning: No \"name\" attributes found on glTF scene nodes - objects in XKT may not be what you expect`);\n for (let i = 0, len = nodes.length; i < len; i++) {\n const node = nodes[i];\n parseNodesWithoutNames(ctx, node, 0, null);\n }\n } else {\n for (let i = 0, len = nodes.length; i < len; i++) {\n const node = nodes[i];\n parseNodesWithNames(ctx, node, 0, null);\n }\n }\n}\n\nfunction countMeshUsage(ctx, node, level = 0) {\n if (!node) {\n return;\n }\n const mesh = node.mesh;\n if (mesh) {\n mesh.instances = mesh.instances ? mesh.instances + 1 : 1;\n }\n if (node.children) {\n const children = node.children;\n for (let i = 0, len = children.length; i < len; i++) {\n const childNode = children[i];\n if (!childNode) {\n ctx.error(\"Node not found: \" + i);\n continue;\n }\n countMeshUsage(ctx, childNode, level + 1);\n }\n }\n}\n\nfunction testIfNodesHaveNames(node, level = 0) {\n if (!node) {\n return;\n }\n if (node.name) {\n return true;\n }\n if (node.children) {\n const children = node.children;\n for (let i = 0, len = children.length; i < len; i++) {\n const childNode = children[i];\n if (testIfNodesHaveNames(childNode, level + 1)) {\n return true;\n }\n }\n }\n return false;\n}\n\n/**\n * Parses a glTF node hierarchy that is known to NOT contain \"name\" attributes on the nodes.\n * Create a XKTMesh for each mesh primitive, and a single XKTEntity.\n */\nconst parseNodesWithoutNames = (function () {\n\n const meshIds = [];\n\n return function (ctx, node, depth, matrix) {\n if (!node) {\n return;\n }\n matrix = parseNodeMatrix(node, matrix);\n if (node.mesh) {\n parseNodeMesh(node, ctx, matrix, meshIds);\n }\n if (node.children) {\n const children = node.children;\n for (let i = 0, len = children.length; i < len; i++) {\n const childNode = children[i];\n parseNodesWithoutNames(ctx, childNode, depth + 1, matrix);\n }\n }\n if (depth === 0) {\n let entityId = \"entity-\" + ctx.nextId++;\n if (meshIds && meshIds.length > 0) {\n ctx.log(\"Creating XKTEntity with default ID: \" + entityId);\n ctx.xktModel.createEntity({\n entityId,\n meshIds\n });\n meshIds.length = 0;\n }\n ctx.stats.numObjects++;\n }\n }\n})();\n\n\n/**\n * Parses a glTF node hierarchy that is known to contain \"name\" attributes on the nodes.\n *\n * Create a XKTMesh for each mesh primitive, and XKTEntity for each named node.\n *\n * Following a depth-first traversal, each XKTEntity is created on post-visit of each named node,\n * and gets all the XKTMeshes created since the last XKTEntity created.\n */\nconst parseNodesWithNames = (function () {\n\n const objectIdStack = [];\n const meshIdsStack = [];\n let meshIds = null;\n\n return function (ctx, node, depth, matrix) {\n if (!node) {\n return;\n }\n matrix = parseNodeMatrix(node, matrix);\n if (node.name) {\n meshIds = [];\n let xktEntityId = node.name;\n if (!!xktEntityId && ctx.xktModel.entities[xktEntityId]) {\n ctx.log(`Warning: Two or more glTF nodes found with same 'name' attribute: '${xktEntityId} - will randomly-generating an object ID in XKT`);\n }\n while (!xktEntityId || ctx.xktModel.entities[xktEntityId]) {\n xktEntityId = \"entity-\" + ctx.nextId++;\n }\n objectIdStack.push(xktEntityId);\n meshIdsStack.push(meshIds);\n }\n if (meshIds && node.mesh) {\n parseNodeMesh(node, ctx, matrix, meshIds);\n }\n if (node.children) {\n const children = node.children;\n for (let i = 0, len = children.length; i < len; i++) {\n const childNode = children[i];\n parseNodesWithNames(ctx, childNode, depth + 1, matrix);\n }\n }\n const nodeName = node.name;\n if ((nodeName !== undefined && nodeName !== null) || depth === 0) {\n let xktEntityId = objectIdStack.pop();\n if (!xktEntityId) { // For when there are no nodes with names\n xktEntityId = \"entity-\" + ctx.nextId++;\n }\n let entityMeshIds = meshIdsStack.pop();\n if (meshIds && meshIds.length > 0) {\n ctx.xktModel.createEntity({\n entityId: xktEntityId,\n meshIds: entityMeshIds\n });\n }\n ctx.stats.numObjects++;\n meshIds = meshIdsStack.length > 0 ? meshIdsStack[meshIdsStack.length - 1] : null;\n }\n }\n})();\n\n/**\n * Parses transform at the given glTF node.\n *\n * @param node the glTF node\n * @param matrix Transfor matrix from parent nodes\n * @returns {*} Transform matrix for the node\n */\nfunction parseNodeMatrix(node, matrix) {\n if (!node) {\n return;\n }\n let localMatrix;\n if (node.matrix) {\n localMatrix = node.matrix;\n if (matrix) {\n matrix = math.mulMat4(matrix, localMatrix, math.mat4());\n } else {\n matrix = localMatrix;\n }\n }\n if (node.translation) {\n localMatrix = math.translationMat4v(node.translation);\n if (matrix) {\n matrix = math.mulMat4(matrix, localMatrix, math.mat4());\n } else {\n matrix = localMatrix;\n }\n }\n if (node.rotation) {\n localMatrix = math.quaternionToMat4(node.rotation);\n if (matrix) {\n matrix = math.mulMat4(matrix, localMatrix, math.mat4());\n } else {\n matrix = localMatrix;\n }\n }\n if (node.scale) {\n localMatrix = math.scalingMat4v(node.scale);\n if (matrix) {\n matrix = math.mulMat4(matrix, localMatrix, math.mat4());\n } else {\n matrix = localMatrix;\n }\n }\n return matrix;\n}\n\nfunction createPrimitiveHash(primitive) {\n const hash = [];\n const attributes = primitive.attributes;\n if (attributes) {\n for (let key in attributes) {\n hash.push(attributes[key].id);\n }\n }\n return hash.join(\".\");\n}\n\n/**\n * Parses primitives referenced by the mesh belonging to the given node, creating XKTMeshes in the XKTModel.\n *\n * @param node glTF node\n * @param ctx Parsing context\n * @param matrix Matrix for the XKTMeshes\n * @param meshIds returns IDs of the new XKTMeshes\n */\nfunction parseNodeMesh(node, ctx, matrix, meshIds) {\n if (!node) {\n return;\n }\n const mesh = node.mesh;\n if (!mesh) {\n return;\n }\n const numPrimitives = mesh.primitives.length;\n if (numPrimitives > 0) {\n for (let i = 0; i < numPrimitives; i++) {\n try {\n const primitive = mesh.primitives[i];\n const geometryId = createPrimitiveHash(primitive);\n if (!ctx.geometriesCreated[geometryId]) {\n const geometryCfg = {\n geometryId\n };\n switch (primitive.mode) {\n case 0: // POINTS\n geometryCfg.primitiveType = \"points\";\n break;\n case 1: // LINES\n geometryCfg.primitiveType = \"lines\";\n break;\n case 2: // LINE_LOOP\n geometryCfg.primitiveType = \"line-loop\";\n break;\n case 3: // LINE_STRIP\n geometryCfg.primitiveType = \"line-strip\";\n break;\n case 4: // TRIANGLES\n geometryCfg.primitiveType = \"triangles\";\n break;\n case 5: // TRIANGLE_STRIP\n geometryCfg.primitiveType = \"triangle-strip\";\n break;\n case 6: // TRIANGLE_FAN\n geometryCfg.primitiveType = \"triangle-fan\";\n break;\n default:\n geometryCfg.primitiveType = \"triangles\";\n }\n const POSITION = primitive.attributes.POSITION;\n if (!POSITION) {\n continue;\n }\n geometryCfg.positions = primitive.attributes.POSITION.value;\n ctx.stats.numVertices += geometryCfg.positions.length / 3;\n if (ctx.includeNormals) {\n if (primitive.attributes.NORMAL) {\n geometryCfg.normals = primitive.attributes.NORMAL.value;\n ctx.stats.numNormals += geometryCfg.normals.length / 3;\n }\n }\n if (primitive.attributes.COLOR_0) {\n geometryCfg.colorsCompressed = primitive.attributes.COLOR_0.value;\n }\n if (ctx.includeTextures) {\n if (primitive.attributes.TEXCOORD_0) {\n geometryCfg.uvs = primitive.attributes.TEXCOORD_0.value;\n ctx.stats.numUVs += geometryCfg.uvs.length / 2;\n }\n }\n if (primitive.indices) {\n geometryCfg.indices = primitive.indices.value;\n if (primitive.mode === 4) {\n ctx.stats.numTriangles += geometryCfg.indices.length / 3;\n }\n }\n ctx.xktModel.createGeometry(geometryCfg);\n ctx.geometriesCreated[geometryId] = true;\n ctx.stats.numGeometries++;\n }\n const xktMeshId = ctx.nextId++;\n const meshCfg = {\n meshId: xktMeshId,\n geometryId,\n matrix: matrix ? matrix.slice() : math.identityMat4()\n };\n const material = primitive.material;\n if (material) {\n meshCfg.textureSetId = material._textureSetId;\n meshCfg.color = material._attributes.color;\n meshCfg.opacity = material._attributes.opacity;\n meshCfg.metallic = material._attributes.metallic;\n meshCfg.roughness = material._attributes.roughness;\n } else {\n meshCfg.color = [1.0, 1.0, 1.0];\n meshCfg.opacity = 1.0;\n }\n ctx.xktModel.createMesh(meshCfg);\n meshIds.push(xktMeshId);\n } catch (e) {\n console.log(e);\n }\n }\n }\n}\n\nexport {parseGLTFIntoXKTModel};", + "content": "import {utils} from \"../XKTModel/lib/utils.js\";\nimport {math} from \"../lib/math.js\";\n\nimport {parse} from '@loaders.gl/core';\nimport {GLTFLoader} from '@loaders.gl/gltf';\nimport {\n ClampToEdgeWrapping,\n LinearFilter,\n LinearMipMapLinearFilter,\n LinearMipMapNearestFilter,\n MirroredRepeatWrapping,\n NearestFilter,\n NearestMipMapLinearFilter,\n NearestMipMapNearestFilter,\n RepeatWrapping\n} from \"../constants.js\";\n\n/**\n * @desc Parses glTF into an {@link XKTModel}, supporting ````.glb```` and textures.\n *\n * * Supports ````.glb```` and textures\n * * For a lightweight glTF JSON parser that ignores textures, see {@link parseGLTFJSONIntoXKTModel}.\n *\n * ## Usage\n *\n * In the example below we'll create an {@link XKTModel}, then load a binary glTF model into it.\n *\n * ````javascript\n * utils.loadArraybuffer(\"../assets/models/gltf/HousePlan/glTF-Binary/HousePlan.glb\", async (data) => {\n *\n * const xktModel = new XKTModel();\n *\n * parseGLTFIntoXKTModel({\n * data,\n * xktModel,\n * log: (msg) => { console.log(msg); }\n * }).then(()=>{\n * xktModel.finalize();\n * },\n * (msg) => {\n * console.error(msg);\n * });\n * });\n * ````\n *\n * @param {Object} params Parsing parameters.\n * @param {ArrayBuffer} params.data The glTF.\n * @param {String} [params.baseUri] The base URI used to load this glTF, if any. For resolving relative uris to linked resources.\n * @param {Object} [params.metaModelData] Metamodel JSON. If this is provided, then parsing is able to ensure that the XKTObjects it creates will fit the metadata properly.\n * @param {XKTModel} params.xktModel XKTModel to parse into.\n * @param {Boolean} [params.includeTextures=true] Whether to parse textures.\n * @param {Boolean} [params.includeNormals=true] Whether to parse normals. When false, the parser will ignore the glTF\n * geometry normals, and the glTF data will rely on the xeokit ````Viewer```` to automatically generate them. This has\n * the limitation that the normals will be face-aligned, and therefore the ````Viewer```` will only be able to render\n * a flat-shaded non-PBR representation of the glTF.\n * @param {Object} [params.stats] Collects statistics.\n * @param {function} [params.log] Logging callback.\n @returns {Promise} Resolves when glTF has been parsed.\n */\nfunction parseGLTFIntoXKTModel({\n data,\n baseUri,\n xktModel,\n metaModelData,\n includeTextures = true,\n includeNormals = true,\n getAttachment,\n stats = {},\n log\n }) {\n\n return new Promise(function (resolve, reject) {\n\n if (!data) {\n reject(\"Argument expected: data\");\n return;\n }\n\n if (!xktModel) {\n reject(\"Argument expected: xktModel\");\n return;\n }\n\n stats.sourceFormat = \"glTF\";\n stats.schemaVersion = \"2.0\";\n stats.title = \"\";\n stats.author = \"\";\n stats.created = \"\";\n stats.numTriangles = 0;\n stats.numVertices = 0;\n stats.numNormals = 0;\n stats.numUVs = 0;\n stats.numTextures = 0;\n stats.numObjects = 0;\n stats.numGeometries = 0;\n\n parse(data, GLTFLoader, {\n baseUri\n }).then((gltfData) => {\n\n const ctx = {\n gltfData,\n nodesHaveNames: false, // determined in testIfNodesHaveNames()\n getAttachment: getAttachment || (() => {\n throw new Error('You must define getAttachment() method to convert glTF with external resources')\n }),\n log: (log || function (msg) {\n }),\n error: function (msg) {\n console.error(msg);\n },\n xktModel,\n includeNormals: (includeNormals !== false),\n includeTextures: (includeTextures !== false),\n geometryCreated: {},\n nextId: 0,\n geometriesCreated : {},\n stats\n };\n\n ctx.log(\"Using parser: parseGLTFIntoXKTModel\");\n ctx.log(`Parsing normals: ${ctx.includeNormals ? \"enabled\" : \"disabled\"}`);\n ctx.log(`Parsing textures: ${ctx.includeTextures ? \"enabled\" : \"disabled\"}`);\n\n if (ctx.includeTextures) {\n parseTextures(ctx);\n }\n parseMaterials(ctx);\n parseDefaultScene(ctx);\n\n resolve();\n\n }, (errMsg) => {\n reject(`[parseGLTFIntoXKTModel] ${errMsg}`);\n });\n });\n}\n\nfunction parseTextures(ctx) {\n const gltfData = ctx.gltfData;\n const textures = gltfData.textures;\n if (textures) {\n for (let i = 0, len = textures.length; i < len; i++) {\n parseTexture(ctx, textures[i]);\n ctx.stats.numTextures++;\n }\n }\n}\n\nfunction parseTexture(ctx, texture) {\n if (!texture.source || !texture.source.image) {\n return;\n }\n const textureId = `texture-${ctx.nextId++}`;\n\n let minFilter = NearestMipMapLinearFilter;\n switch (texture.sampler.minFilter) {\n case 9728:\n minFilter = NearestFilter;\n break;\n case 9729:\n minFilter = LinearFilter;\n break;\n case 9984:\n minFilter = NearestMipMapNearestFilter;\n break;\n case 9985:\n minFilter = LinearMipMapNearestFilter;\n break;\n case 9986:\n minFilter = NearestMipMapLinearFilter;\n break;\n case 9987:\n minFilter = LinearMipMapLinearFilter;\n break;\n }\n\n let magFilter = LinearFilter;\n switch (texture.sampler.magFilter) {\n case 9728:\n magFilter = NearestFilter;\n break;\n case 9729:\n magFilter = LinearFilter;\n break;\n }\n\n let wrapS = RepeatWrapping;\n switch (texture.sampler.wrapS) {\n case 33071:\n wrapS = ClampToEdgeWrapping;\n break;\n case 33648:\n wrapS = MirroredRepeatWrapping;\n break;\n case 10497:\n wrapS = RepeatWrapping;\n break;\n }\n\n let wrapT = RepeatWrapping;\n switch (texture.sampler.wrapT) {\n case 33071:\n wrapT = ClampToEdgeWrapping;\n break;\n case 33648:\n wrapT = MirroredRepeatWrapping;\n break;\n case 10497:\n wrapT = RepeatWrapping;\n break;\n }\n\n let wrapR = RepeatWrapping;\n switch (texture.sampler.wrapR) {\n case 33071:\n wrapR = ClampToEdgeWrapping;\n break;\n case 33648:\n wrapR = MirroredRepeatWrapping;\n break;\n case 10497:\n wrapR = RepeatWrapping;\n break;\n }\n\n ctx.xktModel.createTexture({\n textureId: textureId,\n imageData: texture.source.image,\n mediaType: texture.source.mediaType,\n compressed: true,\n width: texture.source.image.width,\n height: texture.source.image.height,\n minFilter,\n magFilter,\n wrapS,\n wrapT,\n wrapR,\n flipY: !!texture.flipY,\n // encoding: \"sRGB\"\n });\n texture._textureId = textureId;\n}\n\nfunction parseMaterials(ctx) {\n const gltfData = ctx.gltfData;\n const materials = gltfData.materials;\n if (materials) {\n for (let i = 0, len = materials.length; i < len; i++) {\n const material = materials[i];\n material._textureSetId = ctx.includeTextures ? parseTextureSet(ctx, material) : null;\n material._attributes = parseMaterialAttributes(ctx, material);\n }\n }\n}\n\nfunction parseTextureSet(ctx, material) {\n const textureSetCfg = {};\n if (material.normalTexture) {\n textureSetCfg.normalTextureId = material.normalTexture.texture._textureId;\n }\n if (material.occlusionTexture) {\n textureSetCfg.occlusionTextureId = material.occlusionTexture.texture._textureId;\n }\n if (material.emissiveTexture) {\n textureSetCfg.emissiveTextureId = material.emissiveTexture.texture._textureId;\n }\n const metallicPBR = material.pbrMetallicRoughness;\n if (material.pbrMetallicRoughness) {\n const pbrMetallicRoughness = material.pbrMetallicRoughness;\n const baseColorTexture = pbrMetallicRoughness.baseColorTexture || pbrMetallicRoughness.colorTexture;\n if (baseColorTexture) {\n if (baseColorTexture.texture) {\n textureSetCfg.colorTextureId = baseColorTexture.texture._textureId;\n } else {\n textureSetCfg.colorTextureId = ctx.gltfData.textures[baseColorTexture.index]._textureId;\n }\n }\n if (metallicPBR.metallicRoughnessTexture) {\n textureSetCfg.metallicRoughnessTextureId = metallicPBR.metallicRoughnessTexture.texture._textureId;\n }\n }\n const extensions = material.extensions;\n if (extensions) {\n const specularPBR = extensions[\"KHR_materials_pbrSpecularGlossiness\"];\n if (specularPBR) {\n const specularTexture = specularPBR.specularTexture;\n if (specularTexture !== null && specularTexture !== undefined) {\n // textureSetCfg.colorTextureId = ctx.gltfData.textures[specularColorTexture.index]._textureId;\n }\n const specularColorTexture = specularPBR.specularColorTexture;\n if (specularColorTexture !== null && specularColorTexture !== undefined) {\n textureSetCfg.colorTextureId = ctx.gltfData.textures[specularColorTexture.index]._textureId;\n }\n }\n }\n if (textureSetCfg.normalTextureId !== undefined ||\n textureSetCfg.occlusionTextureId !== undefined ||\n textureSetCfg.emissiveTextureId !== undefined ||\n textureSetCfg.colorTextureId !== undefined ||\n textureSetCfg.metallicRoughnessTextureId !== undefined) {\n textureSetCfg.textureSetId = `textureSet-${ctx.nextId++};`\n ctx.xktModel.createTextureSet(textureSetCfg);\n ctx.stats.numTextureSets++;\n return textureSetCfg.textureSetId;\n }\n return null;\n}\n\nfunction parseMaterialAttributes(ctx, material) { // Substitute RGBA for material, to use fast flat shading instead\n const extensions = material.extensions;\n const materialAttributes = {\n color: new Float32Array([1, 1, 1, 1]),\n opacity: 1,\n metallic: 0,\n roughness: 1\n };\n if (extensions) {\n const specularPBR = extensions[\"KHR_materials_pbrSpecularGlossiness\"];\n if (specularPBR) {\n const diffuseFactor = specularPBR.diffuseFactor;\n if (diffuseFactor !== null && diffuseFactor !== undefined) {\n materialAttributes.color.set(diffuseFactor);\n }\n }\n const common = extensions[\"KHR_materials_common\"];\n if (common) {\n const technique = common.technique;\n const values = common.values || {};\n const blinn = technique === \"BLINN\";\n const phong = technique === \"PHONG\";\n const lambert = technique === \"LAMBERT\";\n const diffuse = values.diffuse;\n if (diffuse && (blinn || phong || lambert)) {\n if (!utils.isString(diffuse)) {\n materialAttributes.color.set(diffuse);\n }\n }\n const transparency = values.transparency;\n if (transparency !== null && transparency !== undefined) {\n materialAttributes.opacity = transparency;\n }\n const transparent = values.transparent;\n if (transparent !== null && transparent !== undefined) {\n materialAttributes.opacity = transparent;\n }\n }\n }\n const metallicPBR = material.pbrMetallicRoughness;\n if (metallicPBR) {\n const baseColorFactor = metallicPBR.baseColorFactor;\n if (baseColorFactor) {\n materialAttributes.color[0] = baseColorFactor[0];\n materialAttributes.color[1] = baseColorFactor[1];\n materialAttributes.color[2] = baseColorFactor[2];\n materialAttributes.opacity = baseColorFactor[3];\n }\n const metallicFactor = metallicPBR.metallicFactor;\n if (metallicFactor !== null && metallicFactor !== undefined) {\n materialAttributes.metallic = metallicFactor;\n }\n const roughnessFactor = metallicPBR.roughnessFactor;\n if (roughnessFactor !== null && roughnessFactor !== undefined) {\n materialAttributes.roughness = roughnessFactor;\n }\n }\n return materialAttributes;\n}\n\nfunction parseDefaultScene(ctx) {\n const gltfData = ctx.gltfData;\n const scene = gltfData.scene || gltfData.scenes[0];\n if (!scene) {\n ctx.error(\"glTF has no default scene\");\n return;\n }\n parseScene(ctx, scene);\n}\n\nfunction parseScene(ctx, scene) {\n const nodes = scene.nodes;\n if (!nodes) {\n return;\n }\n for (let i = 0, len = nodes.length; i < len; i++) {\n const node = nodes[i];\n countMeshUsage(ctx, node);\n }\n for (let i = 0, len = nodes.length; i < len && !ctx.nodesHaveNames; i++) {\n const node = nodes[i];\n if (testIfNodesHaveNames(node)) {\n ctx.nodesHaveNames = true;\n }\n }\n if (!ctx.nodesHaveNames) {\n ctx.log(`Warning: No \"name\" attributes found on glTF scene nodes - objects in XKT may not be what you expect`);\n for (let i = 0, len = nodes.length; i < len; i++) {\n const node = nodes[i];\n parseNodesWithoutNames(ctx, node, 0, null);\n }\n } else {\n for (let i = 0, len = nodes.length; i < len; i++) {\n const node = nodes[i];\n parseNodesWithNames(ctx, node, 0, null);\n }\n }\n}\n\nfunction countMeshUsage(ctx, node, level = 0) {\n if (!node) {\n return;\n }\n const mesh = node.mesh;\n if (mesh) {\n mesh.instances = mesh.instances ? mesh.instances + 1 : 1;\n }\n if (node.children) {\n const children = node.children;\n for (let i = 0, len = children.length; i < len; i++) {\n const childNode = children[i];\n if (!childNode) {\n ctx.error(\"Node not found: \" + i);\n continue;\n }\n countMeshUsage(ctx, childNode, level + 1);\n }\n }\n}\n\nfunction testIfNodesHaveNames(node, level = 0) {\n if (!node) {\n return;\n }\n if (node.name) {\n return true;\n }\n if (node.children) {\n const children = node.children;\n for (let i = 0, len = children.length; i < len; i++) {\n const childNode = children[i];\n if (testIfNodesHaveNames(childNode, level + 1)) {\n return true;\n }\n }\n }\n return false;\n}\n\n/**\n * Parses a glTF node hierarchy that is known to NOT contain \"name\" attributes on the nodes.\n * Create a XKTMesh for each mesh primitive, and a single XKTEntity.\n */\nconst parseNodesWithoutNames = (function () {\n\n const meshIds = [];\n\n return function (ctx, node, depth, matrix) {\n if (!node) {\n return;\n }\n matrix = parseNodeMatrix(node, matrix);\n if (node.mesh) {\n parseNodeMesh(node, ctx, matrix, meshIds);\n }\n if (node.children) {\n const children = node.children;\n for (let i = 0, len = children.length; i < len; i++) {\n const childNode = children[i];\n parseNodesWithoutNames(ctx, childNode, depth + 1, matrix);\n }\n }\n if (depth === 0) {\n let entityId = \"entity-\" + ctx.nextId++;\n if (meshIds && meshIds.length > 0) {\n ctx.log(\"Creating XKTEntity with default ID: \" + entityId);\n ctx.xktModel.createEntity({\n entityId,\n meshIds\n });\n meshIds.length = 0;\n }\n ctx.stats.numObjects++;\n }\n }\n})();\n\n\n/**\n * Parses a glTF node hierarchy that is known to contain \"name\" attributes on the nodes.\n *\n * Create a XKTMesh for each mesh primitive, and XKTEntity for each named node.\n *\n * Following a depth-first traversal, each XKTEntity is created on post-visit of each named node,\n * and gets all the XKTMeshes created since the last XKTEntity created.\n */\nconst parseNodesWithNames = (function () {\n\n const objectIdStack = [];\n const meshIdsStack = [];\n let meshIds = null;\n\n return function (ctx, node, depth, matrix) {\n if (!node) {\n return;\n }\n matrix = parseNodeMatrix(node, matrix);\n if (node.name) {\n meshIds = [];\n let xktEntityId = node.name;\n if (!!xktEntityId && ctx.xktModel.entities[xktEntityId]) {\n ctx.log(`Warning: Two or more glTF nodes found with same 'name' attribute: '${xktEntityId} - will randomly-generating an object ID in XKT`);\n }\n while (!xktEntityId || ctx.xktModel.entities[xktEntityId]) {\n xktEntityId = \"entity-\" + ctx.nextId++;\n }\n objectIdStack.push(xktEntityId);\n meshIdsStack.push(meshIds);\n }\n if (meshIds && node.mesh) {\n parseNodeMesh(node, ctx, matrix, meshIds);\n }\n if (node.children) {\n const children = node.children;\n for (let i = 0, len = children.length; i < len; i++) {\n const childNode = children[i];\n parseNodesWithNames(ctx, childNode, depth + 1, matrix);\n }\n }\n const nodeName = node.name;\n if ((nodeName !== undefined && nodeName !== null) || depth === 0) {\n let xktEntityId = objectIdStack.pop();\n if (!xktEntityId) { // For when there are no nodes with names\n xktEntityId = \"entity-\" + ctx.nextId++;\n }\n let entityMeshIds = meshIdsStack.pop();\n if (meshIds && meshIds.length > 0) {\n ctx.xktModel.createEntity({\n entityId: xktEntityId,\n meshIds: entityMeshIds\n });\n }\n ctx.stats.numObjects++;\n meshIds = meshIdsStack.length > 0 ? meshIdsStack[meshIdsStack.length - 1] : null;\n }\n }\n})();\n\n/**\n * Parses transform at the given glTF node.\n *\n * @param node the glTF node\n * @param matrix Transfor matrix from parent nodes\n * @returns {*} Transform matrix for the node\n */\nfunction parseNodeMatrix(node, matrix) {\n if (!node) {\n return;\n }\n let localMatrix;\n if (node.matrix) {\n localMatrix = node.matrix;\n if (matrix) {\n matrix = math.mulMat4(matrix, localMatrix, math.mat4());\n } else {\n matrix = localMatrix;\n }\n }\n if (node.translation) {\n localMatrix = math.translationMat4v(node.translation);\n if (matrix) {\n matrix = math.mulMat4(matrix, localMatrix, math.mat4());\n } else {\n matrix = localMatrix;\n }\n }\n if (node.rotation) {\n localMatrix = math.quaternionToMat4(node.rotation);\n if (matrix) {\n matrix = math.mulMat4(matrix, localMatrix, math.mat4());\n } else {\n matrix = localMatrix;\n }\n }\n if (node.scale) {\n localMatrix = math.scalingMat4v(node.scale);\n if (matrix) {\n matrix = math.mulMat4(matrix, localMatrix, math.mat4());\n } else {\n matrix = localMatrix;\n }\n }\n return matrix;\n}\n\nfunction createPrimitiveHash(primitive) {\n const hash = [];\n const attributes = primitive.attributes;\n if (attributes) {\n for (let key in attributes) {\n hash.push(attributes[key].id);\n }\n }\n if (primitive.indices) {\n hash.push(primitive.indices.id);\n }\n return hash.join(\".\");\n}\n\n/**\n * Parses primitives referenced by the mesh belonging to the given node, creating XKTMeshes in the XKTModel.\n *\n * @param node glTF node\n * @param ctx Parsing context\n * @param matrix Matrix for the XKTMeshes\n * @param meshIds returns IDs of the new XKTMeshes\n */\nfunction parseNodeMesh(node, ctx, matrix, meshIds) {\n if (!node) {\n return;\n }\n const mesh = node.mesh;\n if (!mesh) {\n return;\n }\n const numPrimitives = mesh.primitives.length;\n if (numPrimitives > 0) {\n for (let i = 0; i < numPrimitives; i++) {\n try {\n const primitive = mesh.primitives[i];\n const geometryId = createPrimitiveHash(primitive);\n if (!ctx.geometriesCreated[geometryId]) {\n const geometryCfg = {\n geometryId\n };\n switch (primitive.mode) {\n case 0: // POINTS\n geometryCfg.primitiveType = \"points\";\n break;\n case 1: // LINES\n geometryCfg.primitiveType = \"lines\";\n break;\n case 2: // LINE_LOOP\n geometryCfg.primitiveType = \"line-loop\";\n break;\n case 3: // LINE_STRIP\n geometryCfg.primitiveType = \"line-strip\";\n break;\n case 4: // TRIANGLES\n geometryCfg.primitiveType = \"triangles\";\n break;\n case 5: // TRIANGLE_STRIP\n geometryCfg.primitiveType = \"triangle-strip\";\n break;\n case 6: // TRIANGLE_FAN\n geometryCfg.primitiveType = \"triangle-fan\";\n break;\n default:\n geometryCfg.primitiveType = \"triangles\";\n }\n const POSITION = primitive.attributes.POSITION;\n if (!POSITION) {\n continue;\n }\n geometryCfg.positions = primitive.attributes.POSITION.value;\n ctx.stats.numVertices += geometryCfg.positions.length / 3;\n if (ctx.includeNormals) {\n if (primitive.attributes.NORMAL) {\n geometryCfg.normals = primitive.attributes.NORMAL.value;\n ctx.stats.numNormals += geometryCfg.normals.length / 3;\n }\n }\n if (primitive.attributes.COLOR_0) {\n geometryCfg.colorsCompressed = primitive.attributes.COLOR_0.value;\n }\n if (ctx.includeTextures) {\n if (primitive.attributes.TEXCOORD_0) {\n geometryCfg.uvs = primitive.attributes.TEXCOORD_0.value;\n ctx.stats.numUVs += geometryCfg.uvs.length / 2;\n }\n }\n if (primitive.indices) {\n geometryCfg.indices = primitive.indices.value;\n if (primitive.mode === 4) {\n ctx.stats.numTriangles += geometryCfg.indices.length / 3;\n }\n }\n ctx.xktModel.createGeometry(geometryCfg);\n ctx.geometriesCreated[geometryId] = true;\n ctx.stats.numGeometries++;\n }\n const xktMeshId = ctx.nextId++;\n const meshCfg = {\n meshId: xktMeshId,\n geometryId,\n matrix: matrix ? matrix.slice() : math.identityMat4()\n };\n const material = primitive.material;\n if (material) {\n meshCfg.textureSetId = material._textureSetId;\n meshCfg.color = material._attributes.color;\n meshCfg.opacity = material._attributes.opacity;\n meshCfg.metallic = material._attributes.metallic;\n meshCfg.roughness = material._attributes.roughness;\n } else {\n meshCfg.color = [1.0, 1.0, 1.0];\n meshCfg.opacity = 1.0;\n }\n ctx.xktModel.createMesh(meshCfg);\n meshIds.push(xktMeshId);\n } catch (e) {\n console.log(e);\n }\n }\n }\n}\n\nexport {parseGLTFIntoXKTModel};", "static": true, "longname": "/home/lindsay/xeolabs/xeokit-convert-mar14/src/parsers/parseGLTFIntoXKTModel.js", "access": "public", @@ -13229,7 +13229,7 @@ "importPath": "@xeokit/xeokit-convert/src/parsers/parseGLTFIntoXKTModel.js", "importStyle": null, "description": "Parses primitives referenced by the mesh belonging to the given node, creating XKTMeshes in the XKTModel.", - "lineNumber": 614, + "lineNumber": 617, "params": [ { "nullable": null, @@ -15502,7 +15502,7 @@ }, { "kind": "packageJSON", - "content": "{\n \"name\": \"@xeokit/xeokit-convert\",\n \"version\": \"1.1.21\",\n \"description\": \"JavaScript utilities to create .XKT files\",\n \"main\": \"index.js\",\n \"bin\": \"/convert2xkt.js\",\n \"directories\": {},\n \"scripts\": {\n \"build\": \"npm run build-node && npm run build-browser && rollup --config rollup.config.convert2xkt.js && npm run docs\",\n \"build-node\": \"webpack --mode=development --node-env=development --progress\",\n \"build-browser\": \"rollup --config rollup.config.dist.js\",\n \"docs\": \"rimraf ./docs/* && npx esdoc\",\n \"publish\": \"npm publish --access public\",\n \"changelog\": \"auto-changelog --commit-limit false --package --template changelog-template.hbs\"\n },\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git+https://github.com/xeokit/xeokit-convert.git\"\n },\n \"keywords\": [\n \"xeolabs\",\n \"xeokit\",\n \"bim\",\n \"opensource\",\n \"ifc\",\n \"webgl\",\n \"xkt\",\n \"gltf\",\n \"glb\",\n \"cityjson\",\n \"laz\",\n \"gis\"\n ],\n \"author\": \"Lindsay Kay\",\n \"license\": \"LICENSE\",\n \"bugs\": {\n \"url\": \"https://github.com/xeokit/xeokit-convert/issues\"\n },\n \"homepage\": \"https://github.com/xeokit/xeokit-convert#readme\",\n \"dependencies\": {\n \"@loaders.gl/core\": \"^3.2.6\",\n \"@loaders.gl/gltf\": \"^3.2.6\",\n \"@loaders.gl/images\": \"^3.2.6\",\n \"@loaders.gl/json\": \"^3.2.6\",\n \"@loaders.gl/las\": \"^3.2.6\",\n \"@loaders.gl/obj\": \"^3.2.6\",\n \"@loaders.gl/ply\": \"^3.2.6\",\n \"@loaders.gl/polyfills\": \"^3.2.6\",\n \"@loaders.gl/textures\": \"^3.2.6\",\n \"@typeonly/validator\": \"^0.5.2\",\n \"commander\": \"^11.0.0\",\n \"core-js\": \"^3.22.5\",\n \"fs\": \"0.0.1-security\",\n \"pako\": \"^2.0.4\",\n \"path\": \"^0.12.7\",\n \"web-ifc\": \"0.0.40\"\n },\n \"devDependencies\": {\n \"@babel/core\": \"^7.17.10\",\n \"@babel/plugin-external-helpers\": \"^7.17.12\",\n \"@babel/preset-env\": \"^7.17.12\",\n \"@rollup/plugin-alias\": \"^3.1.9\",\n \"@rollup/plugin-commonjs\": \"^21.1.0\",\n \"@rollup/plugin-node-resolve\": \"^13.2.1\",\n \"@xeokit/xeokit-sdk\": \"^2.3.0\",\n \"auto-changelog\": \"^2.4.0\",\n \"babel-loader\": \"^8.2.5\",\n \"copy-webpack-plugin\": \"^11.0.0\",\n \"esdoc\": \"^1.1.0\",\n \"esdoc-node\": \"^1.0.5\",\n \"esdoc-standard-plugin\": \"^1.0.0\",\n \"http-server\": \"^14.1.0\",\n \"npm-upgrade\": \"^3.1.0\",\n \"rimraf\": \"^3.0.2\",\n \"rollup\": \"^2.70.2\",\n \"rollup-plugin-copy\": \"^3.4.0\",\n \"rollup-plugin-minify-es\": \"^1.1.1\",\n \"typeonly\": \"^0.4.6\",\n \"webpack\": \"^5.72.1\",\n \"webpack-cli\": \"^4.9.2\",\n \"webpack-node-externals\": \"^3.0.0\"\n },\n \"files\": [\n \"/dist\",\n \"/convert2xkt.js\",\n \"/convert2xkt.conf.js\"\n ]\n}", + "content": "{\n \"name\": \"@xeokit/xeokit-convert\",\n \"version\": \"1.1.22\",\n \"description\": \"JavaScript utilities to create .XKT files\",\n \"main\": \"index.js\",\n \"bin\": \"/convert2xkt.js\",\n \"directories\": {},\n \"scripts\": {\n \"build\": \"npm run build-node && npm run build-browser && rollup --config rollup.config.convert2xkt.js && npm run docs\",\n \"build-node\": \"webpack --mode=development --node-env=development --progress\",\n \"build-browser\": \"rollup --config rollup.config.dist.js\",\n \"docs\": \"rimraf ./docs/* && npx esdoc\",\n \"publish\": \"npm publish --access public\",\n \"changelog\": \"auto-changelog --commit-limit false --package --template changelog-template.hbs\"\n },\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git+https://github.com/xeokit/xeokit-convert.git\"\n },\n \"keywords\": [\n \"xeolabs\",\n \"xeokit\",\n \"bim\",\n \"opensource\",\n \"ifc\",\n \"webgl\",\n \"xkt\",\n \"gltf\",\n \"glb\",\n \"cityjson\",\n \"laz\",\n \"gis\"\n ],\n \"author\": \"Lindsay Kay\",\n \"license\": \"LICENSE\",\n \"bugs\": {\n \"url\": \"https://github.com/xeokit/xeokit-convert/issues\"\n },\n \"homepage\": \"https://github.com/xeokit/xeokit-convert#readme\",\n \"dependencies\": {\n \"@loaders.gl/core\": \"^3.2.6\",\n \"@loaders.gl/gltf\": \"^3.2.6\",\n \"@loaders.gl/images\": \"^3.2.6\",\n \"@loaders.gl/json\": \"^3.2.6\",\n \"@loaders.gl/las\": \"^3.2.6\",\n \"@loaders.gl/obj\": \"^3.2.6\",\n \"@loaders.gl/ply\": \"^3.2.6\",\n \"@loaders.gl/polyfills\": \"^3.2.6\",\n \"@loaders.gl/textures\": \"^3.2.6\",\n \"@typeonly/validator\": \"^0.5.2\",\n \"commander\": \"^11.0.0\",\n \"core-js\": \"^3.22.5\",\n \"fs\": \"0.0.1-security\",\n \"pako\": \"^2.0.4\",\n \"path\": \"^0.12.7\",\n \"web-ifc\": \"0.0.40\"\n },\n \"devDependencies\": {\n \"@babel/core\": \"^7.17.10\",\n \"@babel/plugin-external-helpers\": \"^7.17.12\",\n \"@babel/preset-env\": \"^7.17.12\",\n \"@rollup/plugin-alias\": \"^3.1.9\",\n \"@rollup/plugin-commonjs\": \"^21.1.0\",\n \"@rollup/plugin-node-resolve\": \"^13.2.1\",\n \"@xeokit/xeokit-sdk\": \"^2.3.0\",\n \"auto-changelog\": \"^2.4.0\",\n \"babel-loader\": \"^8.2.5\",\n \"copy-webpack-plugin\": \"^11.0.0\",\n \"esdoc\": \"^1.1.0\",\n \"esdoc-node\": \"^1.0.5\",\n \"esdoc-standard-plugin\": \"^1.0.0\",\n \"http-server\": \"^14.1.0\",\n \"npm-upgrade\": \"^3.1.0\",\n \"rimraf\": \"^3.0.2\",\n \"rollup\": \"^2.70.2\",\n \"rollup-plugin-copy\": \"^3.4.0\",\n \"rollup-plugin-minify-es\": \"^1.1.1\",\n \"typeonly\": \"^0.4.6\",\n \"webpack\": \"^5.72.1\",\n \"webpack-cli\": \"^4.9.2\",\n \"webpack-node-externals\": \"^3.0.0\"\n },\n \"files\": [\n \"/dist\",\n \"/convert2xkt.js\",\n \"/convert2xkt.conf.js\"\n ]\n}", "longname": "/home/lindsay/xeolabs/xeokit-convert-mar14/package.json", "name": "package.json", "static": true, diff --git a/docs/source.html b/docs/source.html index 4603e40..f4c65f3 100644 --- a/docs/source.html +++ b/docs/source.html @@ -466,9 +466,9 @@ src/parsers/parseGLTFIntoXKTModel.js parseGLTFIntoXKTModel 33 %5/15 - 24873 byte - 713 - 2024-09-06 16:39:25 (UTC) + 24949 byte + 716 + 2024-09-06 17:57:09 (UTC) src/parsers/parseGLTFJSONIntoXKTModel.js diff --git a/package.json b/package.json index b0a4d40..9691186 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@xeokit/xeokit-convert", - "version": "1.1.21", + "version": "1.1.22", "description": "JavaScript utilities to create .XKT files", "main": "index.js", "bin": "/convert2xkt.js", diff --git a/src/parsers/parseGLTFIntoXKTModel.js b/src/parsers/parseGLTFIntoXKTModel.js index 0fa5d9f..fc68da5 100644 --- a/src/parsers/parseGLTFIntoXKTModel.js +++ b/src/parsers/parseGLTFIntoXKTModel.js @@ -600,6 +600,9 @@ function createPrimitiveHash(primitive) { hash.push(attributes[key].id); } } + if (primitive.indices) { + hash.push(primitive.indices.id); + } return hash.join("."); }