测点数组

给定特征的测点可以作为数组,并且使用 form <FeatID>.Hit[<Array Expression>].<Extension> 或 form <FeatID>.RawHit[<Array Expression>].<Extension> 的数组语法可以访问数组。打开测头补偿时,测点会返回测头补偿的数据。RawHit 始终返回无补偿的数据。有效的扩展名有 X、Y、Z、I、J、K、TX、TY、TZ、TI、TJ、TK、XYZ、TXYZ、IJKTIJK

Circle1.Hit[1].XYZ
"Circle1" 的测点 1 的测量的质心(测头补偿)。

Circle1.Hit[2].IJK
"Circle1" 的测点 2 的测量矢量

无论实际触测点是否在编辑窗口中显示,所有含触测点的对象的触测点数据都可以被引用。因此,可以获得扫描和自动特征的触测点。

以下主题描述用于查找扫描最小值或最大值的其他数组函数:

将某个范围的测点分配给数组

你也可以使用以下语法将触测点赋值到数组:

<Feature Id>.<Hittype>[<Startnum>..<Endnum>].<Extension>

其中:

<Feature Id>是特征名。

<Hittype> 可以是补偿的数据的 "HIT" 一词,也可以是无补偿的数据的 "RAWHIT" 一词。如测头补偿被关闭,则返回的将是中是无补偿的值。

<Startnum>是确定触测点范围的第一个序数的表达式。

<Endnum> 是确定触测点范围的第二个序数的表达式。

<Extension>确定数据的类型。可用的扩展名包含以下数据类型的实测值或理论值:

测量值

理论值

例如:

ASSIGN/V1 = SCAN1.HIT[1..10].X
V1 被分配给一个有 10 个值的数组,这 10 个值是 SCAN1 的前 10 个测点的的 X 测量值。

ASSIGN/V2 = SCAN1.HIT[1..SCAN1.NUMHITS].XYZ
V2 被分配给一个扫描的测点质心点的数组。

数组排序

PC-DMIS允许你升序或降序进行数组排序。下面的两个表达式获取一个数组并返回一个经过排序的数组。

若要按序排列,使用:
SORTUP(<数组>)

若要按序排列,使用:
SORTDOWN(<数组>)

例如:

ASSIGN/V1 = ARRAY(5,8,3,9,2,6,1,7)
V1 被分配数组 "5,8,3,9,2,6,1,7"。

ASSIGN/V2 = SORTUP(V1)
V2 按升序排序的数组值:"1,2,3,5,6,7,8,9"

ASSIGN/V3 = SORTDOWN(V1)
V3 按降序排序的数组值:"9,8,7,6,5,3,2,1"

返回最大或最小的数组索引值

使用以下函数可以输入一个数组到函数中返回元素的最大值或最小值的索引值:

要返回具有最大值的元素的索引值,使用:

MAXINDEX(<数组>)

要返回具有最小值的元素的索引值,使用:

MININDEX(<数组>)

例如:

ASSIGN/V1 = ARRAY(5,8,3,9,2,6,1,7)
V1 被分配数组 "5,8,3,9,2,6,1,7"。

ASSIGN/V2 = MAXINDEX(V1)
V2 将保留数组的索引值 4。该数组元素的实际值为 9。

ASSIGN/V3 = MININDEX(V1)
V3 将保留数组的索引值 7。该数组元素的实际值为 1。

可以使用返回的索引值得到实际的数组元素值。

返回排序后的数组索引值

使用以下函数可以输入一个数组到一个函数按升序或降序对数组的值进行排序后再返回索引值:

要按照数组值从大到小排列的顺序返回数组的索引值,使用:
MAXINDICES(<数组>)

要按照数组值从小到大排列的顺序返回数组的索引值,使用:
MININDICES(<数组>)

例如:

ASSIGN/V1 = ARRAY(4,8,2,9,5,7)
V1 被分配数组 "4,8,2,9,5,7"。

ASSIGN/V2 = MAXINDICES(V1)
V2 将保留值为 "4,2,6,5,1,3" 的数组

ASSIGN/V3=MININDICES(V1)
V3 将保留值为 "3,1,5,6,2,4" 的数组。

使用数组函数查找扫描的最小和最大点的示例

以上讨论的数组函数示例用于便捷查找扫描中的最大和最小点。

要确定 SCAN1 的具有最大 X 测量值的点的尺寸,可使用下面的表达式:

ASSIGN/MAXPTINDEX=MAXINDEX(SCAN1.HIT[1..SCAN1.NUMHITS].X)

D1=LOCATION OF FEATURE SCAN1.HIT[MAXPTINDEX]

 

查找SCN2中Z轴最高的三个点使用以下表达式:

ASSIGN/MI=MAXINDICES(SCAN2.HIT[1..SCAN2.NUMHITS].Z)

ASSIGN/THREEPOINTS=ARRAY(SCAN2.HIT[MI[1]].XYZ,SCAN2.HIT[MI[2]].XYZ,SCAN2.HIT[MI[3]].XYZ)