ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

4个真实场景:用 FreeCAD Python API 把重复建模时间砍一半

4个真实场景:用 FreeCAD Python API 把重复建模时间砍一半 4个真实场景用 FreeCAD Python API 把重复建模时间砍一半【免费下载链接】FreeCADOfficial source code of FreeCAD, a free and opensource multiplatform 3D parametric modeler.项目地址: https://gitcode.com/GitHub_Trending/fr/FreeCAD月底交付前客户发来一句话把 200 个零件的底座长度从 30 改成 32每个再导一份同名 STL。手工点选、改参数、导出一轮下来就是通宵。但用FreeCAD Python API这件事只是一段 30 行上下的脚本循环遍历、改属性、批量导出。你不需要先成为程序员只需要抓住文档 → 对象 → 属性 → 重计算这个节奏FreeCAD 脚本就能从今天开始写。先记住 FreeCAD 脚本的四步工作流不管你在 GUI 里点按钮、写宏还是跑脚本底层走的是同一条路文档Document是容器所有模型都是容器里的对象所有操作本质都是加对象 → 改属性 → 触发重计算recompute即让内核根据属性重新生成几何。写脚本时你只需要按顺序敲四件事doc App.newDocument(...)、obj doc.addObject(Part::Feature, ...)、obj.Length 32、doc.recompute()。重计算一跑下游的几何、尺寸、视图自动联动——这正是参数化设计即通过修改数值驱动模型变化的根基。在 GUI 的 PartDesign 工作台里点每一刀背后跑的也是这套流程把这张对象树当作参照物后文每个代码片段你都能对号入座。用脚本快速创建基础几何体位置和颜色都由属性决定你要解决的问题最朴素从零造出零件尺寸、位置、颜色都要可控。GUI 里要开五六个菜单脚本版只要十几行而且改参数就是改一行数字。这段代码新建一个文档放入一块 30×20×5 的底板和一个 Ø8×18 的销钉用Placement定位并给销钉上色import FreeCAD as App import Part doc App.newDocument(BoltBase) box doc.addObject(Part::Feature, BasePlate) box.Shape Part.makeBox(30, 20, 5) box.Placement.Base App.Vector(0, 0, 0) cyl doc.addObject(Part::Feature, Pin) cyl.Shape Part.makeCylinder(4, 18) cyl.Placement.Base App.Vector(15, 10, 5) if App.GuiUp: # 控制台模式下没有 ViewObject cyl.ViewObject.ShapeColor (0.5, 0.5, 1.0) doc.recompute()运行后3D 视图里出现一块底板、上面立着一根浅蓝色销钉模型树中两个对象整齐挂好。这里刻意没用Draft.make_cylinder这类快捷函数因为Part.makeBox/Part.makeCylinder加addObject是最底层的组合任何版本都不会签名变动写参数化脚本时最稳。容易踩的坑很多人第一版脚本直接在控制台跑结果ViewObject报AttributeError。原因就是App.GuiUp为假时对象根本没有视图对象——所以涉及颜色的行一律包一层判断。这个惯例在src/Mod/Draft/draftmake/__init__.py的模块文档字符串里写得很明白值得读一遍。一次造出 8 个圆柱阵列FreeCAD 自动化建模的批量思路单个零件造出来之后下一个需求通常是围绕圆心复制 8 份——孔圈、螺栓圈全是这个套路。手动复制粘贴 8 次还要逐个对角度脚本则是一句话的事。假设文档里已有上一步的Pin这段代码把它包进极坐标阵列实现源码可看src/Mod/Draft/draftmake/make_polararray.pyimport FreeCAD as App import Draft doc App.ActiveDocument cyl doc.getObject(Pin) # 用内部名 Name不是显示名 Label polar Draft.make_polar_array( base_objectcyl, number8, angle360, centerApp.Vector(0, 0, 0), ) doc.recompute()运行后模型树里多出一个极坐标阵列节点视图里 8 根圆柱均匀分布在原点周围把原始圆柱挪个位置整个阵列跟着联动。这就是从造一个东西升级到管一群东西的关键阵列对象持有引用改一处全组生效。这里有两个坑。其一getObject(Pin)用的是内部名NameLabel是给人看的、允许重名拿 Label 去getObject会拿到None。其二数组引用基准对象原始圆柱可以隐藏但不能删除删了阵列直接空掉——批量自动化建模时建议给基准对象加个hidden but kept的备注。一键批量导出 STL 并自动命名顺手产出 BOM 和几何体检模型做完要交付几十个零件每个导一份同名 STL再配一张 BOM物料清单顺带确认每个零件的几何是否健康。这正是 FreeCAD 批量导出最典型的用法。这段代码一次遍历文档内全部对象循环里同时干三件事——STL 导出、几何校验、BOM 数据收集import FreeCAD as App import Mesh import os import csv doc App.ActiveDocument out_dir /path/to/export os.makedirs(out_dir, exist_okTrue) rows [] for obj in doc.Objects: if not hasattr(obj, Shape) or not obj.Shape.Solids: continue # 跳过没有实体的对象 # STL 批量导出用内部名命名避免中文乱码 Mesh.export([obj], os.path.join(out_dir, obj.Name .stl)) # 收集 BOM名称 / 类型 / 体积 / 几何是否有效 valid obj.Shape.isValid() rows.append([obj.Label, obj.TypeId.split(::)[-1], round(obj.Shape.Volume, 2), Yes if valid else No]) with open(os.path.join(out_dir, bom.csv), w, newline, encodingutf-8-sig) as f: w csv.writer(f) w.writerow([名称, 类型, 体积_mm3, 几何有效]) w.writerows(rows)运行后导出目录里躺着一堆与对象一一对应的 STL外加一张 bom.csv几何有效列若出现 No回到控制台对该对象执行obj.Shape.check(False)就能看到具体哪里不闭合、哪里非流形。更深入的检查逻辑都在src/Mod/Part/App/TopoShape.cpp里报错时按图索骥不难。坑在这里很隐蔽用中文Label拼文件路径跨系统和跨编辑器打开时极易乱码。文件命名一律用 ASCII 的obj.Name中文只留在 CSV 的名称列给人看。⚡ 进阶组合从建模到交付的流水线上面三个能力只是三块齿轮串起来就是一条产线。顺序大致是① 读参数 CSV → ② 按参数循环创建几何体 → ③ 逐个跑isValid()体检 → ④ 批量导出 STL 写 BOM → ⑤可选用 TechDraw 生成一张图纸页图纸实现可翻src/Mod/TechDraw/App/目录。把这五步塞进一个for循环加函数封装第二天换一份 CSV 就能再跑一次——这才是 FreeCAD 自动化建模省时间的真正来源脚本跑一遍是快跑一百次才是快。 避坑清单高频报错与解法报错 / 现象原因解法AttributeError: ... has no attribute ViewObject在无图形界面的控制台模式里访问视图属性用if App.GuiUp:包住所有ViewObject相关代码改了属性视图却没变化Shape还是空的只改属性没触发重建每次改完属性调用doc.recompute()别指望改了就生效doc.getObject(xx)返回None传的是显示名Label且允许重名用内部名doc.getObject(obj.Name)或遍历doc.Objects按Name匹配阵列对象空掉、引用断裂阵列引用的基准对象被删除基准对象只隐藏不删除删除前先检查polar.Base之类的引用属性导出的 STL / CSV 中文文件名乱码用Label拼了文件路径文件命名改用 ASCII 的obj.Name中文只写进表格内容CSV 里中文在 Excel 打开变乱码编码不匹配写文件时指定encodingutf-8-sigExcel 可正确识别延伸路径FreeCAD 脚本还能往哪走想继续练手三条路都从这个仓库里出发src/Mod/Draft/drafttests/下的test_creation.py、test_array.py是官方自己跑的可执行脚本照着它们的写法模仿是最快入门参数化脚本的方式src/Doc/sphinx/是官方文档的源文件API 查不到时直接翻这里比二手资料准用 GUI 打开data/examples/PartDesignExample.FCStd盯着对象树和属性面板看把每个界面元素对应回文档 → 对象 → 属性 → 重计算心智模型就彻底立住了。【免费下载链接】FreeCADOfficial source code of FreeCAD, a free and opensource multiplatform 3D parametric modeler.项目地址: https://gitcode.com/GitHub_Trending/fr/FreeCAD创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表