RPA-Python与pytest-google-app-engine集成:完整指南实现自动化测试
改一个数,全图重算:用 CadQuery 轻松上手 Python 参数化建模
机械零件改个孔位就得重画一遍,模型文件存了十几个版本,却没几个人说得清哪个才是最新的——如果你也在经历这种痛苦,CadQuery 这个基于 Python 的参数化建模框架,很可能是你的解药。
先正视一个日常:图纸改了七版,没人说得清哪版是最新的
"孔位往左挪两毫米。"
"板厚再加一毫米。"
"四个螺丝孔改成腰型槽。"
在传统 CAD 里,这每一句话都意味着一次"重画"。你拖鼠标、选草图、改约束,然后祈祷刚才的改动没有破坏别的关联特征。更要命的是,这样的模型基本没法放进 Git——图纸的版本管理,靠的是文件名后缀 _final、_final2、_final_real。
而 CadQuery 换了一条路:模型不是"画"出来的,是"算"出来的。 你的设计图纸是一段可运行的 Python 脚本,参数变了,重新运行一次,整张图就自动更新。版本管理回归它本来的样子——提交代码,而不是复制文件。
上手第一课:四行代码,做出一块带孔的板
安装只要一条命令:
pip install cadquery
然后打开编辑器,敲下这几行:
import cadquery as cq
plate = (
cq.Workplane("XY") # 在 XY 平面开始
.box(40, 30, 5) # 拉出一块 40×30×5 的板
.faces(">Z").workplane() # 选中顶面
.hole(10) # 打一个直径 10 的孔
)
把它翻译成人话:放一块板,找到顶面,钻一个孔。剩下的布尔运算、曲面求交这些脏活,全部交给底层的 OCCT 几何内核。整套 API 是"链式"的——每一步都从上一个结果继续,读起来跟说话一样自然。
把尺寸变成旋钮:这才是"参数化建模"的精髓
上面那块板还是"死"的。现在把数字换成变量:
length, height, diam = 30.0, 40.0, 22.0 # 三个参数,一处定义
result = (
cq.Workplane("XY")
.box(length, height, 10)
.faces(">Z").workplane()
.hole(diam)
)
从这一刻起,模型就"活"了。改 diam,孔跟着变;改 length,整块板自动重算。官方文档里那个 608 轴承座的例子,整套参数不过五六行,却能派生出几十种规格。
这相当于给设计装了一个"旋钮面板"——客户说要大一号?改个变量,重新运行,3D 模型、导出文件全部同步更新。脚本本身就是参数表,这比任何 GUI 里的"参数对话框"都透明。
复杂零件等于多写几句"人话",而不是多拖几小时鼠标
有人会问:这些基础操作,别的工具也能做啊。关键差别在于,它把"在正确的位置做正确的特征"这件事简化到了可怕的程度:
- 打孔、阵列:
.hole()指定直径,.rectArray()给数量和间距 - 圆角、倒角:
.fillet()选中一条边,一句话搞定 - 抽壳:
.shell()给个厚度,实心体变薄壁件 - 放样、扫掠:跨截面过渡、沿路径拉伸,都是链式调用
更难得的是定位方式。你不需要背一堆绝对坐标,而是直接说"在顶面""在这四个顶点上""在刚才那条边的中点"——像跟同事描述零件一样描述给代码听。控制点、样条曲线这些自由曲面能力也一应俱全,工业设计里那种流线型外壳同样驾驭得住。
有人问:脚本建模不是还有 OpenSCAD 吗? 它确实更老牌,但 CadQuery 用的是标准 Python——意味着你能享受整个 Python 生态:用
numpy算参数、用pytest给模型写测试、把建模脚本塞进 CI 流水线。再加上 OCCT 几何内核带来的 NURBS、样条和 STEP 导入导出,很多别家做不到的事,在这里是默认能力。
从单件到装配体,再到交付 STEP,一步不缺
零件画完,故事才到一半。真实项目里,零件是要装起来、要交给下游的。
CadQuery 的装配支持嵌套:零件可以装成组件,组件再装成总成,层级关系清清楚楚。导出方面,除了常见的 STL,它还支持无损失的 STEP、DXF,以及 AMF、3MF 等格式,直接对接 CNC、3D 打印和下游 CAM 流程。
顺带一提,"无损导入 STEP 模型、再在它上面继续加参数化特征"这件事,真没几个脚本框架做得到——这意味着你可以从同事的图纸出发,接着用代码改造它。
玩够了基础?还有三条进阶路线值得走
- Jupyter 里交互:在 Notebook 里跑模型,用
display()直接看结果,边写边验,比反复启动 GUI 舒服得多。 - 批量生成与优化:模型既然是一段代码,循环遍历参数就能批量出图纸,接进自动化流水线、做参数寻优都是顺手的事。
- 无头部署:它本身就是不带界面的库,可以扔在服务器上当"建模后端",配合 Web 前端生成可交互的参数页面。
想直接跑官方示例的话,clone 一份源码最省事:
git clone https://gitcode.com/gh_mirrors/ca/cadquery
好了,说这么多,不如你亲手敲一遍。找个编辑器,写下 cq.Workplane("XY").box(40, 30, 5),看着那个黄色方块在窗口里浮现——"我写的是代码,出来的却是实体",这种感觉,试过一次就很难回去了。 🚀
更多推荐








所有评论(0)