参数过滤器ElementParameterFilter——以选择一个房间内所有对象为例

 1 [TransactionAttribute(Autodesk.Revit.Attributes.TransactionMode.Manual)]
 2 public class FindFurnitureInARoom : IExternalCommand
 3 {
 4       public Result Execute(ExternalCommandData commandData, ref string messages, ElementSet elements)
 5       {
 6           try
 7           {
 8               UIApplication app = commandData.Application;
 9               Document document = app.ActiveUIDocument.Document;
10
11               Selection sel = app.ActiveUIDocument.Selection;
12               Reference ref1 = sel.PickObject(ObjectType.Element, "Please pick a room");
13               Room room = document.GetElement(ref1) as Room;
14
15               if (room != null)
16               {
17                   ParameterValueProvider provider = new ParameterValueProvider(new ElementId(BuiltInParameter.ELEM_ROOM_ID));
18                   FilterNumericRuleEvaluator evaluator = new FilterNumericEquals();
19
20                   FilterElementIdRule rule = new FilterElementIdRule(provider, evaluator, room.Id);
21                   ElementParameterFilter filter = new ElementParameterFilter(rule);
22
23                   FilteredElementCollector collector = new FilteredElementCollector(document);
24                   collector.WherePasses(filter);
25
26                   sel = app.ActiveUIDocument.Selection;
27                   sel.Elements.Clear();
28                   foreach (Element elem in collector)
29                       sel.Elements.Add(elem);
30
31                   TaskDialog.Show("The number", "The number of components = " + collector.Count().ToString());
32                   return Result.Succeeded;
33               }
34               else
35               {
36                   messages = "请选择一个房间!";
37                   return Result.Failed;
38               }
39           }
40           catch (Exception e)
41           {
42               messages = e.Message;
43               return Result.Failed;
44           }
45       }
46 }

ElementParameterFilter():过滤出符合一个或多个参数值的元素。

1.首先要确定依据什么参数来过滤,即用ParameterValueProvider()来确定provider。

2.其次确定评估方式,相等还是大于小于。即用FilterNumericRuleEvaluator()来确定numeric的评估方式,是FilterNumericEqual还是FilterNumericLess之类的。

3.最后确定被用来作比较的数值。此处是room的ID。

综上三点便形成了过滤的规则FilterElementIdRule(用什么,通过什么方式,和什么(作比较))。

接着利用这个rule来过滤。

另外,此处过滤原理:每一个房间对应一个ID,而处于这个房间内部的对象。

PS:此例中门内开与外开不同,向内开启则会算中room中一个图元,外开不然。

代码主体摘自叶雄进老师。

时间: 2024-07-31 09:04:13

参数过滤器ElementParameterFilter——以选择一个房间内所有对象为例的相关文章

AM二次开发中选择指定范围内的对象

使用Spatial可以快速选择指定范围内的对象 例如下面的代码可以选择所有在[0,0,0]-[10m,10m,10m]这个盒子之内的对象: 其中ElementsInBox还可以指定对象类型做进一步筛选. LimitsBox box = LimitsBox.Create(Position.Create(0, 0, 0), Position.Create(10000.0f, 10000.0f, 10000.0f)); DbElement[] eles = Spatial.Instance.Eleme

ASP基础教程:ASP内建对象Server

通过前九篇的理论和实践,相信大家已经对 ASP 有了系统的了解,虽然至今为止,我们只学了 ASP 的 4 个内建对象,但已经完全能够写出一些实用的小程序了.今天,作者将继续给大家讲解最后一个 ASP 内建对象——Server. 在开始本次课程之前,我仍要在这里回答一些朋友们提出的比较普遍的问题.最近仍有不少朋友来信问我,如何构建服务器端的 Active Server Page 环境.我想可能是我在前几篇中没有讲清楚,因此,在本篇的开头有必要把这个问题详细阐述一遍. ASP 的应用完全是基于 Mi

jsp 内置对象(五)

1.Request对象 该对象封装了用户提交的信息,通过调用该对象相应的方法可以获取封装的信息,即使用该对象可以 获取用户提交的信息. 当Request对象获取客户提交的汉字字符时,会出现乱码问题,必须进行特殊处理.首先,将获取的 字符串用ISO-8859-1进行编码,并将编码存发岛一个字节数组中,然后再将这个数组转化为字符串对象 即可.如下: String textContent=request.getParameter("boy") byte b[]=textContent.get

JSP9个内置对象

JSP内置对象:我们在使用JSP进行页面编程时可以直接使用而不需自己创建的一些Web容器已为用户创建好的JSP内置对象.如request,session,response,out等. 下面就JSP2.0给出的9个内置对象: 内置对象 类型 作用域 request javax.servlet.http.HttpServletRequest request response javax.servlet.http.HttpServletResponse response pageContext jav

JSP 的9个内置对象

JSP内置对象:我们在使用JSP进行页面编程时可以直接使用而不需自己创建的一些Web容器已为用户创建好的JSP内置对象.如request,session,response,out等. 下面就JSP2.0给出的9个内置对象: 内置对象 类型 作用域 request javax.servlet.http.HttpServletRequest request response javax.servlet.http.HttpServletResponse response pageContext jav

JSP内置对象与servlet对应关系

隐式对象 说明 out 转译后对应JspWriter对象,其内部关联一个PringWriter对象 request 转译后对应HttpServletRequest/ServletRequest对象 response 转译后对应HttpServletRespons/ServletResponse对象 config 转译后对应ServletConfig对象 application 转译后对应ServletContext对象 session 转译后对应HttpSession对象 pageContext

05.九个内置对象

在之前我们学习的过程中使用的对象大部分都是我们自己使用new关键字或者反射创建的,而现在的容器中会自动创建对象,我们只要直接使用即可,不需要我们再去创建这些对象,在Tomcat容器中提供了九种内置对象. 名称 类型 描述 pageContext javax.servlet.jsp.PageContext 表示的是页面上下文环境(jsp) request HttpServletRequest 表示一次用户请求 response HttpServletResponse 表示一次响应 session

JSP内置对象——九大内置对象简介与四种作用域范围以及Web程序的请求和响应模式

最近在学习JSP相关基础知识,我们都知道JSP当中存在一组不使用new关键字就可以在脚本和表达式中使用的对象,在Web开发中经常使用.为了能更好的理解这些对象,在此对JSP内置对象作一些归纳. 目录: JSP内置对象——九大内置对象简介与四种作用域范围以及Web程序的请求和响应模式 JSP内置对象——out(待更新) JSP内置对象——request/response(待更新) JSP内置对象——session(待更新) JSP内置对象——application(待更新) JSP内置对象——其他

jsp内置对象之-session对象

session对象 session对象是一个JSP内置对象. session对象在第一个JSP页面被装载时自动创建,完成回话期管理. session生命周期从一个客户打开浏览器并连接到服务器开始,到客户关闭浏览器离开这个服务器结束被称为一个会话. 当一个客户访问一个服务器时,可能在服务器的几个页面之间切换,服务器应当通过某种办法知道这是一个客户,就需要session对象. session对象时HttpSession类的实例. session的工作原理如下: 客户首次访问服务器的一个页面时,服务器