- API:Application Programming Interface 应用程序接口,是一些预先定义的接口(如函数、HTTP接口),或指软件系统不同组成部分衔接的约定。 用来提供应用程序与开发人员基于某软件或硬件得以访问的一组例程,而又无需访问源码,或理解内部工作机制的细节。(Api的百度词条解释)
- IExternalEventHandler:外部事件,使用方法可参照(revit二次开发之外部事件的使用)
- Transaction:事务,当对revit中模型进行增删改的时候必须创建并打开事务,执行结束后需要关闭事务;(事务使用方法)
[Transaction(TransactionMode.Manual)]:
①TransactionMode.Automatic:
Revit会在调用外部命令之前自动创建一个Transaction,并且该Transaction会在外面命令结朿时提交或者回滚。如果外部命令执行成功,则提交Transaction;如果有异常,则回滚。在该模式下,外部命令不能再创建自己的Transaction,但是可以创建 SubTransactions。
②TransactionMode.Manual:
此模式表示Revit不会自动创建一个Transaction。如果用户需要修改Revit摸型,则需要自行创建Transaction,并且自行管理这个Transaction提交还是回滚。
③TransactionMode.ReadOnly:
在该模式下,外部命令不能有任何的Transaction,否则在创建Transaction或者修改 Revit文档都会抛出异常。
-
IExternalCommand:外部命令;ExternalCommand是RevitAPI用户通过外部命令来扩展开发是必须实现的接口。IExternalCommand接口里面只有一个抽象函数Execute,重载这个函数来实现IExternalCommand。
主要作用:通过IExternalCommand来添加自己的应用。Revit通过.addin文件来识别和加载外部插件。
-
Execute:抽象函数关键字;Execute有三个参数:输入参数commandData(ExcternalCommandData)、输出参数messamg(String)、输出参数elements(ElementSet)。
- commandData:输入参数;ExternalCommandData对象包含了外部命令所需要的Application以及一些视图的引用。在外部命令中,所有的Revit的数据都可以直接或者间接的获取到。
UIApplication uiapp = commandData.Application;
UIDocument uidoc = uiapp.ActiveUIDocument;
Document doc = uidoc.Document;
View view = doc.ActiveView;
- IExternalApplications:外部应用;IExternalApplication接口有两个抽象函数OnStartup和OnShutdown,参数都是UIControlledApplication类型。用户可以通过实现了IExternalApplication的外部应用中重载Onstartup和OnShutdown函数,在Revit启动或者关闭是定制所需的功能。
主要作用:插件开发者可以通过实现IExternalApplications来添加自己的应用。Revit同样通过.addin文件来识别和加载实现IExternalApplication的外部插件。
- UIControlledApplication:表示Autodesk Revit用户界面,提供对用户界面定制方法和事件的访问。(revit二次开发通过api创建Ribbon按钮)
- FilteredElementCollector:该类用于搜索、筛选和迭代一组元素。开发人员可以分配各种条件来过滤返回的元素。该类要求在尝试访问元素之前至少设置一个条件。
获取当前项目中 房间
FilteredElementCollector filteredElementCollector = new FilteredElementCollector(doc);
filteredElementCollector.OfCategory(BuiltInCategory.OST_Rooms);
- ElementClassFilter:根据元素类别来过滤元素的过滤器。是一种快速过滤器。(诸如此类:ElementCategoryFilter 元素类别过滤器等)
//获取当前项目中的所有族类型
FilteredElementCollector collectorbeam = new FilteredElementCollector(doc);
ElementClassFilter Filter2 = new ElementClassFilter(typeof(FamilySymbol));
collectorbeam.WherePasses(Filter2);
- ReferenceIntersector:一个用于查找和返回与从原点和方向创建的射线相交的元素的类。
FilteredElementCollector collector = new FilteredElementCollector(doc);
//采用射线法,计算点p与正上方楼板的高差值
Func<View3D, bool> isNotTemplate = v3 => !(v3.IsTemplate);
View3D _view3D = collector.OfClass(typeof(View3D)).Cast<View3D>().First<View3D>(isNotTemplate);
XYZ rayDirection = new XYZ(0, 0, 1);
//过滤出当前文档的楼板
ElementClassFilter floorFilter = new ElementClassFilter(typeof(Floor));
ReferenceIntersector refIntersector = new ReferenceIntersector(floorFilter, FindReferenceTarget.Face, _view3D);
ReferenceWithContext refWithContext = refIntersector.FindNearest(p, rayDirection);
if (refWithContext != null)
{
Reference _ref = refWithContext.GetReference();
XYZ intersectionPoint = _ref.GlobalPoint;
double dis = roompoint.DistanceTo(intersectionPoint) * 304.8;
}