STEP转F3D后设计历史无法删除,存在外部组件关联问题
解决Fusion 360 Design Automation转STEP到F3D后无法删除设计历史的问题
问题背景
我用Autodesk Fusion 360 Design Automation API写了脚本,读取STEP文件、修改部分属性后另存为F3D,文件能正常生成,但打开新F3D时系统判定它关联原STEP文件,导致没法删除设计历史。
原脚本代码:
import { adsk } from '@adsk/fas'; function run() { const scriptParams = JSON.parse(adsk.parameters); if (!scriptParams) throw Error('Invalid parameters provided.'); const app = adsk.core.Application.get(); if (!app) throw Error('No adsk.core.Application.'); adsk.log(`Running script with params: ${JSON.stringify(scriptParams)}`); const fileId = scriptParams.fileId; const fileName = scriptParams.fileName; const dataFile = app.data.findFileById(fileId)! const document = app.documents.open(dataFile, false); if (document && document.products && document.products.count > 0) { const design = document.products.item(0) as adsk.fusion.Design; if (design.unitsManager) { design.unitsManager.formatUnits('mm'); adsk.log('Units set to millimeters successfully.'); } const rootComp = design.rootComponent; if (rootComp && rootComp.bRepBodies) { for (let i = 0; i < rootComp.bRepBodies.count; i++) { const body = rootComp.bRepBodies.item(i); if (body) { body.name = 'ORIGINAL PART'; adsk.log('Body renamed to "ORIGINAL PART"'); break; } } } } else { adsk.log('Could not access design from document.'); } adsk.log(document?.name + ' - ' + document?.isSaved); adsk.log(dataFile?.parentFolder.name + ' - ' + dataFile?.parentFolder.name); document?.saveAs(fileName, dataFile.parentFolder, '', ''); dataFile.deleteMe(); } run();
问题原因
直接打开STEP文件再另存F3D时,Fusion 360会自动保留外部参考关联——原STEP文件被当作导入特征的数据源,新F3D文件会绑定这个外部源,所以无法彻底清除设计历史。
解决方案
换个思路:创建全新的空白Fusion设计,把STEP的几何体导入进来,然后断开和原STEP的关联(转成原生Fusion实体),再修改属性保存。这样新F3D就没有外部绑定了。
修改后的脚本:
import { adsk } from '@adsk/fas'; function run() { const scriptParams = JSON.parse(adsk.parameters); if (!scriptParams) throw Error('Invalid parameters provided.'); const app = adsk.core.Application.get(); if (!app) throw Error('No adsk.core.Application.'); adsk.log(`Running script with params: ${JSON.stringify(scriptParams)}`); const fileId = scriptParams.fileId; const fileName = scriptParams.fileName; const dataFile = app.data.findFileById(fileId)!; // 创建空白Fusion设计,替代直接打开STEP const newDesignDoc = app.documents.add(adsk.core.DocumentTypes.FusionDesignDocumentType); const design = newDesignDoc.products.item(0) as adsk.fusion.Design; if (!design) throw Error('Failed to create new Fusion design.'); // 设置单位为毫米 design.unitsManager.formatUnits('mm'); adsk.log('Units set to millimeters successfully.'); // 配置STEP导入选项,避免外部关联 const importManager = app.importManager; const stepOptions = importManager.createSTEPImportOptions(dataFile as any); stepOptions.isCreateAssembly = false; // 按单个零件导入 stepOptions.importHealing = adsk.fusion.ImportHealingOptions.ImportHealingFixAll; // 自动修复几何体 // 导入到新设计的根组件 const importResult = importManager.importToTarget(stepOptions, design.rootComponent); if (!importResult || !importResult.success) { throw Error(`Failed to import STEP: ${importResult?.errorMessage || 'Unknown error'}`); } // 删除导入特征,彻底断开和原STEP的关联 const importFeatures = design.rootComponent.features.importFeatures; if (importFeatures.count > 0) { importFeatures.item(0).deleteMe(); adsk.log('Import feature deleted, external reference removed.'); } // 修改实体名称 const rootComp = design.rootComponent; if (rootComp.bRepBodies.count > 0) { const body = rootComp.bRepBodies.item(0); if (body) { body.name = 'ORIGINAL PART'; adsk.log('Body renamed to "ORIGINAL PART"'); } } // 保存新F3D文件 const saveFolder = dataFile.parentFolder; const saveResult = newDesignDoc.saveAs(fileName, saveFolder, '', ''); if (!saveResult) { throw Error('Failed to save F3D file.'); } // 删除原STEP文件(按需保留或删除) dataFile.deleteMe(); adsk.log('Process done successfully.'); } run();
关键改动说明
- 创建空白设计:不再直接打开STEP,避免Fusion自动生成外部参考关联
- 配置导入选项:设置
isCreateAssembly=false确保按零件导入,同时开启几何体修复 - 删除导入特征:导入特征是绑定原STEP的核心,删除后实体变成Fusion原生几何体,彻底断开关联
- 保留实体操作:删除导入特征不会丢失实体,因为导入特征只是生成实体的“步骤记录”,删除记录不影响实体本身
内容的提问来源于stack exchange,提问作者Brian Nguyen
相关产品推荐
相关产品推荐

