FreeCAD参数化建模实战用Python批量生成标准件【免费下载链接】FreeCADOfficial source code of FreeCAD, a free and opensource multiplatform 3D parametric modeler.项目地址: https://gitcode.com/GitHub_Trending/fr/FreeCAD当你需要为一个法兰系列出 12 个尺寸变体时FreeCAD 参数化建模可以把逐个改尺寸、导出 STEP这件机械活压成一行循环。下面以仓库自带的示例代码为参照给出可复用的完整做法。FreeCAD 能力全景建模、装配、仿真怎么分工FreeCAD 的参数化能力集中在三个工作台输入是草图、约束和属性输出是可直接进下游流程的实体模型、装配体和仿真结果。PartDesign 工作台输入一个带约束的草图通过凸台Pad、口袋Pocket、回转Revolution等特征叠加出实体每个特征保留参数改草图约束后全模型自动重算。Assembly 工作台输入是若干零件实体通过关节Joint声明铰接、滑块、圆柱副等关系输出是可拖动、可做运动检查的多体装配左树可见 Joints 与各零件层级。FEM 工作台输入是模型、材料与载荷输出是网格、边界条件和求解后的应力云图。对参数化零件来说改完参数可以顺手把静力学校验也跑了不用切软件。5 个步骤跑通最小参数化对象最小可运行的参数化对象分三步建对象、写重算逻辑、触发计算。下面以法兰为例完整代码可参考 src/Mod/TemplatePyMod/FeaturePython.py。1. 在文档中创建 Python 特征对象并给对象挂上自定义参数属性doc FreeCAD.newDocument(FlangeSeries) fl doc.addObject(Part::FeaturePython, Flange) # 三个可改参数属性名会成为对象的公开字段 fl.addProperty(App::PropertyInteger, Holes, Flange, 螺栓孔数) fl.addProperty(App::PropertyLength, BoltHoleDia, Flange, 螺栓孔直径) fl.addProperty(App::PropertyLength, OuterDiam, Flange, 法兰外径) fl.Holes, fl.BoltHoleDia, fl.OuterDiam 8, 10.5 mm, 80 mm2. 定义 Proxy 类其中execute()是必须实现的重算钩子——文档每次重算都会调用它相当于 Excel 公式单元格改一个源值下游自动重算class FlangeProxy: def __init__(self, obj): self.obj obj obj.Proxy self def execute(self, fp): r_out fp.OuterDiam.Value / 2 r_bolt r_out - fp.BoltHoleDia.Value * 1.8 pts [Base.Vector(r_out, 0, 0)] for i in range(fp.Holes): # 圆周均布螺栓孔 a 2 * math.pi * i / fp.Holes pts.append(Base.Vector(r_bolt * math.cos(a), r_bolt * math.sin(a), 0)) pts.append(pts[0]) face Part.Face(Part.makePolygon(pts)) fp.Shape face.extrude(Base.Vector(0, 0, fp.Height.Value))3. 把 Proxy 绑到对象上并重算。绑定后几何立即生成之后任何参数修改都会触发重算FlangeProxy(fl) doc.recompute() fl.Holes 12 # 改参数 doc.recompute() # 几何自动更新4. 批量生成 12 个变体把参数表记进电子表格并逐个导出 STEPsheet doc.addObject(Spreadsheet::Sheet, Params) out_dir /tmp/flanges for i in range(12): od 40 8 * i # 外径 40~132 mm步长 8 sheet.set(fA{i1}, str(od)) # 参数表留档 sheet.set(fB{i1}, str(i 1)) name fFlange_{od:g} f doc.addObject(Part::FeaturePython, name) FlangeProxy(f) f.OuterDiam, f.Holes, f.BoltHoleDia f{od} mm, 8, 10.5 mm doc.recompute() Part.export([f], f{out_dir}/{name}.step)5. 验证产物打开导出的 STEP确认孔位、外径与参数表一致。12 个变体从建模到出图全程无人工干预。一个完整工作流轴承座的参数、仿真与结果输出选仓库自带的 data/examples/FEMExample.FCStd 为参照走一遍参数准备 → 核心处理 → 结果输出的完整链路。参数准备把几何参数集中成一张表后续所有对象都引用这些源值P dict( BoreDiamFreeCAD.Quantity(30, mm), # 轴承内孔直径 WallFreeCAD.Quantity(5, mm), # 壁厚 WidthFreeCAD.Quantity(20, mm), # 座体宽度 )核心处理实体生成后交给 FEM 工作台加材料、约束、接触力再网格化求解。相关 API 可查 src/Mod/Fem/analysis doc.addObject(Fem::Analysis, Analysis) material doc.addObject(Fem::MaterialSolid, Material) material.YoungsModulus 210 GPa fixed doc.addObject(Fem::ConstraintFixed, Fixed) fixed.References [(doc.Body.Origin.OriginFeatures[0], Vertex1)] load doc.addObject(Fem::ConstraintContact, Load) load.Magnitude 10000 N mesh doc.addObject(Fem::FemMeshCcxTools, Mesh) doc.recompute() # 网格化 求解结果输出求解完成后场景里直接显示应力分布色标从蓝到红对应 3e-11 到 6e02 帕右侧图例可直接读取数值截图或导出结果即可进评审文档。效率进阶三处非显而易见的配置场景同一参数被 5 个零件引用手改容易漏做法把参数写进电子表格Spreadsheet单元格各对象的属性用表达式Expression绑定到该单元格效果改一个单元格所有引用它的零件、图纸同步更新零遗漏场景参数批量变更需要在流水线里自动验证做法用无头模式执行脚本FreeCADCmd -P check_flanges.py效果CI 上跑通即说明参数区间内几何全部可解算无需人工打开 GUI场景改一个参数后全模型重算太慢做法只重算依赖链上的对象obj.touch(); doc.recompute([obj])效果跳过无关特征大装配下的参数调整从整分钟级降到秒级接入现有工作流从源码到 CI 的四步获取源码git clone https://gitcode.com/GitHub_Trending/fr/freecad安装构建依赖与编译器CMake、Qt、Python、OCC 等用cmake配置并构建产物为FreeCAD与命令行版FreeCADCmd把自定义参数化脚本放入模块目录参考 src/Mod/TemplatePyMod/ 的组织方式Init.py注册模块、特征类与 Proxy 分离即可作为可复用的私有模块加载在 CI/CD 流水线中加入校验任务每次提交执行FreeCADCmd -P 脚本脚本内断言 12 个变体全部生成且可重算失败即拦截合并文档侧可直接复用 data/examples/ 内的样例文档作为验收基线。高频问题速查四个最常踩的坑现象树里对象带 Touched 标记视图里的几何是旧值原因只改了参数没触发重算或 Proxy 里漏写了execute()解法改完参数显式调用doc.recompute()并确认类中实现了execute(self, fp)且赋值给fp.Shape现象80 mm字符串赋值后计算结果和裸数字 80 不一致原因FreeCAD 的长度属性是数量Quantity类型80 被解释为 80 米解法比较、运算时统一用obj.OuterDiam.Value取米制数值带单位字符串只做显示用途现象保存重开后文档里对象显示Cannot find Proxy class原因Proxy 所在的 Python 模块没被加载C 侧找不到类定义解法把模块放到 FreeCAD 的模块目录并在Init.py中注册或脚本执行前import该模块再doc.recompute()现象批量循环里改了 12 个对象最后只有第一个变了原因循环中未触发重算多个对象挤在同一次重算里互相覆盖缓存解法循环体内每个对象改完立即doc.recompute()或循环结束后整体重算并逐个校验obj.Shape.BoundBox12 个法兰变体现在只差一个循环。下一步把上面的 Proxy 脚本存为.py文件用FreeCADCmd -P跑一次验证产物齐全。【免费下载链接】FreeCADOfficial source code of FreeCAD, a free and opensource multiplatform 3D parametric modeler.项目地址: https://gitcode.com/GitHub_Trending/fr/FreeCAD创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考