以编程方式启动 BIM360 Docs 协作
Initiate BIM360 Docs collaboration programmatically
为了升级到当前版本的 Revit,我们必须将我们的文件从 BIM360 Teams 迁移到 BIM360 Docs。由于我们有数百份文件,我希望尽可能自动化这个过程。
forge API 允许我从 BIM360 Teams 下载所有 Revit 文件。我还可以使用 Revit API 或第三方应用程序(例如 this Bulk File Upgrader`)将它们全部升级到 Revit 2019。
使用 Forge BIM360 API,我能够以编程方式创建新项目,并从 Team Drive 上传文件和文件夹。我难以以自动化方式完成的步骤是启动升级后的 Revit 2019 文件的协作。有没有一种方法可以通过 Revit API 或 Forge API 来实现?还是有另一种方法可以让我自动完成这两个 Autodesk Cloud Collaboration 解决方案之间的迁移?
我遇到了 this tutorial on publishing models,这表明需要通过 Revit UI 手动启动每个 Revit 文件的协作。我希望找到这个建议的替代解决方案。
谢谢!
很抱歉延迟回答这个问题。
此问题听起来与 Revit API 论坛中提出的问题相似,并已升级为 ADN 案例 14906646 Old topic brought back - changing link paths to Cloud paths。
我们已经向 Revit、C4R、Forge 和 Desktop Connector 开发团队提出了这个问题,引起了热烈的讨论,目前还没有明确的答案。
我们正在尽快进行研究,会尽快给出更确凿的答案。
开发组还在讨论这个问题。同时,他们还表示:
此请求记录在开发问题 REVIT-140793 中。
可能有一种解决方法可以满足您的需求。
Revit 2019.2 和未来版本包括对 "Single user workflow" 的支持——即非工作共享云模型。同时,他们公开 API 以启动非工作共享云模型并将非工作共享云模型转换为工作共享云模型(C4R)。
因此,我认为您可以使用单用户 APIs 解决您提到的以下情况:
- 保存下载的文件和非工作共享文件(本地文件)。
- 通过 API 调用
Document.SaveAsCloudModel
启动非工作共享云模型。
- 通过 API
Document.EnableCloudWorksharing
. 将其转换为 C4R 模型
我的同事Eason Kang康益升证实,您可以使用我之前回答中提供的步骤来实现,如下所示:
Revit 2019.2 和未来版本包括对 "Single user workflow" 非工作共享云模型的支持。同时,他们公开 API 以启动非工作共享云模型并将非工作共享云模型转换为工作共享云模型(C4R)。
您可以使用单用户 APIs 解决您提到的以下情况:
- 将下载的文件和非工作共享文件保存到本地文件系统。
- 通过 API 调用
Document.SaveAsCloudModel
启动非工作共享云模型。
- 通过 API
Document.EnableCloudWorksharing
. 将其转换为 C4R 模型
这是他的报告,包括途中的凭据问题的解决方案:
问题:我想将本地 RVT 保存到我的 BIM360 帐户 - 激活设计协作服务 - 使用 Revit 2020 API,但 Revit 总是抛出一个例外,说我没有访问权限。我拥有有效的 C4R 许可证,并且能够从我使用 Revit UI 传递给 API 的文件夹 ID 打开 C4R 模型。什么东西少了?
代码:
doc.SaveAsCloudModel(
"urn:adsk.wipprod:fs.folder:co.8rtX03jDQXKnssA1FfrEXw",
doc.Title);
异常:
- Autodesk.Revit.Exceptions.RevitServerUnauthorizedException:您没有访问云中此资源的云模型授权
回答:您需要在 manage.autodesk.com
中设置 'Cloud Models for Revit' 权利。
回复:感谢您的澄清。我混淆了 'Cloud Models for Revit' 和 C4R,而且我没有在我的 manage.autodesk.com.
中设置 'Cloud Models for Revit' 权利
答: 'Cloud Models for Revit'是Revit 2019.2以来新增的服务。它是 Revit 和 Revit LT 订阅的一部分。
顺便说一句,与 C4R 模型的主要区别在于,一次只有一个用户可以使用此方法创建的模型。
回复:太棒了!
我按照要求设置了 Revit 订阅,按照 Jeremy 上面分享的步骤进行操作并确认它有效!
您可以通过 Revit API 使用以下步骤实现目标:
- 通过 API 调用
Document.SaveAsCloudModel
启动非工作共享云模型。
- 通过 API
Document.EnableCloudWorksharing
. 将其转换为 C4R 模型
这是我实现这个的测试代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Autodesk.Revit.ApplicationServices;
using Autodesk.Revit.Attributes;
using Autodesk.Revit.DB;
using Autodesk.Revit.UI;
using Autodesk.Revit.UI.Selection;
namespace adsk.c4r
{
[Transaction(TransactionMode.Manual)]
public class Command : IExternalCommand
{
public Result Execute(
ExternalCommandData commandData,
ref string message,
ElementSet elements)
{
UIApplication uiapp = commandData.Application;
UIDocument uidoc = uiapp.ActiveUIDocument;
Application app = uiapp.Application;
string template = app.DefaultProjectTemplate;
string filename = @"D:\DevZone\ADN\t5021\revit_api_c4r_test_6.rvt";
string name = System.IO.Path.GetFileName(filename);
Document doc = app.NewProjectDocument(template);
doc.SaveAs(filename);
try
{
doc.SaveAsCloudModel(
"urn:adsk.wipprod:fs.folder:co.aCd1tMmrTxucmJcmtYTLBQ",
name);
var cloudPath = doc.GetCloudModelPath();
if(doc.CanEnableCloudWorksharing())
{
doc.EnableCloudWorksharing();
}
TaskDialog.Show("Revit",
string.Format("{0} is a C4R model now", name));
doc.Close();
uiapp.OpenAndActivateDocument(cloudPath, new OpenOptions(), false);
}
catch(Exception ex)
{
System.Diagnostics.Trace.WriteLine(ex.Message);
return Result.Cancelled;
}
return Result.Succeeded;
}
}
}
Autodesk 最近还在 Revit 2022 中发布了 GitHub repository with a solution for this exact scenario. You can find the video here which talk about this. This basically uses enhanced api calls API - RevitLinkType.Create
& RevitLinkType.LoadFrom
支持云模型创建和链接。
有一个关于如何 使用 Revit API 的相关问题。
为了升级到当前版本的 Revit,我们必须将我们的文件从 BIM360 Teams 迁移到 BIM360 Docs。由于我们有数百份文件,我希望尽可能自动化这个过程。
forge API 允许我从 BIM360 Teams 下载所有 Revit 文件。我还可以使用 Revit API 或第三方应用程序(例如 this Bulk File Upgrader`)将它们全部升级到 Revit 2019。
使用 Forge BIM360 API,我能够以编程方式创建新项目,并从 Team Drive 上传文件和文件夹。我难以以自动化方式完成的步骤是启动升级后的 Revit 2019 文件的协作。有没有一种方法可以通过 Revit API 或 Forge API 来实现?还是有另一种方法可以让我自动完成这两个 Autodesk Cloud Collaboration 解决方案之间的迁移?
我遇到了 this tutorial on publishing models,这表明需要通过 Revit UI 手动启动每个 Revit 文件的协作。我希望找到这个建议的替代解决方案。
谢谢!
很抱歉延迟回答这个问题。
此问题听起来与 Revit API 论坛中提出的问题相似,并已升级为 ADN 案例 14906646 Old topic brought back - changing link paths to Cloud paths。
我们已经向 Revit、C4R、Forge 和 Desktop Connector 开发团队提出了这个问题,引起了热烈的讨论,目前还没有明确的答案。
我们正在尽快进行研究,会尽快给出更确凿的答案。
开发组还在讨论这个问题。同时,他们还表示:
此请求记录在开发问题 REVIT-140793 中。
可能有一种解决方法可以满足您的需求。
Revit 2019.2 和未来版本包括对 "Single user workflow" 的支持——即非工作共享云模型。同时,他们公开 API 以启动非工作共享云模型并将非工作共享云模型转换为工作共享云模型(C4R)。
因此,我认为您可以使用单用户 APIs 解决您提到的以下情况:
- 保存下载的文件和非工作共享文件(本地文件)。
- 通过 API 调用
Document.SaveAsCloudModel
启动非工作共享云模型。 - 通过 API
Document.EnableCloudWorksharing
. 将其转换为 C4R 模型
我的同事Eason Kang康益升证实,您可以使用我之前回答中提供的步骤来实现,如下所示:
Revit 2019.2 和未来版本包括对 "Single user workflow" 非工作共享云模型的支持。同时,他们公开 API 以启动非工作共享云模型并将非工作共享云模型转换为工作共享云模型(C4R)。
您可以使用单用户 APIs 解决您提到的以下情况:
- 将下载的文件和非工作共享文件保存到本地文件系统。
- 通过 API 调用
Document.SaveAsCloudModel
启动非工作共享云模型。 - 通过 API
Document.EnableCloudWorksharing
. 将其转换为 C4R 模型
这是他的报告,包括途中的凭据问题的解决方案:
问题:我想将本地 RVT 保存到我的 BIM360 帐户 - 激活设计协作服务 - 使用 Revit 2020 API,但 Revit 总是抛出一个例外,说我没有访问权限。我拥有有效的 C4R 许可证,并且能够从我使用 Revit UI 传递给 API 的文件夹 ID 打开 C4R 模型。什么东西少了?
代码:
doc.SaveAsCloudModel(
"urn:adsk.wipprod:fs.folder:co.8rtX03jDQXKnssA1FfrEXw",
doc.Title);
异常:
- Autodesk.Revit.Exceptions.RevitServerUnauthorizedException:您没有访问云中此资源的云模型授权
回答:您需要在 manage.autodesk.com
中设置 'Cloud Models for Revit' 权利。
回复:感谢您的澄清。我混淆了 'Cloud Models for Revit' 和 C4R,而且我没有在我的 manage.autodesk.com.
中设置 'Cloud Models for Revit' 权利答: 'Cloud Models for Revit'是Revit 2019.2以来新增的服务。它是 Revit 和 Revit LT 订阅的一部分。
顺便说一句,与 C4R 模型的主要区别在于,一次只有一个用户可以使用此方法创建的模型。
回复:太棒了!
我按照要求设置了 Revit 订阅,按照 Jeremy 上面分享的步骤进行操作并确认它有效!
您可以通过 Revit API 使用以下步骤实现目标:
- 通过 API 调用
Document.SaveAsCloudModel
启动非工作共享云模型。 - 通过 API
Document.EnableCloudWorksharing
. 将其转换为 C4R 模型
这是我实现这个的测试代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Autodesk.Revit.ApplicationServices;
using Autodesk.Revit.Attributes;
using Autodesk.Revit.DB;
using Autodesk.Revit.UI;
using Autodesk.Revit.UI.Selection;
namespace adsk.c4r
{
[Transaction(TransactionMode.Manual)]
public class Command : IExternalCommand
{
public Result Execute(
ExternalCommandData commandData,
ref string message,
ElementSet elements)
{
UIApplication uiapp = commandData.Application;
UIDocument uidoc = uiapp.ActiveUIDocument;
Application app = uiapp.Application;
string template = app.DefaultProjectTemplate;
string filename = @"D:\DevZone\ADN\t5021\revit_api_c4r_test_6.rvt";
string name = System.IO.Path.GetFileName(filename);
Document doc = app.NewProjectDocument(template);
doc.SaveAs(filename);
try
{
doc.SaveAsCloudModel(
"urn:adsk.wipprod:fs.folder:co.aCd1tMmrTxucmJcmtYTLBQ",
name);
var cloudPath = doc.GetCloudModelPath();
if(doc.CanEnableCloudWorksharing())
{
doc.EnableCloudWorksharing();
}
TaskDialog.Show("Revit",
string.Format("{0} is a C4R model now", name));
doc.Close();
uiapp.OpenAndActivateDocument(cloudPath, new OpenOptions(), false);
}
catch(Exception ex)
{
System.Diagnostics.Trace.WriteLine(ex.Message);
return Result.Cancelled;
}
return Result.Succeeded;
}
}
}
Autodesk 最近还在 Revit 2022 中发布了 GitHub repository with a solution for this exact scenario. You can find the video here which talk about this. This basically uses enhanced api calls API - RevitLinkType.Create
& RevitLinkType.LoadFrom
支持云模型创建和链接。
有一个关于如何