autodesk-forge - 从 Forge 查看器的上下文菜单中删除项目
问题描述
我想从添加 V.7.38 的上下文菜单中删除Show Properties项目,并在菜单中保留其他选项。
虽然我可以删除旧选项,如Isolate 或 Hide selected,但我无法从菜单中删除Show Properties 。
viewer.registerContextMenuCallback('id', function (menu, st) {
//remove the item from menu
})
此代码示例适用于较旧的选项。还有其他方法可以删除新添加的选项Show properties
吗?谢谢
解决方案
由于以下两个原因,今天删除特定菜单条目有点棘手:
不同的查看器扩展可能会在您的回调之前或之后注册自己的菜单回调。
当查看器遍历所有要执行的菜单回调时,它只是简单地使用
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...
推荐阅读
- python - 使用 streamlit 绘图时,xticklabels 不会出现在图中
- postgresql - 删除打印语句和注释会破坏我的代码
- node.js - 如何使用 states.map 函数显示下拉列表?
- python - 更新类变量
- python - 从列表字典创建并连接数据框
- javascript - mocha如何执行目录下的测试文件?
- c - 处理多个 TCP 客户端
- javascript - Jquery 到 Vanilla Javascript 获取属性数据
- javascript - 如何在角度应用程序的文本区域中显示超链接
- javascript - 为什么继承的类比 pixi.js 上的实际精灵对象慢?