cadquery
Sketch
Workplane
Assembly

Constraint()

Constraint() 是 cadquery 库中的一个类,用于在构建 Solid 对象时,限制对象的几何间关系,实现约束建模。

基本语法

from cqmore.constraints import Constraint

Constraint(entity1, entity2, distance=None, offset=None, direction=None, angle=None, symmetry=None)
  • entity1 和 entity2:约束的两个实体,可以是 Workplane 对象、Face 对象、Edge 对象或者 Vertex 对象。
  • distance:实体的距离上限或下限。
  • offset:实体之间的偏移值。
  • direction:实体之间的方向关系,可以是 "X"、"Y"、"Z" 或者 "+/-"。
  • angle:实体之间的角度关系,可以是 "horizontal"、"vertical" 或者 "at_angle".
  • symmetry:实体是否对称。

参数详解

  1. entity1 和 entity2:约束的两个实体,可以是 Workplane 对象、Face 对象、Edge 对象或者 Vertex 对象。

    Workplane 对象是基本的几何结构,可以看做二维平面上的一个基准面。其他的几何实体都是在 Workplane 上创建的。

    Face 对象是一个二维的封闭几何形状。一般情况下,Face 对象可以通过从 Workplane 上创建一个平面然后使用 extrude 或 revolve 函数将其变为一个立体形状。

    Edge 对象一般由两个 Vertex 对象组成。可以通过 Edge 对象创建一个完整的 Wire 几何形状。

    Vertex 对象是一个具有空间坐标的点,是构成 Edge 和 Face 对象的基础。

  2. distance:实体的距离上限或下限。

    如果 distance 等于 None,则没有距离限制。

  3. offset:实体之间的偏移值。

    如果 offset 等于 None,则没有偏移量限制。

  4. direction:实体之间的方向关系,可以是 "X"、"Y"、"Z" 或者 "+/-"。

    如果 direction 等于 None,则没有方向限制。

  5. angle:实体之间的角度关系,可以是 "horizontal"、"vertical" 或者 "at_angle"。

    如果 angle 等于 None,则没有角度限制。

  6. symmetry:实体是否对称。

    如果 symmetry 等于 None,则没有对称限制。

示例

根据两个矩形的重心连线,实现它们的对称约束:

import cadquery as cq
from cqmore import Constraints

r1 = cq.Workplane("XY").rect(50, 30).translate((20, 20, 0))
r2 = cq.Workplane("XY").rect(30, 20).translate((50, 50, 0))

c = Constraints(r1.rectCenter(), r2.rectCenter(), symmetry=True)

result = r1.union(r2).cut(cq.Workplane("XY").rect(80, 60))

将两个矩形的重心连接起来,在连接线的垂直方向上形成两个等高点,实现它们的垂直距离约束:

import math
import cadquery as cq
from cqmore import Constraints

r1 = cq.Workplane("XY").rect(50, 30).translate((20, 20, 0))
r2 = cq.Workplane("XY").rect(30, 20).translate((50, 50, 0))

line = cq.Workplane("XY").lineTo(r1.rectCenter()).lineTo(r2.rectCenter()).close()
c = Constraints(line, None, distance=20)

result = r1.union(r2).cut(cq.Workplane("XY").rect(80, 60))

利用正方体边缘上两个面的共线,实现它们在横向与竖向上的对齐:

import cadquery as cq
from cqmore import Constraints

s = cq.Workplane("XY").box(10, 20, 30)
face1 = s.faces(">X and <Y and <Z")
face2 = s.faces(">Y and <Z")
c = Constraints(face1, face2, direction="X")

result = s.cut(cq.Workplane("XY").box(20, 30, 40))

参考链接