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

推荐订阅源

F
Fortinet All Blogs
云风的 BLOG
云风的 BLOG
M
MIT News - Artificial intelligence
WordPress大学
WordPress大学
T
Tailwind CSS Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
S
Secure Thoughts
博客园 - 【当耐特】
Know Your Adversary
Know Your Adversary
NISL@THU
NISL@THU
博客园 - 司徒正美
Last Week in AI
Last Week in AI
C
Cybersecurity and Infrastructure Security Agency CISA
P
Privacy & Cybersecurity Law Blog
C
CXSECURITY Database RSS Feed - CXSecurity.com
B
Blog
The GitHub Blog
The GitHub Blog
小众软件
小众软件
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Spread Privacy
Spread Privacy
Martin Fowler
Martin Fowler
博客园 - 叶小钗
Security Archives - TechRepublic
Security Archives - TechRepublic
T
Tenable Blog
S
Securelist
博客园 - 三生石上(FineUI控件)
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Microsoft Security Blog
Microsoft Security Blog
Apple Machine Learning Research
Apple Machine Learning Research
罗磊的独立博客
T
Threat Research - Cisco Blogs
Application and Cybersecurity Blog
Application and Cybersecurity Blog
F
Full Disclosure
Cloudbric
Cloudbric
The Cloudflare Blog
Y
Y Combinator Blog
Hugging Face - Blog
Hugging Face - Blog
Microsoft Azure Blog
Microsoft Azure Blog
H
Hacker News: Front Page
腾讯CDC
L
Lohrmann on Cybersecurity
C
CERT Recently Published Vulnerability Notes
V2EX - 技术
V2EX - 技术
GbyAI
GbyAI
TaoSecurity Blog
TaoSecurity Blog
I
Intezer
The Last Watchdog
The Last Watchdog
G
GRAHAM CLULEY
Google Online Security Blog
Google Online Security Blog
T
The Blog of Author Tim Ferriss

博客园 - 我才是银古

第16章:常见问题、排错与最佳实践 第15章:扩展生态、MCAD 与外部集成 第12章:实战案例:机械结构与 3D 打印零件 第14章:构建、测试、调试与贡献流程 第13章:OpenSCAD 源码架构与核心执行流程 第11章:预览、渲染、网格精度与性能优化 第09章:列表推导、递归与算法建模 第08章:参数化零件库与复用设计 第10章:导入导出、命令行与自动化 第06章:CSG 布尔建模方法 第07章:二维图形、拉伸、旋转与投影 第05章:基础几何、坐标系与变换 第04章:参数、变量、函数、模块与作用域 OpenSCAD 教程目录 第03章:OpenSCAD 语言基础 第02章:安装、环境配置与开发工作流 第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
第01章:OpenSCAD 项目全景与学习路线
我才是银古 · 2026-05-06 · via 博客园 - 我才是银古

第01章:OpenSCAD 项目全景与学习路线

1. OpenSCAD 是什么

OpenSCAD 是一个面向工程零件、参数化模型和可重复生成流程的开源三维 CAD 系统。它的核心思想不是“用鼠标拖出模型”,而是“用脚本描述模型,再由程序解释、预览、渲染和导出”。官方仓库 https://github.com/openscad/openscad 的 README 将它称为用于创建实体三维 CAD 对象的软件,并明确强调它更关注 CAD 方面,而不是 Blender 这类艺术建模工具所关注的动画和视觉创作。

从使用者视角看,OpenSCAD 像一个三维建模编译器:你编写 .scad 文件,文件中包含基本几何体、变换、布尔运算、模块、函数和参数,OpenSCAD 将脚本解析为抽象语法树,再生成 CSG 结构,最终预览或求解成可导出的网格文件。从开发者视角看,OpenSCAD 是一个 C++17、CMake、Qt、CGAL、OpenCSG、Eigen、Boost 等库共同组成的桌面与命令行应用。

2. 与传统交互式 CAD 的差异

OpenSCAD 的最大差异是“声明式”和“可复现”。传统 CAD 通常记录特征树和用户操作,用户通过草图约束、拉伸、倒角、布尔等界面命令逐步构造模型。OpenSCAD 则把模型构造过程显式写在文本中。它没有复杂的鼠标交互特征编辑器,也不把模型历史隐藏在二进制工程文件里。

