【问题标题】:Removing items from context menu in Forge viewer从 Forge 查看器的上下文菜单中删除项目
【发布时间】:2021-09-13 09:12:21
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: autodesk-forge autodesk-viewer


    【解决方案1】:

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

    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方法;虽然这很 hacky...

    【讨论】:

    • 非常感谢您的详细回答。删除上下文菜单回调propertiesmanager 是否会是一个很大的妥协,只是它在右键单击时显示属性?这个回调还有其他职责吗?
    • 据我所见,propertiesmanager 回调所做的唯一事情就是添加“显示属性”菜单项,因此您只需删除回调就可以了。
    猜你喜欢
    • 1970-01-01
    • 2010-12-14
    • 1970-01-01
    • 1970-01-01
    • 2020-03-14
    • 1970-01-01
    • 2018-09-14
    • 1970-01-01
    • 2021-12-16
    相关资源
    最近更新 更多