Sup' 我想将 IFC 文件与 Revit Design-Automation 链接,而不是直接打开它,因为打开会引起麻烦:使用 IFC 文件?缺少元素,功能有限?,所以我是 OMW 2 使用该文章文章中的代码链接它:
ModelPath mp = ModelPathUtils.ConvertUserVisiblePathToModelPath(@"C:\input.ifc");
RevitLinkOptions rlo = new RevitLinkOptions(false);
var linkType = RevitLinkType.Create(RevitDoc, mp, rlo);
var instance = RevitLinkInstance.Create(RevitDoc, linkType.ElementId);
第一步是能够创建一个新的空文档,但是到目前为止我看到的是
NewProjectDocument
在 Application
上可用,但在 ControlledApplication
上不可用,后者是在 DA 中运行时可用的对象。
我的问题是,有没有办法从 DA 创建新文档?或者有没有办法链接输入 ifc 而不是直接在 DA 中打开它?
感谢您的见解。
您可以两者兼得。
DA中有一种创建新文档的方法。请参阅文档(和复制的代码)此处:
private static void SketchItFunc(DesignAutomationData data)
{
if (data == null)
throw new InvalidDataException(nameof(data));
Application rvtApp = data.RevitApp;
if (rvtApp == null)
throw new InvalidDataException(nameof(rvtApp));
Document newDoc = rvtApp.NewProjectDocument(UnitSystem.Imperial);
...
如果您想链接输入 IFC,则需要使用
CreateFromIFC
函数,该函数可在 RevitAPI 文档此处中找到。
此外,如果您想使用自己的模板,可以在此处找到一些示例。此示例适用于 Inventor,但这也适用于 Revit。
如果您使用的是
revit-ifc
库,请确保包含using Revit.IFC.Import;
,以及导入 IFC 并保存 Revit 模型的以下代码片段: IDictionary<string, string> options = new Dictionary<string, string>();
options["Action"] = "Link"; // default is Open.
options["Intent"] = "Reference"; // This is the default.
string fullIFCFileName = "YourIFC.ifc";
Importer importer = Importer.CreateImporter(rvtDoc, fullIFCFileName, options);
try
{
importer.ReferenceIFC(rvtDoc, fullIFCFileName, options);
ModelPath path = ModelPathUtils.ConvertUserVisiblePathToModelPath("LinkIFC_Result.rvt");
rvtDoc.SaveAs(path, new SaveAsOptions());
}
catch (Exception ex)
{
Console.WriteLine("Exception in linking IFC document. " + ex.Message);
if (Importer.TheLog != null)
Importer.TheLog.LogError(-1, ex.Message, false);
return false;
}
Revit.IFC.Import.Importer
也适用于我的测试中的Revit DA env,所以这里是示例插件:
https://github.com/yiskang/DA4R-revit-ifc-linker================================
revitLinkedFilePath
是
ifc filename + ".RVT"
,它是为 IFC 链接创建的中间 Revit 文件的名称。该文件必须在与主机链接之前创建。例如,如果 rac_simple_project.ifc
是 IFC 文件名,则
revitLinkedFilePath
将是 rac_simple_project.ifc.RVT
。以下是我在 revit-ifc/// <summary>
/// Generates the name of the intermediate Revit file to create for IFC links.
/// </summary>
/// <param name="baseFileName">The full path of the base IFC file.</param>
/// <returns>The full path of the intermediate Revit file.</returns>
public static string GenerateRevitFileName(string baseFileName)
{
return baseFileName + ".RVT";
}
/// <summary>
/// Get the name of the intermediate Revit file to create for IFC links.
/// </summary>
/// <param name="baseFileName">The full path of the base IFC file.</param>
/// <returns>The full path of the intermediate Revit file.</returns>
public static string GetRevitFileName(string baseFileName)
{
if (Importer.TheOptions.RevitLinkFileName != null)
return Importer.TheOptions.RevitLinkFileName;
return GenerateRevitFileName(baseFileName);
}