这种设计带来几个重要结果:

  • 参数化天然存在:尺寸、孔距、厚度、阵列数量都可以是变量或函数结果。
  • 版本控制友好.scad 是文本文件,适合 Git diff、代码审查和分支合并。
  • 批量生成容易:命令行可用不同 -D 参数导出多个规格。
  • 复用方式像编程:通过 modulefunctionuseinclude 组织库。
  • 不适合自由曲面雕刻:复杂有机造型、交互式曲面编辑、艺术细节不属于它的强项。

3. 典型应用场景

OpenSCAD 特别适合以下任务:

  1. 3D 打印零件:支架、外壳、夹具、连接件、螺母座、治具。
  2. 参数化产品族:同一模型通过宽度、高度、孔位、数量生成多个规格。
  3. 教学与算法建模:用简单脚本解释 CSG、矩阵变换、递归和网格精度。
  4. 自动化导出:在 CI 或脚本中生成 STL、OFF、3MF、SVG、PNG 等结果。
  5. 可审查工程模型:团队能用代码审查模型变化,而不依赖专有二进制格式。
  6. 与其他程序集成:由 Python、Make、Ninja、Node、WebAssembly 前端或生成器写出 .scad,再交给 OpenSCAD 渲染。

不建议用 OpenSCAD 处理高阶参数化装配约束、大型工业图纸管理、复杂曲面造型、有限元前处理、CAM 刀路生成或 BIM 协同。它可以作为这些流程中的“参数化几何生成器”,但不是完整 PLM/CAD/CAE 平台。

4. 官方仓库透露出的项目结构

结合官方仓库可以总结出 OpenSCAD 的核心层次:

  • src/core:语言、抽象语法树、上下文、表达式、模块、函数、求值、CSG 节点等核心逻辑。
  • src/geometry:二维与三维几何表示、布尔、网格、CGAL/OpenCSG 相关几何处理。
  • src/io:STL、OFF、AMF、3MF、SVG、DXF、图片等导入导出和文件处理。
  • src/gui:Qt 主窗口、编辑器、预览视图、参数面板、偏好设置、交互命令。
  • src/glview:OpenGL 视图、相机、渲染器、着色和显示控制。
  • src/python:与 Python 相关的实验性或辅助能力。
  • examples:基础、函数、参数化和高级示例。
  • tests:命令行、渲染、导出、回归、图片比较等测试资产。
  • scripts:跨平台依赖安装、构建、发布、WebAssembly、Windows 交叉编译等脚本。

这说明学习 OpenSCAD 应分为两条线:一条是 .scad 语言与建模方法;另一条是 OpenSCAD 自身源码、构建、测试和扩展开发。

5. 学习路线建议

建议按下面顺序学习:

  1. 理解 OpenSCAD 的定位:代码建模、CSG、参数化、预览与渲染差异。
  2. 安装桌面程序和命令行工具,学会打开、预览、渲染、导出 STL。
  3. 掌握基础语法:变量、表达式、向量、字符串、注释、语句块。
  4. 掌握模块与函数:参数默认值、命名参数、作用域、children()
  5. 掌握基本体和变换:cubespherecylindertranslaterotatescale
  6. 掌握布尔建模:uniondifferenceintersection 和可制造性设计。
  7. 掌握 2D 到 3D:polygontextlinear_extruderotate_extrudeprojection
  8. 学会库组织:useinclude、MCAD、BOSL2 等生态库。
  9. 学会自动化:CLI、-D 参数、批量导出、CI 检查。
  10. 阅读源码:从解析、求值、CSG、几何后端、GUI、IO、测试逐步深入。

6. 本教程结构

本教程按照当前博客的 CAD 教程布局组织,每章一个 Markdown 文件,不创建 README。章节覆盖从入门建模、语言语法、工程实战到源码开发与贡献流程。读者可以把前 12 章作为 OpenSCAD 使用教程,把后 4 章作为 OpenSCAD 开发和二次集成教程。

7. 学习时的实践原则

  • 每章都应配合一个 .scad 文件练习,不要只阅读文字。
  • 每次修改参数后观察 F5 预览和 F6 渲染的差异。
  • 对可打印零件,始终考虑壁厚、倒角、装配间隙、支撑和切片方向。
  • 对复杂模型,先做二维截面和小模块,再组合成整体。
  • 对库文件,优先保持模块纯粹:输入参数明确,输出几何可预测。
  • 对团队项目,保持文件命名、参数命名、单位和导出目录一致。