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

2023-10-11 13:30

本文主要是介绍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;}}
}

这篇关于Revit二次开发 房间过滤器:RoomFilter的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/188369

相关文章

深度解析Spring Boot拦截器Interceptor与过滤器Filter的区别与实战指南

《深度解析SpringBoot拦截器Interceptor与过滤器Filter的区别与实战指南》本文深度解析SpringBoot中拦截器与过滤器的区别,涵盖执行顺序、依赖关系、异常处理等核心差异,并... 目录Spring Boot拦截器(Interceptor)与过滤器(Filter)深度解析:区别、实现

spring-gateway filters添加自定义过滤器实现流程分析(可插拔)

《spring-gatewayfilters添加自定义过滤器实现流程分析(可插拔)》:本文主要介绍spring-gatewayfilters添加自定义过滤器实现流程分析(可插拔),本文通过实例图... 目录需求背景需求拆解设计流程及作用域逻辑处理代码逻辑需求背景公司要求,通过公司网络代理访问的请求需要做请

Spring Boot拦截器Interceptor与过滤器Filter深度解析(区别、实现与实战指南)

《SpringBoot拦截器Interceptor与过滤器Filter深度解析(区别、实现与实战指南)》:本文主要介绍SpringBoot拦截器Interceptor与过滤器Filter深度解析... 目录Spring Boot拦截器(Interceptor)与过滤器(Filter)深度解析:区别、实现与实

9个SpringBoot中的自带实用过滤器使用详解

《9个SpringBoot中的自带实用过滤器使用详解》在SpringBoot应用中,过滤器(Filter)是处理HTTP请求和响应的重要组件,SpringBoot自带了许多实用的过滤器,如字符编码,跨... 目录1. CharacterEncodingFilter - 字符编码过滤器功能和配置手动配置示例2

Spring Boot拦截器Interceptor与过滤器Filter详细教程(示例详解)

《SpringBoot拦截器Interceptor与过滤器Filter详细教程(示例详解)》本文详细介绍了SpringBoot中的拦截器(Interceptor)和过滤器(Filter),包括它们的... 目录Spring Boot拦截器(Interceptor)与过滤器(Filter)详细教程1. 概述1

dubbo3 filter(过滤器)如何自定义过滤器

《dubbo3filter(过滤器)如何自定义过滤器》dubbo3filter(过滤器)类似于javaweb中的filter和springmvc中的intercaptor,用于在请求发送前或到达前进... 目录dubbo3 filter(过滤器)简介dubbo 过滤器运行时机自定义 filter第一种 @A

Java 8 Stream filter流式过滤器详解

《Java8Streamfilter流式过滤器详解》本文介绍了Java8的StreamAPI中的filter方法,展示了如何使用lambda表达式根据条件过滤流式数据,通过实际代码示例,展示了f... 目录引言 一.Java 8 Stream 的过滤器(filter)二.Java 8 的 filter、fi

如何通过海康威视设备网络SDK进行Java二次开发摄像头车牌识别详解

《如何通过海康威视设备网络SDK进行Java二次开发摄像头车牌识别详解》:本文主要介绍如何通过海康威视设备网络SDK进行Java二次开发摄像头车牌识别的相关资料,描述了如何使用海康威视设备网络SD... 目录前言开发流程问题和解决方案dll库加载不到的问题老旧版本sdk不兼容的问题关键实现流程总结前言作为

Servlet中配置和使用过滤器的步骤记录

《Servlet中配置和使用过滤器的步骤记录》:本文主要介绍在Servlet中配置和使用过滤器的方法,包括创建过滤器类、配置过滤器以及在Web应用中使用过滤器等步骤,文中通过代码介绍的非常详细,需... 目录创建过滤器类配置过滤器使用过滤器总结在Servlet中配置和使用过滤器主要包括创建过滤器类、配置过滤

无人叉车3d激光slam多房间建图定位异常处理方案-墙体画线地图切分方案

墙体画线地图切分方案 针对问题:墙体两侧特征混淆误匹配,导致建图和定位偏差,表现为过门跳变、外月台走歪等 ·解决思路:预期的根治方案IGICP需要较长时间完成上线,先使用切分地图的工程化方案,即墙体两侧切分为不同地图,在某一侧只使用该侧地图进行定位 方案思路 切分原理:切分地图基于关键帧位置,而非点云。 理论基础:光照是直线的,一帧点云必定只能照射到墙的一侧,无法同时照到两侧实践考虑:关