存储在BIM360文档中的Revit模型的模型导数转换

时间:2019-11-01 04:25:13

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

我正在开发一个应用程序,以使用数据管理和模型衍生API将已经发布到云中的Revit模型转换为IFC格式,并且遇到了模型衍生API的两个关键问题。

1。模型衍生翻译问题:

我遇到了翻译失败的错误,该错误也在其他线程中弹出 Model Uploader Error The file is not a Revit file or is not a supported version

code:"Revit-UnsupportedFileType"
message:"<message>The file is not a Revit file or is not a supported version.</message>"
type:"error"
code:"TranslationWorker-RecoverableInternalFailure"
message:"Possibly recoverable warning exit code from extractor: -536870935"
type:"error

但是我的案子有些特殊,其他答案不适用。由于Revit版本不正确(显然,翻译可能适用于2016年版本,但不适用于2019年版本),或者在文件上载期间损坏,以前的案例失败了。这不适用于我,因为从该模型的.rvt到.svf转换成功,只有我的.rvt到.ifc转换失败,而且我没有通过应用上传,而是访问了BIM360文档中已经存在的文件。

此行为的另一个奇怪的部分是,.rvt->。ifc转换对于同一模型的早期版本已成功完成。这使我相信,可能存在文件大小问题,其中模型的最新版本太大而无法翻译,尽管我在模型衍生文档中没有找到文件大小的限制。

2。模型衍生下载问题:

要先通过我的服务器下载翻译后的文件,然后再从服务器下载到客户端,才能使用三足式OAuth令牌,这意味着必须两次下载同一文件(一次从数据管理api端点下载到服务器) ,其次是从服务器到客户端)。这对于大型模型是有问题的。 目前,我的解决方案是仅将三足的OAuth令牌和文件URI传递给客户端,并使请求直接从客户端传递到Autodesk端点,尽管我认为这是一种不好的做法。

我还没有发现任何包含此下载终结点的示例,NodeJS对我而言将是最佳选择。另外,我希望在此端点上附加一个内容长度标头,以更好地了解下载进度。

我的问题的相关端点都在这里: https://forge.autodesk.com/en/docs/model-derivative/v2/tutorials/translate-source-file-to-obj/

翻译:

curl -X 'POST' -H 'Authorization: Bearer WmzXZq9MATYyfrnOFpYOE75sL5dh' -H 'Content-Type: application/json' -v 'https://developer.api.autodesk.com/modelderivative/v2/designdata/job' -d
'{
  "input": {
    "urn": "dXJuOmFkc2sub2JqZWN0czpvcy5vYmplY3Q6bW9kZWxkZXJpdmF0aXZlL0E1LmlhbQ"
  },
  "output": {
    "formats": [
      {
        "type": "obj"
      }
    ]
  }
}'

注意:我已经使用“ type”:ifc而不是“ type”:obj作为此端点上的输出格式;那不是问题。

验证:

curl -X 'GET' -H 'Authorization: Bearer RWLzh098vuF3068r73FI7nF2RORf' -v 'https://developer.api.autodesk.com/modelderivative/v2/designdata/dXJuOmFkc2sub2JqZWN0czpvcy5vYmplY3Q6bW9kZWxkZXJpdmF0aXZlL0E1LmlhbQ/manifest'

下载:

curl -X 'GET' -H 'Authorization: Bearer RWLzh098vuF3068r73FI7nF2RORf' -v 'https://developer.api.autodesk.com/modelderivative/v2/designdata/dXJuOmFkc2sub2JqZWN0czpvcy5vYmplY3Q6bW9kZWxkZXJpdmF0aXZlL0E1LmlhbQ/manifest/urn%3Aadsk.viewing%3Afs.file%3AdXJuOmFkc2sub2JqZWN0czpvcy5vYmplY3Q6bW9kZWxkZXJpdmF0aXZlL0E1LmlhbQ%2Foutput%2Fgeometry%2Fbc3339b2-73cd-4fba-9cb3-15363703a354.obj'

1 个答案:

答案 0 :(得分:0)

  

意味着必须下载两次相同的文件(一次是从数据管理api端点下载到服务器,其次是从服务器到客户端)。这对于大型模型是有问题的。

尝试在后端中设置代理服务以中继用户请求,并指导他们获取派生工具并将令牌注入其标头中,这样令牌就不会暴露给客户端,因此文件不必实际放在您的后端作为中间对象-请参见here以获取示例。

一旦到达第一个问题的底部,就会更新此答案。