想要快速了解 CadQuery 的功能吗?本快速入门将使用一个简单的示例演示 CadQuery 的基础知识
先决条件安装 CadQuery 和 CQ-editor
如果尚未安装,请按照 安装 CadQuery 的步骤安装 CadQuery 和 CQ-editor。
安装完成后,运行CQ-editor:
找到左侧的 CadQuery 代码编辑器。您将看到我们从一个简单块的脚本开始。
Note
桌面没有创建启动图标的话,可以在安装目录中查找启动文件 安装目录\cq-editor\Scripts\CQ-editor.exe
,双击运行即可。
我们将实现什么
在本快速入门中,我们将创建一个完全参数化的轴承垫块。我们完成的对象将如下所示:
我们希望我们的块有以下功能:
- 它的大小应能容纳一个 608轴承,位于轴承座的中心。
- 它的四角应有用于 M2 套筒头螺丝的埋头孔。
- 它的长度和宽度应该由用户配置为任何合理的大小。
人类会将其描述为:
"一个 80 毫米 x 60 毫米 x 10 毫米的矩形块,四角有用于安装 M2 套筒头螺丝的埋头孔,在中间有一个直径为 22 毫米的圆形凹槽,用于安装轴承。"
人类的描述很优雅吧?希望我们完成的脚本不会比这个以人为本的描述复杂太多。
让我们看看我们是怎么做的。
从一个简单的板材开始
cadquery 引用说明
CQ-editor 中默认使用 import cadquery as cq
引入 cadquery ,因此您可以直接使用 cq
调用对应的方法
scss
# import cadquery as cq
result = cq.Workplane("XY").box(1, 2, 3).faces(">Z").circle(0.25).extrude(1,combine = True)
show_object(result)
复制
也可以使用 from cadquery import *
来引入,使用方法时,直接调用对应方法名即可
scss
from cadquery import *
# from cadquery import Workplane, Sketch, Vector, Location
result = Workplane("XY").box(1, 2, 3).faces(">Z").circle(0.25).extrude(1,combine = True)
show_object(result)
复制
show_object(result)
用来渲染显示出实体
让我们从一个简单的模型开始,它只制作一个矩形块,但带有尺寸占位符。将其粘贴到代码编辑器中:
ini
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)
按工具栏中的绿色"渲染"按钮来运行脚本。您应该会看到我们的基础对象。
没什么特别的,这只是一个开始!
添加孔洞
我们的轴承垫块需要在中心有一个直径为 22 毫米的孔来固定轴承。
这样改装就可以了:
ini
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 行 添加了一个新参数--直径,表示孔的直径
第 10-12 行 我们添加了这个洞。 cadquery.Workplane.faces()
选择 Z 方向最顶端的面,然后 cadquery.Workplane.workplane()
在这个面上开始一个新的工作平面。该工作平面的中心位于形状的质心,在本例中也就是平板的中心。最后,cadquery.Workplane.hole()
在零件上钻一个直径 22 毫米的孔。
Note
现在不用担心 CadQuery 的语法,你可以在稍后的 API 参考中学习到所有相关知识。
更多孔洞
好吧,这个孔还不算太难,但四角的埋头孔呢?
M2 内六角螺钉的尺寸如下:
- 头部直径:3.8 毫米
- 头部高度 :2.0 毫米
- 容差孔直径:2.4 毫米
- 埋头孔直径:4.4 毫米
这些孔的中心应距离块边缘 6 毫米。而且,我们希望即使用户调整了块的大小,块也能正常工作。
别告诉我我们要重复上面的步骤 8 次才能打出埋头孔?好消息是,我们只需几行代码就能完成工作。下面是我们需要的代码:
ini
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 行 创建了一个新的填充参数,该参数决定了孔与板边缘的距离。
第 11-12 行选择图块最顶端的面,并在该面的顶端创建一个工作平面,我们将用它来定义四角上孔的中心。
关于这一行,有几点需要注意:
- 该
cadquery.Workplane.rect()
函数绘制一个矩形。 forConstruction=True 告诉 CadQuery 该矩形不会形成实体的一部分,但我们只是用它来帮助定义他几何图形。 - 除非您另外指定,否则绘制的矩形将以当前工作平面中心为圆心,在本例中为块顶面的中心,在本例中就是以块顶面的中心为圆心。因此,该矩形将以工作面为中心。
第 16 行绘制一个比块的总长和宽小 12mm 的矩形,我们将用它来定位角孔的位置。我们将使用该矩形的顶点(角)来定位孔。矩形的中心位于工作平面的中心,在本例中与轴承孔的中心重合。
第 17 行 选择矩形的顶点,我们将使用这些顶点作为孔的中心。该cadquery.Workplane.vertices()
函数选择矩形的角。
第 18 行 使用 cboreHole 函数来绘制孔。该cadquery.Workplane.cboreHole()
函数是一个方便的 CadQuery 函数,可以绘制埋头孔。与大多数 CadQuery 函数一样,该函数对堆栈中的值进行操作。在本例中,由于我们在调用函数之前选择了四个顶点,因此该函数对四个点中的每一个点进行操作,从而在矩形的每个角上都开了一个孔。
切片
快完成了。让我们把块的角弄圆一点。这很简单,我们只需要选择边缘然后对它们进行圆角处理:
我们可以使用参数定义中的预设字典来做到这一点:
less
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)
第 20 行 使用该方法对边进行圆角处理cadquery.Workplane.fillet()
。
要抓取正确的边缘, cadquery.Workplane.edges()
选择平行于 Z 轴 ("|Z")
的所有边缘,
成品如下所示:
导出
如果要制作实物,则需要将结果导出为 STL 或 DXF。此外,还可以导出为 STEP 格式,以便在其他 CAD 工具中进行后处理。
这可以使用 cadquery.exporters.export()
函数轻松完成:
less
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")
完毕!
您刚刚创建了一个参数化模型,只需 <30 行代码就能生成几乎所有轴承垫块。