Autodesk Forge Viewer:如何获取文档

Autodesk Forge Viewer : how to get document

我正在尝试获取转换后的 rvt 文件附带的所有 2d 和 3d 模型的列表。

看看旧的 example : LmvNavTest 他们做了类似的事情来访问 "document" rootItem

Autodesk.Viewing.Document.load(fullUrnStr, function(document) {
    _loadedDocument = document; // keep this in a global var so we can reference it in other spots

        // get all the 3D and 2D views (but keep in separate arrays so we can differentiate in the UX)
    _views3D = Autodesk.Viewing.Document.getSubItemsWithProperties(document.getRootItem(), {'type':'geometry', 'role':'3d'}, true);
    _views2D = Autodesk.Viewing.Document.getSubItemsWithProperties(document.getRootItem(), {'type':'geometry', 'role':'2d'}, true);

据我了解,现在首选的方法是使用 loadModel

oViewer =new Autodesk.Viewing.Private.GuiViewer3D ($("#viewerContainer") [0], {}) ;
oViewer.loadModel (url , [],  onLoadSuccess, onLoadFail) ;

如果我以 loadModel 方式执行此操作,我将如何访问文档以便调用其 getSubItemsWithProperties 方法

您问问题的方式有点令人困惑,如果您对离线加载或不加载的内容不是很明确,则很难理解您的工作流程。

以下是我认为可能的两种情况:

1/ 您使用 URN 从 Autodesk Cloud 在线加载模型:在这种情况下,您需要先调用 Autodesk.Viewing.Document.load,这个调用实际上会 return 显示数据,从那里你可以使用 Autodesk.Viewing.Document.getSubItemsWithProperties[= 检索 3D 和 2D 可视项目38=] 正如你所指出的。一旦您以编程方式或通过用户交互选择了要在查看器中加载的路径,您可以使用 viewer.loadModel(_views2D[idx])

2/ 你已经在本地下载了整个模型包,在这种情况下你应该已经知道现有的 2D 和 3D 视图是什么,因为你有一些逻辑已经解析了资源并存储了每个可视视图。通常,您需要将此信息存储在 .json 或类似文件中。

在那种情况下你不需要使用Autodesk.Viewing.Document.load,你可以直接使用viewer.loadModel('path/of/the/view/you want to load on your local disk')

模型离线后,就无法"know"现有视图是什么,除非您的代码创建了包含此数据的 .json。

查看这篇文章,了解有关如何以编程方式提取与已翻译 Forge 模型关联的资源的更多详细信息:Forge SVF Extractor in Node.js

希望这能澄清事情,如果您有不同的情况,请解释您是如何进行的。