SuperAPI AI 工具集

solidcraft-file-formats

编程与开发

查看项目

更新于 11-03 16:16

技能介绍

用途

solidcraft-file-formats 是 SolidCraft 代码库中用于变更设计文件格式的开发技能(skill)。当某项改动需要在设计中保存新内容——例如新字段、新特征类型或某种新的命名方式——或者会改变旧设计文件的含义时,就应当使用该技能,按它规定的流程新增格式支持。

设计文件格式的变更方式

设计文件通过 "format": "solidcraft/N" 声明自身所处的格式版本。一项保存新内容或改变旧设计含义的变更,应当只新增一个文件,不改动任何共享内容:

  • 在 crates/doc/src/format/pending/ 下创建名为 <what-it-is>.rs 的文件(小写、连字符命名)。
  • 文件以 //! 注释开头,说明:保存了什么、旧设计在没有该变更时会得到什么、以及最后一个正式发布版本会要求更新而不是直接接受该设计。
  • 如果旧设计在打开时必须被重写,可在同一文件中提供 pub fn step(v: &mut Value) -> crate::Result<()>。待处理的 step 会按文件名顺序、在更旧格式的 step 之后运行。

该技能明确禁止改动 FORMAT、JSON_STEPS、crates/doc/src/format.rs 中的历史记录、其他变更的文件,或任何 v<N>/ 目录。构建过程会统计待处理文件数量并写入下一个版本号,因此正式发布会拒绝携带该变更的设计,而不是丢失数据。

两个各自新增变更的 PR 可以无冲突合并。crates/doc/src/format/pending/README.md 提供了示例。发布时由维护者运行 scripts/fold-format-pending.sh,将待处理文件永久移入 v<N>/;scripts/test-format-pending.sh 在 CI 中运行。此后不得再向 v<N>/ 目录添加文件。详见 docs/releasing.md。

绘图格式

绘图(drawings)遵循相同规则,但使用自己独立从 1 开始的编号:绘图格式变更是在 crates/doc/src/drawing/format/pending/ 下新增一个文件(参见其 README.md),同样的折叠脚本会将其移入 crates/doc/src/drawing/format/v<N>/。

导入

所有导入(STEP、IGES、3MF、STL、OBJ;无论以插入、拖放、打开还是通过 file.insert_step、file.insert_mesh 或 doc.open 执行)都会生成一个以文件命名的新组件,Import 特征位于该组件内部,实体不会散落到顶层。

导入文件被视为不可信:尺寸、实体数量和嵌套层数均有限制,每次内核调用都受到防护(见 skills/solidcraft-crash-safety/SKILL.md)。无法读取的内容会变为该特征上的一条警告。

STEP 由 crates/kernel/src/step_in 中自研读取器解析,依据公开标准编写,不使用第三方 STEP 代码。读取器及其支持范围的说明见 docs/step-import.md。

导入的装配体默认是刚性的,通过 Unlock Contents 可解除。

内核相关工作(布尔运算、STEP/IGES 导入导出、网格化)除崩溃与数据丢失外已暂停,见 CONTRIBUTING.md 中的 "Kernel work is paused"。

导出

STEP、3MF、STL、OBJ 和 URDF 通过 file.export 与 file.save_mesh 导出;MCP 的导出工具会调用它们。URDF 见 docs/urdf.md,3MF 面标签见 docs/formats/3mf-face-tags.md。

网格与设计的读取器和写入器位于 crates/io/src/。写文件应通过 crates/io/src/safe_write.rs 完成。

导出的参考测试不得以 SolidCraft 自身输出作为期望值(见 skills/solidcraft-tests/SKILL.md)。

适用场景与限制

该技能适用于对 SolidCraft 设计格式或绘图格式进行向后兼容扩展、实现旧设计迁移步骤、以及理解和遵循导入导出契约的开发者。限制包括:格式变更必须严格遵循单文件新增与禁止改动共享文件的规则;内核相关工作目前处于暂停状态;导入内容受安全性约束并可能产生警告。