rotate-scale
本文回答:旋转 =
entity.rotate(basePoint, angle),basePoint用new Point2D(x, y),angle是弧度;缩放 =entity.scale(basePoint, factor)。命令版ROTATE / SCALE,支持R(参考)模式,ROTATE还支持C复制旋转。
一、旋转
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°;正值逆时针;负值顺时针。
二、缩放
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。
三、命令版
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