对象筛选器
对象过滤器是一个按类型和/或属性过滤对象的工具,由过滤算法和设置界面组成(以下称“工具”)。该工具用于诸如 条件搜索 等插件中。
该工具由两个过滤器组成——类型过滤器和属性过滤器:

两个过滤器之间存在逻辑运算符 和/或。运算符 和 表示只有当对象同时满足两个过滤器的条件时才视为通过过滤。运算符 或 则表示只要对象满足任一过滤器的条件即可通过过滤。
可以通过右键上下文菜单将类型过滤器中的类型列表和属性过滤器中的条件列表复制到剪贴板,或从剪贴板粘贴回来。
类型过滤器
类型过滤器为允许的对象类型的树状列表。类型列表的编辑在父窗口(插件窗口)的对话框中进行:

对话框顶部有按名称搜索类型的字段。在搜索字段中输入星号(*)会显示所有已选类型。列表右侧的按钮可用于取消选择所有类型
、展开所有类型
和折叠所有类型
、仅显示已选类型
或标记项目中已存在对象的类型
。标记的类型可以保存为集合
,以便在当前插件或其他使用类型过滤器的插件中重复使用。

可通过按钮
加载类型集合(从所选集合中标记类型)。
属性过滤器
属性过滤器是由逻辑运算符 且 或 或 分隔的条件列表。在过滤字段中使用特殊语法记录条件,比较运算符使用以下符号:
| = | – 等于 |
| < | – 小于 |
| <= | – 小于或等于 |
| > | – 大于 |
| >= | – 大于或等于 |
| <> | – 不等于 |
| ~ | – 包含 |
| !~ | – 不包含 |
条件的编辑在单独的窗口中进行:

创建条件的规则:
- 属性是一个概念性术语,结合了对象的属性、参数和计算特性。
- 在"值"字段中可以输入多个允许值,用逗号分隔。如果属性的值与至少一个允许值匹配,则视为满足条件。
- 为防止逗号被视为分隔符,应使用反斜杠进行转义。例如:"值 1\,5"。
- "属性存在"条件表示对象在存在此属性时将被处理,而不考虑其值。
- "属性缺失"条件表示对象在缺少该属性时将被处理。
- 字符串属性仅通过"等于"、"不等于"、"包含"、"不包含"条件进行检查。
- 数值属性可通过除"包含"之外的所有条件进行检查。
- "包含"条件检查对象属性是否包含至少一个允许值;"不包含"条件检查对象属性是否不包含至少一个值。
- 要使用"以…开头"条件,请选择"包含"并在值末尾添加"*"。例如:"混凝土*"。
- 要使用"以…结尾"条件,请选择"包含"并在值开头添加"*"。例如:"*混凝土"。
- 要使用"不以…开头"条件,请选择"不包含"并在值末尾添加"*"。例如:"混凝土*"。
- 要使用"不以…结尾"条件,请选择"不包含"并在值开头添加"*"。例如:"*混凝土"。
- 字符串值的检查区分大小写。
- 要检查布尔属性,可以使用"是/否"、"true/false"或0(否)和1(是)。
- 如果属性返回长度,默认值为毫米。要使用其他单位,请在条件中通过空格指定:"1 m" 表示米,"10 cm" 表示厘米,"100 mm" 表示毫米。
- 如果属性返回面积,默认值为平方米。要使用其他单位,请在条件中通过空格指定:"1 m2" 表示平方米,"10 cm2" 表示平方厘米,"100 mm2" 表示平方毫米。
- 如果属性返回体积,默认值为立方米。要使用其他单位,请在条件中通过空格指定:"1 m3" 表示立方米,"10 cm3" 表示立方厘米,"100 mm3" 表示立方毫米。
- 如果属性返回质量,默认值为千克。要使用其他单位,请在条件中通过空格指定:"1 t" 表示吨,"10 kg" 表示千克,"100 g" 表示克。
- 所有分组条件中的简单子条件均使用"与"运算符进行检查,即所有条件都必须满足。
右侧有两个链接样式的按钮,可用于向条件列表添加新的简单条件或组条件。
在参数标识符的输入字段中可能会出现一个按钮,用于从列表中选择属性:

当在类型过滤器中指定了类型时,会显示此按钮。此时可用三个列表——属性、参数和计算特征。
组条件由一组简单条件组成,且组内所有简单条件通过逻辑运算符 且 进行检查。即当对象满足组内所有简单条件时,该对象满足组条件。在过滤字段中,组条件用方括号表示。
窗口底部有一个下拉列表 对象符合以下条件,用于设置所有条件之间使用的逻辑运算符。值 所有条件均满足 对应逻辑运算符 且,值 任一条件满足 对应逻辑运算符 或。
上图示例在过滤字段中的表示如下:

这表示:当墙的属性“Mark”(标记)为“С-1”,或当墙的属性“Mark”为“С-2”且属性“Nominal lenght”(公称长度)大于 3000 时,该墙符合条件。
在使用“等于”、“不等于”、“包含”、“不包含”这些操作符检查字符串属性值时,比较区分大小写。