尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
FreeCAD 二次开发实战:用 20 行 Python 搭一条参数化建模流水线
FreeCAD 二次开发实战用 20 行 Python 搭一条参数化建模流水线【免费下载链接】FreeCADOfficial source code of FreeCAD, a free and opensource multiplatform 3D parametric modeler.项目地址: https://gitcode.com/GitHub_Trending/fr/FreeCAD做机械结构的人应该都干过这种事同一块安装板按 6 孔、8 孔、10 孔各建一版每版改完尺寸还要在模型里手工挪孔位建到第三版就把孔径写错了推倒重来。这种参数变了、模型还得人肉跟着变的活恰恰最适合交给脚本。这篇带你用 FreeCAD 自带的 Part 模块 和属性系统写一个能批量生成参数化安装板的小工具全程不超过 20 行 Python。读完你能自己写一个挂在模型树里的参数化零件改一个数字整族零件自动重算。环境怎么备三分钟的事装一个 FreeCAD 官方发行版就够了Python 绑定随包附带不用额外配置依赖。想读源码的话拉一份下来git clone https://gitcode.com/GitHub_Trending/fr/freecad写代码时用 FreeCAD 内置的 Python 控制台View → Panels → Python consoleimport FreeCAD, Part之后就能直接交互。下面所有示例都在这条控制台上跑。先搞懂 Part::FeaturePython 的代理套路FreeCAD 模型树里的每个节点都是文档对象而Part::FeaturePython是其中最特别的一种它是个空壳允许你挂一个 Python 对象进去由这个对象决定形状长什么样——就像宜家柜体里预留的卡槽塞什么面板进去柜子就变成什么样子。被挂进去的 Python 对象叫proxy。proxy 的职责有三件在__init__里用addProperty声明参数实现execute(self, obj)生成几何把结果赋给obj.Shape。文档重算时 FreeCAD 会回调execute于是参数变了、模型自动跟着变就是这么发生的。仓库里的渐开线齿轮 InvoluteGearFeature.py 就是这个套路的完整示范它的execute只做了两件事按属性值算出齿形轮廓再赋给obj.Shapedef execute(self, obj): w fcgear.FCWireBuilder() generator_func ( involute.CreateExternalGear if obj.ExternalGear else involute.CreateInternalGear ) generator_func(w, obj.Modules.Value, obj.NumberOfTeeth, obj.PressureAngle.Value, ...) gearw Part.Wire([o.toShape() for o in w.wire]) obj.Shape gearw属性声明则是在__init__里一行行addProperty类型写App::PropertyLength默认值给2.5 mm这样的字符串。看懂这两个位置你就看懂了 PartDesign 里一半的 Python 功能对象它们的 C 侧底座在 PartDesign 模块。上面这张图是 PartDesign 工作台的界面左侧特征树里每个节点对应一次建模操作右下属性面板改数字、模型树即刻更新——你要做的就是用 Python 复刻这套数字驱动几何的体验。动手做一块参数化安装板按三步走每步都能在控制台里立刻看到结果。第一步建空壳。输入一个对象名动作import FreeCAD, Part doc FreeCAD.newDocument(MountPlate) obj doc.addObject(Part::FeaturePython, MountPlate)预期模型树里多出一个MountPlate3D 视区还是空的——形状还没生成这很正常。第二步声明参数。输入参数名、类型、默认值动作obj.addProperty(App::PropertyLength, BaseLength, Dimensions) obj.addProperty(App::PropertyLength, BaseWidth, Dimensions) obj.addProperty(App::PropertyLength, Height, Dimensions) obj.addProperty(App::PropertyInteger, HoleCount, Features) obj.BaseLength 150 mm obj.BaseWidth 100 mm obj.Height 30 mm obj.HoleCount 6预期属性面板里能看到四个参数单位换算、合法性检查都交给 FreeCAD你不用自己写。第三步写 proxy 并触发重算。输入一个生成几何的类动作class MountPlate: def __init__(self, obj): obj.Proxy self def execute(self, obj): box Part.makeBox(obj.BaseLength.Value, obj.BaseWidth.Value, obj.Height.Value) y obj.BaseWidth.Value / 2.0 for i in range(1, obj.HoleCount 1): x obj.BaseLength.Value * i / (obj.HoleCount 1) box box.cut(Part.makeCylinder(5, obj.Height.Value, FreeCAD.Vector(x, y, 0))) obj.Shape box MountPlate(obj) doc.recompute()预期一块 150×100×30、中间一排 6 个通孔的安装板出现在视区里。之后把参数包进函数改参数就是调函数obj.HoleCount 10 obj.BaseLength 200 mm obj.Proxy.execute(obj) # 脚本里改完参数要手动推一把预期孔位间距自动重排板长变成 200mm。这些板生成后可以直接丢进装配模块里做布局效果类似仓库自带示例data/examples/AssemblyExample.FCStd的样子。三个新手最容易踩的坑坑一单位对象直接当数字传。obj.BaseLength是个 QuantityPart.makeBox只吃 float。makeBox(obj.BaseLength, ...)会抛出莫名其妙的类型错误加上.Value就没事了——上文的代码里我处处带着它不是啰嗦。坑二改完参数模型纹丝不动。和 C 特征不同Part::FeaturePython不会在属性变化时自动重算。交互编辑面板里想实时预览就在赋值后手动调obj.Proxy.execute(obj)齿轮的任务面板就是这么做的而doc.recompute()是另一种更正式的触发方式两者都认。坑三改过属性结构老文件打不开。给对象改属性名、换分组旧文档里存的对象会缺属性。FreeCAD 在加载时会自动回调 proxy 的onDocumentRestored你在里面用hasattr补齐缺失属性即可仓库里齿轮的实现 InvoluteGearFeature.py 就带了这种迁移钩子def onDocumentRestored(self, obj): if not hasattr(obj, HoleCount): obj.addProperty(App::PropertyInteger, HoleCount, Features)再补一句脚本驱动的快速建模用 Part 模块最顺手要给用户看特征树这种体验再上 PartDesign 的 Body两者不冲突。手动建 10 版和跑一条脚本的差距把同一个需求做两种做法对比一下就很直观手动10 个规格的安装板每版进草图改尺寸、挪孔位、重画按每版 3 分钟算也要半小时中途写错一个数就得推倒重来脚本create_mount_plate(150,100,30,6)这样的调用循环一遍整族零件秒级生成尺寸零手输def create_mount_plate(spec): l, w, h, n (float(v) for v in spec.split(,)) o doc.addObject(Part::FeaturePython, fPlate_{int(n)}hole) o.BaseLength f{l} mm o.BaseWidth f{w} mm o.Height f{h} mm o.HoleCount int(n) MountPlate(o) return o for spec in [150,100,30,6, 150,100,30,8, 200,120,40,10]: create_mount_plate(spec)省下来的不只是时间参数和几何永远同源客户改需求时你只改一个字符串数组还可以顺手批量导出 STEP 给制造端。往哪儿延伸用属性表达式绑定把跨对象参数串起来一个总参数驱动整个装配生成的零件直接喂给 FEM 模块顺手跑一次壁厚和应力校验打通 CAM 模块从参数一路走到刀路选一个你最近反复改过三遍以上的零件把它最容易变的那 3 个参数变成addProperty再跑一次批量生成——这条流水线就算真正长在你手上了。【免费下载链接】FreeCADOfficial source code of FreeCAD, a free and opensource multiplatform 3D parametric modeler.项目地址: https://gitcode.com/GitHub_Trending/fr/FreeCAD创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED

