如果用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
版权声明:本文为博主原创文章,转载请附上博文链接!


少有人走的路
















