You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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();

关键改动说明

  1. 创建空白设计:不再直接打开STEP,避免Fusion自动生成外部参考关联
  2. 配置导入选项:设置isCreateAssembly=false确保按零件导入,同时开启几何体修复
  3. 删除导入特征:导入特征是绑定原STEP的核心,删除后实体变成Fusion原生几何体,彻底断开关联
  4. 保留实体操作:删除导入特征不会丢失实体,因为导入特征只是生成实体的“步骤记录”,删除记录不影响实体本身

内容的提问来源于stack exchange,提问作者Brian Nguyen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 17:07:14