import cadquery as cq
b1 = cq.Workplane().box(1,1,1)
b2 = cq.Workplane().sphere(0.15)
assy = (
cq.Assembly()
.add(b1,name='b1')
.add(b2, loc=cq.Location(cq.Vector(0,0,4)), name='b2', color=cq.Color('red'))
)
# fix the position of b1
assy.constrain('b1','Fixed')
# b2 on one of the edges of b1
assy.constrain('b2','b1@edges@>>Z and >>Y','PointOnLine')
# b2 on another of the edges of b1
assy.constrain('b2','b1@edges@>>Z and >>X','PointOnLine')
# effectively b2 will be constrained to be on the intersection of the two edges
assy.solve()
show_object(assy)
15、固定旋转约束
固定旋转约束将给定对象的旋转固定为等于通过约束参数指定的值。 对象首先绕原点旋转 Z 角,然后是 Y,最后是 X。
该约束锁定对象的所有旋转自由度。 成本函数是:
其中:
- R 向量应用于对象的旋转角度
- param是约束参数 - 指定目标旋转的元组。
import cadquery as cq
b1 = cq.Workplane().box(1,1,1)
b2 = cq.Workplane().rect(0.1, 0.1).extrude(1,taper=-15)
assy = (
cq.Assembly()
.add(b1,name='b1')
.add(b2, loc=cq.Location(cq.Vector(0,0,4)), name='b2', color=cq.Color('red'))
)
# fix the position of b1
assy.constrain('b1','Fixed')
# fix b2 bottom face position (but not rotation)
assy.constrain('b2@faces@<Z','FixedPoint',(0,0,0.5))
# fix b2 rotational degrees of freedom too
assy.constrain('b2','FixedRotation',(45,0,45))
assy.solve()
show_object(assy)
16、固定轴约束
固定轴约束将给定参数的法线或切线的方向固定为等于通过约束参数指定的矢量的方向。 此约束锁定参数的两个旋转自由度。 成本函数是:
其中:
- a 表示对象的法向量或切向量,
- param是约束的参数 - 指定目标方向的元组。