常用过滤器

常用过滤器

  1. 房间过滤器: RoomFilter
  2. 元素相交过滤器: BoundingBoxIntersectsFilter
  3. 元素包含过滤器:BoundingBoxlslnsideFilter
  4. 元素类别过滤器:ElementCategoryFilter等同于OfCategory
  5. 元素过滤器:ElementFilter等同于OfClass()

用法:

  1. new过滤器如RoomFilter roomFilter = new RoomFilter();
  2. 放入WherePasses() 如WherePasses(roomFilter)



房间过滤器

using Autodesk.Revit.Attributes;
using Autodesk.Revit.DB;
using Autodesk.Revit.DB.Architecture;
using Autodesk.Revit.UI;
using System.Collections.Generic;
using System.Linq;
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();
            Autodesk.Revit.DB.Architecture.RoomFilter roomFilter = new RoomFilter();

            FilteredElementCollector collector = new FilteredElementCollector(document);
            List<Room> rooms = collector.WherePasses(roomFilter).Cast<Room>().ToList();
            foreach (Room item in rooms)
            {
                stringBuilder2.AppendLine(item.Name);
            }
            TaskDialog.Show("弹窗", stringBuilder2.ToString());
            return Result.Succeeded;
        }
    }
}


通过当前视图过滤
七个房间标高1和标高2的

在这里插入图片描述
获取当前活跃的视图
ElementId viewId = document.ActiveView.Id;
加上当前视图
FilteredElementCollector collector = new FilteredElementCollector(document, viewId);

using Autodesk.Revit.Attributes;
using Autodesk.Revit.DB;
using Autodesk.Revit.DB.Architecture;
using Autodesk.Revit.UI;
using System.Collections.Generic;
using System.Linq;
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();
            Autodesk.Revit.DB.Architecture.RoomFilter roomFilter = new RoomFilter();
            ElementId viewId = document.ActiveView.Id;
            FilteredElementCollector collector = new FilteredElementCollector(document, viewId);
            List<Room> rooms = collector.WherePasses(roomFilter).Cast<Room>().ToList();
            foreach (Room item in rooms)
            {
                stringBuilder2.AppendLine(item.Name);
            }
            TaskDialog.Show("弹窗", stringBuilder2.ToString());
            return Result.Succeeded;
        }
    }
}

当前活跃的是标高2,三个房间
在这里插入图片描述

通过LevelName过滤

using Autodesk.Revit.Attributes;
using Autodesk.Revit.DB;
using Autodesk.Revit.DB.Architecture;
using Autodesk.Revit.UI;
using System.Collections.Generic;
using System.Linq;
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();
            Autodesk.Revit.DB.Architecture.RoomFilter roomFilter = new RoomFilter();
            FilteredElementCollector collector = new FilteredElementCollector(document);
            List<Room> rooms = collector.WherePasses(roomFilter).Cast<Room>().ToList();
            foreach (Room item in rooms)
            {
                if (item.Level.Name.Equals("标高 2"))
                {
                    stringBuilder2.AppendLine(item.Name);
                }
            }
            TaskDialog.Show("弹窗", stringBuilder2.ToString());
            return Result.Succeeded;
        }
    }
}

在这里插入图片描述

房间删除了还能拿到
房间5删除了但是还是存在房屋明细表中,可以在明细表中删除或者判断Location != null

using Autodesk.Revit.Attributes;
using Autodesk.Revit.DB;
using Autodesk.Revit.DB.Architecture;
using Autodesk.Revit.UI;
using System.Collections.Generic;
using System.Linq;
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();
            RoomFilter roomFilter = new RoomFilter();
            FilteredElementCollector collector = new FilteredElementCollector(document);
            List<Room> rooms = collector.WherePasses(roomFilter).Cast<Room>().ToList();
            foreach (Room item in rooms)
            {
                if (item.Level.Name.Equals("标高 2") && item.Location != null) {
                stringBuilder2.AppendLine(item.Name);
                }
            }
            TaskDialog.Show("弹窗", stringBuilder2.ToString());
            return Result.Succeeded;
        }
    }
}

在这里插入图片描述
也可以使用以下方法起到同样的效果

using Autodesk.Revit.Attributes;
using Autodesk.Revit.DB;
using Autodesk.Revit.DB.Architecture;
using Autodesk.Revit.UI;
using System.Collections.Generic;
using System.Linq;
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();
            RoomFilter roomFilter = new RoomFilter();
            FilteredElementCollector collector = new FilteredElementCollector(document);
            List<Room> rooms = collector.WherePasses(roomFilter).Cast<Room>().Where(x=>x.Location != null).ToList();
            foreach (Room item in rooms)
            {
                if (item.Level.Name.Equals("标高 2") ) {
                stringBuilder2.AppendLine(item.Name);
                }
            }
            TaskDialog.Show("弹窗", stringBuilder2.ToString());
            return Result.Succeeded;
        }
    }
}



WherePasses()

using Autodesk.Revit.Attributes;
using Autodesk.Revit.DB;
using Autodesk.Revit.DB.Architecture;
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();
            //得到房间
            Room room = document.GetElement(new ElementId(337222)) as Room;
            //得到房间的编辑框
            BoundingBoxXYZ boundingBoxXYZ = room.get_BoundingBox(document.ActiveView);
            //通过边框创建一个OutLine
            Outline outLine = new Outline(boundingBoxXYZ.Min, boundingBoxXYZ.Max);
            //通过outLine创建一个BoundingBoxIntersectsFilter 元素边界过滤器
            BoundingBoxIntersectsFilter boundingBoxIntersectsFilter = new BoundingBoxIntersectsFilter(outLine);

            FilteredElementCollector collector = new FilteredElementCollector(document);

            IList<Element> elements1 = collector.WherePasses(boundingBoxIntersectsFilter).ToElements();
            foreach (Element item in elements1)
            {
                stringBuilder2.AppendLine(item.Name);
                
            }
            TaskDialog.Show("弹窗", stringBuilder2.ToString());
            return Result.Succeeded;
        }
    }
}

返回了四个墙,一个门,还有它本身
在这里插入图片描述
要这样选中房间
在这里插入图片描述
元素高亮后的结果
在这里插入图片描述
在族里面加两个桌子运行结果
在这里插入图片描述
进一步进行筛选,只选出房间的桌子

                if (item.Category.Id.IntegerValue.Equals( -2000080)) {
                    stringBuilder2.AppendLine(item.Name);
                    ids.Add(item.Id);
                }

在这里插入图片描述
也可以把

IList<Element> elements1 = collector.WherePasses(boundingBoxIntersectsFilter).ToElements();

换成

IList<Element> elements1 = collector.WherePasses(boundingBoxIntersectsFilter).OfClass(typeof(FamilyInstance)).ToElements();

不需要循环里判断也可以达到同样的效果

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值