12. Revit API: Document、Element
前言
还是先讲一下Document吧,不然Selection不好讲,那涉及到了挺多东西的,比元素(Element)和各类Filter,这些都与Document有关,所以先简单讲一下这个。
一、Document
在Revit中,名叫Document的类有两个,一个是在DB命名空间下,另一个在Creation命名空间下(前面讲过还有个Application)。这一篇我们讲的是DB下的Document。
UI提供到DB的入口,前面的Demo里早已出现了很多次
UIApplication uiApp = commandData.Application;
UIDocument uiDoc = uiApp.ActiveUIDocument;
Document doc = uiDoc.Document;
这样,我就就获取到了所需要的Document。
1.1. Document的作用
我们知道Document就是Revit中打开的那些.rft、.rfa文件。View就是打开后的中各种三维、平面视图。
既然就是项目文件,那么Document自然承担着对项目增删改查的工作,或者说增删改查都是在Document上进行。
-
增,所以要提供创建操作入口。在模型上,就是
Creation命名空间下的那些类,和DB各专业中定义的类;在视图上,就是View相关的类。 -
删,便是删。当然这只是直观的体现,Revit定义下的元素(
Element)之间是存在各种关联的。 -
改,可以是对项目文档的改,也可以是对族文档的,同样用到上面那些类。
-
查,应该是我们最常用到的。选择,对应
UI.Selection;范围查找,对应Filter。
可以看到,大部分动作的执行都被细分化了,由其它类承担。
回到Document类本身,其本身的功能就比较有限了,可以说是只“保留”了与文档有关的部分。
1.2. Document类的成员
Document类成员比较多,按功能来划分来看的花还是比较简单的,部分我没有用到的,就不写了,还是需要自己去看看的。
1.2.1. 属性
| 属性 | 描述 |
|---|---|
| ActiveProjectLocation | 检索当前活动的项目位置,可能有用,插眼 |
| ActiveView Application | 活动的View |
| Create FamilyCreate | Creation下的实例,里面提供了一些创建模型相关的方法,后面专门讲 |
| FamilyManager | 打开一个族管理器实例,调整族参数(Parameter)时很有用,后面专门讲 |
| DisplayUnitSystem | 当前的显示单位,比如毫米,这里涉及到单位转换(Unit),后面专门讲 |
| IsFamilyDocument IsModifiable … | 当前文档是否为族文档,在修改族时会用到 当前是否可以进行修改。这个与事件( Transaction)有关,后面专门讲… |
| … | 其它关于项目的信息 |
还是需要自己看看,扫一眼也行,虽然不一定会用到,但也要知道有些什么
比如还可以拿到项目信息(ProjectInformation),就是下面这个,在出分析文档时可能用到。

1.2.2. 方法
这里就不列表格了。Docuemnt方法总共分为一下几大类:
- 特定格式文件的导入/导出/链接,分为Import,Export,Link三种,有很多重载。
- 文档本身的关闭、保存。
- 关于项目的一些信息检索或调整,如设置显示单位,设置位置。
- 对文档中元素(
Element)的修改操作。- 三种线的转换:模型线(
ModelCurve)、详图线(DetailCurve)、符号线(SymbolicCurve)。关于区别,可以参考这个视频 - 删除元素:
Delete(..) - 查找元素:
GetElement(..)
- 三种线的转换:模型线(
方法大概就这些了,4是必然要用到的,其它的看需要吧。
1.2.3. 事件
Document上的事件,就文档关闭/保存、文档/视图打印。
那文档变化事件呢?哈哈,它在Application上,很好理解,由更上一级的来监听文档变化,那只有Application了。
二、Element
Element是Revit Document的主要组成部分,是一系列可操作交互实体基类。每个Element都有一个ElementId,其有一个Int类型的值,且不重复。
从API文档中,可以看到Element有极多的子类,所幸的是我们暂时不需要去了解它们,因为Revit API毕竟是太多了,我们按需使用即可。

2.1. Element常用类成员
我发现Element上有许多我没有了解的东西,这里便不多讲。
此处内容有限,请去查看API文档
Element上有几个比较有用的东西:
-
Id、UniqueId:元素ID,唯一。前者在文档中易变,不稳定。后者样式是
Guid,稳定不变,可用于外部存储。 -
Location:元素的位置。可以获取到的值有3种:
null,LocationCurve,LocationPoint。
这里解释一下:
①当元素是可以由线表示的,如梁、直管道,获取到的就是curve,可以拿到两个点操作点。
②当元素是那种放上去就行了的,基本就是用点表示位置,这类占了大部分。
③部分模型是没有位置信息的,它们没有位置的概念。如DirectShape,或者是体量族?我接触到的一些体量族是没有位置信息的。 -
Parameters:元素的参数,很有用。元素的参数是很有用的,Revitbi’j
-
Geometry:元素的几何结构。所谓几何结构,在Revit中可以简单的理解为就是
Solid,就是GeometryObject派生出的那些。
当然,Geometry还包含的材质信息,这个我目前还没有使用,不过后面会写。

-
BoundingBox:元素的包围盒,包围盒是轴对齐的(AABB)。包围盒这样直接获取的可能不是预期的(刚刚包裹可见的模型),关于如何获取刚好包裹住模型的包围盒,请看Revit获取元素Solid和计算包围盒。
总结
这篇几乎没有写运用相关的东西,大部分API文档上直接摘的,还远不够详细,还是需要去看文档的。
上面新提到了Parameter、GeometryObject等,后面会详细得写一写。
至于下一篇,先写过滤器(Filter),然后接着写选择器(Selection),暂定这样吧。

















