You need to enable JavaScript to run this app. 如何使用Python将装配体STEP文件的每个零件单独导出为STL文件
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Python将装配体STEP文件的每个零件单独导出为STL文件

实现方案

核心思路

利用FreeCAD内置的Python API,加载装配体STEP文件后递归遍历所有子零件,应用零件在装配体中的全局位置变换后单独导出为STL文件,天然保留装配全局坐标,完全适配你现有的自动化流程需求。

完整可运行代码

import FreeCAD
import Import
import Mesh
import os

# 配置参数,根据实际路径修改
STEP_FILE_PATH = "你的装配体文件路径/xxx.step"
OUTPUT_FOLDER = "STL输出目录路径"
LINEAR_DEVIATION = 0.01  # STL三角化精度,数值越小精度越高、文件越大
ANGULAR_DEVIATION = 0.5

# 初始化输出目录
if not os.path.exists(OUTPUT_FOLDER):
    os.makedirs(OUTPUT_FOLDER)

# 加载STEP装配体
doc = FreeCAD.newDocument()
Import.open(STEP_FILE_PATH)
doc.recompute()

# 重名计数器,避免同名零件覆盖
name_counter = {}

def export_part(obj, parent_placement=FreeCAD.Placement()):
    # 合并父级装配的位置变换,得到当前零件的全局坐标位置
    current_placement = parent_placement * obj.Placement
    if hasattr(obj, "Shape") and obj.Shape.isValid() and not obj.Shape.isNull():
        if obj.Shape.Solids:  # 判定为有效零件,排除装配组等非实体对象
            # 应用全局位置变换到零件形状
            global_shape = obj.Shape.copy()
            global_shape.Placement = current_placement
            # 处理文件名特殊字符和重名问题
            base_name = obj.Label.replace(" ", "_").replace("/", "_").replace("\\", "_")
            if base_name in name_counter:
                name_counter[base_name] += 1
                file_name = f"{base_name}_{name_counter[base_name]}.stl"
            else:
                name_counter[base_name] = 0
                file_name = f"{base_name}.stl"
            output_path = os.path.join(OUTPUT_FOLDER, file_name)
            # 导出STL
            Mesh.export([global_shape], output_path, LinearDeflection=LINEAR_DEVIATION, AngularDeflection=ANGULAR_DEVIATION)
            print(f"已导出: {output_path}")
    # 递归遍历子对象,处理多层嵌套装配
    if hasattr(obj, "Group"):
        for child in obj.Group:
            export_part(child, current_placement)

# 遍历根对象启动导出流程
for root_obj in doc.Objects:
    export_part(root_obj)

FreeCAD.closeDocument(doc.Name)
print("所有零件STL导出完成")

使用方法

  1. 确保已安装FreeCAD,可直接在FreeCAD软件内的Python控制台运行上述代码,也可将FreeCAD的Python解释器路径加入系统环境变量后直接执行脚本
  2. 修改代码开头的STEP_FILE_PATH和OUTPUT_FOLDER为实际的文件路径
  3. 可根据仿真精度需求调整LINEAR_DEVIATION和ANGULAR_DEVIATION参数

注意事项

  • 导出的STL默认保留装配体的全局坐标系位置,和手动通过FreeCAD导出的效果一致
  • 自动适配多层嵌套装配、同名零件场景,不会出现坐标偏移或文件覆盖问题
  • 如需导出OBJ格式,仅需把导出代码里的文件后缀改成.obj即可,FreeCAD的Mesh模块原生支持OBJ格式导出

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.15 23:54:01