forge-convert-utils
Version:
Tools for converting Autodesk Forge file formats.
199 lines • 8 kB
TypeScript
/// <reference types="node" />
import { IAuthOptions, Region } from 'forge-server-utils/dist/common';
import { PropDbReader } from '../common/propdb-reader';
import * as SVF from './schema';
import * as IMF from '../common/intermediate-format';
/**
* Entire content of SVF and its assets loaded in memory.
*/
export interface ISvfContent {
metadata: SVF.ISvfMetadata;
fragments: SVF.IFragment[];
geometries: SVF.IGeometryMetadata[];
meshpacks: (SVF.IMesh | SVF.ILines | SVF.IPoints | null)[][];
materials: (SVF.IMaterial | null)[];
properties: PropDbReader;
images: {
[uri: string]: Buffer;
};
}
export declare class Scene implements IMF.IScene {
protected svf: ISvfContent;
constructor(svf: ISvfContent);
getMetadata(): IMF.IMetadata;
getNodeCount(): number;
getNode(id: number): IMF.Node;
getGeometryCount(): number;
getGeometry(id: number): IMF.Geometry;
getMaterialCount(): number;
getMaterial(id: number): IMF.Material;
getImage(uri: string): Buffer | undefined;
}
/**
* Additional options when reading the entire SVF.
*/
export interface IReaderOptions {
log?: (msg: string) => void;
skipPropertyDb?: boolean;
filter?: (dbid: number, fragid: number) => boolean;
}
/**
* Utility class for parsing & reading SVF content from Model Derivative service
* or from local file system.
*
* The class can only be instantiated using one of the two async static methods:
* {@link Reader.FromFileSystem}, or {@link Reader.FromDerivativeService}.
* After that, you can parse the entire SVF into memory using {@link parse}, or parse
* individual SVF objects using methods like {@link readFragments} or {@link enumerateGeometries}.
*
* @example
* const auth = { client_id: 'forge client id', client_secret: 'forge client secreet' };
* const reader = await Reader.FromDerivativeService('model urn', 'viewable guid', auth);
* const scene = await reader.read(); // Read entire scene into an intermediate, in-memory representation
* console.log(scene);
*
* @example
* const reader = await Reader.FromFileSystem('path/to/svf');
* // Enumerate fragments (without building a list of all of them)
* for await (const fragment of reader.enumerateFragments()) {
* console.log(fragment);
* }
*/
export declare class Reader {
protected resolve: (uri: string) => Promise<Buffer>;
/**
* Instantiates new reader for an SVF on local file system.
* @async
* @param {string} filepath Path to the *.svf file.
* @returns {Promise<Reader>} Reader for the provided SVF.
*/
static FromFileSystem(filepath: string): Promise<Reader>;
/**
* Instantiates new reader for an SVF in Forge Model Derivative service.
* @async
* @param {string} urn Forge model URN.
* @param {string} guid Forge viewable GUID. The viewable(s) can be found in the manifest
* with type: 'resource', role: 'graphics', and mime: 'application/autodesk-svf'.
* @param {IAuthOptions} auth Credentials or access token for accessing the Model Derivative service.
* @param {string} host Optional host URL to be used by all Forge calls.
* @param {Region} region Optional region to be used by all Forge calls.
* @returns {Promise<Reader>} Reader for the provided SVF.
*/
static FromDerivativeService(urn: string, guid: string, auth: IAuthOptions, host?: string, region?: Region): Promise<Reader>;
protected svf: SVF.ISvfRoot;
protected constructor(svf: Buffer, resolve: (uri: string) => Promise<Buffer>);
/**
* Reads the entire scene and all its referenced assets into memory.
* In cases where a more granular control is needed (for example, when trying to control
* memory consumption), consider parsing the different SVF elements individually,
* using methods like {@link readFragments}, {@link enumerateGeometries}, etc.
* @async
* @param {IReaderOptions} [options] Additional reading options.
* @returns {Promise<IMF.IScene>} Intermediate, in-memory representation of the loaded scene.
*/
read(options?: IReaderOptions): Promise<IMF.IScene>;
protected findAsset(query: {
type?: SVF.AssetType;
uri?: string;
}): SVF.ISvfManifestAsset | undefined;
/**
* Retrieves raw binary data of a specific SVF asset.
* @async
* @param {string} uri Asset URI.
* @returns {Promise<Buffer>} Asset content.
*/
getAsset(uri: string): Promise<Buffer>;
/**
* Retrieves parsed SVF metadata.
* @async
* @returns {Promise<SVF.ISvfMetadata>} SVF metadata.
*/
getMetadata(): Promise<SVF.ISvfMetadata>;
/**
* Retrieves parsed SVF manifest.
* @async
* @returns {Promise<SVF.ISvfManifest>} SVF manifest.
*/
getManifest(): Promise<SVF.ISvfManifest>;
/**
* Retrieves, parses, and iterates over all SVF fragments.
* @async
* @generator
* @returns {AsyncIterable<SVF.IFragment>} Async iterator over parsed fragments.
*/
enumerateFragments(): AsyncIterable<SVF.IFragment>;
/**
* Retrieves, parses, and collects all SVF fragments.
* @async
* @returns {Promise<IFragment[]>} List of parsed fragments.
*/
readFragments(): Promise<SVF.IFragment[]>;
/**
* Retrieves, parses, and iterates over all SVF geometry metadata.
* @async
* @generator
* @returns {AsyncIterable<SVF.IGeometryMetadata>} Async iterator over parsed geometry metadata.
*/
enumerateGeometries(): AsyncIterable<SVF.IGeometryMetadata>;
/**
* Retrieves, parses, and collects all SVF geometry metadata.
* @async
* @returns {Promise<SVF.IGeometryMetadata[]>} List of parsed geometry metadata.
*/
readGeometries(): Promise<SVF.IGeometryMetadata[]>;
/**
* Gets the number of available mesh packs.
*/
getMeshPackCount(): number;
/**
* Retrieves, parses, and iterates over all meshes, lines, or points in a specific SVF meshpack.
* @async
* @generator
* @returns {AsyncIterable<SVF.IMesh | SVF.ILines | SVF.IPoints | null>} Async iterator over parsed meshes,
* lines, or points (or null values for unsupported mesh types).
*/
enumerateMeshPack(packNumber: number): AsyncIterable<SVF.IMesh | SVF.ILines | SVF.IPoints | null>;
/**
* Retrieves, parses, and collects all meshes, lines, or points in a specific SVF meshpack.
* @async
* @param {number} packNumber Index of mesh pack file.
* @returns {Promise<(SVF.IMesh | SVF.ILines | SVF.IPoints | null)[]>} List of parsed meshes,
* lines, or points (or null values for unsupported mesh types).
*/
readMeshPack(packNumber: number): Promise<(SVF.IMesh | SVF.ILines | SVF.IPoints | null)[]>;
/**
* Retrieves, parses, and iterates over all SVF materials.
* @async
* @generator
* @returns {AsyncIterable<SVF.IMaterial | null>} Async iterator over parsed materials
* (or null values for unsupported material types).
*/
enumerateMaterials(): AsyncIterable<SVF.IMaterial | null>;
/**
* Retrieves, parses, and collects all SVF materials.
* @async
* @returns {Promise<(SVF.IMaterial | null)[]>} List of parsed materials (or null values for unsupported material types).
*/
readMaterials(): Promise<(SVF.IMaterial | null)[]>;
/**
* Loads an image.
* @param uri Image URI.
*/
loadImage(uri: string): Promise<{
normalizedUri: string;
imageData: Buffer | undefined;
}>;
/**
* Finds URIs of all image assets referenced in the SVF.
* These can then be retrieved using {@link getAsset}.
* @returns {string[]} Image asset URIs.
*/
listImages(): string[];
/**
* Retrieves and parses the property database.
* @async
* @returns {Promise<PropDbReader>} Property database reader.
*/
getPropertyDb(): Promise<PropDbReader>;
}
//# sourceMappingURL=reader.d.ts.map