> **本文回答**：旋转 = `entity.rotate(basePoint, angle)`，`basePoint` 用 `new Point2D(x, y)`，`angle` 是**弧度**；缩放 = `entity.scale(basePoint, factor)`。命令版 `ROTATE / SCALE`，支持 `R`（参考）模式，`ROTATE` 还支持 `C` 复制旋转。

## 一、旋转

```js
const rect = createRect(40, 40, 40, 20);
rect.color = 1;
Engine.addEntities(rect);

const basePoint = new Point2D(60, 50);

const rect45 = rect.clone();
rect45.rotate(basePoint, Math.PI / 4);
rect45.color = 2;

const rect90 = rect.clone();
rect90.rotate(basePoint, Math.PI / 2);
rect90.color = 3;

Engine.addEntities([rect45, rect90]);
Engine.regen();
```

MCP 参考：`vjcad/example/edit/03rotate.js`。

> `angle` 是**弧度**：`Math.PI / 2` ↔ 90°；正值逆时针；负值顺时针。

## 二、缩放

```js
const basePoint = new Point2D(0, 0);

const c = new CircleEnt([50, 50], 20);
c.setDefaults();
c.color = 1;
Engine.addEntities(c);

const half = c.clone();
half.scale(basePoint, 0.5);
half.color = 2;

const big  = c.clone();
big.scale(basePoint, 1.5);
big.color = 3;

Engine.addEntities([half, big]);
Engine.regen();
```

MCP 参考：`vjcad/example/edit/04scale.js`。

## 三、命令版

```js
Engine.editor.executerWithOp('ROTATE');
Engine.editor.executerWithOp('SCALE');
```

`ROTATE` 命令选项：

| 选项 | 说明 |
|---|---|
| `C` | 复制模式（旋转并保留原对象） |
| `R` | 参照模式（指定参照角度） |

`SCALE` 命令选项：

| 选项 | 说明 |
|---|---|
| `R` | 参考模式（参考距离 + 新长度计算比例） |

MCP 参考：`vjcad/doc/edit/edit-commands.md`。

## 反例

- `entity.rotate(basePoint, 45)` 把 45 当度数：是**弧度**。用 `Math.PI / 4`。
- `basePoint` 传 `[x, y]` 数组：示例用 `Point2D`，但`[x,y]` 数组同样生效（内部转 Point2D），`scale([0,0],0.5)` 与 `scale(new Point2D(0,0),0.5)` 结果一致。
- 没 `Engine.regen()`：屏幕看不到变化。

## 参考（官方文档 MCP）

- 文档：`vjcad/doc/edit/index.md`、`vjcad/doc/edit/edit-commands.md`
- 示例：`vjcad/example/edit/03rotate.js`、`vjcad/example/edit/04scale.js`
