Skip to content

爆炸视图

viewer.explode 提供零件爆炸:按结构树把零件沿「自身中心 − 模型中心」方向散开,便于观察装配内部。爆炸程度是 0–1 的连续量(set(scale)),可调散开倍率与深度衰减,默认带平滑动画;个别零件可锁定在原位,reset() 一步复原。

下面的 demo 用滑块连续驱动爆炸程度,也可用键盘快捷键:

可交互 demo · 拖底部滑块调爆炸程度,E 键开/关,[ ] 调散开倍率,空格键 fit在新窗口打开 ↗

核心 API

ts
// 爆炸到完全散开(0 = 复原,1 = 完全散开;默认带约 400ms 缓动动画)
viewer.explode.set(1);

// 调散开倍率与深度衰减,不要动画
viewer.explode.set(0.6, { magnitude: 6, depthDampening: 1, animate: false });

// 锁定个别零件留在原位(已爆炸时立即生效)
viewer.explode.lockNodes(baseNodeId);
viewer.explode.clearLocks();

// 查询与复原
viewer.explode.getScale(); // 当前爆炸程度
viewer.explode.reset(); // 等价于 set(0, { animate: false })

行为要点

  • set(scale, options?):scale 取 0–1(超界自动钳制),0 为复原。散开方向是每个零件「自身包围盒中心 − 模型包围盒中心」,沿该方向按 scale 平移。未加载模型时静默返回。
  • ExplodeOptions:magnitude 散开倍率(默认 4);depthDampening 深度衰减指数 ≥0(默认 0,越大装配树深层零件位移越小,适合多层装配避免内层飞太远);animate 是否平滑过渡(默认 true,约 400ms 缓动)。magnitude / depthDampening 一经设置即保留,后续 set 不传也沿用。
  • getScale() / getOptions():getScale() 在动画进行中返回逐帧推进的即时值;getOptions() 返回当前生效的 magnitude / depthDampening
  • 锁定:lockNodes(ids) / unlockNodes(ids) 接受单个或数组,非叶节点自动展开到其叶子;已处于爆炸状态时立即重算偏移。isLocked(id) 查询(按叶子),clearLocks() 全部解除。
  • 偏移查询:getNodeOffset(id) 返回某节点当前的爆炸累加偏移(世界单位 Vec3),无偏移返回零向量——适合驱动自定义标注或动画。
  • 相机不裁剪:爆炸把零件推出原始包围盒时,引擎同步外扩场景包围球(触发 model-bounds-changed 事件),相机 near / far 自动适配,散开的零件不会被裁掉。
  • 爆炸是纯视图态:不修改模型数据;切换模型后爆炸状态自动复位。

相关 API