唯杰地图 logo唯杰地图
VJMAP
EN

coordinate-display

vjcad/references/view/coordinate-display.md 2.7 KB59 行
原文

本文回答:状态栏坐标显示走 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