【问题标题】:Forge viewer should preserve selected Home viewForge 查看器应保留选定的主视图
【发布时间】:2018-06-13 15:13:19
【问题描述】:

当用户单击 3d 立方体右下角下拉箭头上的“将当前视图设置为主页”时,下次将模型加载到查看器中时,不会保留所选视图。它只为查看器中当前加载的会话保留。我们如何才能在加载之间保留此设置?

【问题讨论】:

  • 会不会是“家”是观看者的家方向,而不是模型?很明显,查看器没有在加载之间保留状态;也许您需要在浏览器中安装一个 cookie,以记录以前查看的模型的视图。

标签: autodesk-forge autodesk-viewer


【解决方案1】:

您可以使用localStorage 来存储您定义为“主页”的视图,并在新会话时重新加载该视图。类似的东西......:

localStorage.setItem('homeView', JSON.stringify(viewer.getState({viewport:true})))

// ...

var state = localStorage.getItem('homeView')

// restoreState (state, filter, immediate)
viewer.restoreState(JSON.parse(state), {viewport:true}, true)

viewer.autocam.setHomeViewFrom(viewer.navigation.getCamera()) 

当然,您也可以使用更高级的存储策略,例如使用数据库...

【讨论】:

  • 感谢您的回复。我们还想知道上传到 BIM360 的 Revit 和 CADmep 模型之间的不一致行为。似乎如果在 CADmep 中单击“将此视图设置为主页”按钮,则在模型发布后,它最初会将该视图加载到 Forge 查看器中,但是当它在 Revit 中设置时,它不会表现出这种行为。希望您对检测用户何时单击伪造查看器中的“将视图设置为主页”按钮有想法。我的想法是可能会为该链接向 DOM 添加第二个点击事件,但不知道是否已经有一个内置的钩子可以做到这一点。
  • Revit 和 Acad 转换器的实现方式不同,因此很遗憾,查看器中模型的行为可能会发生一些变化。如果您可以控制如何将模型上传到 Forge - 例如通过插件 - 那么我建议您将所需的主视图存储在侧面数据库中并在加载模型时默认恢复它,我知道这可能并不容易解决方法到位,但我目前没有看到更好的解决方案。
  • 关于您的第二个问题 - 没有 API 可以连接到“将此视图设置为主页”AFAIK。正如您建议的那样,用您自己的按钮替换按钮或将第二个处理程序附加到 DOM 元素似乎是最合适的。
【解决方案2】:

您可以做的事情是获取您希望查看器在重新加载时启动的当前视图的状态。下次加载时,可以使用从上一次调用中获得的 JSON 对象添加 restoreState,并且可以在 geometry_load_event 时触发它。

这是我所说的步骤。

像这样使用 viewer.getState 函数

JSON.stringify(viewer.getState())

如果您使用控制台日志或将其分配给变量,这将拥有一个完整的 JSON 对象,其中包含模型当前状态的所有信息。如果任何对象被隐藏,如果它是爆炸等等。

之后,您可以通过再次移动相机进行测试,然后使用以下命令将状态恢复到您尝试过的前一个状态。

viewer.restoreState(YOURSTATE)

如果您希望查看器以特定状态加载,则需要在 GEOMETRY_LOADED_EVENT 上传递该 restoreState 函数

你可以在这里找到我刚才提到的所有 3 个文档 https://developer.autodesk.com/en/docs/viewer/v2/reference/javascript/viewer3d/

【讨论】:

    猜你喜欢
    • 2018-07-16
    • 2021-06-13
    • 2019-09-25
    • 2017-01-09
    • 2020-10-27
    • 2018-03-23
    • 2019-11-06
    • 2021-07-14
    • 2021-11-12
    相关资源
    最近更新 更多