问题: 现在需要获取视图中的所有实例对象,包括系统族的实例与用户自建族的实例。使用OfClass(typeof(FamilyInstance))过滤方法比较容易获取用户自建族的实例,但是视图中的系统族实例,不知道如何一起获取出来,请指教。
答:
是的,通过FilteredElementCollector.OfClass(typeof((FamilyInstance)) 只能获取标准族实例,也就是你说的自建族实例。 但是系统族实例并不是从FamilyInstance类派生的,而是从HostObject类派生。 所以你可以使用逻辑Or过滤器LogicOrFilter,把两个类过滤器(ElementClassFilter)合并起来实现。
下面是完整实现代码。在对话框中显示所有实例对象的数量。 - [csharp] view plaincopy
- using System;
- using System.Collections.Generic;
- using System.Text;
- using System.Windows.Forms;
-
- using Autodesk.Revit .DB;
- using Autodesk.Revit.UI;
- using Autodesk.Revit .ApplicationServices;
- using Autodesk.Revit.Attributes ;
-
-
-
- [TransactionAttribute(Autodesk.Revit.Attributes.TransactionMode.Manual)]
- public class RevitCommand : IExternalCommand
- {
- public Result Execute(ExternalCommandData commandData, ref string messages, ElementSet elements)
- {
-
- UIApplication app = commandData.Application;
- Document doc = app.ActiveUIDocument.Document;
-
- ElementClassFilter instanceFitler = new ElementClassFilter(typeof(FamilyInstance));
- ElementClassFilter hostFilter = new ElementClassFilter(typeof(HostObject));
-
- LogicalOrFilter andFilter = new LogicalOrFilter(instanceFitler, hostFilter);
-
- FilteredElementCollector collector = new FilteredElementCollector(doc);
- collector.WherePasses(andFilter);
-
- TaskDialog.Show("numbers", collector.ToElementIds().Count.ToString());
-
- return Result.Succeeded ;
- }
- }
-
-
-
-
复制代码 转载请复制以下信息:
原文链接: http://blog.csdn.net/joexiongjin/article/details/7678923作者: 叶雄进, Autodesk ADN
|