# 监听事件
在本教程中,你可以通过BIMFACE提供的Event相关类对指定的事件进行监听。
# 教程
事件监听机制是指当指定的某一事件发生时,通知对应的事件监听器,触发执行相应的代码。在系统开发中,离不开各种事件的应用。基于不同的应用开发场景,对不同的事件进行监听,可以在事件的回调函数中处理相应的业务逻辑。
# 事件相关类
为了满足更多开发需求,我们提供了多套监听事件类。
Viewer3DEvent (opens new window):三维模型场景相关的监听事件。包括相机位置发生变化事件、鼠标点击事件、模型数据加载完成事件、楼层爆炸事件等。
ViewerDrawingEvent (opens new window):图纸模型相关的监听事件。包括鼠标点击事件、图元点击事件、鼠标悬停事件等。
ViewerGISEvent (opens new window):GIS场景相关的监听事件。包括场景加载完成事件、图层加载完成事件、鼠标点击事件等。
WebApplication3DEvent (opens new window):三维模型应用相关的监听事件。包括工具栏按钮点击事件、主视图点击事件。
WebApplicationDrawingEvent (opens new window):图纸应用相关的监听事件。包括缩放比例变化事件等。
WebApplicationGISEvent (opens new window):GIS场景应用相关的监听事件。包括图层树点击事件等。
MeasureEvent (opens new window):测量相关的监听事件。包括测量完毕事件和测量中事件。
SectionBoxEvent (opens new window):剖切盒相关的监听事件。包括剖切盒变化事件。
ExternalObjectEditorToolbarEvent (opens new window):外部构件编辑器工具条相关的监听事件。包括编辑功能切换事件、退出编辑器事件。
# 绑定监听事件
了解事件相关类后,你就可以基于实际需要绑定不同的监听事件。接下来我们以鼠标单击事件为例,展示如何添加监听事件。
// 在viewer3D下绑定监听事件,其中传入的回调函数为事件发生后被触发的处理函数
viewer3D.addEventListener(Glodon.Bimface.Viewer.Viewer3DEvent.MouseClicked,getCamera);
// 定义监听事件的处理函数
function getCamera() {
// 在控制台输出相机位置信息
console.log(viewer3D.getCameraStatus());
}
完成鼠标点击事件的绑定后,运行代码就可以看到,单击鼠标时,控制台就会输出当前相机的位置信息。
# 移除监听事件
若不再需要对事件进行监听,可以通过移除监听事件的接口取消监听。
// 移除监听事件
viewer3D.removeEventListener(Glodon.Bimface.Viewer.Viewer3DEvent.MouseClicked,getCamera);
# 不同事件的区别
在Viewer3DEvent (opens new window)中,存在两种加载完毕事件:ViewAdded和ModelAdded。前者监听3D场景加载完毕事件,即只监听第一个模型的加载完毕事件。后者监听场景中的每个模型的加载完毕事件。
在ViewerGISEvent (opens new window)中,也存在两种加载完毕事件:SceneAdded和LayerAdded,分别对应GIS场景初始化完毕和图层初始化完毕事件。前者表示GIS场景初始化完成,包括场景的引擎数据以及地图数据初始化完成,不关注场景中的其他图层数据加载情况。后者监听场景中的图层初始化完成,每一图层的瓦片数据、业务数据等初始化完成均会触发图层初始化完毕事件。需要注意的是,GIS场景的数据加载方式为按需加载,所以数据初始化完成不代表模型全部加载显示。