编辑与变换
实体的移动、复制、旋转、缩放、镜像、删除等操作。
移动
const { Engine } = vjcad;
// move(from, to) —— 支持 [x,y] 数组
entity.move([0, 0], [50, 30]);
Engine.regen();
复制
const { Engine } = vjcad;
const copy = entity.clone(); // 深拷贝
copy.move([0, 0], [100, 0]); // 移动副本
copy.color = 2; // 修改副本属性
Engine.addEntities(copy);
旋转
const { Point2D, Engine } = vjcad;
// rotate(基点, 角度) —— 角度为弧度;基础实体的基点可传 Point2D 或 [x,y](标注 / MLeader 只收 Point2D)
entity.rotate(new Point2D(50, 50), Math.PI / 4); // 旋转 45°
Engine.regen();
缩放
const { Point2D, Engine } = vjcad;
// scale(基点, 缩放因子)
entity.scale(new Point2D(0, 0), 2.0); // 放大 2 倍
entity.scale(new Point2D(0, 0), 0.5); // 缩小到 0.5 倍
Engine.regen();
镜像
const { Point2D, Engine } = vjcad;
// mirror(p1, p2) —— 沿 p1-p2 直线镜像
entity.mirror(new Point2D(100, 0), new Point2D(100, 100)); // 沿 x=100 垂直线镜像
Engine.regen();
删除
const { Engine } = vjcad;
Engine.eraseEntities(entity); // 删除单个
Engine.eraseEntities([ent1, ent2, ent3]); // 批量删除
// 删除后 entity.isAlive 变为 false
重要注意事项
- 基础实体(Line/Circle/Arc/Pline/Text/MText/Hatch/Insert…)的
move()、rotate()、scale()、mirror()点参数是PointInput——Point2D或[x,y]数组均可;标注族(*DimensionEnt)与MLeaderEnt的这四个方法只收Point2D(内部直接读.x/.y,传数组得到 NaN 坐标);标注构造、initBy3Pt等同样只收Point2D - 变换后必须调用
Engine.regen()才能看到变化 - 添加新实体后用
Engine.zoomExtents()即可
修改已有实体属性(支持撤销)
const { Engine } = vjcad;
const undoMgr = Engine.undoManager;
undoMgr.start_undoMark();
try {
Engine.markModified(entity); // 先标记(记录修改前状态)
entity.color = 1; // 再修改属性
entity.layer = "新图层";
entity.setModified(); // 通知修改完成
} finally {
undoMgr.end_undoMark();
}
批量变换(支持撤销)
const { Point2D, Engine } = vjcad;
const undoMgr = Engine.undoManager;
undoMgr.start_undoMark();
try {
const from = new Point2D(0, 0);
const to = new Point2D(50, 0);
entities.forEach(ent => ent.move(from, to));
undoMgr.moved_undoMark(entities, from, to);
Engine.regen();
} finally {
undoMgr.end_undoMark();
}
其他撤销标记方法:
undoMgr.rotate_undoMark(entities, basePoint, angle)undoMgr.scaled_undoMark(entities, basePoint, scale)undoMgr.mirrored_undoMark(entities, p1, p2)
绘图顺序
const { Engine } = vjcad;
await Engine.editor.executerWithOp('ENTDRAWFRONT'); // 选中图形置于最前
await Engine.editor.executerWithOp('ENTDRAWBACK'); // 选中图形置于最后
高亮(临时视觉效果)
const { Engine } = vjcad;
Engine.highLightEntities([entity1, entity2]); // 高亮
Engine.clearHighLight(); // 清除高亮
视图操作
const { Engine, Point2D } = vjcad;
Engine.zoomExtents(); // 缩放到全图
Engine.zoomToEntities(entities); // 缩放到指定实体
Engine.regen(); // 局部刷新(只刷新修改过的实体)
Engine.regen(true); // 完全重绘(较慢)
Engine.setCenter(new Point2D(100, 100)); // 设置视图中心
// 预览(临时显示)
Engine.drawPreviewEntity(entity);
Engine.drawPreviewEntities([ent1, ent2]);
Engine.clearPreview();
主题与背景色
const { Engine } = vjcad;
Engine.THEME_MODE = 0; // 深色画布主题:setter 内部已自动 setBgc(0)(→ #212830)并重绘
Engine.THEME_MODE = 1; // 浅色画布主题:自动 setBgc(255)(→ #FFFFFF)
// 只想换底色才单独调 Engine.setBgc(灰度)(0→#212830、255→#FFFFFF、其余→对应灰度),它自带重绘;
// 不要在 THEME_MODE 之后再 setBgc(33)——会覆盖主题默认底色
Engine.isDarkTheme(); // 检查当前主题