编程获取Revit视图中的所有实例对象数量
胖达君
胖达君 Lv.6
2017年01月22日 16:34:28
只看楼主

【作者:叶雄进】 本文转载自网络问题:现在需要获取视图中的所有实例对象,包括系统族的实例与用户自建族的实例。使用OfClass(typeof(FamilyInstance))过滤方法比较容易获取用户自建族的实例,但是视图中的系统族实例,不知道如何一起获取出来,请指教。答:是的,通过FilteredElementCollector.OfClass(typeof((FamilyInstance)) 只能获取标准族实例,也就是你说的自建族实例。

【作者:叶雄进】 本文转载自网络
问题:
现在需要获取视图中的所有实例对象,包括系统族的实例与用户自建族的实例。使用OfClass(typeof(FamilyInstance))过滤方法比较容易获取用户自建族的实例,但是视图中的系统族实例,不知道如何一起获取出来,请指教。
答:
是的,通过FilteredElementCollector.OfClass(typeof((FamilyInstance)) 只能获取标准族实例,也就是你说的自建族实例。
但是系统族实例并不是从FamilyInstance类派生的,而是从HostObject类派生。
所以你可以使用逻辑Or过滤器LogicOrFilter,把两个类过滤器(ElementClassFilter)合并起来实现。
下面是完整实现代码。在对话框中显示所有实例对象的数量。
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 ;
}
}
上面的代码获得了实例数量,当然你可以对其中的每一个对象进行遍历做你希望的操作。
wx_1488390304190
2017年03月02日 01:58:59
3楼
谢谢楼主分享
回复
co1494706509426
2017年05月14日 14:07:20
6楼
谢谢楼主的资料
回复
阳光心情
2018年10月10日 12:29:16
7楼
学习了,感谢分享
回复

相关推荐

APP内打开