Appearance
viewer.explodeEdit — ExplodeEditManager
设计意图
viewer.explodeEdit 是编辑态爆炸——和浏览态的 viewer.explode 是两件不同的事,值得先分清:
viewer.explode 浏览态 | viewer.explodeEdit 编辑态 | |
|---|---|---|
| 写到哪 | 独立的乘法预览通道 | 变换 D 通道(与 viewer.transform 同一条) |
| 进撤销吗 | 不进 | 进,一次拖拽 = 一条撤销步 |
| 能存盘吗 | 不能(纯视图态,reset() 即消失) | 能,随变换覆盖一起持久化 |
| 能叠加吗 | 不能,set(scale) 是绝对量 | 能,改设定后从当前位置继续叠加 |
| 典型用途 | 滑块「看一眼内部」 | 制作一张拆装图并保存下来 |
换句话说:浏览态爆炸是预览,编辑态爆炸是摆位——它把算出来的散开位移固化成零件的编辑位置,和手动拖 gizmo 挪零件是同一性质的改动。
散开量由四个设定决定:scope 炸什么(全部 / 仅选中)、dir 往哪散(X / Y / Z 轴向或 radial 径向)、levels 展开多深(一级 / 二级 / 全部)、center 径向中心取装配还是选中集;轴向另有 polarity 决定是向两侧对称散(both)还是全员朝一个方向(pos / neg,拆装图常用)。
交互形状是三段式的 begin → preview → commit,对应滑块的按下、拖动、松手:拖动期间连续预览且不入栈,松手才把这次净变化压成一条撤销步。
何时用它:制作拆装图 / 装配说明的分步摆位。只想临时看内部,用 viewer.explode。
典型用法
滑块驱动的完整会话:
ts
viewer.explodeEdit.setOptions({
scope: "all", // "all" | "sel"
dir: "Z", // "X" | "Y" | "Z" | "radial"
levels: "l1", // "l1" | "l2" | "all"
center: "asm", // "asm" | "sel"(仅 radial 有意义)
polarity: "pos", // "both"(默认) | "pos" | "neg"
});
slider.onpointerdown = () => viewer.explodeEdit.begin(); // 解析会话 + 快照基线
slider.oninput = () => viewer.explodeEdit.preview(Number(slider.value)); // 0..1,不入栈
slider.onpointerup = () => viewer.explodeEdit.commit(); // 压一条撤销步用 getAffectedCount() gate 滑块(当前设定下没有可炸目标时禁用):
ts
slider.disabled = viewer.explodeEdit.getAffectedCount() === 0;复原当前范围内的零件到装配态(同样是一条撤销步):
ts
resetBtn.onclick = () => viewer.explodeEdit.reset();注意事项
- 改设定会重置叠加基准:
setOptions()后getAmount()归 0,但已经散开的位移留在D里——新设定从当前位置继续叠加。想回到装配态先reset()。 preview必须夹在begin/commit之间:begin负责解析范围与快照基线,跳过它直接preview不会有正确的增量基准。- 一次拖拽 = 一条撤销步:
commit()把begin到此刻的净变化压成一步;拖动过程中的中间态不入栈。 - 位移写进变换
D通道:所以它与手动transform编辑相互可见——transform.resetAll()会一并清掉编辑态爆炸的位移,transform.getOverrides()导出的数据里也包含它。 - 与浏览态爆炸可以叠加显示:两条通道正交,
viewer.explode.set(0.5)会在编辑态摆位的基础上再预览散开。 scope: "sel"取当前选中集,由viewer.selection提供;选中集变了要重新begin()才生效。
完整签名与延伸
ExplodeEditManager— 全部方法的精确签名。ExplodeEditOptions及ExplodeEditScope/ExplodeEditDir/ExplodeEditLevels/ExplodeEditCenter/ExplodeEditPolarity— 四个设定旋钮的取值。- 指南:编辑能力 — 三类编辑与统一撤销栈的全景。
- 相邻域:viewer.explode(浏览态爆炸)、viewer.transform(共用
D通道)、viewer.history(撤销栈)。