overview
本文回答:编辑实体走两条路:① 直接用
EntityBase.move/rotate/scale/mirror(记得Engine.regen());② 通过命令MOVE / COPY / ROTATE / SCALE / MIRROR / ERASE / OFFSET / FILLET / STRETCH / LINEARCOPY / POLARCOPY / GROUP / UNGROUP等。删除推荐Engine.eraseEntities(...),高亮推荐Engine.highLightEntities(...) / Engine.clearHighLight()。
一、按子主题挑
| 想做的 | 子主题 |
|---|---|
| 移动 / 复制 | move-copy |
| 旋转 / 缩放 | rotate-scale |
| 镜像 | mirror |
| 删除 | erase |
| 显示顺序(前/后/图层) | draw-order |
| 组(Group / Ungroup / Explode) | group |
| 高亮 / 清除高亮 | highlight |
二、EntityBase 通用变换签名
ent.move(from: Point2D | [number, number], to: Point2D | [number, number]): void;
ent.rotate(center: Point2D, angle: number /* 弧度 */): void;
ent.scale(basePoint: Point2D, factor: number): void;
ent.mirror(p1: Point2D, p2: Point2D): void;
ent.clone(): EntityBase;
注意:示例里的
move(from, to)与文档里的move(dx, dy)命名不同。实战按示例来用(from, to)——示例真的能跑(vjcad/example/edit/01move.js)。
三、命令版(与 AutoCAD 兼容)
| 命令 | 别名 | 说明 |
|---|---|---|
MOVE |
M |
移动 |
COPY |
CO |
复制(⚠️ CP 未注册,别名表只有 CO;E→ERASE 也已注册) |
ROTATE |
RO |
旋转 |
SCALE |
SC |
缩放 |
MIRROR |
MI |
镜像 |
ERASE |
— | 删除 |
STRETCH |
S |
拉伸 |
OFFSET |
O |
偏移 |
FILLET |
F |
圆角 |
LINEARCOPY |
— | 线性阵列复制 |
POLARCOPY |
— | 环形阵列复制 |
COPYBASE / PASTECLIP |
— | 带基点复制 / 粘贴 |
ENTDRAWFRONT / ENTDRAWBACK |
— | 实体置前 / 置后 |
LAYDRAWFRONT / LAYDRAWBACK |
— | 图层整体置前 / 置后 |
GROUP / UNGROUP |
— | 创建组 / 取消组 |
通过 Engine.editor.executerWithOp('MOVE') 等触发,或在 Engine.editor.automate() 脚本中使用。详见 command/execute-script。
四、关键 Tips
move/rotate/scale/mirror只改数据 + 标记isDirty,不会自动重绘,必须手动Engine.regen()。Engine.eraseEntities(ent)会自动 undo + 标记isAlive = false。- 高亮
Engine.highLightEntities([...])是临时视觉效果,不影响实体属性。
参考(官方文档 MCP)
- 文档:
vjcad/doc/edit/index.md、vjcad/doc/edit/edit-commands.md - 示例:
vjcad/example/edit/01move.js~09highlight.js