【问题标题】:Cannot load SVF2 model in Autodesk Forge Viewer无法在 Autodesk Forge Viewer 中加载 SVF2 模型
【发布时间】:2021-02-10 16:44:27
【问题描述】:

我刚刚试用了 SVF2 公测版,但无法将模型加载到查看器中。我相信模型已成功翻译,因为返回的清单具有:

"name": "XXXX_ARC.nwd",
"progress": "complete",
"outputType": "svf2",
"status": "success"

但是,当我尝试在 Viewer 中加载模型时,它会在这一行失败:

theViewer.loadModel(svfURL, onItemLoadSuccess, onItemLoadFail);

svfURL 是这样的:

https://cdn.derivative.autodesk.com/modeldata/file/urn:adsk.fluent:fs.file:autodesk-360-translation-storage-prod/*MyURN*/output/otg_files/0/output/0/otg_model.json

我从 Chrome 浏览器得到的错误: 403 GET errors。好像我没有访问模型的权限?

我需要做一些额外的设置吗?

其他信息:
我已将 Viewer 环境设置如下:

var options = {
    env: 'MD20ProdUS',
    api: 'D3S',
    getAccessToken: getForgeToken
};

var documentId = 'urn:' + urn;

Autodesk.Viewing.Initializer(options, function onInitialized() {
    var htmlDiv = document.getElementById('forgeViewer');
    var config3d = {
      extensions: ['ToolbarExtension', 'HandleSelectionExtension', .....a few extensions ],
      loaderExtensions: { svf: "Autodesk.MemoryLimited" }
    };
    
    theViewer = new Autodesk.Viewing.GuiViewer3D(htmlDiv, config3d);
    var startedCode = theViewer.start();
    if (startedCode > 0) {
        console.error('Failed to create a Viewer: WebGL not supported.');
        return;
    }
    Autodesk.Viewing.Document.load(documentId, onDocumentLoadSuccess, onDocumentLoadFailure);
});

我也尝试在创建查看器时删除config3d,但它仍然返回相同的消息。代码进入onDocumentLoadSuccess,但在theViewer.loadModel(svfURL, onItemLoadSuccess, onItemLoadFail);失败,跳转到onItemLoadFail

【问题讨论】:

    标签: autodesk-forge autodesk-viewer autodesk-model-derivative


    【解决方案1】:

    因为你提到的主要是查看器没有加载SVF2,我可以怀疑你可能没有指定正确的查看器环境。

    这是一些示例代码,请注意您必须设置 env 和 API 的选项:

    var viewer;
    var options = {
      // These are the SVF2 viewing settings during public beta
      env: 'MD20ProdUS', // or MD20ProdEU (for EMEA)
      api: 'D3S', 
      getAccessToken: getForgeToken
    };
    var documentId = 'urn:' + getUrlParameter('urn');
    
    // Run this when the page is loaded
    Autodesk.Viewing.Initializer(options, function onInitialized() {
      // Find the element where the 3d viewer will live.    
      var htmlElement = document.getElementById('MyViewerDiv');
      if (htmlElement) {
        // Create and start the viewer in that element    
        viewer = new Autodesk.Viewing.GuiViewer3D(htmlElement);
        viewer.start();
        // Load the document into the viewer.
        Autodesk.Viewing.Document.load(documentId, onDocumentLoadSuccess, onDocumentLoadFailure);
      }
    });

    【讨论】:

    • 感谢您的信息。我编辑了我的问题,提供了有关如何设置 Viewer 环境的其他信息,这与您所拥有的环境相似,但它仍然返回相同的 403 错误消息。
    • 好的,感谢您的更新。我再次测试,在一种情况下我看到了 404(不是 403)。所以我进一步调查,似乎本周早些时候我们可能遇到了一个小水桶问题。能否请您使用新存储桶重试,再次上传模型,然后测试 SVF2 翻译?请让我知道情况如何。目前在我的测试中,它似乎已解决。您的查看器代码对我来说看起来不错。感谢您提供它。谢谢
    • 我创建了一个新存储桶并进行了 SVF2 翻译,但在查看器中加载 SVF2 时仍然返回相同的错误消息。当我更改为请求 SVF 版本时,模型加载正常。我还能做些什么来试错?
    • 很抱歉给您带来麻烦。我会询问工程团队是什么导致了您的问题。
    • 好的,您能提供 URN(以确保我们看到的是正确的)以及从浏览器导出的 HAR 吗? HAR 是 HTTP 存档,可以按照以下示例说明导出:knowledgebase.paloaltonetworks.com/… HAR 文件可以帮助我们的产品团队查看您的客户端上发生的情况。在“刷新页面并允许 记录浏览器-网站交互”步骤中,确保在该步骤中加载 SVF2。如果您愿意,可以将其发送至 forge.help@autodesk.com 并提及“kevin vandecar”
    【解决方案2】:

    我也面临同样的问题。

    1. 虽然模型已经转为SVF2格式,但是我的云积分已经用完了。 清单摘录:

           "name": "7085-33cc-9464.rvt",
           "progress": "complete",
           "outputType": "svf2",
           "status": "success"
      
    2. 无论使用哪种设置,查看器中都只加载 SVF 格式。 我没有从查看器收到错误消息,一切正常,除了 SVF 仍然加载而不是 SVF2。 查看器初始化选项:

       const viewerEnv = await this.initialize({
         //env: dbModel.env,
      
         env: "MD20ProdEU",
         api: "D3S",
         //accessToken: "",
       });
      

    【讨论】:

      【解决方案3】:

      不确定这是否已在单独的线程上解决,但问题可能是options 中没有为loadModel() 设置acmSessionId - 请参阅https://forge.autodesk.com/blog/403-error-when-trying-view-svf2

      function onDocumentLoadSuccess(doc) {
        let items = doc.getRoot().search({
          'type': 'geometry',
          'role': '3d'
        }, true)
      
        let url = doc.getViewablePath(items[0])
      
        viewer.loadModel(url, { acmSessionId: doc.getAcmSessionId(url) })
      }
      

      最好只使用loadDocumentNode() 而不是loadModel()

      【讨论】:

        猜你喜欢
        • 2020-01-06
        • 2020-11-24
        • 2022-01-02
        • 2021-04-17
        • 2021-05-27
        • 2020-09-30
        • 2021-10-02
        • 2021-09-18
        • 2021-12-27
        相关资源
        最近更新 更多