CadQuery是一个直观好用的参数化3D建模Python库,也是非常少见的面向软件工程师的3D建模工具。
和设计师常用的建模工具例如Revit等不同的是,你需要编写Python代码来创建模型,而不是在屏幕上
点点画画。因此,CadQuery非常适用于将参数化建模技术集成到你的应用程序中。
1、环境:Anaconda/Miniconda + CQ-editor首先请按照安装CadQuery,的说明,安装Anaconda/Miniconda和CQ-editor。
安装后,运行 CQ 编辑器:

在左侧可以看到 CadQuery 代码编辑器。让我们从一个简单的代码块开始。
2、教程学习目标我们将在这个快速教程中建造一个完全参数化的轴承座,成品看起来像这样:

我们希望这个构件具有以下功能:
- 有足够的尺寸以保证在中心位置安装608(”滑板”)轴承
- 在四周有M2螺丝沉头孔。
- 构建的长度和宽度可以由用户配置任何合理的尺寸。
用自然语言描述的话则是:
一个矩形块 80mm x 60mm x 10mm,角落有 M2螺丝沉头孔,中间有直径为 22mm 的圆孔用于轴承。
人类的描述很优雅,对吧?希望我们将要完成的脚本不会比这个以人为本的描述复杂太多。
让我们看看用CadQuery该怎么实现。
3、从一个简单面板开始让我们从一个简单的模型开始,它只制作一个矩形方块,但预留尺寸调整参数。将下面代码粘贴到
CQ编辑器中:
1 2 3 4 5 6 7 8 9
| height = 60.0 width = 80.0 thickness = 10.0
# make the base result = cq.Workplane("XY").box(height, width, thickness)
# Render the solid show_object(result)
|
按工具栏中的绿色渲染按钮以运行脚本,应该可以看到我们的基本对象:

没什么特别的,但这是一个好的开始!
4、添加孔洞我们的轴承座需要在中心位置为轴承预留一个直径为22毫米的孔。
下面的修改将实现这一目标:
1 2 3 4 5 6 7 8 9 10 11
| height = 60.0 width = 80.0 thickness = 10.0 diameter = 22.0
# make the base result = cq.Workplane("XY").box(height, width, thickness)\ .faces(">Z").workplane().hole(diameter)
# Render the solid show_object(result)
|
通过单击”渲染”按钮重建模型。模型应该看起来像这样:

代码相当紧凑,让我们逐行说明。
第4行增加了一个新的参数,diameter,用来表示孔的直径
第8行,我们实现了打孔。cadquery.Workplane.faces() 选中Z方向最上边的面,
然后cadquery.Workplane.workplane() 在此之上创建一个新的工作平面。此工作
平面的中心位于几何形状的质心,在本例中,质心就是板的中心。最后,
cadquery.Workplane.hole() 在部件上钻贯穿孔,直径22毫米。
注意:现在不用担心CadQuery语法,你可以稍后访问CadQuery API了解相关信息。
5、创建更多孔洞好吧,那个孔不是太难,但是四角的沉头孔怎么做?
M2 戴帽螺钉具有以下尺寸:
- 头部直径: 3.8 毫米
- 头部高度: 2.0 毫米
- 间隙孔: 2.4 毫米
- 沉头孔直径: 4.4 毫米
这些孔的中心应距离块边缘 6 毫米。并且我们希望,即使用户重新调整了块的大小也能正常工作。
不要告诉我,我们需要重复以上步骤8次,才能生成沉头孔?好消息!– 我们只需几行代码
就可以完成这一工作:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| height = 60.0 width = 80.0 thickness = 10.0 diameter = 22.0 padding = 12.0
# make the base result = cq.Workplane("XY").box(height, width, thickness)\ .faces(">Z").workplane().hole(diameter)\ .faces(">Z").workplane() \ .rect(height - padding,width - padding,forConstruction=True)\ .vertices()\ .cboreHole(2.4, 4.4, 2.1)
# Render the solid show_object(result)
|
单击”渲染”按钮以重新执行模型后,你应该会看到类似的东西:

这里包含很多内容, 所以让我们分解说明一下。
第 5 行创建一个新的填充参数,该参数决定沉头孔离板的边缘有多远。
第 10 行选中块的最上边的面,并在其上创建一个工作平面,我们将用它来定义角落孔的中心。
关于这一行代码,有几件事需要注意:
cadquery.Workplane.rect() 功能绘制一个矩形。forConstruction=True 告诉 CadQuery,
这个矩形不是实体的一部分,我们只是用它来帮助定义其他几何形状。
- 除非你另有说明,否则将在当前工作平面中心(在此例中为块的顶面中心)上绘制一个矩形。
因此,这个矩形将位于该平面的中心。
第11行绘制的矩形比块的总长度和宽度小 12 毫米,我们将用它来定位角孔。我们将使用这个
矩形的顶点(角)来定位孔。矩形的中心位于工作平面的中心,在这种情况下,工作平面与轴承孔的中心重合。
第 12 行选中矩形的顶点,我们将其用于定位孔的中心。cadquery.Workplane.vertices() 功能选择矩形的角。
第 13 行使用cboreHole函数来绘制孔。cadquery.Workplane.cboreHole() 是一个创建沉头孔的方便的
CadQuery函数。与大多数其他 CadQuery 函数一样,它根据栈上的值运行。在这种情况下,由于我们在
调用函数之前选择了四个顶点,该功能在这些点中的每一个上都运行- 这会导致每个矩形角出现一个沉头孔。
6、倒圆角差不多完成了。让我们给构建块稍微倒一下圆角。这很容易,我们只需要选择边缘,然后执行倒角处理:
我们可以使用参数定义中的预设字典:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| height = 60.0 width = 80.0 thickness = 10.0 diameter = 22.0 padding = 12.0
# make the base result = cq.Workplane("XY").box(height, width, thickness)\ .faces(">Z").workplane().hole(diameter)\ .faces(">Z").workplane() \ .rect(height - padding, width - padding, forConstruction=True)\ .vertices().cboreHole(2.4, 4.4, 2.1)\ .edges("|Z").fillet(2.0)
# Render the solid show_object(result)
|
第 13 行使用cadquery.Workplane.fillet() 方法在边缘生成圆角。
为了捕捉正确的边缘,cadquery.Workplane.edges() 选中与Z轴平行的所有边缘(”|Z”),
成品看起来像这样:

7、导出模型如果你想要制作实体对象,则需要将结果导出到 STL 或 DXF。此外,也可以将其导出为STEP
格式以便在另一个 CAD 工具进行后续处理。
这可以使用 cadquery.exporters.export() 函数轻松完成:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| height = 60.0 width = 80.0 thickness = 10.0 diameter = 22.0 padding = 12.0
# make the base result = cq.Workplane("XY").box(height, width, thickness)\ .faces(">Z").workplane().hole(diameter)\ .faces(">Z").workplane() \ .rect(height - padding, width - padding, forConstruction=True)\ .vertices().cboreHole(2.4, 4.4, 2.1)\ .edges("|Z").fillet(2.0)
# Render the solid show_object(result)
# Export cq.exporters.export(result,'result.stl') cq.exporters.export(result.section(),'result.dxf') cq.exporters.export(result,'result.step')
|
好了!
你刚刚制作了一个轴承座的参数化模型,还不到20行代码!
|