b3dkit 生成连接器

python 复制代码
from build123d import *
from b3dkit import dovetail
from b3dkit import Point

def split_with_b3dkit_point():

    # 创建零件
    part = Part() + Box(100, 50, 30)

    # 使用 b3dkit 的 Point 类
    start_point = Point(0, -25)
    end_point = Point(0, 25)

    try:
        # 所以需要额外指定 Z 范围或者使用不同的调用方式
        part1 = dovetail.dovetail_subpart(part=part, start=start_point, end=end_point, section=dovetail.DovetailPart.TAIL, style=dovetail.DovetailStyle.SNUGTAIL, slot_count=2, depth=3, tolerance=0.2)

        part2 = part - part1
        export_stl(part1, "part1.stl")
        export_stl(part2, "part2.stl")

        return part1, part2

    except Exception as e:
        print(f"Point 方式失败: {e}")
        return None

if __name__ == "__main__":

    # 显示可用函数,帮助调试
    print("\n可用的 dovetail 模块函数:")
    available_funcs = [f for f in dir(dovetail) if not f.startswith('_')]
    for func in available_funcs[:10]:  # 只显示前10个
        print(f"  - {func}")

    print("\n开始拆件...\n")

    result = split_with_b3dkit_point()

    print("\n完成!")

生成卡扣:

python 复制代码
from build123d import *
from b3dkit import dovetail, Point

# 1. 创建或导入你的模型
part = Part() + Box(100, 50, 30)

# 2. 使用 dovetail 做基础切割(这里只是切开,不加榫卯)
#    你可以调整 style 或参数来实现简单切割
start_point = Point(-50, -25)
end_point = Point(50, 25)

# 使用 dovetail 只是为了切开,这里可以不使用 SNUGTAIL,或者后续再调整
part1 = dovetail.dovetail_subpart(
    part=part,
    start=start_point,
    end=end_point,
    section=dovetail.DovetailPart.TAIL,
    style=dovetail.DovetailStyle.TRADITIONAL, # 用传统方式先切开
    slot_count=1,
    depth=5,
    tolerance=0.2
)

part2 = part - part1
# 3. 手动为两个零件添加卡扣特征
# 获取切割面(这里需要根据你的零件实际情况调整面的选取逻辑)
# 假设 part1 和 part2 的切割面是面索引为 0 的面
face1 = part1.faces()[0]
face2 = part2.faces()[0]

# 在面中心添加一个圆柱形卡扣(Pin)
pin = Cylinder(radius=2, height=5, align=(Align.CENTER, Align.CENTER, Align.MIN))

pin = Cylinder(2, 5)

# ✅ 正确写法:直接调用 locate 方法

pin_part = pin.locate(Location(face1.center()))
part1_with_pin = part1 + pin_part

# 在另一个零件上添加对应的孔(Socket)
hole = Cylinder(radius=2.2, height=5, align=(Align.CENTER, Align.CENTER, Align.MAX))
hole_part = hole.locate(Location(face2.center()))
part2_with_hole = part2 - hole_part

# 导出最终带卡扣的零件
export_stl(part1_with_pin, 'part1_with_click.stl')
export_stl(part2_with_hole, 'part2_with_click.stl')
相关推荐
释厄62324 分钟前
三角基底律——矩阵3x6 是所有三角形的基底·3D中高就是边
线性代数·3d·矩阵
Solange__2 小时前
图片转3D导出GLB、FBX还是OBJ?按5类任务比较材质、动画与可编辑性
人工智能·3d·ai·自然语言处理·编辑器·blender·材质
Jmyd01233 小时前
博物馆AR导览数字孪生架构设计:从空间数据到AR应用全链路
3d·系统安全·ar·数字孪生·博物馆·三维数字化
chaoyuanl4 小时前
超元力玻璃剧场:裸眼3D、8K高清与悬空栈桥的成熟文旅解决方案
大数据·人工智能·3d·xr·vr
苏州福兰克5 小时前
运行裸眼3D显示器对电脑显卡配置有什么要求?
3d·计算机外设·电脑
Martina_032119 小时前
AI生成的3D模型打印后沿层纹开裂?用6步检查方向、壁厚与填充
图像处理·人工智能·数学建模·3d·自然语言处理·游戏策划·1024程序员节
Solange__1 天前
在线3D预览器、Blender和游戏引擎怎么选?按5类任务比较格式、隐私与编辑性
人工智能·游戏·3d·游戏引擎·blender·1024程序员节·关卡设计
暴走约伯2 天前
【VFX工具链源码拆解 02】告别机械劳动(上):一键统改百个子粒子颜色与批量重命名
3d·unity·c#·材质
Solange__2 天前
AI世界模型、3D场景生成和游戏引擎怎么选?按5类任务比较交互、物理与导出
开发语言·人工智能·游戏·平面·3d·自然语言处理·游戏引擎
Solange__2 天前
物流园区怎么用AI生成3D调度预演?从道路底图、车辆转弯到网页评审
图像处理·人工智能·游戏·3d·ai·自然语言处理·关卡设计