主要内容

升级单个文件

复制下面的代码,修改文件路径、升级的文件路径,然后粘贴到宏管理器上,点击生成解决方案

public void UpgradeSingle()
{
    string file = "文件路径";
    string targetFilePath = "升级的文件路径";
            // 打开文件
    var doc = this.Application.OpenDocumentFile(file);
            // 另存为
    doc.SaveAs(targetFilePath);
    doc.Close();
}

点击运行,就可以

批量升级多个文件夹的

修改D:\A_DataBases\Revit宏这部分,改成你电脑上族文件所在的路径,然后点击生成解决方案,在宏管理器点击运行即可

public void UpgradeFamily()
{

         // 获取某个目录下的所有rfa文件
    var files = Directory.GetFiles(@"D:\A_DataBases\Revit宏", "*.rfa", SearchOption.AllDirectories);

         // 批量升级
    foreach (var file in files)
    {
                     // 拼接保存的路径
        var fileName = Path.GetFileNameWithoutExtension(file);
        var curDir = Path.GetDirectoryName(file);
        var targetFileName = fileName + "2020.rfa";
        var targetFilePath = Path.Combine(curDir, targetFileName);
                     // 打开,另存为
        var doc = this.Application.OpenDocumentFile(file);
        doc.SaveAs(targetFilePath);
        doc.Close();
    }
}

RevitAPI 小结

打开文件:

Application.OpenDocumentFile(文件路径);

另存文件:

Document.SaveAs(路径);

扩展知识

Application 类、Document 类的认识。

Application 类

Application 类在Autodesk.Revit.ApplicationServices命名空间下,代表一个 Revit 应用程序,该类提供了:

  • 文档的访问
  • 设置选项
  • 其他应用程序范围的数据和设置的访问

一个类有自己的属性、方法、事件;

  • 属性:可以对应人的外表
  • 方法:就对应这一个人可以做的事,比如一个人可以读书、写字、吃饭、跑步、跳舞、唱歌等等,是一个具体的行为、动作。
  • 事件:事件就是发生某种情况时会触发的事。

方法和事件都是做出动作,两者的区别:

  • 方法是我能做什么动作,事件是,当 xxx 时,我要做什么动作。
  • 方法是是定死的,让我走路,我就去走路。事件是灵活的,比如当时间到了 12 点时,我要做什么,要做什么这件事你来告诉我。

方法:

方法是我能做什么动作?那 Application 能做什么?其实这个可以从软件操作上看,

比如点击文件就可以看到新建、打开、保存、另存为、导出、打印、关闭这些功能,这个就是 Application 能做的事。

在比如:点击选项,这里有常规、用户界面、图形、硬件、文件位置等设置,这也是 Application 能控制的

就是人工能点击的,Application 基本也能做,但不一定全部都能做,这个就得看官方的 SDK 文档了

详见:Application Class

比如常见的新建、打开之类的,上面的族文件升级,其实就是用了这个类的功能。

所以其实核心是学习这些 API,而宏只是一个可以编写、运行这些代码的地方,可以使用其它方式来运行代码。

Document 类

这个类也和上面的类似,需要去看看官方文档了,

Document Class: https://www.revitapidocs.com/2020/db03274b-a107-aa32-9034-f3e0df4bb1ec.htm

熟悉一个类、主要熟悉这个类有什么熟悉、有什么方法、有什么事件,对应软件的操作是哪个操作,开发的基本要求就是要先熟悉这些常见的类,知道这些类的方法怎么调用的,然后根据业务的要求去实现就好。

博主本身也是一个菜鸡,没法教大家太多,只能大概说一下这个思路了。。