zoom
本文回答:缩放走
Engine.zoomExtents() / zoomToEntities([...]) / zoomToFit([...]);zoomExtents接受options.wcsBounds(number[])限制范围;Engine.ZOOMFACTOR只是鼠标滚轮步进百分比(默认 75),不是当前缩放倍数。没有zoomToBounds;setZoom在Engine.currentSpace(BlockDefinition)上而不在Engine上。
一、最小用法
// 全图
Engine.zoomExtents();
// 指定实体(单个或数组都行)
Engine.zoomToEntities([circle1, line1]);
Engine.zoomToFit([circle1, line1]); // 同类:实体 + padding + autoSetRenderOrigin
// 视图中心(shouldRedraw 默认 true,可传 padding)
Engine.setCenter(new Point2D(500, 500));
// ZOOMFACTOR 是滚轮步进百分比(默认 75),赋值不改变当前视图
Engine.ZOOMFACTOR = 80; // 每格滚轮缩放比 = 80/100(越接近 100 每格越慢)
const z = Engine.ZOOMFACTOR;
// 直接改当前缩放:currentSpace.zoom 是普通可写字段,推荐 setZoom(会派发 ViewZoomed)
Engine.currentSpace.setZoom(Engine.currentSpace.zoom * 2);
Engine.redraw();
MCP 参考:vjcad/example/view/01zoomextents.js、02zoomtoentities.js、05setcenter.js、09zoomfactor.js、vjcad/doc/view/index.md。
二、zoomExtents 的高级参数
Engine.zoomExtents(entities?: EntityBase[], options?: {
dcsCorner1?: Point2D; dcsCorner2?: Point2D;
wcsBounds?: number[]; // [minX, minY, maxX, maxY]
autoSetRenderOrigin?: boolean;
padding?: { top?; bottom?; left?; right? };
}): boolean
// 缩放到指定 WCS 范围 [minX, minY, maxX, maxY] —— 想"缩放到一个矩形"就传这个
// (Engine 无 zoomToBounds;空间级缩放可用 Engine.currentSpace.setZoom(v))
Engine.zoomExtents(undefined, {
wcsBounds: [-120, -120, -30, -30]
});
// 或者先算实体包围盒再喂给 wcsBounds
const box = Engine.getBoundsByEntities(ents);
Engine.zoomExtents(undefined, { wcsBounds: [box.minPoint.x, box.minPoint.y, box.maxPoint.x, box.maxPoint.y] });
MCP 参考:vjcad/example/view/01zoomextents.js。
三、缩放因子与 currentSpace.zoom
vjcad/example/view/09zoomfactor.js 显示:
Engine.ZOOMFACTOR(get/set 属性)是滚轮步进百分比(默认 75):setter 只做pcanvas.zoomRatio = ZOOMFACTOR / 100,仅鼠标滚轮使用,赋值不改变当前视图。每格滚轮按zoomRatio缩放,值越小每格幅度越大,=100 时滚轮不再缩放;ZOOMFACTOR命令只接受 ≥ 60 的值(setter 本身不校验)Engine.currentSpace.zoom是当前空间(BlockDefinition)的缩放比例,普通可写字段;建议用Engine.currentSpace.setZoom(v)(会派发ViewZoomed)- 缩放变化后通常需要
Engine.redraw()/Engine.pcanvas.redraw()
官方
09zoomfactor.js把ZOOMFACTOR = 50标成"缩放更慢"、= 100标成"缩放更快",与源码相反(50 每格 ×2,100 每格不缩放)。
四、命令版
Engine.editor.executerWithOp('ZOOMEXTENTS');
Engine.editor.executerWithOp('ZOOM'); // ZOOM(别名 Z):只有 E(对象范围,默认)/ W(窗口)两个关键字,或直接点两点框选范围;无 A 等选项
详见 vjcad/doc/view/view-commands.md。
反例
- 调
Engine.zoomToEntities([])传空数组:实际行为不可预期,先判空。 - 把
Engine.ZOOMFACTOR当缩放倍数(如= 2想放大 2 倍):它只是滚轮步进百分比,当前视图不变,之后滚轮每格会缩放 50 倍;≥ 100时滚轮不缩放或方向反转。合理范围同ZOOMFACTOR命令:60–99。 - 一次性循环
zoomToEntities([single])N 次:等价多次画面跳变;通常应该一次性mergeBoundingBoxes出总包围盒后喂zoomExtents(_, {wcsBounds})。
参考(官方文档 MCP)
- 文档:
vjcad/doc/view/index.md、vjcad/doc/view/view-commands.md - 示例:
vjcad/example/view/01zoomextents.js、02zoomtoentities.js、05setcenter.js、09zoomfactor.js