将链接的 Revit 模型上传到 Autodesk Forge

Uploading linked Revit models to Autodesk Forge

我一直在尝试使用 Post 引用 (https://developer.autodesk.com/en/docs/model-derivative/v2/reference/http/urn-references-POST/) 在 forge 中设置两个文件之间的引用,但是当我收到消息 "success" 作为结果时我在 forge viewer 上试了一下,即使我翻译了模型,我仍然可以单独看到文件。有人遇到过同样的问题吗?

如果没有看到您的代码,很难判断发生了什么。下面我复制了我的 bash 脚本代码,其中 references/translate 一个带有 material 和纹理的对象。

Au.obj
  +- Au.mtl
       +- Au.jpg

上传后,我得到了这些

  • idObj="urn:adsk.objects:os.object:cyrillejcrja/Au.obj"
  • idMtl="urn:adsk.objects:os.object:cyrillejcrja/Au.mtl"
  • idJpg="urn:adsk.objects:os.object:cyrillejcrja/Au.jpg"

设置引用的代码,现在

urn=$(xbase64encode $idObj)
job='{
    "urn": "'${idObj}'",
    "filename": "Au.obj",
    "references": [{
        "urn": "'${idMtl}'",
        "relativePath": "./Au.mtl",
        "filename": "Au.mtl",
        "references": [{
            "urn": "'${idJpg}'",
            "relativePath": "./Au.jpg"
        }]
    }]
}'
response=$(curl -H "Content-Type: application/json" \
    -H "Authorization: ${bearer}" \
    -X POST ${ForgeHost}/modelderivative/v2/designdata/${urn}/references \
    -k -s -d "${job}")

这里得到如下回复,仅表示引用已注册。

{
  "result": "success"
}

现在,我这样做是为了翻译 obj 并使用参考资料

urn=$(xbase64encode $idObj)
job='{
    "input": {
      "urn": "'${urn}'",
      "checkReferences": true
    },
    "output": {
      "formats": [
        {
          "type": "svf",
          "views": [
            "2d",
            "3d"
          ]
        }
      ]
    }
}'
response=$(curl -H "Content-Type: application/json" \
    -H  "Authorization: ${bearer}" \
    -H "x-ads-force: true" \
    -X POST ${ForgeHost}/modelderivative/v2/designdata/job \
    -k -s -d "${job}")

请注意 "checkReferences":正确,如文档所述 here

现在,我可以等待翻译完成并在查看器中查看结果。

参考上面用到的xbase64safeencode函数

function xbase64safeencode () { local id64=$(echo -ne  | base64  $wrap_arg | tr -d '=' | tr '+/' '-_'); echo $id64; }

@Cyrille,这是我的要求:

curl -X 'POST' -H 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsI' -H 'Content-Type: application/json' -v 'https://developer.api.autodesk.com/modelderivative/v2/designdata/{urn}/references' -d 
'{
  "urn": "urn:adsk.objects:os.object:bucket/non-existent.rvt",
  "filename": "",
  "references": [
    {
      "urn": "urn:adsk.objects:os.object:bucket/non-existent.rvt",
      "relativePath": "",
      "filename": ""
    }
  ]
}'

我得到的结果是:

'{
  "result": "success"
}'

关键是即使我在服务器上没有指定的文件,我也获得了成功,所以我建议很少进行服务器端验证,例如,当一个模型被翻译一次时我们不能设置为参考权所以它至少应该 return 一个错误。谢谢,希望对您有所帮助。