@loaders.gl/3d-tiles 3.1.0-beta.2 → 3.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bundle.js +2399 -193
- package/dist/es5/bundle.js +1 -1
- package/dist/es5/bundle.js.map +1 -1
- package/dist/es5/cesium-ion-loader.js +78 -23
- package/dist/es5/cesium-ion-loader.js.map +1 -1
- package/dist/es5/index.js +8 -8
- package/dist/es5/lib/classes/helpers/tile-3d-accessor-utils.js +42 -30
- package/dist/es5/lib/classes/helpers/tile-3d-accessor-utils.js.map +1 -1
- package/dist/es5/lib/classes/tile-3d-batch-table-hierarchy.js +59 -57
- package/dist/es5/lib/classes/tile-3d-batch-table-hierarchy.js.map +1 -1
- package/dist/es5/lib/classes/tile-3d-batch-table.js +238 -201
- package/dist/es5/lib/classes/tile-3d-batch-table.js.map +1 -1
- package/dist/es5/lib/classes/tile-3d-feature-table.js +78 -62
- package/dist/es5/lib/classes/tile-3d-feature-table.js.map +1 -1
- package/dist/es5/lib/constants.js +6 -5
- package/dist/es5/lib/constants.js.map +1 -1
- package/dist/es5/lib/encoders/encode-3d-tile-batched-model.js +22 -15
- package/dist/es5/lib/encoders/encode-3d-tile-batched-model.js.map +1 -1
- package/dist/es5/lib/encoders/encode-3d-tile-composite.js +13 -6
- package/dist/es5/lib/encoders/encode-3d-tile-composite.js.map +1 -1
- package/dist/es5/lib/encoders/encode-3d-tile-instanced-model.js +23 -14
- package/dist/es5/lib/encoders/encode-3d-tile-instanced-model.js.map +1 -1
- package/dist/es5/lib/encoders/encode-3d-tile-point-cloud.js +22 -15
- package/dist/es5/lib/encoders/encode-3d-tile-point-cloud.js.map +1 -1
- package/dist/es5/lib/encoders/encode-3d-tile.js +3 -3
- package/dist/es5/lib/encoders/encode-3d-tile.js.map +1 -1
- package/dist/es5/lib/encoders/helpers/encode-3d-tile-header.js +6 -6
- package/dist/es5/lib/encoders/helpers/encode-3d-tile-header.js.map +1 -1
- package/dist/es5/lib/ion/ion.js +197 -69
- package/dist/es5/lib/ion/ion.js.map +1 -1
- package/dist/es5/lib/parsers/helpers/normalize-3d-tile-colors.js +18 -17
- package/dist/es5/lib/parsers/helpers/normalize-3d-tile-colors.js.map +1 -1
- package/dist/es5/lib/parsers/helpers/normalize-3d-tile-normals.js +3 -3
- package/dist/es5/lib/parsers/helpers/normalize-3d-tile-normals.js.map +1 -1
- package/dist/es5/lib/parsers/helpers/normalize-3d-tile-positions.js +3 -3
- package/dist/es5/lib/parsers/helpers/normalize-3d-tile-positions.js.map +1 -1
- package/dist/es5/lib/parsers/helpers/parse-3d-implicit-tiles.js +270 -0
- package/dist/es5/lib/parsers/helpers/parse-3d-implicit-tiles.js.map +1 -0
- package/dist/es5/lib/parsers/helpers/parse-3d-tile-gltf-view.js +66 -26
- package/dist/es5/lib/parsers/helpers/parse-3d-tile-gltf-view.js.map +1 -1
- package/dist/es5/lib/parsers/helpers/parse-3d-tile-header.js +4 -3
- package/dist/es5/lib/parsers/helpers/parse-3d-tile-header.js.map +1 -1
- package/dist/es5/lib/parsers/helpers/parse-3d-tile-subtree.js +141 -53
- package/dist/es5/lib/parsers/helpers/parse-3d-tile-subtree.js.map +1 -1
- package/dist/es5/lib/parsers/helpers/parse-3d-tile-tables.js +17 -19
- package/dist/es5/lib/parsers/helpers/parse-3d-tile-tables.js.map +1 -1
- package/dist/es5/lib/parsers/helpers/parse-utils.js +8 -7
- package/dist/es5/lib/parsers/helpers/parse-utils.js.map +1 -1
- package/dist/es5/lib/parsers/parse-3d-tile-batched-model.js +36 -10
- package/dist/es5/lib/parsers/parse-3d-tile-batched-model.js.map +1 -1
- package/dist/es5/lib/parsers/parse-3d-tile-composite.js +48 -12
- package/dist/es5/lib/parsers/parse-3d-tile-composite.js.map +1 -1
- package/dist/es5/lib/parsers/parse-3d-tile-gltf.js +45 -0
- package/dist/es5/lib/parsers/parse-3d-tile-gltf.js.map +1 -0
- package/dist/es5/lib/parsers/parse-3d-tile-header.js +161 -14
- package/dist/es5/lib/parsers/parse-3d-tile-header.js.map +1 -1
- package/dist/es5/lib/parsers/parse-3d-tile-instanced-model.js +63 -38
- package/dist/es5/lib/parsers/parse-3d-tile-instanced-model.js.map +1 -1
- package/dist/es5/lib/parsers/parse-3d-tile-point-cloud.js +198 -117
- package/dist/es5/lib/parsers/parse-3d-tile-point-cloud.js.map +1 -1
- package/dist/es5/lib/parsers/parse-3d-tile.js +74 -15
- package/dist/es5/lib/parsers/parse-3d-tile.js.map +1 -1
- package/dist/es5/lib/utils/version.js +1 -1
- package/dist/es5/lib/utils/version.js.map +1 -1
- package/dist/es5/tile-3d-subtree-loader.js +1 -1
- package/dist/es5/tile-3d-subtree-loader.js.map +1 -1
- package/dist/es5/tile-3d-writer.js +5 -5
- package/dist/es5/tile-3d-writer.js.map +1 -1
- package/dist/es5/tiles-3d-loader.js +142 -37
- package/dist/es5/tiles-3d-loader.js.map +1 -1
- package/dist/esm/lib/constants.js +2 -1
- package/dist/esm/lib/constants.js.map +1 -1
- package/dist/esm/lib/ion/ion.js.map +1 -1
- package/dist/esm/lib/parsers/helpers/parse-3d-implicit-tiles.js +173 -0
- package/dist/esm/lib/parsers/helpers/parse-3d-implicit-tiles.js.map +1 -0
- package/dist/esm/lib/parsers/helpers/parse-3d-tile-subtree.js.map +1 -1
- package/dist/esm/lib/parsers/parse-3d-tile-gltf.js +10 -0
- package/dist/esm/lib/parsers/parse-3d-tile-gltf.js.map +1 -0
- package/dist/esm/lib/parsers/parse-3d-tile-header.js +67 -0
- package/dist/esm/lib/parsers/parse-3d-tile-header.js.map +1 -1
- package/dist/esm/lib/parsers/parse-3d-tile.js +4 -0
- package/dist/esm/lib/parsers/parse-3d-tile.js.map +1 -1
- package/dist/esm/lib/utils/version.js +1 -1
- package/dist/esm/lib/utils/version.js.map +1 -1
- package/dist/esm/tiles-3d-loader.js +9 -2
- package/dist/esm/tiles-3d-loader.js.map +1 -1
- package/dist/lib/constants.d.ts +1 -0
- package/dist/lib/constants.d.ts.map +1 -1
- package/dist/lib/constants.js +2 -1
- package/dist/lib/ion/ion.d.ts +3 -3
- package/dist/lib/ion/ion.d.ts.map +1 -1
- package/dist/lib/parsers/helpers/parse-3d-implicit-tiles.d.ts +39 -0
- package/dist/lib/parsers/helpers/parse-3d-implicit-tiles.d.ts.map +1 -0
- package/dist/lib/parsers/helpers/parse-3d-implicit-tiles.js +189 -0
- package/dist/lib/parsers/helpers/parse-3d-tile-subtree.d.ts +2 -2
- package/dist/lib/parsers/helpers/parse-3d-tile-subtree.d.ts.map +1 -1
- package/dist/lib/parsers/helpers/parse-3d-tile-subtree.js +1 -0
- package/dist/lib/parsers/parse-3d-tile-batched-model.js +1 -1
- package/dist/lib/parsers/parse-3d-tile-gltf.d.ts +2 -0
- package/dist/lib/parsers/parse-3d-tile-gltf.d.ts.map +1 -0
- package/dist/lib/parsers/parse-3d-tile-gltf.js +18 -0
- package/dist/lib/parsers/parse-3d-tile-header.d.ts +16 -0
- package/dist/lib/parsers/parse-3d-tile-header.d.ts.map +1 -1
- package/dist/lib/parsers/parse-3d-tile-header.js +67 -1
- package/dist/lib/parsers/parse-3d-tile.d.ts.map +1 -1
- package/dist/lib/parsers/parse-3d-tile.js +3 -0
- package/dist/tiles-3d-loader.d.ts.map +1 -1
- package/dist/tiles-3d-loader.js +8 -1
- package/dist/types.d.ts +6 -2
- package/dist/types.d.ts.map +1 -1
- package/package.json +8 -8
- package/src/lib/constants.ts +2 -1
- package/src/lib/ion/{ion.js → ion.ts} +0 -0
- package/src/lib/parsers/helpers/parse-3d-implicit-tiles.ts +255 -0
- package/src/lib/parsers/helpers/parse-3d-tile-subtree.ts +4 -3
- package/src/lib/parsers/parse-3d-tile-gltf.js +16 -0
- package/src/lib/parsers/parse-3d-tile-header.ts +82 -1
- package/src/lib/parsers/parse-3d-tile.ts +4 -0
- package/src/tiles-3d-loader.ts +17 -2
- package/src/types.ts +7 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../src/lib/parsers/helpers/parse-3d-tile-subtree.ts"],"names":["fetchFile","SUBTREE_FILE_MAGIC","SUBTREE_FILE_VERSION","parse3DTilesSubtree","data","magic","Uint32Array","slice","Error","version","jsonByteLength","parseUint64Value","stringAttribute","Uint8Array","textDecoder","TextDecoder","string","decode","subtree","JSON","parse","binaryByteLength","internalBinaryBuffer","ArrayBuffer","tileAvailability","explicitBitstream","getExplicitBitstream","contentAvailability","childSubtreeAvailability","name","bufferViewIndex","bufferView","bufferViews","buffer","buffers","uri","response","arrayBuffer","byteOffset","byteLength","dataView","DataView","left","getUint32","right"],"mappings":"AACA,SAAQA,SAAR,QAAwB,kBAAxB;AAEA,MAAMC,kBAAkB,GAAG,UAA3B;AACA,MAAMC,oBAAoB,GAAG,CAA7B;
|
|
1
|
+
{"version":3,"sources":["../../../../../src/lib/parsers/helpers/parse-3d-tile-subtree.ts"],"names":["fetchFile","SUBTREE_FILE_MAGIC","SUBTREE_FILE_VERSION","parse3DTilesSubtree","data","magic","Uint32Array","slice","Error","version","jsonByteLength","parseUint64Value","stringAttribute","Uint8Array","textDecoder","TextDecoder","string","decode","subtree","JSON","parse","binaryByteLength","internalBinaryBuffer","ArrayBuffer","tileAvailability","explicitBitstream","getExplicitBitstream","contentAvailability","childSubtreeAvailability","name","bufferViewIndex","bufferView","bufferViews","buffer","buffers","uri","response","arrayBuffer","byteOffset","byteLength","dataView","DataView","left","getUint32","right"],"mappings":"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","sourcesContent":["import type {Subtree, ExplicitBitstream} from '../../../types';\nimport {fetchFile} from '@loaders.gl/core';\n\nconst SUBTREE_FILE_MAGIC = 0x74627573;\nconst SUBTREE_FILE_VERSION = 1;\n\n/**\n * Parse subtree file\n * Spec - https://github.com/CesiumGS/3d-tiles/tree/main/extensions/3DTILES_implicit_tiling#subtree-file-format\n * @param data\n * @returns\n */\n// eslint-disable-next-line max-statements\nexport default async function parse3DTilesSubtree(data: ArrayBuffer): Promise<Subtree> {\n const magic = new Uint32Array(data.slice(0, 4));\n\n if (magic[0] !== SUBTREE_FILE_MAGIC) {\n throw new Error('Wrong subtree file magic number');\n }\n\n const version = new Uint32Array(data.slice(4, 8));\n\n if (version[0] !== SUBTREE_FILE_VERSION) {\n throw new Error('Wrong subtree file verson, must be 1');\n }\n\n const jsonByteLength = parseUint64Value(data.slice(8, 16));\n const stringAttribute = new Uint8Array(data, 24, jsonByteLength);\n\n const textDecoder = new TextDecoder('utf8');\n const string = textDecoder.decode(stringAttribute);\n const subtree = JSON.parse(string);\n\n const binaryByteLength = parseUint64Value(data.slice(16, 24));\n let internalBinaryBuffer = new ArrayBuffer(0);\n\n if (binaryByteLength) {\n internalBinaryBuffer = data.slice(24 + jsonByteLength);\n }\n\n if ('bufferView' in subtree.tileAvailability) {\n subtree.tileAvailability.explicitBitstream = await getExplicitBitstream(\n subtree,\n 'tileAvailability',\n internalBinaryBuffer\n );\n }\n\n if ('bufferView' in subtree.contentAvailability) {\n subtree.contentAvailability.explicitBitstream = await getExplicitBitstream(\n subtree,\n 'contentAvailability',\n internalBinaryBuffer\n );\n }\n\n if ('bufferView' in subtree.childSubtreeAvailability) {\n subtree.childSubtreeAvailability.explicitBitstream = await getExplicitBitstream(\n subtree,\n 'childSubtreeAvailability',\n internalBinaryBuffer\n );\n }\n\n return subtree;\n}\n\n/**\n * Get explicit bitstream for subtree availability data.\n * @param subtree\n * @param name\n * @param internalBinaryBuffer\n */\nasync function getExplicitBitstream(\n subtree: Subtree,\n name: string,\n internalBinaryBuffer: ArrayBuffer\n): Promise<ExplicitBitstream> {\n const bufferViewIndex = subtree[name].bufferView;\n const bufferView = subtree.bufferViews[bufferViewIndex];\n const buffer = subtree.buffers[bufferView.buffer];\n\n // External bitstream loading\n if (buffer.uri) {\n const response = await fetchFile(buffer.uri);\n const data = await response.arrayBuffer();\n // Return view of bitstream.\n return new Uint8Array(data, bufferView.byteOffset, bufferView.byteLength);\n }\n // Return view of bitstream.\n return new Uint8Array(internalBinaryBuffer, bufferView.byteOffset, bufferView.byteLength);\n}\n\n/**\n * Parse buffer to return uint64 value\n * @param buffer\n * @returns 64-bit value until precision is lost after Number.MAX_SAFE_INTEGER\n */\nfunction parseUint64Value(buffer: ArrayBuffer): number {\n const dataView = new DataView(buffer);\n const left = dataView.getUint32(0, true);\n const right = dataView.getUint32(4, true);\n // combine the two 32-bit values\n return left + 2 ** 32 * right;\n}\n"],"file":"parse-3d-tile-subtree.js"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { GLTFLoader } from '@loaders.gl/gltf';
|
|
2
|
+
export async function parseGltf3DTile(tile, arrayBuffer, options, context) {
|
|
3
|
+
tile.rotateYtoZ = true;
|
|
4
|
+
tile.gltfUpAxis = options['3d-tiles'] && options['3d-tiles'].assetGltfUpAxis ? options['3d-tiles'].assetGltfUpAxis : 'Y';
|
|
5
|
+
const {
|
|
6
|
+
parse
|
|
7
|
+
} = context;
|
|
8
|
+
tile.gltf = await parse(arrayBuffer, GLTFLoader, options, context);
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=parse-3d-tile-gltf.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/lib/parsers/parse-3d-tile-gltf.js"],"names":["GLTFLoader","parseGltf3DTile","tile","arrayBuffer","options","context","rotateYtoZ","gltfUpAxis","assetGltfUpAxis","parse","gltf"],"mappings":"AAAA,SAAQA,UAAR,QAAyB,kBAAzB;AAEA,OAAO,eAAeC,eAAf,CAA+BC,IAA/B,EAAqCC,WAArC,EAAkDC,OAAlD,EAA2DC,OAA3D,EAAoE;AAIzEH,EAAAA,IAAI,CAACI,UAAL,GAAkB,IAAlB;AAEAJ,EAAAA,IAAI,CAACK,UAAL,GACEH,OAAO,CAAC,UAAD,CAAP,IAAuBA,OAAO,CAAC,UAAD,CAAP,CAAoBI,eAA3C,GACIJ,OAAO,CAAC,UAAD,CAAP,CAAoBI,eADxB,GAEI,GAHN;AAKA,QAAM;AAACC,IAAAA;AAAD,MAAUJ,OAAhB;AACAH,EAAAA,IAAI,CAACQ,IAAL,GAAY,MAAMD,KAAK,CAACN,WAAD,EAAcH,UAAd,EAA0BI,OAA1B,EAAmCC,OAAnC,CAAvB;AACD","sourcesContent":["import {GLTFLoader} from '@loaders.gl/gltf';\n\nexport async function parseGltf3DTile(tile, arrayBuffer, options, context) {\n // Set flags\n // glTF models need to be rotated from Y to Z up\n // https://github.com/AnalyticalGraphicsInc/3d-tiles/tree/master/specification#y-up-to-z-up\n tile.rotateYtoZ = true;\n // Save gltf up axis\n tile.gltfUpAxis =\n options['3d-tiles'] && options['3d-tiles'].assetGltfUpAxis\n ? options['3d-tiles'].assetGltfUpAxis\n : 'Y';\n\n const {parse} = context;\n tile.gltf = await parse(arrayBuffer, GLTFLoader, options, context);\n}\n"],"file":"parse-3d-tile-gltf.js"}
|
|
@@ -1,4 +1,7 @@
|
|
|
1
|
+
import { Tile3DSubtreeLoader } from '../../tile-3d-subtree-loader';
|
|
2
|
+
import { load } from '@loaders.gl/core';
|
|
1
3
|
import { LOD_METRIC_TYPE, TILE_REFINEMENT, TILE_TYPE } from '@loaders.gl/tiles';
|
|
4
|
+
import { parseImplicitTiles, replaceContentUrlTemplate } from './helpers/parse-3d-implicit-tiles';
|
|
2
5
|
|
|
3
6
|
function getTileType(tile) {
|
|
4
7
|
if (!tile.contentUrl) {
|
|
@@ -14,6 +17,8 @@ function getTileType(tile) {
|
|
|
14
17
|
|
|
15
18
|
case 'i3dm':
|
|
16
19
|
case 'b3dm':
|
|
20
|
+
case 'glb':
|
|
21
|
+
case 'gltf':
|
|
17
22
|
return TILE_TYPE.SCENEGRAPH;
|
|
18
23
|
|
|
19
24
|
default:
|
|
@@ -74,4 +79,66 @@ export function normalizeTileHeaders(tileset) {
|
|
|
74
79
|
|
|
75
80
|
return root;
|
|
76
81
|
}
|
|
82
|
+
export async function normalizeImplicitTileHeaders(tileset) {
|
|
83
|
+
if (!tileset.root) {
|
|
84
|
+
return null;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
const basePath = tileset.basePath;
|
|
88
|
+
const implicitTilingExtension = tileset.root.extensions['3DTILES_implicit_tiling'];
|
|
89
|
+
const {
|
|
90
|
+
subdivisionScheme,
|
|
91
|
+
maximumLevel,
|
|
92
|
+
subtreeLevels,
|
|
93
|
+
subtrees: {
|
|
94
|
+
uri: subtreesUriTemplate
|
|
95
|
+
}
|
|
96
|
+
} = implicitTilingExtension;
|
|
97
|
+
const subtreeUrl = replaceContentUrlTemplate(subtreesUriTemplate, 0, 0, 0, 0);
|
|
98
|
+
const rootSubtreeUrl = "".concat(basePath, "/").concat(subtreeUrl);
|
|
99
|
+
const rootSubtree = await load(rootSubtreeUrl, Tile3DSubtreeLoader);
|
|
100
|
+
const contentUrlTemplate = "".concat(basePath, "/").concat(tileset.root.content.uri);
|
|
101
|
+
const refine = tileset.root.refine;
|
|
102
|
+
const rootLodMetricValue = tileset.root.geometricError;
|
|
103
|
+
const options = {
|
|
104
|
+
contentUrlTemplate,
|
|
105
|
+
subtreesUriTemplate,
|
|
106
|
+
subdivisionScheme,
|
|
107
|
+
subtreeLevels,
|
|
108
|
+
maximumLevel,
|
|
109
|
+
refine,
|
|
110
|
+
basePath,
|
|
111
|
+
lodMetricType: LOD_METRIC_TYPE.GEOMETRIC_ERROR,
|
|
112
|
+
rootLodMetricValue,
|
|
113
|
+
getTileType,
|
|
114
|
+
getRefine
|
|
115
|
+
};
|
|
116
|
+
return await normalizeImplicitTileData(tileset.root, rootSubtree, options);
|
|
117
|
+
}
|
|
118
|
+
export async function normalizeImplicitTileData(tile, rootSubtree, options) {
|
|
119
|
+
if (!tile) {
|
|
120
|
+
return null;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
tile.lodMetricType = LOD_METRIC_TYPE.GEOMETRIC_ERROR;
|
|
124
|
+
tile.lodMetricValue = tile.geometricError;
|
|
125
|
+
tile.transformMatrix = tile.transform;
|
|
126
|
+
const {
|
|
127
|
+
children,
|
|
128
|
+
contentUrl
|
|
129
|
+
} = await parseImplicitTiles(rootSubtree, options);
|
|
130
|
+
|
|
131
|
+
if (contentUrl) {
|
|
132
|
+
tile.contentUrl = contentUrl;
|
|
133
|
+
tile.content = {
|
|
134
|
+
uri: contentUrl.replace("".concat(options.basePath, "/"), '')
|
|
135
|
+
};
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
tile.refine = getRefine(tile.refine);
|
|
139
|
+
tile.type = getTileType(tile);
|
|
140
|
+
tile.children = children;
|
|
141
|
+
tile.id = tile.contentUrl;
|
|
142
|
+
return tile;
|
|
143
|
+
}
|
|
77
144
|
//# sourceMappingURL=parse-3d-tile-header.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/lib/parsers/parse-3d-tile-header.ts"],"names":["LOD_METRIC_TYPE","TILE_REFINEMENT","TILE_TYPE","getTileType","tile","contentUrl","EMPTY","fileExtension","split","pop","POINTCLOUD","SCENEGRAPH","getRefine","refine","REPLACE","ADD","normalizeTileData","options","content","contentUri","uri","url","basePath","id","lodMetricType","GEOMETRIC_ERROR","lodMetricValue","geometricError","transformMatrix","transform","type","normalizeTileHeaders","tileset","root","stack","push","length","children","childHeader"],"mappings":"AAAA,SAAQA,
|
|
1
|
+
{"version":3,"sources":["../../../../src/lib/parsers/parse-3d-tile-header.ts"],"names":["Tile3DSubtreeLoader","load","LOD_METRIC_TYPE","TILE_REFINEMENT","TILE_TYPE","parseImplicitTiles","replaceContentUrlTemplate","getTileType","tile","contentUrl","EMPTY","fileExtension","split","pop","POINTCLOUD","SCENEGRAPH","getRefine","refine","REPLACE","ADD","normalizeTileData","options","content","contentUri","uri","url","basePath","id","lodMetricType","GEOMETRIC_ERROR","lodMetricValue","geometricError","transformMatrix","transform","type","normalizeTileHeaders","tileset","root","stack","push","length","children","childHeader","normalizeImplicitTileHeaders","implicitTilingExtension","extensions","subdivisionScheme","maximumLevel","subtreeLevels","subtrees","subtreesUriTemplate","subtreeUrl","rootSubtreeUrl","rootSubtree","contentUrlTemplate","rootLodMetricValue","normalizeImplicitTileData","replace"],"mappings":"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","sourcesContent":["import {Tile3DSubtreeLoader} from '../../tile-3d-subtree-loader';\nimport {load} from '@loaders.gl/core';\nimport {Tileset3D, LOD_METRIC_TYPE, TILE_REFINEMENT, TILE_TYPE} from '@loaders.gl/tiles';\nimport {Subtree} from '../../types';\nimport {parseImplicitTiles, replaceContentUrlTemplate} from './helpers/parse-3d-implicit-tiles';\n\nfunction getTileType(tile) {\n if (!tile.contentUrl) {\n return TILE_TYPE.EMPTY;\n }\n\n const contentUrl = tile.contentUrl;\n const fileExtension = contentUrl.split('.').pop();\n switch (fileExtension) {\n case 'pnts':\n return TILE_TYPE.POINTCLOUD;\n case 'i3dm':\n case 'b3dm':\n case 'glb':\n case 'gltf':\n return TILE_TYPE.SCENEGRAPH;\n default:\n return fileExtension;\n }\n}\n\nfunction getRefine(refine) {\n switch (refine) {\n case 'REPLACE':\n case 'replace':\n return TILE_REFINEMENT.REPLACE;\n case 'ADD':\n case 'add':\n return TILE_REFINEMENT.ADD;\n default:\n return refine;\n }\n}\n\nexport function normalizeTileData(tile, options) {\n if (!tile) {\n return null;\n }\n if (tile.content) {\n const contentUri = tile.content.uri || tile.content.url;\n tile.contentUrl = `${options.basePath}/${contentUri}`;\n }\n tile.id = tile.contentUrl;\n tile.lodMetricType = LOD_METRIC_TYPE.GEOMETRIC_ERROR;\n tile.lodMetricValue = tile.geometricError;\n tile.transformMatrix = tile.transform;\n tile.type = getTileType(tile);\n tile.refine = getRefine(tile.refine);\n\n return tile;\n}\n\n// normalize tile headers\nexport function normalizeTileHeaders(tileset) {\n const basePath = tileset.basePath;\n const root = normalizeTileData(tileset.root, tileset);\n\n const stack: any[] = [];\n stack.push(root);\n\n while (stack.length > 0) {\n const tile = stack.pop() || {};\n const children = tile.children || [];\n for (const childHeader of children) {\n normalizeTileData(childHeader, {basePath});\n stack.push(childHeader);\n }\n }\n\n return root;\n}\n\n/**\n * Do normalisation of implicit tile headers\n * TODO Check if Tile3D class can be a return type here.\n * @param tileset\n */\nexport async function normalizeImplicitTileHeaders(tileset: Tileset3D) {\n if (!tileset.root) {\n return null;\n }\n\n const basePath = tileset.basePath;\n const implicitTilingExtension = tileset.root.extensions['3DTILES_implicit_tiling'];\n const {\n subdivisionScheme,\n maximumLevel,\n subtreeLevels,\n subtrees: {uri: subtreesUriTemplate}\n } = implicitTilingExtension;\n const subtreeUrl = replaceContentUrlTemplate(subtreesUriTemplate, 0, 0, 0, 0);\n const rootSubtreeUrl = `${basePath}/${subtreeUrl}`;\n const rootSubtree = await load(rootSubtreeUrl, Tile3DSubtreeLoader);\n const contentUrlTemplate = `${basePath}/${tileset.root.content.uri}`;\n const refine = tileset.root.refine;\n // @ts-ignore\n const rootLodMetricValue = tileset.root.geometricError;\n\n const options = {\n contentUrlTemplate,\n subtreesUriTemplate,\n subdivisionScheme,\n subtreeLevels,\n maximumLevel,\n refine,\n basePath,\n lodMetricType: LOD_METRIC_TYPE.GEOMETRIC_ERROR,\n rootLodMetricValue,\n getTileType,\n getRefine\n };\n\n return await normalizeImplicitTileData(tileset.root, rootSubtree, options);\n}\n\n/**\n * Do implicit data normalisation to create hierarchical tile structure\n * @param tile\n * @param rootSubtree\n * @param options\n * @returns\n */\nexport async function normalizeImplicitTileData(tile, rootSubtree: Subtree, options: any) {\n if (!tile) {\n return null;\n }\n\n tile.lodMetricType = LOD_METRIC_TYPE.GEOMETRIC_ERROR;\n tile.lodMetricValue = tile.geometricError;\n tile.transformMatrix = tile.transform;\n\n const {children, contentUrl} = await parseImplicitTiles(rootSubtree, options);\n\n if (contentUrl) {\n tile.contentUrl = contentUrl;\n tile.content = {uri: contentUrl.replace(`${options.basePath}/`, '')};\n }\n\n tile.refine = getRefine(tile.refine);\n tile.type = getTileType(tile);\n tile.children = children;\n tile.id = tile.contentUrl;\n\n return tile;\n}\n"],"file":"parse-3d-tile-header.js"}
|
|
@@ -4,6 +4,7 @@ import { parsePointCloud3DTile } from './parse-3d-tile-point-cloud';
|
|
|
4
4
|
import { parseBatchedModel3DTile } from './parse-3d-tile-batched-model';
|
|
5
5
|
import { parseInstancedModel3DTile } from './parse-3d-tile-instanced-model';
|
|
6
6
|
import { parseComposite3DTile } from './parse-3d-tile-composite';
|
|
7
|
+
import { parseGltf3DTile } from './parse-3d-tile-gltf';
|
|
7
8
|
export async function parse3DTile(arrayBuffer, byteOffset = 0, options, context, tile = {}) {
|
|
8
9
|
tile.byteOffset = byteOffset;
|
|
9
10
|
tile.type = getMagicString(arrayBuffer, byteOffset);
|
|
@@ -15,6 +16,9 @@ export async function parse3DTile(arrayBuffer, byteOffset = 0, options, context,
|
|
|
15
16
|
case TILE3D_TYPE.BATCHED_3D_MODEL:
|
|
16
17
|
return await parseBatchedModel3DTile(tile, arrayBuffer, byteOffset, options, context);
|
|
17
18
|
|
|
19
|
+
case TILE3D_TYPE.GLTF:
|
|
20
|
+
return await parseGltf3DTile(tile, arrayBuffer, options, context);
|
|
21
|
+
|
|
18
22
|
case TILE3D_TYPE.INSTANCED_3D_MODEL:
|
|
19
23
|
return await parseInstancedModel3DTile(tile, arrayBuffer, byteOffset, options, context);
|
|
20
24
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/lib/parsers/parse-3d-tile.ts"],"names":["TILE3D_TYPE","getMagicString","parsePointCloud3DTile","parseBatchedModel3DTile","parseInstancedModel3DTile","parseComposite3DTile","parse3DTile","arrayBuffer","byteOffset","options","context","tile","type","COMPOSITE","BATCHED_3D_MODEL","INSTANCED_3D_MODEL","POINT_CLOUD","Error"],"mappings":"AAGA,SAAQA,WAAR,QAA0B,cAA1B;AACA,SAAQC,cAAR,QAA6B,uBAA7B;AAEA,SAAQC,qBAAR,QAAoC,6BAApC;AACA,SAAQC,uBAAR,QAAsC,+BAAtC;AACA,SAAQC,yBAAR,QAAwC,iCAAxC;AACA,SAAQC,oBAAR,QAAmC,2BAAnC;AAGA,OAAO,eAAeC,WAAf,CAA2BC,WAA3B,EAAwCC,UAAU,GAAG,CAArD,EAAwDC,OAAxD,EAAiEC,OAAjE,EAA0EC,IAAI,GAAG,EAAjF,EAAqF;AAE1FA,EAAAA,IAAI,CAACH,UAAL,GAAkBA,UAAlB;AAEAG,EAAAA,IAAI,CAACC,IAAL,
|
|
1
|
+
{"version":3,"sources":["../../../../src/lib/parsers/parse-3d-tile.ts"],"names":["TILE3D_TYPE","getMagicString","parsePointCloud3DTile","parseBatchedModel3DTile","parseInstancedModel3DTile","parseComposite3DTile","parseGltf3DTile","parse3DTile","arrayBuffer","byteOffset","options","context","tile","type","COMPOSITE","BATCHED_3D_MODEL","GLTF","INSTANCED_3D_MODEL","POINT_CLOUD","Error"],"mappings":"AAGA,SAAQA,WAAR,QAA0B,cAA1B;AACA,SAAQC,cAAR,QAA6B,uBAA7B;AAEA,SAAQC,qBAAR,QAAoC,6BAApC;AACA,SAAQC,uBAAR,QAAsC,+BAAtC;AACA,SAAQC,yBAAR,QAAwC,iCAAxC;AACA,SAAQC,oBAAR,QAAmC,2BAAnC;AACA,SAAQC,eAAR,QAA8B,sBAA9B;AAGA,OAAO,eAAeC,WAAf,CAA2BC,WAA3B,EAAwCC,UAAU,GAAG,CAArD,EAAwDC,OAAxD,EAAiEC,OAAjE,EAA0EC,IAAI,GAAG,EAAjF,EAAqF;AAE1FA,EAAAA,IAAI,CAACH,UAAL,GAAkBA,UAAlB;AAEAG,EAAAA,IAAI,CAACC,IAAL,GAAYZ,cAAc,CAACO,WAAD,EAAcC,UAAd,CAA1B;;AAGA,UAAQG,IAAI,CAACC,IAAb;AACE,SAAKb,WAAW,CAACc,SAAjB;AAEE,aAAO,MAAMT,oBAAoB,CAC/BO,IAD+B,EAE/BJ,WAF+B,EAG/BC,UAH+B,EAI/BC,OAJ+B,EAK/BC,OAL+B,EAM/BJ,WAN+B,CAAjC;;AASF,SAAKP,WAAW,CAACe,gBAAjB;AACE,aAAO,MAAMZ,uBAAuB,CAACS,IAAD,EAAOJ,WAAP,EAAoBC,UAApB,EAAgCC,OAAhC,EAAyCC,OAAzC,CAApC;;AAEF,SAAKX,WAAW,CAACgB,IAAjB;AACE,aAAO,MAAMV,eAAe,CAACM,IAAD,EAAOJ,WAAP,EAAoBE,OAApB,EAA6BC,OAA7B,CAA5B;;AAEF,SAAKX,WAAW,CAACiB,kBAAjB;AACE,aAAO,MAAMb,yBAAyB,CAACQ,IAAD,EAAOJ,WAAP,EAAoBC,UAApB,EAAgCC,OAAhC,EAAyCC,OAAzC,CAAtC;;AAEF,SAAKX,WAAW,CAACkB,WAAjB;AACE,aAAO,MAAMhB,qBAAqB,CAACU,IAAD,EAAOJ,WAAP,EAAoBC,UAApB,EAAgCC,OAAhC,EAAyCC,OAAzC,CAAlC;;AAEF;AAEE,YAAM,IAAIQ,KAAJ,sCAAwCP,IAAI,CAACC,IAA7C,EAAN;AA1BJ;AA4BD","sourcesContent":["// This file is derived from the Cesium code base under Apache 2 license\n// See LICENSE.md and https://github.com/AnalyticalGraphicsInc/cesium/blob/master/LICENSE.md\n\nimport {TILE3D_TYPE} from '../constants';\nimport {getMagicString} from './helpers/parse-utils';\n\nimport {parsePointCloud3DTile} from './parse-3d-tile-point-cloud';\nimport {parseBatchedModel3DTile} from './parse-3d-tile-batched-model';\nimport {parseInstancedModel3DTile} from './parse-3d-tile-instanced-model';\nimport {parseComposite3DTile} from './parse-3d-tile-composite';\nimport {parseGltf3DTile} from './parse-3d-tile-gltf';\n\n// Extracts\nexport async function parse3DTile(arrayBuffer, byteOffset = 0, options, context, tile = {}) {\n // @ts-expect-error\n tile.byteOffset = byteOffset;\n // @ts-expect-error\n tile.type = getMagicString(arrayBuffer, byteOffset);\n\n // @ts-expect-error\n switch (tile.type) {\n case TILE3D_TYPE.COMPOSITE:\n // Note: We pass this function as argument so that embedded tiles can be parsed recursively\n return await parseComposite3DTile(\n tile,\n arrayBuffer,\n byteOffset,\n options,\n context,\n parse3DTile\n );\n\n case TILE3D_TYPE.BATCHED_3D_MODEL:\n return await parseBatchedModel3DTile(tile, arrayBuffer, byteOffset, options, context);\n\n case TILE3D_TYPE.GLTF:\n return await parseGltf3DTile(tile, arrayBuffer, options, context);\n\n case TILE3D_TYPE.INSTANCED_3D_MODEL:\n return await parseInstancedModel3DTile(tile, arrayBuffer, byteOffset, options, context);\n\n case TILE3D_TYPE.POINT_CLOUD:\n return await parsePointCloud3DTile(tile, arrayBuffer, byteOffset, options, context);\n\n default:\n // @ts-expect-error\n throw new Error(`3DTileLoader: unknown type ${tile.type}`); // eslint-disable-line\n }\n}\n"],"file":"parse-3d-tile.js"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export const VERSION = typeof "3.1.
|
|
1
|
+
export const VERSION = typeof "3.1.1" !== 'undefined' ? "3.1.1" : 'latest';
|
|
2
2
|
//# sourceMappingURL=version.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/lib/utils/version.ts"],"names":["VERSION"],"mappings":"AAGA,OAAO,MAAMA,OAAO,GAAG,
|
|
1
|
+
{"version":3,"sources":["../../../../src/lib/utils/version.ts"],"names":["VERSION"],"mappings":"AAGA,OAAO,MAAMA,OAAO,GAAG,mBAAuB,WAAvB,aAAmD,QAAnE","sourcesContent":["// Version constant cannot be imported, it needs to correspond to the build version of **this** module.\n// __VERSION__ is injected by babel-plugin-version-inline\n// @ts-ignore TS2304: Cannot find name '__VERSION__'.\nexport const VERSION = typeof __VERSION__ !== 'undefined' ? __VERSION__ : 'latest';\n"],"file":"version.js"}
|
|
@@ -2,7 +2,8 @@ import { path } from '@loaders.gl/loader-utils';
|
|
|
2
2
|
import { TILESET_TYPE, LOD_METRIC_TYPE } from '@loaders.gl/tiles';
|
|
3
3
|
import { VERSION } from './lib/utils/version';
|
|
4
4
|
import { parse3DTile } from './lib/parsers/parse-3d-tile';
|
|
5
|
-
import { normalizeTileHeaders } from './lib/parsers/parse-3d-tile-header';
|
|
5
|
+
import { normalizeTileHeaders, normalizeImplicitTileHeaders } from './lib/parsers/parse-3d-tile-header';
|
|
6
|
+
const IMPLICIT_TILING_EXTENSION_NAME = '3DTILES_implicit_tiling';
|
|
6
7
|
export const Tiles3DLoader = {
|
|
7
8
|
id: '3d-tiles',
|
|
8
9
|
name: '3D Tiles',
|
|
@@ -44,7 +45,7 @@ async function parseTileset(data, options, context) {
|
|
|
44
45
|
tilesetJson.loader = options.loader || Tiles3DLoader;
|
|
45
46
|
tilesetJson.url = context.url;
|
|
46
47
|
tilesetJson.basePath = getBaseUri(tilesetJson);
|
|
47
|
-
tilesetJson.root = normalizeTileHeaders(tilesetJson);
|
|
48
|
+
tilesetJson.root = hasImplicitTilingExtension(tilesetJson) ? await normalizeImplicitTileHeaders(tilesetJson) : normalizeTileHeaders(tilesetJson);
|
|
48
49
|
tilesetJson.type = TILESET_TYPE.TILES3D;
|
|
49
50
|
tilesetJson.lodMetricType = LOD_METRIC_TYPE.GEOMETRIC_ERROR;
|
|
50
51
|
tilesetJson.lodMetricValue = ((_tilesetJson$root = tilesetJson.root) === null || _tilesetJson$root === void 0 ? void 0 : _tilesetJson$root.lodMetricValue) || 0;
|
|
@@ -69,4 +70,10 @@ async function parse(data, options, context) {
|
|
|
69
70
|
|
|
70
71
|
return data;
|
|
71
72
|
}
|
|
73
|
+
|
|
74
|
+
function hasImplicitTilingExtension(tilesetJson) {
|
|
75
|
+
var _tilesetJson$extensio, _tilesetJson$extensio2;
|
|
76
|
+
|
|
77
|
+
return (tilesetJson === null || tilesetJson === void 0 ? void 0 : (_tilesetJson$extensio = tilesetJson.extensionsRequired) === null || _tilesetJson$extensio === void 0 ? void 0 : _tilesetJson$extensio.includes(IMPLICIT_TILING_EXTENSION_NAME)) && (tilesetJson === null || tilesetJson === void 0 ? void 0 : (_tilesetJson$extensio2 = tilesetJson.extensionsUsed) === null || _tilesetJson$extensio2 === void 0 ? void 0 : _tilesetJson$extensio2.includes(IMPLICIT_TILING_EXTENSION_NAME));
|
|
78
|
+
}
|
|
72
79
|
//# sourceMappingURL=tiles-3d-loader.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/tiles-3d-loader.ts"],"names":["path","TILESET_TYPE","LOD_METRIC_TYPE","VERSION","parse3DTile","normalizeTileHeaders","Tiles3DLoader","id","name","module","version","extensions","mimeTypes","tests","parse","options","loadGLTF","decodeQuantizedPositions","isTileset","assetGltfUpAxis","getBaseUri","tileset","dirname","url","parseTile","arrayBuffer","context","tile","content","featureIds","byteOffset","parseTileset","data","tilesetJson","JSON","TextDecoder","decode","loader","basePath","root","type","TILES3D","lodMetricType","GEOMETRIC_ERROR","lodMetricValue","loaderOptions","indexOf"],"mappings":"AACA,SAAQA,IAAR,QAAmB,0BAAnB;AACA,SAAQC,YAAR,EAAsBC,eAAtB,QAA4C,mBAA5C;AACA,SAAQC,OAAR,QAAsB,qBAAtB;AACA,SAAQC,WAAR,QAA0B,6BAA1B;AACA,
|
|
1
|
+
{"version":3,"sources":["../../src/tiles-3d-loader.ts"],"names":["path","TILESET_TYPE","LOD_METRIC_TYPE","VERSION","parse3DTile","normalizeTileHeaders","normalizeImplicitTileHeaders","IMPLICIT_TILING_EXTENSION_NAME","Tiles3DLoader","id","name","module","version","extensions","mimeTypes","tests","parse","options","loadGLTF","decodeQuantizedPositions","isTileset","assetGltfUpAxis","getBaseUri","tileset","dirname","url","parseTile","arrayBuffer","context","tile","content","featureIds","byteOffset","parseTileset","data","tilesetJson","JSON","TextDecoder","decode","loader","basePath","root","hasImplicitTilingExtension","type","TILES3D","lodMetricType","GEOMETRIC_ERROR","lodMetricValue","loaderOptions","indexOf","extensionsRequired","includes","extensionsUsed"],"mappings":"AACA,SAAQA,IAAR,QAAmB,0BAAnB;AACA,SAAQC,YAAR,EAAsBC,eAAtB,QAA4C,mBAA5C;AACA,SAAQC,OAAR,QAAsB,qBAAtB;AACA,SAAQC,WAAR,QAA0B,6BAA1B;AACA,SACEC,oBADF,EAEEC,4BAFF,QAGO,oCAHP;AAKA,MAAMC,8BAA8B,GAAG,yBAAvC;AAKA,OAAO,MAAMC,aAA+B,GAAG;AAC7CC,EAAAA,EAAE,EAAE,UADyC;AAE7CC,EAAAA,IAAI,EAAE,UAFuC;AAG7CC,EAAAA,MAAM,EAAE,UAHqC;AAI7CC,EAAAA,OAAO,EAAET,OAJoC;AAK7CU,EAAAA,UAAU,EAAE,CAAC,MAAD,EAAS,MAAT,EAAiB,MAAjB,EAAyB,MAAzB,CALiC;AAM7CC,EAAAA,SAAS,EAAE,CAAC,0BAAD,CANkC;AAO7CC,EAAAA,KAAK,EAAE,CAAC,MAAD,EAAS,MAAT,EAAiB,MAAjB,EAAyB,MAAzB,CAPsC;AAQ7CC,EAAAA,KAR6C;AAS7CC,EAAAA,OAAO,EAAE;AACP,gBAAY;AACVC,MAAAA,QAAQ,EAAE,IADA;AAEVC,MAAAA,wBAAwB,EAAE,KAFhB;AAGVC,MAAAA,SAAS,EAAE,MAHD;AAIVC,MAAAA,eAAe,EAAE;AAJP;AADL;AAToC,CAAxC;;AAmBP,SAASC,UAAT,CAAoBC,OAApB,EAA6B;AAC3B,SAAOvB,IAAI,CAACwB,OAAL,CAAaD,OAAO,CAACE,GAArB,CAAP;AACD;;AAED,eAAeC,SAAf,CAAyBC,WAAzB,EAAsCV,OAAtC,EAA+CW,OAA/C,EAAwD;AACtD,QAAMC,IAAI,GAAG;AACXC,IAAAA,OAAO,EAAE;AACPC,MAAAA,UAAU,EAAE;AADL;AADE,GAAb;AAKA,QAAMC,UAAU,GAAG,CAAnB;AACA,QAAM5B,WAAW,CAACuB,WAAD,EAAcK,UAAd,EAA0Bf,OAA1B,EAAmCW,OAAnC,EAA4CC,IAAI,CAACC,OAAjD,CAAjB;AACA,SAAOD,IAAI,CAACC,OAAZ;AACD;;AAED,eAAeG,YAAf,CAA4BC,IAA5B,EAAkCjB,OAAlC,EAA2CW,OAA3C,EAAoD;AAAA;;AAClD,QAAMO,WAAW,GAAGC,IAAI,CAACpB,KAAL,CAAW,IAAIqB,WAAJ,GAAkBC,MAAlB,CAAyBJ,IAAzB,CAAX,CAApB;AAEAC,EAAAA,WAAW,CAACI,MAAZ,GAAqBtB,OAAO,CAACsB,MAAR,IAAkB/B,aAAvC;AACA2B,EAAAA,WAAW,CAACV,GAAZ,GAAkBG,OAAO,CAACH,GAA1B;AAEAU,EAAAA,WAAW,CAACK,QAAZ,GAAuBlB,UAAU,CAACa,WAAD,CAAjC;AACAA,EAAAA,WAAW,CAACM,IAAZ,GAAmBC,0BAA0B,CAACP,WAAD,CAA1B,GACf,MAAM7B,4BAA4B,CAAC6B,WAAD,CADnB,GAEf9B,oBAAoB,CAAC8B,WAAD,CAFxB;AAIAA,EAAAA,WAAW,CAACQ,IAAZ,GAAmB1C,YAAY,CAAC2C,OAAhC;AAEAT,EAAAA,WAAW,CAACU,aAAZ,GAA4B3C,eAAe,CAAC4C,eAA5C;AACAX,EAAAA,WAAW,CAACY,cAAZ,GAA6B,sBAAAZ,WAAW,CAACM,IAAZ,wEAAkBM,cAAlB,KAAoC,CAAjE;AAEA,SAAOZ,WAAP;AACD;;AAED,eAAenB,KAAf,CAAqBkB,IAArB,EAA2BjB,OAA3B,EAAoCW,OAApC,EAA6C;AAE3C,QAAMoB,aAAa,GAAG/B,OAAO,CAAC,UAAD,CAAP,IAAuB,EAA7C;AACA,MAAIG,SAAJ;;AACA,MAAI4B,aAAa,CAAC5B,SAAd,KAA4B,MAAhC,EAAwC;AACtCA,IAAAA,SAAS,GAAGQ,OAAO,CAACH,GAAR,IAAeG,OAAO,CAACH,GAAR,CAAYwB,OAAZ,CAAoB,OAApB,MAAiC,CAAC,CAA7D;AACD,GAFD,MAEO;AACL7B,IAAAA,SAAS,GAAG4B,aAAa,CAAC5B,SAA1B;AACD;;AAED,MAAIA,SAAJ,EAAe;AACbc,IAAAA,IAAI,GAAG,MAAMD,YAAY,CAACC,IAAD,EAAOjB,OAAP,EAAgBW,OAAhB,CAAzB;AACD,GAFD,MAEO;AACLM,IAAAA,IAAI,GAAG,MAAMR,SAAS,CAACQ,IAAD,EAAOjB,OAAP,EAAgBW,OAAhB,CAAtB;AACD;;AAED,SAAOM,IAAP;AACD;;AAED,SAASQ,0BAAT,CAAoCP,WAApC,EAAiD;AAAA;;AAC/C,SACE,CAAAA,WAAW,SAAX,IAAAA,WAAW,WAAX,qCAAAA,WAAW,CAAEe,kBAAb,gFAAiCC,QAAjC,CAA0C5C,8BAA1C,OACA4B,WADA,aACAA,WADA,iDACAA,WAAW,CAAEiB,cADb,2DACA,uBAA6BD,QAA7B,CAAsC5C,8BAAtC,CADA,CADF;AAID","sourcesContent":["import type {LoaderWithParser} from '@loaders.gl/loader-utils';\nimport {path} from '@loaders.gl/loader-utils';\nimport {TILESET_TYPE, LOD_METRIC_TYPE} from '@loaders.gl/tiles';\nimport {VERSION} from './lib/utils/version';\nimport {parse3DTile} from './lib/parsers/parse-3d-tile';\nimport {\n normalizeTileHeaders,\n normalizeImplicitTileHeaders\n} from './lib/parsers/parse-3d-tile-header';\n\nconst IMPLICIT_TILING_EXTENSION_NAME = '3DTILES_implicit_tiling';\n\n/**\n * Loader for 3D Tiles\n */\nexport const Tiles3DLoader: LoaderWithParser = {\n id: '3d-tiles',\n name: '3D Tiles',\n module: '3d-tiles',\n version: VERSION,\n extensions: ['cmpt', 'pnts', 'b3dm', 'i3dm'],\n mimeTypes: ['application/octet-stream'],\n tests: ['cmpt', 'pnts', 'b3dm', 'i3dm'],\n parse,\n options: {\n '3d-tiles': {\n loadGLTF: true,\n decodeQuantizedPositions: false,\n isTileset: 'auto',\n assetGltfUpAxis: null\n }\n }\n};\n\nfunction getBaseUri(tileset) {\n return path.dirname(tileset.url);\n}\n\nasync function parseTile(arrayBuffer, options, context) {\n const tile = {\n content: {\n featureIds: null\n }\n };\n const byteOffset = 0;\n await parse3DTile(arrayBuffer, byteOffset, options, context, tile.content);\n return tile.content;\n}\n\nasync function parseTileset(data, options, context) {\n const tilesetJson = JSON.parse(new TextDecoder().decode(data));\n // eslint-disable-next-line no-use-before-define\n tilesetJson.loader = options.loader || Tiles3DLoader;\n tilesetJson.url = context.url;\n // base path that non-absolute paths in tileset are relative to.\n tilesetJson.basePath = getBaseUri(tilesetJson);\n tilesetJson.root = hasImplicitTilingExtension(tilesetJson)\n ? await normalizeImplicitTileHeaders(tilesetJson)\n : normalizeTileHeaders(tilesetJson);\n\n tilesetJson.type = TILESET_TYPE.TILES3D;\n\n tilesetJson.lodMetricType = LOD_METRIC_TYPE.GEOMETRIC_ERROR;\n tilesetJson.lodMetricValue = tilesetJson.root?.lodMetricValue || 0;\n\n return tilesetJson;\n}\n\nasync function parse(data, options, context) {\n // auto detect file type\n const loaderOptions = options['3d-tiles'] || {};\n let isTileset;\n if (loaderOptions.isTileset === 'auto') {\n isTileset = context.url && context.url.indexOf('.json') !== -1;\n } else {\n isTileset = loaderOptions.isTileset;\n }\n\n if (isTileset) {\n data = await parseTileset(data, options, context);\n } else {\n data = await parseTile(data, options, context);\n }\n\n return data;\n}\n\nfunction hasImplicitTilingExtension(tilesetJson) {\n return (\n tilesetJson?.extensionsRequired?.includes(IMPLICIT_TILING_EXTENSION_NAME) &&\n tilesetJson?.extensionsUsed?.includes(IMPLICIT_TILING_EXTENSION_NAME)\n );\n}\n"],"file":"tiles-3d-loader.js"}
|
package/dist/lib/constants.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/lib/constants.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,WAAW
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/lib/constants.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,WAAW;;;;;;;;CAQvB,CAAC;AAEF,eAAO,MAAM,YAAY,UAA2B,CAAC;AAErD,eAAO,MAAM,WAAW;;;;;CAKvB,CAAC;AAGF,eAAO,MAAM,wBAAwB;;;;CAIpC,CAAC"}
|
package/dist/lib/constants.js
CHANGED
package/dist/lib/ion/ion.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export function getIonTilesetMetadata(accessToken: any, assetId: any): Promise<any>;
|
|
2
|
-
export function getIonAssets(accessToken: any): Promise<any>;
|
|
3
|
-
export function getIonAssetMetadata(accessToken: any, assetId: any): Promise<any>;
|
|
1
|
+
export declare function getIonTilesetMetadata(accessToken: any, assetId: any): Promise<any>;
|
|
2
|
+
export declare function getIonAssets(accessToken: any): Promise<any>;
|
|
3
|
+
export declare function getIonAssetMetadata(accessToken: any, assetId: any): Promise<any>;
|
|
4
4
|
//# sourceMappingURL=ion.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ion.d.ts","sourceRoot":"","sources":["../../../src/lib/ion/ion.
|
|
1
|
+
{"version":3,"file":"ion.d.ts","sourceRoot":"","sources":["../../../src/lib/ion/ion.ts"],"names":[],"mappings":"AAQA,wBAAsB,qBAAqB,CAAC,WAAW,KAAA,EAAE,OAAO,KAAA,gBAqB/D;AAGD,wBAAsB,YAAY,CAAC,WAAW,KAAA,gBAS7C;AAGD,wBAAsB,mBAAmB,CAAC,WAAW,KAAA,EAAE,OAAO,KAAA,gBA4B7D"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import type { Subtree } from '../../../types';
|
|
2
|
+
/**
|
|
3
|
+
* Recursively parse implicit tiles tree
|
|
4
|
+
* Spec - https://github.com/CesiumGS/3d-tiles/tree/main/extensions/3DTILES_implicit_tiling
|
|
5
|
+
* TODO Check out do we able to use Tile3D class as return type here.
|
|
6
|
+
* @param subtree
|
|
7
|
+
* @param lodMetricValue
|
|
8
|
+
* @param options
|
|
9
|
+
* @param parentData
|
|
10
|
+
* @param childIndex
|
|
11
|
+
* @param level
|
|
12
|
+
* @param globalData
|
|
13
|
+
*/
|
|
14
|
+
export declare function parseImplicitTiles(subtree: Subtree, options: any, parentData?: {
|
|
15
|
+
mortonIndex: number;
|
|
16
|
+
x: number;
|
|
17
|
+
y: number;
|
|
18
|
+
z: number;
|
|
19
|
+
}, childIndex?: number, level?: number, globalData?: {
|
|
20
|
+
level: number;
|
|
21
|
+
mortonIndex: number;
|
|
22
|
+
x: number;
|
|
23
|
+
y: number;
|
|
24
|
+
z: number;
|
|
25
|
+
}): Promise<{
|
|
26
|
+
children: never[];
|
|
27
|
+
lodMetricValue: number;
|
|
28
|
+
contentUrl: string;
|
|
29
|
+
}>;
|
|
30
|
+
/**
|
|
31
|
+
* Replace implicit tile content url with real coordinates.
|
|
32
|
+
* @param templateUrl
|
|
33
|
+
* @param level
|
|
34
|
+
* @param x
|
|
35
|
+
* @param y
|
|
36
|
+
* @param z
|
|
37
|
+
*/
|
|
38
|
+
export declare function replaceContentUrlTemplate(templateUrl: string, level: number, x: number, y: number, z: number): string;
|
|
39
|
+
//# sourceMappingURL=parse-3d-implicit-tiles.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse-3d-implicit-tiles.d.ts","sourceRoot":"","sources":["../../../../src/lib/parsers/helpers/parse-3d-implicit-tiles.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAe,OAAO,EAAC,MAAM,gBAAgB,CAAC;AAY1D;;;;;;;;;;;GAWG;AAGH,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,GAAG,EACZ,UAAU,GAAE;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAKhE,EACD,UAAU,GAAE,MAAU,EACtB,KAAK,GAAE,MAAU,EACjB,UAAU,GAAE;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAM/E;;;;GA6GF;AAqDD;;;;;;;GAOG;AACH,wBAAgB,yBAAyB,CACvC,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,MAAM,EACb,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,GACR,MAAM,CAGR"}
|
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.replaceContentUrlTemplate = exports.parseImplicitTiles = void 0;
|
|
4
|
+
const tile_3d_subtree_loader_1 = require("../../../tile-3d-subtree-loader");
|
|
5
|
+
const core_1 = require("@loaders.gl/core");
|
|
6
|
+
const QUADTREE_DEVISION_COUNT = 4;
|
|
7
|
+
const OCTREE_DEVISION_COUNT = 8;
|
|
8
|
+
const SUBDIVISION_COUNT_MAP = {
|
|
9
|
+
QUADTREE: QUADTREE_DEVISION_COUNT,
|
|
10
|
+
OCTREE: OCTREE_DEVISION_COUNT
|
|
11
|
+
};
|
|
12
|
+
/**
|
|
13
|
+
* Recursively parse implicit tiles tree
|
|
14
|
+
* Spec - https://github.com/CesiumGS/3d-tiles/tree/main/extensions/3DTILES_implicit_tiling
|
|
15
|
+
* TODO Check out do we able to use Tile3D class as return type here.
|
|
16
|
+
* @param subtree
|
|
17
|
+
* @param lodMetricValue
|
|
18
|
+
* @param options
|
|
19
|
+
* @param parentData
|
|
20
|
+
* @param childIndex
|
|
21
|
+
* @param level
|
|
22
|
+
* @param globalData
|
|
23
|
+
*/
|
|
24
|
+
// eslint-disable-next-line max-params
|
|
25
|
+
// eslint-disable-next-line max-statements
|
|
26
|
+
async function parseImplicitTiles(subtree, options, parentData = {
|
|
27
|
+
mortonIndex: 0,
|
|
28
|
+
x: 0,
|
|
29
|
+
y: 0,
|
|
30
|
+
z: 0
|
|
31
|
+
}, childIndex = 0, level = 0, globalData = {
|
|
32
|
+
level: 0,
|
|
33
|
+
mortonIndex: 0,
|
|
34
|
+
x: 0,
|
|
35
|
+
y: 0,
|
|
36
|
+
z: 0
|
|
37
|
+
}) {
|
|
38
|
+
const { subdivisionScheme, subtreeLevels, maximumLevel, contentUrlTemplate, subtreesUriTemplate, basePath } = options;
|
|
39
|
+
const tile = { children: [], lodMetricValue: 0, contentUrl: '' };
|
|
40
|
+
const childrenPerTile = SUBDIVISION_COUNT_MAP[subdivisionScheme];
|
|
41
|
+
const childX = childIndex & 0b01;
|
|
42
|
+
const childY = (childIndex >> 1) & 0b01;
|
|
43
|
+
const childZ = (childIndex >> 2) & 0b01;
|
|
44
|
+
const levelOffset = (childrenPerTile ** level - 1) / (childrenPerTile - 1);
|
|
45
|
+
let childTileMortonIndex = concatBits(parentData.mortonIndex, childIndex);
|
|
46
|
+
let tileAvailabilityIndex = levelOffset + childTileMortonIndex;
|
|
47
|
+
// Local tile coordinates
|
|
48
|
+
let childTileX = concatBits(parentData.x, childX);
|
|
49
|
+
let childTileY = concatBits(parentData.y, childY);
|
|
50
|
+
let childTileZ = concatBits(parentData.z, childZ);
|
|
51
|
+
// TODO Remove after real implicit tileset will be tested.
|
|
52
|
+
// Degug data
|
|
53
|
+
// tile.level = level + globalData.level;
|
|
54
|
+
// tile.x = concatBits(globalData.x, childTileX);
|
|
55
|
+
// tile.y = concatBits(globalData.y, childTileY);
|
|
56
|
+
// tile.z = concatBits(globalData.z, childTileZ);
|
|
57
|
+
// tile.mortonIndex = childTileMortonIndex;
|
|
58
|
+
// End of debug data
|
|
59
|
+
let isChildSubtreeAvailable = false;
|
|
60
|
+
if (level + 1 > subtreeLevels) {
|
|
61
|
+
isChildSubtreeAvailable = getAvailabilityResult(subtree.childSubtreeAvailability, childTileMortonIndex);
|
|
62
|
+
}
|
|
63
|
+
const x = concatBits(globalData.x, childTileX);
|
|
64
|
+
const y = concatBits(globalData.y, childTileY);
|
|
65
|
+
const z = concatBits(globalData.z, childTileZ);
|
|
66
|
+
const lev = level + globalData.level;
|
|
67
|
+
if (isChildSubtreeAvailable) {
|
|
68
|
+
const subtreePath = `${basePath}/${subtreesUriTemplate}`;
|
|
69
|
+
const childSubtreeUrl = replaceContentUrlTemplate(subtreePath, lev, x, y, z);
|
|
70
|
+
const childSubtree = await (0, core_1.load)(childSubtreeUrl, tile_3d_subtree_loader_1.Tile3DSubtreeLoader);
|
|
71
|
+
subtree = childSubtree;
|
|
72
|
+
globalData.mortonIndex = childTileMortonIndex;
|
|
73
|
+
globalData.x = childTileX;
|
|
74
|
+
globalData.y = childTileY;
|
|
75
|
+
globalData.z = childTileZ;
|
|
76
|
+
globalData.level = level;
|
|
77
|
+
childTileMortonIndex = 0;
|
|
78
|
+
tileAvailabilityIndex = 0;
|
|
79
|
+
childTileX = 0;
|
|
80
|
+
childTileY = 0;
|
|
81
|
+
childTileZ = 0;
|
|
82
|
+
level = 0;
|
|
83
|
+
}
|
|
84
|
+
const isTileAvailable = getAvailabilityResult(subtree.tileAvailability, tileAvailabilityIndex);
|
|
85
|
+
if (!isTileAvailable || level > maximumLevel) {
|
|
86
|
+
return tile;
|
|
87
|
+
}
|
|
88
|
+
const isContentAvailable = getAvailabilityResult(subtree.contentAvailability, tileAvailabilityIndex);
|
|
89
|
+
if (isContentAvailable) {
|
|
90
|
+
tile.contentUrl = replaceContentUrlTemplate(contentUrlTemplate, lev, x, y, z);
|
|
91
|
+
}
|
|
92
|
+
const childTileLevel = level + 1;
|
|
93
|
+
const pData = { mortonIndex: childTileMortonIndex, x: childTileX, y: childTileY, z: childTileZ };
|
|
94
|
+
for (let index = 0; index < childrenPerTile; index++) {
|
|
95
|
+
const currentTile = await parseImplicitTiles(subtree, options, pData, index, childTileLevel, globalData);
|
|
96
|
+
if (currentTile.contentUrl || currentTile.children.length) {
|
|
97
|
+
const globalLevel = lev + 1;
|
|
98
|
+
const formattedTile = formatTileData(currentTile, globalLevel, options);
|
|
99
|
+
// @ts-ignore
|
|
100
|
+
tile.children.push(formattedTile);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
return tile;
|
|
104
|
+
}
|
|
105
|
+
exports.parseImplicitTiles = parseImplicitTiles;
|
|
106
|
+
function getAvailabilityResult(availabilityData, index) {
|
|
107
|
+
if ('constant' in availabilityData) {
|
|
108
|
+
return Boolean(availabilityData.constant);
|
|
109
|
+
}
|
|
110
|
+
if (availabilityData.explicitBitstream) {
|
|
111
|
+
return getBooleanValueFromBitstream(index, availabilityData.explicitBitstream);
|
|
112
|
+
}
|
|
113
|
+
return false;
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Do formatting of implicit tile data.
|
|
117
|
+
* TODO Check out do we able to use Tile3D class as type here.
|
|
118
|
+
* @param tile
|
|
119
|
+
* @param lodMetricValue
|
|
120
|
+
* @param options
|
|
121
|
+
* @returns
|
|
122
|
+
*/
|
|
123
|
+
function formatTileData(tile, level, options) {
|
|
124
|
+
const { basePath, refine, getRefine, lodMetricType, getTileType, rootLodMetricValue } = options;
|
|
125
|
+
const uri = tile.contentUrl && tile.contentUrl.replace(`${basePath}/`, '');
|
|
126
|
+
const lodMetricValue = rootLodMetricValue / 2 ** level;
|
|
127
|
+
// TODO handle bounding volume
|
|
128
|
+
return {
|
|
129
|
+
children: tile.children,
|
|
130
|
+
contentUrl: tile.contentUrl,
|
|
131
|
+
content: { uri },
|
|
132
|
+
id: tile.contentUrl,
|
|
133
|
+
refine: getRefine(refine),
|
|
134
|
+
type: getTileType(tile),
|
|
135
|
+
lodMetricType,
|
|
136
|
+
lodMetricValue
|
|
137
|
+
// Temp debug values. Remove when real implicit tileset will be tested.
|
|
138
|
+
// x: tile.x,
|
|
139
|
+
// y: tile.y,
|
|
140
|
+
// z: tile.z,
|
|
141
|
+
// level: tile.level
|
|
142
|
+
};
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Do binary concatenation
|
|
146
|
+
* @param first
|
|
147
|
+
* @param second
|
|
148
|
+
*/
|
|
149
|
+
function concatBits(first, second) {
|
|
150
|
+
return parseInt(first.toString(2) + second.toString(2), 2);
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Replace implicit tile content url with real coordinates.
|
|
154
|
+
* @param templateUrl
|
|
155
|
+
* @param level
|
|
156
|
+
* @param x
|
|
157
|
+
* @param y
|
|
158
|
+
* @param z
|
|
159
|
+
*/
|
|
160
|
+
function replaceContentUrlTemplate(templateUrl, level, x, y, z) {
|
|
161
|
+
const mapUrl = generateMapUrl({ level, x, y, z });
|
|
162
|
+
return templateUrl.replace(/{level}|{x}|{y}|{z}/gi, (matched) => mapUrl[matched]);
|
|
163
|
+
}
|
|
164
|
+
exports.replaceContentUrlTemplate = replaceContentUrlTemplate;
|
|
165
|
+
/**
|
|
166
|
+
* Get Map object for content url generation
|
|
167
|
+
* @param items
|
|
168
|
+
*/
|
|
169
|
+
function generateMapUrl(items) {
|
|
170
|
+
const mapUrl = {};
|
|
171
|
+
for (const key in items) {
|
|
172
|
+
mapUrl[`{${key}}`] = items[key];
|
|
173
|
+
}
|
|
174
|
+
return mapUrl;
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* Get boolean value from bistream by index
|
|
178
|
+
* A boolean value is encoded as a single bit, either 0 (false) or 1 (true).
|
|
179
|
+
* Multiple boolean values are packed tightly in the same buffer.
|
|
180
|
+
* These buffers of tightly-packed bits are sometimes referred to as bitstreams.
|
|
181
|
+
* Spec - https://github.com/CesiumGS/3d-tiles/tree/implicit-revisions/specification/Metadata#booleans
|
|
182
|
+
* @param availabilitiIndex
|
|
183
|
+
*/
|
|
184
|
+
function getBooleanValueFromBitstream(availabilityIndex, availabilityBuffer) {
|
|
185
|
+
const byteIndex = Math.floor(availabilityIndex / 8);
|
|
186
|
+
const bitIndex = availabilityIndex % 8;
|
|
187
|
+
const bitValue = (availabilityBuffer[byteIndex] >> bitIndex) & 1;
|
|
188
|
+
return bitValue === 1;
|
|
189
|
+
}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { Subtree } from '../../../types';
|
|
2
2
|
/**
|
|
3
3
|
* Parse subtree file
|
|
4
4
|
* Spec - https://github.com/CesiumGS/3d-tiles/tree/main/extensions/3DTILES_implicit_tiling#subtree-file-format
|
|
5
5
|
* @param data
|
|
6
6
|
* @returns
|
|
7
7
|
*/
|
|
8
|
-
export default function parse3DTilesSubtree(data: ArrayBuffer): Promise<
|
|
8
|
+
export default function parse3DTilesSubtree(data: ArrayBuffer): Promise<Subtree>;
|
|
9
9
|
//# sourceMappingURL=parse-3d-tile-subtree.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parse-3d-tile-subtree.d.ts","sourceRoot":"","sources":["../../../../src/lib/parsers/helpers/parse-3d-tile-subtree.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,
|
|
1
|
+
{"version":3,"file":"parse-3d-tile-subtree.d.ts","sourceRoot":"","sources":["../../../../src/lib/parsers/helpers/parse-3d-tile-subtree.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,OAAO,EAAoB,MAAM,gBAAgB,CAAC;AAM/D;;;;;GAKG;AAEH,wBAA8B,mBAAmB,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,CAoDrF"}
|
|
@@ -8,7 +8,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
8
8
|
exports.parseBatchedModel3DTile = void 0;
|
|
9
9
|
const math_1 = require("@loaders.gl/math"); // math.gl/geometry;
|
|
10
10
|
const tile_3d_feature_table_1 = __importDefault(require("../classes/tile-3d-feature-table"));
|
|
11
|
-
// import Tile3DBatchTable from '../classes/tile-3d-batch-table
|
|
11
|
+
// import Tile3DBatchTable from '../classes/tile-3d-batch-table';
|
|
12
12
|
const parse_3d_tile_header_1 = require("./helpers/parse-3d-tile-header");
|
|
13
13
|
const parse_3d_tile_tables_1 = require("./helpers/parse-3d-tile-tables");
|
|
14
14
|
const parse_3d_tile_gltf_view_1 = require("./helpers/parse-3d-tile-gltf-view");
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse-3d-tile-gltf.d.ts","sourceRoot":"","sources":["../../../src/lib/parsers/parse-3d-tile-gltf.js"],"names":[],"mappings":"AAEA,wGAaC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.parseGltf3DTile = void 0;
|
|
4
|
+
const gltf_1 = require("@loaders.gl/gltf");
|
|
5
|
+
async function parseGltf3DTile(tile, arrayBuffer, options, context) {
|
|
6
|
+
// Set flags
|
|
7
|
+
// glTF models need to be rotated from Y to Z up
|
|
8
|
+
// https://github.com/AnalyticalGraphicsInc/3d-tiles/tree/master/specification#y-up-to-z-up
|
|
9
|
+
tile.rotateYtoZ = true;
|
|
10
|
+
// Save gltf up axis
|
|
11
|
+
tile.gltfUpAxis =
|
|
12
|
+
options['3d-tiles'] && options['3d-tiles'].assetGltfUpAxis
|
|
13
|
+
? options['3d-tiles'].assetGltfUpAxis
|
|
14
|
+
: 'Y';
|
|
15
|
+
const { parse } = context;
|
|
16
|
+
tile.gltf = await parse(arrayBuffer, gltf_1.GLTFLoader, options, context);
|
|
17
|
+
}
|
|
18
|
+
exports.parseGltf3DTile = parseGltf3DTile;
|