Skip to content

相机与导航

viewer.camera 管相机位姿与导航:取景适配(fitView)、标准视图切换(setStandardView)、位姿读写(getState / setState)与交互开关。鼠标 / 触控交互由引擎内置,集成方无需自己接管事件。

在下面的 demo 中直接体验内置交互:左键拖拽旋转、滚轮缩放、右键拖拽平移,按空格键取景适配:

可交互 demo · 鼠标拖拽旋转,滚轮缩放,空格键 fit在新窗口打开 ↗

核心 API

ts
// 取景适配:整模型 / 指定节点 / 显式包围盒,默认 400ms 平滑动画
viewer.camera.fitView(); // 整模型(无选中时)
viewer.camera.fitView({ nodeIds: [someNodeId] }, { animate: false }); // 指定节点,跳过动画

// 标准视图(Z-up / CATIA 约定)
viewer.camera.setStandardView("iso");

// 订阅相机变化(交互期间约 30Hz 节流)
viewer.on("camera-changed", (e) => console.log(e.position, e.target));

// 视角存取:getState 取快照,setState 恢复
const saved = viewer.camera.getState(); // { position, target, up, fov }
viewer.camera.setState(saved);

行为要点

  • fitView 的取景目标按优先级回落:显式 target.boxtarget.nodeIds 指定的节点 → 当前选中集(支持面 / 边子实体粒度)→ 整个模型。无模型或解析不出范围时静默返回。取景保持当前视线方向,只调整距离与注视点。
  • 动画默认开:FitViewOptionsanimate 默认 truedurationMs 默认 400;交互期间用户按下指针会立即取消进行中的相机动画。
  • setStandardView 接受 7 个视图名:"front" / "back" / "right" / "left" / "top" / "bottom" / "iso",语义按 Z-up / CATIA 约定(Front=+X, Right=+Y, Top=+Z),各视图的方位与屏幕 up 向量见坐标系与单位。以最近一次取景范围为中心定距取景,模型尚未取过景时为 no-op。
  • camera-changed 约 30Hz 节流:交互期间相机位姿变化以约 30Hz 上限对外广播(payload 含 position / target / up),适合驱动小地图、视角同步等 UI;程序化 setState 也会触发。
  • 内置交互键位:左键拖拽旋转(orbit)、滚轮缩放、右键拖拽平移。setNavMode("pan") 可把左键改为平移;setInteractionEnabled(false) 关闭全部指针交互(API 控制不受影响)。
  • getState / setState 做视角存取:getState() 返回 { position, target, up, fov } 快照,可序列化保存;setState() 部分更新(只写传入字段),立即生效并触发 camera-changed,同时取消进行中的相机动画(如 fitView 取景过渡)。

相关 API