Halcon与Winform联合(五)

我课题项目中使用txt格式的点云,在halcon中想要可视化txt格式点云需要自行提取xyz
Halcon代码

Filename := 'D:/Program Files/Project/Temp/Skull.txt'
open_file(Filename,'input',file)

NumColumns := 3
VecOutLine.clear()

repeat
fread_line(file, oneline, IsEOF)
if(IsEOF == 1)
    break        
endif
if(oneline == ' ')
    continue
endif
tuple_str_first_n (oneline, 0, Substring)
if(Substring == '#')
    continue
endif
VecOutLine.at(VecOutLine.length()) := oneline
until (IsEOF)

convert_vector_to_tuple(VecOutLine, P)

P := split(P,' ')

Number := number(regexp_replace(P,'^\\s*0*(.+?)\\s*\n*$','$1'))
P := HNULL

X := Number[[0:NumColumns:|Number|-1]]
Y := Number[[1:NumColumns:|Number|-1]]
Z := Number[[2:NumColumns:|Number|-1]]

close_file(file)
gen_object_model_3d_from_points (X,Y,Z,ObjectModel3D)

X := HNULL
Y := HNULL
Z := HNULL

dev_get_window (WindowHandle)
visualize_object_model_3d (WindowHandle, ObjectModel3D, [], [], [], [], [], [], [], PoseOut)


运行可以看到一个头骨
在这里插入图片描述
依然是导出程序,拖拽至vs已有的工程中,此次使用中的项目添加一个按钮
在这里插入图片描述
直接给出button2的代码

