PML语法获取元素主要有以下 两种方法:
- collect关键字
- COLLECTION对象
collect
var !elementList collect [收集对象] [条件] [范围]
收集对象
对象主要指的是要收集的元素类型,如:
- all FRMW (所有的FRMW对象)
- all BRAN member (所有管件,包括直管)
- BRAN member (所有管件,不包括直管)
- all (所有元素,包括自身)
条件
条件是可选项,一般使用with作为开始,后面需要是一个布尔表达式。如:
- all ZONE with (Match(Name, ‘A3B’) Gt 0)
- all BOX with (Xlen Gt 100)
范围
逻辑范围指的是PDMS目录树,一般使用for作为开始,后面是PDMS的具体层次。如:
- for /siteName (收集指定层次)
- for ce (从当前层次收集)
- for world (收集整个DB)
如果没有for语句,表示从整个MDB下收集。
空间范围指的是PDMS的3D空间,如:
- all PIPE within W 8000 N 1000 U 0 to E 1000 N 2000 U 1000
- all PIPE exclusive within volume /equi 1500 (收集某个设备空间1500之内的管线)
返回值
collect语句返回值是一个数组,是符合条件的元素的REF的集合。数组元素数据类型是STRING。
COLLECTION
实例化
!objCollect = object COLLECTION()
收集对象
!objCollect.type('ZONE')
!objCollect.addType('STRU')
条件
条件主要是利用Filter
方法实现,该方法的参数是EXPRESSION
表达式。
Filter
方法可以连续使用,其关系为and
。EXPRESSITION
表达式可以写任意复杂。
!objCollect.Filter(object EXPRESSION('PURP Eq |PIPE|'))
范围
使用Scope
方法,该方法经过多个重载,可实现不同的功能。利用appendScope
可进行范围追加,利用clearScope
,可清空范围
!objCollect.scope(!!ce) $*从当前对象收集
!objCollect.scope(!dbrefList) $*从dbref数组中收集
!objCollect.scope(!collection) $*从另一个collection对象中收集
返回值
!list = !collection.Results()
返回是符合条件的元素的REF
的集合。数组元素数据类型是DBREF
。