> **本文回答**：镜像 = `entity.mirror(p1, p2)`，`p1 / p2` 用 `new Point2D(x, y)` 定义镜像直线。命令版 `MIRROR`，可选删除 / 保留原对象。

## 一、最小用法

```js
const shape = new PolylineEnt();
shape.addVertex([20, 20]);
shape.addVertex([60, 20]);
shape.addVertex([60, 60]);
shape.addVertex([40, 80]);
shape.addVertex([20, 60]);
shape.isClosed = true;
shape.setDefaults();
shape.color = 1;
Engine.addEntities(shape);

// 沿垂直线 X=100 镜像
const m1 = shape.clone();
m1.mirror(new Point2D(100, 0), new Point2D(100, 100));
m1.color = 3;

// 沿水平线 Y=0 镜像
const m2 = shape.clone();
m2.mirror(new Point2D(0, 0), new Point2D(200, 0));
m2.color = 4;

Engine.addEntities([m1, m2]);
Engine.regen();
```

MCP 参考：`vjcad/example/edit/05mirror.js`。

## 二、画镜像线提示

```js
const mirrorLine = new LineEnt([100, 0], [100, 100]);
mirrorLine.setDefaults();
mirrorLine.color = 5;
mirrorLine.lineType = 'CENTER';   // 中心线
Engine.addEntities(mirrorLine);
```

## 三、命令版

```
命令: MIRROR
选择对象: <选择图形>
指定镜像线的第一点: <点击>
指定镜像线的第二点: <点击>
是否删除源对象? [是(Y)/否(N)] <N>: <选择>
```

MCP 参考：`vjcad/doc/edit/edit-commands.md`。

## 反例

- 对标注 / `MLeaderEnt` 写 `mirror([0, 0], [100, 0])`：标注族的 mirror/move/rotate/scale 只收 `Point2D`，传数组得到 NaN 坐标（基础实体传数组没问题，内部会 `toPoint2D`）。
- 镜像线两点重合：得到不可预期的结果。
- 没 `clone()` 直接 `mirror`：原图被替换，不是新增。

## 参考（官方文档 MCP）

- 文档：`vjcad/doc/edit/index.md`、`vjcad/doc/edit/edit-commands.md`
- 示例：`vjcad/example/edit/05mirror.js`
