唯杰地图 logo唯杰地图
VJMAP
EN

ucs

vjcad/references/view/ucs.md 3.1 KB102 行
原文

本文回答:UCS(用户坐标系)= "在 WCS 之上叠一个偏移 + 旋转"。设置走 Engine.currentSpace.UCSORG = new Point2D(x, y) + Engine.currentSpace.UCSXANG = angleInRadians,并 Engine.undoManager.ucs_undoMark(oldOrg, oldAng) + Engine.pcanvas.updateUcsIsWcs() + Engine.view.coordsBar.updateCoordsTitle() + Engine.pcanvas.redraw()。命令 UCS 走交互式输入 / UCS W 重置回 WCS。

一、基本概念

坐标系 含义
WCS(世界) 固定不变
UCS(用户) 可移动 / 旋转
UCSORG UCS 原点(Point2D)
UCSXANG UCS X 轴相对 WCS 的角度(弧度)

MCP 参考:vjcad/example/view/10ucs.js、vjcad/doc/view/index.md。

二、读

const org = Engine.currentSpace.UCSORG;     // Point2D
const ang = Engine.currentSpace.UCSXANG;    // 弧度

console.log('UCS原点:', org.x, org.y);
console.log('UCS角度°:', ang * 180 / Math.PI);

三、写(带 undo + 刷新的标准模板)

function setUCS(origin, angleInDegrees) {
  const angRad = angleInDegrees * Math.PI / 180;

  const oldOrg = Engine.currentSpace.UCSORG;
  const oldAng = Engine.currentSpace.UCSXANG;

  Engine.currentSpace.UCSORG  = new Point2D(origin[0], origin[1]);
  Engine.currentSpace.UCSXANG = angRad;

  Engine.undoManager.ucs_undoMark(oldOrg, oldAng);
  Engine.pcanvas.updateUcsIsWcs();

  if (Engine.view.coordsBar) {
    Engine.view.coordsBar.updateCoordsTitle();
  }

  Engine.pcanvas.redraw();
}

setUCS([50, 50], 30);          // 移到 (50, 50),旋转 30°

MCP 参考:vjcad/example/view/10ucs.js。

四、重置回 WCS

function resetToWCS() {
  setUCS([0, 0], 0);
}

或用命令:

Engine.editor.executerWithOp('UCS');     // 交互
// 在命令里输入 W 重置为 WCS

MCP 参考:vjcad/example/view/10ucs.js。

五、与坐标系转换

// 在新 UCS 下,[0, 0] 实际对应 WCS [50, 50]
const wcs = Engine.ucsToWcs(new Point2D(0, 0));   // ≈ Point2D(50, 50) (rotation 后)

// 鼠标点 → UCS
const wcsPt = Engine.canvasToWcs(new Point2D(e.offsetX, e.offsetY));   // 参数是 Point2D 对象
const ucsPt = Engine.wcsToUcs(wcsPt);

详见 core/coordinate。

六、UCS 命令的输入

UCS
指定基准点(新 UCS 原点)
指定第二点(确定 X 轴方向)
(输入 W 重置为 WCS)

MCP 参考:vjcad/example/view/10ucs.js。

反例

  • 直接修改 UCSORG / UCSXANG 不调用 updateUcsIsWcs:缓存的 ucsIsWCS 过时,只影响 UCS 图标样式与坐标栏 "WCS"/"UCS" 标题,实体渲染与坐标数值不受影响。
  • 没 ucs_undoMark:Ctrl+Z 不会回滚 UCS。
  • 把"视图旋转"和"UCS 旋转"混淆:视图旋转用 twistAngle(plan-view),UCS 旋转用 UCSXANG。

参考(官方文档 MCP)

  • 文档:vjcad/doc/view/index.md、vjcad/doc/core/coordinate.md(如有)
  • 示例:vjcad/example/view/10ucs.js、vjcad/example/view/08coordinate.js