是否可以通过 Revit API 或 FORGE API 在 Revit 模型中加载新的 Cloud (BIM 360) 链接?

Posted

技术标签:

【中文标题】是否可以通过 Revit API 或 FORGE API 在 Revit 模型中加载新的 Cloud (BIM 360) 链接?【英文标题】:Is it possible to load new Cloud (BIM 360) links in a Revit model either through the Revit API or FORGE API? 【发布时间】:2020-04-21 12:34:34 【问题描述】:

我有一个由两部分组成的 WPF 应用程序和 Revit 插件,它们运行一系列例程以通过 FORGE BIM 360 API 创建和激活新的 BIM 360 项目,启动 Revit 并从“种子”Revit 模型。 主要要求是在此过程中实现零用户交互:完全自动化。

鉴于该背景,我无法将新保存的 BIM 360 模型相互关联。我可以选择在带有 Revit API 挂钩(首选)的 Revit Addin 中执行此操作,也可以在创建模型后通过带有 FORGE API REST 调用的管理器 WPF 应用程序执行此操作。

有两种可能吗?

我已成功链接到缓存的本地模型,如 here 和 here 所述。但是,这并不能完全满足要求,因为当任何其他用户(除了自动化机器用户)打开模型时,链接都找不到。

Screenshot of links Not Found.

当前的“工作排序”代码:

var wId = GetWorksetId(doc, w);
if (wId != null)

    string localPath = settings.CloudModels.Where(x => x.ModelName == _linkModelNames[i]).Select(x => x.LocalFilePath).First();
    ModelPath path = ModelPathUtils.ConvertUserVisiblePathToModelPath(localPath);

    using (var options = new RevitLinkOptions(true))
    
        using (var t = new Transaction(doc, w))
        
            t.Start();
            doc.GetWorksetTable().SetActiveWorksetId(wId);

            using (var result = RevitLinkType.Create(doc, path, options))
            
                _ = RevitLinkInstance.Create(doc, result.ElementId);
            

            t.Commit();
            linkPlaced++;
        
    

感谢this helpful tip,我能够通过 Revit API 获得正确的ModelPath。我可以将此值保存在我的插件中,关闭模型,然后在打开不同的模型后访问该属性(保存在上面代码 sn-p 中的 linq 语句中引用的 CloudModels 类中)。对我来说不幸的是RevitLinkType.Create() 需要ModelPath 不接受云路径,所以我可能又遇到了另一个死胡同。除非可以使用ExternalResourceReference。有没有人尝试过这个选项?如果是这样,您如何组装 Revit ExternalResourceReference?我不熟悉这个过程,查看this course from AU 2017,我认为它不一定适用于 BIM 360 云模型。如果可能的话,BIM 360 云示例将非常有用。

替代策略:我没有看到任何关于在 FORGE 数据管理 API 或其他 FORGE API 中加载链接的参考。如果我错过了,请分享一个链接。

任何帮助将不胜感激!

编辑:我发现这两个(1)(2) 类似的问题,至少就我的目的而言,没有得到令人满意的回答。有什么我应该注意的更新吗?

【问题讨论】:

请看这篇文章:thebuildingcoder.typepad.com/blog/2019/06/… 我之前已经提到过这篇文章,但我不明白这篇文章应该有什么帮助。你能更具体一点吗?它首先查看现有链接。当模型还没有链接时,我想创建新的云模型链接。我想我可以窥探测试模型中的一个,获取云链接外部引用的属性结构,然后尝试在新模型中镜像该结构。在我看来,我似乎不太可能以这种方式找到可靠的成功,尽管如果它不是一个记录在案的解决方案。我错过了什么吗? 添加了一个新答案。 【参考方案1】:

我相信可以在 Revit 2019 或更高版本中创建指向云模型的链接(使用 ModelPathUtils.ConvertCloudGUIDsToCloudPath())。您需要 ProjectGUID 和 ModelGUID 来创建云模型路径。

关于 ExternalResource 方法,它也可以工作 - 但它非常混乱 - 您可以阅读与现有 BIM360 链接关联的属性,您将看到如何为 BIM360 链接定义 ExternalResource。

最后 - 从今天开始,Forge Design Automation for Revit 方法根本不适合您: 1. 无法打开直播云工作共享模型(仅限已发布/上传的模型)。 2. 在 Design Automation for Revit 会话中运行时无法访问网络。

祝你好运... -马特

【讨论】:

感谢您的回复。很高兴知道我可以从我的探索选项中消除 Forge。我在 Revit 2020 中找不到任何有关云模型链接的文档,您能提供一个示例吗? 使用实际的 API 调用对上述内容进行了一些编辑。 revitapidocs.com/2019/cc284f13-a7a9-d37e-e46d-4769bf039a96.htm - 还查看了我之前使用 ExternalResource 信息是如何做到的,这是可能的 - 但只能在线条之外稍微着色。 谢谢。我已经能够得到云ModelPath 没问题。问题在于使用它来创建新链接。 RevitLinkType.Create(Document, ModelPath, RevitLinkOptions) 不接受云 ModelPath(触发 ArgumentExeption)。 revitapidocs.com/2019/0dd0e8bd-5217-9a94-19bb-58dcb840e517.htm您使用什么来创建新的 Revit 云模型链接?【参考方案2】:

很遗憾,截至目前(2020 年 1 月),我们没有适用于云模型的 Link API。它在路线图上。

【讨论】:

【参考方案3】:

Revit API 2022 docs 提及

方法:

RevitLinkType.Create(Document, ModelPath, RevitLinkOptions) RevitLinkType.LoadFrom(ModelPath, WorksetConfiguration)

已得到增强以支持创建新的云模型 Revit 链接。 您可以使用ModelPathUtils.ConvertCloudGUIDsToCloudPath() 创建云路径以用作这些方法的参数。


其他资源:

此Youtube Video 展示了一个示例及其respective Github repo。

【讨论】:

以上是关于是否可以通过 Revit API 或 FORGE API 在 Revit 模型中加载新的 Cloud (BIM 360) 链接?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Forge 模型衍生 API 获取 revit 模型的单位?

使用 Forge API 查看 Revit 绘图视图

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

如何为 Forge API 提供签名的 url 以创建 revit 文件

如何使用 Forge API 从模型 Revit 2022 获取零件类别

我们可以从 forge viewer API 访问 Revit Material Takeoff 使用的数据吗?