将内置扩展按钮应用于自定义工具栏

Apply built-in extension buttons to custom toolbar

我正在寻找一种在另一个工具栏中显示 forge-viewer 内置扩展按钮的方法。 例如。 Autodesk.DocumentBrowserAutodesk.LayerManager.

我找到了一种方法,通过在 Autodesk.Viewing.UI.ControlGroup.Event.CONTROL_ADDED 事件中询问控件 ID,将控件按钮添加到自定义工具栏,从原始工具栏中删除控件并将其添加到 anthoer。 但是当我这样做时,控制按钮的一些功能不再可用。

例如当我在另一个工具栏中加载 Autodesk.DocumentBrowser 时,我可以像往常一样使用它。但是在切换可视项之后,控制按钮将永远保持激活状态。按下按钮后面板切换,但按钮保持激活状态。

我也尝试将选项传递给此方法,但这不会影响任何东西:

viewer.loadExtension("Autodesk.DocumentBrowser",{parentControl:"custom-toolbar"})

有没有更好的方法来实现这个?有什么想法吗?

不幸的是,内置的查看器扩展没有提供任何关于应该将它们的按钮添加到哪个工具栏的配置。此外,扩展通常会在整个代码中引用主工具栏 (this.viewer.toolbar),因此即使您手动将它们的按钮移至另一个工具栏,您也很可能会开始 运行 各种奇怪的行为。

我认为最安全的方法是完全创建新的工具栏按钮,并尝试尽可能多地重用扩展的功能。例如,对于 Autodesk.DocumentBrowser 扩展,您可以尝试将 class 子 DocumentBrowser class,并覆盖它在内部使用的 UiController 对象以添加工具栏 UI。当然,这将需要或多或少的努力,具体取决于扩展的实现方式。