mcpField
S
solidcraft-modeling

solidcraft-modeling

github.com/tangency-labs设计与 UI13.4k46 次安装今天更新
代码仓库

关于 solidcraft-modeling

solidcraft-modeling 指导用户在 SolidCraft 中规划、构建和检查零件。它采用分阶段批处理构建参数化 CAD 模型,并用计算出的测量值核验几何结果。

主要功能

  1. 01规划几何形状和预期测量值
  2. 02分阶段批量构建零件
  3. 03使用参数化草图和特征
  4. 04检查体积、边界框和特征错误
  5. 05导出 CAD、打印和机器人格式

适用场景

  1. 01按计算尺寸构建零件
  2. 02核验孔、切口和特征位置
  3. 03测试参数变化对设计的影响

MCP 相关

该技能可在 SolidCraft 聊天或 MCP 客户端中使用,以操作 SolidCraft 服务和应用。

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/tangency-labs/solidcraft --skill solidcraft-modeling

安装后在 Claude Code 中输入/solidcraft-modeling确认已加载。

附带文件reference.md

详细介绍

SolidCraft 建模

概述

先把零件的尺寸计算清楚。然后通过几次较大的 batch 调用来构建,并在每个阶段使用 measure 对照你自行计算的数值进行检查。一个干净的构建需要 3-4 次构建批次,加上检查总共约 10-13 次调用。命令格式、平面轴、ID、回复大小和已知陷阱都列在本文件旁的 reference.md 中,因此无需探索命令目录。

首次调用前

  1. 在 SolidCraft 自带的聊天界面或任何 MCP 客户端中,调用 skill_reference {"skill":"solidcraft-modeling"}。在其他环境中,请阅读 reference.md。
  2. 运行 inspect_design {"measure":false,"sketches":false},即使你认为当前会话为空也要运行。
    • 当 SolidCraft 服务操作用户已打开的应用时,其指令会以 Backend: connected to the SolidCraft app 结尾;其他情况下则以 Backend: headless 结尾。
    • 如果设计包含时间线特征,请在调用 new_design 或 open 前先征求同意,因为两者都会丢弃未保存的工作。你也可以在已打开的设计中构建。
  3. 编写计划:
    • 参数
    • 放置位置:将零件中心置于原点,这样阵列和镜像就能以各个平面为基准
    • 每个特征,以及用于选择每条边或每个面的世界坐标点
    • 预期体积和边界框

构建

  • 阶段: 每个阶段使用一个批次:

    1. 参数、草图、尺寸、外观和第一个特征
    2. 圆角和抽壳
    3. 孔、切割和阵列
  • 失败: 批次要么全部成功,要么全部失败。失败时,读取 failed.index 和 failed.error,只修复那一步,然后重新发送批次。

  • 高风险步骤: 将高风险步骤单独放在一个批次中,这样失败时就不会回滚周边的工作。适用于相切曲面之间的布尔运算,以及任何你之前没有做过的操作。

  • 回复大小: 对于大型设计,在 batch 和 execute 中传入 "verbose": false。

  • **草图 ID 可预测,**因此同一批次中的后续步骤可以使用这些 ID:

    • 每种类型的计数都从 1 开始(l1、c1、a1、p1)。
    • 统计草图中此前的步骤创建的对象。例如,rectangle.center 会生成 l1-l6 和 p1-p5。
    • 不要只为读取 ID 而拆分批次。
  • 必须跟随参数的位置可通过以下方式指定:

    • 将草图尺寸设为 "origin",并使用表达式值("w/2 - wall - 6")
    • 使用表达式字段,例如 solid.cylinder base:["w/2-6","d/2-6","wall"]

    普通数字永远不会跟随参数变化。

  • 重复操作: solid.pattern.rectangular 使用表达式指定间距;solid.mirror 接受 XY/XZ/YZ、构造平面或 {origin, normal}(原点坐标可以是长度表达式,例如 ["half", 0, 0])。镜像或阵列特征不能再次镜像或阵列。

  • 边和面的拾取会吸附到最近的边或面。如果边拾取点距离所有边都超过物体尺寸的 5%,则会被拒绝(the nearest edge is 15.000 mm away)。对于大型物体,这个限制范围很大(例如,在 949 mm 的板上约为 48 mm),因此请根据几何形状计算精确的中点(居中方盒的竖直角边坐标为 [w/2, d/2, h/2])。

    • 拾取点必须是普通数字。
    • 拾取只会解析一次,之后参数变化时会跟随其对应的边。
    • 面可以用名称而非点指定(faces:["F1:+z"],即 sheet.convert 的 face)。body_topology 会列出每个面的 name、位于其上的一个 point(带孔面的质心位于孔内),对于圆柱还会列出 {origin, axis, radius}。
  • 轮廓: 默认情况下,拉伸会处理所有区域;一个区域内部的另一个区域会成为该区域中的孔:两个同心圆会生成一个环。环内的第三个圆会生成一个独立的圆盘实体。传入 profiles 可选择区域。

  • 顺序: 先对外侧边缘应用圆角,再抽壳,这样抽壳会沿着圆角成形。有两个例外:

    • 抽壳要移除的面的边缘,例如敞口盒子的边缘:应在抽壳后再倒圆角,因为抽壳可能会在此处失败。
    • 两个曲面之间的圆角,例如球体与圆柱相连处的圆角:此时抽壳会因 offset: only bodies with planes, cylinders, cones, spheres and tori 失败。应先抽壳。这样内侧拐角会保持尖锐,因此该处的壁厚会小于 thickness。

