名称: openscad 描述: “创建和渲染OpenSCAD 3D模型。从多个角度生成预览图像,提取可定制参数,验证语法,并为3D打印平台如MakerWorld导出STL文件。”
OpenSCAD 技能
创建、验证和导出OpenSCAD 3D模型。支持参数定制、多角度视觉预览和STL导出,适用于3D打印平台如MakerWorld。
先决条件
必须安装OpenSCAD。通过Homebrew安装:
brew install openscad
工具
此技能在tools/目录下提供多个工具:
预览生成
# 生成单个预览图像
./tools/preview.sh model.scad output.png [--camera=x,y,z,tx,ty,tz,dist] [--size=800x600]
# 生成多角度预览(前、后、左、右、顶、等轴)
./tools/multi-preview.sh model.scad output_dir/
STL导出
# 导出为STL用于3D打印
./tools/export-stl.sh model.scad output.stl [-D 'param=value']
参数提取
# 从OpenSCAD文件中提取可定制参数
./tools/extract-params.sh model.scad
验证
# 检查语法错误和警告
./tools/validate.sh model.scad
视觉验证(必需)
创建或修改OpenSCAD模型后,始终进行视觉验证。
编写或编辑任何OpenSCAD文件后:
- 使用
multi-preview.sh生成多角度预览 - 使用
read工具查看每个生成的图像 - 从多个角度检查问题:
- 前/后:验证对称性、特征和比例
- 左/右:检查深度和侧面轮廓
- 顶:确保顶部特征正确
- 等轴:整体形状验证
- 如果需要迭代:如果看起来有问题,修复代码并重新验证
这捕获了仅语法验证无法检测的问题:
- 反转法线或内外几何
- 错位的特征或不正确的布尔操作
- 比例与设计意图不匹配
- 缺失或浮动的几何
- Z-fighting或重叠表面
永远不要在没有从多个角度视觉确认看起来正确的情况下交付OpenSCAD模型。
工作流程
1. 创建OpenSCAD模型
编写带有顶部可定制参数的OpenSCAD代码:
// 可定制参数
wall_thickness = 2; // [1:0.5:5] 壁厚,单位mm
width = 50; // [20:100] 宽度,单位mm
height = 30; // [10:80] 高度,单位mm
rounded = true; // 添加圆角
// 模型代码在下方
module main_shape() {
if (rounded) {
minkowski() {
cube([width - 4, width - 4, height - 2]);
sphere(r = 2);
}
} else {
cube([width, width, height]);
}
}
difference() {
main_shape();
translate([wall_thickness, wall_thickness, wall_thickness])
scale([1 - 2*wall_thickness/width, 1 - 2*wall_thickness/width, 1])
main_shape();
}
参数注释格式:
// [最小值:最大值]- 数值范围// [最小值:步长:最大值]- 带步长的数值范围// [选项1, 选项2, 选项3]- 下拉选项// 描述文本- 纯描述
2. 验证模型
./tools/validate.sh model.scad
3. 生成预览
生成预览图像以视觉验证模型:
./tools/multi-preview.sh model.scad ./previews/
这从多个角度创建PNG图像。使用read工具查看它们。
4. 导出到STL
./tools/export-stl.sh model.scad output.stl
# 使用自定义参数:
./tools/export-stl.sh model.scad output.stl -D 'width=60' -D 'height=40'
相机位置
预览的常见相机角度:
- 等轴:
--camera=0,0,0,45,0,45,200 - 前:
--camera=0,0,0,90,0,0,200 - 顶:
--camera=0,0,0,0,0,0,200 - 右:
--camera=0,0,0,90,0,90,200
格式: x,y,z,rotx,roty,rotz,distance
MakerWorld发布
对于MakerWorld,通常需要:
- 通过
export-stl.sh导出的STL文件 - 预览图像(至少一个好的等轴视图)
- 可定制参数的描述
考虑创建带有元数据的model.json:
{
"name": "模型名称",
"description": "MakerWorld的描述",
"parameters": [...],
"tags": ["functional", "container", "organizer"]
}
示例:完整工作流程
# 1. 创建模型(编写.scad文件)
# 2. 验证语法
./tools/validate.sh box.scad
# 3. 生成多角度预览
./tools/multi-preview.sh box.scad ./previews/
# 4. 重要:查看和验证所有预览图像
# 使用read工具在每个PNG文件上视觉检查:
# - previews/box_front.png
# - previews/box_back.png
# - previews/box_left.png
# - previews/box_right.png
# - previews/box_top.png
# - previews/box_iso.png
# 寻找几何问题、错位或意外结果。
# 如果看起来有问题,返回步骤1并修复它!
# 5. 提取和审查参数
./tools/extract-params.sh box.scad
# 6. 使用默认参数导出STL
./tools/export-stl.sh box.scad box.stl
# 7. 使用自定义参数导出STL
./tools/export-stl.sh box.scad box_large.stl -D 'width=80' -D 'height=60'
记住:永远不要跳过视觉验证步骤。许多问题(错误尺寸、布尔操作错误、反转几何)只有在实际查看渲染模型时才可见。
OpenSCAD 快速参考
基本形状
cube([x, y, z]);
sphere(r = radius);
cylinder(h = height, r = radius);
cylinder(h = height, r1 = bottom_r, r2 = top_r); // 圆锥
变换
translate([x, y, z]) object();
rotate([rx, ry, rz]) object();
scale([sx, sy, sz]) object();
mirror([x, y, z]) object();
布尔操作
union() { a(); b(); } // 合并
difference() { a(); b(); } // 从a中减去b
intersection() { a(); b(); } // 仅重叠部分
高级
linear_extrude(height) 2d_shape();
rotate_extrude() 2d_shape();
hull() { objects(); } // 凸包
minkowski() { a(); b(); } // Minkowski和(圆角)
2D形状
circle(r = radius);
square([x, y]);
polygon(points = [[x1,y1], [x2,y2], ...]);
text("字符串", size = 10);