@loaders.gl/3d-tiles 4.0.0-alpha.13 → 4.0.0-alpha.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/dist.min.js +35 -23
- package/dist/es5/lib/parsers/helpers/parse-3d-implicit-tiles.js +49 -34
- package/dist/es5/lib/parsers/helpers/parse-3d-implicit-tiles.js.map +1 -1
- package/dist/es5/lib/parsers/parse-3d-tile-header.js +12 -11
- package/dist/es5/lib/parsers/parse-3d-tile-header.js.map +1 -1
- package/dist/es5/lib/utils/version.js +1 -1
- package/dist/es5/types.js.map +1 -1
- package/dist/esm/lib/parsers/helpers/parse-3d-implicit-tiles.js +31 -19
- package/dist/esm/lib/parsers/helpers/parse-3d-implicit-tiles.js.map +1 -1
- package/dist/esm/lib/parsers/parse-3d-tile-header.js +6 -4
- package/dist/esm/lib/parsers/parse-3d-tile-header.js.map +1 -1
- package/dist/esm/lib/utils/version.js +1 -1
- package/dist/esm/types.js.map +1 -1
- package/dist/lib/parsers/helpers/parse-3d-implicit-tiles.d.ts +4 -1
- package/dist/lib/parsers/helpers/parse-3d-implicit-tiles.d.ts.map +1 -1
- package/dist/lib/parsers/helpers/parse-3d-implicit-tiles.js +33 -22
- package/dist/lib/parsers/parse-3d-tile-header.d.ts +30 -2
- package/dist/lib/parsers/parse-3d-tile-header.d.ts.map +1 -1
- package/dist/lib/parsers/parse-3d-tile-header.js +6 -5
- package/dist/types.d.ts +4 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +7 -7
- package/src/lib/parsers/helpers/parse-3d-implicit-tiles.ts +43 -25
- package/src/lib/parsers/parse-3d-tile-header.ts +37 -5
- package/src/types.ts +4 -0
package/dist/dist.min.js
CHANGED
|
@@ -14601,7 +14601,7 @@
|
|
|
14601
14601
|
}
|
|
14602
14602
|
async function parseImplicitTiles(params) {
|
|
14603
14603
|
const {
|
|
14604
|
-
|
|
14604
|
+
implicitOptions,
|
|
14605
14605
|
parentData = {
|
|
14606
14606
|
mortonIndex: 0,
|
|
14607
14607
|
x: 0,
|
|
@@ -14616,7 +14616,8 @@
|
|
|
14616
14616
|
y: 0,
|
|
14617
14617
|
z: 0
|
|
14618
14618
|
},
|
|
14619
|
-
s2VolumeBox
|
|
14619
|
+
s2VolumeBox,
|
|
14620
|
+
loaderOptions
|
|
14620
14621
|
} = params;
|
|
14621
14622
|
let { subtree, level = 0 } = params;
|
|
14622
14623
|
const {
|
|
@@ -14626,30 +14627,38 @@
|
|
|
14626
14627
|
contentUrlTemplate,
|
|
14627
14628
|
subtreesUriTemplate,
|
|
14628
14629
|
basePath
|
|
14629
|
-
} =
|
|
14630
|
+
} = implicitOptions;
|
|
14630
14631
|
const tile = { children: [], lodMetricValue: 0, contentUrl: "" };
|
|
14632
|
+
if (!maximumLevel) {
|
|
14633
|
+
dist_default2.once(`Missing 'maximumLevel' or 'availableLevels' property. The subtree ${contentUrlTemplate} won't be loaded...`);
|
|
14634
|
+
return tile;
|
|
14635
|
+
}
|
|
14636
|
+
const lev = level + globalData.level;
|
|
14637
|
+
if (lev > maximumLevel) {
|
|
14638
|
+
return tile;
|
|
14639
|
+
}
|
|
14631
14640
|
const childrenPerTile = SUBDIVISION_COUNT_MAP[subdivisionScheme];
|
|
14641
|
+
const bitsPerTile = Math.log2(childrenPerTile);
|
|
14632
14642
|
const childX = childIndex & 1;
|
|
14633
14643
|
const childY = childIndex >> 1 & 1;
|
|
14634
14644
|
const childZ = childIndex >> 2 & 1;
|
|
14635
14645
|
const levelOffset = (childrenPerTile ** level - 1) / (childrenPerTile - 1);
|
|
14636
|
-
let childTileMortonIndex = concatBits(parentData.mortonIndex, childIndex);
|
|
14646
|
+
let childTileMortonIndex = concatBits(parentData.mortonIndex, childIndex, bitsPerTile);
|
|
14637
14647
|
let tileAvailabilityIndex = levelOffset + childTileMortonIndex;
|
|
14638
|
-
let childTileX = concatBits(parentData.x, childX);
|
|
14639
|
-
let childTileY = concatBits(parentData.y, childY);
|
|
14640
|
-
let childTileZ = concatBits(parentData.z, childZ);
|
|
14648
|
+
let childTileX = concatBits(parentData.x, childX, 1);
|
|
14649
|
+
let childTileY = concatBits(parentData.y, childY, 1);
|
|
14650
|
+
let childTileZ = concatBits(parentData.z, childZ, 1);
|
|
14641
14651
|
let isChildSubtreeAvailable = false;
|
|
14642
|
-
if (level
|
|
14652
|
+
if (level >= subtreeLevels) {
|
|
14643
14653
|
isChildSubtreeAvailable = getAvailabilityResult(subtree.childSubtreeAvailability, childTileMortonIndex);
|
|
14644
14654
|
}
|
|
14645
|
-
const x = concatBits(globalData.x, childTileX);
|
|
14646
|
-
const y = concatBits(globalData.y, childTileY);
|
|
14647
|
-
const z = concatBits(globalData.z, childTileZ);
|
|
14648
|
-
const lev = level + globalData.level;
|
|
14655
|
+
const x = concatBits(globalData.x, childTileX, level * bitsPerTile);
|
|
14656
|
+
const y = concatBits(globalData.y, childTileY, level * bitsPerTile);
|
|
14657
|
+
const z = concatBits(globalData.z, childTileZ, level * bitsPerTile);
|
|
14649
14658
|
if (isChildSubtreeAvailable) {
|
|
14650
14659
|
const subtreePath = `${basePath}/${subtreesUriTemplate}`;
|
|
14651
14660
|
const childSubtreeUrl = replaceContentUrlTemplate(subtreePath, lev, x, y, z);
|
|
14652
|
-
const childSubtree = await load(childSubtreeUrl, Tile3DSubtreeLoader);
|
|
14661
|
+
const childSubtree = await load(childSubtreeUrl, Tile3DSubtreeLoader, loaderOptions);
|
|
14653
14662
|
subtree = childSubtree;
|
|
14654
14663
|
globalData.mortonIndex = childTileMortonIndex;
|
|
14655
14664
|
globalData.x = childTileX;
|
|
@@ -14664,7 +14673,7 @@
|
|
|
14664
14673
|
level = 0;
|
|
14665
14674
|
}
|
|
14666
14675
|
const isTileAvailable = getAvailabilityResult(subtree.tileAvailability, tileAvailabilityIndex);
|
|
14667
|
-
if (!isTileAvailable
|
|
14676
|
+
if (!isTileAvailable) {
|
|
14668
14677
|
return tile;
|
|
14669
14678
|
}
|
|
14670
14679
|
const isContentAvailable = getAvailabilityResult(subtree.contentAvailability, tileAvailabilityIndex);
|
|
@@ -14677,17 +14686,18 @@
|
|
|
14677
14686
|
const childS2VolumeBox = getChildS2VolumeBox(s2VolumeBox, index, subdivisionScheme);
|
|
14678
14687
|
const childTileParsed = await parseImplicitTiles({
|
|
14679
14688
|
subtree,
|
|
14680
|
-
|
|
14689
|
+
implicitOptions,
|
|
14690
|
+
loaderOptions,
|
|
14681
14691
|
parentData: pData,
|
|
14682
14692
|
childIndex: index,
|
|
14683
14693
|
level: childTileLevel,
|
|
14684
|
-
globalData,
|
|
14694
|
+
globalData: { ...globalData },
|
|
14685
14695
|
s2VolumeBox: childS2VolumeBox
|
|
14686
14696
|
});
|
|
14687
14697
|
if (childTileParsed.contentUrl || childTileParsed.children.length) {
|
|
14688
14698
|
const globalLevel = lev + 1;
|
|
14689
14699
|
const childCoordinates = { childTileX, childTileY, childTileZ };
|
|
14690
|
-
const formattedTile = formatTileData(childTileParsed, globalLevel, childCoordinates,
|
|
14700
|
+
const formattedTile = formatTileData(childTileParsed, globalLevel, childCoordinates, implicitOptions, s2VolumeBox);
|
|
14691
14701
|
tile.children.push(formattedTile);
|
|
14692
14702
|
}
|
|
14693
14703
|
}
|
|
@@ -14762,8 +14772,8 @@
|
|
|
14762
14772
|
}
|
|
14763
14773
|
throw new Error(`Unsupported bounding volume type ${rootBoundingVolume}`);
|
|
14764
14774
|
}
|
|
14765
|
-
function concatBits(
|
|
14766
|
-
return
|
|
14775
|
+
function concatBits(higher, lower, shift) {
|
|
14776
|
+
return (higher << shift) + lower;
|
|
14767
14777
|
}
|
|
14768
14778
|
function replaceContentUrlTemplate(templateUrl, level, x, y, z) {
|
|
14769
14779
|
const mapUrl = generateMapUrl({ level, x, y, z });
|
|
@@ -14896,6 +14906,7 @@
|
|
|
14896
14906
|
const {
|
|
14897
14907
|
subdivisionScheme,
|
|
14898
14908
|
maximumLevel,
|
|
14909
|
+
availableLevels,
|
|
14899
14910
|
subtreeLevels,
|
|
14900
14911
|
subtrees: { uri: subtreesUriTemplate }
|
|
14901
14912
|
} = implicitTilingExtension;
|
|
@@ -14917,7 +14928,7 @@
|
|
|
14917
14928
|
subtreesUriTemplate,
|
|
14918
14929
|
subdivisionScheme,
|
|
14919
14930
|
subtreeLevels,
|
|
14920
|
-
maximumLevel,
|
|
14931
|
+
maximumLevel: Number.isFinite(availableLevels) ? availableLevels - 1 : maximumLevel,
|
|
14921
14932
|
refine,
|
|
14922
14933
|
basePath,
|
|
14923
14934
|
lodMetricType: LOD_METRIC_TYPE.GEOMETRIC_ERROR,
|
|
@@ -14926,15 +14937,16 @@
|
|
|
14926
14937
|
getTileType,
|
|
14927
14938
|
getRefine
|
|
14928
14939
|
};
|
|
14929
|
-
return await normalizeImplicitTileData(tile, basePath, subtree, implicitOptions);
|
|
14940
|
+
return await normalizeImplicitTileData(tile, basePath, subtree, implicitOptions, options);
|
|
14930
14941
|
}
|
|
14931
|
-
async function normalizeImplicitTileData(tile, basePath, rootSubtree,
|
|
14942
|
+
async function normalizeImplicitTileData(tile, basePath, rootSubtree, implicitOptions, loaderOptions) {
|
|
14932
14943
|
if (!tile) {
|
|
14933
14944
|
return null;
|
|
14934
14945
|
}
|
|
14935
14946
|
const { children, contentUrl } = await parseImplicitTiles({
|
|
14936
14947
|
subtree: rootSubtree,
|
|
14937
|
-
|
|
14948
|
+
implicitOptions,
|
|
14949
|
+
loaderOptions
|
|
14938
14950
|
});
|
|
14939
14951
|
let tileContentUrl;
|
|
14940
14952
|
let tileContent = null;
|
|
@@ -56,11 +56,11 @@ function parseImplicitTiles(_x) {
|
|
|
56
56
|
}
|
|
57
57
|
function _parseImplicitTiles() {
|
|
58
58
|
_parseImplicitTiles = (0, _asyncToGenerator2.default)(_regenerator.default.mark(function _callee(params) {
|
|
59
|
-
var
|
|
59
|
+
var implicitOptions, _params$parentData, parentData, _params$childIndex, childIndex, _params$globalData, globalData, s2VolumeBox, loaderOptions, subtree, _params$level, level, subdivisionScheme, subtreeLevels, maximumLevel, contentUrlTemplate, subtreesUriTemplate, basePath, tile, lev, childrenPerTile, bitsPerTile, childX, childY, childZ, levelOffset, childTileMortonIndex, tileAvailabilityIndex, childTileX, childTileY, childTileZ, isChildSubtreeAvailable, x, y, z, subtreePath, childSubtreeUrl, childSubtree, isTileAvailable, isContentAvailable, childTileLevel, pData, index, childS2VolumeBox, childTileParsed, globalLevel, childCoordinates, formattedTile;
|
|
60
60
|
return _regenerator.default.wrap(function _callee$(_context) {
|
|
61
61
|
while (1) switch (_context.prev = _context.next) {
|
|
62
62
|
case 0:
|
|
63
|
-
|
|
63
|
+
implicitOptions = params.implicitOptions, _params$parentData = params.parentData, parentData = _params$parentData === void 0 ? {
|
|
64
64
|
mortonIndex: 0,
|
|
65
65
|
x: 0,
|
|
66
66
|
y: 0,
|
|
@@ -71,41 +71,55 @@ function _parseImplicitTiles() {
|
|
|
71
71
|
x: 0,
|
|
72
72
|
y: 0,
|
|
73
73
|
z: 0
|
|
74
|
-
} : _params$globalData, s2VolumeBox = params.s2VolumeBox;
|
|
74
|
+
} : _params$globalData, s2VolumeBox = params.s2VolumeBox, loaderOptions = params.loaderOptions;
|
|
75
75
|
subtree = params.subtree, _params$level = params.level, level = _params$level === void 0 ? 0 : _params$level;
|
|
76
|
-
subdivisionScheme =
|
|
76
|
+
subdivisionScheme = implicitOptions.subdivisionScheme, subtreeLevels = implicitOptions.subtreeLevels, maximumLevel = implicitOptions.maximumLevel, contentUrlTemplate = implicitOptions.contentUrlTemplate, subtreesUriTemplate = implicitOptions.subtreesUriTemplate, basePath = implicitOptions.basePath;
|
|
77
77
|
tile = {
|
|
78
78
|
children: [],
|
|
79
79
|
lodMetricValue: 0,
|
|
80
80
|
contentUrl: ''
|
|
81
81
|
};
|
|
82
|
+
if (maximumLevel) {
|
|
83
|
+
_context.next = 7;
|
|
84
|
+
break;
|
|
85
|
+
}
|
|
86
|
+
_log.default.once("Missing 'maximumLevel' or 'availableLevels' property. The subtree ".concat(contentUrlTemplate, " won't be loaded..."));
|
|
87
|
+
return _context.abrupt("return", tile);
|
|
88
|
+
case 7:
|
|
89
|
+
lev = level + globalData.level;
|
|
90
|
+
if (!(lev > maximumLevel)) {
|
|
91
|
+
_context.next = 10;
|
|
92
|
+
break;
|
|
93
|
+
}
|
|
94
|
+
return _context.abrupt("return", tile);
|
|
95
|
+
case 10:
|
|
82
96
|
childrenPerTile = SUBDIVISION_COUNT_MAP[subdivisionScheme];
|
|
97
|
+
bitsPerTile = Math.log2(childrenPerTile);
|
|
83
98
|
childX = childIndex & 1;
|
|
84
99
|
childY = childIndex >> 1 & 1;
|
|
85
100
|
childZ = childIndex >> 2 & 1;
|
|
86
101
|
levelOffset = (Math.pow(childrenPerTile, level) - 1) / (childrenPerTile - 1);
|
|
87
|
-
childTileMortonIndex = concatBits(parentData.mortonIndex, childIndex);
|
|
102
|
+
childTileMortonIndex = concatBits(parentData.mortonIndex, childIndex, bitsPerTile);
|
|
88
103
|
tileAvailabilityIndex = levelOffset + childTileMortonIndex;
|
|
89
|
-
childTileX = concatBits(parentData.x, childX);
|
|
90
|
-
childTileY = concatBits(parentData.y, childY);
|
|
91
|
-
childTileZ = concatBits(parentData.z, childZ);
|
|
104
|
+
childTileX = concatBits(parentData.x, childX, 1);
|
|
105
|
+
childTileY = concatBits(parentData.y, childY, 1);
|
|
106
|
+
childTileZ = concatBits(parentData.z, childZ, 1);
|
|
92
107
|
isChildSubtreeAvailable = false;
|
|
93
|
-
if (level
|
|
108
|
+
if (level >= subtreeLevels) {
|
|
94
109
|
isChildSubtreeAvailable = getAvailabilityResult(subtree.childSubtreeAvailability, childTileMortonIndex);
|
|
95
110
|
}
|
|
96
|
-
x = concatBits(globalData.x, childTileX);
|
|
97
|
-
y = concatBits(globalData.y, childTileY);
|
|
98
|
-
z = concatBits(globalData.z, childTileZ);
|
|
99
|
-
lev = level + globalData.level;
|
|
111
|
+
x = concatBits(globalData.x, childTileX, level * bitsPerTile);
|
|
112
|
+
y = concatBits(globalData.y, childTileY, level * bitsPerTile);
|
|
113
|
+
z = concatBits(globalData.z, childTileZ, level * bitsPerTile);
|
|
100
114
|
if (!isChildSubtreeAvailable) {
|
|
101
|
-
_context.next =
|
|
115
|
+
_context.next = 44;
|
|
102
116
|
break;
|
|
103
117
|
}
|
|
104
118
|
subtreePath = "".concat(basePath, "/").concat(subtreesUriTemplate);
|
|
105
119
|
childSubtreeUrl = replaceContentUrlTemplate(subtreePath, lev, x, y, z);
|
|
106
|
-
_context.next =
|
|
107
|
-
return (0, _core.load)(childSubtreeUrl, _tile3dSubtreeLoader.Tile3DSubtreeLoader);
|
|
108
|
-
case
|
|
120
|
+
_context.next = 31;
|
|
121
|
+
return (0, _core.load)(childSubtreeUrl, _tile3dSubtreeLoader.Tile3DSubtreeLoader, loaderOptions);
|
|
122
|
+
case 31:
|
|
109
123
|
childSubtree = _context.sent;
|
|
110
124
|
subtree = childSubtree;
|
|
111
125
|
globalData.mortonIndex = childTileMortonIndex;
|
|
@@ -119,14 +133,14 @@ function _parseImplicitTiles() {
|
|
|
119
133
|
childTileY = 0;
|
|
120
134
|
childTileZ = 0;
|
|
121
135
|
level = 0;
|
|
122
|
-
case
|
|
136
|
+
case 44:
|
|
123
137
|
isTileAvailable = getAvailabilityResult(subtree.tileAvailability, tileAvailabilityIndex);
|
|
124
|
-
if (
|
|
125
|
-
_context.next =
|
|
138
|
+
if (isTileAvailable) {
|
|
139
|
+
_context.next = 47;
|
|
126
140
|
break;
|
|
127
141
|
}
|
|
128
142
|
return _context.abrupt("return", tile);
|
|
129
|
-
case
|
|
143
|
+
case 47:
|
|
130
144
|
isContentAvailable = getAvailabilityResult(subtree.contentAvailability, tileAvailabilityIndex);
|
|
131
145
|
if (isContentAvailable) {
|
|
132
146
|
tile.contentUrl = replaceContentUrlTemplate(contentUrlTemplate, lev, x, y, z);
|
|
@@ -139,23 +153,24 @@ function _parseImplicitTiles() {
|
|
|
139
153
|
z: childTileZ
|
|
140
154
|
};
|
|
141
155
|
index = 0;
|
|
142
|
-
case
|
|
156
|
+
case 52:
|
|
143
157
|
if (!(index < childrenPerTile)) {
|
|
144
|
-
_context.next =
|
|
158
|
+
_context.next = 61;
|
|
145
159
|
break;
|
|
146
160
|
}
|
|
147
161
|
childS2VolumeBox = getChildS2VolumeBox(s2VolumeBox, index, subdivisionScheme);
|
|
148
|
-
_context.next =
|
|
162
|
+
_context.next = 56;
|
|
149
163
|
return parseImplicitTiles({
|
|
150
164
|
subtree: subtree,
|
|
151
|
-
|
|
165
|
+
implicitOptions: implicitOptions,
|
|
166
|
+
loaderOptions: loaderOptions,
|
|
152
167
|
parentData: pData,
|
|
153
168
|
childIndex: index,
|
|
154
169
|
level: childTileLevel,
|
|
155
|
-
globalData: globalData,
|
|
170
|
+
globalData: _objectSpread({}, globalData),
|
|
156
171
|
s2VolumeBox: childS2VolumeBox
|
|
157
172
|
});
|
|
158
|
-
case
|
|
173
|
+
case 56:
|
|
159
174
|
childTileParsed = _context.sent;
|
|
160
175
|
if (childTileParsed.contentUrl || childTileParsed.children.length) {
|
|
161
176
|
globalLevel = lev + 1;
|
|
@@ -164,16 +179,16 @@ function _parseImplicitTiles() {
|
|
|
164
179
|
childTileY: childTileY,
|
|
165
180
|
childTileZ: childTileZ
|
|
166
181
|
};
|
|
167
|
-
formattedTile = formatTileData(childTileParsed, globalLevel, childCoordinates,
|
|
182
|
+
formattedTile = formatTileData(childTileParsed, globalLevel, childCoordinates, implicitOptions, s2VolumeBox);
|
|
168
183
|
tile.children.push(formattedTile);
|
|
169
184
|
}
|
|
170
|
-
case
|
|
185
|
+
case 58:
|
|
171
186
|
index++;
|
|
172
|
-
_context.next =
|
|
187
|
+
_context.next = 52;
|
|
173
188
|
break;
|
|
174
|
-
case
|
|
189
|
+
case 61:
|
|
175
190
|
return _context.abrupt("return", tile);
|
|
176
|
-
case
|
|
191
|
+
case 62:
|
|
177
192
|
case "end":
|
|
178
193
|
return _context.stop();
|
|
179
194
|
}
|
|
@@ -260,8 +275,8 @@ function calculateBoundingVolumeForChildTile(level, rootBoundingVolume, childCoo
|
|
|
260
275
|
}
|
|
261
276
|
throw new Error("Unsupported bounding volume type ".concat(rootBoundingVolume));
|
|
262
277
|
}
|
|
263
|
-
function concatBits(
|
|
264
|
-
return
|
|
278
|
+
function concatBits(higher, lower, shift) {
|
|
279
|
+
return (higher << shift) + lower;
|
|
265
280
|
}
|
|
266
281
|
function replaceContentUrlTemplate(templateUrl, level, x, y, z) {
|
|
267
282
|
var mapUrl = generateMapUrl({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parse-3d-implicit-tiles.js","names":["_tile3dSubtreeLoader","require","_core","_log","_interopRequireDefault","_index","_s2CornersToObb","ownKeys","object","enumerableOnly","keys","Object","getOwnPropertySymbols","symbols","filter","sym","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","target","i","arguments","length","source","forEach","key","_defineProperty2","default","getOwnPropertyDescriptors","defineProperties","defineProperty","QUADTREE_DEVISION_COUNT","OCTREE_DEVISION_COUNT","SUBDIVISION_COUNT_MAP","QUADTREE","OCTREE","getChildS2VolumeBox","s2VolumeBox","index","subdivisionScheme","box","cellId","getS2CellIdFromToken","s2VolumeInfo","token","childCellId","getS2ChildCellId","childToken","getS2TokenFromCellId","s2ChildVolumeInfo","delta","maximumHeight","minimumHeight","sizeZ","midZ","convertS2BoundingVolumetoOBB","childS2VolumeBox","undefined","parseImplicitTiles","_x","_parseImplicitTiles","_asyncToGenerator2","_regenerator","mark","_callee","params","options","_params$parentData","parentData","_params$childIndex","childIndex","_params$globalData","globalData","subtree","_params$level","level","subtreeLevels","maximumLevel","contentUrlTemplate","subtreesUriTemplate","basePath","tile","childrenPerTile","childX","childY","childZ","levelOffset","childTileMortonIndex","tileAvailabilityIndex","childTileX","childTileY","childTileZ","isChildSubtreeAvailable","x","y","z","lev","subtreePath","childSubtreeUrl","childSubtree","isTileAvailable","isContentAvailable","childTileLevel","pData","childTileParsed","globalLevel","childCoordinates","formattedTile","wrap","_callee$","_context","prev","next","mortonIndex","children","lodMetricValue","contentUrl","Math","pow","concatBits","getAvailabilityResult","childSubtreeAvailability","concat","replaceContentUrlTemplate","load","Tile3DSubtreeLoader","sent","tileAvailability","abrupt","contentAvailability","formatTileData","stop","availabilityData","availabilityObject","Array","isArray","log","once","Boolean","constant","explicitBitstream","getBooleanValueFromBitstream","refine","getRefine","lodMetricType","getTileType","rootLodMetricValue","rootBoundingVolume","uri","replace","boundingVolume","boundingVolumeForChildTile","calculateBoundingVolumeForChildTile","content","id","type","geometricError","transform","region","_rootBoundingVolume$r","_slicedToArray2","west","south","east","north","boundingVolumesCount","sizeX","sizeY","childWest","childEast","childSouth","childNorth","childMinimumHeight","childMaximumHeight","Error","first","second","parseInt","toString","templateUrl","mapUrl","generateMapUrl","matched","items","availabilityIndex","availabilityBuffer","byteIndex","floor","bitIndex","bitValue"],"sources":["../../../../../src/lib/parsers/helpers/parse-3d-implicit-tiles.ts"],"sourcesContent":["import type {Availability, Tile3DBoundingVolume, Subtree} from '../../../types';\nimport {Tile3DSubtreeLoader} from '../../../tile-3d-subtree-loader';\nimport {load} from '@loaders.gl/core';\nimport {default as log} from '@probe.gl/log';\n\nimport {getS2CellIdFromToken, getS2ChildCellId, getS2TokenFromCellId} from '../../utils/s2/index';\nimport type {S2VolumeInfo} from '../../utils/obb/s2-corners-to-obb';\nimport {convertS2BoundingVolumetoOBB} from '../../utils/obb/s2-corners-to-obb';\nimport Long from 'long';\n\nconst QUADTREE_DEVISION_COUNT = 4;\nconst OCTREE_DEVISION_COUNT = 8;\n\nconst SUBDIVISION_COUNT_MAP = {\n QUADTREE: QUADTREE_DEVISION_COUNT,\n OCTREE: OCTREE_DEVISION_COUNT\n};\n\n/**\n * S2VolumeBox is an extention of BoundingVolume of type \"box\"\n */\nexport type S2VolumeBox = {\n /** BoundingVolume of type \"box\" has the \"box\" field. S2VolumeBox contains it as well. */\n box: number[];\n /** s2VolumeInfo provides additional info about the box - specifically the token, min and max height */\n s2VolumeInfo: S2VolumeInfo;\n};\n\nfunction getChildS2VolumeBox(\n s2VolumeBox: S2VolumeBox | undefined,\n index: number,\n subdivisionScheme: string\n): S2VolumeBox | undefined {\n if (s2VolumeBox?.box) {\n // Check if the BoundingVolume is of type \"box\"\n const cellId: Long = getS2CellIdFromToken(s2VolumeBox.s2VolumeInfo.token);\n const childCellId = getS2ChildCellId(cellId, index);\n const childToken = getS2TokenFromCellId(childCellId);\n\n // Clone object. Note, s2VolumeInfo is a plain object that doesn't contain any nested object.\n // So, we can use the Spread Operator to make a shallow copy of the object.\n const s2ChildVolumeInfo: S2VolumeInfo = {...s2VolumeBox.s2VolumeInfo};\n s2ChildVolumeInfo.token = childToken; // replace the token with the child's one\n\n // In case of QUADTREE the sizeZ should NOT be changed!\n // https://portal.ogc.org/files/102132\n // A quadtree divides space only on the x and y dimensions.\n // It divides each tile into 4 smaller tiles where the x and y dimensions are halved.\n // The quadtree z minimum and maximum remain unchanged.\n switch (subdivisionScheme) {\n case 'OCTREE':\n const s2VolumeInfo: S2VolumeInfo = s2VolumeBox.s2VolumeInfo;\n const delta = s2VolumeInfo.maximumHeight - s2VolumeInfo.minimumHeight;\n const sizeZ: number = delta / 2.0; // It's a next level (a child)\n const midZ: number = s2VolumeInfo.minimumHeight + delta / 2.0;\n s2VolumeInfo.minimumHeight = midZ - sizeZ;\n s2VolumeInfo.maximumHeight = midZ + sizeZ;\n break;\n default:\n break;\n }\n const box = convertS2BoundingVolumetoOBB(s2ChildVolumeInfo);\n const childS2VolumeBox: S2VolumeBox = {\n box,\n s2VolumeInfo: s2ChildVolumeInfo\n };\n return childS2VolumeBox;\n }\n return undefined;\n}\n\n/**\n * Recursively parse implicit tiles tree\n * Spec - https://github.com/CesiumGS/3d-tiles/tree/main/extensions/3DTILES_implicit_tiling\n * TODO Check out do we able to use Tile3D class as return type here.\n * @param subtree\n * @param lodMetricValue\n * @param options\n * @param parentData\n * @param childIndex\n * @param level\n * @param globalData\n */\n// eslint-disable-next-line max-statements\nexport async function parseImplicitTiles(params: {\n subtree: Subtree;\n options: any;\n parentData?: {mortonIndex: number; x: number; y: number; z: number};\n childIndex?: number;\n level?: number;\n globalData?: {level: number; mortonIndex: number; x: number; y: number; z: number};\n s2VolumeBox?: S2VolumeBox;\n}) {\n const {\n options,\n parentData = {\n mortonIndex: 0,\n x: 0,\n y: 0,\n z: 0\n },\n childIndex = 0,\n globalData = {\n level: 0,\n mortonIndex: 0,\n x: 0,\n y: 0,\n z: 0\n },\n s2VolumeBox\n } = params;\n let {subtree, level = 0} = params;\n const {\n subdivisionScheme,\n subtreeLevels,\n maximumLevel,\n contentUrlTemplate,\n subtreesUriTemplate,\n basePath\n } = options;\n\n const tile = {children: [], lodMetricValue: 0, contentUrl: ''};\n\n const childrenPerTile = SUBDIVISION_COUNT_MAP[subdivisionScheme];\n\n // childIndex is in range [0, 7]\n const childX = childIndex & 0b01; // Get first bit for X\n const childY = (childIndex >> 1) & 0b01; // Get second bit for Y\n const childZ = (childIndex >> 2) & 0b01; // Get third bit for Z\n\n const levelOffset = (childrenPerTile ** level - 1) / (childrenPerTile - 1);\n let childTileMortonIndex = concatBits(parentData.mortonIndex, childIndex);\n let tileAvailabilityIndex = levelOffset + childTileMortonIndex;\n\n // Local tile coordinates\n let childTileX = concatBits(parentData.x, childX);\n let childTileY = concatBits(parentData.y, childY);\n let childTileZ = concatBits(parentData.z, childZ);\n\n let isChildSubtreeAvailable = false;\n\n if (level + 1 > subtreeLevels) {\n isChildSubtreeAvailable = getAvailabilityResult(\n subtree.childSubtreeAvailability,\n childTileMortonIndex\n );\n }\n\n const x = concatBits(globalData.x, childTileX);\n const y = concatBits(globalData.y, childTileY);\n const z = concatBits(globalData.z, childTileZ);\n const lev = level + globalData.level;\n\n if (isChildSubtreeAvailable) {\n const subtreePath = `${basePath}/${subtreesUriTemplate}`;\n const childSubtreeUrl = replaceContentUrlTemplate(subtreePath, lev, x, y, z);\n const childSubtree = await load(childSubtreeUrl, Tile3DSubtreeLoader);\n\n subtree = childSubtree;\n\n globalData.mortonIndex = childTileMortonIndex;\n globalData.x = childTileX;\n globalData.y = childTileY;\n globalData.z = childTileZ;\n globalData.level = level;\n\n childTileMortonIndex = 0;\n tileAvailabilityIndex = 0;\n childTileX = 0;\n childTileY = 0;\n childTileZ = 0;\n level = 0;\n }\n\n const isTileAvailable = getAvailabilityResult(subtree.tileAvailability, tileAvailabilityIndex);\n\n if (!isTileAvailable || level > maximumLevel) {\n return tile;\n }\n\n const isContentAvailable = getAvailabilityResult(\n subtree.contentAvailability,\n tileAvailabilityIndex\n );\n\n if (isContentAvailable) {\n tile.contentUrl = replaceContentUrlTemplate(contentUrlTemplate, lev, x, y, z);\n }\n\n const childTileLevel = level + 1;\n const pData = {mortonIndex: childTileMortonIndex, x: childTileX, y: childTileY, z: childTileZ};\n\n for (let index = 0; index < childrenPerTile; index++) {\n const childS2VolumeBox: S2VolumeBox | undefined = getChildS2VolumeBox(\n s2VolumeBox,\n index,\n subdivisionScheme\n );\n\n // Recursive calling...\n const childTileParsed = await parseImplicitTiles({\n subtree,\n options,\n parentData: pData,\n childIndex: index,\n level: childTileLevel,\n globalData,\n s2VolumeBox: childS2VolumeBox\n });\n\n if (childTileParsed.contentUrl || childTileParsed.children.length) {\n const globalLevel = lev + 1;\n const childCoordinates = {childTileX, childTileY, childTileZ};\n const formattedTile = formatTileData(\n childTileParsed,\n globalLevel,\n childCoordinates,\n options,\n s2VolumeBox\n );\n // @ts-ignore\n tile.children.push(formattedTile);\n }\n }\n\n return tile;\n}\n\n/**\n * Check tile availability in the bitstream array\n * @param availabilityData - tileAvailability / contentAvailability / childSubtreeAvailability object\n * @param index - index in the bitstream array\n * @returns\n */\nfunction getAvailabilityResult(\n availabilityData: Availability | Availability[],\n index: number\n): boolean {\n let availabilityObject: Availability;\n if (Array.isArray(availabilityData)) {\n /** TODO: we don't support `3DTILES_multiple_contents` extension at the moment.\n * https://github.com/CesiumGS/3d-tiles/blob/main/extensions/3DTILES_implicit_tiling/README.md#multiple-contents\n * Take first item in the array\n */\n availabilityObject = availabilityData[0];\n if (availabilityData.length > 1) {\n // eslint-disable-next-line no-console\n log.once('Not supported extension \"3DTILES_multiple_contents\" has been detected');\n }\n } else {\n availabilityObject = availabilityData;\n }\n\n if ('constant' in availabilityObject) {\n return Boolean(availabilityObject.constant);\n }\n\n if (availabilityObject.explicitBitstream) {\n return getBooleanValueFromBitstream(index, availabilityObject.explicitBitstream);\n }\n\n return false;\n}\n\n/**\n * Do formatting of implicit tile data.\n * TODO Check out do we able to use Tile3D class as type here.\n * @param tile\n * @param lodMetricValue\n * @param options\n * @returns\n */\nfunction formatTileData(\n tile,\n level: number,\n childCoordinates: {childTileX: number; childTileY: number; childTileZ: number},\n options: any,\n s2VolumeBox?: S2VolumeBox\n) {\n const {\n basePath,\n refine,\n getRefine,\n lodMetricType,\n getTileType,\n rootLodMetricValue,\n rootBoundingVolume\n } = options;\n const uri = tile.contentUrl && tile.contentUrl.replace(`${basePath}/`, '');\n const lodMetricValue = rootLodMetricValue / 2 ** level;\n\n const boundingVolume: Tile3DBoundingVolume = s2VolumeBox?.box\n ? {box: s2VolumeBox.box}\n : rootBoundingVolume;\n\n const boundingVolumeForChildTile = calculateBoundingVolumeForChildTile(\n level,\n boundingVolume,\n childCoordinates\n );\n\n return {\n children: tile.children,\n contentUrl: tile.contentUrl,\n content: {uri},\n id: tile.contentUrl,\n refine: getRefine(refine),\n type: getTileType(tile),\n lodMetricType,\n lodMetricValue,\n geometricError: lodMetricValue,\n transform: tile.transform,\n boundingVolume: boundingVolumeForChildTile\n };\n}\n\n/**\n * Calculate child bounding volume.\n * Spec - https://github.com/CesiumGS/3d-tiles/tree/main/extensions/3DTILES_implicit_tiling#subdivision-rules\n * @param level\n * @param rootBoundingVolume\n * @param childCoordinates\n */\nfunction calculateBoundingVolumeForChildTile(\n level: number,\n rootBoundingVolume: Tile3DBoundingVolume,\n childCoordinates: {childTileX: number; childTileY: number; childTileZ: number}\n): Tile3DBoundingVolume {\n if (rootBoundingVolume.region) {\n const {childTileX, childTileY, childTileZ} = childCoordinates;\n const [west, south, east, north, minimumHeight, maximumHeight] = rootBoundingVolume.region;\n const boundingVolumesCount = 2 ** level;\n\n const sizeX = (east - west) / boundingVolumesCount;\n const sizeY = (north - south) / boundingVolumesCount;\n\n // TODO : Why is the subdivisionScheme not being checked here?\n\n // In case of QUADTREE the sizeZ should NOT be changed!\n // https://portal.ogc.org/files/102132\n // A quadtree divides space only on the x and y dimensions. It divides each tile into 4 smaller tiles where the x and y dimensions are halved. The quadtree z minimum and maximum remain unchanged.\n\n const sizeZ = (maximumHeight - minimumHeight) / boundingVolumesCount;\n\n const [childWest, childEast] = [west + sizeX * childTileX, west + sizeX * (childTileX + 1)];\n const [childSouth, childNorth] = [south + sizeY * childTileY, south + sizeY * (childTileY + 1)];\n const [childMinimumHeight, childMaximumHeight] = [\n minimumHeight + sizeZ * childTileZ,\n minimumHeight + sizeZ * (childTileZ + 1)\n ];\n\n return {\n region: [childWest, childSouth, childEast, childNorth, childMinimumHeight, childMaximumHeight]\n };\n }\n\n if (rootBoundingVolume.box) {\n return rootBoundingVolume;\n }\n\n throw new Error(`Unsupported bounding volume type ${rootBoundingVolume}`);\n}\n\n/**\n * Do binary concatenation\n * @param first\n * @param second\n */\nfunction concatBits(first: number, second: number): number {\n return parseInt(first.toString(2) + second.toString(2), 2);\n}\n\n/**\n * Replace implicit tile content url with real coordinates.\n * @param templateUrl\n * @param level\n * @param x\n * @param y\n * @param z\n */\nexport function replaceContentUrlTemplate(\n templateUrl: string,\n level: number,\n x: number,\n y: number,\n z: number\n): string {\n const mapUrl = generateMapUrl({level, x, y, z});\n return templateUrl.replace(/{level}|{x}|{y}|{z}/gi, (matched) => mapUrl[matched]);\n}\n\n/**\n * Get Map object for content url generation\n * @param items\n */\nfunction generateMapUrl(items: {[key: string]: number}): {[key: string]: string} {\n const mapUrl = {};\n\n for (const key in items) {\n mapUrl[`{${key}}`] = items[key];\n }\n return mapUrl;\n}\n\n/**\n * Get boolean value from bistream by index\n * A boolean value is encoded as a single bit, either 0 (false) or 1 (true).\n * Multiple boolean values are packed tightly in the same buffer.\n * These buffers of tightly-packed bits are sometimes referred to as bitstreams.\n * Spec - https://github.com/CesiumGS/3d-tiles/tree/implicit-revisions/specification/Metadata#booleans\n * @param availabilitiIndex\n */\nfunction getBooleanValueFromBitstream(\n availabilityIndex: number,\n availabilityBuffer: Uint8Array\n): boolean {\n const byteIndex = Math.floor(availabilityIndex / 8);\n const bitIndex = availabilityIndex % 8;\n const bitValue = (availabilityBuffer[byteIndex] >> bitIndex) & 1;\n\n return bitValue === 1;\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"parse-3d-implicit-tiles.js","names":["_tile3dSubtreeLoader","require","_core","_log","_interopRequireDefault","_index","_s2CornersToObb","ownKeys","object","enumerableOnly","keys","Object","getOwnPropertySymbols","symbols","filter","sym","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","target","i","arguments","length","source","forEach","key","_defineProperty2","default","getOwnPropertyDescriptors","defineProperties","defineProperty","QUADTREE_DEVISION_COUNT","OCTREE_DEVISION_COUNT","SUBDIVISION_COUNT_MAP","QUADTREE","OCTREE","getChildS2VolumeBox","s2VolumeBox","index","subdivisionScheme","box","cellId","getS2CellIdFromToken","s2VolumeInfo","token","childCellId","getS2ChildCellId","childToken","getS2TokenFromCellId","s2ChildVolumeInfo","delta","maximumHeight","minimumHeight","sizeZ","midZ","convertS2BoundingVolumetoOBB","childS2VolumeBox","undefined","parseImplicitTiles","_x","_parseImplicitTiles","_asyncToGenerator2","_regenerator","mark","_callee","params","implicitOptions","_params$parentData","parentData","_params$childIndex","childIndex","_params$globalData","globalData","loaderOptions","subtree","_params$level","level","subtreeLevels","maximumLevel","contentUrlTemplate","subtreesUriTemplate","basePath","tile","lev","childrenPerTile","bitsPerTile","childX","childY","childZ","levelOffset","childTileMortonIndex","tileAvailabilityIndex","childTileX","childTileY","childTileZ","isChildSubtreeAvailable","x","y","z","subtreePath","childSubtreeUrl","childSubtree","isTileAvailable","isContentAvailable","childTileLevel","pData","childTileParsed","globalLevel","childCoordinates","formattedTile","wrap","_callee$","_context","prev","next","mortonIndex","children","lodMetricValue","contentUrl","log","once","concat","abrupt","Math","log2","pow","concatBits","getAvailabilityResult","childSubtreeAvailability","replaceContentUrlTemplate","load","Tile3DSubtreeLoader","sent","tileAvailability","contentAvailability","formatTileData","stop","availabilityData","availabilityObject","Array","isArray","Boolean","constant","explicitBitstream","getBooleanValueFromBitstream","options","refine","getRefine","lodMetricType","getTileType","rootLodMetricValue","rootBoundingVolume","uri","replace","boundingVolume","boundingVolumeForChildTile","calculateBoundingVolumeForChildTile","content","id","type","geometricError","transform","region","_rootBoundingVolume$r","_slicedToArray2","west","south","east","north","boundingVolumesCount","sizeX","sizeY","childWest","childEast","childSouth","childNorth","childMinimumHeight","childMaximumHeight","Error","higher","lower","shift","templateUrl","mapUrl","generateMapUrl","matched","items","availabilityIndex","availabilityBuffer","byteIndex","floor","bitIndex","bitValue"],"sources":["../../../../../src/lib/parsers/helpers/parse-3d-implicit-tiles.ts"],"sourcesContent":["import type {Availability, Tile3DBoundingVolume, Subtree} from '../../../types';\nimport {Tile3DSubtreeLoader} from '../../../tile-3d-subtree-loader';\nimport {load} from '@loaders.gl/core';\nimport {default as log} from '@probe.gl/log';\n\nimport {getS2CellIdFromToken, getS2ChildCellId, getS2TokenFromCellId} from '../../utils/s2/index';\nimport type {S2VolumeInfo} from '../../utils/obb/s2-corners-to-obb';\nimport {convertS2BoundingVolumetoOBB} from '../../utils/obb/s2-corners-to-obb';\nimport Long from 'long';\nimport {Tiles3DLoaderOptions} from '../../../tiles-3d-loader';\nimport {ImplicitOptions} from '../parse-3d-tile-header';\n\nconst QUADTREE_DEVISION_COUNT = 4;\nconst OCTREE_DEVISION_COUNT = 8;\n\nconst SUBDIVISION_COUNT_MAP = {\n QUADTREE: QUADTREE_DEVISION_COUNT,\n OCTREE: OCTREE_DEVISION_COUNT\n};\n\n/**\n * S2VolumeBox is an extention of BoundingVolume of type \"box\"\n */\nexport type S2VolumeBox = {\n /** BoundingVolume of type \"box\" has the \"box\" field. S2VolumeBox contains it as well. */\n box: number[];\n /** s2VolumeInfo provides additional info about the box - specifically the token, min and max height */\n s2VolumeInfo: S2VolumeInfo;\n};\n\nfunction getChildS2VolumeBox(\n s2VolumeBox: S2VolumeBox | undefined,\n index: number,\n subdivisionScheme: string\n): S2VolumeBox | undefined {\n if (s2VolumeBox?.box) {\n // Check if the BoundingVolume is of type \"box\"\n const cellId: Long = getS2CellIdFromToken(s2VolumeBox.s2VolumeInfo.token);\n const childCellId = getS2ChildCellId(cellId, index);\n const childToken = getS2TokenFromCellId(childCellId);\n\n // Clone object. Note, s2VolumeInfo is a plain object that doesn't contain any nested object.\n // So, we can use the Spread Operator to make a shallow copy of the object.\n const s2ChildVolumeInfo: S2VolumeInfo = {...s2VolumeBox.s2VolumeInfo};\n s2ChildVolumeInfo.token = childToken; // replace the token with the child's one\n\n // In case of QUADTREE the sizeZ should NOT be changed!\n // https://portal.ogc.org/files/102132\n // A quadtree divides space only on the x and y dimensions.\n // It divides each tile into 4 smaller tiles where the x and y dimensions are halved.\n // The quadtree z minimum and maximum remain unchanged.\n switch (subdivisionScheme) {\n case 'OCTREE':\n const s2VolumeInfo: S2VolumeInfo = s2VolumeBox.s2VolumeInfo;\n const delta = s2VolumeInfo.maximumHeight - s2VolumeInfo.minimumHeight;\n const sizeZ: number = delta / 2.0; // It's a next level (a child)\n const midZ: number = s2VolumeInfo.minimumHeight + delta / 2.0;\n s2VolumeInfo.minimumHeight = midZ - sizeZ;\n s2VolumeInfo.maximumHeight = midZ + sizeZ;\n break;\n default:\n break;\n }\n const box = convertS2BoundingVolumetoOBB(s2ChildVolumeInfo);\n const childS2VolumeBox: S2VolumeBox = {\n box,\n s2VolumeInfo: s2ChildVolumeInfo\n };\n return childS2VolumeBox;\n }\n return undefined;\n}\n\n/**\n * Recursively parse implicit tiles tree\n * Spec - https://github.com/CesiumGS/3d-tiles/tree/main/extensions/3DTILES_implicit_tiling\n * TODO Check out do we able to use Tile3D class as return type here.\n * @param subtree\n * @param lodMetricValue\n * @param options\n * @param parentData\n * @param childIndex\n * @param level\n * @param globalData\n */\n// eslint-disable-next-line max-statements\nexport async function parseImplicitTiles(params: {\n subtree: Subtree;\n implicitOptions: ImplicitOptions;\n parentData?: {mortonIndex: number; x: number; y: number; z: number};\n childIndex?: number;\n level?: number;\n globalData?: {level: number; mortonIndex: number; x: number; y: number; z: number};\n s2VolumeBox?: S2VolumeBox;\n loaderOptions: Tiles3DLoaderOptions;\n}) {\n const {\n implicitOptions,\n parentData = {\n mortonIndex: 0,\n x: 0,\n y: 0,\n z: 0\n },\n childIndex = 0,\n globalData = {\n level: 0,\n mortonIndex: 0,\n x: 0,\n y: 0,\n z: 0\n },\n s2VolumeBox,\n loaderOptions\n } = params;\n let {subtree, level = 0} = params;\n const {\n subdivisionScheme,\n subtreeLevels,\n maximumLevel,\n contentUrlTemplate,\n subtreesUriTemplate,\n basePath\n } = implicitOptions;\n const tile = {children: [], lodMetricValue: 0, contentUrl: ''};\n\n if (!maximumLevel) {\n // eslint-disable-next-line no-console\n log.once(\n `Missing 'maximumLevel' or 'availableLevels' property. The subtree ${contentUrlTemplate} won't be loaded...`\n );\n return tile;\n }\n\n const lev = level + globalData.level;\n if (lev > maximumLevel) {\n return tile;\n }\n\n const childrenPerTile = SUBDIVISION_COUNT_MAP[subdivisionScheme];\n const bitsPerTile = Math.log2(childrenPerTile);\n\n // childIndex is in range [0,4] for quadtrees and [0, 7] for octrees\n const childX = childIndex & 0b01; // Get first bit for X\n const childY = (childIndex >> 1) & 0b01; // Get second bit for Y\n const childZ = (childIndex >> 2) & 0b01; // Get third bit for Z\n\n const levelOffset = (childrenPerTile ** level - 1) / (childrenPerTile - 1);\n let childTileMortonIndex = concatBits(parentData.mortonIndex, childIndex, bitsPerTile);\n let tileAvailabilityIndex = levelOffset + childTileMortonIndex;\n\n // Local tile coordinates\n let childTileX = concatBits(parentData.x, childX, 1);\n let childTileY = concatBits(parentData.y, childY, 1);\n let childTileZ = concatBits(parentData.z, childZ, 1);\n\n let isChildSubtreeAvailable = false;\n\n if (level >= subtreeLevels) {\n isChildSubtreeAvailable = getAvailabilityResult(\n subtree.childSubtreeAvailability,\n childTileMortonIndex\n );\n }\n\n const x = concatBits(globalData.x, childTileX, level * bitsPerTile);\n const y = concatBits(globalData.y, childTileY, level * bitsPerTile);\n const z = concatBits(globalData.z, childTileZ, level * bitsPerTile);\n\n if (isChildSubtreeAvailable) {\n const subtreePath = `${basePath}/${subtreesUriTemplate}`;\n const childSubtreeUrl = replaceContentUrlTemplate(subtreePath, lev, x, y, z);\n const childSubtree = await load(childSubtreeUrl, Tile3DSubtreeLoader, loaderOptions);\n\n subtree = childSubtree;\n\n globalData.mortonIndex = childTileMortonIndex;\n globalData.x = childTileX;\n globalData.y = childTileY;\n globalData.z = childTileZ;\n globalData.level = level;\n\n childTileMortonIndex = 0;\n tileAvailabilityIndex = 0;\n childTileX = 0;\n childTileY = 0;\n childTileZ = 0;\n level = 0;\n }\n\n const isTileAvailable = getAvailabilityResult(subtree.tileAvailability, tileAvailabilityIndex);\n\n if (!isTileAvailable) {\n return tile;\n }\n\n const isContentAvailable = getAvailabilityResult(\n subtree.contentAvailability,\n tileAvailabilityIndex\n );\n\n if (isContentAvailable) {\n tile.contentUrl = replaceContentUrlTemplate(contentUrlTemplate, lev, x, y, z);\n }\n\n const childTileLevel = level + 1;\n const pData = {mortonIndex: childTileMortonIndex, x: childTileX, y: childTileY, z: childTileZ};\n\n for (let index = 0; index < childrenPerTile; index++) {\n const childS2VolumeBox: S2VolumeBox | undefined = getChildS2VolumeBox(\n s2VolumeBox,\n index,\n subdivisionScheme\n );\n\n // Recursive calling...\n const childTileParsed = await parseImplicitTiles({\n subtree,\n implicitOptions,\n loaderOptions,\n parentData: pData,\n childIndex: index,\n level: childTileLevel,\n globalData: {...globalData},\n s2VolumeBox: childS2VolumeBox\n });\n\n if (childTileParsed.contentUrl || childTileParsed.children.length) {\n const globalLevel = lev + 1;\n const childCoordinates = {childTileX, childTileY, childTileZ};\n const formattedTile = formatTileData(\n childTileParsed,\n globalLevel,\n childCoordinates,\n implicitOptions,\n s2VolumeBox\n );\n // @ts-ignore\n tile.children.push(formattedTile);\n }\n }\n\n return tile;\n}\n\n/**\n * Check tile availability in the bitstream array\n * @param availabilityData - tileAvailability / contentAvailability / childSubtreeAvailability object\n * @param index - index in the bitstream array\n * @returns\n */\nfunction getAvailabilityResult(\n availabilityData: Availability | Availability[],\n index: number\n): boolean {\n let availabilityObject: Availability;\n if (Array.isArray(availabilityData)) {\n /** TODO: we don't support `3DTILES_multiple_contents` extension at the moment.\n * https://github.com/CesiumGS/3d-tiles/blob/main/extensions/3DTILES_implicit_tiling/README.md#multiple-contents\n * Take first item in the array\n */\n availabilityObject = availabilityData[0];\n if (availabilityData.length > 1) {\n // eslint-disable-next-line no-console\n log.once('Not supported extension \"3DTILES_multiple_contents\" has been detected');\n }\n } else {\n availabilityObject = availabilityData;\n }\n\n if ('constant' in availabilityObject) {\n return Boolean(availabilityObject.constant);\n }\n\n if (availabilityObject.explicitBitstream) {\n return getBooleanValueFromBitstream(index, availabilityObject.explicitBitstream);\n }\n\n return false;\n}\n\n/**\n * Do formatting of implicit tile data.\n * TODO Check out do we able to use Tile3D class as type here.\n * @param tile\n * @param lodMetricValue\n * @param options\n * @returns\n */\nfunction formatTileData(\n tile,\n level: number,\n childCoordinates: {childTileX: number; childTileY: number; childTileZ: number},\n options: ImplicitOptions,\n s2VolumeBox?: S2VolumeBox\n) {\n const {\n basePath,\n refine,\n getRefine,\n lodMetricType,\n getTileType,\n rootLodMetricValue,\n rootBoundingVolume\n } = options;\n const uri = tile.contentUrl && tile.contentUrl.replace(`${basePath}/`, '');\n const lodMetricValue = rootLodMetricValue / 2 ** level;\n\n const boundingVolume: Tile3DBoundingVolume = s2VolumeBox?.box\n ? {box: s2VolumeBox.box}\n : rootBoundingVolume;\n\n const boundingVolumeForChildTile = calculateBoundingVolumeForChildTile(\n level,\n boundingVolume,\n childCoordinates\n );\n\n return {\n children: tile.children,\n contentUrl: tile.contentUrl,\n content: {uri},\n id: tile.contentUrl,\n refine: getRefine(refine),\n type: getTileType(tile),\n lodMetricType,\n lodMetricValue,\n geometricError: lodMetricValue,\n transform: tile.transform,\n boundingVolume: boundingVolumeForChildTile\n };\n}\n\n/**\n * Calculate child bounding volume.\n * Spec - https://github.com/CesiumGS/3d-tiles/tree/main/extensions/3DTILES_implicit_tiling#subdivision-rules\n * @param level\n * @param rootBoundingVolume\n * @param childCoordinates\n */\nfunction calculateBoundingVolumeForChildTile(\n level: number,\n rootBoundingVolume: Tile3DBoundingVolume,\n childCoordinates: {childTileX: number; childTileY: number; childTileZ: number}\n): Tile3DBoundingVolume {\n if (rootBoundingVolume.region) {\n const {childTileX, childTileY, childTileZ} = childCoordinates;\n const [west, south, east, north, minimumHeight, maximumHeight] = rootBoundingVolume.region;\n const boundingVolumesCount = 2 ** level;\n\n const sizeX = (east - west) / boundingVolumesCount;\n const sizeY = (north - south) / boundingVolumesCount;\n\n // TODO : Why is the subdivisionScheme not being checked here?\n\n // In case of QUADTREE the sizeZ should NOT be changed!\n // https://portal.ogc.org/files/102132\n // A quadtree divides space only on the x and y dimensions. It divides each tile into 4 smaller tiles where the x and y dimensions are halved. The quadtree z minimum and maximum remain unchanged.\n\n const sizeZ = (maximumHeight - minimumHeight) / boundingVolumesCount;\n\n const [childWest, childEast] = [west + sizeX * childTileX, west + sizeX * (childTileX + 1)];\n const [childSouth, childNorth] = [south + sizeY * childTileY, south + sizeY * (childTileY + 1)];\n const [childMinimumHeight, childMaximumHeight] = [\n minimumHeight + sizeZ * childTileZ,\n minimumHeight + sizeZ * (childTileZ + 1)\n ];\n\n return {\n region: [childWest, childSouth, childEast, childNorth, childMinimumHeight, childMaximumHeight]\n };\n }\n\n if (rootBoundingVolume.box) {\n return rootBoundingVolume;\n }\n\n throw new Error(`Unsupported bounding volume type ${rootBoundingVolume}`);\n}\n\n/**\n * Do binary concatenation\n * @param higher - number to put to higher part of result\n * @param lower - number to put to lower part of result\n * @param shift - number of bits to shift lower number\n */\nfunction concatBits(higher: number, lower: number, shift: number): number {\n return (higher << shift) + lower;\n}\n\n/**\n * Replace implicit tile content url with real coordinates.\n * @param templateUrl\n * @param level\n * @param x\n * @param y\n * @param z\n */\nexport function replaceContentUrlTemplate(\n templateUrl: string,\n level: number,\n x: number,\n y: number,\n z: number\n): string {\n const mapUrl = generateMapUrl({level, x, y, z});\n return templateUrl.replace(/{level}|{x}|{y}|{z}/gi, (matched) => mapUrl[matched]);\n}\n\n/**\n * Get Map object for content url generation\n * @param items\n */\nfunction generateMapUrl(items: {[key: string]: number}): {[key: string]: string} {\n const mapUrl = {};\n\n for (const key in items) {\n mapUrl[`{${key}}`] = items[key];\n }\n return mapUrl;\n}\n\n/**\n * Get boolean value from bistream by index\n * A boolean value is encoded as a single bit, either 0 (false) or 1 (true).\n * Multiple boolean values are packed tightly in the same buffer.\n * These buffers of tightly-packed bits are sometimes referred to as bitstreams.\n * Spec - https://github.com/CesiumGS/3d-tiles/tree/implicit-revisions/specification/Metadata#booleans\n * @param availabilitiIndex\n */\nfunction getBooleanValueFromBitstream(\n availabilityIndex: number,\n availabilityBuffer: Uint8Array\n): boolean {\n const byteIndex = Math.floor(availabilityIndex / 8);\n const bitIndex = availabilityIndex % 8;\n const bitValue = (availabilityBuffer[byteIndex] >> bitIndex) & 1;\n\n return bitValue === 1;\n}\n"],"mappings":"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"}
|
|
@@ -90,7 +90,7 @@ function normalizeTileHeaders(_x, _x2, _x3) {
|
|
|
90
90
|
}
|
|
91
91
|
function _normalizeTileHeaders() {
|
|
92
92
|
_normalizeTileHeaders = (0, _asyncToGenerator2.default)(_regenerator.default.mark(function _callee(tileset, basePath, options) {
|
|
93
|
-
var root, rootImplicitTilingExtension, stack,
|
|
93
|
+
var root, rootImplicitTilingExtension, stack, _tile, children, childrenPostprocessed, _iterator, _step, childHeader, childImplicitTilingExtension, childHeaderPostprocessed;
|
|
94
94
|
return _regenerator.default.wrap(function _callee$(_context) {
|
|
95
95
|
while (1) switch (_context.prev = _context.next) {
|
|
96
96
|
case 0:
|
|
@@ -116,8 +116,8 @@ function _normalizeTileHeaders() {
|
|
|
116
116
|
_context.next = 43;
|
|
117
117
|
break;
|
|
118
118
|
}
|
|
119
|
-
|
|
120
|
-
children =
|
|
119
|
+
_tile = stack.pop() || {};
|
|
120
|
+
children = _tile.children || [];
|
|
121
121
|
childrenPostprocessed = [];
|
|
122
122
|
_iterator = _createForOfIteratorHelper(children);
|
|
123
123
|
_context.prev = 16;
|
|
@@ -162,7 +162,7 @@ function _normalizeTileHeaders() {
|
|
|
162
162
|
_iterator.f();
|
|
163
163
|
return _context.finish(37);
|
|
164
164
|
case 40:
|
|
165
|
-
|
|
165
|
+
_tile.children = childrenPostprocessed;
|
|
166
166
|
_context.next = 11;
|
|
167
167
|
break;
|
|
168
168
|
case 43:
|
|
@@ -181,11 +181,11 @@ function normalizeImplicitTileHeaders(_x4, _x5, _x6, _x7, _x8) {
|
|
|
181
181
|
function _normalizeImplicitTileHeaders() {
|
|
182
182
|
_normalizeImplicitTileHeaders = (0, _asyncToGenerator2.default)(_regenerator.default.mark(function _callee2(tile, tileset, basePath, implicitTilingExtension, options) {
|
|
183
183
|
var _tile$content2, _tileset$root, _tile$boundingVolume$;
|
|
184
|
-
var subdivisionScheme, maximumLevel, subtreeLevels, subtreesUriTemplate, replacedUrlTemplate, subtreeUrl, subtree, contentUrlTemplate, refine, rootLodMetricValue, s2VolumeInfo, box, s2VolumeBox, rootBoundingVolume, implicitOptions;
|
|
184
|
+
var subdivisionScheme, maximumLevel, availableLevels, subtreeLevels, subtreesUriTemplate, replacedUrlTemplate, subtreeUrl, subtree, contentUrlTemplate, refine, rootLodMetricValue, s2VolumeInfo, box, s2VolumeBox, rootBoundingVolume, implicitOptions;
|
|
185
185
|
return _regenerator.default.wrap(function _callee2$(_context2) {
|
|
186
186
|
while (1) switch (_context2.prev = _context2.next) {
|
|
187
187
|
case 0:
|
|
188
|
-
subdivisionScheme = implicitTilingExtension.subdivisionScheme, maximumLevel = implicitTilingExtension.maximumLevel, subtreeLevels = implicitTilingExtension.subtreeLevels, subtreesUriTemplate = implicitTilingExtension.subtrees.uri;
|
|
188
|
+
subdivisionScheme = implicitTilingExtension.subdivisionScheme, maximumLevel = implicitTilingExtension.maximumLevel, availableLevels = implicitTilingExtension.availableLevels, subtreeLevels = implicitTilingExtension.subtreeLevels, subtreesUriTemplate = implicitTilingExtension.subtrees.uri;
|
|
189
189
|
replacedUrlTemplate = (0, _parse3dImplicitTiles.replaceContentUrlTemplate)(subtreesUriTemplate, 0, 0, 0, 0);
|
|
190
190
|
subtreeUrl = resolveUri(replacedUrlTemplate, basePath);
|
|
191
191
|
_context2.next = 5;
|
|
@@ -210,7 +210,7 @@ function _normalizeImplicitTileHeaders() {
|
|
|
210
210
|
subtreesUriTemplate: subtreesUriTemplate,
|
|
211
211
|
subdivisionScheme: subdivisionScheme,
|
|
212
212
|
subtreeLevels: subtreeLevels,
|
|
213
|
-
maximumLevel: maximumLevel,
|
|
213
|
+
maximumLevel: Number.isFinite(availableLevels) ? availableLevels - 1 : maximumLevel,
|
|
214
214
|
refine: refine,
|
|
215
215
|
basePath: basePath,
|
|
216
216
|
lodMetricType: _tiles.LOD_METRIC_TYPE.GEOMETRIC_ERROR,
|
|
@@ -220,7 +220,7 @@ function _normalizeImplicitTileHeaders() {
|
|
|
220
220
|
getRefine: getRefine
|
|
221
221
|
};
|
|
222
222
|
_context2.next = 15;
|
|
223
|
-
return normalizeImplicitTileData(tile, basePath, subtree, implicitOptions);
|
|
223
|
+
return normalizeImplicitTileData(tile, basePath, subtree, implicitOptions, options);
|
|
224
224
|
case 15:
|
|
225
225
|
return _context2.abrupt("return", _context2.sent);
|
|
226
226
|
case 16:
|
|
@@ -231,11 +231,11 @@ function _normalizeImplicitTileHeaders() {
|
|
|
231
231
|
}));
|
|
232
232
|
return _normalizeImplicitTileHeaders.apply(this, arguments);
|
|
233
233
|
}
|
|
234
|
-
function normalizeImplicitTileData(_x9, _x10, _x11, _x12) {
|
|
234
|
+
function normalizeImplicitTileData(_x9, _x10, _x11, _x12, _x13) {
|
|
235
235
|
return _normalizeImplicitTileData.apply(this, arguments);
|
|
236
236
|
}
|
|
237
237
|
function _normalizeImplicitTileData() {
|
|
238
|
-
_normalizeImplicitTileData = (0, _asyncToGenerator2.default)(_regenerator.default.mark(function _callee3(tile, basePath, rootSubtree,
|
|
238
|
+
_normalizeImplicitTileData = (0, _asyncToGenerator2.default)(_regenerator.default.mark(function _callee3(tile, basePath, rootSubtree, implicitOptions, loaderOptions) {
|
|
239
239
|
var _yield$parseImplicitT, children, contentUrl, tileContentUrl, tileContent, tilePostprocessed;
|
|
240
240
|
return _regenerator.default.wrap(function _callee3$(_context3) {
|
|
241
241
|
while (1) switch (_context3.prev = _context3.next) {
|
|
@@ -249,7 +249,8 @@ function _normalizeImplicitTileData() {
|
|
|
249
249
|
_context3.next = 4;
|
|
250
250
|
return (0, _parse3dImplicitTiles.parseImplicitTiles)({
|
|
251
251
|
subtree: rootSubtree,
|
|
252
|
-
|
|
252
|
+
implicitOptions: implicitOptions,
|
|
253
|
+
loaderOptions: loaderOptions
|
|
253
254
|
});
|
|
254
255
|
case 4:
|
|
255
256
|
_yield$parseImplicitT = _context3.sent;
|