Viewer中多次平移模型后,如何恢复至初始位置?
模型平移后恢复初始位置的实现方案
初始位置信息的存储情况
Autodesk Viewer加载模型后,模型实例的originalTransform属性会默认存储其初始变换矩阵,这个矩阵包含了模型加载完成时的原始位置、旋转及缩放信息,不会随后续的平移/变换操作自动修改,是恢复初始状态的核心依据。
恢复初始位置的具体操作
针对整个模型的恢复
如果是对整个模型执行的平移操作,直接调用模型的setPlacementTransform方法,传入初始变换矩阵即可:
// 获取当前加载的模型实例 const model = viewer.model; // 恢复到初始位置 model.setPlacementTransform(model.originalTransform); // 刷新视图使变更生效 viewer.impl.invalidate(true);
针对单个构件的恢复
如果是对模型中的单个构件执行平移,需要提前备份该构件的初始变换矩阵(可在构件加载完成时获取),恢复时再将该矩阵赋值回去:
// 假设提前备份了构件的初始矩阵,比如在加载完成时存储 const initialMatrix = viewer.getFragmentList().getMatrix(fragId, new THREE.Matrix4()); // 恢复构件位置时 viewer.getFragmentList().setMatrix(fragId, initialMatrix); viewer.impl.invalidate(true);
多次平移场景的注意事项
- 每次执行新的平移操作前,无需重复备份初始矩阵,
model.originalTransform会始终保留模型加载时的原始状态。 - 如果需要在多次平移操作中切换不同位置,可以额外存储每次平移后的变换矩阵,实现多状态切换。
内容的提问来源于stack exchange,提问作者Igor Barcelos
相关产品推荐
相关产品推荐

