惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Recorded Future
Recorded Future
Stack Overflow Blog
Stack Overflow Blog
Cisco Talos Blog
Cisco Talos Blog
Jina AI
Jina AI
S
Schneier on Security
Engineering at Meta
Engineering at Meta
M
MIT News - Artificial intelligence
腾讯CDC
NISL@THU
NISL@THU
Hacker News: Ask HN
Hacker News: Ask HN
Google DeepMind News
Google DeepMind News
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
D
Darknet – Hacking Tools, Hacker News & Cyber Security
S
Secure Thoughts
Recent Announcements
Recent Announcements
博客园_首页
GbyAI
GbyAI
IT之家
IT之家
Security Archives - TechRepublic
Security Archives - TechRepublic
V2EX - 技术
V2EX - 技术
美团技术团队
PCI Perspectives
PCI Perspectives
Blog — PlanetScale
Blog — PlanetScale
W
WeLiveSecurity
Application and Cybersecurity Blog
Application and Cybersecurity Blog
P
Privacy International News Feed
Know Your Adversary
Know Your Adversary
人人都是产品经理
人人都是产品经理
C
Cisco Blogs
V
Visual Studio Blog
Martin Fowler
Martin Fowler
博客园 - 叶小钗
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
H
Help Net Security
Google DeepMind News
Google DeepMind News
Y
Y Combinator Blog
T
Troy Hunt's Blog
Hugging Face - Blog
Hugging Face - Blog
S
Securelist
宝玉的分享
宝玉的分享
N
News | PayPal Newsroom
云风的 BLOG
云风的 BLOG
Security Latest
Security Latest
Project Zero
Project Zero
I
InfoQ
G
GRAHAM CLULEY
博客园 - 司徒正美
C
Check Point Blog
O
OpenAI News
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org

博客园 - 我才是银古

第16章:常见问题、排错与最佳实践 第15章:扩展生态、MCAD 与外部集成 第14章:构建、测试、调试与贡献流程 第13章:OpenSCAD 源码架构与核心执行流程 第11章:预览、渲染、网格精度与性能优化 第09章:列表推导、递归与算法建模 第08章:参数化零件库与复用设计 第10章:导入导出、命令行与自动化 第06章:CSG 布尔建模方法 第07章:二维图形、拉伸、旋转与投影 第05章:基础几何、坐标系与变换 第04章:参数、变量、函数、模块与作用域 OpenSCAD 教程目录 第03章:OpenSCAD 语言基础 第02章:安装、环境配置与开发工作流 第01章:OpenSCAD 项目全景与学习路线 第02章:源码获取、编译与开发环境配置 第01章:OCCT项目全景与学习路线 第18章:二次开发实战与综合案例 第17章:与 Qt VTK Python pythonOCC 生态集成 第18章:综合实战案例 第17章:数据交换与协同 第16章:源码架构与二次开发 第15章:插件与自定义工作台开发 第14章:Python脚本宏与自动化 第13章:FEM仿真分析 第12章:CAM数控加工 第11章:SurfaceMesh与逆向工程 第10章:Draft二维绘图与BIM建筑 第09章:工程图TechDraw 第07章:参数化表达式与Spreadsheet 第08章:装配设计Assembly 第06章:Part工作台与几何内核 第05章:PartDesign实体特征建模 第04章:草图Sketcher约束建模 第02章:安装版本与工作环境配置 第03章:界面工作台与基础操作 第01章:项目全景与学习路线 第十二章:插件开发、研究功能与最佳实践 第十章:定时任务与自动化(Cron) 第七章:技能、记忆与自学习闭环 第八章:MCP 集成与上下文文件 第六章:工具系统与终端后端 第五章:模型供应商与配置体系 Hermes Agent 教程目录 第十一章:语音、视觉、浏览器与子代理协作 第四章:CLI/TUI 与会话管理 第十二章:学习路线、实战方案与最佳实践 第十一章:源码结构、开发调试与插件开发 第十章:自动化、远程访问、日志与排障 第九章:Control UI、节点、Canvas 与语音能力 第七章:工具、技能、插件与能力扩展 第八章:安全模型、访问控制与沙箱实践 第六章:Agent 工作区、会话与多智能体路由 第五章:多通道消息接入与聊天平台配置 第四章:配置体系、模型接入与认证管理 第三章:Gateway 架构、协议与运行机制 第二章:安装、环境准备与快速上手 第一章:OpenClaw 项目概览与核心定位 oh-my-openagent 教程目录 09-命令模型回退与配置参考 10-实战案例最佳实践与故障排除 05-工作模式-Ultrawork-Prometheus-Atlas 08-Hooks与MCP系统 06-Category与Skill系统 07-核心工具链 04-智能体全景详解 03-安装与环境配置 02-整体架构与多模型编排机制 01-项目简介与核心理念 01-项目概览与学习路线 02-安装部署与工具适配 03-Skill机制与using-superpowers 05-TDD系统化调试与完成前验证 04-需求澄清方案设计与计划编写 07-并行智能体子智能体与Git-Worktree 第六章:代码审查、反馈处理与分支收尾 08-中国特色Skills与本土团队落地 09-MCP构建工作流执行与自定义Skill 第23章:FreeCAD-Python-API Clipper2 C# 源码解读教程 第19章:PolyTree 多边形树结构 第20章:实际应用与最佳实践 第18章:Minkowski 和与差 第17章:RectClip 矩形裁剪优化 第16章:ClipperOffset 偏移类详解 第15章:填充规则详解 第14章:布尔运算执行流程 第13章:ClipperD 浮点裁剪类 第11章:OutRec 与 OutPt 输出结构 第9章:Active 活动边结构 第10章:Vertex 顶点与 LocalMinima 局部极小值 第12章:Clipper64 裁剪类详解 第7章:高精度运算与128位整数 第8章:ClipperBase 基类详解 第5章:枚举类型与常量定义 第6章:InternalClipper 内部工具类 第2章:核心数据结构 - Point64、PointD 第3章:路径与多边形表示 - Path64、PathD、Paths64、PathsD 第4章:矩形边界 - Rect64、RectD
第12章:实战案例:机械结构与 3D 打印零件
我才是银古 · 2026-05-06 · via 博客园 - 我才是银古

