coordinate-display
本文回答:状态栏坐标显示走
Engine.view.coordsBar:Engine.view.coordsBar.updateCoordsTitle()只按pcanvas.ucsIsWCS把标题切成 "WCS" / "UCS"(坐标数值本身随鼠标实时按当前 UCS 换算,不需要它刷新),也可以 hide / show。坐标系转换 API 在Engine顶层(canvasToWcs / wcsToUcs / ucsToWcs / wcsToDcs;反向转换直接用Engine.trans.WcsToCanvas / DcsToWcs / …),详见 core/coordinate。
一、CoordsBar API
Engine.pcanvas.updateUcsIsWcs(); // 先按新 UCSORG/UCSXANG 重算 ucsIsWCS
Engine.view.coordsBar.updateCoordsTitle();
// 只把状态栏标题切成 "WCS" / "UCS";坐标数值实时换算,不靠它刷新
MCP 参考:vjcad/example/view/10ucs.js(UCS 设置后调用)、vjcad/example/view/11planview.js(平面视图设置后调用)。
二、坐标系转换(在状态栏 / 命令里取值)
// 鼠标事件回调里
canvas.addEventListener('mousemove', (e) => {
const wcs = Engine.canvasToWcs(new Point2D(e.offsetX, e.offsetY)); // 参数是 Point2D 对象
console.log('WCS', wcs.x, wcs.y);
const ucs = Engine.wcsToUcs(wcs);
console.log('UCS', ucs.x, ucs.y);
const dcs = Engine.wcsToDcs(wcs);
console.log('DCS', dcs.x, dcs.y);
});
MCP 参考:vjcad/doc/view/index.md、vjcad/example/view/08coordinate.js。
三、状态栏其他元素(系统变量联动)
| Engine 变量 | 状态栏按钮 | 说明 |
|---|---|---|
Engine.ORTHOMODE |
F8 / 正交 | 0/1 |
Engine.GRIDMODE |
F7 / 栅格 | 0/1 |
Engine.OSMODE |
F3 / 对象捕捉 | 位掩码 |
Engine.ORTHOMODE = 1; // 开启正交
Engine.GRIDMODE = 1; // 开启栅格
详见 setup/mainview-config 与 core/engine。
四、自定义坐标格式 / 单位
文档 / 示例里没有直接提供"修改坐标显示格式"的 API;可以监听 mousemove 后自己用 writeMessage 输出,或自定义 UI 替换。详细可看 Engine.view.coordsBar.updateCoordsTitle 内部读取的属性(IDE 解析)。
反例
- 设置 UCS 后没
updateUcsIsWcs()+updateCoordsTitle():状态栏标题仍显示旧的 "WCS"/"UCS"(坐标数值本身会按新 UCS 实时换算,不受影响)。 - 在
mousemove回调里频繁Engine.regen():开销大,建议只redraw或不刷新。
参考(官方文档 MCP)
- 文档:
vjcad/doc/view/index.md、vjcad/doc/core/coordinate.md(参考) - 示例:
vjcad/example/view/08coordinate.js、vjcad/example/view/10ucs.js、vjcad/example/view/11planview.js