mcpField
O
openscad-iterative-modeling

openscad-iterative-modeling

github.com/fboldo创意与媒体8159 次安装5 周前更新
代码仓库

关于 openscad-iterative-modeling

openscad-iterative-modeling 是一套通过 SCAD 编写、PNG 预览和逐步修订来建模的工作流程,适用于使用 OpenSCAD 制作参数化 3D 几何模型的任务。它依靠 OpenSCAD MCP Server 渲染预览并导出 STL。

主要功能

  1. 01将需求整理为建模约束
  2. 02编写参数化 SCAD 几何
  3. 03渲染 PNG 并检查形状
  4. 04依据预览逐步修改模型
  5. 05获批后导出 STL

适用场景

  1. 01从描述创建 3D 支架或外壳
  2. 02依据物体图片重建 3D 模型
  3. 03检查 OpenSCAD 代码的渲染结果
  4. 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

按优先级顺序检查以下清单:

  1. 渲染是否有效? — 如果结果空白或报错,请参阅下方的§渲染失败。
  2. 整体比例 — 外形是否符合请求?
  3. 特征是否齐全 — 所有孔、切口、倒角和圆角是否都清晰可见?
  4. 位置与对齐 — 是否居中?是否对称?偏移是否正确?
  5. 方向 — 部件的朝向是否符合预期用途(例如,可打印的平面朝下)?

对发现的每个问题写一行结论,例如:

  • “通孔偏离中心约 5 mm — 将 translate 的 X 值增加 5。”
  • “凸缘过高(6 mm → 降至 2 mm)。”
5. 优化 SCAD 代码并重复

只做能解决评审问题的最小 SCAD 修改,然后再次渲染。

PNG 符合用户意图并得到用户认可后即可停止。

6. 导出 STL(仅在准备就绪时)

获得认可后,导出几何体:

  • 选择稳定的文件名(例如 "bracket.stl")。
  • 如果用户需要多个变体,请为每个变体使用不同的文件名。

渲染失败

如果渲染结果空白或报错:

  1. 将 SCAD 简化为最小形状(例如一个立方体),以确认工具正常工作。
  2. 逐个重新添加特征,每次添加后都进行渲染,以定位问题。
  3. 常见原因:语法错误、difference() 顺序不正确、尺寸为负数、切割体与主体未相交。

示例循环

用户请求:“L 形支架,底座为 40x30 mm,墙面高度为 25 mm,厚度为 4 mm,底座上有两个用于安装的 M4 沉头孔。”

  1. 起草 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);
  }
}
  1. 渲染 isometric -> 评审:墙面位于错误的一侧;将其移至 x = base_w - t。
  2. 修正,渲染 top -> 孔的间距看起来正确。渲染 front -> 墙面高度正确。
  3. 用户批准 -> 导出 STL。

评论

支持 Markdown