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')
相关推荐
我才是银古8 小时前
当 360° 全景遇上真实地图:Vue 3 实现全景-地图双向联动的工程实践
3d·vue3·360影像
做cv的小昊1 天前
结合代码读3DGS&世界模型论文(3)——3DGS & 世界模型新工作GaussianDream论文及代码解读
3d
lilian2332 天前
HarmonyOS 7 新特性(十三)|3DGS 模型加载、交互与性能回退
3d·交互·harmonyos
DolitD2 天前
云流技术深度剖析:单服务器下如何实现3D应用的多实例并发?
java·服务器·前端·3d·云原生·云计算
Liudef062 天前
腾讯混元Hunyuan3D-Part:重新定义3D部件生成的革命性架构
人工智能·3d·架构·腾讯混元hunyuan3d
2601_967659893 天前
大学实训室网络仿真环境搭建:Ranplan 3D射线跟踪双版本技术解析
网络·3d
七77.3 天前
SceneAssistant: A Visual Feedback Agent for Open-Vocabulary 3D Scene Generation
3d·agent·世界模型
rockingdingo3 天前
Codex Claude 智能体做3D/潮玩/IP设计——装上Craftsman Agent工匠智能体Skills 游泳男孩IP案例分享
网络协议·tcp/ip·3d
3D可视化大侠4 天前
数字孪生时空数据可视化:CIMPro 孪大师中的轨迹与粒子实现
3d·信息可视化
LONGZETECH4 天前
新能源汽车动力电池实训教学痛点与虚拟仿真技术解决方案
c语言·3d·unity·架构·汽车·汽车教学软件