overview
本文回答:视图操作分四类:① 缩放(
zoomExtents / zoomToEntities / zoomToFit,滚轮步进ZOOMFACTOR);② 平移 + 重绘(render / redraw / regen / setCenter);③ 屏幕信息(getScreenBoundsWcs / getScreenEntities / 坐标系转换);④ UCS / 平面视图(UCSORG / UCSXANG / twistAngle)。
一、按子主题挑
| 想做的 | 子主题 |
|---|---|
zoomExtents / zoomToEntities / zoomToFit / 滚轮步进 ZOOMFACTOR |
zoom |
render / redraw / regen / pan 三种刷新差异 |
pan-redraw |
状态栏坐标显示 / coordsBar |
coordinate-display |
设置画布背景色 setBgc |
background |
| 取屏幕可见图纸范围 / 取屏幕内实体 | screen-bounds |
| UCS(用户坐标系)原点 / 角度 | ucs |
| 平面视图(旋转图纸) | plan-view |
二、心智模型
┌────────────────────────────────────────────────┐
│ Canvas(屏幕坐标) │
│ ▲ │
│ │ Engine.canvasToWcs │
│ ▼ │
│ WCS(世界坐标) │
│ ▲ │
│ │ Engine.wcsToUcs / ucsToWcs(受 UCSORG/ │
│ │ UCSXANG 影响) │
│ ▼ │
│ UCS(用户坐标) │
│ ▲ │
│ │ Engine.wcsToDcs(视图旋转 twistAngle) │
│ ▼ │
│ DCS(显示坐标) │
└────────────────────────────────────────────────┘
⚠️
Engine静态只暴露canvasToWcs/wcsToUcs/ucsToWcs/wcsToDcs四个单向转换。 反向(WcsToCanvas、DcsToWcs、UcsToCanvas、RcsToCanvas等)在CoordinateTransform类上, 直接用Engine.trans(=Engine.pcanvas.trans,onLoad 后可用)即可,例如Engine.trans.WcsToCanvas(p)、Engine.trans.DcsToWcs(p),无需自己new CoordinateTransform(...)(注意这些方法是大写开头)。
参见 core/coordinate。
三、最常用一组
Engine.zoomExtents(); // 缩放到全图
Engine.zoomToEntities([circle, line]); // 缩放到指定实体
Engine.setBgc(33); // 设置背景灰度(0-255)
Engine.regen(true); // 全量重生成
const bounds = Engine.getScreenBoundsWcs(); // 当前屏幕的 WCS 范围
const ents = Engine.getScreenEntities(1.0); // 当前屏幕内的实体
MCP 参考:vjcad/doc/view/index.md、vjcad/example/view/01zoomextents.js ~ 11planview.js。
参考(官方文档 MCP)
- 文档:
vjcad/doc/view/index.md、vjcad/doc/view/view-commands.md、vjcad/doc/core/coordinate.md(如有) - 示例:
vjcad/example/view/01zoomextents.js~11planview.js