如何用CadQuery Python对螺栓头部顶角进行45°切削处理?
如何用CadQuery实现螺栓头部顶角45°切削处理
方法一:精准倒角法(最简洁)
利用CadQuery的倒角功能,通过计算准确的倒角尺寸,直接对螺栓头部顶部边缘进行45°倒角:
import cadquery as cq from math import sqrt head_diameter = 10.0 head_height = 5.0 shaft_diameter = 5.0 shaft_length = 20.0 # 计算六角头外圆半径与内切圆半径(对边距离的一半) outer_r = head_diameter / 2 inner_r = outer_r * sqrt(3)/2 # 45°倒角时,倒角深度(沿Z轴)等于径向偏移量(outer_r - inner_r) chamfer_size = outer_r - inner_r # 创建六角头部并倒角 bolt_head = ( cq.Workplane("XY") .polygon(6, head_diameter) # 基于外切圆直径创建六角形 .extrude(head_height) .edges(">Z") # 选中头部顶部的所有边缘 .chamfer(chamfer_size) # 应用计算好的45°倒角 ) # 创建螺杆并合并 bolt_shaft = ( cq.Workplane("XY") .circle(shaft_diameter/2) .extrude(-shaft_length) ) bolt = bolt_head.union(bolt_shaft) show_object(bolt)
原第一种方法的问题分析:
- 使用固定值
chamfer(1)而非计算出的45°对应尺寸,导致角度不符合要求 edges("Z")选择器不准确,应使用edges(">Z")指定头部顶部的边缘- 多余的
translate操作反而干扰了边缘选择的准确性
方法二:实体切削法(适合复杂角度需求)
通过创建圆台切削实体,切除螺栓头部顶角,实现45°斜面效果:
import cadquery as cq from math import sqrt HEAD_DIAMETER = 20.0 HEAD_HEIGHT = 10.0 SHAFT_DIAMETER = 8.0 SHAFT_LENGTH = 30.0 outer_r = HEAD_DIAMETER / 2 inner_r = outer_r * sqrt(3)/2 # 45°切削时,切削深度等于径向偏移量 cut_depth = outer_r - inner_r # 创建六角头部 hexagon = ( cq.Workplane("XY") .polygon(6, HEAD_DIAMETER) .extrude(HEAD_HEIGHT) ) # 创建切削用圆台:顶部为六角头内切圆尺寸,底部大于外圆,向下延伸切削深度 cutter = ( cq.Workplane("XY") .workplane(offset=HEAD_HEIGHT) # 定位在六角头顶部 .circle(inner_r) .workplane(offset=-cut_depth) # 向下移动切削深度 .circle(outer_r * 1.1) # 底部尺寸足够大,确保完全切除顶角 .loft(combine=True) ) # 执行切削并添加螺杆 result = hexagon.cut(cutter) shaft = ( cq.Workplane("XY") .circle(SHAFT_DIAMETER/2) .extrude(-SHAFT_LENGTH) ) result = result.union(shaft) show_object(result)
原第二种方法的问题分析:
- 切削方向错误:原代码中cutter向上延伸,无法正确切除顶角
- 二次切削操作多余且错误:第一次cut后,
>Z面已变为多个斜面,faces(">Z")会选中多个非平面,导致创建workplane时抛出ValueError: If multiple objects selected, they all must be planar faces.
内容的提问来源于stack exchange,提问作者Филипп Шувалов
相关产品推荐
相关产品推荐

