700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > Revit二次开发 房间过滤器:RoomFilter

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

时间:2024-07-26 01:23:27

相关推荐

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<Room> rooms = collector.WherePasses(roomFilter).Cast<Room>().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<Room> rooms = collector.WherePasses(roomFilter).Cast<Room>().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<Room> rooms = collector.WherePasses(roomFilter).Cast<Room>().Where(x=>x.Location!=null).ToList();foreach (Room item in rooms){stringBuilder.Append(item.Name);}TaskDialog.Show("提示",stringBuilder.ToString());return Result.Succeeded;}}}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。