前言
Event
是一个在各种编程语言中,都非常重要的概念。它是一种重要的设计模式,Revit API 也需要利用它来完成一些工作。
在介绍 Event
之前,首先说明一下Revit API 中的两个 Application
类。Autodesk.Revit.Creation.Application
和 Autodesk.Revit.ApplicationServices.Application
。
前者主要功能是在 Revit 里创建新的元素,比如族实例信息,几何图形等等。
后者主要功能包括文档的创建和打开,文档整体的操作,还有 Event
事件处理。
细节
例子
在下面这个例子中:
- 使用
IExternalApplication
,在它的OnStartup
中注册事件,在它的OnShutdown
中取消事件。 - 事件处理方法是在注册的时候传进去的,这里是
application_DocumentOpened
。 - 在事件处理方法中,可以编写你自己的逻辑,他会在文档打开之后执行。
public class Application_DocumentOpened : IExternalApplication
{public Result OnStartup(UIControlledApplication application){application.ControlledApplication.DocumentOpened += new EventHandler<Autodesk.Revit.DB.Events.DocumentOpenedEventArgs>(application_DocumentOpened);return Result.Succeeded;}public Result OnShutdown(UIControlledApplication application){application.ControlledApplication.DocumentOpened -= application_DocumentOpened;return Result.Succeeded;}public void application_DocumentOpened(object sender, DocumentOpenedEventArgs args){Document doc = args.Document;using (Transaction transaction = new Transaction(doc, "Edit Address")){if (transaction.Start() == TransactionStatus.Started){// 在这里,你可以编写你想要的操作。doc.ProjectInformation.Address ="United States - Massachusetts - Waltham - 1560 Trapelo Road";transaction.Commit();}}}
}
事件类型
Autodesk.Revit.ApplicationServices.Application
类中的主要事件:
作用级别 / 范围 | 事件 |
---|---|
整个应用 | ApplicationInitialized |
文档操作 | DocumentChanged 以及DocumentXXX |
导入导出 | FileExporting, FileImported, FileImporting |
链接文件 | LinkedResourceOpened, LinkedResourceOpening |
视图导出/打印 | ViewExported, ViewExporting, ViewPrinted, ViewPrinting |
文件协同 | DocumentSynchronizedWithCentral, DocumentSynchronizingWithCentral, WorksharedOperationProgressChanged |