UNPKG

forge-svf-utils

Version:

Utilities for working with Autodesk Forge SVF file format.

33 lines (29 loc) 1.34 kB
import { PackFileReader } from './packfile-reader'; import { IFragment } from './schema'; /** * Parses fragments from a binary buffer, typically stored in a file called 'FragmentList.pack', * referenced in the SVF manifest as an asset of type 'Autodesk.CloudPlatform.FragmentList'. * @generator * @param {Buffer} buffer Binary buffer to parse. * @returns {Iterable<IFragment>} Instances of parsed fragments. */ export function *parseFragments(buffer: Buffer): Iterable<IFragment> { const pfr = new PackFileReader(buffer); for (let i = 0, len = pfr.numEntries(); i < len; i++) { const entryType = pfr.seekEntry(i); console.assert(entryType); console.assert(entryType.version > 4); const flags = pfr.getUint8(); const visible: boolean = (flags & 0x01) !== 0; const materialID = pfr.getVarint(); const geometryID = pfr.getVarint(); const transform = pfr.getTransform(); const bboxOffset = [0, 0, 0]; // TODO: find the bbox offset const bbox = [0, 0, 0, 0, 0, 0]; for (let j = 0; j < 6; j++) { bbox[j] = pfr.getFloat32() + bboxOffset[j % 3]; } const dbID = pfr.getVarint(); yield { visible, materialID, geometryID, dbID, transform, bbox }; } }