Building Coder 链接:http://thebuildingcoder.typepad.com/blog/2010/05/revitlookup-update.html
Revit 二次开发论坛链接:http://revit.5d6d.com/viewthread.php?tid=1279&extra=
这篇翻译有些滞后了。因为内容是Jeremy去年针对
Revit 2011撰写的。不过因为我目前的项目还没有移植到Revit 2012的打算,所以对我而言还算应景。当让,我会努力跟上大师的脚步,尽快更新相关的内容。
RevitLookup最早是随Revit 2011 SDK发布的一个开源工具。其前身是Autodesk内部维护的一个工具RvtMgdDbg。它的初衷是为开发者提供一个源码级的分析Revit数据结构的途径。不过随着其开发团队的不断更新,目前RevitLoopup已经涵盖了更多更深的功能点。
Revit 2011 SDK版本中,RevitLookup存在一些和基础数据相关的问题。截至到2010年5月20日,我们已经改正了如下几个BUG:
1. 无法获取ElementType对象;
2. Revit MEP 连接;
3. Revit结构分析模型
下面我将介绍BUG#1的解决途径,即如何获取Revit数据结构中包含的所有元素。
Revit 2011中,在获取所有元素时,代码使用的是元素过滤器FilterElementCollector的WhereElementIsNotElementType()方法。显然,这样会无法取得ElementType对象,包括Family Symbol。我们的解决办法是:通过创建一个联合过滤器将元素类型过滤和非元素类型过滤的结果合并。这样我们就能取得所有的元素了。
代码如下:
FilteredElementCollector elemTypeCtor
= ( new FilteredElementCollector( doc ) )
.WhereElementIsElementType();
FilteredElementCollector notElemTypeCtor
= ( new FilteredElementCollector( doc ) )
.WhereElementIsNotElementType();
FilteredElementCollector allElementCtor
= elemTypeCtor.UnionWith( notElemTypeCtor );
ICollection<Element> founds
= allElementCtor.ToElements();
请注意,我们会一直保证RevitLoopup的源码公开。所以如果您发现它有任何问题,都可以自己尝试着修改并重新编译它。最新的RevitLoopup源码可以在这里下载: http://thebuildingcoder.typepad.com/files/revitlookup_2010-05-19.zip