UNPKG

@polygonjs/polygonjs

Version:

node-based WebGL 3D engine https://polygonjs.com

57 lines (51 loc) 1.85 kB
/** * Exports the input as STEP * * @remarks */ import {BaseExporterSopParamsConfig} from './_BaseExporter'; import {CADExporterSopNode} from './_BaseExporterCAD'; import {SopType} from '../../poly/registers/nodes/types/Sop'; import {CadLoader} from '../../../core/geometry/modules/cad/CadLoader'; import {CadGC} from '../../../core/geometry/modules/cad/CadCommon'; import {CoreCadType} from '../../../core/geometry/modules/cad/CadCoreType'; import {CadLoaderSync} from '../../../core/geometry/modules/cad/CadLoaderSync'; import {MathUtils} from 'three'; class ExporterSTEPSopParamsConfig extends BaseExporterSopParamsConfig {} const ParamsConfig = new ExporterSTEPSopParamsConfig(); export class CADExporterSTEPSopNode extends CADExporterSopNode<ExporterSTEPSopParamsConfig> { override paramsConfig = ParamsConfig; static override type() { return SopType.CAD_EXPORTER_STEP; } fileExtension() { return 'step'; } createBlob(): Promise<Blob> { return new Promise(async (resolve) => { const sceneData = await this._prepareScene(); if (!sceneData) { return; } const oc = await CadLoader.core(); CadGC.withGC((r) => { const writer = r(new oc.STEPControl_Writer_1()); const {cadObjects} = sceneData; const mode = oc.STEPControl_StepModelType.STEPControl_AsIs; const compgraph = true; for (const object of cadObjects) { if (CoreCadType.isShape(object)) { const shape = object.cadGeometry(); writer.Transfer(shape, mode as any, compgraph, CadLoaderSync.Message_ProgressRange); } } const fileNameShort = MathUtils.generateUUID(); const FSfileName: string = `file.${fileNameShort}`; writer.Write(FSfileName); const result = oc.FS.readFile(FSfileName); const blob = new Blob([result], {type: 'application/octet-stream'}); resolve(blob); }); }); } }