Autodesk Forge 数据管理参考 API 未列出 Revit 参考

Posted

技术标签:

【中文标题】Autodesk Forge 数据管理参考 API 未列出 Revit 参考【英文标题】:Autodesk Forge Data Management References API does not list Revit References 【发布时间】:2021-10-05 01:51:07 【问题描述】:

我的目标是使用设计自动化 API 计算 Revit 模型。 Revit 模型托管在 BIM360 文档 上。 Revit 模型包含其他模型的链接/参考。这些引用是在 Revit 中创建的,并且都引用了同样托管在 BIM360 文档上的模型。

为了将工作项提交给设计自动化 API,我需要知道所有引用的文件。这被描述为here。

但是,当我查询数据管理 API FORGE_HOST/data/v1/projects/:project/versions/:version/relationships/refs 的引用端点时,我得到一个空数据对象。

我本来希望得到引用项目的版本。

建议的工作流程似乎是使用 BIM360 文档前端中的“上传链接文件”功能将文件上传到 BIM360,请参阅this blog post。这样做,我确实使用上述引用端点获得了引用。但是,这不适用于我们的组织和工作流程,因为在规划阶段添加了越来越多的参考资料。而且,有些文件相互引用,使用“上传链接文件”功能也无法实现。博客中还提到了链接文件的 forge API,但我们不想使用 forge API 手动链接模型,而是想使用 Revit 提供的功能。

如何为已使用 Revit 中的引用链接的 Revit 文件提取/查询 Revit 引用?

【问题讨论】:

我认为您需要使用 Autodesk Desktop Connector 应用程序上传文件以确保正确设置这些参考。 感谢 @AlbertSzilvasy 对 Autodesk Desktop Connector 的提示。 Autodesk Desktop Connector 是否支持将 BIM360 Revit 模型相互链接(所有模型都托管在 BIM360 上,而不是一些在本地,一些在云端) 【参考方案1】:

更新

现在情况变了。要使用 Forge 数据管理 API 获取 Revit 参考,模型需要与以下内容匹配:

Revit Could Workshared models(C4R) Cloud Models for Revit 通过BIM360 Docs'Upload Linked Files上传主机和链接 在我的博客BIM360 Docs: Setting up external references between files (Upload Linked Files) 之后使用 Forge DM 设置参考

参考:https://knowledge.autodesk.com/support/revit-products/troubleshooting/caas/sfdcarticles/sfdcarticles/Collaboration-for-Revit-Local-links-not-visible-on-the-cloud.html

如果您的 Revit 模型是上述任一模型,则 Revit API 方式是另一种选择。在运行您提到的设计自动化工作项之前,您可以编写一个在 Revit Desktop 上运行的 Revit 插件来读取 Revit 链接数据。

===========

Autodesk Desktop Connector 将是设置引用的最佳选择,而无需使用我在博客中分享的 upload linked files 或 Forge DM API。

如果您只想转储链接信息,我们可以利用 Revit API 来执行此操作。这是给你的代码sn-p。 (在 Forge Design Automation API for Revit 上运行之前,TaskDialog.Show 需要删除)

https://thebuildingcoder.typepad.com/blog/2019/06/accessing-bim360-cloud-links-thumbnail-and-dynamo.html

  // Obtain all external resource references 
  // (saying BIM360 Cloud references and local 
  // file references this time)

  ISet<ElementId> xrefs = ExternalResourceUtils
    .GetAllExternalResourceReferences( doc );

  string caption = "BIM360 Links";

  try
  
    int n = 0;
    var msg = string.Empty;

    foreach( ElementId eid in xrefs )
    
      var elem = doc.GetElement( eid );
      if( elem == null ) continue;

      // Get RVT document links only this time

      var link = elem as RevitLinkType;
      if( link == null ) continue;

      var map = link.GetExternalResourceReferences();
      var keys = map.Keys;

      foreach( var key in keys )
      
        var reference = map[key];

        // Contains Forge BIM360 ProjectId 
        // (i.e., LinkedModelModelId) and 
        // ModelId (i.e., LinkedModelModelId) 
        // if it's from BIM360 Docs. 
        // They can be used in calls to
        // ModelPathUtils.ConvertCloudGUIDsToCloudPath.

        var dictinfo = reference.GetReferenceInformation();

        // Link Name shown on the Manage Links dialog

        var displayName = reference.GetResourceShortDisplayName();
        var path = reference.InSessionPath;
      

      try
      
        // Load model temporarily to get the model 
        // path of the cloud link

        var result = link.Load();

        // Link ModelPath for Revit internal use

        var mdPath = result.GetModelName();

        link.Unload( null );

        // Convert model path to user visible path, 
        // i.e., saved Path shown on the Manage Links 
        // dialog

        var path = ModelPathUtils
          .ConvertModelPathToUserVisiblePath( mdPath );

        // Reference Type shown on the Manage Links dialog

        var refType = link.AttachmentType;

        msg += string.Format( "0 1\r\n", 
          link.AttachmentType, path );

        ++n;
      
      catch( Exception ex ) // never catch all exceptions!
      
        TaskDialog.Show( caption, ex.Message );
      
    

    caption = string.Format( "0 BIM360 Link1", 
      n, Util.PluralSuffix( n ) );

    TaskDialog.Show( caption, msg );
  
  catch( Exception ex )
  
    TaskDialog.Show( caption, ex.Message );
  

【讨论】:

感谢您的快速回复。那么我是否正确理解我们需要在 Revit 中设置参考并使用桌面连接器来设置参考?我不确定这是否真的适合我们,但我们会试一试。 另外感谢您提供的代码 sn-p,它将使用设计自动化 API 转储链接信息。但是,这对我们不起作用,因为我们在使用设计自动化 API 之前需要这些信息(我们希望在工作项请求中提供链接信息)。没有提供 Revit 参考信息的 API(BIM360/数据管理/模型衍生)吗? 我在上面更新了我的答案。如果您的模型配置了这 3 种列出的方法,那么您可以使用 Data Management (Docs) 获取参考信息。 谢谢陈奕迅!您的链接帮助了我们,我们现在可以从 versions/:version/relationships/refs API 中获取参考(使用 C4R 模型和参考中解释的发布/链接工作流程)

以上是关于Autodesk Forge 数据管理参考 API 未列出 Revit 参考的主要内容,如果未能解决你的问题,请参考以下文章

Autodesk Forge 数据管理 API

数字孪生 Autodesk Forge

Autodesk Forge API 上传文件

Autodesk Forge 模型衍生 API:在 Autodesk Forge 衍生子项中找不到“图形”角色

Autodesk API Forge身份验证承载

在 Autodesk forge 中选择的项目中获取不同的 3d 视图