相关推荐

32位十六进制字符串识别:MD5与UUID的实战排查指南

32位十六进制字符串识别:MD5与UUID的实战排查指南

在开发排查、日志分析、接口联调过程中,我们经常能看到类似24e6a1189c09dc95b1185a2f2f2f756b这样的字符串。它既不像普通业务编号,也不是直接可读的状态值,很多同学第一次遇到时都会有点懵:这到底是个什么?是加密串吗…

📅 2026/10/9 22:41:36
禧玛诺32T vs 国产34T:BCD96非对称单盘实测对比

禧玛诺32T vs 国产34T:BCD96非对称单盘实测对比

把禧玛诺原装32T非对称BCD96单盘和国产34T放在一起做称重对比,最值得先看的结果不是谁轻谁重,而是这个重量差异到底从哪里来、装上去之后骑行感受会不会变化。很多车友看到国产盘价格便宜,默认只要重量接近就能平替原装,真正装车才…

📅 2026/10/20 6:38:32
电竞赛事录播全流程:从OBS录制到FFmpeg转码实战指南

电竞赛事录播全流程:从OBS录制到FFmpeg转码实战指南

看到『CSBOY-Mo录播丨G2-M80丨FAZE-Legacy EWC CS2项目第二天 2026年08月13日』这类标题时,大多数玩家第一反应是讨论当晚比赛里的残局、枪法和比分。但从一个经常处理视频内容的开发者视角看,这个标题背后其实是一条完整的技术链路:直播画面…

📅 2026/11/5 22:13:16
MORE NEWS

更多资讯

📰

湖北电工证培训视频全流程办理指南良心建议

湖北电工证培训视频全流程办理指南良心建议 之前考的证在外省能不能转过来,这个问题我见过太多人问了,尤其是像你这样从外地过来的,可能手上已经有了电工证,但又想在湖北这边落地,那到底能不能用,怎么转?今天就给你说个 良心建议…

📰

嘉兴电工证网上查询怎么查?郑州报考避坑指南全在这了

嘉兴电工证网上查询怎么查?郑州报考避坑指南全在这了 实操考试心里没底怕挂科,这是很多准备考电工证的朋友的真实写照。特别是刚接触电工行业的新手,对考试流程、内容、通过率都不太清楚,担心一不小心就挂掉,白白浪费时间和金钱。今天就来聊聊…

📰

郑州电工证资格证和操作证怎么考?考前押题别乱刷

郑州电工证资格证和操作证怎么考?考前押题别乱刷 你是不是也遇到过这种情况,听说电工证要考资格证和操作证,心里一万个问号, 不知道去哪报名怕被中介坑…

📰

广东省电工证换证多久拿证?工地太忙也能搞定

广东省电工证换证多久拿证?工地太忙也能搞定 工地太忙根本没时间复习考试,你是真的没时间,还是不知道怎么高效应对?广东省电工证换证流程其实并不复杂,只要掌握关键步骤, 多久拿证…

📰

电工证资格证和操作郑州报考避坑指南:三门峡建筑工人的实战经验

电工证资格证和操作郑州报考避坑指南:三门峡建筑工人的实战经验 你现在手里拿着一份电工证资格证和操作,找工作是不是已经快憋不住了?别急,我就是从三门峡干建筑出身,现在在郑州跑业务,今天这番话,全是咱们一线工人的血泪经验。…

📰

贺州电工证去哪里申,真实经历告诉你怎么搞定

贺州电工证去哪里申,真实经历告诉你怎么搞定 工地太忙根本没时间复习考试,这是我去年在贺州干工程时的真实经历,每天从早上六点干到晚上十点,连吃饭都得抢时间。当时想考个低压电工证,可是一看资料,头都大了。今天我就来聊聊,贺州电工证去哪里申这个问…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