FreeCAD 参数化标准件库:如何从单件建模到批量生成的完整指南
【免费下载链接】FreeCADOfficial source code of FreeCAD, a free and opensource multiplatform 3D parametric modeler.项目地址: https://gitcode.com/GitHub_Trending/fr/FreeCAD
本文带你走通一条完整的路线:把 FreeCAD 里反复手画的 GB/ISO 标准件(六角螺栓、螺母、平垫圈)变成可复用的参数化标准件库——从复用内置 ISO 螺纹数据、手工打造参数化螺栓模型,到脚本批量生成整个规格系列,再到图纸上的配合标注。读完你可以直接套用到自己的项目上。
每次画标准件的隐性成本
先说一个很典型的场景:一个中型装配,80 颗六角螺栓,其中 40 颗是 M8×30。设计评审后全部改成 M10,你得找到 40 处逐一修改;改完发现还有 5 处头部对边尺寸手滑填成了 13.5;而垫圈散落在七八个文档里,没人说得清哪个版本是"对的"。
问题根源都一样:标准件被当成了"几何",而不是"数据"。画出来的实体只是一堆坐标,改一处不会牵动别处。一旦它变成数据,就能被引用、被替换、被批量生成。
读源码:FreeCAD 是怎么存 ISO 标准数据的
动手之前,建议先看看 FreeCAD 自己是怎么处理标准件的——它不"画"标准件,它"查表生成"。
以螺纹为例,孔特征的实现和配套的测试文件里维护着两张标准表:ISOMetricProfile(粗牙)和ISOMetricFineProfile(细牙),覆盖 M1 到 M68 全序列:
# ISO 公制粗牙系列摘录(名称即"直径x螺距") "ISOMetricProfile": [ "M6x1.0", "M8x1.25", "M10x1.5", "M12x1.75", "M16x2.0", ]链轮是同样的思路,链轮特征内嵌了一张含 ISO 606 的规格表:
# ISO 606 滚子链链轮参数:[节距, 滚子直径, 内孔, 名称] 16: [0.375, 5.72 / 25.4, 5.2 / 25.4, "ISO 606 06B"], 17: [0.500, 7.75 / 25.4, 7.0 / 25.4, "ISO 606 08B"],由此可以提炼出标准件的两层结构:
- 参数表层:标准号 → 一组数字(节距、头高系数、公差带);
- 参数化特征层:由参数表驱动的模型,改数字即重新生成。
自建 GB 库时照这个结构来,别跳过第一层——后面所有"批量"能力都长在它上面。
免画 M8 螺纹:复用内置 ISO 螺纹数据
只需要同轴标准螺纹孔时,内置数据比你自己建螺旋体可靠得多。在 PartDesign 里选一个孔特征,ThreadType下拉里列出的就是上表的全部规格:
import FreeCAD as App doc = App.newDocument("HoleDemo") body = doc.addObject("PartDesign::Body", "Body") hole = body.newObject("PartDesign::Hole", "Hole") hole.ThreadType = "ISOMetricProfile" # ISO 公制粗牙 hole.ThreadSize = "M8x1.25" # 规格直接查表 hole.ThreadLength = 30.0 doc.recompute()两个细节值得留意:
- TestHole.py里有条注释:保存文件用下标而非字符串引用规格,数组顺序是兼容性契约。以后扩展自己的规格表时,只在末尾追加,切勿中间插入;
- 螺纹孔只解决了"孔端","螺栓端"的实体模型要自己建——这是下一节的事。
用三个特征建一颗参数化六角螺栓
以 ISO 4017 M8 六角头螺栓为例,它只由三个特征组成:
- 六角头:对边 13mm 的正六边形草图,拉伸 5.5mm 高;
- 杆身:直径 8mm 圆柱,长度取公称长度;
- 螺纹表示:真实螺旋体计算成本高,工程上常用小径圆柱 + 图样装饰螺纹线代替。
import FreeCAD as App doc = App.newDocument("Bolt_M8_L30") body = doc.addObject("PartDesign::Body", "Body") sketch = doc.addObject("Sketcher::SketchObject", "HexSketch") # 正六边形草图 body.addObject(sketch) pad = body.newObject("PartDesign::Pad", "Head") pad.Profile = sketch pad.Length = 5.5 # M8 六角头高度(mm) doc.recompute()真正的功夫在"参数化"三个字上:不要把 13、5.5 这类数字直接写死在草图约束里,而是让尺寸引用一个参数表(公称直径 d、头高系数 k、长度 l 三个自变量即可覆盖整颗螺栓)。Spreadsheet 工作簿很适合当这张表,用表达式把单元格绑定到特征尺寸上。改一个单元格,整颗螺栓跟着变——这就是"模板"和"死模型"的区别。
GB 标准参数映射:把差异做成数据
GB/T 5782 六角头螺栓与 ISO 4017 的几何差异不大,主要集中在头高系数上:GB 约 0.7d,ISO 约 0.65d。这类差异用参数表处理,而不是用 if-else 特判代码:
# GB/ISO 螺栓参数映射表(单位 mm,key 为标准号,value 为各直径参数) BOLT_TABLE = { "GB5782": {8: dict(d=8, head_h=5.5), 10: dict(d=10, head_h=7.0)}, "ISO4017": {8: dict(d=8, head_h=5.3), 10: dict(d=10, head_h=6.4)}, } params = BOLT_TABLE["GB5782"][8]三条实操建议:
- 表独立成模块(或独立工作簿),建模脚本只读表;以后加 JIS 列,只改表不改模型;
- 每张表头注释来源(标准号、条款页码),过审时查得到依据;
- 表里查不到的规格应直接报错,绝不静默猜值——猜出来的尺寸比没有尺寸更危险。
一个循环批量生成整组 GB 螺栓系列
有了参数表和参数化模型,批量生成只是两层循环:
import FreeCAD as App def make_bolt(standard, d, l): doc = App.newDocument(f"Bolt_{standard}_M{d}_L{l}") # 调用单颗建模函数:把 d/l 写入参数表并重新计算 doc.saveAs(f"~/FreeCAD/GB_Parts/bolts/{standard}_M{d}_L{l}.FCStd") for d in (6, 8, 10, 12): for l in (20, 30, 40, 50): make_bolt("GB5782", d, l)落地时有三个约定值得遵守:
- 命名即检索:文件名按"标准号_规格_长度"组织,装配里拖进来一眼认得出;
- 目录对齐表结构:
bolts/、nuts/、washers/按品类分目录,与参数表 key 一一对应; - 生成即校验:批量任务结束前统一 recompute 一遍,参数表的错误要暴露在这一步,而不是装配里打开才发现某个文件算不出来。
图纸上的配合标注:用 TechDraw 的 ISO 286 孔轴配合
标准件不止有 3D 模型,图纸上还得标配合。TechDraw 孔轴配合工具内置了 ISO 286 配合表,按松/紧定/过盈三类组织,结构一目了然:
# TechDrawTools 源码摘录:配合组合表(基准制 + 配合性质) holeValues = [ ["h9", "D10", "Loose fit"], ["h6", "H7", "Loose fit"], ["k6", "H7", "Snug fit"], ["s6", "H7", "Press fit"], ]这个三列结构(轴公差带、孔公差带、配合性质)本身就可以当模板:把你自己的 GB/T 1801 配合数据按同样的列布局写进独立脚本,就得到一个 GB 版的配合选择器,和内置工具用法完全一致。
三个坑:会让标准件库报废的事
- ⚠️规格顺序是契约。如前所述,
ISOMetricProfile的下标会被保存文件引用。自建表时顺序一旦固定就不许重排,只能追加,否则旧文件打开后规格错位。 - 模板里不许有硬编码。草图约束里直接写 13 和 5.5 的"螺栓"不是模板,是死模型。模板的价值全部来自参数化尺寸,这一点没有商量余地。
- 装配里引用,而不是复制。把一颗螺栓复制粘贴 80 份,改参数就是 80 份返工。正确做法是链接标准件 FCStd 作为部件,模板更新时装配自动跟上。
再往前走的三件事
- 扩参数表:给
BOLT_TABLE加 JIS 列或 GB 螺母、平垫圈(GB 6170、GB 97)两张表,切换标准变成一个参数; - 写合规校验脚本:遍历生成的 FCStd,把模型实测尺寸与参数表逐项比对,输出差异报告,作为入库前的最后一道闸;
- 协作化标准件库:用 Git 仓库管理
GB_Parts目录,团队共享同一份参数表;需要查阅内置 ISO 标准数据表时,可以把源码克隆到本地浏览:
# 克隆源码用于查阅内置 ISO 标准数据表(只读参考) git clone https://gitcode.com/GitHub_Trending/fr/freecad【免费下载链接】FreeCADOfficial source code of FreeCAD, a free and opensource multiplatform 3D parametric modeler.项目地址: https://gitcode.com/GitHub_Trending/fr/FreeCAD
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考