@loaders.gl/3d-tiles 3.1.0-beta.5 → 3.1.2
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 +5 -10008
- package/dist/dist.min.js +12179 -0
- 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-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 +9 -9
- 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
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports.parseGltf3DTile = parseGltf3DTile;
|
|
9
|
+
|
|
10
|
+
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
|
11
|
+
|
|
12
|
+
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
|
13
|
+
|
|
14
|
+
var _gltf = require("@loaders.gl/gltf");
|
|
15
|
+
|
|
16
|
+
function parseGltf3DTile(_x, _x2, _x3, _x4) {
|
|
17
|
+
return _parseGltf3DTile.apply(this, arguments);
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
function _parseGltf3DTile() {
|
|
21
|
+
_parseGltf3DTile = (0, _asyncToGenerator2.default)(_regenerator.default.mark(function _callee(tile, arrayBuffer, options, context) {
|
|
22
|
+
var parse;
|
|
23
|
+
return _regenerator.default.wrap(function _callee$(_context) {
|
|
24
|
+
while (1) {
|
|
25
|
+
switch (_context.prev = _context.next) {
|
|
26
|
+
case 0:
|
|
27
|
+
tile.rotateYtoZ = true;
|
|
28
|
+
tile.gltfUpAxis = options['3d-tiles'] && options['3d-tiles'].assetGltfUpAxis ? options['3d-tiles'].assetGltfUpAxis : 'Y';
|
|
29
|
+
parse = context.parse;
|
|
30
|
+
_context.next = 5;
|
|
31
|
+
return parse(arrayBuffer, _gltf.GLTFLoader, options, context);
|
|
32
|
+
|
|
33
|
+
case 5:
|
|
34
|
+
tile.gltf = _context.sent;
|
|
35
|
+
|
|
36
|
+
case 6:
|
|
37
|
+
case "end":
|
|
38
|
+
return _context.stop();
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
}, _callee);
|
|
42
|
+
}));
|
|
43
|
+
return _parseGltf3DTile.apply(this, arguments);
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=parse-3d-tile-gltf.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/lib/parsers/parse-3d-tile-gltf.js"],"names":["parseGltf3DTile","tile","arrayBuffer","options","context","rotateYtoZ","gltfUpAxis","assetGltfUpAxis","parse","GLTFLoader","gltf"],"mappings":";;;;;;;;;;;;;AAAA;;SAEsBA,e;;;;;+EAAf,iBAA+BC,IAA/B,EAAqCC,WAArC,EAAkDC,OAAlD,EAA2DC,OAA3D;AAAA;AAAA;AAAA;AAAA;AAAA;AAILH,YAAAA,IAAI,CAACI,UAAL,GAAkB,IAAlB;AAEAJ,YAAAA,IAAI,CAACK,UAAL,GACEH,OAAO,CAAC,UAAD,CAAP,IAAuBA,OAAO,CAAC,UAAD,CAAP,CAAoBI,eAA3C,GACIJ,OAAO,CAAC,UAAD,CAAP,CAAoBI,eADxB,GAEI,GAHN;AAKOC,YAAAA,KAXF,GAWWJ,OAXX,CAWEI,KAXF;AAAA;AAAA,mBAYaA,KAAK,CAACN,WAAD,EAAcO,gBAAd,EAA0BN,OAA1B,EAAmCC,OAAnC,CAZlB;;AAAA;AAYLH,YAAAA,IAAI,CAACS,IAZA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,G","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,20 +1,40 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
3
5
|
Object.defineProperty(exports, "__esModule", {
|
|
4
6
|
value: true
|
|
5
7
|
});
|
|
6
8
|
exports.normalizeTileData = normalizeTileData;
|
|
7
9
|
exports.normalizeTileHeaders = normalizeTileHeaders;
|
|
10
|
+
exports.normalizeImplicitTileHeaders = normalizeImplicitTileHeaders;
|
|
11
|
+
exports.normalizeImplicitTileData = normalizeImplicitTileData;
|
|
12
|
+
|
|
13
|
+
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
|
14
|
+
|
|
15
|
+
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
|
16
|
+
|
|
17
|
+
var _tile3dSubtreeLoader = require("../../tile-3d-subtree-loader");
|
|
18
|
+
|
|
19
|
+
var _core = require("@loaders.gl/core");
|
|
8
20
|
|
|
9
21
|
var _tiles = require("@loaders.gl/tiles");
|
|
10
22
|
|
|
23
|
+
var _parse3dImplicitTiles = require("./helpers/parse-3d-implicit-tiles");
|
|
24
|
+
|
|
25
|
+
function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }
|
|
26
|
+
|
|
27
|
+
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
28
|
+
|
|
29
|
+
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
|
|
30
|
+
|
|
11
31
|
function getTileType(tile) {
|
|
12
32
|
if (!tile.contentUrl) {
|
|
13
33
|
return _tiles.TILE_TYPE.EMPTY;
|
|
14
34
|
}
|
|
15
35
|
|
|
16
|
-
|
|
17
|
-
|
|
36
|
+
var contentUrl = tile.contentUrl;
|
|
37
|
+
var fileExtension = contentUrl.split('.').pop();
|
|
18
38
|
|
|
19
39
|
switch (fileExtension) {
|
|
20
40
|
case 'pnts':
|
|
@@ -22,6 +42,8 @@ function getTileType(tile) {
|
|
|
22
42
|
|
|
23
43
|
case 'i3dm':
|
|
24
44
|
case 'b3dm':
|
|
45
|
+
case 'glb':
|
|
46
|
+
case 'gltf':
|
|
25
47
|
return _tiles.TILE_TYPE.SCENEGRAPH;
|
|
26
48
|
|
|
27
49
|
default:
|
|
@@ -50,7 +72,7 @@ function normalizeTileData(tile, options) {
|
|
|
50
72
|
}
|
|
51
73
|
|
|
52
74
|
if (tile.content) {
|
|
53
|
-
|
|
75
|
+
var contentUri = tile.content.uri || tile.content.url;
|
|
54
76
|
tile.contentUrl = "".concat(options.basePath, "/").concat(contentUri);
|
|
55
77
|
}
|
|
56
78
|
|
|
@@ -64,23 +86,148 @@ function normalizeTileData(tile, options) {
|
|
|
64
86
|
}
|
|
65
87
|
|
|
66
88
|
function normalizeTileHeaders(tileset) {
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
89
|
+
var basePath = tileset.basePath;
|
|
90
|
+
var root = normalizeTileData(tileset.root, tileset);
|
|
91
|
+
var stack = [];
|
|
70
92
|
stack.push(root);
|
|
71
93
|
|
|
72
94
|
while (stack.length > 0) {
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
95
|
+
var tile = stack.pop() || {};
|
|
96
|
+
var children = tile.children || [];
|
|
97
|
+
|
|
98
|
+
var _iterator = _createForOfIteratorHelper(children),
|
|
99
|
+
_step;
|
|
100
|
+
|
|
101
|
+
try {
|
|
102
|
+
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
103
|
+
var childHeader = _step.value;
|
|
104
|
+
normalizeTileData(childHeader, {
|
|
105
|
+
basePath: basePath
|
|
106
|
+
});
|
|
107
|
+
stack.push(childHeader);
|
|
108
|
+
}
|
|
109
|
+
} catch (err) {
|
|
110
|
+
_iterator.e(err);
|
|
111
|
+
} finally {
|
|
112
|
+
_iterator.f();
|
|
81
113
|
}
|
|
82
114
|
}
|
|
83
115
|
|
|
84
116
|
return root;
|
|
85
117
|
}
|
|
118
|
+
|
|
119
|
+
function normalizeImplicitTileHeaders(_x) {
|
|
120
|
+
return _normalizeImplicitTileHeaders.apply(this, arguments);
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
function _normalizeImplicitTileHeaders() {
|
|
124
|
+
_normalizeImplicitTileHeaders = (0, _asyncToGenerator2.default)(_regenerator.default.mark(function _callee(tileset) {
|
|
125
|
+
var basePath, implicitTilingExtension, subdivisionScheme, maximumLevel, subtreeLevels, subtreesUriTemplate, subtreeUrl, rootSubtreeUrl, rootSubtree, contentUrlTemplate, refine, rootLodMetricValue, options;
|
|
126
|
+
return _regenerator.default.wrap(function _callee$(_context) {
|
|
127
|
+
while (1) {
|
|
128
|
+
switch (_context.prev = _context.next) {
|
|
129
|
+
case 0:
|
|
130
|
+
if (tileset.root) {
|
|
131
|
+
_context.next = 2;
|
|
132
|
+
break;
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
return _context.abrupt("return", null);
|
|
136
|
+
|
|
137
|
+
case 2:
|
|
138
|
+
basePath = tileset.basePath;
|
|
139
|
+
implicitTilingExtension = tileset.root.extensions['3DTILES_implicit_tiling'];
|
|
140
|
+
subdivisionScheme = implicitTilingExtension.subdivisionScheme, maximumLevel = implicitTilingExtension.maximumLevel, subtreeLevels = implicitTilingExtension.subtreeLevels, subtreesUriTemplate = implicitTilingExtension.subtrees.uri;
|
|
141
|
+
subtreeUrl = (0, _parse3dImplicitTiles.replaceContentUrlTemplate)(subtreesUriTemplate, 0, 0, 0, 0);
|
|
142
|
+
rootSubtreeUrl = "".concat(basePath, "/").concat(subtreeUrl);
|
|
143
|
+
_context.next = 9;
|
|
144
|
+
return (0, _core.load)(rootSubtreeUrl, _tile3dSubtreeLoader.Tile3DSubtreeLoader);
|
|
145
|
+
|
|
146
|
+
case 9:
|
|
147
|
+
rootSubtree = _context.sent;
|
|
148
|
+
contentUrlTemplate = "".concat(basePath, "/").concat(tileset.root.content.uri);
|
|
149
|
+
refine = tileset.root.refine;
|
|
150
|
+
rootLodMetricValue = tileset.root.geometricError;
|
|
151
|
+
options = {
|
|
152
|
+
contentUrlTemplate: contentUrlTemplate,
|
|
153
|
+
subtreesUriTemplate: subtreesUriTemplate,
|
|
154
|
+
subdivisionScheme: subdivisionScheme,
|
|
155
|
+
subtreeLevels: subtreeLevels,
|
|
156
|
+
maximumLevel: maximumLevel,
|
|
157
|
+
refine: refine,
|
|
158
|
+
basePath: basePath,
|
|
159
|
+
lodMetricType: _tiles.LOD_METRIC_TYPE.GEOMETRIC_ERROR,
|
|
160
|
+
rootLodMetricValue: rootLodMetricValue,
|
|
161
|
+
getTileType: getTileType,
|
|
162
|
+
getRefine: getRefine
|
|
163
|
+
};
|
|
164
|
+
_context.next = 16;
|
|
165
|
+
return normalizeImplicitTileData(tileset.root, rootSubtree, options);
|
|
166
|
+
|
|
167
|
+
case 16:
|
|
168
|
+
return _context.abrupt("return", _context.sent);
|
|
169
|
+
|
|
170
|
+
case 17:
|
|
171
|
+
case "end":
|
|
172
|
+
return _context.stop();
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
}, _callee);
|
|
176
|
+
}));
|
|
177
|
+
return _normalizeImplicitTileHeaders.apply(this, arguments);
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
function normalizeImplicitTileData(_x2, _x3, _x4) {
|
|
181
|
+
return _normalizeImplicitTileData.apply(this, arguments);
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
function _normalizeImplicitTileData() {
|
|
185
|
+
_normalizeImplicitTileData = (0, _asyncToGenerator2.default)(_regenerator.default.mark(function _callee2(tile, rootSubtree, options) {
|
|
186
|
+
var _yield$parseImplicitT, children, contentUrl;
|
|
187
|
+
|
|
188
|
+
return _regenerator.default.wrap(function _callee2$(_context2) {
|
|
189
|
+
while (1) {
|
|
190
|
+
switch (_context2.prev = _context2.next) {
|
|
191
|
+
case 0:
|
|
192
|
+
if (tile) {
|
|
193
|
+
_context2.next = 2;
|
|
194
|
+
break;
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
return _context2.abrupt("return", null);
|
|
198
|
+
|
|
199
|
+
case 2:
|
|
200
|
+
tile.lodMetricType = _tiles.LOD_METRIC_TYPE.GEOMETRIC_ERROR;
|
|
201
|
+
tile.lodMetricValue = tile.geometricError;
|
|
202
|
+
tile.transformMatrix = tile.transform;
|
|
203
|
+
_context2.next = 7;
|
|
204
|
+
return (0, _parse3dImplicitTiles.parseImplicitTiles)(rootSubtree, options);
|
|
205
|
+
|
|
206
|
+
case 7:
|
|
207
|
+
_yield$parseImplicitT = _context2.sent;
|
|
208
|
+
children = _yield$parseImplicitT.children;
|
|
209
|
+
contentUrl = _yield$parseImplicitT.contentUrl;
|
|
210
|
+
|
|
211
|
+
if (contentUrl) {
|
|
212
|
+
tile.contentUrl = contentUrl;
|
|
213
|
+
tile.content = {
|
|
214
|
+
uri: contentUrl.replace("".concat(options.basePath, "/"), '')
|
|
215
|
+
};
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
tile.refine = getRefine(tile.refine);
|
|
219
|
+
tile.type = getTileType(tile);
|
|
220
|
+
tile.children = children;
|
|
221
|
+
tile.id = tile.contentUrl;
|
|
222
|
+
return _context2.abrupt("return", tile);
|
|
223
|
+
|
|
224
|
+
case 16:
|
|
225
|
+
case "end":
|
|
226
|
+
return _context2.stop();
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
}, _callee2);
|
|
230
|
+
}));
|
|
231
|
+
return _normalizeImplicitTileData.apply(this, arguments);
|
|
232
|
+
}
|
|
86
233
|
//# sourceMappingURL=parse-3d-tile-header.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/lib/parsers/parse-3d-tile-header.ts"],"names":["getTileType","tile","contentUrl","TILE_TYPE","EMPTY","fileExtension","split","pop","POINTCLOUD","SCENEGRAPH","getRefine","refine","TILE_REFINEMENT","REPLACE","ADD","normalizeTileData","options","content","contentUri","uri","url","basePath","id","lodMetricType","LOD_METRIC_TYPE","GEOMETRIC_ERROR","lodMetricValue","geometricError","transformMatrix","transform","type","normalizeTileHeaders","tileset","root","stack","push","length","children","childHeader"],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../../../../src/lib/parsers/parse-3d-tile-header.ts"],"names":["getTileType","tile","contentUrl","TILE_TYPE","EMPTY","fileExtension","split","pop","POINTCLOUD","SCENEGRAPH","getRefine","refine","TILE_REFINEMENT","REPLACE","ADD","normalizeTileData","options","content","contentUri","uri","url","basePath","id","lodMetricType","LOD_METRIC_TYPE","GEOMETRIC_ERROR","lodMetricValue","geometricError","transformMatrix","transform","type","normalizeTileHeaders","tileset","root","stack","push","length","children","childHeader","normalizeImplicitTileHeaders","implicitTilingExtension","extensions","subdivisionScheme","maximumLevel","subtreeLevels","subtreesUriTemplate","subtrees","subtreeUrl","rootSubtreeUrl","Tile3DSubtreeLoader","rootSubtree","contentUrlTemplate","rootLodMetricValue","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"}
|
|
@@ -7,6 +7,10 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
7
7
|
});
|
|
8
8
|
exports.parseInstancedModel3DTile = parseInstancedModel3DTile;
|
|
9
9
|
|
|
10
|
+
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
|
11
|
+
|
|
12
|
+
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
|
13
|
+
|
|
10
14
|
var _core = require("@math.gl/core");
|
|
11
15
|
|
|
12
16
|
var _geospatial = require("@math.gl/geospatial");
|
|
@@ -23,10 +27,31 @@ var _parse3dTileTables = require("./helpers/parse-3d-tile-tables");
|
|
|
23
27
|
|
|
24
28
|
var _parse3dTileGltfView = require("./helpers/parse-3d-tile-gltf-view");
|
|
25
29
|
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
+
function parseInstancedModel3DTile(_x, _x2, _x3, _x4, _x5) {
|
|
31
|
+
return _parseInstancedModel3DTile.apply(this, arguments);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
function _parseInstancedModel3DTile() {
|
|
35
|
+
_parseInstancedModel3DTile = (0, _asyncToGenerator2.default)(_regenerator.default.mark(function _callee(tile, arrayBuffer, byteOffset, options, context) {
|
|
36
|
+
return _regenerator.default.wrap(function _callee$(_context) {
|
|
37
|
+
while (1) {
|
|
38
|
+
switch (_context.prev = _context.next) {
|
|
39
|
+
case 0:
|
|
40
|
+
byteOffset = parseInstancedModel(tile, arrayBuffer, byteOffset, options, context);
|
|
41
|
+
_context.next = 3;
|
|
42
|
+
return (0, _parse3dTileGltfView.extractGLTF)(tile, tile.gltfFormat, options, context);
|
|
43
|
+
|
|
44
|
+
case 3:
|
|
45
|
+
return _context.abrupt("return", byteOffset);
|
|
46
|
+
|
|
47
|
+
case 4:
|
|
48
|
+
case "end":
|
|
49
|
+
return _context.stop();
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
}, _callee);
|
|
53
|
+
}));
|
|
54
|
+
return _parseInstancedModel3DTile.apply(this, arguments);
|
|
30
55
|
}
|
|
31
56
|
|
|
32
57
|
function parseInstancedModel(tile, arrayBuffer, byteOffset, options, context) {
|
|
@@ -37,7 +62,7 @@ function parseInstancedModel(tile, arrayBuffer, byteOffset, options, context) {
|
|
|
37
62
|
}
|
|
38
63
|
|
|
39
64
|
byteOffset = (0, _parse3dTileTables.parse3DTileTablesHeaderSync)(tile, arrayBuffer, byteOffset);
|
|
40
|
-
|
|
65
|
+
var view = new DataView(arrayBuffer);
|
|
41
66
|
tile.gltfFormat = view.getUint32(byteOffset, true);
|
|
42
67
|
byteOffset += 4;
|
|
43
68
|
byteOffset = (0, _parse3dTileTables.parse3DTileTablesSync)(tile, arrayBuffer, byteOffset, options);
|
|
@@ -47,8 +72,8 @@ function parseInstancedModel(tile, arrayBuffer, byteOffset, options, context) {
|
|
|
47
72
|
throw new Error('i3dm parser: featureTableJsonByteLength is zero.');
|
|
48
73
|
}
|
|
49
74
|
|
|
50
|
-
|
|
51
|
-
|
|
75
|
+
var featureTable = new _tile3dFeatureTable.default(tile.featureTableJson, tile.featureTableBinary);
|
|
76
|
+
var instancesLength = featureTable.getGlobalProperty('INSTANCES_LENGTH');
|
|
52
77
|
featureTable.featuresLength = instancesLength;
|
|
53
78
|
|
|
54
79
|
if (!Number.isFinite(instancesLength)) {
|
|
@@ -57,13 +82,13 @@ function parseInstancedModel(tile, arrayBuffer, byteOffset, options, context) {
|
|
|
57
82
|
|
|
58
83
|
tile.eastNorthUp = featureTable.getGlobalProperty('EAST_NORTH_UP');
|
|
59
84
|
tile.rtcCenter = featureTable.getGlobalProperty('RTC_CENTER', _math.GL.FLOAT, 3);
|
|
60
|
-
|
|
85
|
+
var batchTable = new _tile3dBatchTable.default(tile.batchTableJson, tile.batchTableBinary, instancesLength);
|
|
61
86
|
extractInstancedAttributes(tile, featureTable, batchTable, instancesLength);
|
|
62
87
|
return byteOffset;
|
|
63
88
|
}
|
|
64
89
|
|
|
65
90
|
function extractInstancedAttributes(tile, featureTable, batchTable, instancesLength) {
|
|
66
|
-
|
|
91
|
+
var collectionOptions = {
|
|
67
92
|
instances: new Array(instancesLength),
|
|
68
93
|
batchTable: tile._batchTable,
|
|
69
94
|
cull: false,
|
|
@@ -73,43 +98,43 @@ function extractInstancedAttributes(tile, featureTable, batchTable, instancesLen
|
|
|
73
98
|
incrementallyLoadTextures: false,
|
|
74
99
|
forwardAxis: [1, 0, 0]
|
|
75
100
|
};
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
for (
|
|
92
|
-
|
|
101
|
+
var instances = collectionOptions.instances;
|
|
102
|
+
var instancePosition = new _core.Vector3();
|
|
103
|
+
var instanceNormalRight = new _core.Vector3();
|
|
104
|
+
var instanceNormalUp = new _core.Vector3();
|
|
105
|
+
var instanceNormalForward = new _core.Vector3();
|
|
106
|
+
var instanceRotation = new _core.Matrix3();
|
|
107
|
+
var instanceQuaternion = new _core.Quaternion();
|
|
108
|
+
var instanceScale = new _core.Vector3();
|
|
109
|
+
var instanceTranslationRotationScale = {};
|
|
110
|
+
var instanceTransform = new _core.Matrix4();
|
|
111
|
+
var scratch1 = [];
|
|
112
|
+
var scratch2 = [];
|
|
113
|
+
var scratchVector1 = new _core.Vector3();
|
|
114
|
+
var scratchVector2 = new _core.Vector3();
|
|
115
|
+
|
|
116
|
+
for (var i = 0; i < instancesLength; i++) {
|
|
117
|
+
var position = void 0;
|
|
93
118
|
|
|
94
119
|
if (featureTable.hasProperty('POSITION')) {
|
|
95
120
|
position = featureTable.getProperty('POSITION', _math.GL.FLOAT, 3, i, instancePosition);
|
|
96
121
|
} else if (featureTable.hasProperty('POSITION_QUANTIZED')) {
|
|
97
122
|
position = featureTable.getProperty('POSITION_QUANTIZED', _math.GL.UNSIGNED_SHORT, 3, i, instancePosition);
|
|
98
|
-
|
|
123
|
+
var quantizedVolumeOffset = featureTable.getGlobalProperty('QUANTIZED_VOLUME_OFFSET', _math.GL.FLOAT, 3, scratchVector1);
|
|
99
124
|
|
|
100
125
|
if (!quantizedVolumeOffset) {
|
|
101
126
|
throw new Error('i3dm parser: QUANTIZED_VOLUME_OFFSET must be defined for quantized positions.');
|
|
102
127
|
}
|
|
103
128
|
|
|
104
|
-
|
|
129
|
+
var quantizedVolumeScale = featureTable.getGlobalProperty('QUANTIZED_VOLUME_SCALE', _math.GL.FLOAT, 3, scratchVector2);
|
|
105
130
|
|
|
106
131
|
if (!quantizedVolumeScale) {
|
|
107
132
|
throw new Error('i3dm parser: QUANTIZED_VOLUME_SCALE must be defined for quantized positions.');
|
|
108
133
|
}
|
|
109
134
|
|
|
110
|
-
|
|
135
|
+
var MAX_UNSIGNED_SHORT = 65535.0;
|
|
111
136
|
|
|
112
|
-
for (
|
|
137
|
+
for (var j = 0; j < 3; j++) {
|
|
113
138
|
position[j] = position[j] / MAX_UNSIGNED_SHORT * quantizedVolumeScale[j] + quantizedVolumeOffset[j];
|
|
114
139
|
}
|
|
115
140
|
}
|
|
@@ -122,7 +147,7 @@ function extractInstancedAttributes(tile, featureTable, batchTable, instancesLen
|
|
|
122
147
|
instanceTranslationRotationScale.translation = instancePosition;
|
|
123
148
|
tile.normalUp = featureTable.getProperty('NORMAL_UP', _math.GL.FLOAT, 3, i, scratch1);
|
|
124
149
|
tile.normalRight = featureTable.getProperty('NORMAL_RIGHT', _math.GL.FLOAT, 3, i, scratch2);
|
|
125
|
-
|
|
150
|
+
var hasCustomOrientation = false;
|
|
126
151
|
|
|
127
152
|
if (tile.normalUp) {
|
|
128
153
|
if (!tile.normalRight) {
|
|
@@ -159,34 +184,34 @@ function extractInstancedAttributes(tile, featureTable, batchTable, instancesLen
|
|
|
159
184
|
instanceQuaternion.fromMatrix3(instanceRotation);
|
|
160
185
|
instanceTranslationRotationScale.rotation = instanceQuaternion;
|
|
161
186
|
instanceScale.set(1.0, 1.0, 1.0);
|
|
162
|
-
|
|
187
|
+
var scale = featureTable.getProperty('SCALE', _math.GL.FLOAT, 1, i);
|
|
163
188
|
|
|
164
189
|
if (Number.isFinite(scale)) {
|
|
165
190
|
instanceScale.multiplyByScalar(scale);
|
|
166
191
|
}
|
|
167
192
|
|
|
168
|
-
|
|
193
|
+
var nonUniformScale = featureTable.getProperty('SCALE_NON_UNIFORM', _math.GL.FLOAT, 3, i, scratch1);
|
|
169
194
|
|
|
170
195
|
if (nonUniformScale) {
|
|
171
196
|
instanceScale.scale(nonUniformScale);
|
|
172
197
|
}
|
|
173
198
|
|
|
174
199
|
instanceTranslationRotationScale.scale = instanceScale;
|
|
175
|
-
|
|
200
|
+
var batchId = featureTable.getProperty('BATCH_ID', _math.GL.UNSIGNED_SHORT, 1, i);
|
|
176
201
|
|
|
177
202
|
if (batchId === undefined) {
|
|
178
203
|
batchId = i;
|
|
179
204
|
}
|
|
180
205
|
|
|
181
|
-
|
|
206
|
+
var rotationMatrix = new _core.Matrix4().fromQuaternion(instanceTranslationRotationScale.rotation);
|
|
182
207
|
instanceTransform.identity();
|
|
183
208
|
instanceTransform.translate(instanceTranslationRotationScale.translation);
|
|
184
209
|
instanceTransform.multiplyRight(rotationMatrix);
|
|
185
210
|
instanceTransform.scale(instanceTranslationRotationScale.scale);
|
|
186
|
-
|
|
211
|
+
var modelMatrix = instanceTransform.clone();
|
|
187
212
|
instances[i] = {
|
|
188
|
-
modelMatrix,
|
|
189
|
-
batchId
|
|
213
|
+
modelMatrix: modelMatrix,
|
|
214
|
+
batchId: batchId
|
|
190
215
|
};
|
|
191
216
|
}
|
|
192
217
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/lib/parsers/parse-3d-tile-instanced-model.ts"],"names":["parseInstancedModel3DTile","tile","arrayBuffer","byteOffset","options","context","parseInstancedModel","gltfFormat","version","Error","view","DataView","getUint32","featureTableJsonByteLength","featureTable","Tile3DFeatureTable","featureTableJson","featureTableBinary","instancesLength","getGlobalProperty","featuresLength","Number","isFinite","eastNorthUp","rtcCenter","GL","FLOAT","batchTable","Tile3DBatchTable","batchTableJson","batchTableBinary","extractInstancedAttributes","collectionOptions","instances","Array","_batchTable","cull","url","undefined","gltf","basePath","incrementallyLoadTextures","forwardAxis","instancePosition","Vector3","instanceNormalRight","instanceNormalUp","instanceNormalForward","instanceRotation","Matrix3","instanceQuaternion","Quaternion","instanceScale","instanceTranslationRotationScale","instanceTransform","Matrix4","scratch1","scratch2","scratchVector1","scratchVector2","i","position","hasProperty","getProperty","UNSIGNED_SHORT","quantizedVolumeOffset","quantizedVolumeScale","MAX_UNSIGNED_SHORT","j","copy","translation","normalUp","normalRight","hasCustomOrientation","octNormalUp","octNormalRight","Ellipsoid","WGS84","eastNorthUpToFixedFrame","getRotationMatrix3","identity","cross","normalize","setColumn","fromMatrix3","rotation","set","scale","multiplyByScalar","nonUniformScale","batchId","rotationMatrix","fromQuaternion","translate","multiplyRight","modelMatrix","clone"],"mappings":"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","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 {Vector3, Matrix3, Matrix4, Quaternion} from '@math.gl/core';\nimport {Ellipsoid} from '@math.gl/geospatial';\nimport {GL} from '@loaders.gl/math'; // 'math.gl/geometry';\nimport Tile3DFeatureTable from '../classes/tile-3d-feature-table';\nimport Tile3DBatchTable from '../classes/tile-3d-batch-table';\n\nimport {parse3DTileHeaderSync} from './helpers/parse-3d-tile-header';\nimport {parse3DTileTablesHeaderSync, parse3DTileTablesSync} from './helpers/parse-3d-tile-tables';\nimport {parse3DTileGLTFViewSync, extractGLTF} from './helpers/parse-3d-tile-gltf-view';\n\nexport async function parseInstancedModel3DTile(tile, arrayBuffer, byteOffset, options, context) {\n byteOffset = parseInstancedModel(tile, arrayBuffer, byteOffset, options, context);\n await extractGLTF(tile, tile.gltfFormat, options, context);\n return byteOffset;\n}\n\nfunction parseInstancedModel(tile, arrayBuffer, byteOffset, options, context) {\n byteOffset = parse3DTileHeaderSync(tile, arrayBuffer, byteOffset);\n if (tile.version !== 1) {\n throw new Error(`Instanced 3D Model version ${tile.version} is not supported`);\n }\n\n byteOffset = parse3DTileTablesHeaderSync(tile, arrayBuffer, byteOffset);\n\n const view = new DataView(arrayBuffer);\n\n tile.gltfFormat = view.getUint32(byteOffset, true);\n byteOffset += 4;\n\n // PARSE FEATURE TABLE\n byteOffset = parse3DTileTablesSync(tile, arrayBuffer, byteOffset, options);\n\n byteOffset = parse3DTileGLTFViewSync(tile, arrayBuffer, byteOffset, options);\n\n // TODO - Is the feature table sometimes optional or can check be moved into table header parser?\n if (tile.featureTableJsonByteLength === 0) {\n throw new Error('i3dm parser: featureTableJsonByteLength is zero.');\n }\n\n const featureTable = new Tile3DFeatureTable(tile.featureTableJson, tile.featureTableBinary);\n\n const instancesLength = featureTable.getGlobalProperty('INSTANCES_LENGTH');\n featureTable.featuresLength = instancesLength;\n\n if (!Number.isFinite(instancesLength)) {\n throw new Error('i3dm parser: INSTANCES_LENGTH must be defined');\n }\n\n tile.eastNorthUp = featureTable.getGlobalProperty('EAST_NORTH_UP');\n tile.rtcCenter = featureTable.getGlobalProperty('RTC_CENTER', GL.FLOAT, 3);\n\n const batchTable = new Tile3DBatchTable(\n tile.batchTableJson,\n tile.batchTableBinary,\n instancesLength\n );\n\n extractInstancedAttributes(tile, featureTable, batchTable, instancesLength);\n\n return byteOffset;\n}\n\n// eslint-disable-next-line max-statements, complexity\nfunction extractInstancedAttributes(tile, featureTable, batchTable, instancesLength) {\n // Create model instance collection\n const collectionOptions = {\n instances: new Array(instancesLength),\n batchTable: tile._batchTable,\n cull: false, // Already culled by 3D Tiles\n url: undefined,\n // requestType: RequestType.TILES3D,\n gltf: undefined,\n basePath: undefined,\n incrementallyLoadTextures: false,\n // TODO - tileset is not available at this stage, tile is parsed independently\n // upAxis: (tileset && tileset._gltfUpAxis) || [0, 1, 0],\n forwardAxis: [1, 0, 0]\n };\n\n const instances = collectionOptions.instances;\n const instancePosition = new Vector3();\n const instanceNormalRight = new Vector3();\n const instanceNormalUp = new Vector3();\n const instanceNormalForward = new Vector3();\n const instanceRotation = new Matrix3();\n const instanceQuaternion = new Quaternion();\n const instanceScale = new Vector3();\n const instanceTranslationRotationScale = {};\n const instanceTransform = new Matrix4();\n const scratch1 = [];\n const scratch2 = [];\n const scratchVector1 = new Vector3();\n const scratchVector2 = new Vector3();\n\n for (let i = 0; i < instancesLength; i++) {\n let position;\n\n // Get the instance position\n if (featureTable.hasProperty('POSITION')) {\n position = featureTable.getProperty('POSITION', GL.FLOAT, 3, i, instancePosition);\n } else if (featureTable.hasProperty('POSITION_QUANTIZED')) {\n position = featureTable.getProperty(\n 'POSITION_QUANTIZED',\n GL.UNSIGNED_SHORT,\n 3,\n i,\n instancePosition\n );\n\n const quantizedVolumeOffset = featureTable.getGlobalProperty(\n 'QUANTIZED_VOLUME_OFFSET',\n GL.FLOAT,\n 3,\n scratchVector1\n );\n if (!quantizedVolumeOffset) {\n throw new Error(\n 'i3dm parser: QUANTIZED_VOLUME_OFFSET must be defined for quantized positions.'\n );\n }\n\n const quantizedVolumeScale = featureTable.getGlobalProperty(\n 'QUANTIZED_VOLUME_SCALE',\n GL.FLOAT,\n 3,\n scratchVector2\n );\n if (!quantizedVolumeScale) {\n throw new Error(\n 'i3dm parser: QUANTIZED_VOLUME_SCALE must be defined for quantized positions.'\n );\n }\n\n const MAX_UNSIGNED_SHORT = 65535.0;\n for (let j = 0; j < 3; j++) {\n position[j] =\n (position[j] / MAX_UNSIGNED_SHORT) * quantizedVolumeScale[j] + quantizedVolumeOffset[j];\n }\n }\n\n if (!position) {\n throw new Error('i3dm: POSITION or POSITION_QUANTIZED must be defined for each instance.');\n }\n\n instancePosition.copy(position);\n // @ts-expect-error\n instanceTranslationRotationScale.translation = instancePosition;\n\n // Get the instance rotation\n tile.normalUp = featureTable.getProperty('NORMAL_UP', GL.FLOAT, 3, i, scratch1);\n tile.normalRight = featureTable.getProperty('NORMAL_RIGHT', GL.FLOAT, 3, i, scratch2);\n\n const hasCustomOrientation = false;\n if (tile.normalUp) {\n if (!tile.normalRight) {\n throw new Error('i3dm: Custom orientation requires both NORMAL_UP and NORMAL_RIGHT.');\n }\n // Vector3.unpack(normalUp, 0, instanceNormalUp);\n // Vector3.unpack(normalRight, 0, instanceNormalRight);\n tile.hasCustomOrientation = true;\n } else {\n tile.octNormalUp = featureTable.getProperty(\n 'NORMAL_UP_OCT32P',\n GL.UNSIGNED_SHORT,\n 2,\n scratch1\n );\n tile.octNormalRight = featureTable.getProperty(\n 'NORMAL_RIGHT_OCT32P',\n GL.UNSIGNED_SHORT,\n 2,\n scratch2\n );\n\n if (tile.octNormalUp) {\n if (!tile.octNormalRight) {\n throw new Error(\n 'i3dm: oct-encoded orientation requires NORMAL_UP_OCT32P and NORMAL_RIGHT_OCT32P'\n );\n }\n\n throw new Error('i3dm: oct-encoded orientation not implemented');\n /*\n AttributeCompression.octDecodeInRange(octNormalUp[0], octNormalUp[1], 65535, instanceNormalUp);\n AttributeCompression.octDecodeInRange(octNormalRight[0], octNormalRight[1], 65535, instanceNormalRight);\n hasCustomOrientation = true;\n */\n } else if (tile.eastNorthUp) {\n Ellipsoid.WGS84.eastNorthUpToFixedFrame(instancePosition, instanceTransform);\n instanceTransform.getRotationMatrix3(instanceRotation);\n } else {\n instanceRotation.identity();\n }\n }\n\n if (hasCustomOrientation) {\n instanceNormalForward.copy(instanceNormalRight).cross(instanceNormalUp).normalize();\n instanceRotation.setColumn(0, instanceNormalRight);\n instanceRotation.setColumn(1, instanceNormalUp);\n instanceRotation.setColumn(2, instanceNormalForward);\n }\n\n instanceQuaternion.fromMatrix3(instanceRotation);\n // @ts-expect-error\n instanceTranslationRotationScale.rotation = instanceQuaternion;\n\n // Get the instance scale\n instanceScale.set(1.0, 1.0, 1.0);\n const scale = featureTable.getProperty('SCALE', GL.FLOAT, 1, i);\n if (Number.isFinite(scale)) {\n instanceScale.multiplyByScalar(scale);\n }\n const nonUniformScale = featureTable.getProperty('SCALE_NON_UNIFORM', GL.FLOAT, 3, i, scratch1);\n if (nonUniformScale) {\n instanceScale.scale(nonUniformScale);\n }\n\n // @ts-expect-error\n instanceTranslationRotationScale.scale = instanceScale;\n\n // Get the batchId\n let batchId = featureTable.getProperty('BATCH_ID', GL.UNSIGNED_SHORT, 1, i);\n if (batchId === undefined) {\n // If BATCH_ID semantic is undefined, batchId is just the instance number\n batchId = i;\n }\n\n // @ts-expect-error\n const rotationMatrix = new Matrix4().fromQuaternion(instanceTranslationRotationScale.rotation);\n\n // Create the model matrix and the instance\n instanceTransform.identity();\n // @ts-expect-error\n instanceTransform.translate(instanceTranslationRotationScale.translation);\n instanceTransform.multiplyRight(rotationMatrix);\n // @ts-expect-error\n instanceTransform.scale(instanceTranslationRotationScale.scale);\n\n const modelMatrix = instanceTransform.clone();\n instances[i] = {\n modelMatrix,\n batchId\n };\n }\n\n tile.instances = instances;\n}\n"],"file":"parse-3d-tile-instanced-model.js"}
|
|
1
|
+
{"version":3,"sources":["../../../../src/lib/parsers/parse-3d-tile-instanced-model.ts"],"names":["parseInstancedModel3DTile","tile","arrayBuffer","byteOffset","options","context","parseInstancedModel","gltfFormat","version","Error","view","DataView","getUint32","featureTableJsonByteLength","featureTable","Tile3DFeatureTable","featureTableJson","featureTableBinary","instancesLength","getGlobalProperty","featuresLength","Number","isFinite","eastNorthUp","rtcCenter","GL","FLOAT","batchTable","Tile3DBatchTable","batchTableJson","batchTableBinary","extractInstancedAttributes","collectionOptions","instances","Array","_batchTable","cull","url","undefined","gltf","basePath","incrementallyLoadTextures","forwardAxis","instancePosition","Vector3","instanceNormalRight","instanceNormalUp","instanceNormalForward","instanceRotation","Matrix3","instanceQuaternion","Quaternion","instanceScale","instanceTranslationRotationScale","instanceTransform","Matrix4","scratch1","scratch2","scratchVector1","scratchVector2","i","position","hasProperty","getProperty","UNSIGNED_SHORT","quantizedVolumeOffset","quantizedVolumeScale","MAX_UNSIGNED_SHORT","j","copy","translation","normalUp","normalRight","hasCustomOrientation","octNormalUp","octNormalRight","Ellipsoid","WGS84","eastNorthUpToFixedFrame","getRotationMatrix3","identity","cross","normalize","setColumn","fromMatrix3","rotation","set","scale","multiplyByScalar","nonUniformScale","batchId","rotationMatrix","fromQuaternion","translate","multiplyRight","modelMatrix","clone"],"mappings":"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","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 {Vector3, Matrix3, Matrix4, Quaternion} from '@math.gl/core';\nimport {Ellipsoid} from '@math.gl/geospatial';\nimport {GL} from '@loaders.gl/math'; // 'math.gl/geometry';\nimport Tile3DFeatureTable from '../classes/tile-3d-feature-table';\nimport Tile3DBatchTable from '../classes/tile-3d-batch-table';\n\nimport {parse3DTileHeaderSync} from './helpers/parse-3d-tile-header';\nimport {parse3DTileTablesHeaderSync, parse3DTileTablesSync} from './helpers/parse-3d-tile-tables';\nimport {parse3DTileGLTFViewSync, extractGLTF} from './helpers/parse-3d-tile-gltf-view';\n\nexport async function parseInstancedModel3DTile(tile, arrayBuffer, byteOffset, options, context) {\n byteOffset = parseInstancedModel(tile, arrayBuffer, byteOffset, options, context);\n await extractGLTF(tile, tile.gltfFormat, options, context);\n return byteOffset;\n}\n\nfunction parseInstancedModel(tile, arrayBuffer, byteOffset, options, context) {\n byteOffset = parse3DTileHeaderSync(tile, arrayBuffer, byteOffset);\n if (tile.version !== 1) {\n throw new Error(`Instanced 3D Model version ${tile.version} is not supported`);\n }\n\n byteOffset = parse3DTileTablesHeaderSync(tile, arrayBuffer, byteOffset);\n\n const view = new DataView(arrayBuffer);\n\n tile.gltfFormat = view.getUint32(byteOffset, true);\n byteOffset += 4;\n\n // PARSE FEATURE TABLE\n byteOffset = parse3DTileTablesSync(tile, arrayBuffer, byteOffset, options);\n\n byteOffset = parse3DTileGLTFViewSync(tile, arrayBuffer, byteOffset, options);\n\n // TODO - Is the feature table sometimes optional or can check be moved into table header parser?\n if (tile.featureTableJsonByteLength === 0) {\n throw new Error('i3dm parser: featureTableJsonByteLength is zero.');\n }\n\n const featureTable = new Tile3DFeatureTable(tile.featureTableJson, tile.featureTableBinary);\n\n const instancesLength = featureTable.getGlobalProperty('INSTANCES_LENGTH');\n featureTable.featuresLength = instancesLength;\n\n if (!Number.isFinite(instancesLength)) {\n throw new Error('i3dm parser: INSTANCES_LENGTH must be defined');\n }\n\n tile.eastNorthUp = featureTable.getGlobalProperty('EAST_NORTH_UP');\n tile.rtcCenter = featureTable.getGlobalProperty('RTC_CENTER', GL.FLOAT, 3);\n\n const batchTable = new Tile3DBatchTable(\n tile.batchTableJson,\n tile.batchTableBinary,\n instancesLength\n );\n\n extractInstancedAttributes(tile, featureTable, batchTable, instancesLength);\n\n return byteOffset;\n}\n\n// eslint-disable-next-line max-statements, complexity\nfunction extractInstancedAttributes(tile, featureTable, batchTable, instancesLength) {\n // Create model instance collection\n const collectionOptions = {\n instances: new Array(instancesLength),\n batchTable: tile._batchTable,\n cull: false, // Already culled by 3D Tiles\n url: undefined,\n // requestType: RequestType.TILES3D,\n gltf: undefined,\n basePath: undefined,\n incrementallyLoadTextures: false,\n // TODO - tileset is not available at this stage, tile is parsed independently\n // upAxis: (tileset && tileset._gltfUpAxis) || [0, 1, 0],\n forwardAxis: [1, 0, 0]\n };\n\n const instances = collectionOptions.instances;\n const instancePosition = new Vector3();\n const instanceNormalRight = new Vector3();\n const instanceNormalUp = new Vector3();\n const instanceNormalForward = new Vector3();\n const instanceRotation = new Matrix3();\n const instanceQuaternion = new Quaternion();\n const instanceScale = new Vector3();\n const instanceTranslationRotationScale = {};\n const instanceTransform = new Matrix4();\n const scratch1 = [];\n const scratch2 = [];\n const scratchVector1 = new Vector3();\n const scratchVector2 = new Vector3();\n\n for (let i = 0; i < instancesLength; i++) {\n let position;\n\n // Get the instance position\n if (featureTable.hasProperty('POSITION')) {\n position = featureTable.getProperty('POSITION', GL.FLOAT, 3, i, instancePosition);\n } else if (featureTable.hasProperty('POSITION_QUANTIZED')) {\n position = featureTable.getProperty(\n 'POSITION_QUANTIZED',\n GL.UNSIGNED_SHORT,\n 3,\n i,\n instancePosition\n );\n\n const quantizedVolumeOffset = featureTable.getGlobalProperty(\n 'QUANTIZED_VOLUME_OFFSET',\n GL.FLOAT,\n 3,\n scratchVector1\n );\n if (!quantizedVolumeOffset) {\n throw new Error(\n 'i3dm parser: QUANTIZED_VOLUME_OFFSET must be defined for quantized positions.'\n );\n }\n\n const quantizedVolumeScale = featureTable.getGlobalProperty(\n 'QUANTIZED_VOLUME_SCALE',\n GL.FLOAT,\n 3,\n scratchVector2\n );\n if (!quantizedVolumeScale) {\n throw new Error(\n 'i3dm parser: QUANTIZED_VOLUME_SCALE must be defined for quantized positions.'\n );\n }\n\n const MAX_UNSIGNED_SHORT = 65535.0;\n for (let j = 0; j < 3; j++) {\n position[j] =\n (position[j] / MAX_UNSIGNED_SHORT) * quantizedVolumeScale[j] + quantizedVolumeOffset[j];\n }\n }\n\n if (!position) {\n throw new Error('i3dm: POSITION or POSITION_QUANTIZED must be defined for each instance.');\n }\n\n instancePosition.copy(position);\n // @ts-expect-error\n instanceTranslationRotationScale.translation = instancePosition;\n\n // Get the instance rotation\n tile.normalUp = featureTable.getProperty('NORMAL_UP', GL.FLOAT, 3, i, scratch1);\n tile.normalRight = featureTable.getProperty('NORMAL_RIGHT', GL.FLOAT, 3, i, scratch2);\n\n const hasCustomOrientation = false;\n if (tile.normalUp) {\n if (!tile.normalRight) {\n throw new Error('i3dm: Custom orientation requires both NORMAL_UP and NORMAL_RIGHT.');\n }\n // Vector3.unpack(normalUp, 0, instanceNormalUp);\n // Vector3.unpack(normalRight, 0, instanceNormalRight);\n tile.hasCustomOrientation = true;\n } else {\n tile.octNormalUp = featureTable.getProperty(\n 'NORMAL_UP_OCT32P',\n GL.UNSIGNED_SHORT,\n 2,\n scratch1\n );\n tile.octNormalRight = featureTable.getProperty(\n 'NORMAL_RIGHT_OCT32P',\n GL.UNSIGNED_SHORT,\n 2,\n scratch2\n );\n\n if (tile.octNormalUp) {\n if (!tile.octNormalRight) {\n throw new Error(\n 'i3dm: oct-encoded orientation requires NORMAL_UP_OCT32P and NORMAL_RIGHT_OCT32P'\n );\n }\n\n throw new Error('i3dm: oct-encoded orientation not implemented');\n /*\n AttributeCompression.octDecodeInRange(octNormalUp[0], octNormalUp[1], 65535, instanceNormalUp);\n AttributeCompression.octDecodeInRange(octNormalRight[0], octNormalRight[1], 65535, instanceNormalRight);\n hasCustomOrientation = true;\n */\n } else if (tile.eastNorthUp) {\n Ellipsoid.WGS84.eastNorthUpToFixedFrame(instancePosition, instanceTransform);\n instanceTransform.getRotationMatrix3(instanceRotation);\n } else {\n instanceRotation.identity();\n }\n }\n\n if (hasCustomOrientation) {\n instanceNormalForward.copy(instanceNormalRight).cross(instanceNormalUp).normalize();\n instanceRotation.setColumn(0, instanceNormalRight);\n instanceRotation.setColumn(1, instanceNormalUp);\n instanceRotation.setColumn(2, instanceNormalForward);\n }\n\n instanceQuaternion.fromMatrix3(instanceRotation);\n // @ts-expect-error\n instanceTranslationRotationScale.rotation = instanceQuaternion;\n\n // Get the instance scale\n instanceScale.set(1.0, 1.0, 1.0);\n const scale = featureTable.getProperty('SCALE', GL.FLOAT, 1, i);\n if (Number.isFinite(scale)) {\n instanceScale.multiplyByScalar(scale);\n }\n const nonUniformScale = featureTable.getProperty('SCALE_NON_UNIFORM', GL.FLOAT, 3, i, scratch1);\n if (nonUniformScale) {\n instanceScale.scale(nonUniformScale);\n }\n\n // @ts-expect-error\n instanceTranslationRotationScale.scale = instanceScale;\n\n // Get the batchId\n let batchId = featureTable.getProperty('BATCH_ID', GL.UNSIGNED_SHORT, 1, i);\n if (batchId === undefined) {\n // If BATCH_ID semantic is undefined, batchId is just the instance number\n batchId = i;\n }\n\n // @ts-expect-error\n const rotationMatrix = new Matrix4().fromQuaternion(instanceTranslationRotationScale.rotation);\n\n // Create the model matrix and the instance\n instanceTransform.identity();\n // @ts-expect-error\n instanceTransform.translate(instanceTranslationRotationScale.translation);\n instanceTransform.multiplyRight(rotationMatrix);\n // @ts-expect-error\n instanceTransform.scale(instanceTranslationRotationScale.scale);\n\n const modelMatrix = instanceTransform.clone();\n instances[i] = {\n modelMatrix,\n batchId\n };\n }\n\n tile.instances = instances;\n}\n"],"file":"parse-3d-tile-instanced-model.js"}
|