土木在线论坛 \ BIM技术 \ BIM专业软件 \ 编程获取Revit视图中的所有实例对象数量

编程获取Revit视图中的所有实例对象数量

发布于:2017-01-22 16:34:22 来自:BIM技术/BIM专业软件 [复制转发]
【作者:叶雄进】 本文转载自网络
问题:
现在需要获取视图中的所有实例对象,包括系统族的实例与用户自建族的实例。使用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 ;
}
}
上面的代码获得了实例数量,当然你可以对其中的每一个对象进行遍历做你希望的操作。

全部回复(3 )

只看楼主 我来说两句
  • 阳光心情
    阳光心情 沙发
    学习了,感谢分享
    2018-10-10 12:29:10

    回复 举报
    赞同0
  • co1494706509426
    谢谢楼主的资料
    2017-05-14 14:07:14

    回复 举报
    赞同0
加载更多
这个家伙什么也没有留下。。。

BIM专业软件

返回版块

9026 条内容 · 234 人订阅

猜你喜欢

阅读下一篇

BIM入门教程,一看就会

本帖最后由 lybfly 于 2017-1-19 09:37 编辑 BIM入门教程,让你一看就会的教程,快速入门,一起学习分享

回帖成功

经验值 +10