目录
一、传递数组变量
二、传递图形/3d变量
三、进阶,一次存两个变量
一、传递数组变量,PeakRows和PeakCols即可拿到点集合。
PeakRows:=[]
PeakCols:=[]
for i := 1 to Number by 1
select_obj (SortedContours, ObjectSelected, i)
get_contour_xld (ObjectSelected, RowR, ColR)
if(LeftOrRight=='left')
sortcol:=ColR
endif
if(LeftOrRight=='right')
sortcol:=-ColR
endif
tuple_sort_index (sortcol, Indices)
PeakRow := RowR[Indices[0]]
PeakCol := ColR[Indices[0]]
PeakRows := [PeakRows,PeakRow]
PeakCols := [PeakCols,PeakCol]
disp_message (WindowHandle, '顶点'+i+':'+PeakRow+','+PeakCol, 'window', MessagePosition+(i-1)*20, 5, 'cyan', 'false')
disp_cross (WindowHandle, PeakRows, PeakCols, 12, rad(45))
disp_message (WindowHandle, i, 'image', round(PeakRow), round(PeakCol), 'red', 'false')
Endfor
二、传递图形/3d变量
gen_empty_obj(shuzuCircles)
tuple_length (CircleRadius, LengthR)
for index:=0 to LengthR-1 by 1
*Radius[index]<200是刚掉超级大的圆
if(CircleRadius[index]<200 and CircleRow[index]<200)
gen_circle_contour_xld (ContCircle, CircleRow[index], CircleColumn[index], CircleRadius[index], 0, rad(360), 'positive', 1.0)
*计算圆与轮廓的交叉点
intersection_circle_contour_xld (FittedLines1Vis, CircleRow[index], CircleColumn[index], CircleRadius[index], 0, 6.28318, 'positive', RowCha, ColumnCha)
concat_obj (shuzuCircles, ContCircle, shuzuCircles)
endif
endfor
dev_clear_window()
*显示筛选后的多个圆
dev_set_color('green')
dev_display (shuzuCircles)
三、每次传递两个/多个参数
*根据两个波峰的位置找到波谷
for a := 0 to arr_ValleyX-1 by 1
*这块的判断非常重要,这个里面波峰的排列是从大数到小数的,所以波谷的y坐标是比前一个波峰小,比后一个波峰大的
if(Pos_ValleyX[a]<Pos_PeakX[j] and Pos_ValleyX[a]>Pos_PeakX[j+1])
distance_pl (Pos_ValleyX[a], Pos_ValleyY[a], Pos_PeakX[j], Pos_PeakY[j], Pos_PeakX[j+1], Pos_PeakY[j+1], DistancePL)
if(DistancePL>5)
*distance2:=[distance2,j]
*注意此处写法,一个波谷对应两个波峰,所以传递参数distance2是每次存两个序数
tuple1[0] := j
tuple2[0] := j+1
tuple_concat(tuple1,tuple2, concat)
distance2:=[distance2,concat]
distance1:=[distance1,a]
endif
endif
endfor
上面代码是找到波峰和波谷以后,想要检测宽度过大的波峰和深度较深的波谷,就需要让波峰和波谷进行对应,因此,将波峰成对存储,一个波谷对应两个波峰,波谷的坐标index为i,那么波峰index就为2*i和2*i+1