Forge Viewer缩放变化事件监听及当前缩放值获取方法
Forge Viewer 相机远近交互实现方案
可用的相机变化监听事件
Forge Viewer 没有单独提供专门的「缩放触发事件」,所有视角缩放、平移、旋转操作本质都是相机参数变更,直接监听通用相机变化事件即可覆盖所有拉远/拉近的操作场景:
- 绑定
Autodesk.Viewing.CAMERA_CHANGE_EVENT事件,只要相机位置、视场角、视距发生变动就会触发,完全满足你判断相机远近的触发时机需求
绑定示例代码:
viewer.addEventListener(Autodesk.Viewing.CAMERA_CHANGE_EVENT, () => { // 回调内执行视距判断、Sprite显隐逻辑 const viewDistance = getCurrentViewDistance(); handleSpriteVisibility(viewDistance); })
提示:该事件触发频率很高,实际使用建议加30~50ms的防抖,避免频繁操作Sprite造成页面卡顿。
当前视图缩放/视距取值方法
根据当前视图用的相机类型不同,取值逻辑分两种:
- 透视相机(默认3D视图最常用的相机模式):不存在独立的「缩放值」属性,直接计算相机位置到当前视角聚焦点的直线距离即可作为远近判断依据,数值越小代表相机离建筑越近
取值代码:function getCurrentViewDistance() { const camera = viewer.getCamera(); const cameraWorldPos = camera.position; const viewTargetPos = viewer.navigation.getTarget(); // 计算两点空间直线距离 return cameraWorldPos.distanceTo(viewTargetPos); } - 正交相机(多用于2D图纸、顶视图大场景浏览):可以直接取正交相机的视口高度作为缩放判断值,数值越大代表视角拉得越远
取值代码:function getOrthoViewScale() { const camera = viewer.getCamera(); if (!camera.isOrthographicCamera) return null; // 返回正交相机垂直方向视口尺寸 return camera.top - camera.bottom; }
实际开发时你可以提前测试好Sprite需要显示的距离阈值,在事件回调里判断当前视距:小于阈值就显示/创建对应Sprite,大于阈值就隐藏/移除Sprite即可。
内容的提问来源于stack exchange,提问作者M.A.T
相关产品推荐
相关产品推荐

