收集器FilteredElementCollector

收集器FilteredElementCollector

三种构造函数

  1. 收集全部元素: FilteredElementCollector(Document document)
  2. 根据指定的ld集合:FilteredElementCollector(Document document, List < Elementld > ids)
  3. 根据指定的视图: FilteredElementCollector(Document document,Elementld viewld)

FilteredElementCollector常用的方法:

  1. 通过类型: OfCategoryld() 或 OfCategory()
  2. 通过类:ofClass()
  3. 通过wherePasses()



Example

通过类型: OfCategoryld() 或 OfCategory()
拿到窗的id
在这里插入图片描述

using Autodesk.Revit.Attributes;
using Autodesk.Revit.DB;
using Autodesk.Revit.UI;
using System.Collections.Generic;
using System.Text;

namespace pro
{   

    [Transaction(TransactionMode.Manual)]
    public class Class1 : IExternalCommand
    {
        public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
        {
            UIApplication uiApp = commandData.Application;
            UIDocument uIDocument = uiApp.ActiveUIDocument;
            Document document = uIDocument.Document;
            //普通
            FilteredElementCollector collector = new FilteredElementCollector(document);
            IList<Element> elements2 = collector.OfCategoryId(new ElementId(-2000014)).ToElements();

            StringBuilder stringBuilder = new StringBuilder();
            foreach (Element item in elements2)
            {
                if (item is FamilySymbol)
                {
                    stringBuilder.AppendLine("族类型\t\t" + item.Name);
                }
                else if (item is FamilyInstance)
                {
                    stringBuilder.AppendLine("族实例\t\t" + item.Name);
                }
            }
            TaskDialog.Show("弹窗", stringBuilder.ToString());

            return Result.Succeeded;
        }
    }
}

运行结果
在这里插入图片描述


OfClass 和 OfCategory()
拿到门的BuiltInCategory 必须是FamilyInstance

using Autodesk.Revit.Attributes;
using Autodesk.Revit.DB;
using Autodesk.Revit.UI;
using System.Collections.Generic;
using System.Text;

namespace pro
{   

    [Transaction(TransactionMode.Manual)]
    public class Class1 : IExternalCommand
    {
        public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
        {
            UIApplication uiApp = commandData.Application;
            UIDocument uIDocument = uiApp.ActiveUIDocument;
            Document document = uIDocument.Document;

            FilteredElementCollector collector = new FilteredElementCollector(document);

            StringBuilder stringBuilder = new StringBuilder();
            IList<Element> elements4 = collector.OfCategory(BuiltInCategory.OST_Doors).OfClass(typeof(FamilyInstance)).ToElements();
            //获取所有族
            foreach (Element item in elements4)
            {
                stringBuilder.AppendLine("族实例\t\t" + item.Name + "id" + item.Id);
            }
            TaskDialog.Show("弹窗", stringBuilder.ToString());

            return Result.Succeeded;
        }
    }
}

两个门
在这里插入图片描述



通过类:ofClass()

using Autodesk.Revit.Attributes;
using Autodesk.Revit.DB;
using Autodesk.Revit.UI;
using System.Collections.Generic;
using System.Text;

namespace pro
{   

    [Transaction(TransactionMode.Manual)]
    public class Class1 : IExternalCommand
    {
        public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
        {
            UIApplication uiApp = commandData.Application;
            UIDocument uIDocument = uiApp.ActiveUIDocument;
            Document document = uIDocument.Document;
			//得到所有的指定类型
            FilteredElementCollector collector = new FilteredElementCollector(document);

            StringBuilder stringBuilder = new StringBuilder();
            //获取所有的族实例
            IList<Element> elements4 = collector.OfClass(typeof(FamilyInstance)).ToElements();
            //获取所有族类型
			//IList<Element> elemnets4 = collector.OfClass(typeof(FailySymble)).ToElements();
			//获取所有族
			//IList<Element> elements4 = collector.OfClass(typeof(Family)).ToElements();
            foreach (Element item in elements4)
            {
                stringBuilder.AppendLine("族实例\t\t" + item.Name + "id" + item.Id);
            }
            TaskDialog.Show("弹窗", stringBuilder.ToString());

            return Result.Succeeded;
        }
    }
}

