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')
相关推荐
GIS数据转换器10 小时前
基于3D GIS的监控视频精准标定平台
人工智能·物联网·3d·音视频·无人机·知识图谱
小宋加油啊12 小时前
机械臂抓取物体 PVN3D算法调研学习
学习·算法·3d
文阿花16 小时前
Echarts实现自动旋转柱状3D扇形图
前端·3d·echarts
小短腿的代码世界18 小时前
QtitanRibbon 深度解析:工业级Ribbon界面框架的架构设计与自定义扩展
qt·3d·架构
苏州邦恩精密19 小时前
江苏三维扫描仪厂家如何选择合适的工业测量方案?
人工智能·科技·机器学习·3d·自动化·制造
文阿花20 小时前
Echarts实现自定旋转3D饼状图
javascript·3d·echarts·饼状图
code_pgf21 小时前
3D点云目标检测(PointPillars)部署pipeline
人工智能·目标检测·3d
爱凤的小光1 天前
Cog3DRangeImagePlaneEstimatorTool完全指南
3d·visionpro
文阿花1 天前
Echarts实现柱状3D扇形图
android·3d·echarts
Zldaisy3d1 天前
中南&南洋理工 l 3D打印含Al高熵合金高周疲劳机制与晶格摩擦工程研究
3d