验证

  • **每个阶段:**运行 measure {}(每个实体约 0.9 KB;{"summary":true} 仅保留每个实体的名称、体积、包围盒、面数和 closed),并将体积、包围盒和面数与计算值比较。如果切割或打孔后体积没有变化,即使操作报告成功,也说明操作没有生效。
  • 时间线状态:inspect_design {"measure":false,"sketches":false} 会显示每个特征的 error 和 warning。
  • **参数测试:**运行 set_parameter。预期结果是 errors: [],然后再次运行 measure;质心和包围盒应按计算值移动。若要试用参数值而不保留更改,请运行 check_parameters {"set": {"L": "140 mm"}},它会报告体积、错误和圆柱轴线,并将设计恢复原状。
  • 位置:measure 不会说明特征的位置。
    • 对于非对称零件,检查计算出的质心偏移。
    • 对于对称零件(镜像或阵列布局),质心不会移动,因此请截取俯视图,并根据已知尺寸比较像素距离。
    • 对于孔和凸台,运行 body_topology {"body":"Body1","faces":"cylinders"}:每个圆柱占一条记录(包括 radius、origin、axis、沿轴线的 extent 以及合并后各面的 names),只需几行。
    • 完整的 body_topology 是最后手段:会产生 25-45 KB 数据,并将圆柱拆分为半面。
  • **最终查看:**运行一次 screenshot {"source":"model","view":"iso","width":480,"height":320}。对于位于壁内、等轴测视图中看不到的特征,请使用 "view":"top"。
    • width 和 height 仅适用于模型渲染。
    • 桥接服务时,source 默认值为整个应用窗口,view 也会改变用户的相机视角,因此请传入 "source":"model";除非用户希望移动相机,否则不要传入 view。

完成

export {path} 会导出 .step(用于 CAD)、.3mf/.stl(用于打印)或 .urdf(带有关节的装配体,适用于机器人模拟器)。save {path} 会保存为 .sc(较早版本生成的 .solidcraft 文件仍可打开)。

警示信号

想法应改为
“先列出所有命令”查看 reference.md,或运行 list_commands {"filter":"<distinctive word>"}。未筛选的列表超过 100 KB。
“用 body_topology 检查位置”将 measure 得到的质心和包围盒与计算值比较。
“检查草图”sketch.solve 会在 100 字节以内返回自由度和轮廓数量。单独运行 sketch.inspect,不要放在大型批处理中。
“从空白状态开始,运行 new_design”桥接服务时,请先询问。
“它报告正常,所以操作成功了”只有 measure 与计算值一致,才算成功。

评论

支持 Markdown