@loaders.gl/scene 5.0.0-beta.1 → 5.0.0-beta.10
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/DRACO-README.md +15 -0
- package/GLTF-README.md +1 -1
- package/OBJ-README.md +1 -1
- package/README.md +13 -2
- package/THIRD-PARTY-NOTICES.md +10 -1
- package/dist/dist.dev.js +21207 -14204
- package/dist/dist.min.js +32 -24
- package/dist/draco/bundled.cjs +34 -0
- package/dist/draco/bundled.cjs.map +7 -0
- package/dist/draco/bundled.d.ts +5 -0
- package/dist/draco/bundled.d.ts.map +1 -0
- package/dist/draco/bundled.js +6 -0
- package/dist/draco/bundled.js.map +1 -0
- package/dist/draco/draco-format.cjs +41 -0
- package/dist/draco/draco-format.cjs.map +7 -0
- package/dist/draco/draco-format.d.ts +15 -0
- package/dist/draco/draco-format.d.ts.map +1 -0
- package/dist/draco/draco-format.js +18 -0
- package/dist/draco/draco-format.js.map +1 -0
- package/dist/draco/draco-javascript-loader-with-parser.cjs +47 -0
- package/dist/draco/draco-javascript-loader-with-parser.cjs.map +7 -0
- package/dist/draco/draco-javascript-loader-with-parser.d.ts +36 -0
- package/dist/draco/draco-javascript-loader-with-parser.d.ts.map +1 -0
- package/dist/draco/draco-javascript-loader-with-parser.js +14 -0
- package/dist/draco/draco-javascript-loader-with-parser.js.map +1 -0
- package/dist/draco/draco-libraries.cjs +61 -0
- package/dist/draco/draco-libraries.cjs.map +7 -0
- package/dist/draco/draco-libraries.d.ts +28 -0
- package/dist/draco/draco-libraries.d.ts.map +1 -0
- package/dist/draco/draco-libraries.js +33 -0
- package/dist/draco/draco-libraries.js.map +1 -0
- package/dist/draco/draco-library-options.cjs +80 -0
- package/dist/draco/draco-library-options.cjs.map +7 -0
- package/dist/draco/draco-library-options.d.ts +16 -0
- package/dist/draco/draco-library-options.d.ts.map +1 -0
- package/dist/draco/draco-library-options.js +52 -0
- package/dist/draco/draco-library-options.js.map +1 -0
- package/dist/draco/draco-loader-options.cjs +37 -0
- package/dist/draco/draco-loader-options.cjs.map +7 -0
- package/dist/draco/draco-loader-options.d.ts +27 -0
- package/dist/draco/draco-loader-options.d.ts.map +1 -0
- package/dist/draco/draco-loader-options.js +12 -0
- package/dist/draco/draco-loader-options.js.map +1 -0
- package/dist/draco/draco-loader-types.cjs +87 -0
- package/dist/draco/draco-loader-types.cjs.map +7 -0
- package/dist/draco/draco-loader-types.d.ts +41 -0
- package/dist/draco/draco-loader-types.d.ts.map +1 -0
- package/dist/draco/draco-loader-types.js +54 -0
- package/dist/draco/draco-loader-types.js.map +1 -0
- package/dist/draco/draco-loader.cjs +51 -0
- package/dist/draco/draco-loader.cjs.map +7 -0
- package/dist/draco/draco-loader.d.ts +41 -0
- package/dist/draco/draco-loader.d.ts.map +1 -0
- package/dist/draco/draco-loader.js +22 -0
- package/dist/draco/draco-loader.js.map +1 -0
- package/dist/draco/draco-wasm-loader-with-parser.cjs +48 -0
- package/dist/draco/draco-wasm-loader-with-parser.cjs.map +7 -0
- package/dist/draco/draco-wasm-loader-with-parser.d.ts +36 -0
- package/dist/draco/draco-wasm-loader-with-parser.d.ts.map +1 -0
- package/dist/draco/draco-wasm-loader-with-parser.js +14 -0
- package/dist/draco/draco-wasm-loader-with-parser.js.map +1 -0
- package/dist/draco/draco-writer.cjs +183 -0
- package/dist/draco/draco-writer.cjs.map +7 -0
- package/dist/draco/draco-writer.d.ts +98 -0
- package/dist/draco/draco-writer.d.ts.map +1 -0
- package/dist/draco/draco-writer.js +166 -0
- package/dist/draco/draco-writer.js.map +1 -0
- package/dist/draco/draco3d/draco3d-types.cjs +76 -0
- package/dist/draco/draco3d/draco3d-types.cjs.map +7 -0
- package/dist/draco/draco3d/draco3d-types.d.ts +303 -0
- package/dist/draco/draco3d/draco3d-types.d.ts.map +1 -0
- package/dist/draco/draco3d/draco3d-types.js +47 -0
- package/dist/draco/draco3d/draco3d-types.js.map +1 -0
- package/dist/draco/draco3d-loader-with-parser.cjs +50 -0
- package/dist/draco/draco3d-loader-with-parser.cjs.map +7 -0
- package/dist/draco/draco3d-loader-with-parser.d.ts +36 -0
- package/dist/draco/draco3d-loader-with-parser.d.ts.map +1 -0
- package/dist/draco/draco3d-loader-with-parser.js +21 -0
- package/dist/draco/draco3d-loader-with-parser.js.map +1 -0
- package/dist/draco/index.cjs +51 -0
- package/dist/draco/index.cjs.map +7 -0
- package/dist/draco/index.d.ts +11 -0
- package/dist/draco/index.d.ts.map +1 -0
- package/dist/draco/index.js +10 -0
- package/dist/draco/index.js.map +1 -0
- package/dist/draco/lib/draco-builder.cjs +660 -0
- package/dist/draco/lib/draco-builder.cjs.map +7 -0
- package/dist/draco/lib/draco-builder.d.ts +175 -0
- package/dist/draco/lib/draco-builder.d.ts.map +1 -0
- package/dist/draco/lib/draco-builder.js +612 -0
- package/dist/draco/lib/draco-builder.js.map +1 -0
- package/dist/draco/lib/draco-library-loader.cjs +47 -0
- package/dist/draco/lib/draco-library-loader.cjs.map +7 -0
- package/dist/draco/lib/draco-library-loader.d.ts +5 -0
- package/dist/draco/lib/draco-library-loader.d.ts.map +1 -0
- package/dist/draco/lib/draco-library-loader.js +23 -0
- package/dist/draco/lib/draco-library-loader.js.map +1 -0
- package/dist/draco/lib/draco-module-loader.cjs +281 -0
- package/dist/draco/lib/draco-module-loader.cjs.map +7 -0
- package/dist/draco/lib/draco-module-loader.d.ts +25 -0
- package/dist/draco/lib/draco-module-loader.d.ts.map +1 -0
- package/dist/draco/lib/draco-module-loader.js +220 -0
- package/dist/draco/lib/draco-module-loader.js.map +1 -0
- package/dist/draco/lib/draco-parser.cjs +601 -0
- package/dist/draco/lib/draco-parser.cjs.map +7 -0
- package/dist/draco/lib/draco-parser.d.ts +143 -0
- package/dist/draco/lib/draco-parser.d.ts.map +1 -0
- package/dist/draco/lib/draco-parser.js +598 -0
- package/dist/draco/lib/draco-parser.js.map +1 -0
- package/dist/draco/lib/draco-types.cjs +19 -0
- package/dist/draco/lib/draco-types.cjs.map +7 -0
- package/dist/draco/lib/draco-types.d.ts +59 -0
- package/dist/draco/lib/draco-types.d.ts.map +1 -0
- package/dist/draco/lib/draco-types.js +5 -0
- package/dist/draco/lib/draco-types.js.map +1 -0
- package/dist/draco/lib/parse-draco.cjs +60 -0
- package/dist/draco/lib/parse-draco.cjs.map +7 -0
- package/dist/draco/lib/parse-draco.d.ts +22 -0
- package/dist/draco/lib/parse-draco.d.ts.map +1 -0
- package/dist/draco/lib/parse-draco.js +33 -0
- package/dist/draco/lib/parse-draco.js.map +1 -0
- package/dist/draco/lib/utils/get-draco-schema.cjs +74 -0
- package/dist/draco/lib/utils/get-draco-schema.cjs.map +7 -0
- package/dist/draco/lib/utils/get-draco-schema.d.ts +7 -0
- package/dist/draco/lib/utils/get-draco-schema.d.ts.map +1 -0
- package/dist/draco/lib/utils/get-draco-schema.js +45 -0
- package/dist/draco/lib/utils/get-draco-schema.js.map +1 -0
- package/dist/draco/lib/utils/version.cjs +31 -0
- package/dist/draco/lib/utils/version.cjs.map +7 -0
- package/dist/draco/lib/utils/version.d.ts +2 -0
- package/dist/draco/lib/utils/version.d.ts.map +1 -0
- package/dist/draco/lib/utils/version.js +8 -0
- package/dist/draco/lib/utils/version.js.map +1 -0
- package/dist/draco/unbundled.cjs +31 -0
- package/dist/draco/unbundled.cjs.map +7 -0
- package/dist/draco/unbundled.d.ts +3 -0
- package/dist/draco/unbundled.d.ts.map +1 -0
- package/dist/draco/unbundled.js +5 -0
- package/dist/draco/unbundled.js.map +1 -0
- package/dist/draco/workers/draco-worker-node.cjs +8 -0
- package/dist/draco/workers/draco-worker-node.cjs.map +7 -0
- package/dist/draco/workers/draco-worker-node.d.ts +2 -0
- package/dist/draco/workers/draco-worker-node.d.ts.map +1 -0
- package/dist/draco/workers/draco-worker-node.js +9 -0
- package/dist/draco/workers/draco-worker-node.js.map +1 -0
- package/dist/draco/workers/draco-worker.cjs +7 -0
- package/dist/draco/workers/draco-worker.cjs.map +7 -0
- package/dist/draco/workers/draco-worker.d.ts +2 -0
- package/dist/draco/workers/draco-worker.d.ts.map +1 -0
- package/dist/draco/workers/draco-worker.js +7 -0
- package/dist/draco/workers/draco-worker.js.map +1 -0
- package/dist/draco/workers/draco-writer-worker-node.cjs +11 -0
- package/dist/draco/workers/draco-writer-worker-node.cjs.map +7 -0
- package/dist/draco/workers/draco-writer-worker-node.d.cts +2 -0
- package/dist/draco/workers/draco-writer-worker-node.d.cts.map +1 -0
- package/dist/draco/workers/draco-writer-worker-node.d.ts +2 -0
- package/dist/draco/workers/draco-writer-worker-node.d.ts.map +1 -0
- package/dist/draco/workers/draco-writer-worker-node.js +9 -0
- package/dist/draco/workers/draco-writer-worker-node.js.map +1 -0
- package/dist/draco/workers/draco-writer-worker.cjs +10 -0
- package/dist/draco/workers/draco-writer-worker.cjs.map +7 -0
- package/dist/draco/workers/draco-writer-worker.d.ts +2 -0
- package/dist/draco/workers/draco-writer-worker.d.ts.map +1 -0
- package/dist/draco/workers/draco-writer-worker.js +7 -0
- package/dist/draco/workers/draco-writer-worker.js.map +1 -0
- package/dist/draco-javascript-loader.cjs +25 -0
- package/dist/draco-javascript-loader.cjs.map +7 -0
- package/dist/draco-javascript-loader.d.ts +2 -0
- package/dist/draco-javascript-loader.d.ts.map +1 -0
- package/dist/draco-javascript-loader.js +3 -0
- package/dist/draco-javascript-loader.js.map +1 -0
- package/dist/draco-library-options.cjs +36 -0
- package/dist/draco-library-options.cjs.map +7 -0
- package/dist/draco-library-options.d.ts +3 -0
- package/dist/draco-library-options.d.ts.map +1 -0
- package/dist/draco-library-options.js +4 -0
- package/dist/draco-library-options.js.map +1 -0
- package/dist/draco-loader-types.cjs +25 -0
- package/dist/draco-loader-types.cjs.map +7 -0
- package/dist/draco-loader-types.d.ts +2 -0
- package/dist/draco-loader-types.d.ts.map +1 -0
- package/dist/draco-loader-types.js +3 -0
- package/dist/draco-loader-types.js.map +1 -0
- package/dist/draco-loader.cjs +25 -0
- package/dist/draco-loader.cjs.map +7 -0
- package/dist/draco-loader.d.ts +2 -0
- package/dist/draco-loader.d.ts.map +1 -0
- package/dist/draco-loader.js +3 -0
- package/dist/draco-loader.js.map +1 -0
- package/dist/draco-wasm-loader.cjs +25 -0
- package/dist/draco-wasm-loader.cjs.map +7 -0
- package/dist/draco-wasm-loader.d.ts +2 -0
- package/dist/draco-wasm-loader.d.ts.map +1 -0
- package/dist/draco-wasm-loader.js +3 -0
- package/dist/draco-wasm-loader.js.map +1 -0
- package/dist/draco-worker-node.js +29842 -0
- package/dist/draco-worker-node.js.map +7 -0
- package/dist/draco-worker.js +19668 -0
- package/dist/draco-worker.js.map +7 -0
- package/dist/draco-writer-worker-node.cjs +30022 -0
- package/dist/draco-writer-worker-node.cjs.map +7 -0
- package/dist/draco-writer-worker.js +19767 -0
- package/dist/draco-writer-worker.js.map +7 -0
- package/dist/draco-writer.cjs +25 -0
- package/dist/draco-writer.cjs.map +7 -0
- package/dist/draco-writer.d.ts +2 -0
- package/dist/draco-writer.d.ts.map +1 -0
- package/dist/draco-writer.js +3 -0
- package/dist/draco-writer.js.map +1 -0
- package/dist/draco3d-loader.cjs +25 -0
- package/dist/draco3d-loader.cjs.map +7 -0
- package/dist/draco3d-loader.d.ts +2 -0
- package/dist/draco3d-loader.d.ts.map +1 -0
- package/dist/draco3d-loader.js +3 -0
- package/dist/draco3d-loader.js.map +1 -0
- package/dist/glb-loader-types.cjs +61 -0
- package/dist/glb-loader-types.cjs.map +7 -0
- package/dist/glb-loader-types.d.ts +2 -0
- package/dist/glb-loader-types.d.ts.map +1 -0
- package/dist/glb-loader-types.js +2 -0
- package/dist/glb-loader-types.js.map +1 -0
- package/dist/glb-loader.cjs +48 -0
- package/dist/glb-loader.cjs.map +7 -0
- package/dist/glb-loader.d.ts +2 -0
- package/dist/glb-loader.d.ts.map +1 -0
- package/dist/glb-loader.js +2 -0
- package/dist/glb-loader.js.map +1 -0
- package/dist/glb-writer.cjs +53 -0
- package/dist/glb-writer.cjs.map +7 -0
- package/dist/glb-writer.d.ts +2 -0
- package/dist/glb-writer.d.ts.map +1 -0
- package/dist/glb-writer.js +2 -0
- package/dist/glb-writer.js.map +1 -0
- package/dist/gltf/glb-loader-types.cjs +1 -1
- package/dist/gltf/glb-loader-types.cjs.map +2 -2
- package/dist/gltf/glb-loader-types.d.ts +2 -2
- package/dist/gltf/glb-loader-types.js +1 -1
- package/dist/gltf/glb-loader-types.js.map +1 -1
- package/dist/gltf/gltf-loader-types.cjs +1 -1
- package/dist/gltf/gltf-loader-types.cjs.map +2 -2
- package/dist/gltf/gltf-loader-types.d.ts +11 -5
- package/dist/gltf/gltf-loader-types.d.ts.map +1 -1
- package/dist/gltf/gltf-loader-types.js +1 -1
- package/dist/gltf/gltf-loader-types.js.map +1 -1
- package/dist/gltf/gltf-loader.cjs.map +1 -1
- package/dist/gltf/gltf-loader.d.ts +4 -4
- package/dist/gltf/gltf-loader.d.ts.map +1 -1
- package/dist/gltf/index.cjs +2 -0
- package/dist/gltf/index.cjs.map +2 -2
- package/dist/gltf/index.d.ts +2 -2
- package/dist/gltf/index.d.ts.map +1 -1
- package/dist/gltf/index.js +1 -1
- package/dist/gltf/index.js.map +1 -1
- package/dist/gltf/lib/api/gltf-extensions.cjs +7 -2
- package/dist/gltf/lib/api/gltf-extensions.cjs.map +2 -2
- package/dist/gltf/lib/api/gltf-extensions.d.ts.map +1 -1
- package/dist/gltf/lib/api/gltf-extensions.js +7 -5
- package/dist/gltf/lib/api/gltf-extensions.js.map +1 -1
- package/dist/gltf/lib/encoders/encode-gltf-draco.cjs +12 -2
- package/dist/gltf/lib/encoders/encode-gltf-draco.cjs.map +2 -2
- package/dist/gltf/lib/encoders/encode-gltf-draco.d.ts +1 -1
- package/dist/gltf/lib/encoders/encode-gltf-draco.d.ts.map +1 -1
- package/dist/gltf/lib/encoders/encode-gltf-draco.js +1 -1
- package/dist/gltf/lib/encoders/encode-gltf-draco.js.map +1 -1
- package/dist/gltf/lib/extensions/EXT_texture_webp.cjs +1 -0
- package/dist/gltf/lib/extensions/EXT_texture_webp.cjs.map +2 -2
- package/dist/gltf/lib/extensions/EXT_texture_webp.d.ts.map +1 -1
- package/dist/gltf/lib/extensions/EXT_texture_webp.js +3 -0
- package/dist/gltf/lib/extensions/EXT_texture_webp.js.map +1 -1
- package/dist/gltf/lib/extensions/KHR_accessor_float64.cjs +45 -0
- package/dist/gltf/lib/extensions/KHR_accessor_float64.cjs.map +7 -0
- package/dist/gltf/lib/extensions/KHR_accessor_float64.d.ts +6 -0
- package/dist/gltf/lib/extensions/KHR_accessor_float64.d.ts.map +1 -0
- package/dist/gltf/lib/extensions/KHR_accessor_float64.js +20 -0
- package/dist/gltf/lib/extensions/KHR_accessor_float64.js.map +1 -0
- package/dist/gltf/lib/extensions/KHR_draco_mesh_compression.cjs +2 -2
- package/dist/gltf/lib/extensions/KHR_draco_mesh_compression.cjs.map +2 -2
- package/dist/gltf/lib/extensions/KHR_draco_mesh_compression.d.ts.map +1 -1
- package/dist/gltf/lib/extensions/KHR_draco_mesh_compression.js +1 -1
- package/dist/gltf/lib/extensions/KHR_draco_mesh_compression.js.map +1 -1
- package/dist/gltf/lib/extensions/KHR_gaussian_splatting.cjs +23 -7
- package/dist/gltf/lib/extensions/KHR_gaussian_splatting.cjs.map +2 -2
- package/dist/gltf/lib/extensions/KHR_gaussian_splatting.d.ts +2 -1
- package/dist/gltf/lib/extensions/KHR_gaussian_splatting.d.ts.map +1 -1
- package/dist/gltf/lib/extensions/KHR_gaussian_splatting.js +21 -5
- package/dist/gltf/lib/extensions/KHR_gaussian_splatting.js.map +1 -1
- package/dist/gltf/lib/extensions/MSFT_texture_dds.cjs +64 -0
- package/dist/gltf/lib/extensions/MSFT_texture_dds.cjs.map +7 -0
- package/dist/gltf/lib/extensions/MSFT_texture_dds.d.ts +12 -0
- package/dist/gltf/lib/extensions/MSFT_texture_dds.d.ts.map +1 -0
- package/dist/gltf/lib/extensions/MSFT_texture_dds.js +39 -0
- package/dist/gltf/lib/extensions/MSFT_texture_dds.js.map +1 -0
- package/dist/gltf/lib/extensions/utils/3d-tiles-utils.cjs +1 -1
- package/dist/gltf/lib/extensions/utils/3d-tiles-utils.cjs.map +2 -2
- package/dist/gltf/lib/extensions/utils/3d-tiles-utils.d.ts.map +1 -1
- package/dist/gltf/lib/extensions/utils/3d-tiles-utils.js +3 -1
- package/dist/gltf/lib/extensions/utils/3d-tiles-utils.js.map +1 -1
- package/dist/gltf/lib/parsers/parse-gltf.cjs +34 -8
- package/dist/gltf/lib/parsers/parse-gltf.cjs.map +3 -3
- package/dist/gltf/lib/parsers/parse-gltf.d.ts +2 -0
- package/dist/gltf/lib/parsers/parse-gltf.d.ts.map +1 -1
- package/dist/gltf/lib/parsers/parse-gltf.js +26 -6
- package/dist/gltf/lib/parsers/parse-gltf.js.map +1 -1
- package/dist/gltf/lib/types/gltf-additional-extension-schemas.cjs +22 -0
- package/dist/gltf/lib/types/gltf-additional-extension-schemas.cjs.map +2 -2
- package/dist/gltf/lib/types/gltf-additional-extension-schemas.d.ts +23 -0
- package/dist/gltf/lib/types/gltf-additional-extension-schemas.d.ts.map +1 -1
- package/dist/gltf/lib/types/gltf-additional-extension-schemas.js +22 -0
- package/dist/gltf/lib/types/gltf-additional-extension-schemas.js.map +1 -1
- package/dist/gltf/lib/types/gltf-ext-gaussian-splatting-schema.cjs.map +1 -1
- package/dist/gltf/lib/types/gltf-ext-gaussian-splatting-schema.d.ts +1 -1
- package/dist/gltf/lib/types/gltf-ext-gaussian-splatting-schema.d.ts.map +1 -1
- package/dist/gltf/lib/types/gltf-extension-schemas.cjs +8 -0
- package/dist/gltf/lib/types/gltf-extension-schemas.cjs.map +2 -2
- package/dist/gltf/lib/types/gltf-extension-schemas.d.ts +27 -0
- package/dist/gltf/lib/types/gltf-extension-schemas.d.ts.map +1 -1
- package/dist/gltf/lib/types/gltf-extension-schemas.js +8 -1
- package/dist/gltf/lib/types/gltf-extension-schemas.js.map +1 -1
- package/dist/gltf/lib/types/gltf-json-schema.cjs.map +1 -1
- package/dist/gltf/lib/types/gltf-json-schema.d.ts +2 -2
- package/dist/gltf/lib/types/gltf-json-schema.d.ts.map +1 -1
- package/dist/gltf/lib/types/gltf-texture-procedurals.cjs +19 -0
- package/dist/gltf/lib/types/gltf-texture-procedurals.cjs.map +7 -0
- package/dist/gltf/lib/types/gltf-texture-procedurals.d.ts +45 -0
- package/dist/gltf/lib/types/gltf-texture-procedurals.d.ts.map +1 -0
- package/dist/gltf/lib/types/gltf-texture-procedurals.js +5 -0
- package/dist/gltf/lib/types/gltf-texture-procedurals.js.map +1 -0
- package/dist/gltf/lib/types/gltf-types.cjs.map +1 -1
- package/dist/gltf/lib/types/gltf-types.d.ts +7 -0
- package/dist/gltf/lib/types/gltf-types.d.ts.map +1 -1
- package/dist/gltf/lib/types/gltf-version-zod-schemas.d.ts +34 -0
- package/dist/gltf/lib/types/gltf-version-zod-schemas.d.ts.map +1 -1
- package/dist/gltf/lib/types/gltf-zod-schema.cjs +4 -1
- package/dist/gltf/lib/types/gltf-zod-schema.cjs.map +2 -2
- package/dist/gltf/lib/types/gltf-zod-schema.d.ts +57 -1
- package/dist/gltf/lib/types/gltf-zod-schema.d.ts.map +1 -1
- package/dist/gltf/lib/types/gltf-zod-schema.js +6 -2
- package/dist/gltf/lib/types/gltf-zod-schema.js.map +1 -1
- package/dist/gltf/lib/utils/version.cjs +1 -1
- package/dist/gltf/lib/utils/version.cjs.map +1 -1
- package/dist/gltf/lib/utils/version.js +1 -1
- package/dist/gltf/lib/utils/version.js.map +1 -1
- package/dist/gltf/schema.cjs +3 -0
- package/dist/gltf/schema.cjs.map +2 -2
- package/dist/gltf/schema.d.ts +1 -0
- package/dist/gltf/schema.d.ts.map +1 -1
- package/dist/gltf/schema.js +1 -0
- package/dist/gltf/schema.js.map +1 -1
- package/dist/gltf-loader-types.cjs +73 -0
- package/dist/gltf-loader-types.cjs.map +7 -0
- package/dist/gltf-loader-types.d.ts +2 -0
- package/dist/gltf-loader-types.d.ts.map +1 -0
- package/dist/gltf-loader-types.js +2 -0
- package/dist/gltf-loader-types.js.map +1 -0
- package/dist/gltf-loader.cjs +48 -0
- package/dist/gltf-loader.cjs.map +7 -0
- package/dist/gltf-loader.d.ts +2 -0
- package/dist/gltf-loader.d.ts.map +1 -0
- package/dist/gltf-loader.js +2 -0
- package/dist/gltf-loader.js.map +1 -0
- package/dist/gltf-source.cjs +238 -0
- package/dist/gltf-source.cjs.map +7 -0
- package/dist/gltf-source.d.ts +2 -0
- package/dist/gltf-source.d.ts.map +1 -0
- package/dist/gltf-source.js +2 -0
- package/dist/gltf-source.js.map +1 -0
- package/dist/gltf-writer.cjs +69 -0
- package/dist/gltf-writer.cjs.map +7 -0
- package/dist/gltf-writer.d.ts +2 -0
- package/dist/gltf-writer.d.ts.map +1 -0
- package/dist/gltf-writer.js +2 -0
- package/dist/gltf-writer.js.map +1 -0
- package/dist/index.cjs +18 -5
- package/dist/index.cjs.map +2 -2
- package/dist/index.d.ts +9 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -3
- package/dist/index.js.map +1 -1
- package/dist/libs/DRACO-LICENSE +252 -0
- package/dist/libs/README.md +20 -0
- package/dist/libs/draco_decoder.js +34 -0
- package/dist/libs/draco_decoder.mjs +37 -0
- package/dist/libs/draco_decoder.wasm +0 -0
- package/dist/libs/draco_decoder_gltf.wasm +0 -0
- package/dist/libs/draco_encoder.js +98 -0
- package/dist/libs/draco_encoder.mjs +101 -0
- package/dist/libs/draco_encoder.wasm +0 -0
- package/dist/libs/draco_wasm_wrapper.js +117 -0
- package/dist/libs/draco_wasm_wrapper.mjs +120 -0
- package/dist/libs/draco_wasm_wrapper_gltf.js +116 -0
- package/dist/libs/draco_wasm_wrapper_gltf.mjs +119 -0
- package/dist/materialx/parse-materialx.cjs +61 -0
- package/dist/materialx/parse-materialx.cjs.map +7 -0
- package/dist/materialx/parse-materialx.d.ts +23 -0
- package/dist/materialx/parse-materialx.d.ts.map +1 -0
- package/dist/materialx/parse-materialx.js +39 -0
- package/dist/materialx/parse-materialx.js.map +1 -0
- package/dist/materialx/procedural-graph.cjs +77 -0
- package/dist/materialx/procedural-graph.cjs.map +7 -0
- package/dist/materialx/procedural-graph.d.ts +40 -0
- package/dist/materialx/procedural-graph.d.ts.map +1 -0
- package/dist/materialx/procedural-graph.js +59 -0
- package/dist/materialx/procedural-graph.js.map +1 -0
- package/dist/materialx-loader-types.cjs +57 -0
- package/dist/materialx-loader-types.cjs.map +7 -0
- package/dist/materialx-loader-types.d.ts +34 -0
- package/dist/materialx-loader-types.d.ts.map +1 -0
- package/dist/materialx-loader-types.js +20 -0
- package/dist/materialx-loader-types.js.map +1 -0
- package/dist/materialx-loader.cjs +40 -0
- package/dist/materialx-loader.cjs.map +7 -0
- package/dist/materialx-loader.d.ts +19 -0
- package/dist/materialx-loader.d.ts.map +1 -0
- package/dist/materialx-loader.js +14 -0
- package/dist/materialx-loader.js.map +1 -0
- package/dist/mtl-loader-types.cjs +61 -0
- package/dist/mtl-loader-types.cjs.map +7 -0
- package/dist/mtl-loader-types.d.ts +2 -0
- package/dist/mtl-loader-types.d.ts.map +1 -0
- package/dist/mtl-loader-types.js +2 -0
- package/dist/mtl-loader-types.js.map +1 -0
- package/dist/mtl-loader.cjs +47 -0
- package/dist/mtl-loader.cjs.map +7 -0
- package/dist/mtl-loader.d.ts +2 -0
- package/dist/mtl-loader.d.ts.map +1 -0
- package/dist/mtl-loader.js +2 -0
- package/dist/mtl-loader.js.map +1 -0
- package/dist/obj/bundled.cjs +2 -4
- package/dist/obj/bundled.cjs.map +2 -2
- package/dist/obj/bundled.d.ts +1 -1
- package/dist/obj/bundled.d.ts.map +1 -1
- package/dist/obj/bundled.js +1 -1
- package/dist/obj/bundled.js.map +1 -1
- package/dist/obj/index.cjs +0 -6
- package/dist/obj/index.cjs.map +3 -3
- package/dist/obj/index.d.ts +0 -4
- package/dist/obj/index.d.ts.map +1 -1
- package/dist/obj/index.js +0 -5
- package/dist/obj/index.js.map +1 -1
- package/dist/obj/mtl-loader-types.cjs +4 -7
- package/dist/obj/mtl-loader-types.cjs.map +2 -2
- package/dist/obj/mtl-loader-types.d.ts +2 -22
- package/dist/obj/mtl-loader-types.d.ts.map +1 -1
- package/dist/obj/mtl-loader-types.js +2 -4
- package/dist/obj/mtl-loader-types.js.map +1 -1
- package/dist/obj/mtl-loader.cjs +1 -1
- package/dist/obj/mtl-loader.cjs.map +2 -2
- package/dist/obj/mtl-loader.js +1 -1
- package/dist/obj/mtl-loader.js.map +1 -1
- package/dist/obj/obj-loader-types.cjs +9 -10
- package/dist/obj/obj-loader-types.cjs.map +2 -2
- package/dist/obj/obj-loader-types.d.ts +19 -39
- package/dist/obj/obj-loader-types.d.ts.map +1 -1
- package/dist/obj/obj-loader-types.js +6 -6
- package/dist/obj/obj-loader-types.js.map +1 -1
- package/dist/obj/obj-loader.cjs +63 -31
- package/dist/obj/obj-loader.cjs.map +3 -3
- package/dist/obj/obj-loader.d.ts +43 -9
- package/dist/obj/obj-loader.d.ts.map +1 -1
- package/dist/obj/obj-loader.js +61 -22
- package/dist/obj/obj-loader.js.map +1 -1
- package/dist/obj/obj-writer.cjs +3 -3
- package/dist/obj/obj-writer.cjs.map +2 -2
- package/dist/obj/obj-writer.d.ts +5 -4
- package/dist/obj/obj-writer.d.ts.map +1 -1
- package/dist/obj/obj-writer.js +4 -4
- package/dist/obj/obj-writer.js.map +1 -1
- package/dist/obj/unbundled.cjs +2 -6
- package/dist/obj/unbundled.cjs.map +2 -2
- package/dist/obj/unbundled.d.ts +2 -2
- package/dist/obj/unbundled.d.ts.map +1 -1
- package/dist/obj/unbundled.js +2 -2
- package/dist/obj/unbundled.js.map +1 -1
- package/dist/obj/workers/obj-worker.cjs +5 -5
- package/dist/obj/workers/obj-worker.cjs.map +2 -2
- package/dist/obj/workers/obj-worker.js +6 -6
- package/dist/obj/workers/obj-worker.js.map +1 -1
- package/dist/obj-loader-types.cjs +70 -0
- package/dist/obj-loader-types.cjs.map +7 -0
- package/dist/obj-loader-types.d.ts +2 -0
- package/dist/obj-loader-types.d.ts.map +1 -0
- package/dist/obj-loader-types.js +2 -0
- package/dist/obj-loader-types.js.map +1 -0
- package/dist/obj-loader.cjs +195 -0
- package/dist/obj-loader.cjs.map +7 -0
- package/dist/obj-loader.d.ts +2 -0
- package/dist/obj-loader.d.ts.map +1 -0
- package/dist/obj-loader.js +2 -0
- package/dist/obj-loader.js.map +1 -0
- package/dist/obj-worker.js +1420 -406
- package/dist/obj-writer.cjs +167 -0
- package/dist/obj-writer.cjs.map +7 -0
- package/dist/obj-writer.d.ts +2 -0
- package/dist/obj-writer.d.ts.map +1 -0
- package/dist/obj-writer.js +2 -0
- package/dist/obj-writer.js.map +1 -0
- package/dist/stl/parse-stl.cjs +100 -0
- package/dist/stl/parse-stl.cjs.map +7 -0
- package/dist/stl/parse-stl.d.ts +4 -0
- package/dist/stl/parse-stl.d.ts.map +1 -0
- package/dist/stl/parse-stl.js +84 -0
- package/dist/stl/parse-stl.js.map +1 -0
- package/dist/stl-loader-types.cjs +58 -0
- package/dist/stl-loader-types.cjs.map +7 -0
- package/dist/stl-loader-types.d.ts +32 -0
- package/dist/stl-loader-types.d.ts.map +1 -0
- package/dist/stl-loader-types.js +25 -0
- package/dist/stl-loader-types.js.map +1 -0
- package/dist/stl-loader.cjs +38 -0
- package/dist/stl-loader.cjs.map +7 -0
- package/dist/stl-loader.d.ts +17 -0
- package/dist/stl-loader.d.ts.map +1 -0
- package/dist/stl-loader.js +13 -0
- package/dist/stl-loader.js.map +1 -0
- package/dist/usd/index.cjs.map +1 -1
- package/dist/usd/index.d.ts +1 -1
- package/dist/usd/index.d.ts.map +1 -1
- package/dist/usd/lib/parse-usd.cjs +42 -5
- package/dist/usd/lib/parse-usd.cjs.map +2 -2
- package/dist/usd/lib/parse-usd.d.ts.map +1 -1
- package/dist/usd/lib/parse-usd.js +53 -6
- package/dist/usd/lib/parse-usd.js.map +1 -1
- package/dist/usd/lib/parse-usdc.cjs +187 -0
- package/dist/usd/lib/parse-usdc.cjs.map +7 -0
- package/dist/usd/lib/parse-usdc.d.ts +4 -0
- package/dist/usd/lib/parse-usdc.d.ts.map +1 -0
- package/dist/usd/lib/parse-usdc.js +176 -0
- package/dist/usd/lib/parse-usdc.js.map +1 -0
- package/dist/usd/lib/parse-usdz.cjs +22 -0
- package/dist/usd/lib/parse-usdz.cjs.map +2 -2
- package/dist/usd/lib/parse-usdz.d.ts.map +1 -1
- package/dist/usd/lib/parse-usdz.js +26 -0
- package/dist/usd/lib/parse-usdz.js.map +1 -1
- package/dist/usd/lib/usd-types.cjs.map +1 -1
- package/dist/usd/lib/usd-types.d.ts +14 -1
- package/dist/usd/lib/usd-types.d.ts.map +1 -1
- package/dist/usd/lib/usd-types.js +1 -1
- package/dist/usd/lib/usd-types.js.map +1 -1
- package/dist/usd/libs/README.md +27 -0
- package/dist/usd/libs/THREE-LICENSE +21 -0
- package/dist/usd/libs/usdc-parser.d.ts +78 -0
- package/dist/usd/libs/usdc-parser.d.ts.map +1 -0
- package/dist/usd/libs/usdc-parser.js +1669 -0
- package/dist/usd/libs/usdc-parser.js.map +1 -0
- package/dist/usd/usd-loader-types.cjs +5 -5
- package/dist/usd/usd-loader-types.cjs.map +2 -2
- package/dist/usd/usd-loader-types.d.ts +7 -7
- package/dist/usd/usd-loader-types.d.ts.map +1 -1
- package/dist/usd/usd-loader-types.js +7 -7
- package/dist/usd/usd-loader-types.js.map +1 -1
- package/dist/usd/usd-loader.cjs.map +1 -1
- package/dist/usd/usd-loader.d.ts +4 -4
- package/dist/usd/usd-loader.d.ts.map +1 -1
- package/dist/usd/usd-loader.js +2 -2
- package/dist/usd/usd-loader.js.map +1 -1
- package/dist/usd-loader-types.cjs +69 -0
- package/dist/usd-loader-types.cjs.map +7 -0
- package/dist/usd-loader-types.d.ts +2 -0
- package/dist/usd-loader-types.d.ts.map +1 -0
- package/dist/usd-loader-types.js +2 -0
- package/dist/usd-loader-types.js.map +1 -0
- package/dist/usd-loader.cjs +43 -0
- package/dist/usd-loader.cjs.map +7 -0
- package/dist/usd-loader.d.ts +2 -0
- package/dist/usd-loader.d.ts.map +1 -0
- package/dist/usd-loader.js +2 -0
- package/dist/usd-loader.js.map +1 -0
- package/package.json +144 -72
- package/src/draco/bundled.ts +9 -0
- package/src/draco/draco-format.ts +20 -0
- package/src/draco/draco-javascript-loader-with-parser.ts +30 -0
- package/src/draco/draco-libraries.ts +35 -0
- package/src/draco/draco-library-options.ts +76 -0
- package/src/draco/draco-loader-options.ts +33 -0
- package/src/draco/draco-loader-types.ts +77 -0
- package/src/draco/draco-loader.ts +45 -0
- package/src/draco/draco-wasm-loader-with-parser.ts +31 -0
- package/src/draco/draco-writer.ts +254 -0
- package/src/draco/draco3d/draco3d-types.ts +498 -0
- package/src/draco/draco3d-loader-with-parser.ts +34 -0
- package/src/draco/index.ts +42 -0
- package/src/draco/lib/draco-builder.ts +935 -0
- package/src/draco/lib/draco-library-loader.ts +38 -0
- package/src/draco/lib/draco-module-loader.ts +370 -0
- package/src/draco/lib/draco-parser.ts +779 -0
- package/src/draco/lib/draco-types.ts +72 -0
- package/src/draco/lib/parse-draco.ts +52 -0
- package/src/draco/lib/utils/get-draco-schema.ts +65 -0
- package/src/draco/lib/utils/version.ts +8 -0
- package/src/draco/libs/DRACO-LICENSE +252 -0
- package/src/draco/libs/README.md +20 -0
- package/src/draco/libs/draco_decoder.js +34 -0
- package/src/draco/libs/draco_decoder.wasm +0 -0
- package/src/draco/libs/draco_decoder_gltf.wasm +0 -0
- package/src/draco/libs/draco_encoder.js +98 -0
- package/src/draco/libs/draco_encoder.wasm +0 -0
- package/src/draco/libs/draco_wasm_wrapper.js +117 -0
- package/src/draco/libs/draco_wasm_wrapper_gltf.js +116 -0
- package/src/draco/unbundled.ts +6 -0
- package/src/draco/workers/draco-worker-node.ts +10 -0
- package/src/draco/workers/draco-worker.ts +8 -0
- package/src/draco/workers/draco-writer-worker-node.cjs +21 -0
- package/src/draco/workers/draco-writer-worker-node.ts +13 -0
- package/src/draco/workers/draco-writer-worker.ts +11 -0
- package/src/draco-javascript-loader.ts +2 -0
- package/src/draco-library-options.ts +6 -0
- package/src/draco-loader-types.ts +2 -0
- package/src/draco-loader.ts +2 -0
- package/src/draco-wasm-loader.ts +2 -0
- package/src/draco-writer.ts +2 -0
- package/src/draco3d-loader.ts +2 -0
- package/src/glb-loader-types.ts +1 -0
- package/src/glb-loader.ts +1 -0
- package/src/glb-writer.ts +1 -0
- package/src/gltf/glb-loader-types.ts +1 -1
- package/src/gltf/gltf-loader-types.ts +11 -5
- package/src/gltf/gltf-loader.ts +4 -4
- package/src/gltf/index.ts +4 -1
- package/src/gltf/lib/api/gltf-extensions.ts +7 -2
- package/src/gltf/lib/encoders/encode-gltf-draco.ts +2 -2
- package/src/gltf/lib/extensions/EXT_texture_webp.ts +3 -0
- package/src/gltf/lib/extensions/KHR_accessor_float64.ts +22 -0
- package/src/gltf/lib/extensions/KHR_draco_mesh_compression.ts +2 -1
- package/src/gltf/lib/extensions/KHR_gaussian_splatting.ts +31 -7
- package/src/gltf/lib/extensions/MSFT_texture_dds.ts +52 -0
- package/src/gltf/lib/extensions/utils/3d-tiles-utils.ts +5 -1
- package/src/gltf/lib/parsers/parse-gltf.ts +38 -6
- package/src/gltf/lib/types/gltf-additional-extension-schemas.ts +32 -0
- package/src/gltf/lib/types/gltf-ext-gaussian-splatting-schema.ts +1 -1
- package/src/gltf/lib/types/gltf-extension-schemas.ts +12 -0
- package/src/gltf/lib/types/gltf-json-schema.ts +2 -1
- package/src/gltf/lib/types/gltf-texture-procedurals.ts +67 -0
- package/src/gltf/lib/types/gltf-types.ts +8 -0
- package/src/gltf/lib/types/gltf-zod-schema.ts +7 -1
- package/src/gltf/schema.ts +1 -0
- package/src/gltf-loader-types.ts +1 -0
- package/src/gltf-loader.ts +1 -0
- package/src/gltf-source.ts +1 -0
- package/src/gltf-writer.ts +1 -0
- package/src/index.ts +13 -3
- package/src/materialx/README.md +5 -0
- package/src/materialx/parse-materialx.ts +70 -0
- package/src/materialx/procedural-graph.ts +94 -0
- package/src/materialx-loader-types.ts +24 -0
- package/src/materialx-loader.ts +15 -0
- package/src/mtl-loader-types.ts +1 -0
- package/src/mtl-loader.ts +1 -0
- package/src/obj/bundled.ts +1 -4
- package/src/obj/index.ts +0 -6
- package/src/obj/mtl-loader-types.ts +1 -4
- package/src/obj/mtl-loader.ts +1 -1
- package/src/obj/obj-loader-types.ts +11 -11
- package/src/obj/obj-loader.ts +87 -37
- package/src/obj/obj-writer.ts +12 -8
- package/src/obj/unbundled.ts +2 -2
- package/src/obj/workers/obj-worker.ts +6 -6
- package/src/obj-loader-types.ts +1 -0
- package/src/obj-loader.ts +1 -0
- package/src/obj-writer.ts +1 -0
- package/src/stl/parse-stl.ts +90 -0
- package/src/stl-loader-types.ts +28 -0
- package/src/stl-loader.ts +12 -0
- package/src/usd/index.ts +1 -0
- package/src/usd/lib/parse-usd.ts +68 -7
- package/src/usd/lib/parse-usdc.ts +188 -0
- package/src/usd/lib/parse-usdz.ts +28 -0
- package/src/usd/lib/usd-types.ts +16 -2
- package/src/usd/libs/README.md +27 -0
- package/src/usd/libs/THREE-LICENSE +21 -0
- package/src/usd/libs/usdc-parser.d.ts +18 -0
- package/src/usd/libs/usdc-parser.js +1669 -0
- package/src/usd/usd-loader-types.ts +6 -6
- package/src/usd/usd-loader.ts +2 -2
- package/src/usd-loader-types.ts +1 -0
- package/src/usd-loader.ts +1 -0
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
// loaders.gl
|
|
2
|
+
// SPDX-License-Identifier: MIT
|
|
3
|
+
|
|
4
|
+
/** Typed connection to one node output. */
|
|
5
|
+
export interface ProceduralConnection {
|
|
6
|
+
/** Stable identifier of the upstream node. */
|
|
7
|
+
node: string;
|
|
8
|
+
/** Name of its output port. */
|
|
9
|
+
output: string;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
/** Input supplied by a constant or another node. */
|
|
13
|
+
export interface ProceduralInput {
|
|
14
|
+
/** Declared value type. */
|
|
15
|
+
type: string;
|
|
16
|
+
/** Constant value, retained without implicit conversion. */
|
|
17
|
+
value?: unknown;
|
|
18
|
+
/** Optional upstream connection. */
|
|
19
|
+
connection?: ProceduralConnection;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
/** Renderer-independent operation with explicitly declared ports. */
|
|
23
|
+
export interface ProceduralNode {
|
|
24
|
+
/** Stable node identifier, unique within the graph. */
|
|
25
|
+
id: string;
|
|
26
|
+
/** Operation identifier for a downstream implementation registry. */
|
|
27
|
+
operation: string;
|
|
28
|
+
/** Named inputs. */
|
|
29
|
+
inputs: Record<string, ProceduralInput>;
|
|
30
|
+
/** Named output value types. */
|
|
31
|
+
outputs: Record<string, string>;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/** Graph contract independent of GPU resources or shader languages. */
|
|
35
|
+
export interface ProceduralGraph {
|
|
36
|
+
/** Nodes in authored order. */
|
|
37
|
+
nodes: ProceduralNode[];
|
|
38
|
+
/** Named graph outputs and their upstream connections. */
|
|
39
|
+
outputs: Record<string, ProceduralConnection>;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Validates explicit references and exact port types, returning dependency-first nodes.
|
|
44
|
+
* Does not infer conversions, resolve MaterialX definitions, or evaluate operations.
|
|
45
|
+
*/
|
|
46
|
+
export function orderProceduralGraph(graph: ProceduralGraph): ProceduralNode[] {
|
|
47
|
+
const nodes = new Map<string, ProceduralNode>();
|
|
48
|
+
for (const node of graph.nodes) {
|
|
49
|
+
if (!node.id || nodes.has(node.id))
|
|
50
|
+
throw new Error('Procedural graph: duplicate or empty node ID.');
|
|
51
|
+
nodes.set(node.id, node);
|
|
52
|
+
}
|
|
53
|
+
const dependencies = new Map<string, Set<string>>();
|
|
54
|
+
const dependents = new Map<string, string[]>();
|
|
55
|
+
for (const node of graph.nodes) {
|
|
56
|
+
const upstream = new Set<string>();
|
|
57
|
+
for (const input of Object.values(node.inputs)) {
|
|
58
|
+
if (!input.connection) continue;
|
|
59
|
+
if (Object.hasOwn(input, 'value'))
|
|
60
|
+
throw new Error('Procedural graph: connected input also has a value.');
|
|
61
|
+
const source = resolveOutput(input.connection);
|
|
62
|
+
if (source.outputs[input.connection.output] !== input.type) {
|
|
63
|
+
throw new Error('Procedural graph: incompatible connection types.');
|
|
64
|
+
}
|
|
65
|
+
upstream.add(source.id);
|
|
66
|
+
}
|
|
67
|
+
dependencies.set(node.id, upstream);
|
|
68
|
+
for (const identifier of upstream) {
|
|
69
|
+
const downstream = dependents.get(identifier) || [];
|
|
70
|
+
downstream.push(node.id);
|
|
71
|
+
dependents.set(identifier, downstream);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
for (const output of Object.values(graph.outputs)) resolveOutput(output);
|
|
75
|
+
const ordered = graph.nodes.filter(node => dependencies.get(node.id)!.size === 0);
|
|
76
|
+
for (let index = 0; index < ordered.length; index++) {
|
|
77
|
+
for (const identifier of dependents.get(ordered[index].id) || []) {
|
|
78
|
+
const upstream = dependencies.get(identifier)!;
|
|
79
|
+
upstream.delete(ordered[index].id);
|
|
80
|
+
if (!upstream.size) ordered.push(nodes.get(identifier)!);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
if (ordered.length !== graph.nodes.length) throw new Error('Procedural graph: cycle detected.');
|
|
84
|
+
return ordered;
|
|
85
|
+
|
|
86
|
+
/** Resolves an explicitly named output without accepting inherited properties. */
|
|
87
|
+
function resolveOutput(connection: ProceduralConnection): ProceduralNode {
|
|
88
|
+
const node = nodes.get(connection.node);
|
|
89
|
+
if (!node || !Object.hasOwn(node.outputs, connection.output)) {
|
|
90
|
+
throw new Error('Procedural graph: missing node or output.');
|
|
91
|
+
}
|
|
92
|
+
return node;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
// loaders.gl
|
|
2
|
+
// SPDX-License-Identifier: MIT
|
|
3
|
+
import type {MaterialXDocument} from './materialx/parse-materialx';
|
|
4
|
+
|
|
5
|
+
/** Loads the parser-bearing MaterialX implementation. */
|
|
6
|
+
async function preload() {
|
|
7
|
+
const {MaterialXLoaderWithParser} = await import('@loaders.gl/scene/materialx-loader');
|
|
8
|
+
return MaterialXLoaderWithParser;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
/** Metadata-only loader for MaterialX XML documents. */
|
|
12
|
+
export const MaterialXLoader = {
|
|
13
|
+
name: 'MaterialX',
|
|
14
|
+
id: 'materialx',
|
|
15
|
+
module: 'scene',
|
|
16
|
+
version: 'latest',
|
|
17
|
+
extensions: ['mtlx'],
|
|
18
|
+
mimeTypes: ['application/xml'],
|
|
19
|
+
text: true,
|
|
20
|
+
dataType: null as unknown as MaterialXDocument,
|
|
21
|
+
batchType: null as never,
|
|
22
|
+
options: {},
|
|
23
|
+
preload
|
|
24
|
+
} as const;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
// loaders.gl
|
|
2
|
+
// SPDX-License-Identifier: MIT
|
|
3
|
+
import {MaterialXLoader} from './materialx-loader-types';
|
|
4
|
+
import {parseMaterialX} from './materialx/parse-materialx';
|
|
5
|
+
|
|
6
|
+
const {preload: _preload, ...metadata} = MaterialXLoader;
|
|
7
|
+
|
|
8
|
+
/** Parser-bearing loader for MaterialX XML, using the native XML parser. */
|
|
9
|
+
export const MaterialXLoaderWithParser = {
|
|
10
|
+
...metadata,
|
|
11
|
+
parse: async (data: ArrayBuffer) => parseMaterialX(new TextDecoder().decode(data)),
|
|
12
|
+
parseSync: (data: ArrayBuffer) => parseMaterialX(new TextDecoder().decode(data)),
|
|
13
|
+
parseText: async (text: string) => parseMaterialX(text),
|
|
14
|
+
parseTextSync: parseMaterialX
|
|
15
|
+
} as const;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './obj/mtl-loader-types.js';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './obj/mtl-loader.js';
|
package/src/obj/bundled.ts
CHANGED
|
@@ -4,10 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
export {OBJFormat} from './obj-format';
|
|
6
6
|
export type {OBJLoaderOptions} from './obj-loader-types';
|
|
7
|
-
export {
|
|
8
|
-
OBJLoaderWithParser as OBJWorkerLoader,
|
|
9
|
-
OBJLoaderWithParser as OBJLoader
|
|
10
|
-
} from './obj-loader';
|
|
7
|
+
export {OBJLoaderWithParser as OBJLoader} from './obj-loader';
|
|
11
8
|
export {MTLFormat} from './mtl-format';
|
|
12
9
|
export type {MTLLoaderOptions} from './mtl-loader';
|
|
13
10
|
export {
|
package/src/obj/index.ts
CHANGED
|
@@ -15,9 +15,3 @@ export {OBJWriter} from './obj-writer';
|
|
|
15
15
|
export {MTLFormat} from './mtl-format';
|
|
16
16
|
export type {MTLLoaderOptions} from './mtl-loader-types';
|
|
17
17
|
export {MTLLoader} from './mtl-loader-types';
|
|
18
|
-
|
|
19
|
-
// DEPRECATED EXPORTS
|
|
20
|
-
/** @deprecated Use OBJLoader. */
|
|
21
|
-
export {OBJWorkerLoader} from './obj-loader-types';
|
|
22
|
-
/** @deprecated Use MTLLoader. */
|
|
23
|
-
export {MTLWorkerLoader} from './mtl-loader-types';
|
|
@@ -18,7 +18,7 @@ export type MTLLoaderOptions = LoaderOptions & {
|
|
|
18
18
|
* Preloads the parser-bearing MTL loader implementation.
|
|
19
19
|
*/
|
|
20
20
|
async function preload() {
|
|
21
|
-
const {MTLLoaderWithParser} = await import('@loaders.gl/scene/
|
|
21
|
+
const {MTLLoaderWithParser} = await import('@loaders.gl/scene/mtl-loader');
|
|
22
22
|
return MTLLoaderWithParser;
|
|
23
23
|
}
|
|
24
24
|
|
|
@@ -41,6 +41,3 @@ export const MTLLoader = {
|
|
|
41
41
|
},
|
|
42
42
|
preload
|
|
43
43
|
} as const satisfies Loader<MTLMaterial[], never, LoaderOptions>;
|
|
44
|
-
|
|
45
|
-
/** @deprecated Use MTLLoader. */
|
|
46
|
-
export const MTLWorkerLoader = MTLLoader;
|
package/src/obj/mtl-loader.ts
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
import type {Loader, LoaderWithParser, LoaderOptions} from '@loaders.gl/core/loader-utils';
|
|
6
6
|
import type {MTLMaterial, ParseMTLOptions} from './lib/parse-mtl';
|
|
7
7
|
import {parseMTL} from './lib/parse-mtl';
|
|
8
|
-
import {
|
|
8
|
+
import {MTLLoader as MTLWorkerLoaderMetadata} from './mtl-loader-types';
|
|
9
9
|
import {MTLLoader as MTLLoaderMetadata} from './mtl-loader-types';
|
|
10
10
|
|
|
11
11
|
const {preload: _MTLWorkerLoaderPreload, ...MTLWorkerLoaderMetadataWithoutPreload} =
|
|
@@ -2,10 +2,11 @@
|
|
|
2
2
|
// SPDX-License-Identifier: MIT
|
|
3
3
|
// Copyright (c) vis.gl contributors
|
|
4
4
|
|
|
5
|
+
import type {Table, RecordBatch} from 'apache-arrow';
|
|
5
6
|
import type {Loader, LoaderOptions} from '@loaders.gl/core/loader-utils';
|
|
6
|
-
import type {Mesh
|
|
7
|
+
import type {Mesh} from '@loaders.gl/core/schema';
|
|
7
8
|
import {OBJFormat} from './obj-format';
|
|
8
|
-
import {serializeArrowWorkerTable} from '@loaders.gl/core/
|
|
9
|
+
import {serializeArrowWorkerTable} from '@loaders.gl/core/arrow-worker-transport';
|
|
9
10
|
|
|
10
11
|
// __VERSION__ is injected by babel-plugin-version-inline
|
|
11
12
|
// @ts-ignore TS2304: Cannot find name '__VERSION__'.
|
|
@@ -14,7 +15,7 @@ const VERSION = typeof __VERSION__ !== 'undefined' ? __VERSION__ : 'latest';
|
|
|
14
15
|
export type OBJLoaderOptions = LoaderOptions & {
|
|
15
16
|
obj?: {
|
|
16
17
|
/** Output shape. Defaults to a Mesh Arrow table. */
|
|
17
|
-
shape?: 'mesh' | 'arrow
|
|
18
|
+
shape?: 'mesh' | 'arrow';
|
|
18
19
|
/** Treat OBJ vertex records as a point cloud and stream `v` rows in batches. */
|
|
19
20
|
pointCloud?: boolean;
|
|
20
21
|
/** Override the URL to the worker bundle (by default loads from unpkg.com) */
|
|
@@ -35,13 +36,13 @@ export type OBJMeshBatch = {
|
|
|
35
36
|
};
|
|
36
37
|
|
|
37
38
|
/** Public OBJ batch output shapes. */
|
|
38
|
-
export type OBJParsedBatch = OBJMeshBatch |
|
|
39
|
+
export type OBJParsedBatch = OBJMeshBatch | RecordBatch;
|
|
39
40
|
|
|
40
41
|
/**
|
|
41
42
|
* Preloads the parser-bearing OBJ loader implementation.
|
|
42
43
|
*/
|
|
43
44
|
async function preload() {
|
|
44
|
-
const {OBJLoaderWithParser} = await import('@loaders.gl/scene/obj
|
|
45
|
+
const {OBJLoaderWithParser} = await import('@loaders.gl/scene/obj-loader');
|
|
45
46
|
return OBJLoaderWithParser;
|
|
46
47
|
}
|
|
47
48
|
|
|
@@ -49,9 +50,11 @@ async function preload() {
|
|
|
49
50
|
* Metadata-only worker loader for the OBJ geometry format
|
|
50
51
|
*/
|
|
51
52
|
export const OBJLoader = {
|
|
53
|
+
defaultShape: 'arrow',
|
|
54
|
+
supportsNativeArrow: true,
|
|
52
55
|
...OBJFormat,
|
|
53
56
|
|
|
54
|
-
dataType: null as unknown as Mesh |
|
|
57
|
+
dataType: null as unknown as Mesh | Table,
|
|
55
58
|
batchType: null as unknown as OBJParsedBatch,
|
|
56
59
|
version: VERSION,
|
|
57
60
|
worker: true,
|
|
@@ -61,15 +64,12 @@ export const OBJLoader = {
|
|
|
61
64
|
text: true,
|
|
62
65
|
testText: testOBJFile,
|
|
63
66
|
options: {
|
|
64
|
-
obj: {shape: 'arrow
|
|
67
|
+
obj: {shape: 'arrow'}
|
|
65
68
|
},
|
|
66
69
|
preload
|
|
67
|
-
} as const satisfies Loader<Mesh |
|
|
70
|
+
} as const satisfies Loader<Mesh | Table, OBJParsedBatch, OBJLoaderOptions>;
|
|
68
71
|
|
|
69
72
|
function testOBJFile(text: string): boolean {
|
|
70
73
|
// TODO - There could be comment line first
|
|
71
74
|
return text[0] === 'v';
|
|
72
75
|
}
|
|
73
|
-
|
|
74
|
-
/** @deprecated Use OBJLoader. */
|
|
75
|
-
export const OBJWorkerLoader = OBJLoader;
|
package/src/obj/obj-loader.ts
CHANGED
|
@@ -2,7 +2,9 @@
|
|
|
2
2
|
// SPDX-License-Identifier: MIT
|
|
3
3
|
// Copyright (c) vis.gl contributors
|
|
4
4
|
|
|
5
|
-
import
|
|
5
|
+
import {refineArrowTableBatches, makeArrowMetadataBatch} from '@loaders.gl/core/schema-utils';
|
|
6
|
+
import type {Table} from 'apache-arrow';
|
|
7
|
+
import type {OBJLoaderOptions, OBJMeshBatch, OBJParsedBatch} from './obj-loader-types';
|
|
6
8
|
|
|
7
9
|
import {
|
|
8
10
|
concatenateArrayBuffersAsync,
|
|
@@ -11,13 +13,13 @@ import {
|
|
|
11
13
|
makeTableScanBatch,
|
|
12
14
|
type LoaderWithParser
|
|
13
15
|
} from '@loaders.gl/core/loader-utils';
|
|
14
|
-
import type {Mesh, MeshArrowTable} from '@loaders.gl/core/schema';
|
|
16
|
+
import type {Mesh, MeshArrowTable, ArrowTableBatch} from '@loaders.gl/core/schema';
|
|
15
17
|
import {
|
|
16
18
|
deserializeArrowWorkerTable,
|
|
17
19
|
serializeArrowWorkerTable
|
|
18
|
-
} from '@loaders.gl/core/
|
|
20
|
+
} from '@loaders.gl/core/arrow-worker-transport';
|
|
19
21
|
import {
|
|
20
|
-
|
|
22
|
+
convertMeshToArrowTableWrapper,
|
|
21
23
|
convertTableToMesh,
|
|
22
24
|
getMeshBoundingBox
|
|
23
25
|
} from '@loaders.gl/core/schema-utils';
|
|
@@ -28,7 +30,7 @@ import {OBJLoader as OBJLoaderMetadata} from './obj-loader-types';
|
|
|
28
30
|
const {preload: _OBJLoaderPreload, ...OBJLoaderMetadataWithoutPreload} = OBJLoaderMetadata;
|
|
29
31
|
|
|
30
32
|
function convertOBJMesh(mesh: Mesh, options?: OBJLoaderOptions): Mesh | MeshArrowTable {
|
|
31
|
-
const table =
|
|
33
|
+
const table = convertMeshToArrowTableWrapper(mesh);
|
|
32
34
|
return options?.obj?.shape === 'mesh' ? convertTableToMesh(table) : table;
|
|
33
35
|
}
|
|
34
36
|
|
|
@@ -37,44 +39,29 @@ function convertOBJMesh(mesh: Mesh, options?: OBJLoaderOptions): Mesh | MeshArro
|
|
|
37
39
|
/**
|
|
38
40
|
* Loader for the OBJ geometry format
|
|
39
41
|
*/
|
|
40
|
-
export const
|
|
42
|
+
export const OBJColumnLoader = {
|
|
41
43
|
...OBJLoaderMetadataWithoutPreload,
|
|
44
|
+
dataType: null as unknown as Mesh | MeshArrowTable,
|
|
45
|
+
batchType: null as unknown as OBJMeshBatch | ArrowTableBatch,
|
|
42
46
|
parse: async (arrayBuffer: ArrayBuffer, options?: OBJLoaderOptions) =>
|
|
43
47
|
convertOBJMesh(parseOBJ(new TextDecoder().decode(arrayBuffer), options), options),
|
|
44
48
|
parseTextSync: (text: string, options?: OBJLoaderOptions) =>
|
|
45
49
|
convertOBJMesh(parseOBJ(text, options), options),
|
|
46
|
-
parseInBatches:
|
|
47
|
-
|
|
48
|
-
| AsyncIterable<ArrayBufferLike | ArrayBufferView>
|
|
49
|
-
| Iterable<ArrayBufferLike | ArrayBufferView>,
|
|
50
|
-
options
|
|
51
|
-
): AsyncIterable<OBJParsedBatch> {
|
|
52
|
-
const batchSize = getNumericBatchSize(options);
|
|
53
|
-
if (options?.obj?.pointCloud) {
|
|
54
|
-
const textIterator = makeTextDecoderIterator(arrayBuffer as AsyncIterable<ArrayBuffer>);
|
|
55
|
-
const lineIterator = makeLineIterator(textIterator);
|
|
56
|
-
yield* parseOBJPointCloudLinesInBatches(lineIterator, options, batchSize);
|
|
57
|
-
return;
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
const data = await concatenateArrayBuffersAsync(arrayBuffer);
|
|
61
|
-
const text = new TextDecoder().decode(data);
|
|
62
|
-
if (hasOBJGeometryRecords(text)) {
|
|
63
|
-
yield makeOBJBatch(parseOBJ(text, options), options);
|
|
64
|
-
return;
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
yield* parseOBJPointCloudInBatches(text, options, batchSize);
|
|
68
|
-
},
|
|
50
|
+
parseInBatches: (input, options) =>
|
|
51
|
+
refineArrowTableBatches(parseOBJWithMetadataInBatches(input, options)),
|
|
69
52
|
serializeWorkerResult: serializeArrowWorkerTable,
|
|
70
53
|
deserializeWorkerResult: deserializeOBJWorkerResult,
|
|
71
54
|
serializeWorkerBatch: serializeArrowWorkerTable,
|
|
72
55
|
deserializeWorkerBatch: deserializeOBJWorkerBatch
|
|
73
|
-
} as const satisfies LoaderWithParser<
|
|
56
|
+
} as const satisfies LoaderWithParser<
|
|
57
|
+
Mesh | MeshArrowTable,
|
|
58
|
+
OBJMeshBatch | ArrowTableBatch,
|
|
59
|
+
OBJLoaderOptions
|
|
60
|
+
>;
|
|
74
61
|
|
|
75
62
|
/** Returns a numeric batch size when batching has an explicit row count. */
|
|
76
63
|
function getNumericBatchSize(options?: OBJLoaderOptions): number | undefined {
|
|
77
|
-
const batchSize = options?.
|
|
64
|
+
const batchSize = options?.core?.batchSize;
|
|
78
65
|
return typeof batchSize === 'number' ? batchSize : undefined;
|
|
79
66
|
}
|
|
80
67
|
|
|
@@ -89,7 +76,7 @@ function* parseOBJPointCloudInBatches(
|
|
|
89
76
|
text: string,
|
|
90
77
|
options?: OBJLoaderOptions,
|
|
91
78
|
batchSize?: number
|
|
92
|
-
): Iterable<
|
|
79
|
+
): Iterable<OBJMeshBatch | ArrowTableBatch> {
|
|
93
80
|
const vertexLines = text.split(/\r?\n/).filter(line => line.trimStart().startsWith('v '));
|
|
94
81
|
yield* makeOBJPointCloudBatches(vertexLines, options, batchSize);
|
|
95
82
|
}
|
|
@@ -98,7 +85,7 @@ async function* parseOBJPointCloudLinesInBatches(
|
|
|
98
85
|
lines: AsyncIterable<string>,
|
|
99
86
|
options?: OBJLoaderOptions,
|
|
100
87
|
batchSize?: number
|
|
101
|
-
): AsyncIterable<
|
|
88
|
+
): AsyncIterable<OBJMeshBatch | ArrowTableBatch> {
|
|
102
89
|
const normalizedBatchSize = batchSize || 1000;
|
|
103
90
|
let vertexLines: string[] = [];
|
|
104
91
|
|
|
@@ -122,7 +109,7 @@ function* makeOBJPointCloudBatches(
|
|
|
122
109
|
vertexLines: string[],
|
|
123
110
|
options?: OBJLoaderOptions,
|
|
124
111
|
batchSize?: number
|
|
125
|
-
): Iterable<
|
|
112
|
+
): Iterable<OBJMeshBatch | ArrowTableBatch> {
|
|
126
113
|
const normalizedBatchSize = batchSize || vertexLines.length || 1;
|
|
127
114
|
|
|
128
115
|
for (let rowIndex = 0; rowIndex < vertexLines.length; rowIndex += normalizedBatchSize) {
|
|
@@ -170,8 +157,8 @@ function parseOBJPointCloudMesh(vertexLines: string[]): Mesh {
|
|
|
170
157
|
};
|
|
171
158
|
}
|
|
172
159
|
|
|
173
|
-
function makeOBJBatch(mesh: Mesh, options?: OBJLoaderOptions):
|
|
174
|
-
const table =
|
|
160
|
+
function makeOBJBatch(mesh: Mesh, options?: OBJLoaderOptions): OBJMeshBatch | ArrowTableBatch {
|
|
161
|
+
const table = convertMeshToArrowTableWrapper(mesh);
|
|
175
162
|
if (options?.obj?.shape === 'mesh') {
|
|
176
163
|
const convertedMesh = convertTableToMesh(table);
|
|
177
164
|
return {
|
|
@@ -195,9 +182,72 @@ function deserializeOBJWorkerResult(
|
|
|
195
182
|
}
|
|
196
183
|
|
|
197
184
|
/** Restores the OBJ mesh batch envelope after caller-side conversion. */
|
|
198
|
-
function deserializeOBJWorkerBatch(
|
|
185
|
+
function deserializeOBJWorkerBatch(
|
|
186
|
+
result: unknown,
|
|
187
|
+
options?: OBJLoaderOptions
|
|
188
|
+
): OBJMeshBatch | ArrowTableBatch {
|
|
199
189
|
const table = deserializeArrowWorkerTable(result);
|
|
200
190
|
if (options?.obj?.shape !== 'mesh') return table;
|
|
201
191
|
const mesh = convertTableToMesh(table);
|
|
202
192
|
return {shape: 'mesh', batchType: 'data', data: mesh, length: table.length};
|
|
203
193
|
}
|
|
194
|
+
|
|
195
|
+
/** Parses OBJ batches before shared cumulative metadata refinement. */
|
|
196
|
+
async function* parseOBJWithMetadataInBatches(
|
|
197
|
+
arrayBuffer:
|
|
198
|
+
| AsyncIterable<ArrayBufferLike | ArrayBufferView>
|
|
199
|
+
| Iterable<ArrayBufferLike | ArrayBufferView>,
|
|
200
|
+
options?: OBJLoaderOptions
|
|
201
|
+
): AsyncIterable<OBJMeshBatch | ArrowTableBatch> {
|
|
202
|
+
const batchSize = getNumericBatchSize(options);
|
|
203
|
+
if (options?.obj?.pointCloud) {
|
|
204
|
+
const textIterator = makeTextDecoderIterator(arrayBuffer as AsyncIterable<ArrayBuffer>);
|
|
205
|
+
const lineIterator = makeLineIterator(textIterator);
|
|
206
|
+
yield* parseOBJPointCloudLinesInBatches(lineIterator, options, batchSize);
|
|
207
|
+
return;
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
const data = await concatenateArrayBuffersAsync(arrayBuffer);
|
|
211
|
+
const text = new TextDecoder().decode(data);
|
|
212
|
+
if (hasOBJGeometryRecords(text)) {
|
|
213
|
+
yield makeOBJBatch(parseOBJ(text, options), options);
|
|
214
|
+
return;
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
yield* parseOBJPointCloudInBatches(text, options, batchSize);
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
/** Exposes native Arrow output while retaining the worker's column protocol. */
|
|
221
|
+
export const OBJLoaderWithParser = {
|
|
222
|
+
...OBJColumnLoader,
|
|
223
|
+
dataType: OBJLoaderMetadata.dataType,
|
|
224
|
+
batchType: OBJLoaderMetadata.batchType,
|
|
225
|
+
parse: async (input: ArrayBuffer, options?: OBJLoaderOptions) =>
|
|
226
|
+
unwrapOBJTable(await OBJColumnLoader.parse(input, options)),
|
|
227
|
+
parseTextSync: (input: string, options?: OBJLoaderOptions) =>
|
|
228
|
+
unwrapOBJTable(OBJColumnLoader.parseTextSync(input, options)),
|
|
229
|
+
async *parseInBatches(input, options) {
|
|
230
|
+
for await (const batch of OBJColumnLoader.parseInBatches(input, options)) {
|
|
231
|
+
if ('shape' in batch && batch.shape === 'arrow-table') {
|
|
232
|
+
if (batch.data.batches.length) yield* batch.data.batches;
|
|
233
|
+
else yield makeArrowMetadataBatch(batch.data.schema);
|
|
234
|
+
} else yield batch;
|
|
235
|
+
}
|
|
236
|
+
},
|
|
237
|
+
deserializeWorkerResult: (result: unknown, options?: OBJLoaderOptions) =>
|
|
238
|
+
unwrapOBJTable(OBJColumnLoader.deserializeWorkerResult(result, options)),
|
|
239
|
+
deserializeWorkerBatch(result: unknown, options?: OBJLoaderOptions) {
|
|
240
|
+
const batch = OBJColumnLoader.deserializeWorkerBatch(result, options);
|
|
241
|
+
return 'shape' in batch && batch.shape === 'arrow-table'
|
|
242
|
+
? (batch.data.batches[0] ?? makeArrowMetadataBatch(batch.data.schema))
|
|
243
|
+
: batch;
|
|
244
|
+
}
|
|
245
|
+
} as const satisfies LoaderWithParser<Mesh | Table, OBJParsedBatch, OBJLoaderOptions>;
|
|
246
|
+
|
|
247
|
+
/** Returns the Arrow table with its file metadata or the requested mesh. */
|
|
248
|
+
function unwrapOBJTable(result: Mesh | MeshArrowTable): Mesh | Table {
|
|
249
|
+
if ('shape' in result && result.shape === 'arrow-table') {
|
|
250
|
+
return result.data;
|
|
251
|
+
}
|
|
252
|
+
return result as Mesh;
|
|
253
|
+
}
|
package/src/obj/obj-writer.ts
CHANGED
|
@@ -2,9 +2,10 @@
|
|
|
2
2
|
// SPDX-License-Identifier: MIT
|
|
3
3
|
// Copyright (c) vis.gl contributors
|
|
4
4
|
|
|
5
|
+
import type {Table} from 'apache-arrow';
|
|
5
6
|
import type {WriterOptions, WriterWithEncoder} from '@loaders.gl/core/loader-utils';
|
|
6
7
|
import type {Mesh, MeshArrowTable, MeshAttribute} from '@loaders.gl/core/schema';
|
|
7
|
-
import {
|
|
8
|
+
import {convertMeshToArrowTableWrapper, convertTableToMesh} from '@loaders.gl/core/schema-utils';
|
|
8
9
|
import {OBJFormat} from './obj-format';
|
|
9
10
|
|
|
10
11
|
// __VERSION__ is injected by babel-plugin-version-inline
|
|
@@ -22,7 +23,7 @@ export type OBJWriterOptions = WriterOptions & {
|
|
|
22
23
|
*/
|
|
23
24
|
export const OBJWriter = {
|
|
24
25
|
...OBJFormat,
|
|
25
|
-
dataType: null as unknown as Mesh | MeshArrowTable,
|
|
26
|
+
dataType: null as unknown as Mesh | MeshArrowTable | Table,
|
|
26
27
|
batchType: null as never,
|
|
27
28
|
version: VERSION,
|
|
28
29
|
options: {
|
|
@@ -32,16 +33,19 @@ export const OBJWriter = {
|
|
|
32
33
|
encode: async (data, options) => encodeOBJSync(data, options),
|
|
33
34
|
encodeSync: encodeOBJSync,
|
|
34
35
|
encodeTextSync: encodeOBJ
|
|
35
|
-
} as const satisfies WriterWithEncoder<Mesh | MeshArrowTable, never, OBJWriterOptions>;
|
|
36
|
+
} as const satisfies WriterWithEncoder<Mesh | MeshArrowTable | Table, never, OBJWriterOptions>;
|
|
36
37
|
|
|
37
38
|
/** Encode mesh category data as OBJ bytes. */
|
|
38
|
-
function encodeOBJSync(
|
|
39
|
+
function encodeOBJSync(
|
|
40
|
+
data: Mesh | MeshArrowTable | Table,
|
|
41
|
+
options?: OBJWriterOptions
|
|
42
|
+
): ArrayBuffer {
|
|
39
43
|
const text = encodeOBJ(data, options);
|
|
40
44
|
return new TextEncoder().encode(text).buffer;
|
|
41
45
|
}
|
|
42
46
|
|
|
43
47
|
/** Encode mesh category data as OBJ text. */
|
|
44
|
-
function encodeOBJ(data: Mesh | MeshArrowTable, options?: OBJWriterOptions): string {
|
|
48
|
+
function encodeOBJ(data: Mesh | MeshArrowTable | Table, options?: OBJWriterOptions): string {
|
|
45
49
|
const mesh = convertTableToMesh(normalizeMeshArrowTable(data));
|
|
46
50
|
const positionAttribute = getRequiredAttribute(mesh, 'POSITION');
|
|
47
51
|
const normalAttribute = mesh.attributes.NORMAL;
|
|
@@ -118,11 +122,11 @@ function encodeOBJ(data: Mesh | MeshArrowTable, options?: OBJWriterOptions): str
|
|
|
118
122
|
}
|
|
119
123
|
|
|
120
124
|
/** Return mesh data as a MeshArrowTable, converting plain Mesh data first. */
|
|
121
|
-
function normalizeMeshArrowTable(data: Mesh | MeshArrowTable): MeshArrowTable {
|
|
122
|
-
if ('
|
|
125
|
+
function normalizeMeshArrowTable(data: Mesh | MeshArrowTable | Table): MeshArrowTable | Table {
|
|
126
|
+
if (!('attributes' in data)) {
|
|
123
127
|
return data;
|
|
124
128
|
}
|
|
125
|
-
return
|
|
129
|
+
return convertMeshToArrowTableWrapper(data as Mesh);
|
|
126
130
|
}
|
|
127
131
|
|
|
128
132
|
/** Return a required mesh attribute or throw a format-specific error. */
|
package/src/obj/unbundled.ts
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
export {OBJFormat} from './obj-format';
|
|
6
6
|
export type {OBJLoaderOptions} from './obj-loader-types';
|
|
7
|
-
export {
|
|
7
|
+
export {OBJLoader} from './obj-loader-types';
|
|
8
8
|
export {MTLFormat} from './mtl-format';
|
|
9
9
|
export type {MTLLoaderOptions} from './mtl-loader-types';
|
|
10
|
-
export {
|
|
10
|
+
export {MTLLoader} from './mtl-loader-types';
|
|
@@ -3,22 +3,22 @@
|
|
|
3
3
|
// Copyright (c) vis.gl contributors
|
|
4
4
|
|
|
5
5
|
import {createLoaderWorker} from '@loaders.gl/core/loader-utils';
|
|
6
|
-
import {
|
|
6
|
+
import {OBJColumnLoader} from '../obj-loader';
|
|
7
7
|
|
|
8
8
|
createLoaderWorker({
|
|
9
|
-
...
|
|
9
|
+
...OBJColumnLoader,
|
|
10
10
|
/** Always returns columnar data; legacy mesh conversion runs on the caller. */
|
|
11
11
|
parse(input, options) {
|
|
12
|
-
return
|
|
12
|
+
return OBJColumnLoader.parse(input, {
|
|
13
13
|
...options,
|
|
14
|
-
obj: {...options?.obj, shape: 'arrow
|
|
14
|
+
obj: {...options?.obj, shape: 'arrow'}
|
|
15
15
|
});
|
|
16
16
|
},
|
|
17
17
|
/** Keeps one columnar parser alive for the entire worker input stream. */
|
|
18
18
|
parseInBatches(input, options) {
|
|
19
|
-
return
|
|
19
|
+
return OBJColumnLoader.parseInBatches(input, {
|
|
20
20
|
...options,
|
|
21
|
-
obj: {...options?.obj, shape: 'arrow
|
|
21
|
+
obj: {...options?.obj, shape: 'arrow'}
|
|
22
22
|
});
|
|
23
23
|
}
|
|
24
24
|
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './obj/obj-loader-types.js';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './obj/obj-loader.js';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './obj/obj-writer.js';
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
// SPDX-License-Identifier: MIT
|
|
2
|
+
// Copyright (c) vis.gl contributors
|
|
3
|
+
// loaders.gl
|
|
4
|
+
import type {Mesh} from '@loaders.gl/core/schema';
|
|
5
|
+
import {deduceMeshSchema, getMeshBoundingBox} from '@loaders.gl/core/schema-utils';
|
|
6
|
+
|
|
7
|
+
/** Parses ASCII or little-endian binary STL without changing authored normals. */
|
|
8
|
+
export function parseSTL(data: ArrayBuffer): Mesh {
|
|
9
|
+
const view = new DataView(data);
|
|
10
|
+
const binary = data.byteLength >= 84 && 84 + view.getUint32(80, true) * 50 === data.byteLength;
|
|
11
|
+
let positions: Float32Array;
|
|
12
|
+
let normals: Float32Array;
|
|
13
|
+
let header: string;
|
|
14
|
+
if (binary) {
|
|
15
|
+
const triangleCount = view.getUint32(80, true);
|
|
16
|
+
positions = new Float32Array(triangleCount * 9);
|
|
17
|
+
normals = new Float32Array(triangleCount * 9);
|
|
18
|
+
header = new TextDecoder().decode(data.slice(0, 80));
|
|
19
|
+
for (let triangle = 0; triangle < triangleCount; triangle++) {
|
|
20
|
+
const offset = 84 + triangle * 50;
|
|
21
|
+
for (let component = 0; component < 9; component++) {
|
|
22
|
+
positions[triangle * 9 + component] = view.getFloat32(offset + 12 + component * 4, true);
|
|
23
|
+
normals[triangle * 9 + component] = view.getFloat32(offset + (component % 3) * 4, true);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
} else {
|
|
27
|
+
const lines = new TextDecoder()
|
|
28
|
+
.decode(data)
|
|
29
|
+
.trim()
|
|
30
|
+
.split(/\r?\n/)
|
|
31
|
+
.map(line => line.trim())
|
|
32
|
+
.filter(Boolean);
|
|
33
|
+
const vertices: number[] = [];
|
|
34
|
+
const normalValues: number[] = [];
|
|
35
|
+
header = lines[0] || '';
|
|
36
|
+
let lineIndex = 0;
|
|
37
|
+
while (lineIndex < lines.length) {
|
|
38
|
+
if (!/^solid(?:\s|$)/i.test(lines[lineIndex++]))
|
|
39
|
+
throw new Error('STL: expected solid header or exact binary length');
|
|
40
|
+
while (lineIndex < lines.length && !/^endsolid(?:\s|$)/i.test(lines[lineIndex])) {
|
|
41
|
+
const normal = parseVector(lines[lineIndex++], 'facet normal');
|
|
42
|
+
if (!/^outer\s+loop$/i.test(lines[lineIndex++] || ''))
|
|
43
|
+
throw new Error('STL: expected outer loop');
|
|
44
|
+
for (let vertex = 0; vertex < 3; vertex++) {
|
|
45
|
+
vertices.push(...parseVector(lines[lineIndex++], 'vertex'));
|
|
46
|
+
normalValues.push(...normal);
|
|
47
|
+
}
|
|
48
|
+
if (
|
|
49
|
+
!/^endloop$/i.test(lines[lineIndex++] || '') ||
|
|
50
|
+
!/^endfacet$/i.test(lines[lineIndex++] || '')
|
|
51
|
+
)
|
|
52
|
+
throw new Error('STL: incomplete facet');
|
|
53
|
+
}
|
|
54
|
+
if (lineIndex >= lines.length) throw new Error('STL: missing endsolid');
|
|
55
|
+
lineIndex++;
|
|
56
|
+
}
|
|
57
|
+
if (!lines.length) throw new Error('STL: empty input');
|
|
58
|
+
positions = new Float32Array(vertices);
|
|
59
|
+
normals = new Float32Array(normalValues);
|
|
60
|
+
}
|
|
61
|
+
if (!positions.every(Number.isFinite) || !normals.every(Number.isFinite))
|
|
62
|
+
throw new Error('STL: non-finite coordinates');
|
|
63
|
+
const attributes = {POSITION: {value: positions, size: 3}, NORMAL: {value: normals, size: 3}};
|
|
64
|
+
return {
|
|
65
|
+
topology: 'triangle-list',
|
|
66
|
+
mode: 4,
|
|
67
|
+
attributes,
|
|
68
|
+
schema: deduceMeshSchema(attributes),
|
|
69
|
+
header: {
|
|
70
|
+
vertexCount: positions.length / 3,
|
|
71
|
+
boundingBox: getMeshBoundingBox(attributes) ?? undefined
|
|
72
|
+
},
|
|
73
|
+
loaderData: {header, format: binary ? 'binary' : 'ascii'}
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
/** Reads exactly three finite decimal components after an ASCII record prefix. */
|
|
78
|
+
function parseVector(line: string | undefined, prefix: string): number[] {
|
|
79
|
+
const tokens = line?.split(/\s+/) || [];
|
|
80
|
+
const prefixTokens = prefix.split(' ');
|
|
81
|
+
const components = tokens.slice(prefixTokens.length);
|
|
82
|
+
if (
|
|
83
|
+
prefixTokens.some((token, index) => tokens[index]?.toLowerCase() !== token) ||
|
|
84
|
+
components.length !== 3 ||
|
|
85
|
+
components.some(value => !/^[+-]?(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?$/i.test(value))
|
|
86
|
+
) {
|
|
87
|
+
throw new Error(`STL: invalid ${prefix} record`);
|
|
88
|
+
}
|
|
89
|
+
return components.map(Number);
|
|
90
|
+
}
|