ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

OpenCADStudio自动化API详解:--serve无头JSON协议,让CAD在CI中批量跑图

OpenCADStudio自动化API详解:--serve无头JSON协议,让CAD在CI中批量跑图 OpenCADStudio自动化API详解--serve无头JSON协议让CAD在CI中批量跑图【免费下载链接】OpenCADStudioA CAD application built with Rust — 2D/3D drawing, DWG/DXF support, and GPU-accelerated rendering项目地址: https://gitcode.com/gh_mirrors/op/OpenCADStudioOpenCADStudio 是一款用 Rust 编写的开源 CAD 软件原生读写 DWG/DXF 图纸。它内置的自动化 API把整个绘图流程变成一套无头 JSON 协议加上--serve参数启动无需窗口、无需显示就能在 CI 流水线里批量建图、批量导出 DWG/DXF、批量出 PDF 图纸 。什么是 --serve 无头 JSON 协议普通的 CAD 应用要靠人点鼠标而--serve模式让 OpenCADStudio 变成一台JSON 驱动的绘图机一行一个请求往 stdin 写一行 JSONstdout 回一行 JSON请求之间互不阻塞状态持续活动文档在整个进程生命周期内保持打开可以画一步、看一步、再画一步零依赖不需要 Python SDK、不需要数据库Python/Shell/Node 标准库即可对接服务启动后会先吐出一行就绪横幅客户端读到它即可开始通信{ok:true,ready:true,version:2026.38,session_id:…}实现很薄整个无头服务就是 src/app/automation.rs 里的serve()参数解析在 src/cli.rs。加--port N还能把 stdin/stdout 换成127.0.0.1:N的 TCP 连接会话在客户端重连后依然保留。在 CI 中批量跑图的 5 个步骤1️⃣ 启动无头服务OpenCADStudio --serve无需显示器、无需 HOME 配置目录容器里直接跑。2️⃣ 发请求两种风格二选一风格格式适用操作protocol 1{protocol:1,op:…,request_id:…,document_id:1}带副作用的变更操作导出、出图、撤销…legacy{op:new}new、open、run、query、save等基础操作request_id由调用方生成同一个 ID 重放会直接返回缓存结果——幂等重试是协议的内建能力CI 遇到超时重发即可不会重复执行。3️⃣ 用命令批量建图和 GUI 命令行完全同一套命令派发器一行 JSON 就是一句命令{op:new} {op:run,cmd:LINE 0,0 100,80} {op:run,cmd:CIRCLE 50,40 20} {op:entities}最后一条返回各类型实体的计数可以直接当作断言用。复杂图形也可以用entities_create一次性提交一批带类型的定义线、圆、多段线、文字、填充…缺失的图层会自动创建整个批次作为一个可撤销步骤原子提交。4️⃣ 用 wblock 导出 DWG/DXF把指定句柄的实体导出成独立图纸格式由扩展名决定.dwg/.dxf源文档不被修改——这是 CI 里一张母图切出 N 张交付图的核心操作{protocol:1,op:wblock,request_id:clone-1,document_id:1, path:out/page-01.dwg,handles:[2A,31]}5️⃣ 用 plot 无对话框出 PDF指定路径即出图没有任何弹窗layout:allper_page:true可以每个布局一张 PDF正好对应每张图纸一个文件的交付习惯{protocol:1,op:plot,request_id:plot-1,document_id:1, path:out/pages.pdf,layout:all,per_page:true}失败时不会抛模糊异常而是返回符号化错误码entity_absent、stale_state、document_dirty…stale_state这类快照过期错误属于可重试集——刷新state再试一次即可。完整错误码表见 docs/automation/API-SPEC.md。三个伴生通道--export、--http、--mcp--serve不是唯一的自动化入口三种通道共享同一个操作派发器通道命令适合谁--export IN OUT一次性转格式后退出--target-version 2000指定版本纯格式转换任务--http portREST API127.0.0.1:port/api/v1Bearer token 鉴权自带 OpenAPI 3 文档普通 HTTP 客户端curl、fetch--mcp通过 stdio 暴露 4 个工具给 AI 客户端AI 辅助绘图--http的实现见 src/rest.rs机器可读接口描述内嵌在 src/rest_openapi.json--mcp则把ocs_sessions/ocs_read/ocs_execute/ocs_capture四个工具暴露给 AI源码在 src/mcp.rs。用官方冒烟测试验证你的流水线仓库自带黑盒冒烟测试只依赖 Python 标准库启动--serve画两条实体wblock导出 DXFplot出单页 PDF最后校验能力清单——全部通过才打印serve smoke: OKgit clone https://gitcode.com/gh_mirrors/op/OpenCADStudio cd OpenCADStudio cargo build python3 docs/automation/serve_smoke.py target/debug/OpenCADStudioREST 通道有对应的 docs/automation/rest_smoke.py把创建、查询、变换、块定义、跨文档复制、按页出图整个生命周期跑一遍。这两个脚本可以直接搬进 CI 的测试阶段作为自动化链路的回归门禁。延伸阅读资料操作手册docs/automation/README.md完整协议规范约定、操作目录、错误码、实例docs/automation/API-SPEC.md原生通道对比与--serve细节docs/automation/native.md无头服务实现src/app/automation.rs一条 JSON 一个动作一个进程一个图纸会话——这就是把 CAD 塞进 CI 的最短路径。【免费下载链接】OpenCADStudioA CAD application built with Rust — 2D/3D drawing, DWG/DXF support, and GPU-accelerated rendering项目地址: https://gitcode.com/gh_mirrors/op/OpenCADStudio创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进