首页 > 解决方案 > 从 Forge 查看器的上下文菜单中删除项目

问题描述

我想从添加 V.7.38 的上下文菜单中删除Show Properties项目,并在菜单中保留其他选项。

虽然我可以删除旧选项,如Isolate 或 Hide selected,但我无法从菜单中删除Show Properties 。

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

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

标签: autodesk-forgeautodesk-viewer

解决方案


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

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

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

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

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

推荐阅读