測點陣列

給定特徵的測點可以作爲陣列,並且使用 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(4,8,2,9,5,7)
V1 被指派陣列 "4,8,2,9,5,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(4,8,2,9,5,7)
V1 被指派陣列 "4,8,2,9,5,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]

 

要尋找 SCAN2 的 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)