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
),暂定这样吧。