overview
本文回答:vjcad 文件操作分五类:① 服务端(
OPENFROMSERVER / SAVESERVER);② 本地缓存(OPENFROMLOCAL / SAVELOCAL,IndexedDB);③ 本地下载(QSAVE / SAVEAS,下载 WASM 压缩的.vcad;OPEN可打开.vcad / .webcad);④ DWG 转换(IMPORTDWG / EXPORTDWG,需服务端);⑤ 图片导出(EXPORTPNG,纯前端)。核心服务 =DrawingManagerService(服务端)+getLocalStorageService()(本地)。
一、按子主题挑
| 想做的 | 子主题 |
|---|---|
| 从服务端打开 / 保存图纸 | server |
| 本地 IndexedDB 缓存 | local |
QSAVE / SAVEAS 下载 .vcad |
见本页 §三 |
| 导入 / 导出 DWG | dwg-import-export |
| 导出 PNG / JPEG | export-png |
| 文档变更对比(Diff) | diff |
| URL 参数自动打开图纸 | url-params |
二、文件格式速查
| 格式 | 说明 | 命令 |
|---|---|---|
.vcad |
WebCAD 文档的 WASM 压缩格式(内嵌 _meta.serverSource 等元数据) |
QSAVE / SAVEAS 下载;OPEN 打开 |
.webcad |
未压缩的 WebCAD 原生 JSON(toDb() 直接序列化) |
OPEN 打开;手工导出见 §三 |
.dwg |
AutoCAD(需服务端转换) | IMPORTDWG / EXPORTDWG |
.dxf |
图形交换(IMPORTDWG 兼容) | IMPORTDWG |
.png / .jpg |
视图截图(纯前端) | EXPORTPNG |
MCP 参考:vjcad/doc/file/index.md、vjcad/doc/file/file-operations.md。
三、QSAVE / SAVEAS 下载(最简单)
// 当前文件名(自动加时间戳)快速保存,浏览器下载 <名>.vcad
await Engine.editor.executerWithOp('QSAVE');
// 弹出对话框另存(同样下载 .vcad)
await Engine.editor.executerWithOp('SAVEAS');
QSAVE / SAVEAS 下载的是 compressWebcadToVcad() 压缩后的 .vcad,文档有 serverSource 时还内嵌 _meta.serverSource(mapid/version/lastPatchId/原始基准等),以便再打开后继续增量保存到服务端。
手工导出未压缩 .webcad(JSON,OPEN 也能打开,但不等价于 QSAVE:无压缩、无 _meta、不清除文档修改标记):
const data = Engine.currentDoc.toDb();
const json = JSON.stringify(data, null, 2);
const blob = new Blob([json], { type: 'application/json' });
const url = URL.createObjectURL(blob);
const a = document.createElement('a');
a.href = url;
a.download = (Engine.currentDoc.name || 'untitled') + '.webcad';
a.click();
URL.revokeObjectURL(url);
MCP 参考:vjcad/doc/file/file-operations.md、vjcad/example/file/05qsave.js、06saveas.js。
四、心智模型
┌─────────────────────────────────────────────────┐
│ Engine.currentDoc │
│ └─ .toDb() / .fromDb() ↔ webcadJson │
└─────────────────────────────────────────────────┘
│ │
▼ ▼
┌─────────────┐ ┌──────────────┐
│ DrawingMgrSvc│ │ LocalStorageSvc │
│ 服务端 JSON │ │ IndexedDB │
└─────────────┘ └──────────────┘
│ │
▼ ▼
┌─────────────┐ ┌──────────────┐
│ 服务端 DB │ │ 浏览器本地 │
└─────────────┘ └──────────────┘
五、命令快捷键
当前版本未绑定文件快捷键:Ctrl + S 只拦截浏览器默认的"保存网页"(preventDefault),不执行任何命令;Ctrl + O / Ctrl + Shift + S 无处理。文件菜单里 SAVELOCAL 旁显示的 "Ctrl+S" 只是标签,并未实际绑定。需要快捷键请自行监听 keydown 调 Engine.editor.executerWithOp('QSAVE') 等。
MCP 参考:vjcad/doc/file/file-operations.md(其中的快捷键表与实际实现不符,以上表为准)。
参考(官方文档 MCP)
- 文档:
vjcad/doc/file/index.md、vjcad/doc/file/file-operations.md - 示例:
vjcad/example/file/01openfromserver.js~10diff.js