是否可以通过 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 模型的单位?
Autodesk Forge 数据管理参考 API 未列出 Revit 参考
如何为 Forge API 提供签名的 url 以创建 revit 文件