FreeCAD
CAD · 参数化建模 · 工程制图
开源参数化三维 CAD,适合零件和简单装配。
正在打开工具详情…
用代码描述三维模型,适合精确尺寸和可重复零件。
喜欢用代码控制尺寸,做可参数化的打印件。
想靠鼠标雕塑有机外形,看 Blender 或 FreeCAD。
OpenSCAD 用代码描述三维模型:写脚本定义形状和尺寸,再渲染成网格导出。它解决的是「要一个尺寸精确、可复用、能进版本管理的零件」。
工作方式是纯文本的:用 cube、cylinder 这类基本体做布尔运算和变换,变量可以参数化,改一个数字就重新生成整个模型——同一份脚本调参数就能出一整套规格。它特别适合 3D 打印件、夹具这类以尺寸为准的零件。
代价要提前知道:它不是交互式建模,没有鼠标拖拽雕塑,想做有机曲面应该去 Blender 或 FreeCAD;复杂模型渲染要等,F5 只是预览、F6 才真正计算网格;导出 STL 前要检查是否流形,破面会让切片软件报错。
许可证为 GPL-2.0(上游 COPYING 为 GPL 第二版,并附带 CGAL 链接例外;GitHub 自动识别为 NOASSERTION)。安装包从 openscad.org 下载,Windows、macOS、Linux 都有。
上手步骤之外的具体做法:常见场景怎么配、命令怎么写、报错怎么处理。
从 CSG 建模的思路讲起,讲到 render 与 preview 的差别、布尔运算的常见失败,以及命令行批量导出模型的方法。
OpenSCAD 不是 CAD 建模器,没有草图、没有特征树。它是一个 CSG(实体构造几何)解释器:你写的每个对象都可以用 difference() union() intersection() 组合成一个新实体。
这决定了写法上的根本差别——尺寸参数化的方式只有两种:直接给常量,或者引用 局部变量。约束驱动的建模(孔距随边长自动变化)在这里做不了,得自己在代码里算:
openscad// 参数化挂架:所有尺寸由 width 推导,改一个数整体联动
width = 60; depth = 40; thickness = 5; hole_d = 4;
wall = 8; // 边到孔中心的距离
// ----
module bracket() {
difference() {
cube([width, depth, thickness]);
// 四个安装孔,位置随 width/depth 自动算
for (x = [wall, width - wall])
for (y = [wall, depth - wall])
translate([x, y, -1])
cylinder(h = thickness + 2, d = hole_d, $fn = 32);
}
}
bracket();只要用到 cylinder() 或 circle(),就必须搞清这三个特殊变量:
$fn:固定的分段数。$fn=32 就是 32 段。$fa:最小角度(默认 12°)。$fs:最小弦长(默认 2)。$fn 是全局的,写在后面会影响前面所有圆。局部用要自己收敛作用域——在 module 内部写 $fn = 48;,只对该 module 内的 cylinder() 生效。
漏写 $fn 是最常见的错误,表现为圆孔渲染成多边形。默认值下小圆可能只有 5~6 段,肉眼能看出棱角。
F5 是 preview,F6 是 render,两者行为不同:
| Preview (F5) | Render (F6) | |
|---|---|---|
| 实现 | CSG 预览,近似 | 实际几何计算 |
% 修饰符 | 按 CSG 处理 | 忽略,只作标记 |
# 修饰符 | 隐藏但参与运算 | 只显示,不参与运算 |
! 修饰符 | 忽略修饰作用 | 真的只显示不参与 |
| 模块化 | 局部变量可能不更新 | 准确 |
| 速度 | 快 | 慢 |
preview 下 ! 修饰符不生效,会让本该排除的调试对象参与运算,导致画面里凭空多出东西。所以预览结果和 F6 不一致时,先去掉调试用的 ! 修饰符再试。
difference() 出来的东西不对,排查顺序:
translate([0,0,-1]) cylinder(h = height + 2, ...)。$fn。union() 后的形状是否连成一体。$fn 一大就基本卡死。改成先做二维轮廓布尔再 linear_extrude() 拉伸,同样效果快一个数量级。预览是给看的,真正要交付的是网格文件。用 -o 指定输出格式,扩展名决定导出类型:
bash# 导出 STL(3D 打印);导出 3MF 用 -o part.3mf,可保留颜色
openscad -o part.stl part.scad
# ----
# 输出 PNG 渲染图做几何检查(需要图形环境)
openscad -o preview.png --render --camera=0,0,0,55,0,45,140 part.scad
# ----
# 用 -D 覆盖代码里的默认值,批量出不同尺寸
openscad -D width=80 -D depth=50 -o custom.stl part.scad--render 走 F6 的真实几何计算,比默认预览慢但结果准确,批量生产时应该加上。导出的 STL 是二进制还是 ASCII 可用 --export-format 控制,二进制体积小很多。