第12章:实战案例:机械结构与 3D 打印零件

1. 实战目标

本章以一个“带盖电子小盒”为案例,综合使用参数、模块、布尔、孔位、螺丝柱、圆角板和命令行导出。案例不追求复杂外观,而强调工程结构的可复用写法。

2. 需求定义

假设需求:

  • 外壳外尺寸可配置。
  • 底壳开口向上,有固定壁厚。
  • 四角有 M3 螺丝柱。
  • 盖板有对应通孔。
  • 侧面有一个线缆孔。
  • 可分别导出底壳、盖板和装配预览。
  • 尺寸默认按 FDM 打印,单位毫米。

3. 参数区

$fn = 48;

part = "assembly"; // "base", "lid", "assembly"
box_size = [90, 55, 28];
wall = 2.4;
lid_thickness = 3;
corner_r = 5;
screw_d = 3.2;
screw_post_d = 9;
clearance = 0.3;

参数应集中在文件顶部,让用户不用阅读全部几何也能修改规格。

4. 圆角矩形工具

module rounded_rect_2d(size = [40, 20], r = 4) {
    hull() {
        for (x = [-size[0]/2+r, size[0]/2-r])
            for (y = [-size[1]/2+r, size[1]/2-r])
                translate([x,y]) circle(r = r);
    }
}

module rounded_box_solid(size = [60,40,20], r = 4) {
    linear_extrude(height = size[2], center = true)
        rounded_rect_2d([size[0], size[1]], r);
}

这里使用二维 hull 后拉伸,性能比三维圆角更可控。

5. 螺丝柱孔位

function screw_positions(size, inset) = [
    [-size[0]/2+inset, -size[1]/2+inset],
    [ size[0]/2-inset, -size[1]/2+inset],
    [ size[0]/2-inset,  size[1]/2-inset],
    [-size[0]/2+inset,  size[1]/2-inset]
];

把孔位写成函数可以让底壳和盖板共用,避免孔位不一致。

6. 底壳主体

module base_shell() {
    difference() {
        rounded_box_solid(box_size, corner_r);
        translate([0,0,wall])
            rounded_box_solid([box_size[0]-2*wall, box_size[1]-2*wall, box_size[2]], max(corner_r-wall, 1));
        translate([0, -box_size[1]/2, 3]) rotate([90,0,0])
            cylinder(h = wall + 1, d = 10, center = true);
    }
}

开腔时内部切除体向上偏移,保留底板厚度。线缆孔作为侧面圆柱切除。

7. 螺丝柱

module screw_posts() {
    post_h = box_size[2] - wall - lid_thickness;
    for (p = screw_positions(box_size, 10))
        translate([p[0], p[1], -box_size[2]/2 + wall + post_h/2])
            difference() {
                cylinder(h = post_h, d = screw_post_d, center = true);
                cylinder(h = post_h + 1, d = screw_d, center = true);
            }
}

螺丝柱要考虑打印方向和强度。孔径是否需要攻丝、热熔铜螺母或自攻螺丝,应根据工艺调整。

8. 底壳总成

module base() {
    union() {
        base_shell();
        screw_posts();
    }
}

实际项目还可以加入加强筋、卡扣、定位台阶和倒角。

9. 盖板

module lid() {
    difference() {
        translate([0,0,box_size[2]/2 + lid_thickness/2 + clearance])
            rounded_box_solid([box_size[0], box_size[1], lid_thickness], corner_r);
        for (p = screw_positions(box_size, 10))
            translate([p[0], p[1], box_size[2]/2 + lid_thickness/2 + clearance])
                cylinder(h = lid_thickness + 1, d = screw_d, center = true);
    }
}

盖板与底壳之间使用 clearance 留出装配间隙。若要隐藏螺丝头,可加入沉孔或沉头。

10. 装配与导出

module assembly() {
    color("lightgray") base();
    color("skyblue", 0.6) lid();
}

if (part == "base") base();
else if (part == "lid") lid();
else assembly();

命令行:

openscad -D 'part="base"' -o base.stl box.scad
openscad -D 'part="lid"' -o lid.stl box.scad
openscad -D 'part="assembly"' -o assembly.png --imgsize=1200,800 box.scad

11. 打印前检查

  • 壁厚是否是喷嘴宽度的合理倍数?
  • 螺丝柱是否太细或太高?
  • 孔径是否包含打印收缩补偿?
  • 线缆孔是否需要倒角或圆角?
  • 盖板是否有足够间隙?
  • 是否需要避免大面积悬垂?
  • 底面是否平整放置在打印平台?

12. 扩展练习

  1. 为盒体添加 USB-C 开口。
  2. 增加热熔铜螺母孔。
  3. 盖板增加沉头螺丝孔。
  4. 添加内部 PCB 固定柱。
  5. text 添加型号和方向标识。
  6. 创建 smallmediumlarge 三种规格。
  7. 增加 quality 参数控制导出精度。