Sketch 是 CadQuery 中一个重要的模块,允许用户创建一个平面草图(2D绘图),并在此基础上进行3D建模。Sketch 对象可以与固定的平面(XY,XZ,YZ)关联,也可以与任意平面关联。
用户可以通过在全局坐标系(默认为 XY 平面)上创建一个空的 Sketch 对象来创建自己的草图。可以使用属性 cq.Workplane()
来获取到一个空的 Sketch 对象。
import cadquery as cq
# 创建一个空的草图
s = cq.Workplane()
可以在 Workplane
对象上设置一些布尔属性,如距离单位、角度单位、网格大小等等。具体实现方法可以参考 Workplane()。
创建平面草图可以使用 Workplane.plane
方法。在这个过程中,用户必须指定草图所在平面的方向,如 XY、XZ 或 YZ。
# 将草图对象与XZ平面相关联
s = cq.Workplane("XZ")
# 在 XZ 平面上绘制一个圆形
c = s.circle(10)
同时,也可以使用布尔参数来设置草图平面的方向。以下代码与上面的代码等价。
# 将草图对象与XZ平面相关联
s = cq.Workplane(plane="XZ")
# 在 XZ 平面上绘制一个圆形
c = s.circle(10)
如果希望草图不与固定的平面关联,可以使用 Workplane.plane
方法,并传一个 cq.Plane
对象作为参数。
# 将草图对象与自定义平面相关联
s = cq.Workplane(cq.Plane((0,0,0),(1,1,1)))
# 在新平面上绘制一个圆形
c = s.circle(5)
在草图上画线使用 lineTo
方法,可以跟随画线的起始点以及要画的点作为坐标参数。草图上的零点是画图时的起始点。例如以下代码绘制了一个等腰三角形:
# 创建一个空的草图
s = cq.Workplane()
# 绘制一个等腰三角形
s = s.moveTo(0,0).lineTo(10,0).lineTo(5,10).close()
在草图上绘制点可以使用 point
方法。与绘制线不同,绘制点不能直接描绘出图形,只是标记了草图上的一个点。
# 在草图上绘制点
s = s.point(10,10)
在草图上绘制圆、椭圆和弧的方法很相似。圆使用 circle()
方法,椭圆使用 ellipse()
方法,而弧可以使用 threePointArc()
或 centerPointArc()
方法。以下代码展示了如何在草图上绘制一个圆、一个椭圆和一个弧:
# 在草图上绘制圆
s = s.circle(10)
# 在草图上绘制椭圆
s = s.ellipse(20, 10)
# 在草图上绘制弧
s = s.moveTo(30,0).threePointArc((20,10),(0,0))
在草图上绘制矩形可以直接使用 rect()
方法,而绘制多边形则使用 polygon()
方法。以下代码为草图绘制一个简单矩形和一个五边形:
# 在草图上绘制矩形
s = s.rect(10, 5)
# 在草图上绘制五边形
s = s.polygon(5,10)
草图的属性可以在 Workplane
对象上通过一些链式方法进行设置,用来定义草图的水平和垂直对齐、偏移等等。以下代码为草图设置属性:
# 在草图上设置水平对齐
s = s.hLine(3)
# 在草图上设置垂直对齐
s = s.vLine(3)
# 在草图上偏移
s = s.offset2D(5)
用户可以使用 translate()
, rotate()
, scale()
方法来进行草图的平移、旋转、缩放等操作。以下代码为草图进行平移、旋转、缩放:
# 草图平移
s = s.translate((2,2))
# 草图旋转
s = s.rotate((0,0,0),(0,0,1),45)
# 草图缩放
s = s.scale(0.5)
在完成草图的创建和绘制后,用户可以使用 Workplane.newObject()
方法切换到新的草图。在新的草图上进行操作时,不会影响原来的草图。
# 创建一个新的草图
t = s.newObject()
完成草图的创建和绘制后,用户可以将其转化为 3D 模型(Solid),然后进行建模。以下代码为草图转换成 3D 模型:
# 将草图转换为3D模型
model = s.extrude(2)
以上是 CadQuery 中关于 Sketch 的介绍。Sketch 可以作为建立 3D 模型的基础,是 CadQuery 中一个非常重要的模块。除了上面介绍的方法以外,Sketch 还有许多其他的方法可以快速绘制所需的几何形状,具体可参考 Sketch。