在 Forge Viewer 里有两个监听选择集变动的事件能够在鼠标选中或未选中构件时与 Viewer 交互,一个是单模型模式下使用的 Autodesk.Viewing.SELECTION_CHANGED_EVENT
,另外一个则是多模型模式下使用的 Autodesk.Viewing.AGGREGATE_SELECTION_CHANGED_EVENT
,这两个事件都是 Viewer
的鼠标交互事件,二者虽都是在鼠标点击时会被触发,但二者的回调函数(Callback Function)接受的参数很不同,如下以代码的方式来讲明二者的不一样:node
1、 二者相同的部份 - 事件监听数组
// 单模型的选择集变动事件的监听方式 viewer.addEventListener( Autodesk.Viewing.SELECTION_CHANGED_EVENT, //!<<<< 事件名称 function( event ) { //!<<<< 回调函数(匿名函数) console.log( event ); }); // 多模型的选择集变动事件的监听方式 viewer.addEventListener( Autodesk.Viewing.AGGREGATE_SELECTION_CHANGED_EVENT, //!<<<< 事件名称 function( event ) { //!<<<< 回调函数(匿名函数) console.log( event ); });
2、二者不一样的部份 - 回调函数接收的参数结构函数
// 单模型的选择集变动事件回调函数接收到的参数结构,也就是上面 event 变量是一个物件(Object)长像这个样子: var event = { fragIdsArray //!<<<< 已选中构件的 mesh id dbIdArray //!<<<< 已选中构件的 dbId nodeArray //!<<<< 已选中构件的 dbId model //!<<<< 当前选中构件所属的 RenderModel }; // 多模型的选择集变动事件回调函数接收到的参数结构是上面单模型状况的 Object 数组: var event = [ { fragIdsArray1, //!<<<< 在第一个 model 里已选中构件的 mesh id dbIdArray1, //!<<<< 在第一个 model 里已选中构件的 dbId nodeArray1, //!<<<< 在第一个 model 里已选中构件的 dbId model1, //!<<<< 已选中的第一个 model }, { fragIdsArray2, //!<<<< 在第二个 model 里已选中构件的 mesh id dbIdArray2, //!<<<< 在第二个 model 里已选中构件的 dbId nodeArray2, //!<<<< 在第二个 model 里已选中构件的 dbId model2, //!<<<< 已选中的第二个 model }, . . . . . ];