两个窗和一个门都是FamilyInstance类型,一共三个
在这里插入图片描述
根据标高来筛选

Level level = document.GetElement(item.LeveId) as Level;
if(level.Name.Equals("标高 1")){
	stringBuilder2.AppendLine("名称\t\t"+item.Name+"id  "+item.Id+"  标高"+level.Name);
}

根据名称来筛选

FamilyInstance instance = item as FamilyInstance;
string symbolName = instance.Symbol.Name;
if("750 x 2000mm".Equals(symbolName)){
	stringBuilder2.AppendLine("名称\t\t"+item.Name+"id  "+item.Id+"  标高"+level.Name);
}




按ids过滤

using Autodesk.Revit.Attributes;
using Autodesk.Revit.DB;
using Autodesk.Revit.UI;
using System.Collections.Generic;
using System.Text;

namespace pro
{   

    [Transaction(TransactionMode.Manual)]
    public class Class1 : IExternalCommand
    {
        public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
        {
            UIApplication uiApp = commandData.Application;
            UIDocument uIDocument = uiApp.ActiveUIDocument;
            Document document = uIDocument.Document;

            FilteredElementCollector collector = new FilteredElementCollector(document);
            StringBuilder stringBuilder2 = new StringBuilder();
            //按ids过滤
            IList<Reference> references = uIDocument.Selection.PickObjects(Autodesk.Revit.UI.Selection.ObjectType.Element);
            List<ElementId> ids = new List<ElementId>();
            foreach (Reference reference in references)
            {
                ids.Add(reference.ElementId);
            }

            FilteredElementCollector collector2 = new FilteredElementCollector(document, ids);
            //BuiltInCategory.OST_Windows/OST_Doors选择门或窗
            IList<Element> elements4 = collector2.OfCategory(BuiltInCategory.OST_Windows).OfClass(typeof(FamilyInstance)).ToElements();
            foreach (Element item in elements4)
            {
                stringBuilder2.AppendLine(item.Name);
            }
            TaskDialog.Show("弹窗",stringBuilder2.ToString());
            return Result.Succeeded;
        }
    }
}

三个门两个窗,只选择了窗,弹出两条信息
在这里插入图片描述



指定视图
传入标高1的id(传入标高2的id则全部拿到)

using Autodesk.Revit.Attributes;
using Autodesk.Revit.DB;
using Autodesk.Revit.UI;
using System.Collections.Generic;
using System.Text;

namespace pro
{   

    [Transaction(TransactionMode.Manual)]
    public class Class1 : IExternalCommand
    {
        public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
        {
            UIApplication uiApp = commandData.Application;
            UIDocument uIDocument = uiApp.ActiveUIDocument;
            Document document = uIDocument.Document;

            StringBuilder stringBuilder2 = new StringBuilder();
            //指定视图
            ElementId viewId = new ElementId(312);
            FilteredElementCollector collector3 = new FilteredElementCollector(document, viewId);
            IList<Element> elements4 = collector3.OfCategory(BuiltInCategory.OST_Doors).OfClass(typeof(FamilyInstance)).ToElements();
            //List<ElementId> ids1 = new List<ElementId>();
            foreach (Element item in elements4)
            {
                stringBuilder2.AppendLine(item.Name+"item.id:"+ item.Id);
                //ids1.Add(item.Id);
            }
            TaskDialog.Show("弹窗",stringBuilder2.ToString());
            //uIDocument.Selection.SetElementIds(ids1);
            return Result.Succeeded;
        }
    }
}

把注释放开使用高亮元素

只拿到标高1的门信息
在这里插入图片描述
使用标高2的id时把标高1的门也选中了修改底部范围-底部标高(即标高1换成标高2)
在这里插入图片描述

也可以使用Level.Name来过滤视图
在这里插入图片描述

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值