// 补画轨迹点
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));
}
}
HALCON数组的插入和删除
最新推荐文章于 2024-04-19 09:48:36 发布