Revit二次开发 房间过滤器:RoomFilter

通过指定过滤器获取图元的基本步骤如下:

①新建一个FilteredElementCollector。

②对它运用一个或多个过滤器。

③获取滤过的图元或图元ID。

过滤器的某些类型有其专用过滤器,如RoomFilter。

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.DB.Structure;
using Autodesk.Revit.UI;
using Autodesk.Revit.UI.Selection;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace work03._1
{[TransactionAttribute(TransactionMode.Manual)]public class 练习书本例题 : IExternalCommand{public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements){//获取文档UIDocument uIDocument = commandData.Application.ActiveUIDocument;Document document = uIDocument.Document;Selection selection = uIDocument.Selection;//创建房间过滤器RoomFilter roomFilter = new RoomFilter();StringBuilder stringBuilder = new StringBuilder();//创建收集器FilteredElementCollector collector = new FilteredElementCollector(document);//应用过滤器过滤List rooms = collector.WherePasses(roomFilter).Cast().ToList();//遍历元素foreach (Room item in rooms){stringBuilder.Append(item.Name);}TaskDialog.Show("提示",stringBuilder.ToString());return Result.Succeeded;}}
}

如果revit操作中将其中一个房间删除,但是该房间仍保留在此项目中,这时按照上述代码执行,仍然显示删除掉的那个房间。

 这时可以通过判断房间的location值是否为空值来判断。

这里有两种写法:

写法一:通过if来判断

using Autodesk.Revit.Attributes;
using Autodesk.Revit.DB;
using Autodesk.Revit.DB.Architecture;
using Autodesk.Revit.DB.Structure;
using Autodesk.Revit.UI;
using Autodesk.Revit.UI.Selection;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace work03._1
{[TransactionAttribute(TransactionMode.Manual)]public class 练习书本例题 : IExternalCommand{public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements){UIDocument uIDocument = commandData.Application.ActiveUIDocument;Document document = uIDocument.Document;Selection selection = uIDocument.Selection;RoomFilter roomFilter = new RoomFilter();StringBuilder stringBuilder = new StringBuilder();FilteredElementCollector collector = new FilteredElementCollector(document);List rooms = collector.WherePasses(roomFilter).Cast().ToList();foreach (Room item in rooms){if(item.Level.Name.Equals("标高 1")&& item.Location !=null){stringBuilder.Append(item.Name);}}TaskDialog.Show("提示",stringBuilder.ToString());return Result.Succeeded;}}
}

写法二:Where(x=>x.Location!=null)进行判断location值不为空的筛选过滤

using Autodesk.Revit.Attributes;
using Autodesk.Revit.DB;
using Autodesk.Revit.DB.Architecture;
using Autodesk.Revit.DB.Structure;
using Autodesk.Revit.UI;
using Autodesk.Revit.UI.Selection;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace work03._1
{[TransactionAttribute(TransactionMode.Manual)]public class 练习书本例题 : IExternalCommand{public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements){UIDocument uIDocument = commandData.Application.ActiveUIDocument;Document document = uIDocument.Document;Selection selection = uIDocument.Selection;RoomFilter roomFilter = new RoomFilter();StringBuilder stringBuilder = new StringBuilder();FilteredElementCollector collector = new FilteredElementCollector(document);List rooms = collector.WherePasses(roomFilter).Cast().Where(x=>x.Location!=null).ToList();foreach (Room item in rooms){stringBuilder.Append(item.Name);}TaskDialog.Show("提示",stringBuilder.ToString());return Result.Succeeded;}}
}


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部