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 参考的主要内容,如果未能解决你的问题,请参考以下文章