如何将 IFC 与 Revit Design-Automation 链接

问题描述 投票:0回答:2

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 中打开它?

感谢您的见解。

autodesk-forge revit-api autodesk-designautomation
2个回答
1
投票

您可以两者兼得。

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;
         }



1
投票

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

中找到的参考资料:

    https://github.com/Autodesk/revit-ifc/blob/df1485b9accd598c2912a055af205ee1b03648c7/Source/Revit.IFC.Import/Data/IFCImportFile.cs#L742
  • https://github.com/Autodesk/revit-ifc/blob/df1485b9accd598c2912a055af205ee1b03648c7/Source/Revit.IFC.Import/Data/IFCImportFile.cs#L834
  • /// <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); }
© www.soinside.com 2019 - 2024. All rights reserved.