> **本文回答**：DWG 转换强依赖服务端：`IMPORTDWG` 走"`uploadMap` → `openMap` → `drawingManager.openDrawing`"三步；`EXPORTDWG` 走"`drawingManager.exportToDwg(...)`"，只返回服务端文件名/路径（`{status, path, filename, entityCount}`），不含二进制，也不返回下载 URL。支持 DWG（2000-2018）/ DXF；标注可选导出为原生 CAD 标注。

## 一、IMPORTDWG（导入）

### 命令版

```js
await Engine.editor.executerWithOp('IMPORTDWG');
```

### API 版（完整流程）

```js
import { DrawingManagerService, Service, MapOpenWay, openMapDarkStyle } from 'vjcad';

const drawingManager = new DrawingManagerService();
const service        = drawingManager.getService();

// 1. 上传文件
const upload = await service.uploadMap(file);
if (upload.error) throw new Error(upload.error);

// 2. 服务端解析 DWG → webcad
const mapid = file.name.replace(/\.(dwg|dxf)$/i, '') + '_' + Date.now();
const open  = await service.openMap({
  mapid,
  fileid: upload.fileid,
  uploadname: file.name,
  mapopenway: MapOpenWay.Memory,
  style: openMapDarkStyle()
}, true);
if (open.error) throw new Error(open.error);

// 3. 拉取 webcad JSON 加载到编辑器
const draw = await drawingManager.openDrawing({
  type: 'imports',
  mapid: open.mapid,
  version: open.version,
  branch: 'main'
});
if (draw.success) {
  const file2 = new File(
    [draw.webcadJson],
    'drawing.webcad',
    { type: 'application/json' }
  );
  await Engine.view.openDbDoc(file2, draw.webcadData);

  Engine.currentDoc.serverSource = {
    type: 'imports',
    mapid: open.mapid,
    version: open.version,
    branchName: 'main',
    lastPatchId: draw.latestPatchId || 'base'
  };
  await Engine.currentDoc.setOriginalJson(draw.webcadJson);
}
```

MCP 参考：`vjcad/doc/file/file-operations.md`、`vjcad/example/file/07importdwg.js`。

### 支持格式

- **DWG**：AutoCAD 2000-2018 版本
- **DXF**：图形交换格式

## 二、EXPORTDWG（导出）

### 命令版

```js
await Engine.editor.executerWithOp('EXPORTDWG');
```

### API 版

```js
const currentJson = JSON.stringify(Engine.currentDoc.toDb());
const src         = Engine.currentDoc.serverSource;

const result = await drawingManager.exportToDwg({
  type: src.type,
  webcadJson: currentJson,
  mapid: src.mapid,
  version: src.version,
  branch: src.branchName,
  cadVersion: '',                  // ''=自动 / '2018' / '2010' …
  isZoomExtents: false,            // 导出时是否缩放至全图
  useCache: true,
  unGroup: false,                  // 是否解散组
  exportDimAsNative: false         // 是否转成原生 CAD 标注
});

if (result.status) {
  // 只返回服务端文件名/路径不含二进制；IExportWebcadResponse.downloadUrl 虽在 d.ts 声明但从不赋值
  // 下载需按服务端路径拼 URL（参考 EXPORTDWG 命令 ExportToDwgCommand.performExport）：
  const url = `${SystemConstants.SERVICE_ROOT_URL}${downloadDir}/${result.filename}?token=${SystemConstants.ACCESS_TOKEN}`;
  window.open(url, '_blank');   // downloadDir = 服务端下载目录（EXPORTDWG 对话框里由用户填写）
} else {
  console.error(result.error);
}
```

MCP 参考：`vjcad/doc/file/file-operations.md`、`vjcad/example/file/08exportdwg.js`。

> ⚠️ 入口：`drawingManager` / `exportToDwg` / `toDb` **不是顶层导出**——`import { drawingManager }` 得到 `undefined`。正确入口是 `new DrawingManagerService()`（类已导出），`Engine.drawingManager` 也不存在。`EXPORTDWG` 命令弹 `export-dwg-options-dialog` 并 await 用户确认，不可脚本化。

### `IExportToDwgParams` 表

| 参数 | 类型 | 说明 |
|---|---|---|
| `type` | `'imports'`\|`'designs'` | 图纸类型 |
| `webcadJson` | string | 当前 webcad JSON |
| `mapid` | string | 图纸 ID（imports） |
| `version` | string | 版本（imports） |
| `designPath` | string | 设计图路径（designs） |
| `branch` | string | 分支 |
| `cadVersion` | string | CAD 版本（2000-2018） |
| `isZoomExtents` | boolean | 缩放至全图 |
| `useCache` | boolean | 是否缓存 |
| `unGroup` | boolean | 是否解散组 |
| `exportDimAsNative` | boolean | 标注转原生 |

## 三、imports vs designs 类型

| 类型 | 来源 | 导出方式 |
|---|---|---|
| `imports` | 已上传的 DWG | **增量导出**，保留原 DWG 格式细节 |
| `designs` | 用户从空白创建 | **全新导出**，不依赖原始文件 |

## 反例

- 没有服务端：导入 / 导出都不可用，只能 `QSAVE` 下载 `.vcad`（或手工导出 `.webcad` JSON）。
- `cadVersion` 写错（如 `'2025'`，超出 2000-2018）：服务端可能拒绝。
- `unGroup: true` 后大量内嵌实体被打散，文件体积膨胀；按需选择。

## 参考（官方文档 MCP）

- 文档：`vjcad/doc/file/file-operations.md`
- 示例：`vjcad/example/file/07importdwg.js`、`08exportdwg.js`
