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 | height = 60.0 |
按工具栏中的绿色渲染按钮以运行脚本,应该可以看到我们的基本对象:
没什么特别的,但这是一个好的开始!
4、添加孔洞
我们的轴承座需要在中心位置为轴承预留一个直径为22毫米的孔。
下面的修改将实现这一目标:
1 | height = 60.0 |
通过单击”渲染”按钮重建模型。模型应该看起来像这样:
代码相当紧凑,让我们逐行说明。
第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 | height = 60.0 |
单击”渲染”按钮以重新执行模型后,你应该会看到类似的东西:
这里包含很多内容, 所以让我们分解说明一下。
第 5 行创建一个新的填充参数,该参数决定沉头孔离板的边缘有多远。
第 10 行选中块的最上边的面,并在其上创建一个工作平面,我们将用它来定义角落孔的中心。
关于这一行代码,有几件事需要注意:
cadquery.Workplane.rect()
功能绘制一个矩形。forConstruction=True
告诉 CadQuery, 这个矩形不是实体的一部分,我们只是用它来帮助定义其他几何形状。- 除非你另有说明,否则将在当前工作平面中心(在此例中为块的顶面中心)上绘制一个矩形。 因此,这个矩形将位于该平面的中心。
第11行绘制的矩形比块的总长度和宽度小 12 毫米,我们将用它来定位角孔。我们将使用这个 矩形的顶点(角)来定位孔。矩形的中心位于工作平面的中心,在这种情况下,工作平面与轴承孔的中心重合。
第 12 行选中矩形的顶点,我们将其用于定位孔的中心。cadquery.Workplane.vertices()
功能选择矩形的角。
第 13 行使用cboreHole函数来绘制孔。cadquery.Workplane.cboreHole()
是一个创建沉头孔的方便的
CadQuery函数。与大多数其他 CadQuery 函数一样,它根据栈上的值运行。在这种情况下,由于我们在
调用函数之前选择了四个顶点,该功能在这些点中的每一个上都运行- 这会导致每个矩形角出现一个沉头孔。
6、倒圆角
差不多完成了。让我们给构建块稍微倒一下圆角。这很容易,我们只需要选择边缘,然后执行倒角处理:
我们可以使用参数定义中的预设字典:
1 | height = 60.0 |
第 13 行使用cadquery.Workplane.fillet()
方法在边缘生成圆角。
为了捕捉正确的边缘,cadquery.Workplane.edges()
选中与Z轴平行的所有边缘(”|Z”),
成品看起来像这样:
7、导出模型
如果你想要制作实体对象,则需要将结果导出到 STL 或 DXF。此外,也可以将其导出为STEP 格式以便在另一个 CAD 工具进行后续处理。
这可以使用 cadquery.exporters.export()
函数轻松完成:
1 | height = 60.0 |
好了!
你刚刚制作了一个轴承座的参数化模型,还不到20行代码!