private void button2_Click(object sender, EventArgs e)
        {
            HTuple hv_Filename = new HTuple(), hv_file = new HTuple();
            HTuple hv_NumColumns = new HTuple(), hv_oneline = new HTuple();
            HTuple hv_IsEOF = new HTuple(), hv_Substring = new HTuple();
            HTuple hv_P = new HTuple(), hv_Number = new HTuple(), hv_X = new HTuple();
            HTuple hv_Y = new HTuple(), hv_Z = new HTuple(), hv_ObjectModel3D = new HTuple();
            HTuple hv_WindowHandle = new HTuple(), hv_PoseOut = new HTuple();

            HTupleVector hvec_VecOutLine = new HTupleVector(1);
            // Initialize local and output iconic variables 
            try
            {
                OpenFileDialog openFileDialog = new OpenFileDialog();
                openFileDialog.Multiselect = true;
                openFileDialog.Title = "please choose an txt";
                openFileDialog.Filter = "txt(*.txt)|*.txt";
                if (openFileDialog.ShowDialog() == DialogResult.OK)
                {
                    hv_Filename.Dispose();
                    hv_Filename = openFileDialog.FileName;
                    hv_file.Dispose();
                    HOperatorSet.OpenFile(hv_Filename, "input", out hv_file);

                    hv_NumColumns.Dispose();
                    hv_NumColumns = 3;
                    using (HDevDisposeHelper dh = new HDevDisposeHelper())
                    {
                        hvec_VecOutLine.Clear();
                    }

                    do
                    {
                        hv_oneline.Dispose(); hv_IsEOF.Dispose();
                        HOperatorSet.FreadLine(hv_file, out hv_oneline, out hv_IsEOF);
                        if ((int)(new HTuple(hv_IsEOF.TupleEqual(1))) != 0)
                        {
                            break;
                        }
                        if ((int)(new HTuple(hv_oneline.TupleEqual(" "))) != 0)
                        {
                            continue;
                        }
                        hv_Substring.Dispose();
                        HOperatorSet.TupleStrFirstN(hv_oneline, 0, out hv_Substring);
                        if ((int)(new HTuple(hv_Substring.TupleEqual("#"))) != 0)
                        {
                            continue;
                        }
                        using (HDevDisposeHelper dh = new HDevDisposeHelper())
                        {
                            hvec_VecOutLine[new HTuple(hvec_VecOutLine.Length)] = dh.Add(new HTupleVector(hv_oneline));
                        }
                    }
                    while ((int)(hv_IsEOF) == 0);

                    hv_P = hvec_VecOutLine.ConvertVectorToTuple();

                    using (HDevDisposeHelper dh = new HDevDisposeHelper())
                    {
                        {
                            HTuple
                              ExpTmpLocalVar_P = hv_P.TupleSplit(
                                " ");
                            hv_P.Dispose();
                            hv_P = ExpTmpLocalVar_P;
                        }
                    }

                    hv_Number.Dispose();
                    using (HDevDisposeHelper dh = new HDevDisposeHelper())
                    {
                        hv_Number = ((hv_P.TupleRegexpReplace(
                            "^\\s*0*(.+?)\\s*\n*$", "$1"))).TupleNumber();
                    }
                    hv_P.Dispose();
                    using (HDevDisposeHelper dh = new HDevDisposeHelper())
                    {
                        hv_P = HTuple.TupleConstant(
                            "HNULL");
                    }

                    hv_X.Dispose();
                    using (HDevDisposeHelper dh = new HDevDisposeHelper())
                    {
                        hv_X = hv_Number.TupleSelect(
                            HTuple.TupleGenSequence(0, (new HTuple(hv_Number.TupleLength())) - 1, hv_NumColumns));
                    }
                    hv_Y.Dispose();
                    using (HDevDisposeHelper dh = new HDevDisposeHelper())
                    {
                        hv_Y = hv_Number.TupleSelect(
                            HTuple.TupleGenSequence(1, (new HTuple(hv_Number.TupleLength())) - 1, hv_NumColumns));
                    }
                    hv_Z.Dispose();
                    using (HDevDisposeHelper dh = new HDevDisposeHelper())
                    {
                        hv_Z = hv_Number.TupleSelect(
                            HTuple.TupleGenSequence(2, (new HTuple(hv_Number.TupleLength())) - 1, hv_NumColumns));
                    }

                    HOperatorSet.CloseFile(hv_file);
                    hv_ObjectModel3D.Dispose();
                    HOperatorSet.GenObjectModel3dFromPoints(hv_X, hv_Y, hv_Z, out hv_ObjectModel3D);

                    hv_X.Dispose();
                    using (HDevDisposeHelper dh = new HDevDisposeHelper())
                    {
                        hv_X = HTuple.TupleConstant(
                            "HNULL");
                    }
                    hv_Y.Dispose();
                    using (HDevDisposeHelper dh = new HDevDisposeHelper())
                    {
                        hv_Y = HTuple.TupleConstant(
                            "HNULL");
                    }
                    hv_Z.Dispose();
                    using (HDevDisposeHelper dh = new HDevDisposeHelper())
                    {
                        hv_Z = HTuple.TupleConstant(
                            "HNULL");
                    }

                    if (HDevWindowStack.IsOpen())
                    {
                        hv_WindowHandle = HDevWindowStack.GetActive();
                    }
                    vtkPoints points = h2v_cloud(hv_ObjectModel3D);
                    show_cloud(points, 1, 0, 0, 2);

                    hv_PoseOut.Dispose();
                }
            }
            catch (HalconException HDevExpDefaultException)
            {

                hv_Filename.Dispose();
                hv_file.Dispose();
                hv_NumColumns.Dispose();
                hv_oneline.Dispose();
                hv_IsEOF.Dispose();
                hv_Substring.Dispose();
                hv_P.Dispose();
                hv_Number.Dispose();
                hv_X.Dispose();
                hv_Y.Dispose();
                hv_Z.Dispose();
                hv_ObjectModel3D.Dispose();
                hv_WindowHandle.Dispose();
                hv_PoseOut.Dispose();
                hvec_VecOutLine.Dispose();

                throw HDevExpDefaultException;
            }

            hv_Filename.Dispose();
            hv_file.Dispose();
            hv_NumColumns.Dispose();
            hv_oneline.Dispose();
            hv_IsEOF.Dispose();
            hv_Substring.Dispose();
            hv_P.Dispose();
            hv_Number.Dispose();
            hv_X.Dispose();
            hv_Y.Dispose();
            hv_Z.Dispose();
            hv_ObjectModel3D.Dispose();
            hv_WindowHandle.Dispose();
            hv_PoseOut.Dispose();
            hvec_VecOutLine.Dispose();

        }

点击选择一个txt文件,稍等一会,点击一下窗口就可以显示点云
在这里插入图片描述

  • 13
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值