图元过滤器
元素过滤器是一个根据类别和/或参数过滤元素的工具,由过滤算法和设置界面组成(以下简称“工具”)。该工具在许多插件中使用,例如 工作集、参数化、元素着色 等插件。
该工具由两个过滤器组成:类别过滤器和参数过滤器。在某些插件中,只能使用其中一个过滤器。例如,方位 插件仅使用参数过滤器。
在插件界面中,该工具可以采用水平布局:

或垂直布局:

如果工具中同时使用两个过滤器,则它们之间会显示逻辑运算符 且/或。运算符 且 表示元素必须同时满足两个过滤器的条件,才符合过滤要求。运算符 或 表示元素只需满足其中任意一个过滤器的条件,即符合过滤要求。
类别过滤器中的类别列表和参数过滤器中的条件列表可以通过右键单击打开的上下文菜单复制到剪贴板,也可以从剪贴板粘贴。
类别过滤器
类别过滤器是一个包含允许类别的树状列表。类别列表通过父窗口(插件窗口)中的对话框进行编辑:

对话框顶部设有类别搜索框。搜索既可以根据显示的类别名称进行,也可以根据其唯一的程序名称进行。使用下方的按钮,可以按类别类型筛选列表中显示的类别组。
列表右侧的按钮适用于当前选定的类别组。使用这些按钮可以取消选择所有类别
、展开
和折叠所有类别
、仅显示已选类别
,或选中当前视图中存在相应元素的类别
。选定的类别可以保存为集合
,以便以后在当前插件以及其他使用类别过滤器的插件中使用。

可以使用
按钮加载类别集合(选中所选集合中的类别)。
参数过滤器
参数过滤器是由逻辑运算符 且 或 或 连接的条件列表。在过滤器字段中,条件采用特殊语法表示,其中比较运算符使用以下符号:
| = | – 等于 |
| < | – 小于 |
| <= | – 小于或等于 |
| > | – 大于 |
| >= | – 大于或等于 |
| <> | – 不等于 |
| ~ | – 包含 |
| !~ | – 不包含 |
条件在单独的窗口中进行编辑:

窗口顶部设有 简单条件 和 组合条件 链接,可用于添加相应的条件。条件可以调整顺序、复制和删除。清除 链接用于删除所有条件。
创建和检查条件的规则:
- 在“值”字段中可以输入多个允许值,并使用逗号分隔。如果参数值与至少一个允许值匹配,则认为该参数满足条件。
- 如果不希望逗号被识别为分隔符,则必须使用反斜杠对其进行转义。例如,“值 1\,5”。
- “存在参数”条件表示只要元素具有指定参数,无论参数值是什么,该元素都会被处理。
- “不存在参数”条件表示当元素不具有指定参数时,该元素会被处理。
- “只读”条件的值为“否”表示当参数可以编辑时,元素会被处理。“只读”条件的值为“是”表示当参数无法编辑时,元素会被处理。如果参数是不可修改的系统参数(例如“体积”参数)、元素位于无法访问的工作集中,或存在其他限制,则该参数可能无法编辑。
- 字符串参数只能使用“等于”、“不等于”、“包含”和“不包含”条件进行检查。
- “包含”条件用于检查元素参数是否包含至少一个允许值。“不包含”条件则用于检查参数是否不包含至少一个指定值。
- 要使用“以……开头”条件,请选择“包含”,并在值的末尾添加“*”字符。例如,“Wall*”。
- 要使用“以……结尾”条件,请选择“包含”,并在值的开头添加“*”字符。例如,“*Wall”。
- 要使用“不以……开头”条件,请选择“不包含”,并在值的末尾添加“*”字符。例如,“Wall*”。
- 要使用“不以……结尾”条件,请选择“不包含”,并在值的开头添加“*”字符。例如,“*Wall”。
- 默认情况下,字符串值检查区分大小写,使用 Aa 选项。对于“等于”、“不等于”、“包含”和“不包含”条件,可以选择 aa 选项,进行不区分大小写的检查。在过滤器的字符串表示形式中,此类条件会在参数名称后添加“?”字符,例如:标记?=A-1。
- 开关类型参数按整数进行检查:0 – 关闭,1 – 开启。
- 检查特殊参数“Group”(父组)时,“存在参数”和“不存在参数”条件分别用于判断元素是否属于某个组。“存在参数”被解释为“元素必须属于某个组”,“不存在参数”被解释为“元素不得属于任何组”。如果元素属于某个组,则其他任何条件都会按照字符串检查规则检查组名称。
- 检查特殊参数“Assembly”(父装配体)时,“存在参数”和“不存在参数”条件分别用于判断元素是否属于某个装配体。“存在参数”被解释为“元素必须属于某个装配体”,“不存在参数”被解释为“元素不得属于任何装配体”。如果元素属于某个装配体,则其他任何条件都会按照字符串检查规则检查装配体名称。
- 检查特殊参数“Curtain”(墙是否为幕墙)时,“存在参数”和“不存在参数”条件分别用于判断墙是否为幕墙。“存在参数”被解释为“墙必须是幕墙”,“不存在参数”被解释为“墙不得是幕墙”。
- 检查特殊参数“Nested”(族是否为嵌套族)时,“存在参数”和“不存在参数”条件分别用于判断族是否为嵌套族。“存在参数”被解释为“族必须是嵌套族”,“不存在参数”被解释为“族不得是嵌套族”。
- 检查特殊参数“Parent”(族是否为父族)时,“存在参数”和“不存在参数”条件分别用于判断族是否为父族,即是否包含嵌套族。“存在参数”被解释为“族必须是父族”,“不存在参数”被解释为“族不得是父族”。
- 使用特殊参数“BottomZ”和“TopZ”时,分别检查元素几何体的最低标高和最高标高。“BottomZ”和“TopZ”被视为数值参数,并使用相应的条件进行检查。标高值以毫米为单位,并四舍五入保留三位小数。在“值”字段中可以指定标高名称:如果找到指定标高,则使用该标高对应的毫米值,并四舍五入保留三位小数。
- 特殊参数“AreaScheme”返回面积所属的面积方案名称。“AreaScheme”的值按照字符串检查规则进行检查。如果元素不是面积,则忽略该条件,并始终返回“真”。
- 检查特殊参数“InMEPSystem”(元素是否属于机电系统)时,“存在参数”和“不存在参数”条件分别用于判断元素是否属于机电系统。“存在参数”被解释为“元素属于机电系统”,“不存在参数”被解释为“元素不属于机电系统”。
- 检查特殊参数“InRebarSystem”(钢筋是否属于钢筋系统)时,“存在参数”和“不存在参数”条件分别用于判断钢筋是否属于钢筋系统。“存在参数”被解释为“钢筋属于钢筋系统”,“不存在参数”被解释为“钢筋不属于钢筋系统”。
- 特殊参数“DocumentTitle”返回当前文档的名称。“DocumentTitle”的值按照字符串检查规则进行检查。如果文档尚未保存或已分离,则返回默认值或空字符串。
- 组合条件中所有嵌套的简单条件均使用“且”运算符进行检查,即必须满足所有嵌套条件。
- 可以使用共享参数的 GUID 或内置参数的系统名称代替参数名称。

