唯杰地图 logo唯杰地图
VJMAP
EN

pan-redraw

vjcad/references/view/pan-redraw.md 2.7 KB64 行
原文

本文回答:刷新有三档——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