pan-redraw
本文回答:刷新有三档——
render(轻量重绘)/redraw(标准刷新)/regen(完整重生成,重新计算所有实体几何);改了几何(move/rotate/scale)必须regen,仅改颜色 / 选择高亮redraw或render即可;regen(true)强制全量。
一、API
// 轻量:只重绘 GPU 帧
Engine.render();
// 或
Engine.pcanvas.render();
// 标准:刷新显示,但不重新计算所有实体
Engine.redraw();
// 或
Engine.pcanvas.redraw();
// 完整:重新计算所有实体的几何
Engine.regen(); // 普通
Engine.regen(true); // 强制全量
Engine.pcanvas.regen(true); // 等价
MCP 参考:vjcad/doc/view/index.md、vjcad/example/view/03redraw.js。
二、什么时候用什么
| 场景 | 调什么 |
|---|---|
改了 entity.move/rotate/scale/mirror |
Engine.regen() |
删了实体 / 加了实体(用 Engine.addEntities/eraseEntities) |
一般已自动 regen,特殊情况 Engine.regen() |
改了 entity.color / lineType / lineWeight |
多数会自动;保险 Engine.regen() |
改了图层 layerOn / isFrozen |
Engine.regen(true) |
改了 UCS / twistAngle |
Engine.pcanvas.redraw() 即可 |
| 选择 / 高亮变化 | Engine.pcanvas.redraw() |
| 单纯 GPU 帧丢了 | Engine.render() |
MCP 参考:vjcad/example/view/03redraw.js、vjcad/doc/view/index.md、vjcad/doc/property/index.md、vjcad/doc/layer/layers.md。
三、平移(PAN)
平移通常由用户鼠标交互完成(按住中键拖动;CommandRegistry 未注册 PAN 命令)。编程平移 = 改 Engine.setCenter(point) + redraw:
// ⚠️ Engine.getCenter() 不存在;取当前视野中心用屏幕 WCS 边界中点
const b = Engine.getScreenBoundsWcs();
const cur = new Point2D((b.minX + b.maxX) / 2, (b.minY + b.maxY) / 2);
Engine.setCenter(new Point2D(cur.x + 100, cur.y));
Engine.pcanvas.redraw();
⚠️ 没有 PAN 命令——CommandRegistry 只注册了 ZOOM / ZOOMEXTENTS 等,executerWithOp('PAN') 会提示未知命令。平移只能 setCenter + redraw 或由用户鼠标操作。
MCP 参考:vjcad/doc/view/view-commands.md、vjcad/example/view/05setcenter.js。
反例
- 改了
entity.startPoint.x = 50后只redraw不regen:实体几何边界没刷新。 - 在循环里每次
regen():性能爆炸,应批量改完最后一次regen。 regen(true)当 "万能刷新" 滥用:相对昂贵,没必要时用redraw。
参考(官方文档 MCP)
- 文档:
vjcad/doc/view/index.md、vjcad/doc/view/view-commands.md - 示例:
vjcad/example/view/03redraw.js、vjcad/example/view/05setcenter.js