学习完 The Building Coder 最新的博文 Installing a Macro and Closing the Active Document 之后,有些想法和大家交流一下。
通过编程方式关闭 Revit 的当前文档一直没有直接的 API 支持。其实就连打开指定文档并将其设置为当前文档也是直到 Revit 2013 才通过 OpenAndActiveDocument() 方法直接提供支持的。之前 Jeremy 介绍过一种通过向 Revit 发送 Windows 窗口消息(Alt+F4)的方式来关闭当前文档。经过测试发现不太靠谱。最明显的一个问题就是 Alt+F4 在 Revit 程序主窗口不是 Windows 操作系统的主窗口时工作不稳定。
Jeremy 在最新的博文中引用了 Steven Mycynek (Revit API 开发小组成员) 提供的一个宏来解决关闭当前窗口的问题。通过研究宏代码发现,其实它背后的原理可以用一句话说明:将当前文档切换为后台文档(或内存文档),然后使用 Autodesk.Revit.DB.Document.Close() 直接关闭。
我们都知道 Autodesk.Revit.DB.Document.Open() / Close() 可以用于打开或者关闭内存(没有对应 UIDocument)中的 Revit 文档。所以我们只要能找到将当前文档转换为内存文档的方法就可以了。Steven 的办法是创建一个空文档。然后在每次需要关闭当前文档时,首先使用 OpenAndActiveDocument() 打开这个空文档。这个操作同时就将当前文档转换为内存文档了。