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)
  • entity1entity2:约束的两个实体,可以是 Workplane 对象、Face 对象、Edge 对象或者 Vertex 对象。
  • distance:实体的距离上限或下限。
  • offset:实体之间的偏移值。
  • direction:实体之间的方向关系,可以是 "X"、"Y"、"Z" 或者 "+/-"。
  • angle:实体之间的角度关系,可以是 "horizontal"、"vertical" 或者 "at_angle".
  • symmetry:实体是否对称。

参数详解

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

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

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

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

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

  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))

参考链接