> **本文回答**：内置绘图命令 —— LINE / PLINE / POINT / CIRCLE / ARC / ELLIPSE / SPLINE / FREEHAND / RECTPOLY / DLINE / REVCLOUD / HATCH / TEXT / MTEXT / DIMLINEAR / MLEADER / BLOCK / INSERT 等 40+ 命令。

## 一、命令一览表

### 绘图

| 命令 | 说明 | 多模式 |
|---|---|---|
| `LINE` | 直线段 | |
| `PLINE` | 多段线 | `U` 撤销 / `C` 闭合 |
| `POINT` | 点 | |
| `CIRCLE` | 圆 | **6 种**：圆心+半径 / `D` 直径 / `2P` 两点 / `3P` 三点 / `T` 切切半径 / `TT` 三切点 |
| `ARC` | 圆弧 | **10 种**：三点 / SCE / SCA / SCL / SEA / SER / SED / CSE / CSA / CSL |
| `ELLIPSE` | 椭圆 | 中心法 / `A` 轴端点法 |
| `SPLINE` | 样条曲线 | |
| `FREEHAND` | 自由手绘 | |
| `RECTPOLY` | 矩形多段线 | `P` 正多边形 / `F` 圆角矩形 |
| `ARROW` | 箭头 | |
| `HATCH` | 填充图案（点选顶点画多边形，≥3 点回车成填充） | |
| `TOHATCH` | 把**选中的已有闭合实体**转成填充（圆/整椭圆/弧/闭合多段线/闭合样条，原实体被删除） | |
| `DLINE` | 双线 | `W` 宽 / `B/S/R` 封口 / `C` 闭合 |
| `REVCLOUD` | 修订云线 | `U` 撤 / `C` 闭合 |

### 文字 / 标注

| 命令 | 说明 |
|---|---|
| `TEXT` | 单行文字 |
| `TEXTEDIT` | 编辑文字 |
| `MTEXT` | 多行文字 |
| `DIMLINEAR` | 线性标注 |
| `DIMALIGNED` | 对齐标注 |
| `DIMANGLE` | 角度标注 |
| `DIMRADIUS` | 半径标注 |
| `MLEADER` | 多重引线 |

### 块 / 其他

| 命令 | 说明 |
|---|---|
| `BLOCK` | 创建块定义 |
| `INSERT` | 插入块引用 |
| `PASTECLIP` | 粘贴剪贴板 |
| `IMPORTSVG` | 导入 SVG |
| `ZOOM` | 缩放视图 |

## 二、启动

```js
mapcadLayer.executeCommand('LINE');
mapcadLayer.executeCommand('CIRCLE');
mapcadLayer.executeCommand('RECTPOLY');
mapcadLayer.executeCommand('TEXT');
// ⚠️ TEXT 不消费 opts——v1.0.1 里只有 TEXTEDIT({entity})/INSERT({blockName})/DRAWORDER({action}) 读 opts
mapcadLayer.executeCommand('REVCLOUD');
```

## 三、多模式命令详解

### CIRCLE 6 种

| 关键字 | 模式 | 步骤 | SDK 等价 |
|---|---|---|---|
| —— | 圆心 + 半径 | 圆心 → 半径点 | `new CircleEnt(center, r)` |
| `D` | 圆心 + 直径 | 圆心 → `D` → 直径点 | `CircleEnt.fromCenterDiameter(c, d)` |
| `2P` | 两点（直径端点） | A → B | `CircleEnt.fromTwoPoints(a, b)` |
| `3P` | 三点（外接圆） | 1 → 2 → 3 | `CircleEnt.fromThreePoints(a, b, c)` |
| `T` | TTR（相切相切半径） | 实体 1 → 实体 2 → 半径 | 内部解算 |
| `TT` | TTT（三切点） | 实体 1 → 2 → 3 | 内部解算 |

启动后命令栏显示：

```
指定圆心 [三点(3P) 两点(2P) 切点(T) 三切点(TT)]:
```

键入字母或点击弹出按钮切换。

### ARC 10 种

每个字母模式对应命令内 `drawSCE`/`drawSCA`/… 实例方法（无公开 `createArc_*` API）；默认三点为 `draw3P`，完整列表：

