CadQuery二维Sketch教程

Posted 新缸中之脑

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CadQuery二维Sketch教程相关的知识,希望对你有一定的参考价值。

2D草图是3D CAD的基础。本文介绍如何在CadQuery中使用不同的方法构建二维草图(Sketch)。

1、基于面的 API

构建2D草图的主要方法是基于构建面并使用布尔运算将它们组合起来。

import cadquery as cq

result = (
   cq.Sketch()
   .trapezoid(4,3,90)
   .vertices()
   .circle(.5, mode='s')
   .reset()
   .vertices()
   .fillet(.25)
   .reset()
   .rarray(.6,1,5,1).slot(1.5,0.4, mode='s', angle=90)
)

请注意上面代码中,选择器已实现,但选择集必须明确重置。 Sketch 类没有实现历史,所有修改都是就地发生。

2、模式

来自面 API 的每个操作都接受一个模式参数来定义如何将创建的对象与现有对象组合。 模式可以是融合 (mode=‘a’)、剪切 (mode=‘s’)、相交 (mode=‘i’) 或仅存储用于构建 (mode=‘c’)。 在最后一种情况下,必须指定一个标签以便以后能够引用该对象。 默认情况下,面融合在一起。 请注意上例中减法和加法模式的使用。 另外两个如下所示。

result = (
   cq.Sketch()
   .rect(1, 2, mode='c', tag='base')
   .vertices(tag='base')
   .circle(.7)
   .reset()
   .edges('|Y', tag='base')
   .ellipse(1.2, 1, mode='i')
   .reset()
   .rect(2, 2, mode='i')
   .clean()
)

3、基于边的 API

如果需要,可以通过放置单独的边来构建草图。

import cadquery as cq

result = (
    cq.Sketch()
    .segment((0.,0),(0.,2.))
    .segment((2.,0))
    .close()
    .arc((.6,.6),0.4,0.,360.)
    .assemble(tag='face')
    .edges('%LINE',tag='face')
    .vertices()
    .chamfer(0.2)
)

构造完成后,必须使用 assemble() 将其转换为基于面的表示。 之后,可以应用基于面的操作。

4、凸包

对于某些特殊用例,凸包可以由直线段和圆构成。

result = (
    cq.Sketch()
    .arc((0,0),1.,0.,360.)
    .arc((1,1.5),0.5,0.,360.)
    .segment((0.,2),(-1,3.))
    .hull()
   )

5、基于约束的草图

最后,如果需要,可以使用几何约束来构建草图。 到目前为止,在这种用例中只能使用线段和弧线。

import cadquery as cq

result = (
    cq.Sketch()
    .segment((0,0), (0,3.),"s1")
    .arc((0.,3.), (1.5,1.5), (0.,0.),"a1")
    .constrain("s1","Fixed",None)
    .constrain("s1", "a1","Coincident",None)
    .constrain("a1", "s1","Coincident",None)
    .constrain("s1",'a1', "Angle", 45)
    .solve()
    .assemble()
)

以下约束已实现。 参数在 constrain() 中作为一个元组传入。 在此表中, 0…1 指的是介于 0 和 1 之间的浮点数,其中 0 将创建相对于元素开头的约束,1 表示结尾。

  • 固定点约束:指定的点被固定
  • 重合约束:指定的两个点重合
  • 夹角约束:两个实体的夹角固定
  • 长度约束:指定的实体具有固定的长度
  • 距离约束:两点之间的距离固定
  • 半径约束:指定的实体具有固定的半径
  • 方向约束:指定的实体平行于 (x,y)
  • 弧角度:指定的实体具有固定的圆周角度

6、工作平面集成

创建后,二维草图可用于在工作平面上构造各种特征。 支持的操作包括 extrude()、 twistExtrude()、 revolve()、 sweep()、 cutBlind()、 cutThruAll() 和 loft()。

二维草图可以创建为单独的实体并重复使用,但也可以在一个调用链中临时创建,如下所示。

请注意,2D草图放置在堆栈顶部的所有位置。就地构建草图可以按如下方式完成。

import cadquery as cq

result = (
    cq.Workplane()
    .box(5,5,1)
    .faces('>Z')
    .sketch()
    .regularPolygon(2,3,tag='outer')
    .regularPolygon(1.5,3,mode='s')
    .vertices(tag='outer')
    .fillet(.2)
    .finalize()
    .extrude(.5)
)

Sketch API 在 sketch() 调用和原始工作平面之后可用。

在构建草图之前选择多个元素时,将创建多个草图。

import cadquery as cq

result = (
    cq.Workplane()
    .box(5,5,1)
    .faces('>Z')
    .workplane()
    .rarray(2,2,2,2)
    .rect(1.5,1.5)
    .extrude(.5)
    .faces('>Z')
    .sketch()
    .circle(0.4)
    .wires()
    .distribute(6)
    .circle(0.1,mode='a')
    .clean()
    .finalize()
    .cutBlind(-0.5,taper=10)
)

有时需要重复使用现有草图并将它们按原样放置在工作平面上。

import cadquery as cq

s = (
     cq.Sketch()
     .trapezoid(3,1,110)
     .vertices()
     .fillet(0.2)
     )

result = (
    cq.Workplane()
    .box(5,5,5)
    .faces('>X')
    .workplane()
    .transformed((0,0,-90))
    .placeSketch(s)
    .cutThruAll()
    )

使用 loft() 时需要重用现有草图。

from cadquery import Workplane, Sketch, Vector, Location

s1 = (
     Sketch()
     .trapezoid(3,1,110)
     .vertices()
     .fillet(0.2)
     )

s2 = (
     Sketch()
     .rect(2,1)
     .vertices()
     .fillet(0.2)
     )

result = (
    Workplane()
    .placeSketch(s1, s2.moved(Location(Vector(0, 0, 3))))
    .loft()
    )

放样时仅考虑外线,而忽略内线。


原文链接:CadQuery 2D草图教程 — BimAnt

以上是关于CadQuery二维Sketch教程的主要内容,如果未能解决你的问题,请参考以下文章

005.草图功能

Nice sketch!汽车设计海量草图线稿

将Sketch设计草图添加到AxureRP8.1.0.3368+

Sketch | 盘点本届车展所有车型设计草图,你们要的都在这里

NX二次开发-UFUN选择草图对话框UF_UI_select_sketch

微软开源 Sketch2Code,草图 UI 转 HTML 代码