HALCON数组的插入和删除

// 补画轨迹点
void MainWindow::on_bu_draw_guiji_clicked() {
    HObject ho_Image1, ho_ContOut, ho_Contour;
    HTuple hv_Weights, hv_Length1;

    HObject ho_ImageScaled2, ho_CrossS, ho_Cross1;
    HObject ho_Cross2;

    // Local control variables
    HTuple hv_Width1, hv_Height1, hv_WindowHandle;
    HTuple hv_RowS_zuo, hv_ColumnS_zuo, hv_row_tup, hv_col_tup;
    HTuple hv_col_ValueAB, hv_Length, hv_I, hv_Row11, hv_Column11;
    HTuple hv_Row21, hv_Column21, hv_adsd, hv_adsdAA, hv_num_tup;
    HTuple hv_start_s, hv_end_s, hv_CircleRow, hv_CircleColumn;
    HTuple hv_RoiPram1, hv_Row4, hv_Column4, hv_cha, hv_rs_start;
    HTuple hv_cs_start, hv_Length6, hv_Length7, hv_rs_end;
    HTuple hv_cs_end, hv_Length8, hv_row_ValueA, hv_row_ValueAB;
    HTuple hv_Length10, hv_Length11, hv_col_ValueA, hv_Length12;
    HTuple hv_Length13;

    // 正在画的时候不允许拖动缩放图像
    m_tmp_flg->insert("mous_move_pic", 1);

    //   m_nModecase=99;
    int NumberRegion;
    // 1.判断图像是否为空
    HObject* show_ui_images = m_hobj->value("show_ui_image");
    DetectRegionisEmpty((*show_ui_images), NumberRegion);
    if (NumberRegion == 1) {
        QMessageBox::warning(this, "提示", "Please open a  picture");
        return;
    }
    // showImage(show_ui_image);

    HTuple hv_Rows1, hv_Cols1;

    try {
        HTuple ModelObjectFile, row_FileName, col_FileName, moudel_num1, RowS, ColumnS;
        HObject ho_Cross1_zuo;
        // 发动机型号
        int moudel_num = ui->num_fadongji->value();
        moudel_num1 = moudel_num;
        cout << "moudel_num" << moudel_num;
        ModelObjectFile = "./data/model/model" + moudel_num1;

        DrawNurbs(&ho_ContOut, WindowHandle2d, "true", "true", "true", "true", 3, &hv_Rows1, &hv_Cols1, &hv_Weights);

        GenCrossContourXld(&ho_Cross1, hv_Rows1, hv_Cols1, 10, 0.785398);
        SetLineWidth(WindowHandle2d, 1);
        SetColor(WindowHandle2d, "red");
        DispObj(ho_Cross1, WindowHandle2d);

        // 把补画的轨迹点,存入轨迹文件

        // 记录是哪段轨迹 被修改了
        int guiji_num = m_tmp->value("delete_gui_ji_num").toInt();

        // 这里要判断 有多少个文件夹的名字以 Draw_guiji 开头的
        // 判断有几段轨迹
        int gui_num = num_dir(moudel_num);
        cout << "model" << moudel_num << "guiji duan num = " << gui_num;

        ClearWindow(WindowHandle2d);

        DispObj((*show_ui_images), WindowHandle2d);

        for (int I = 1; I <= gui_num; I++) {
            row_FileName = ModelObjectFile + "/Draw_guiji" + I + "/x_draw.tup";
            col_FileName = ModelObjectFile + "/Draw_guiji" + I + "/y_draw.tup";
            ReadTuple(row_FileName, &hv_RowS_zuo);
            ReadTuple(col_FileName, &hv_ColumnS_zuo);

            // 画完的时候允许拖动缩放图像
            // m_tmp_flg->insert("mous_move_pic",1);

            //*********************************
            // 把 补画的轨迹 加入到原有的轨迹中

            if (I == guiji_num) {
                int hv_start_s1 = m_tmp_flg->value("delede_guiji_start");
                int hv_end_s1 = m_tmp_flg->value("delede_guiji_end");
                hv_start_s = hv_start_s1;
                hv_end_s = hv_end_s1;

                hv_cha = hv_end_s - hv_start_s;

                cout << "hv_start_s1" << hv_start_s1;
                cout << "hv_end_s1" << hv_end_s1;

                //*  数组截取
                // rs := RowS1[asd:asd+aa-1]
                //* 前半部分数组
                hv_rs_start = hv_RowS_zuo.TupleSelectRange(0, hv_start_s - 1);
                hv_cs_start = hv_ColumnS_zuo.TupleSelectRange(0, hv_start_s - 1);
                TupleLength(hv_ColumnS_zuo, &hv_Length6);
                TupleLength(hv_cs_start, &hv_Length7);

                //* 后半部分数组
                // cout<<"a";
                hv_rs_end = hv_RowS_zuo.TupleSelectRange(hv_end_s + 1, (hv_RowS_zuo.TupleLength()) - 1);
                hv_cs_end = hv_ColumnS_zuo.TupleSelectRange(hv_end_s + 1, (hv_ColumnS_zuo.TupleLength()) - 1);
                TupleLength(hv_cs_end, &hv_Length8);

                // cout<<"b";
                hv_row_ValueA = HTuple();
                hv_row_ValueAB = HTuple();
                TupleInsert(hv_rs_start, (hv_rs_start - 1).TupleLength(), hv_Rows1, &hv_row_ValueA);
                TupleLength(hv_row_ValueA, &hv_Length10);

                TupleInsert(hv_row_ValueA, (hv_row_ValueA - 1).TupleLength(), hv_rs_end, &hv_row_ValueAB);
                TupleLength(hv_row_ValueAB, &hv_Length11);

                hv_col_ValueA = HTuple();
                hv_col_ValueAB = HTuple();
                TupleInsert(hv_cs_start, (hv_cs_start - 1).TupleLength(), hv_Cols1, &hv_col_ValueA);
                TupleLength(hv_col_ValueA, &hv_Length12);

                TupleInsert(hv_col_ValueA, (hv_col_ValueA - 1).TupleLength(), hv_cs_end, &hv_col_ValueAB);
                TupleLength(hv_col_ValueAB, &hv_Length13);

                SetColor(WindowHandle2d, "orange");
                GenEmptyObj(&ho_CrossS);
                {
                    HTuple end_val148 = hv_Length13 - 1;
                    HTuple step_val148 = 1;
                    for (hv_I = 0; hv_I.Continue(end_val148, step_val148); hv_I += step_val148) {
                        GenCrossContourXld(&ho_Cross1, HTuple(hv_row_ValueAB[hv_I]), HTuple(hv_col_ValueAB[hv_I]), 10,
                                           0.785398);
                        ConcatObj(ho_CrossS, ho_Cross1, &ho_CrossS);
                    }
                }
                DispObj(ho_CrossS, WindowHandle2d);
                // stop(); only in hdevelop

                // 画的轨迹
                //        row_FileName = ModelObjectFile + "/x_draw.tup";
                //        col_FileName = ModelObjectFile + "/y_draw.tup";

                row_FileName = ModelObjectFile + "/Draw_guiji" + I + "/x_draw.tup";
                col_FileName = ModelObjectFile + "/Draw_guiji" + I + "/y_draw.tup";

                WriteTuple(hv_row_ValueAB, row_FileName);
                WriteTuple(hv_col_ValueAB, col_FileName);

                // 这里还需要把修改的 轨迹点转化为 Qx0.tup
                save_Qx0(I);

            } else {
                // 对于 不需要修改的轨迹段,就只做显示
                GenEmptyObj(&ho_CrossS);
                {
                    HTuple end_val55 = (hv_RowS_zuo.TupleLength()) - 1;
                    HTuple step_val55 = 1;
                    for (hv_I = 0; hv_I.Continue(end_val55, step_val55); hv_I += step_val55) {
                        // 如果 不是被修改的轨迹段,那么就全部显示
                        // hv_adsd += 1;
                        GenCrossContourXld(&ho_Cross2, HTuple(hv_RowS_zuo[hv_I]), HTuple(hv_ColumnS_zuo[hv_I]), 10,
                                           0.785398);
                        ConcatObj(ho_CrossS, ho_Cross2, &ho_CrossS);
                    }
                    // cout << "hv_adsd" << hv_adsd.D();
                    DispObj(ho_CrossS, WindowHandle2d);
                }
            }
        }
        // 修改完,不能显示之前轨迹了。
        m_tmp_flg->insert("delede_guiji_flag", 1);
        // 允许显示最终的轨迹
        m_tmp_flg->insert("watch_guiji", 0);

        // 不允许展示被删除的轨迹,要展示修改后的完整轨迹
        m_tmp_flg->insert("delede_guiji_start", 0);
        m_tmp_flg->insert("delede_guiji_end", 0);

    } catch (HException& exception) {
        // 出错算子的名字
        QString errname = exception.ProcName().Text();
        // 出错算子的异常信息
        QString errmsg = exception.ErrorMessage().Text();
        QStringList list = errmsg.split(":");  // QString字符串分割函数
        QMessageBox::warning(this, "提示", errname.append("==").append(list[1]).append("==").append(errname));
    }
}



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值