关于revit文件的离线读取

离线读取指的是不打开Autodesk Revit 软件的情况下,读取.rvt ,.rfa等revit文件,目前autodesk官方的API中并不能实现。如下图所示:

上图中话题的时间是2022年9月份,离现在并不久远。

有没有其他方法呢?

第三方库

这里主要介绍ODA(Open Design Alliace开放设计联盟),以前叫做Tegha。ODA是一个非营利性技术联盟,为开发工程应用程序提供高级工具包,其在美国注册,但主要工作人员在俄罗斯,他们对工程行业中的常用的封闭格式进行逆向工程,如.dwg,.dng,.rvt等,让开发人员可以不受限制的访问这些文件,其实就是不依赖Autodesk官方软件。

ODA也并不是免费的,而是会员制。如果要了解详细信息可以访问他们的官网:www.opendesign.com

RevitNet.dll

如上述论坛题主所述,revitnet.dll确实可以在不打开revit的情况下读取revit文件,但是目前可能仅支持到2018版本,而revit是不支持降版的。

使用RevitNET.dll通过初始化RevitNet核心类Product后可以在不打开RevitUI界面的情况下后台操作模型文件(支持开启事务)。可以对模型文件进行增、删、查、改等一系列操作,总而言之就等于是没有界面,没有了UI交互,但是一样可以操作Revit

Product主要属性及方法:

  • public APISettings Settings { get; }
    public Application Application { get; } // 当前的应用程序服务Application对象
    public static ICriticalSituationProcessor GetCriticalSituationProcessor();
    public static Product GetInstalledProduct();// 获取Product对象
    public static void RegisterCriticalSituationProcessor(ICriticalSituationProcessor processor);
    public sealed override void Dispose();
    public void EnableIFC(bool enable);
    public void Exit(); // 退出/关闭应用
    public void Init(DB.ClientApplicationId id, string clientData);
    public void SetPreferredLanguage(ApplicationServices.LanguageType language);
    public void SetSettingsFileLocation(string strSettingsFileLocation);

一下是一些技术文章可以参考

使用RevitNET操作Revit文件

Revit二次开发之十五 RevitNet.dll 的使用 –

Design Automation API

按照Autodesk官方的意思

运行 Revit 附加模块或 Web 应用程序以处理或创建 RVT/RTE/RFA 数据

Design Automation API for Revit 是 Revit 的引擎,作为 APSservice 在云中运行。构建用于创建、提取和修改 Revit 数据的云原生应用程序和服务。通过提供对完整 Revit DB API 的访问,无需在桌面上安装 Revit,现在可以在任何地方使用以下工作流:

  • 创建自定义 Revit 族内容
  • 自动创建模型
  • 浏览和分析模型数据
  • 提取和生成自动报告
  • 修改现有模型以维护公司标准
  • 自动创建文档

若要开始,我们建议在此处浏览适用于 Revit 的设计自动化 API 教程和此处的示例。

Autodesk官方Design Automation API除了支持Revit,也可以支持Autocad,3ds Max,Inventor。

OpenMcdf

OpenMCDF是一个100%的.net / C#组件,允许开发人员操作结构化存储文件。关于OpenMCDF与Com结构化存储的信息来自一篇文章:Reading Revit File Without Revit。文章中提出,Revit使用**COM结构化存储**的文件存储技术,我们可以用它来读取一些简单必要的信息。因此这种方法只能获取少量信息。

OpenMCDF的相关信息可以参考https://github.com/ironfede/openmcdf

可以用用它来读取Revit文件

static void Main(string[] args)
{
    CompoundFile compoundFile = new CompoundFile(args[0], CFSUpdateMode.ReadOnly, CFSConfiguration.Default);
    var root = compoundFile.RootStorage;
    List<CFItem> cFItems = new List<CFItem>();
    root.VisitEntries((CFItem cf) =>
    {
        Console.WriteLine($"Name : {cf.Name}");
        Console.WriteLine($"Size : {cf.Size}");
        Console.WriteLine();
    }, recursive:true);
}

发表评论