【问题标题】:How can I find Revit document derivatives URNs in BIM360 Docs using the Forge Data Management API如何使用 Forge Data Management API 在 BIM360 Docs 中找到 Revit 文档衍生 URN
【发布时间】:2022-01-12 10:26:12
【问题描述】:

我有一些 Revit 文件存储在 BIM360 项目中。我正在尝试在 Forge Viewer 中可视化这些文件。现在 Forge Viewer 不能直接处理 Revit 文件/文档,但需要 'svf' 格式的翻译文件的 'urn'。

我可以使用 Forge Model Derivative API 将我的 Revit 文件转换为“svf”文件,但这会消耗一些积分,而且我不应该这样做,因为在将 Revit 文件上传到 BIM360 时,翻译是已经发生了。

那时我想知道,如何找出 Revit 文档的底层“svf”文件的“urn”? 我发现很少有资源在那里提供帮助,当浏览我的 BIM360 文件夹的内容,或使用 Forge 数据管理 API 检查我的 Revit 文档的版本时,我应该能够访问响应中的派生对象,该对象代表可以是的派生模型Forge 查看器使用。 https://forums.autodesk.com/t5/bim-360-api-forum/connecting-forge-viewer-with-bim-360/td-p/6742779

但是对我来说,API 响应中没有衍生对象,请参见下面的 API 响应示例(出于安全目的,我对一些数据进行了混淆):

 {
                         "type":  "versions",
                         "id":  "urn:adsk.wipprod:fs.file:vf.XXXXXXXXXXXXXXXXXXXX?version=1",
                         "attributes":  "@{name=139200.33_Amenities Building_R21.rvt; displayName=139200.33_Amenities Building_R21.rvt; createTime=2021-09-03T04:24:18.0000000Z; createUserId=XXXXXXXXXX; createUserName=Holmes Consulting; lastModifiedTime=2021-09-03T04:28:02.0000000Z; lastModifiedUserId=XXXXXXXXXXXX; lastModifiedUserName=XXXXXXXXXX; versionNumber=1; storageSize=19808256; fileType=rvt; extension=}",
                         "links":  "@{self=; webView=}",
                         "relationships":  "@{item=; links=; refs=; downloadFormats=; derivatives=; thumbnails=; storage=}"
                     },

我正在使用上面提供的链接中使用的 API 调用:https://developer.api.autodesk.com/data/v1/projects/:project_id/folders/:folder_id/contents

为什么我的回复包含这么少的数据?

【问题讨论】:

    标签: autodesk-forge autodesk-viewer autodesk-model-derivative autodesk-bim360 autodesk-data-management


    【解决方案1】:

    请在relationships.data.derivatives的id值中查找。例如,

    "derivatives": {
        "data": {
            "type": "derivatives",
            "id": "dXJuOmFkc2sud2lwcHJvZDpmcy5maWxlOnZmLkVueWtrU3FjU0lPVTVYMGhRdy1mQUM_dmVyc2lvbj0x"
        },
        // ...
    },
    

    或检查这一行:https://github.com/Autodesk-Forge/learn.forge.viewhubmodels/blob/nodejs/routes/datamanagement.js#L155

    const viewerUrn = (version.relationships != null && version.relationships.derivatives != null ? version.relationships.derivatives.data.id : null);
    

    【讨论】:

    • 谢谢@Eason Kang。然而,正如我在问题中提到的,我已经发现我需要找到衍生品。但在我的情况下它是空的,所以我没有什么可以访问的。
    • 好吧……我误解了你的意思。如果是,是 Revit 云工作共享模型还是云模型?如果它的第一个版本不包含预期的衍生版本,则需要检查版本 2 或 3。
    • 以防万一,您的模型不是云模型或云工作共享模型。请在此处预订会议以快速浏览:forge.autodesk.com/zh-hans/node/1672
    【解决方案2】:

    首先感谢陈奕迅的贡献。

    由于我的衍生对象是空的,我尝试直接使用我的对象版本的“瓮”。

    当使用我的问题中提到的文件夹获取内容 API 方法列出我的所有文件夹文档时,我会在“数据”项数组中获取所有文档,并在“包含”版本数组中获取它们的所有版本。我们需要使用文档版本 id 来构建 urn。请参阅下面的示例:

     "included":  [
                         {
                             "type":  "versions",
                             "id":  "urn:adsk.wipprod:fs.file:vf.l9pc9re6QOmeEVHvTCTlIQ?version=1",
                             "attributes":  "@{name=139200.33_Amenities Building_R21.rvt; displayName=139200.33_Amenities Building_R21.rvt; createTime=2021-09-03T04:24:18.0000000Z; createUserId=XXXXXX; createUserName=XXXXXXXX; lastModifiedTime=2021-09-03T04:28:02.0000000Z; lastModifiedUserId=XXXXXXXXXXXX; lastModifiedUserName=XXXXXXXXXXXX; versionNumber=1; storageSize=19808256; fileType=rvt; extension=}",
                             "links":  "@{self=; webView=}",
                             "relationships":  "@{item=; links=; refs=; downloadFormats=; derivatives=; thumbnails=; storage=}"
                         },
    

    现在必须对 id 进行 base64 编码。我正在使用 https://www.freeformatter.com/base64-encoder.html 对 id urn:adsk.wipprod:fs.file:vf.l9pc9re6QOmeEVHvTCTlIQ?version=1 进行编码。请注意,结果将是 dXJuOmFkc2sud2lwcHJvZDpmcy5maWxlOnZmLmw5cGM5cmU2UU9tZUVWSHZUQ1RsSVE/dmVyc2lvbj0,这在我的 JS 代码中无效,无法在 Forge 查看器中加载文档,因为 /.它需要替换为_。所以最终将我的文档加载到 Forge 查看器中的 JS 部分看起来像这样:

    var documentId = 'urn:dXJuOmFkc2sud2lwcHJvZDpmcy5maWxlOnZmLmw5cGM5cmU2UU9tZUVWSHZUQ1RsSVE_dmVyc2lvbj0x'; //139200.33_Amenities Building_R21.rvt
    
    Autodesk.Viewing.Initializer(options, function() {
    
        var htmlDiv = document.getElementById('forgeViewer');
        viewer = new Autodesk.Viewing.GuiViewer3D(htmlDiv);
        viewer.start();
        Autodesk.Viewing.Document.load(documentId, onDocumentLoadSuccess, onDocumentLoadFailure);
    
        function onDocumentLoadSuccess(viewerDocument) {
            // Choose the default viewable - most likely a 3D model, rather than a 2D sheet.
            var defaultModel = viewerDocument.getRoot().getDefaultGeometry();
            viewer.loadDocumentNode(viewerDocument, defaultModel);
        }
    
        function onDocumentLoadFailure() {
            console.error('Failed fetching Forge manifest');
        }    
    
    });
    

    【讨论】:

    • 我找到了一个更好的网站,它直接使用 Forge Viewer 需要的 URL 安全 Base64 编码作为输入:base64encode.org
    猜你喜欢
    • 2022-01-13
    • 2019-05-01
    • 2022-10-05
    • 2020-02-08
    • 2020-11-10
    • 2019-03-24
    • 2019-05-26
    • 2018-05-26
    • 2019-12-08
    相关资源
    最近更新 更多