是否有某种方法可以从内部选择事件侦听器回调中调用
viewer.select([...])
而不触发Autodesk.Viewing.SELECTION_CHANGED_EVENT
?
以下代码当前会导致无限循环,因为
viewer.select(...)
会触发 Autodesk.Viewing.SELECTION_CHANGED_EVENT
。 SetTimeout(...)
调用只是为了防止调用堆栈溢出。
viewer.addEventListener(Autodesk.Viewing.SELECTION_CHANGED_EVENT, () => {
setTimeout(
() =>
viewer.select(
[
...new Set([
...itemsThatShouldRemainSelected,
...viewer.getSelection(),
]),
],
undefined,
-1,
),
100,
);
console.log('SELECTION_CHANGED_EVENT');
});
我也有这样的案例。
我们想要预定义的选择集。例如选择所有门,选择前门...
我们希望用户能够从这些集合中进行选择,并通过
viewer.select()
功能让它们在表格中突出显示,同时仍然允许通过查看器本身进行选择
每次突出显示查看器中的新对象时,我们都希望获取存储在外部数据库中的一些附加信息
棘手部分:由于我们的应用程序的工作方式,当从选择集进行操作时,我们必须首先查找匹配的viewerIds/dbIds,然后再将它们添加到通过
viewer.select()
突出显示的选定查看器项目中。同时,通过查看器直接选择的项目需要使用viewerIds/dbIds来查找相关数据(相反的操作)。这是通过 SELECTION_CHANGED_EVENT
处理程序处理的。
问题是调用
viewer.select()
函数总是会触发SELECTION_CHANGE_EVENT
。因此,我们最终不得不执行更多额外的逻辑来确定触发事件的来源。最好是有一种方法可以调用 viewer.select()
,同时防止 SELECTION_CHANGE_EVENT
。这样的事情可能吗?
亲切的问候