从 Forge 查看器的上下文菜单中删除项目

Removing items from context menu in Forge viewer

我想从 V.7.38 添加的上下文菜单中删除 显示属性 项,并保留菜单中的其他选项。

虽然我可以删除旧选项,例如 隔离或隐藏所选内容,但我无法从中删除显示属性菜单。

viewer.registerContextMenuCallback('id', function (menu, st) {
    //remove the item from menu
})

此代码示例适用于旧选项。有没有其他方法可以删除 Show properties 等新添加的选项? 谢谢

由于以下两个原因,今天删除特定菜单项有点棘手:

  1. 不同的查看器扩展程序可能会在 之前或 您的回调之后注册它们自己的菜单回调。

  2. 当查看器遍历所有要执行的菜单回调时,它只使用 for (const callbackId in viewer.contextMenuCallbacks) { ... }(其中 contextMenuCallbacks 是一个 JavaScript 对象),它意味着执行顺序是不确定的。

对于“显示属性”菜单项,该菜单项由名为 propertiesmanager 的上下文菜单回调添加,由名为 Autodesk.PropertiesManager 的内置查看器扩展添加。话虽如此,有几个选项可以删除菜单条目,例如:

  • 使用 viewer.unregisterContextMenuCallback('propertiesmanager')
  • 删除 propertiesmanager 菜单回调
  • 尝试尽可能晚地注册您自己的菜单回调,以增加在 propertiesmanager 回调之后调用它的机会,因此它可以删除运行时“显示属性”;我能够通过在 Autodesk.Viewing.GEOMETRY_LOADED_EVENT 之后注册我自己的菜单回调来实现这一点,但同样,我不能保证这将始终有效,因为对象键的枚举(在上面的第 2 点)是不确定的。
  • 修改 Autodesk.PropertiesManager 扩展的行为,例如,修改其处理菜单回调的 _onContextMenu 方法;虽然这很老套...