已创建的条件可以保存为集合
,以供以后使用。保存时必须指定集合名称,可以根据需要填写描述,并选择集合的可用范围:
- 保存到插件 – 该集合仅在当前插件中可用
- 全局保存 – 该集合可在其他使用参数过滤器的插件中使用。
可以使用
按钮加载之前保存的条件集合。
参数标识符字段中可能会显示一个按钮,用于从列表中选择参数:

当类别过滤器中指定了类别时,该按钮会出现。如果当前文档中存在这些类别的元素实例,则可以使用两个列表:实例参数 和 类型参数。如果模型中不存在实例,但存在相应的类型,则只显示类型参数列表。
参数标识符可以是参数名称、共享参数的 GUID 或内置参数的系统名称。
除普通参数外,条件中还可以使用元素标识符(ID)、元素类型标识符(TypeID),以及 Group、Assembly、Curtain、Parent、Nested、BottomZ、TopZ、AreaScheme、InMEPSystem、InRebarSystem、DocumentTitle 等特殊参数(如果可用)。
选择“等于”和“不等于”条件时,会显示用于搜索参数值的按钮
:

搜索会检查指定类别的所有元素及元素类型。搜索窗口中提供以下搜索范围:
- 项目 – 在当前整个文档中搜索参数值
- 当前视图 – 在当前视图的元素中搜索参数值
- 链接文件 – 在已加载的链接文件中搜索参数值。可以选择某个特定的链接文件,也可以选择 全部,同时搜索所有已加载的链接文件。
组合条件是由多个简单条件构成的列表。组合条件内的所有简单条件均通过逻辑运算符 且 进行检查。只有满足所有嵌套的简单条件时,元素才满足组合条件。在过滤器字段中,组合条件使用方括号括起来。
窗口底部设有 元素满足条件,如果 下拉列表,用于设置条件之间的逻辑运算符。所有条件均满足 对应逻辑运算符 且,而 满足任一条件 对应逻辑运算符 或。
上述截图中的示例在过滤器字段中的表示如下:

这表示,如果墙的“标记”参数值为“C-1”,或者其“标记”参数值为“C-2”且“承重结构”参数值为“1”,则该墙满足过滤条件。
在被检查的元素中,所需参数按参数名称进行搜索。首先在实例参数列表中搜索,如果未找到,则继续在类型参数列表中搜索。