@loaders.gl/tile-converter 5.0.0-alpha.10 → 5.0.0-alpha.11
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/README.md +33 -0
- package/dist/converter.min.cjs +103 -103
- package/dist/i3s-server/bin/i3s-server.min.cjs +1 -1
- package/dist/index.cjs +651 -547
- package/dist/index.js +641 -537
- package/dist/v5/adapters.cjs +1756 -200
- package/dist/v5/adapters.d.ts +13 -2
- package/dist/v5/adapters.js +1755 -190
- package/dist/v5/browser.cjs +12 -0
- package/dist/v5/browser.d.ts +12 -2
- package/dist/v5/browser.js +19 -1
- package/dist/v5/core.cjs +54 -0
- package/dist/v5/core.js +54 -0
- package/dist/v5/i3s-mesh-conversion.d.ts +10 -4
- package/dist/v5/i3s-mesh-sink.d.ts +25 -0
- package/dist/v5/i3s-mesh-source-features.d.ts +13 -0
- package/dist/v5/i3s-mesh-source-material.d.ts +5 -0
- package/dist/v5/i3s-mesh-source.d.ts +30 -0
- package/dist/v5/index.cjs +10 -0
- package/dist/v5/index.d.ts +10 -2
- package/dist/v5/index.js +17 -1
- package/dist/v5/mesh-conversion.d.ts +11 -2
- package/dist/v5/mesh-features.d.ts +9 -0
- package/dist/v5/mesh-source-texture.d.ts +2 -0
- package/dist/v5/mesh-source.d.ts +8 -1
- package/dist/v5/mesh.d.ts +6 -1
- package/dist/v5/point-cloud-source-encoder.d.ts +4 -7
- package/dist/v5/point-cloud-spatial.d.ts +22 -0
- package/dist/v5/point-cloud-tileset-sink.d.ts +28 -0
- package/dist/v5/point-cloud.d.ts +26 -1
- package/dist/v5/resource-fetcher.d.ts +18 -0
- package/dist/v5/spatial-conversion.d.ts +3 -1
- package/package.json +23 -23
- package/src/v5/adapters.ts +21 -2
- package/src/v5/browser.ts +36 -2
- package/src/v5/i3s-mesh-conversion.ts +58 -18
- package/src/v5/i3s-mesh-sink.ts +351 -0
- package/src/v5/i3s-mesh-source-features.ts +279 -0
- package/src/v5/i3s-mesh-source-material.ts +157 -0
- package/src/v5/i3s-mesh-source.ts +227 -0
- package/src/v5/index.ts +34 -2
- package/src/v5/mesh-conversion.ts +41 -11
- package/src/v5/mesh-draco.ts +47 -3
- package/src/v5/mesh-features.ts +319 -0
- package/src/v5/mesh-source-features.ts +37 -6
- package/src/v5/mesh-source-texture.ts +47 -0
- package/src/v5/mesh-source.ts +83 -21
- package/src/v5/mesh.ts +16 -7
- package/src/v5/point-cloud-conversion.ts +9 -1
- package/src/v5/point-cloud-source-encoder.ts +31 -20
- package/src/v5/point-cloud-spatial.ts +280 -0
- package/src/v5/point-cloud-tileset-sink.ts +234 -0
- package/src/v5/point-cloud.ts +159 -32
- package/src/v5/resource-fetcher.ts +110 -0
- package/src/v5/spatial-conversion.ts +84 -0
package/dist/v5/browser.cjs
CHANGED
|
@@ -26,21 +26,28 @@ __export(browser_exports, {
|
|
|
26
26
|
createBoundedMemoryTileConversionSink: () => import_core3.createBoundedMemoryTileConversionSink,
|
|
27
27
|
createBrowserTileConversionSource: () => import_core4.createBrowserTileConversionSource,
|
|
28
28
|
createBrowserTilesetConversionSource: () => import_core5.createBrowserTilesetConversionSource,
|
|
29
|
+
createI3SConversionSpatialContext: () => import_core8.createI3SConversionSpatialContext,
|
|
29
30
|
createI3SMeshConversionCodec: () => import_adapters10.createI3SMeshConversionCodec,
|
|
31
|
+
createI3SMeshSink: () => import_adapters11.createI3SMeshSink,
|
|
32
|
+
createI3SMeshTilesetConversionSource: () => import_adapters14.createI3SMeshTilesetConversionSource,
|
|
30
33
|
createMeshConversionCodec: () => import_adapters5.createMeshConversionCodec,
|
|
31
34
|
createMeshTilesetConversionSource: () => import_adapters9.createMeshTilesetConversionSource,
|
|
35
|
+
createPointCloudTilesetSink: () => import_adapters12.createPointCloudTilesetSink,
|
|
32
36
|
createSingleMeshI3SSink: () => import_adapters10.createSingleMeshI3SSink,
|
|
33
37
|
createSingleMeshTilesetArchive: () => import_adapters8.createSingleMeshTilesetArchive,
|
|
34
38
|
createSingleMeshTilesetSink: () => import_adapters6.createSingleMeshTilesetSink,
|
|
35
39
|
createTileConversionArchive: () => import_adapters7.createTileConversionArchive,
|
|
40
|
+
createTileConversionResourceFetcher: () => import_adapters11.createTileConversionResourceFetcher,
|
|
36
41
|
createTiles3DConversionSpatialContext: () => import_core7.createTiles3DConversionSpatialContext,
|
|
37
42
|
createTilesetConversionSource: () => import_core2.createTilesetConversionSource,
|
|
38
43
|
encodeMeshTile: () => import_adapters4.encodeMeshTile,
|
|
39
44
|
encodePointCloudSource: () => import_adapters2.encodePointCloudSource,
|
|
40
45
|
encodePointCloudSourceTile: () => import_adapters2.encodePointCloudSourceTile,
|
|
41
46
|
encodePointCloudTile: () => import_adapters.encodePointCloudTile,
|
|
47
|
+
encodePointCloudTileWithMetadata: () => import_adapters.encodePointCloudTileWithMetadata,
|
|
42
48
|
encodeTileConversionArchiveInBatches: () => import_adapters7.encodeTileConversionArchiveInBatches,
|
|
43
49
|
inspectTileset: () => import_core.inspectTileset,
|
|
50
|
+
transformPointCloudSourceTile: () => import_adapters13.transformPointCloudSourceTile,
|
|
44
51
|
traversePointCloudSource: () => import_core6.traversePointCloudSource,
|
|
45
52
|
validateTileset: () => import_core.validateTileset
|
|
46
53
|
});
|
|
@@ -62,3 +69,8 @@ var import_adapters7 = require("@loaders.gl/tile-converter/v5/adapters");
|
|
|
62
69
|
var import_adapters8 = require("@loaders.gl/tile-converter/v5/adapters");
|
|
63
70
|
var import_adapters9 = require("@loaders.gl/tile-converter/v5/adapters");
|
|
64
71
|
var import_adapters10 = require("@loaders.gl/tile-converter/v5/adapters");
|
|
72
|
+
var import_adapters11 = require("@loaders.gl/tile-converter/v5/adapters");
|
|
73
|
+
var import_adapters12 = require("@loaders.gl/tile-converter/v5/adapters");
|
|
74
|
+
var import_adapters13 = require("@loaders.gl/tile-converter/v5/adapters");
|
|
75
|
+
var import_core8 = require("@loaders.gl/tile-converter/v5/core");
|
|
76
|
+
var import_adapters14 = require("@loaders.gl/tile-converter/v5/adapters");
|
package/dist/v5/browser.d.ts
CHANGED
|
@@ -7,8 +7,8 @@ export { createBrowserTileConversionSource } from '@loaders.gl/tile-converter/v5
|
|
|
7
7
|
export type { BoundedMemoryTileConversionSink, BoundedMemoryTileConversionSinkOptions, BrowserTileConversionFile, BrowserTileConversionResource } from '@loaders.gl/tile-converter/v5/core';
|
|
8
8
|
export type { BrowserTileConversionInspection, BrowserTileConversionInputResource, BrowserTileConversionSourceOptions } from '@loaders.gl/tile-converter/v5/core';
|
|
9
9
|
export { createBrowserTilesetConversionSource } from '@loaders.gl/tile-converter/v5/core';
|
|
10
|
-
export { encodePointCloudTile } from '@loaders.gl/tile-converter/v5/adapters';
|
|
11
|
-
export type { EncodePointCloudTileOptions } from '@loaders.gl/tile-converter/v5/adapters';
|
|
10
|
+
export { encodePointCloudTile, encodePointCloudTileWithMetadata } from '@loaders.gl/tile-converter/v5/adapters';
|
|
11
|
+
export type { EncodePointCloudTileOptions, EncodedPointCloudTile } from '@loaders.gl/tile-converter/v5/adapters';
|
|
12
12
|
export { traversePointCloudSource } from '@loaders.gl/tile-converter/v5/core';
|
|
13
13
|
export type { PointCloudSourceTile, TraversePointCloudSourceOptions } from '@loaders.gl/tile-converter/v5/core';
|
|
14
14
|
export { encodePointCloudSource, encodePointCloudSourceTile } from '@loaders.gl/tile-converter/v5/adapters';
|
|
@@ -32,3 +32,13 @@ export { createMeshTilesetConversionSource } from '@loaders.gl/tile-converter/v5
|
|
|
32
32
|
export type { MeshSourceResource, MeshTilesetSourceOptions, MeshSourceFeatureOptions } from '@loaders.gl/tile-converter/v5/adapters';
|
|
33
33
|
export { createI3SMeshConversionCodec, createSingleMeshI3SSink } from '@loaders.gl/tile-converter/v5/adapters';
|
|
34
34
|
export type { I3SMeshConversionResource, I3SMeshConversionCodecOptions, SingleMeshI3SSink } from '@loaders.gl/tile-converter/v5/adapters';
|
|
35
|
+
export { createI3SMeshSink, createTileConversionResourceFetcher } from '@loaders.gl/tile-converter/v5/adapters';
|
|
36
|
+
export type { I3SMeshSink, I3SMeshSinkOptions, TileConversionResourceFetcherOptions, MeshTileFeatures } from '@loaders.gl/tile-converter/v5/adapters';
|
|
37
|
+
export { createPointCloudTilesetSink } from '@loaders.gl/tile-converter/v5/adapters';
|
|
38
|
+
export type { PointCloudTilesetSink, PointCloudTilesetSinkOptions } from '@loaders.gl/tile-converter/v5/adapters';
|
|
39
|
+
export { transformPointCloudSourceTile } from '@loaders.gl/tile-converter/v5/adapters';
|
|
40
|
+
export type { PointCloudSpatialOptions } from '@loaders.gl/tile-converter/v5/adapters';
|
|
41
|
+
export { createI3SConversionSpatialContext } from '@loaders.gl/tile-converter/v5/core';
|
|
42
|
+
export type { I3SConversionSpatialContext } from '@loaders.gl/tile-converter/v5/core';
|
|
43
|
+
export { createI3SMeshTilesetConversionSource } from '@loaders.gl/tile-converter/v5/adapters';
|
|
44
|
+
export type { I3SMeshTilesetSourceOptions, I3SMeshSourceFeatureOptions } from '@loaders.gl/tile-converter/v5/adapters';
|
package/dist/v5/browser.js
CHANGED
|
@@ -9,7 +9,10 @@ import { createTilesetConversionSource } from "@loaders.gl/tile-converter/v5/cor
|
|
|
9
9
|
import { createBoundedMemoryTileConversionSink } from "@loaders.gl/tile-converter/v5/core";
|
|
10
10
|
import { createBrowserTileConversionSource } from "@loaders.gl/tile-converter/v5/core";
|
|
11
11
|
import { createBrowserTilesetConversionSource } from "@loaders.gl/tile-converter/v5/core";
|
|
12
|
-
import {
|
|
12
|
+
import {
|
|
13
|
+
encodePointCloudTile,
|
|
14
|
+
encodePointCloudTileWithMetadata
|
|
15
|
+
} from "@loaders.gl/tile-converter/v5/adapters";
|
|
13
16
|
import { traversePointCloudSource } from "@loaders.gl/tile-converter/v5/core";
|
|
14
17
|
import {
|
|
15
18
|
encodePointCloudSource,
|
|
@@ -30,6 +33,14 @@ import {
|
|
|
30
33
|
createI3SMeshConversionCodec,
|
|
31
34
|
createSingleMeshI3SSink
|
|
32
35
|
} from "@loaders.gl/tile-converter/v5/adapters";
|
|
36
|
+
import {
|
|
37
|
+
createI3SMeshSink,
|
|
38
|
+
createTileConversionResourceFetcher
|
|
39
|
+
} from "@loaders.gl/tile-converter/v5/adapters";
|
|
40
|
+
import { createPointCloudTilesetSink } from "@loaders.gl/tile-converter/v5/adapters";
|
|
41
|
+
import { transformPointCloudSourceTile } from "@loaders.gl/tile-converter/v5/adapters";
|
|
42
|
+
import { createI3SConversionSpatialContext } from "@loaders.gl/tile-converter/v5/core";
|
|
43
|
+
import { createI3SMeshTilesetConversionSource } from "@loaders.gl/tile-converter/v5/adapters";
|
|
33
44
|
export {
|
|
34
45
|
TileConversionError,
|
|
35
46
|
convertPointCloudSource,
|
|
@@ -37,21 +48,28 @@ export {
|
|
|
37
48
|
createBoundedMemoryTileConversionSink,
|
|
38
49
|
createBrowserTileConversionSource,
|
|
39
50
|
createBrowserTilesetConversionSource,
|
|
51
|
+
createI3SConversionSpatialContext,
|
|
40
52
|
createI3SMeshConversionCodec,
|
|
53
|
+
createI3SMeshSink,
|
|
54
|
+
createI3SMeshTilesetConversionSource,
|
|
41
55
|
createMeshConversionCodec,
|
|
42
56
|
createMeshTilesetConversionSource,
|
|
57
|
+
createPointCloudTilesetSink,
|
|
43
58
|
createSingleMeshI3SSink,
|
|
44
59
|
createSingleMeshTilesetArchive,
|
|
45
60
|
createSingleMeshTilesetSink,
|
|
46
61
|
createTileConversionArchive,
|
|
62
|
+
createTileConversionResourceFetcher,
|
|
47
63
|
createTiles3DConversionSpatialContext,
|
|
48
64
|
createTilesetConversionSource,
|
|
49
65
|
encodeMeshTile,
|
|
50
66
|
encodePointCloudSource,
|
|
51
67
|
encodePointCloudSourceTile,
|
|
52
68
|
encodePointCloudTile,
|
|
69
|
+
encodePointCloudTileWithMetadata,
|
|
53
70
|
encodeTileConversionArchiveInBatches,
|
|
54
71
|
inspectTileset,
|
|
72
|
+
transformPointCloudSourceTile,
|
|
55
73
|
traversePointCloudSource,
|
|
56
74
|
validateTileset
|
|
57
75
|
};
|
package/dist/v5/core.cjs
CHANGED
|
@@ -310,6 +310,12 @@ function createTiles3DConversionSpatialContext(discovered, options = {}) {
|
|
|
310
310
|
if (spatialReference.status === "unresolved") {
|
|
311
311
|
throw createSpatialConversionError(spatialReference);
|
|
312
312
|
}
|
|
313
|
+
if (spatialReference.status !== "native" && spatialReference.coordinateEpoch !== void 0) {
|
|
314
|
+
throw new TileConversionError(
|
|
315
|
+
"SPATIAL_EPOCH_UNSUPPORTED",
|
|
316
|
+
"Epoch-tagged coordinates require an epoch-aware datum operation before conversion"
|
|
317
|
+
);
|
|
318
|
+
}
|
|
313
319
|
const transformer = spatialReference.status === "native" ? void 0 : createSpatialTransformer(
|
|
314
320
|
spatialReference,
|
|
315
321
|
() => new import_tiles.Tiles3DSpatialTransformer(spatialReference, options)
|
|
@@ -327,14 +333,62 @@ function createI3SConversionSpatialContext(discovered, options = {}) {
|
|
|
327
333
|
if (spatialReference.status === "unresolved") {
|
|
328
334
|
throw createSpatialConversionError(spatialReference);
|
|
329
335
|
}
|
|
336
|
+
if (spatialReference.status !== "native" && spatialReference.coordinateEpoch !== void 0) {
|
|
337
|
+
throw new TileConversionError(
|
|
338
|
+
"SPATIAL_EPOCH_UNSUPPORTED",
|
|
339
|
+
"Epoch-tagged coordinates require an epoch-aware datum operation before conversion"
|
|
340
|
+
);
|
|
341
|
+
}
|
|
330
342
|
const transformer = spatialReference.status === "native" ? void 0 : createSpatialTransformer(
|
|
331
343
|
spatialReference,
|
|
332
344
|
() => new import_tiles.I3SSpatialTransformer(spatialReference, options)
|
|
333
345
|
);
|
|
334
346
|
const outputSpatialReference = transformer ? transformer.spatialReference : spatialReference;
|
|
347
|
+
let nativeNormalTransformer;
|
|
348
|
+
const transformNativeNormals = (normals, positions, normalReferenceFrame) => {
|
|
349
|
+
if (!spatialReference.sourceCrs || ["local", "cartesian"].includes(spatialReference.coordinateFrame)) {
|
|
350
|
+
const targetNormals = Float32Array.from(normals);
|
|
351
|
+
for (let index = 0; index < normals.length; index += 3) {
|
|
352
|
+
const length = Math.hypot(normals[index], normals[index + 1], normals[index + 2]);
|
|
353
|
+
if (length) {
|
|
354
|
+
for (let axis = 0; axis < 3; axis++) {
|
|
355
|
+
targetNormals[index + axis] = normals[index + axis] / length;
|
|
356
|
+
}
|
|
357
|
+
}
|
|
358
|
+
}
|
|
359
|
+
return targetNormals;
|
|
360
|
+
}
|
|
361
|
+
nativeNormalTransformer ||= createSpatialTransformer(
|
|
362
|
+
spatialReference,
|
|
363
|
+
() => new import_tiles.I3SSpatialTransformer(
|
|
364
|
+
{
|
|
365
|
+
...spatialReference,
|
|
366
|
+
status: "transformable",
|
|
367
|
+
targetCrs: spatialReference.sourceCrs
|
|
368
|
+
},
|
|
369
|
+
options
|
|
370
|
+
)
|
|
371
|
+
);
|
|
372
|
+
return nativeNormalTransformer.transformNormals(normals, positions, normalReferenceFrame);
|
|
373
|
+
};
|
|
335
374
|
return {
|
|
336
375
|
spatialReference: outputSpatialReference,
|
|
337
376
|
transformPositions: (positions, sourceOrigin) => transformer ? transformer.transformPositions(positions, sourceOrigin) : createNativeI3SPositions(positions, sourceOrigin, spatialReference),
|
|
377
|
+
transformGeometryAsync: async (positions, normals, normalReferenceFrame) => {
|
|
378
|
+
if (transformer)
|
|
379
|
+
return transformer.transformGeometryAsync(positions, normals, normalReferenceFrame);
|
|
380
|
+
const targetPositions = Float64Array.from(positions);
|
|
381
|
+
if (targetPositions.length % 3 || targetPositions.some((value) => !Number.isFinite(value)) || normals && (normals.length !== positions.length || Array.from(normals).some((value) => !Number.isFinite(value))) || normalReferenceFrame !== void 0 && !["earth-centered", "vertex-reference-frame"].includes(normalReferenceFrame)) {
|
|
382
|
+
throw new TileConversionError(
|
|
383
|
+
"SPATIAL_INPUT_INVALID",
|
|
384
|
+
"Conversion geometry requires finite matching xyz arrays and a supported I3S vector frame"
|
|
385
|
+
);
|
|
386
|
+
}
|
|
387
|
+
return {
|
|
388
|
+
positions: targetPositions,
|
|
389
|
+
normals: normals ? transformNativeNormals(normals, positions, normalReferenceFrame) : void 0
|
|
390
|
+
};
|
|
391
|
+
},
|
|
338
392
|
transformPositionsAsync: (positions, sourceOrigin) => transformer ? transformer.transformPositionsAsync(positions, sourceOrigin) : Promise.resolve(createNativeI3SPositions(positions, sourceOrigin, spatialReference)),
|
|
339
393
|
transformNormals: (normals, positions, normalReferenceFrame) => transformer ? transformer.transformNormals(normals, positions, normalReferenceFrame) : Float32Array.from(normals),
|
|
340
394
|
transformBoundingVolume: (bounds) => transformer ? transformer.transformBoundingVolume(bounds) : cloneI3SBounds(bounds),
|
package/dist/v5/core.js
CHANGED
|
@@ -278,6 +278,12 @@ function createTiles3DConversionSpatialContext(discovered, options = {}) {
|
|
|
278
278
|
if (spatialReference.status === "unresolved") {
|
|
279
279
|
throw createSpatialConversionError(spatialReference);
|
|
280
280
|
}
|
|
281
|
+
if (spatialReference.status !== "native" && spatialReference.coordinateEpoch !== void 0) {
|
|
282
|
+
throw new TileConversionError(
|
|
283
|
+
"SPATIAL_EPOCH_UNSUPPORTED",
|
|
284
|
+
"Epoch-tagged coordinates require an epoch-aware datum operation before conversion"
|
|
285
|
+
);
|
|
286
|
+
}
|
|
281
287
|
const transformer = spatialReference.status === "native" ? void 0 : createSpatialTransformer(
|
|
282
288
|
spatialReference,
|
|
283
289
|
() => new Tiles3DSpatialTransformer(spatialReference, options)
|
|
@@ -295,14 +301,62 @@ function createI3SConversionSpatialContext(discovered, options = {}) {
|
|
|
295
301
|
if (spatialReference.status === "unresolved") {
|
|
296
302
|
throw createSpatialConversionError(spatialReference);
|
|
297
303
|
}
|
|
304
|
+
if (spatialReference.status !== "native" && spatialReference.coordinateEpoch !== void 0) {
|
|
305
|
+
throw new TileConversionError(
|
|
306
|
+
"SPATIAL_EPOCH_UNSUPPORTED",
|
|
307
|
+
"Epoch-tagged coordinates require an epoch-aware datum operation before conversion"
|
|
308
|
+
);
|
|
309
|
+
}
|
|
298
310
|
const transformer = spatialReference.status === "native" ? void 0 : createSpatialTransformer(
|
|
299
311
|
spatialReference,
|
|
300
312
|
() => new I3SSpatialTransformer(spatialReference, options)
|
|
301
313
|
);
|
|
302
314
|
const outputSpatialReference = transformer ? transformer.spatialReference : spatialReference;
|
|
315
|
+
let nativeNormalTransformer;
|
|
316
|
+
const transformNativeNormals = (normals, positions, normalReferenceFrame) => {
|
|
317
|
+
if (!spatialReference.sourceCrs || ["local", "cartesian"].includes(spatialReference.coordinateFrame)) {
|
|
318
|
+
const targetNormals = Float32Array.from(normals);
|
|
319
|
+
for (let index = 0; index < normals.length; index += 3) {
|
|
320
|
+
const length = Math.hypot(normals[index], normals[index + 1], normals[index + 2]);
|
|
321
|
+
if (length) {
|
|
322
|
+
for (let axis = 0; axis < 3; axis++) {
|
|
323
|
+
targetNormals[index + axis] = normals[index + axis] / length;
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
return targetNormals;
|
|
328
|
+
}
|
|
329
|
+
nativeNormalTransformer ||= createSpatialTransformer(
|
|
330
|
+
spatialReference,
|
|
331
|
+
() => new I3SSpatialTransformer(
|
|
332
|
+
{
|
|
333
|
+
...spatialReference,
|
|
334
|
+
status: "transformable",
|
|
335
|
+
targetCrs: spatialReference.sourceCrs
|
|
336
|
+
},
|
|
337
|
+
options
|
|
338
|
+
)
|
|
339
|
+
);
|
|
340
|
+
return nativeNormalTransformer.transformNormals(normals, positions, normalReferenceFrame);
|
|
341
|
+
};
|
|
303
342
|
return {
|
|
304
343
|
spatialReference: outputSpatialReference,
|
|
305
344
|
transformPositions: (positions, sourceOrigin) => transformer ? transformer.transformPositions(positions, sourceOrigin) : createNativeI3SPositions(positions, sourceOrigin, spatialReference),
|
|
345
|
+
transformGeometryAsync: async (positions, normals, normalReferenceFrame) => {
|
|
346
|
+
if (transformer)
|
|
347
|
+
return transformer.transformGeometryAsync(positions, normals, normalReferenceFrame);
|
|
348
|
+
const targetPositions = Float64Array.from(positions);
|
|
349
|
+
if (targetPositions.length % 3 || targetPositions.some((value) => !Number.isFinite(value)) || normals && (normals.length !== positions.length || Array.from(normals).some((value) => !Number.isFinite(value))) || normalReferenceFrame !== void 0 && !["earth-centered", "vertex-reference-frame"].includes(normalReferenceFrame)) {
|
|
350
|
+
throw new TileConversionError(
|
|
351
|
+
"SPATIAL_INPUT_INVALID",
|
|
352
|
+
"Conversion geometry requires finite matching xyz arrays and a supported I3S vector frame"
|
|
353
|
+
);
|
|
354
|
+
}
|
|
355
|
+
return {
|
|
356
|
+
positions: targetPositions,
|
|
357
|
+
normals: normals ? transformNativeNormals(normals, positions, normalReferenceFrame) : void 0
|
|
358
|
+
};
|
|
359
|
+
},
|
|
306
360
|
transformPositionsAsync: (positions, sourceOrigin) => transformer ? transformer.transformPositionsAsync(positions, sourceOrigin) : Promise.resolve(createNativeI3SPositions(positions, sourceOrigin, spatialReference)),
|
|
307
361
|
transformNormals: (normals, positions, normalReferenceFrame) => transformer ? transformer.transformNormals(normals, positions, normalReferenceFrame) : Float32Array.from(normals),
|
|
308
362
|
transformBoundingVolume: (bounds) => transformer ? transformer.transformBoundingVolume(bounds) : cloneI3SBounds(bounds),
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import type { EncodedI3SMeshLayer, I3SMeshWriterOptions } from '@loaders.gl/i3s';
|
|
1
|
+
import type { EncodedI3SMeshLayer, I3SMeshWriterOptions, I3SDracoLibraryOptions } from '@loaders.gl/i3s';
|
|
2
2
|
import type { TileConversionCodec, TileConversionSink } from '@loaders.gl/tile-converter/v5/core';
|
|
3
|
-
import type { Tiles3DConversionSpatialContext } from '@loaders.gl/tile-converter/v5/core';
|
|
3
|
+
import type { Tiles3DConversionSpatialContext, I3SConversionSpatialContext } from '@loaders.gl/tile-converter/v5/core';
|
|
4
4
|
import type { MeshSourceResource } from './mesh-source.js';
|
|
5
5
|
import type { BrowserTileConversionFile } from '@loaders.gl/tile-converter/v5/core';
|
|
6
6
|
/** One authored mesh layer, ready for the single-layer sink. */
|
|
@@ -11,13 +11,19 @@ export interface I3SMeshConversionResource extends EncodedI3SMeshLayer {
|
|
|
11
11
|
/** Spatial preparation and required authoring limits for the I3S codec. */
|
|
12
12
|
export interface I3SMeshConversionCodecOptions extends Pick<I3SMeshWriterOptions, 'name' | 'maxPositionError' | 'maxResourceBytes'> {
|
|
13
13
|
/** Shared source-to-ECEF context, applied exactly once before I3S geographic encoding. */
|
|
14
|
-
readonly spatialContext: Tiles3DConversionSpatialContext;
|
|
14
|
+
readonly spatialContext: Tiles3DConversionSpatialContext | I3SConversionSpatialContext;
|
|
15
|
+
/** I3S vector frame when using an I3S context; defaults to earth-centered. */
|
|
16
|
+
readonly normalReferenceFrame?: 'earth-centered' | 'vertex-reference-frame';
|
|
17
|
+
/** Lossless Edge Breaker geometry by default; false retains raw I3S geometry. */
|
|
18
|
+
readonly draco?: boolean;
|
|
19
|
+
/** Full Draco encoder/decoder runtime URLs or injected modules. */
|
|
20
|
+
readonly dracoLibraryOptions?: I3SDracoLibraryOptions;
|
|
15
21
|
}
|
|
16
22
|
/** Creates a portable source-mesh to I3S layer codec with explicit precision and feature diagnostics. */
|
|
17
23
|
export declare function createI3SMeshConversionCodec<TInspection = unknown>(options: I3SMeshConversionCodecOptions): TileConversionCodec<TInspection, MeshSourceResource, I3SMeshConversionResource>;
|
|
18
24
|
/** Atomic bounded output for one authored I3S layer. */
|
|
19
25
|
export interface SingleMeshI3SSink extends TileConversionSink<I3SMeshConversionResource> {
|
|
20
|
-
/**
|
|
26
|
+
/** Archive-relative geometry, metadata and images visible only after successful finalization. */
|
|
21
27
|
getFiles(): readonly BrowserTileConversionFile[];
|
|
22
28
|
}
|
|
23
29
|
/** Creates an atomic bounded single-mesh I3S sink; pass finalized files to createTileConversionArchive. */
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { BrowserTileConversionFile, TileConversionSink } from '@loaders.gl/tile-converter/v5/core';
|
|
2
|
+
import type { I3SMeshConversionResource } from './i3s-mesh-conversion.js';
|
|
3
|
+
/** Bounded flat collection of mesh nodes sharing one I3S feature/geometry schema. */
|
|
4
|
+
export interface I3SMeshSinkOptions {
|
|
5
|
+
/** Maximum compressed bytes retained, including final layer/index metadata. */
|
|
6
|
+
readonly maxTotalBytes: number;
|
|
7
|
+
/** Maximum primitive placements, from one through 64. */
|
|
8
|
+
readonly maxMeshes: number;
|
|
9
|
+
/** Maximum decompressed or generated metadata/attribute resource bytes. */
|
|
10
|
+
readonly maxResourceBytes: number;
|
|
11
|
+
}
|
|
12
|
+
/** Atomic multi-mesh I3S output, ready for portable SLPK packaging. */
|
|
13
|
+
export interface I3SMeshSink extends TileConversionSink<I3SMeshConversionResource> {
|
|
14
|
+
/** Finalized files only; failed or unfinished conversion exposes no output. */
|
|
15
|
+
getFiles(): readonly BrowserTileConversionFile[];
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Combines independently authored mesh resources into one flat I3S layer.
|
|
19
|
+
* Leaves retain geographic placements, compressed geometry and attributes. A shared schema is
|
|
20
|
+
* required; generated object IDs must be disjoint (the conversion codec allocates them).
|
|
21
|
+
* Finalization rebuilds legacy indices, paged indices and enclosing ECEF bounds, including a
|
|
22
|
+
* second page for the 64th leaf. No source LOD hierarchy is implied. Byte gates bound retained
|
|
23
|
+
* resources and metadata, not peak decoder/compressor memory.
|
|
24
|
+
*/
|
|
25
|
+
export declare function createI3SMeshSink(options: I3SMeshSinkOptions): I3SMeshSink;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { I3STileContent, I3SMeshFeatures } from '@loaders.gl/i3s';
|
|
2
|
+
import type { TilesetContentTraversalItem, TilesetSourceMetadata } from '@loaders.gl/tiles';
|
|
3
|
+
import type { MeshSourceFeatureOptions } from './mesh-source-features.js';
|
|
4
|
+
import type { MeshTilesetSourceOptions } from './mesh-source.js';
|
|
5
|
+
/** Explicit mapping of scalar I3S attribute resources and their geometry identifiers. */
|
|
6
|
+
export interface I3SMeshSourceFeatureOptions extends MeshSourceFeatureOptions {
|
|
7
|
+
/** Attribute column whose exact integer values identify the decoded geometry. */
|
|
8
|
+
readonly objectIdProperty: string;
|
|
9
|
+
/** Aggregate encoded attribute byte limit for each node, checked before parsing. */
|
|
10
|
+
readonly maxAttributeBytes: number;
|
|
11
|
+
}
|
|
12
|
+
/** Reads exact scalar/string columns and constructs complete triangle-to-Arrow-row ownership. */
|
|
13
|
+
export declare function extractI3SMeshFeatures(content: I3STileContent, item: TilesetContentTraversalItem, metadata: TilesetSourceMetadata, options: I3SMeshSourceFeatureOptions, readExternalResource: MeshTilesetSourceOptions['readExternalResource'], contentUri: string | undefined, signal?: AbortSignal): Promise<I3SMeshFeatures>;
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { I3STileContent, I3STileHeader } from '@loaders.gl/i3s';
|
|
2
|
+
import type { MeshTilesetSourceOptions } from './mesh-source.js';
|
|
3
|
+
import type { MeshTileMaterial } from './mesh.js';
|
|
4
|
+
/** Maps normalized I3S factors and one encoded base-color PNG/JPEG with explicit wrapping. */
|
|
5
|
+
export declare function mapI3SMeshSourceMaterial(content: I3STileContent, header: Partial<I3STileHeader>, readExternalResource: MeshTilesetSourceOptions['readExternalResource'], contentUri: string | undefined, signal?: AbortSignal): Promise<MeshTileMaterial | undefined>;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { I3STileContent, I3SMeshFeatures } from '@loaders.gl/i3s';
|
|
2
|
+
import type { Tileset3D, TilesetSourceMetadata, TilesetContentTraversalItem } from '@loaders.gl/tiles';
|
|
3
|
+
import type { TileConversionSource, TilesetConversionSourceOptions } from '@loaders.gl/tile-converter/v5/core';
|
|
4
|
+
import type { MeshSourceResource } from './mesh-source.js';
|
|
5
|
+
import type { MeshTilesetSourceOptions } from './mesh-source.js';
|
|
6
|
+
import type { I3SMeshSourceFeatureOptions } from './i3s-mesh-source-features.js';
|
|
7
|
+
export type { I3SMeshSourceFeatureOptions } from './i3s-mesh-source-features.js';
|
|
8
|
+
/** Selected I3S triangle, encoded base-color appearance and explicit-schema feature profile. */
|
|
9
|
+
export interface I3SMeshTilesetSourceOptions extends TilesetConversionSourceOptions {
|
|
10
|
+
/** Read scalar/string attribute resources with an explicit schema and geometry OID mapping. */
|
|
11
|
+
readonly features?: I3SMeshSourceFeatureOptions;
|
|
12
|
+
/** Application-owned bounded reader, including archive resolution, authentication and decompression. */
|
|
13
|
+
readonly readExternalResource?: MeshTilesetSourceOptions['readExternalResource'];
|
|
14
|
+
/** Custom alternative to features, for source semantics outside the scalar resource profile. */
|
|
15
|
+
readonly getFeatures?: (content: I3STileContent, item: TilesetContentTraversalItem, metadata: TilesetSourceMetadata, signal?: AbortSignal) => I3SMeshFeatures | Promise<I3SMeshFeatures>;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Reads original absolute I3S positions through camera-independent traversal.
|
|
19
|
+
* Use a dedicated runtime with i3s.geometryMode='source'. The shared I3S spatial codec owns
|
|
20
|
+
* units, elevation and reprojection; this source never consumes renderer placement matrices.
|
|
21
|
+
* Pair the GLB codec with autoOrigin=true, or select an explicit target origin on the resources.
|
|
22
|
+
* Positions/normals/TEXCOORD_0, basic PBR factors and one encoded PNG/JPEG base-color texture
|
|
23
|
+
* are supported. Vertex colors, UV regions, additional attributes and segmentation fail explicitly.
|
|
24
|
+
* Features require an explicit schema/resource reader or a custom Arrow mapper.
|
|
25
|
+
* Unsafe decoded numeric geometry identifiers are rejected; exact property IDs use bigint.
|
|
26
|
+
* @param tileset - Dedicated I3S runtime using source-coordinate content decoding.
|
|
27
|
+
* @param options - Feature mapping and lifetime policy for content loaded during traversal.
|
|
28
|
+
* @returns A portable source of one absolute mesh per I3S node content.
|
|
29
|
+
*/
|
|
30
|
+
export declare function createI3SMeshTilesetConversionSource(tileset: Tileset3D, options?: I3SMeshTilesetSourceOptions): TileConversionSource<TilesetSourceMetadata, MeshSourceResource>;
|
package/dist/v5/index.cjs
CHANGED
|
@@ -26,21 +26,27 @@ __export(index_exports, {
|
|
|
26
26
|
convertTileset: () => import_core.convertTileset,
|
|
27
27
|
createI3SConversionSpatialContext: () => import_core3.createI3SConversionSpatialContext,
|
|
28
28
|
createI3SMeshConversionCodec: () => import_adapters11.createI3SMeshConversionCodec,
|
|
29
|
+
createI3SMeshSink: () => import_adapters12.createI3SMeshSink,
|
|
30
|
+
createI3SMeshTilesetConversionSource: () => import_adapters15.createI3SMeshTilesetConversionSource,
|
|
29
31
|
createManifestBackedTileConversionSink: () => import_core5.createManifestBackedTileConversionSink,
|
|
30
32
|
createMeshConversionCodec: () => import_adapters6.createMeshConversionCodec,
|
|
31
33
|
createMeshTilesetConversionSource: () => import_adapters10.createMeshTilesetConversionSource,
|
|
34
|
+
createPointCloudTilesetSink: () => import_adapters13.createPointCloudTilesetSink,
|
|
32
35
|
createSingleMeshI3SSink: () => import_adapters11.createSingleMeshI3SSink,
|
|
33
36
|
createSingleMeshTilesetArchive: () => import_adapters9.createSingleMeshTilesetArchive,
|
|
34
37
|
createSingleMeshTilesetSink: () => import_adapters7.createSingleMeshTilesetSink,
|
|
35
38
|
createTileConversionArchive: () => import_adapters8.createTileConversionArchive,
|
|
39
|
+
createTileConversionResourceFetcher: () => import_adapters12.createTileConversionResourceFetcher,
|
|
36
40
|
createTiles3DConversionSpatialContext: () => import_core3.createTiles3DConversionSpatialContext,
|
|
37
41
|
createTilesetConversionSource: () => import_core2.createTilesetConversionSource,
|
|
38
42
|
encodeMeshTile: () => import_adapters5.encodeMeshTile,
|
|
39
43
|
encodePointCloudSource: () => import_adapters3.encodePointCloudSource,
|
|
40
44
|
encodePointCloudSourceTile: () => import_adapters3.encodePointCloudSourceTile,
|
|
41
45
|
encodePointCloudTile: () => import_adapters2.encodePointCloudTile,
|
|
46
|
+
encodePointCloudTileWithMetadata: () => import_adapters2.encodePointCloudTileWithMetadata,
|
|
42
47
|
encodeTileConversionArchiveInBatches: () => import_adapters8.encodeTileConversionArchiveInBatches,
|
|
43
48
|
inspectTileset: () => import_core.inspectTileset,
|
|
49
|
+
transformPointCloudSourceTile: () => import_adapters14.transformPointCloudSourceTile,
|
|
44
50
|
traversePointCloudSource: () => import_core4.traversePointCloudSource,
|
|
45
51
|
validateTileset: () => import_core.validateTileset
|
|
46
52
|
});
|
|
@@ -61,3 +67,7 @@ var import_adapters8 = require("@loaders.gl/tile-converter/v5/adapters");
|
|
|
61
67
|
var import_adapters9 = require("@loaders.gl/tile-converter/v5/adapters");
|
|
62
68
|
var import_adapters10 = require("@loaders.gl/tile-converter/v5/adapters");
|
|
63
69
|
var import_adapters11 = require("@loaders.gl/tile-converter/v5/adapters");
|
|
70
|
+
var import_adapters12 = require("@loaders.gl/tile-converter/v5/adapters");
|
|
71
|
+
var import_adapters13 = require("@loaders.gl/tile-converter/v5/adapters");
|
|
72
|
+
var import_adapters14 = require("@loaders.gl/tile-converter/v5/adapters");
|
|
73
|
+
var import_adapters15 = require("@loaders.gl/tile-converter/v5/adapters");
|
package/dist/v5/index.d.ts
CHANGED
|
@@ -6,8 +6,8 @@ export { createI3SConversionSpatialContext, createTiles3DConversionSpatialContex
|
|
|
6
6
|
export type { I3SConversionSpatialContext, Tiles3DConversionSpatialContext } from '@loaders.gl/tile-converter/v5/core';
|
|
7
7
|
export { convertFeatureAttributesToArrowBatches } from '@loaders.gl/tile-converter/v5/adapters';
|
|
8
8
|
export type { FeatureArrowBatchOptions, TileFeatureAttributes } from '@loaders.gl/tile-converter/v5/adapters';
|
|
9
|
-
export { encodePointCloudTile } from '@loaders.gl/tile-converter/v5/adapters';
|
|
10
|
-
export type { EncodePointCloudTileOptions } from '@loaders.gl/tile-converter/v5/adapters';
|
|
9
|
+
export { encodePointCloudTile, encodePointCloudTileWithMetadata } from '@loaders.gl/tile-converter/v5/adapters';
|
|
10
|
+
export type { EncodePointCloudTileOptions, EncodedPointCloudTile } from '@loaders.gl/tile-converter/v5/adapters';
|
|
11
11
|
export { traversePointCloudSource } from '@loaders.gl/tile-converter/v5/core';
|
|
12
12
|
export type { PointCloudSourceTile, TraversePointCloudSourceOptions } from '@loaders.gl/tile-converter/v5/core';
|
|
13
13
|
export { encodePointCloudSource, encodePointCloudSourceTile } from '@loaders.gl/tile-converter/v5/adapters';
|
|
@@ -30,3 +30,11 @@ export { createMeshTilesetConversionSource } from '@loaders.gl/tile-converter/v5
|
|
|
30
30
|
export type { MeshSourceResource, MeshTilesetSourceOptions, MeshSourceFeatureOptions } from '@loaders.gl/tile-converter/v5/adapters';
|
|
31
31
|
export { createI3SMeshConversionCodec, createSingleMeshI3SSink } from '@loaders.gl/tile-converter/v5/adapters';
|
|
32
32
|
export type { I3SMeshConversionResource, I3SMeshConversionCodecOptions, SingleMeshI3SSink } from '@loaders.gl/tile-converter/v5/adapters';
|
|
33
|
+
export { createI3SMeshSink, createTileConversionResourceFetcher } from '@loaders.gl/tile-converter/v5/adapters';
|
|
34
|
+
export type { I3SMeshSink, I3SMeshSinkOptions, TileConversionResourceFetcherOptions, MeshTileFeatures } from '@loaders.gl/tile-converter/v5/adapters';
|
|
35
|
+
export { createPointCloudTilesetSink } from '@loaders.gl/tile-converter/v5/adapters';
|
|
36
|
+
export type { PointCloudTilesetSink, PointCloudTilesetSinkOptions } from '@loaders.gl/tile-converter/v5/adapters';
|
|
37
|
+
export { transformPointCloudSourceTile } from '@loaders.gl/tile-converter/v5/adapters';
|
|
38
|
+
export type { PointCloudSpatialOptions } from '@loaders.gl/tile-converter/v5/adapters';
|
|
39
|
+
export { createI3SMeshTilesetConversionSource } from '@loaders.gl/tile-converter/v5/adapters';
|
|
40
|
+
export type { I3SMeshTilesetSourceOptions, I3SMeshSourceFeatureOptions } from '@loaders.gl/tile-converter/v5/adapters';
|
package/dist/v5/index.js
CHANGED
|
@@ -11,7 +11,10 @@ import {
|
|
|
11
11
|
createTiles3DConversionSpatialContext
|
|
12
12
|
} from "@loaders.gl/tile-converter/v5/core";
|
|
13
13
|
import { convertFeatureAttributesToArrowBatches } from "@loaders.gl/tile-converter/v5/adapters";
|
|
14
|
-
import {
|
|
14
|
+
import {
|
|
15
|
+
encodePointCloudTile,
|
|
16
|
+
encodePointCloudTileWithMetadata
|
|
17
|
+
} from "@loaders.gl/tile-converter/v5/adapters";
|
|
15
18
|
import { traversePointCloudSource } from "@loaders.gl/tile-converter/v5/core";
|
|
16
19
|
import {
|
|
17
20
|
encodePointCloudSource,
|
|
@@ -32,6 +35,13 @@ import {
|
|
|
32
35
|
createI3SMeshConversionCodec,
|
|
33
36
|
createSingleMeshI3SSink
|
|
34
37
|
} from "@loaders.gl/tile-converter/v5/adapters";
|
|
38
|
+
import {
|
|
39
|
+
createI3SMeshSink,
|
|
40
|
+
createTileConversionResourceFetcher
|
|
41
|
+
} from "@loaders.gl/tile-converter/v5/adapters";
|
|
42
|
+
import { createPointCloudTilesetSink } from "@loaders.gl/tile-converter/v5/adapters";
|
|
43
|
+
import { transformPointCloudSourceTile } from "@loaders.gl/tile-converter/v5/adapters";
|
|
44
|
+
import { createI3SMeshTilesetConversionSource } from "@loaders.gl/tile-converter/v5/adapters";
|
|
35
45
|
export {
|
|
36
46
|
TileConversionError,
|
|
37
47
|
convertFeatureAttributesToArrowBatches,
|
|
@@ -39,21 +49,27 @@ export {
|
|
|
39
49
|
convertTileset,
|
|
40
50
|
createI3SConversionSpatialContext,
|
|
41
51
|
createI3SMeshConversionCodec,
|
|
52
|
+
createI3SMeshSink,
|
|
53
|
+
createI3SMeshTilesetConversionSource,
|
|
42
54
|
createManifestBackedTileConversionSink,
|
|
43
55
|
createMeshConversionCodec,
|
|
44
56
|
createMeshTilesetConversionSource,
|
|
57
|
+
createPointCloudTilesetSink,
|
|
45
58
|
createSingleMeshI3SSink,
|
|
46
59
|
createSingleMeshTilesetArchive,
|
|
47
60
|
createSingleMeshTilesetSink,
|
|
48
61
|
createTileConversionArchive,
|
|
62
|
+
createTileConversionResourceFetcher,
|
|
49
63
|
createTiles3DConversionSpatialContext,
|
|
50
64
|
createTilesetConversionSource,
|
|
51
65
|
encodeMeshTile,
|
|
52
66
|
encodePointCloudSource,
|
|
53
67
|
encodePointCloudSourceTile,
|
|
54
68
|
encodePointCloudTile,
|
|
69
|
+
encodePointCloudTileWithMetadata,
|
|
55
70
|
encodeTileConversionArchiveInBatches,
|
|
56
71
|
inspectTileset,
|
|
72
|
+
transformPointCloudSourceTile,
|
|
57
73
|
traversePointCloudSource,
|
|
58
74
|
validateTileset
|
|
59
75
|
};
|
|
@@ -2,7 +2,8 @@ import type { TilesetSpatialReference } from '@loaders.gl/tiles';
|
|
|
2
2
|
import type { MeshGeometry } from '@loaders.gl/schema';
|
|
3
3
|
import type { LoadLibraryOptions } from '@loaders.gl/worker-utils';
|
|
4
4
|
import type { TileConversionCodec } from '@loaders.gl/tile-converter/v5/core';
|
|
5
|
-
import type { Tiles3DConversionSpatialContext } from '@loaders.gl/tile-converter/v5/core';
|
|
5
|
+
import type { Tiles3DConversionSpatialContext, I3SConversionSpatialContext } from '@loaders.gl/tile-converter/v5/core';
|
|
6
|
+
import type { MeshTileFeatures } from './mesh-features.js';
|
|
6
7
|
import type { MeshTileMaterial } from './mesh.js';
|
|
7
8
|
/** Explicitly selected geometry, with positions already in the spatial context's source frame. */
|
|
8
9
|
export interface MeshConversionInput {
|
|
@@ -10,8 +11,12 @@ export interface MeshConversionInput {
|
|
|
10
11
|
readonly id: string;
|
|
11
12
|
/** Triangle geometry with absolute packed Float32 or Float64 source positions. */
|
|
12
13
|
readonly mesh: MeshGeometry;
|
|
14
|
+
/** Original I3S vector basis; overrides the codec default when supplied by a source. */
|
|
15
|
+
readonly normalReferenceFrame?: 'earth-centered' | 'vertex-reference-frame';
|
|
13
16
|
/** Optional single material with an embedded base-color image, mapped explicitly by the source adapter. */
|
|
14
17
|
readonly material?: MeshTileMaterial;
|
|
18
|
+
/** Explicit feature table and triangle associations, written as structural metadata. */
|
|
19
|
+
readonly features?: MeshTileFeatures;
|
|
15
20
|
/** Finite xyz origin in the target frame, subtracted before float32 encoding. */
|
|
16
21
|
readonly origin: readonly [number, number, number];
|
|
17
22
|
}
|
|
@@ -35,7 +40,11 @@ export interface EncodedMeshConversionResource {
|
|
|
35
40
|
/** Spatial policy used by the concrete mesh conversion codec. */
|
|
36
41
|
export interface MeshConversionCodecOptions {
|
|
37
42
|
/** Shared context that accepts absolute source positions and returns absolute target positions. */
|
|
38
|
-
readonly spatialContext: Tiles3DConversionSpatialContext;
|
|
43
|
+
readonly spatialContext: Tiles3DConversionSpatialContext | I3SConversionSpatialContext;
|
|
44
|
+
/** I3S vector frame when using an I3S context; defaults to earth-centered. */
|
|
45
|
+
readonly normalReferenceFrame?: 'earth-centered' | 'vertex-reference-frame';
|
|
46
|
+
/** Rebase around the transformed bounds center instead of the resource's explicit origin. */
|
|
47
|
+
readonly autoOrigin?: boolean;
|
|
39
48
|
/** Maximum Euclidean reconstruction error per vertex, in target coordinate units. */
|
|
40
49
|
readonly maxPositionError: number;
|
|
41
50
|
/** Lossless Draco Edge Breaker is enabled by default; false emits uncompressed GLB geometry. */
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { MeshGeometry } from '@loaders.gl/schema';
|
|
2
|
+
import type { GLTFScenegraph } from '@loaders.gl/gltf';
|
|
3
|
+
import type { I3SMeshFeatures } from '@loaders.gl/i3s';
|
|
4
|
+
/** Explicit-schema Arrow features; stable identifiers are distinct from geometry row indices. */
|
|
5
|
+
export type MeshTileFeatures = Pick<I3SMeshFeatures, 'batches' | 'triangleFeatureIndices' | 'featureIdField'>;
|
|
6
|
+
/** Expands shared vertices so each complete triangle retains its own feature row through Draco. */
|
|
7
|
+
export declare function prepareMeshFeatureGeometry(mesh: MeshGeometry, features?: MeshTileFeatures): MeshGeometry;
|
|
8
|
+
/** Writes one inline structural metadata table without number coercion or nullable sentinel collisions. */
|
|
9
|
+
export declare function encodeMeshFeatures(scenegraph: GLTFScenegraph, meshIndex: number, features?: MeshTileFeatures): void;
|
|
@@ -2,3 +2,5 @@ import type { GLTFMaterialPostprocessed } from '@loaders.gl/gltf';
|
|
|
2
2
|
import type { MeshTileTexture } from './mesh.js';
|
|
3
3
|
/** Maps a buffer-view or base64 PNG/JPEG image, sampling and UV transform without decoding pixels. */
|
|
4
4
|
export declare function mapMeshSourceTexture(textureInfo: NonNullable<GLTFMaterialPostprocessed['pbrMetallicRoughness']>['baseColorTexture']): MeshTileTexture;
|
|
5
|
+
/** Resolves one external encoded image through an explicitly supplied application reader. */
|
|
6
|
+
export declare function resolveMeshSourceTexture(textureInfo: NonNullable<GLTFMaterialPostprocessed['pbrMetallicRoughness']>['baseColorTexture'], readExternalResource: ((uri: string, contentUri: string | undefined, signal?: AbortSignal) => Promise<Uint8Array>) | undefined, contentUri: string | undefined, signal?: AbortSignal): Promise<MeshTileTexture>;
|
package/dist/v5/mesh-source.d.ts
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
|
+
import type { GLTFMaterialPostprocessed } from '@loaders.gl/gltf';
|
|
1
2
|
import type { Tileset3D, TilesetSourceMetadata } from '@loaders.gl/tiles';
|
|
2
3
|
import type { TileConversionSource } from '@loaders.gl/tile-converter/v5/core';
|
|
3
4
|
import type { TilesetConversionSourceOptions } from '@loaders.gl/tile-converter/v5/core';
|
|
4
5
|
import type { MeshConversionInput } from './mesh-conversion.js';
|
|
6
|
+
import type { MeshTileMaterial } from './mesh.js';
|
|
5
7
|
import type { MeshSourceFeatureOptions } from './mesh-source-features.js';
|
|
6
8
|
import type { I3SMeshFeatures } from '@loaders.gl/i3s';
|
|
7
9
|
export type { MeshSourceFeatureOptions } from './mesh-source-features.js';
|
|
@@ -14,21 +16,26 @@ export interface MeshSourceResource extends MeshConversionInput {
|
|
|
14
16
|
export interface MeshTilesetSourceOptions extends TilesetConversionSourceOptions {
|
|
15
17
|
/** Required when the source has batch/structural metadata; no schema is inferred. */
|
|
16
18
|
readonly features?: MeshSourceFeatureOptions;
|
|
19
|
+
/** Explicit bounded reader for external encoded images, relative to the content URI. */
|
|
20
|
+
readonly readExternalResource?: (uri: string, contentUri: string | undefined, signal?: AbortSignal) => Promise<Uint8Array>;
|
|
17
21
|
}
|
|
18
22
|
/**
|
|
19
23
|
* Extracts static GLB/B3DM primitives from a native ECEF 3D Tiles runtime, including
|
|
20
24
|
* optional buffer-view or base64 data-URI PNG/JPEG images, TEXCOORD_0, glTF sampling and
|
|
21
25
|
* KHR_texture_transform controls on TEXCOORD_0. Decode content with
|
|
22
26
|
* `gltf.excludeExtensions: {KHR_texture_transform: false}` to retain authored UVs/transforms.
|
|
27
|
+
* Triangle strips are expanded with alternating winding; the glTF loader already expands fans.
|
|
23
28
|
* Shared traversal retains placement identity and unloads content according to the supplied policy.
|
|
24
29
|
* The adapter applies node transforms, glTF up-axis correction, RTC translation, and tile placement
|
|
25
30
|
* once, retaining Float64 absolute positions and inverse-transpose unit normals. Animation, skins,
|
|
26
31
|
* morphs, instancing, broader texture semantics, unknown extensions, non-affine/mirrored
|
|
27
32
|
* placements, and
|
|
28
33
|
* metadata outside the declared feature profile fail explicitly. Multiple resources can be read;
|
|
29
|
-
* the single-mesh
|
|
34
|
+
* collection sinks accept bounded multiple placements; the compatibility single-mesh sink rejects a second resource.
|
|
30
35
|
* @param tileset - Dedicated native EPSG:4978 runtime with decoded glTF content enabled.
|
|
31
36
|
* @param options - Explicit feature schema/mapping and optional decoded-content cleanup.
|
|
32
37
|
* @returns Portable conversion source; COLOR_0 is preserved for GLB, while I3S rejects vertex colors.
|
|
33
38
|
*/
|
|
34
39
|
export declare function createMeshTilesetConversionSource(tileset: Tileset3D, options?: MeshTilesetSourceOptions): TileConversionSource<TilesetSourceMetadata, MeshSourceResource>;
|
|
40
|
+
/** Maps supported PBR controls and an embedded base-color image, rejecting unmapped semantics. */
|
|
41
|
+
export declare function mapMeshSourceMaterial(material: GLTFMaterialPostprocessed | undefined, readExternalResource: MeshTilesetSourceOptions['readExternalResource'], contentUri: string | undefined, signal?: AbortSignal): Promise<MeshTileMaterial | undefined>;
|
package/dist/v5/mesh.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { GLTFScenegraph } from '@loaders.gl/gltf';
|
|
2
|
-
import type { MeshGeometry } from '@loaders.gl/schema';
|
|
2
|
+
import type { MeshAttribute, MeshGeometry } from '@loaders.gl/schema';
|
|
3
|
+
import { type MeshTileFeatures } from './mesh-features.js';
|
|
3
4
|
/** Explicit glTF wrapping and filtering for the selected base-color image. */
|
|
4
5
|
export interface MeshTileSampler {
|
|
5
6
|
/** Horizontal wrapping: CLAMP_TO_EDGE, MIRRORED_REPEAT, or REPEAT; omitted values use REPEAT. */
|
|
@@ -50,6 +51,8 @@ export interface MeshTileMaterial {
|
|
|
50
51
|
}
|
|
51
52
|
/** Optional appearance for the single-mesh GLB profile. */
|
|
52
53
|
export interface MeshTileOptions {
|
|
54
|
+
/** One explicit Arrow feature table with a row index per triangle. */
|
|
55
|
+
readonly features?: MeshTileFeatures;
|
|
53
56
|
/** Explicitly selected material; other texture maps and material extensions are unsupported. */
|
|
54
57
|
readonly material?: MeshTileMaterial;
|
|
55
58
|
}
|
|
@@ -79,3 +82,5 @@ export declare function createMeshTileScenegraph(options: MeshTileOptions, geome
|
|
|
79
82
|
export declare function finalizeMeshTileScenegraph(scenegraph: GLTFScenegraph, meshIndex: number): ArrayBuffer;
|
|
80
83
|
/** Validates the shared mesh profile; spatial preparation may retain Float64 positions internally. */
|
|
81
84
|
export declare function validateMeshGeometry(mesh: MeshGeometry, allowFloat64Positions?: boolean): MeshGeometry;
|
|
85
|
+
/** Validates packed indices for triangle lists or strips, including glTF primitive-restart rules. */
|
|
86
|
+
export declare function validateMeshIndices(attribute: MeshAttribute | undefined, vertexCount: number, primitiveMode?: 4 | 5): Uint8Array | Uint16Array | Uint32Array | undefined;
|