UNPKG

forge-convert-utils

Version:

Tools for converting Autodesk Forge file formats.

51 lines (45 loc) 2.32 kB
/* * Example: converting an SVF (incl. property database) from Model Derivative service. * Usage: * export FORGE_CLIENT_ID=<your client id> * export FORGE_CLIENT_SECRET=<your client secret> * node remote-svf-to-gltf.js <your model urn> <path to output folder> */ const path = require('path'); const fs = require('fs'); const { ModelDerivativeClient, ManifestHelper } = require('forge-server-utils'); const { SvfReader, GltfWriter } = require('..'); const { FORGE_CLIENT_ID, FORGE_CLIENT_SECRET } = process.env; async function run (urn, outputDir) { const defaultOptions = { deduplicate: false, skipUnusedUvs: false, center: true, log: console.log }; try { const auth = { client_id: FORGE_CLIENT_ID, client_secret: FORGE_CLIENT_SECRET }; const modelDerivativeClient = new ModelDerivativeClient(auth); const helper = new ManifestHelper(await modelDerivativeClient.getManifest(urn)); const derivatives = helper.search({ type: 'resource', role: 'graphics' }); const writer0 = new GltfWriter(Object.assign({}, defaultOptions)); const writer1 = new GltfWriter(Object.assign({}, defaultOptions, { deduplicate: true, skipUnusedUvs: true })); // Convert individual 3D viewables into glTFs for (const derivative of derivatives.filter(d => d.mime === 'application/autodesk-svf')) { const reader = await SvfReader.FromDerivativeService(urn, derivative.guid, auth); const scene = await reader.read({ log: console.log }); await writer0.write(scene, path.join(outputDir, derivative.guid, 'gltf-raw')); await writer1.write(scene, path.join(outputDir, derivative.guid, 'gltf-dedup')); } // Also download property database in sqlite form const pdbDerivatives = helper.search({ type: 'resource', role: 'Autodesk.CloudPlatform.PropertyDatabase' }); if (pdbDerivatives.length > 0) { const databaseStream = modelDerivativeClient.getDerivativeChunked(urn, pdbDerivatives[0].urn, 1 << 20); databaseStream.pipe(fs.createWriteStream(path.join(outputDir, 'properties.sqlite'))); } } catch(err) { console.error(err); process.exit(1); } } run(process.argv[2], process.argv[3]);