
openscad
开源 3D CAD 建模工具,面向程序员
通过开源免费 Python API,使用 CSG、挤出和可配置参数创建实体 3D 模型。
什么是 OpenSCAD?
OpenSCAD 是一款免费且开源的 3D CAD 建模工具,专为程序员和工程师设计。与交互式 3D 建模软件不同,OpenSCAD 采用基于脚本的方式,通过构造实体几何(CSG)和挤压技术来定义实体 3D 对象。这使得建模精确、可复现且具参数化,适用于机械零件、原型和技术设计。该工具支持 Linux、Windows 和 macOS,并且能够很好地与基于 Python 的工作流集成,实现自动化和脚本化。
OpenSCAD 读取描述对象的脚本文件并相应地渲染 3D 模型,从而让设计师对建模过程拥有完全的控制权。它支持诸如 union(并集)、intersection(交集)、difference(差集)等操作,以及 translate(平移)、rotate(旋转)和 scale(缩放)等变换。数据可以从 DXF 文件导入,并导出为 STL、OFF 等格式。其开放的架构和活跃的社区使其成为开发者在不依赖 GUI 交互的情况下,寻求程序化 3D 建模能力的强大选择。
OpenSCAD 入门指南
OpenSCAD 可从其官方网站获取适用于 Linux、macOS 和 Windows 的预编译二进制文件。对于开发者,源代码托管在 GitHub 上,您可以使用 CMake 和提供的构建脚本从源码构建。官方 [openscad GitHub](https://github.com/openscad/openscad) 仓库包含所有主要平台的详细构建说明。要快速入门,下载最新发布版本,安装并打开编辑器编写您的第一个 SCAD 脚本。
通过包管理器安装 OpenSCAD
# Ubuntu/Debian
sudo apt install openscad
# macOS (Homebrew)
brew install --cask openscad
# Windows (Chocolatey)
choco install openscad
构造实体几何 (CSG)
OpenSCAD 的核心优势在于它对构造实体几何(CSG)的支持,这使得可以使用布尔运算(如并集、交集和差集)来组合基本的 3D 原始体。此方法确保了精确、非流形安全的建模,适用于工程和制造。例如,你可以通过从较大的圆柱体中减去较小的圆柱体来创建一个带孔的圆柱体。CSG 操作在脚本中以声明式方式定义,便于参数化和修订。这使得 OpenSCAD 成为设计机械部件、外壳和功能原型的理想工具,尤其在精度和可重复性至关重要的情况下。
如何使用 OpenSCAD 中的 CSG 创建带孔的圆柱体?
difference() {
cylinder(h = 20, r = 10);
cylinder(h = 25, r = 4, center = true);
}
二维轮廓挤出
OpenSCAD 支持从 DXF 文件导入的 2D 轮廓或直接在 SCAD 代码中定义的 2D 轮廓进行拉伸。此技术对于从 2D 剖面创建复杂的 3D 形状(如齿轮、支架或定制外壳)至关重要。您可以线性拉伸路径或围绕轴线旋转(通过旋转)来生成旋转体。拉伸过程遵循顶点顺序,并支持 2D 多边形以及带孔的路径。结合变换和模块,这使得能够参数化生成管道、框架或建筑构件等部件,使 OpenSCAD 成为技术设计和制造工作流中的强大工具。
如何将二维多边形挤压成三维对象?
linear_extrude(height = 10, center = true, convexity = 10)
polygon(points = [[0,0], [10,0], [5,10]]);
参数化建模与配置
OpenSCAD 在参数化建模方面表现出色,尺寸和形状通过变量和函数定义。这使得只需更改少量参数即可轻松定制设计,非常适合迭代原型制作和定制。例如,您可以定义一个接受宽度、高度和厚度参数的模块,然后在多个设计中重复使用。参数还可以由外部数据驱动,例如来自 CSV 或 DXF 文件的数值,从而实现与基于 Python 的数据管道的集成。此功能支持生成式设计,使模型能够自动适应不断变化的需求或约束。
如何定义可重用的参数化模块?
module box(width, height, thickness) {
difference() {
cube([width, height, thickness]);
translate([thickness, thickness, -1])
cube([width - 2*thickness, height - 2*thickness, thickness + 2]);
}
}
box(50, 30, 3);
数据导入与导出集成
OpenSCAD 提供了对导入 2D DXF 文件和导出 3D 模型为 STL、OFF 以及其他格式的强大支持。这使得它能够轻松与 CAD/CAM 工具、3D 打印机和仿真软件集成。DXF 导入可以包含用于挤出的路径,而导出则支持二进制和 ASCII STL,以用于 3D 打印。此外,OpenSCAD 可以从 DXF 文件读取设计参数,从而实现几何在外部工具中定义、在程序中细化的混合工作流。这种互操作性结合其基于脚本的特性,使开发者能够使用 Python 或 shell 脚本自动化模型生成和批处理,简化生产工作流。
如何导入 DXF 并将其挤压为 3D?
linear_extrude(height = 5) {
import(file = "profile.dxf", layer = "outer");
}
