如果用C#的Tuple元组从函数传出多个值,是可以的,但是在VS2017之前,取元组对象的元素时,是类似下面这样的用法。
xxx.Item1
xxx.Item2
xxx.Item3
由于这样不好识别其值究竟是什么,所以不好用。
如果使用对象数组的话,你可以使用下标来访问其元素,但是需要转换数据类型。
如果使用halcon的Tuple对象,就好用多了。
下面勇哥演示一下其基本的使用方法。
几点说明:
使用TupleConcat方法来压入元素,可以是不同的数据类型,而不是使用Add方法
hv_Number.I 这个后面的I是指int型,即返回这个元素的int类型
public void weldCheck(work.weldCheckParam param,out HTuple outputvalue) { HTuple outputvalues=new HTuple(); HTuple hv_rad1, hv_rad2, hv_rad3, hv_rad4, hv_rad5, hv_rad6; HTuple hv_Width1, hv_Height1, hv_Width, hv_Height, hv_WindowHandle; HTuple hv_Number, hv_Row, hv_Column, hv_Radius, hv_jg1; HTuple hv_txtRow, hv_txtCol, hv_RadDOWNLimit, hv_RadUPLimit; HTuple hv_isNg; hv_WindowHandle = winHandle; HOperatorSet.GenEmptyObj(out ho_Image); HOperatorSet.GenEmptyObj(out ho_ROI_0); HOperatorSet.GenEmptyObj(out ho_ImageReduced); HOperatorSet.GenEmptyObj(out ho_ImagePart1); HOperatorSet.GenEmptyObj(out ho_Regions); HOperatorSet.GenEmptyObj(out ho_ConnectedRegions); HOperatorSet.GenEmptyObj(out ho_RegionClosing); HOperatorSet.GenEmptyObj(out ho_RegionFillUp); HOperatorSet.GenEmptyObj(out ho_SelectedRegions1); HOperatorSet.GenEmptyObj(out ho_Circle); HOperatorSet.GenEmptyObj(out ho_RegionDilation); outputvalues=outputvalues.TupleConcat(hv_Number); if (hv_Number.I > 0) { hv_rad1 = hv_Radius[0]; } if (hv_Number.I > 1) hv_rad2 = hv_Radius[1]; if (hv_Number.I > 2) hv_rad3 = hv_Radius[2]; if (hv_Number.I > 3) hv_rad4 = hv_Radius[3]; if (hv_Number.I > 4) hv_rad5 = hv_Radius[4]; if (hv_Number.I > 5) hv_rad6 = hv_Radius[5]; var sizeAry = new List<double>() { 0, 0, 0, 0, 0, 0 }; sizeAry[0] = hv_rad1; sizeAry[1] = hv_rad2; sizeAry[2] = hv_rad3; sizeAry[3] = hv_rad4; sizeAry[4] = hv_rad5; sizeAry[5] = hv_rad6; outputvalues=outputvalues.TupleConcat(sizeAry[0]); outputvalues=outputvalues.TupleConcat(sizeAry[1]); outputvalues=outputvalues.TupleConcat(sizeAry[2]); outputvalues=outputvalues.TupleConcat(sizeAry[3]); outputvalues=outputvalues.TupleConcat(sizeAry[4]); outputvalues=outputvalues.TupleConcat(sizeAry[5]); ho_Image.Dispose(); ho_ROI_0.Dispose(); ho_ImageReduced.Dispose(); ho_ImagePart1.Dispose(); ho_Regions.Dispose(); ho_ConnectedRegions.Dispose(); ho_RegionClosing.Dispose(); ho_RegionFillUp.Dispose(); ho_SelectedRegions1.Dispose(); ho_Circle.Dispose(); ho_RegionDilation.Dispose(); outputvalue = outputvalues; }
调用者的代码,如下:
halcon.weldCheck(param, out rightOutputvalue); double pt1radR = rightOutputvalue[1]; double pt2radR = rightOutputvalue[2]; double pt3radR = rightOutputvalue[3]; double pt4radR = rightOutputvalue[4]; double pt5radR = rightOutputvalue[5]; double pt6radR = rightOutputvalue[6];
不过你最好只是在使用halcon视觉的程序中使用Tuple对象。因为如果你的机器上没有安装halcon并且XX的话……你懂的。
---------------------
作者:hackpig
来源:www.skcircle.com
版权声明:本文为博主原创文章,转载请附上博文链接!

