关于 openscad-iterative-modeling
openscad-iterative-modeling 是一套通过 SCAD 编写、PNG 预览和逐步修订来建模的工作流程,适用于使用 OpenSCAD 制作参数化 3D 几何模型的任务。它依靠 OpenSCAD MCP Server 渲染预览并导出 STL。
主要功能
- 01将需求整理为建模约束
- 02编写参数化 SCAD 几何
- 03渲染 PNG 并检查形状
- 04依据预览逐步修改模型
- 05获批后导出 STL
适用场景
- 01从描述创建 3D 支架或外壳
- 02依据物体图片重建 3D 模型
- 03检查 OpenSCAD 代码的渲染结果
- 04将 SCAD 模型导出为 STL
MCP 相关
此工作流程需要已配置并运行的 OpenSCAD MCP Server,使用其 render_scad_png 工具生成预览,并通过 export_scad_stl 导出模型。
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ fboldo/ openscad-mcp-server --skill openscad-iterative-modeling安装后在 Claude Code 中输入/openscad-iterative-modeling确认已加载。
详细介绍
OpenSCAD 迭代建模循环(SCAD → PNG → 优化)
何时使用此技能
- 用户要求创建、设计或建模一个 3D 对象(支架、外壳、安装座、齿轮等)
- 用户发送对象的图片,并要求用 3D 方式重建
- 用户希望渲染或预览 OpenSCAD 代码
- 用户要求从 SCAD 描述导出 STL 文件
- 任何可以用参数化 CSG 几何表示的请求
前置条件
必需工具
- OpenSCAD MCP Server:渲染和导出 OpenSCAD 几何体所必需
- 提供:
render_scad_png(SCAD → PNG 预览)、export_scad_stl(SCAD → STL 网格) - 工具名称可能带有由宿主添加的命名空间(例如
mcp_openscad-mcp-_render_scad_png);请按后缀匹配 - 必须完成配置并运行,才能渲染预览和导出模型
- 提供:
操作模式
- 优先使用简洁、参数化且带命名变量的 SCAD。
- 每次迭代:只修改 PNG 评审指出的问题。
- 如果经过 3 轮渲染和优化仍未收敛,请停止并向用户请求澄清。
工作流
1. 规范化请求(尽量少做澄清)
仅提取并确认正确建模所必需的信息:
- 单位(未指定时默认为 mm)
- 关键尺寸(整体尺寸、孔径、壁厚)
- 约束条件(必须可打印?公差?对称性?边缘为锐边还是圆角?)
如果缺少关键尺寸,请提出 1–3 个问题;否则采用合理的默认值并说明。
2. 编写 SCAD 代码(初稿)
- 使用带命名参数的
module。 - 在可行时将几何体中心置于原点(
center=true)。 - 为曲面部件显式设置
$fn(初始设为$fn=64)。 - 确保
difference()中的切割体延伸到主体之外,以避免出现零厚度壁。
3. 渲染 PNG 预览
首先使用 cameraPreset="isometric" 渲染(width=800,height=600)。如果难以判断某些特征,请添加正投影视图:
| 要检查的特征 | 相机预设 |
|---|---|
| 平面布局、孔位 | top |
| 高度、台阶、凸缘、轮廓 | front 或 right |
| 整体形状、比例 | isometric |
| 底部特征 | bottom |
4. 目视检查 PNG
按优先级顺序检查以下清单:
- 渲染是否有效? — 如果结果空白或报错,请参阅下方的§渲染失败。
- 整体比例 — 外形是否符合请求?
- 特征是否齐全 — 所有孔、切口、倒角和圆角是否都清晰可见?
- 位置与对齐 — 是否居中?是否对称?偏移是否正确?
- 方向 — 部件的朝向是否符合预期用途(例如,可打印的平面朝下)?
对发现的每个问题写一行结论,例如:
- “通孔偏离中心约 5 mm — 将
translate的 X 值增加 5。” - “凸缘过高(6 mm → 降至 2 mm)。”
5. 优化 SCAD 代码并重复
只做能解决评审问题的最小 SCAD 修改,然后再次渲染。
PNG 符合用户意图并得到用户认可后即可停止。
6. 导出 STL(仅在准备就绪时)
获得认可后,导出几何体:
- 选择稳定的文件名(例如
"bracket.stl")。 - 如果用户需要多个变体,请为每个变体使用不同的文件名。
渲染失败
如果渲染结果空白或报错:
- 将 SCAD 简化为最小形状(例如一个立方体),以确认工具正常工作。
- 逐个重新添加特征,每次添加后都进行渲染,以定位问题。
- 常见原因:语法错误、
difference()顺序不正确、尺寸为负数、切割体与主体未相交。
示例循环
用户请求:“L 形支架,底座为 40x30 mm,墙面高度为 25 mm,厚度为 4 mm,底座上有两个用于安装的 M4 沉头孔。”
- 起草 SCAD:
$fn = 64;
t = 4; base_w = 40; base_d = 30; wall_h = 25;
hole_d = 4.3; csink_d = 8.5; csink_depth = 2.4;
hole_x = [10, 30]; hole_y = 15;
difference() {
union() {
cube([base_w, base_d, t]); // base
translate([0, 0, 0]) cube([t, base_d, wall_h]); // wall
}
for (x = hole_x) {
translate([x, hole_y, -1]) cylinder(h = t + 2, d = hole_d);
translate([x, hole_y, t - csink_depth]) cylinder(h = csink_depth + 1, d1 = hole_d, d2 = csink_d);
}
}
- 渲染
isometric-> 评审:墙面位于错误的一侧;将其移至x = base_w - t。 - 修正,渲染
top-> 孔的间距看起来正确。渲染front-> 墙面高度正确。 - 用户批准 -> 导出 STL。
评论
支持 Markdown