forge-convert-utils
Version:
Tools for converting Autodesk Forge file formats.
40 lines (36 loc) • 1.59 kB
text/typescript
import { PackFileReader } from '../common/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();
let bbox = [0, 0, 0, 0, 0, 0];
let bboxOffset = [0, 0, 0];
if (entryType.version > 3) {
if (transform && 't' in transform) {
bboxOffset[0] = transform.t.x;
bboxOffset[1] = transform.t.y;
bboxOffset[2] = transform.t.z;
}
}
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 };
}
}