| 关键字 | 构造方式 |
|---|---|
| —— | 三点 |
| `SCE` | Start + Center + End |
| `SCA` | Start + Center + Angle（度数输入） |
| `SCL` | Start + Center + chord Length |
| `SEA` | Start + End + Angle |
| `SER` | Start + End + Radius |
| `SED` | Start + End + Direction |
| `CSE` | Center + Start + End |
| `CSA` | Center + Start + Angle |
| `CSL` | Center + Start + chord Length |

注意 SDK 内 `*Angle` 参数是**弧度**；命令交互输入的是**度**。

### ELLIPSE

| 关键字 | 模式 | 步骤 |
|---|---|---|
| —— | 中心法 | 中心 → 长轴端 → 短轴距离 |
| `A` | 轴端点法 | 长轴端 1 → 长轴端 2 → 短轴距离 |

### RECTPOLY

| 关键字 | 模式 | 步骤 |
|---|---|---|
| —— | 矩形 | 角点 1 → 角点 2 |
| `P` | 正多边形 | 边数 → 中心 → 外接圆半径点 |
| `F` | 圆角矩形 | 圆角半径 → 角点 1 → 角点 2 |

圆角矩形输出 **8 顶点闭合 PolylineEnt**（含 bulge 弧段），整体 1 个实体。

### PLINE

绘制中任意时刻：

- `U` 撤销上一个顶点（可连撤）
- `C` 闭合

### DLINE（双线）

关键字：

- `W` 宽度
- `B` / `S` / `R` 封口（butt / square / round）
- `U` 撤 / `C` 闭合

### REVCLOUD（修订云线）

沿用户指定折线，沿线画一连串半圆弧。关键字：

- `U` 撤 / `C` 闭合
- 弧长由 `RevcloudCommand.arcLength`（静态属性，CAD 单位，默认 50）控制——`drawingDefaults` 上没有 revcloud 字段

## 四、交互与 SDK 的对应

| 交互命令 | 等价 SDK |
|---|---|
| `LINE` | `new LineEnt(p1, p2)` + `mapcadLayer.addEntity` |
| `PLINE` | `new PolylineEnt(pts, closed/* boolean */)` |
| `CIRCLE` | `new CircleEnt(center, r)` 或 `CircleEnt.fromTwoPoints/ThreePoints` |
| `TEXT` | `new TextEnt(pos, text, height)`（height 是数字；对齐改 `t.textAlignment` 枚举） |
| `HATCH` | `new HatchEnt(outerPoints)`，再设 `.patternName`/`.patternScale` 属性 |

参见 [entity/*](../entity/overview.md) 系列。

## 五、编辑 / 标注命令

编辑命令见 [builtin-edit](builtin-edit.md)；标注命令参见 [entity/dimensions](../entity/dimensions.md) 与 [entity/leader](../entity/leader.md)。

## 六、常见坑

1. **交互输入角度 vs SDK 角度单位不同**：命令输入 **度**，SDK 用 **弧度**。
2. **`CIRCLE 3P` 三点共线**：构造失败；命令栏给出错误提示。
3. **`RECTPOLY F`（圆角矩形）半径 > 半短边**：圆角退化为半圆形。
4. **`TextEnt` 默认 `height = 10`**：`DrawingDefaults` 没有 `textHeight` 字段（字段表见 [serialize](serialize.md)），改字高只能传 `new TextEnt(pos, text, height)` 第三参或事后改 `t.height`。
5. **TOHATCH 不是"点选封闭区域"**：它是把**已选中的闭合实体**转换为 HatchEnt（可转：Circle / 全椭圆 Ellipse / Arc / `isClosed` 的 Polyline 与 Spline；选择时 `filter` 已过滤不可转实体），转换后**原实体被删除**。没有 flood-fill 区域探测，也没有"无法找到封闭区域"提示——未选中可转实体时静默结束。`HATCH` 命令本身则是逐点点出多边形边界。

## 相关

- 命令调用 → [execute-command](execute-command.md)
- 自定义命令 → [custom-command](custom-command.md)
- 圆角矩形 → [entity/line-polyline](../entity/line-polyline.md)
