FreeCAD Python API实战指南:5个脚本套路让模型从草图一路跑到交付

发布时间:2026/9/4 23:29:47
FreeCAD Python API实战指南:5个脚本套路让模型从草图一路跑到交付 FreeCAD Python API实战指南5个脚本套路让模型从草图一路跑到交付【免费下载链接】FreeCADOfficial source code of FreeCAD, a free and opensource multiplatform 3D parametric modeler.项目地址: https://gitcode.com/GitHub_Trending/fr/FreeCAD改一次螺栓头直径你得手动调12处尺寸每改一处都可能漏掉另一处。用 FreeCAD Python API可以把这类重复建模压成几行 FreeCAD 脚本化建模代码写一次、随时跑参数一变模型、图纸、物料表跟着一起更新。一条线跑通FreeCAD脚本化建模的主线从草图到交付画一个正六边形一次拉伸出螺栓头建模从最熟悉的 PartDesign 开始。PartDesign.Body负责管理特征树newObject相当于在界面上点一次“拉伸”——区别是全程不用碰鼠标六边形顶点坐标直接写在脚本里相关实现见 src/Mod/Draft/draftmake/make_polygon.py。import FreeCAD as App import Part, PartDesign doc App.newDocument(bolt) # 新建文档 body PartDesign.Body(doc) # 特征树容器 sk body.newObject(Sketcher::SketchObject, HeadSketch) pts [(5,0), (2.5,4.33), (-2.5,4.33), # 半径5圆的6个顶点 (-5,0), (-2.5,-4.33), (2.5,-4.33)] for i in range(6): # 顺序连线成正六边形 sk.addGeometry(Part.LineSegment(App.Vector(*pts[i], 0), App.Vector(*pts[(i1) % 6], 0)), False) pad body.newObject(PartDesign::Pad, HeadPad) pad.Profile sk pad.Length 6 doc.recompute()跑完recompute()3D 视图里就能看到六棱头。注意pad.Length 6这一行——它是后面所有参数化改动的抓手。改一行 FreeCAD 参数化脚本模型自己重算换规格时你不需要重画任何东西。recompute的意义在于模型是按参数长出来的不是画出来的改pad.Length 8这一行头高就从 6mm 变成 8mm全模型一行重算。相关实现见 src/Mod/PartDesign/App。pad.Length 8 # 头高 6mm → 8mm只改这一行 doc.recompute() # 整个模型跟着重算⚡ 到这里你已经拿到一个可以随意“拧螺丝”的参数化螺栓而不是一个画死的静态实体。让 FreeCAD 自动给模型做几何体检交付前先让模型过一遍“出厂检查”。Part 模块自带几何检查专抓非流形边、自由边、重复面这三类导致导出失败的隐患底层实现在 src/Mod/Part/App/TopoShape.cpp。import Part def health_check(shape): 快速检测三类常见几何问题 issues [] if shape.checkNonManifoldEdges(): issues.append(非流形边) if shape.checkFreeEdges(): issues.append(自由边) if shape.checkDuplicateFaces(): issues.append(重复面) return issues for o in doc.Objects: if hasattr(o, Shape) and o.Shape.Solids: print(o.Label, -, health_check(o.Shape) or OK)把return里那三行注释成一行就能得到一个只查非流形边的轻量版检查适配大模型。让 FreeCAD 自动给工程图量尺寸最后一步是出图。TechDraw 负责把 3D 模型投成 2D 工程图DrawViewPart就是那张投影视图尺寸的几何引用逻辑在 src/Mod/TechDraw/App/DimensionGeometry.cpp。page doc.addObject(TechDraw::DrawPage, Page) # 新建图纸页 tmpl doc.addObject(TechDraw::DrawSVGTemplate, Template) page.Template tmpl # 空白模板也能跑 view doc.addObject(TechDraw::DrawViewPart, FrontView) # 投影视图 page.addView(view) view.Source [body] view.X, view.Y 100, 100 doc.recompute()改view.X, view.Y就能挪视图位置等视图稳定后再按视图里的边号挂上线性尺寸标注就会自动跟随模型更新。把BOM和STL一行导出去交付物不止是图纸物料表也得跟上。遍历文档对象、提取名称和体积、写成 CSV——这份 BOM 直接能被 Excel 打开把体积那列乘上密度就是质量列。import csv with open(bom.csv, w, newline, encodingutf-8) as f: w csv.writer(f) w.writerow([名称, 类型, 体积(mm³)]) for o in doc.Objects: if hasattr(o, Shape) and o.Shape.Solids: w.writerow([o.Label, o.TypeId.split(::)[-1], round(o.Shape.Volume, 2)]) print(BOM已生成: bom.csv)一条线到此跑通建模、改参、体检、出图、交付全部落在脚本里。数据驱动与批量能力把重复劳动交给循环把CSV表格变成3D零件阵列零件参数来自表格时别一个个画。逐行读、逐行调用创建函数即可——Placement.Base就像给模型贴了个定位标签第几行的坐标它就落在哪儿。import FreeCAD as App, Draft, csv doc App.ActiveDocument or App.newDocument(from_csv) with open(cylinders.csv, encodingutf-8) as f: # 列: 名称,半径,高度,X,Y for row in csv.DictReader(f): c Draft.make_cylinder(radiusfloat(row[半径]), heightfloat(row[高度])) c.Placement.Base App.Vector(float(row[X]), float(row[Y]), 0) c.Label row[名称] doc.recompute()想要环形布局直接用Draft.make_polararray相关实现见 src/Mod/Draft/draftmake/make_polararray.py一行就能把单件变成一圈。让选中的零件批量导出STL协作时对方要的是成堆的 STL。让循环替你对每个选中对象跑一次Mesh.export文件名用 Label 生成不会撞名。import Mesh, os out /path/to/export # 换成你本机存在的目录 os.makedirs(out, exist_okTrue) for i, o in enumerate(App.Gui.Selection.getSelection()): if hasattr(o, Shape): Mesh.export([o], f{out}/part_{i1}_{o.Label}.stl) print(已导出:, o.Label)突破FreeCAD边界用NumPy做自动化建模用NumPy生成波浪曲面并接进交付链FreeCAD 管显示和交付数学计算可以交给外部库。meshgrid加一个正弦函数就是一张波浪面网格点的索引顺序直接复用成面片编号。import FreeCAD as App, Mesh, numpy as np doc App.newDocument(wave) x np.linspace(-10, 10, 30) X, Y np.meshgrid(x, x) Z 3 * np.sin(np.sqrt(X**2 Y**2) / 2) / (1 0.05 * (X**2 Y**2)) pts [App.Vector(*v) for v in zip(X.ravel(), Y.ravel(), Z.ravel())] faces [] for i in range(29): # 29x29 的四边形网格 for j in range(29): faces.append([i*30j, i*30j1, (i1)*30j1, (i1)*30j]) m doc.addObject(Mesh::Feature, Wave) m.Mesh Mesh.Mesh(pts, faces) doc.recompute()改振幅、频率或叠加一层阻尼曲面立刻换一种长相——外部库就是 FreeCAD 自动化建模的扩展插槽。✨ 今天就可以打开 FreeCAD 的 Python 控制台敲下第一行import FreeCAD as App第二行开始重复建模都交给机器。资源入口官方文档 src/Doc/sphinx/、Python API 参考 src/App/Document.pyi、工作台与插件目录 src/Mod/、项目 README README.md。【免费下载链接】FreeCADOfficial source code of FreeCAD, a free and opensource multiplatform 3D parametric modeler.项目地址: https://gitcode.com/GitHub_Trending/fr/FreeCAD创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考