#include "outline.h" OutLine::OutLine(QObject *parent) : QObject(parent) { m_maxX = 0; m_minX = 0; m_maxY = 0; m_minY = 0; } void OutLine::setRangeXY(int maxX,int minX,int maxY,int minY) { m_maxX = maxX; m_minX = minX; m_maxY = maxY; m_minY = minY; } //获取花样轮廓 QList OutLine::getOutLine(QImage *img) { int distance_lunkuo = 10; unsigned int *data = (unsigned int *)img->bits(); int x = img->width(); //int y = img->height(); //记录x,y最大最小范围 int x_max = 0; int x_min = 1000000; int y_max = 0; int y_min = 1000000; //当前点x,y坐标 int x_now = 0; int y_now = 0; int red; //int green; //int blue; int size = img->width() * (img->height() - 12); for (int i = 1; i < size; i++) { red = qRed(data[i]); //green= qGreen(data[i]); //blue= qBlue(data[i]); if (red == 255 && qRed(data[i-1]) == 0) { y_now = i / x; x_now = i % x; if (y_now > y_max) { y_max = y_now; } if (y_now < y_min) { y_min = y_now; } if(x_now < x_min) { x_min = x_now; } } if (red == 0 && qRed(data[i - 1]) == 255) { x_now = i % x; if(x_now > x_max) { x_max = x_now; } } } qDebug()<<"x_max:"<= x_min ; i--) { list_x_down.append(QString("%1").arg(i)); list_y_down.append(QString("%1").arg(y_max + 6)); } //左边的线 for (int i = y_max ; i >= y_min ; i--) { list_x_left.append(QString("%1").arg(x_min - 6)); list_y_left.append(QString("%1").arg(i)); } QStringList list_X_temp1; QStringList list_Y_temp1; list_X_temp1.clear(); list_Y_temp1.clear(); // 最上面的点向下索引 for (int i = 0; i < list_x_up.size(); i++) { QString str_x = list_x_up.at(i); QString str_y = list_y_up.at(i); int point_x = str_x.toInt(); int point_y = str_y.toInt(); int location = point_y * x + point_x; red = qRed(data[location]); if (red == 255) { } else { //黑点,向下搜索 for (int j = 1; j < (y_max - point_y + 1) / 2; j++) { //循环向下搜索,找到分界点 if (qRed(data[(point_y + j) * x + point_x]) == 255) { list_y_up[i] = QString("%1").arg(point_y + j - 1); list_X_temp1.append(list_x_up.at(i)); list_Y_temp1.append(list_y_up.at(i)); break; } } } } list_x_up.clear(); list_x_up = list_X_temp1; list_y_up.clear(); list_y_up = list_Y_temp1; list_X_temp1.clear(); list_Y_temp1.clear(); //最右面的线向左索引 for (int i = 0; i < list_y_right.size(); i++) { QString str_x = list_x_right.at(i); QString str_y = list_y_right.at(i); int point_x = str_x.toInt(); int point_y = str_y.toInt(); int location = point_y * x + point_x; red = qRed(data[location]); if (red == 255) { } else { //黑色,向左搜索 for (int j = 1; j < (point_x) / 2; j++) { //循环向左搜索,找到分界点 if (qRed(data[point_y * x + point_x - j]) == 255) { list_x_right[i] = QString("%1").arg(point_x - j + 1); list_X_temp1.append(list_x_right.at(i)); list_Y_temp1.append(list_y_right.at(i)); break; } } } } list_x_right.clear(); list_x_right = list_X_temp1; list_y_right.clear(); list_y_right = list_Y_temp1; list_X_temp1.clear(); list_Y_temp1.clear(); //最下面的线向上索引 for (int i = 0; i < list_x_down.size(); i++) { QString str_x = list_x_down.at(i); QString str_y = list_y_down.at(i); int point_x = str_x.toInt(); int point_y = str_y.toInt(); int location = point_y * x + point_x; red = qRed(data[location]); if (red == 255) { } else { //黑点,向上搜索 for (int j = 1; j < (point_y ) / 2; j++) { //循环向上搜索,找到分界点 if (qRed(data[(point_y - j) * x + point_x]) == 255) { list_y_down[i] = QString("%1").arg(point_y - j + 1); list_X_temp1.append(list_x_down.at(i)); list_Y_temp1.append(list_y_down.at(i)); break; } } } } list_x_down.clear(); list_x_down = list_X_temp1; list_y_down.clear(); list_y_down = list_Y_temp1; list_X_temp1.clear(); list_Y_temp1.clear(); //最左面的线向右索引 for (int i = 0; i < list_x_left.size(); i++) { QString str_x = list_x_left.at(i); QString str_y = list_y_left.at(i); int point_x = str_x.toInt(); int point_y = str_y.toInt(); int location = point_y * x + point_x; red = qRed(data[location]); if (red == 255) { } else { //黑色,向右搜索 for (int j = 1; j < (y_max) / 2; j++) { //循环向右搜索,找到分界点 if (qRed(data[point_y * x + point_x + j]) == 255) { list_x_left[i] = QString("%1").arg(point_x + j - 1); list_X_temp1.append(list_x_left.at(i)); list_Y_temp1.append(list_y_left.at(i)); break; } } } } list_x_left.clear(); list_x_left = list_X_temp1; list_y_left.clear(); list_y_left = list_Y_temp1; QList list_int_loaction; int int_location = 0; QStringList listXTemp; QStringList listYTemp; list_int_loaction.clear(); for (int i = 0; i < list_x_up.size(); i++) { for (int j = 0; j < list_x_right.size(); j++) { if (list_x_up.at(i) == list_x_right.at(j) && list_y_up.at(i) == list_y_right.at(j)) { list_int_loaction.append(i); break; } } } int_location = list_x_up.size() - 1; if (list_int_loaction.size() > 0) { int_location = list_int_loaction.at(list_int_loaction.size()-1); } listXTemp.clear(); listYTemp.clear(); for (int i = 0; i <= int_location; i++) { listXTemp.append(list_x_up.at(i)); listYTemp.append(list_y_up.at(i)); } list_x_up.clear(); list_x_up = listXTemp; list_y_up.clear(); list_y_up = listYTemp; int_location = 0; for (int i = 0; i < list_x_right.size(); i++) { if (list_x_right.at(i) == list_x_up.at(list_x_up.size()-1) && list_y_right.at(i) == list_y_up.at(list_y_up.size()-1)) { int_location = i; } } listXTemp.clear(); listYTemp.clear(); for (int i = int_location; i < list_x_right.size(); i++) { listXTemp.append(list_x_right.at(i)); listYTemp.append(list_y_right.at(i)); } list_x_right.clear(); list_x_right = listXTemp; list_y_right.clear(); list_y_right = listYTemp; list_int_loaction.clear(); for (int i = 0; i < list_x_right.size(); i++) { for (int j = 0; j < list_x_down.size(); j++) { if (list_x_right.at(i) == list_x_down.at(j) && list_y_right.at(i) == list_y_down.at(j)) { list_int_loaction.append(i); break; } } } int_location = list_x_right.size() - 1; if (list_int_loaction.size() > 0) { int_location = list_int_loaction.at(list_int_loaction.size()-1); } listXTemp.clear(); listYTemp.clear(); for (int i = 0; i <= int_location; i++) { listXTemp.append(list_x_right.at(i)); listYTemp.append(list_y_right.at(i)); } list_x_right.clear(); list_x_right = listXTemp; list_y_right.clear(); list_y_right = listYTemp; int_location = 0; for (int i = 0; i < list_x_down.size(); i++) { if (list_x_down.at(i) == list_x_right.at(list_x_right.size()-1) && list_y_down.at(i) == list_y_right.at(list_y_right.size()-1)) { int_location = i; } } listXTemp.clear(); listYTemp.clear(); for (int i = int_location; i < list_x_down.size(); i++) { listXTemp.append(list_x_down.at(i)); listYTemp.append(list_y_down.at(i)); } list_x_down.clear(); list_x_down = listXTemp; list_y_down.clear(); list_y_down = listYTemp; list_int_loaction.clear(); for (int i = 0; i < list_x_down.size(); i++) { for (int j = 0; j < list_x_left.size(); j++) { if (list_x_down.at(i) == list_x_left.at(j) && list_y_down.at(i) == list_y_left.at(j)) { list_int_loaction.append(i); break; } } } int_location = list_x_down.size() - 1; if (list_int_loaction.size() > 0) { int_location = list_int_loaction.at(list_int_loaction.size()-1); } listXTemp.clear(); listYTemp.clear(); for (int i = 0; i <= int_location; i++) { listXTemp.append(list_x_down.at(i)); listYTemp.append(list_y_down.at(i)); } list_x_down.clear(); list_x_down = listXTemp; list_y_down.clear(); list_y_down = listYTemp; int_location = 0; for (int i = 0; i < list_x_left.size(); i++) { if (list_x_left.at(i) == list_x_down.at(list_x_down.size()-1) && list_y_left.at(i) == list_y_down.at(list_y_down.size()-1)) { int_location = i; } } listXTemp.clear(); listYTemp.clear(); for (int i = int_location; i < list_x_left.size(); i++) { listXTemp.append(list_x_left.at(i)); listYTemp.append(list_y_left.at(i)); } list_x_left.clear(); list_x_left = listXTemp; list_y_left.clear(); list_y_left = listYTemp; #if 1 list_int_loaction.clear(); for (int i = 0; i < list_x_left.size(); i++) { for (int j = 0; j < list_x_up.size(); j++) { if (list_x_left.at(i) == list_x_up.at(j) && list_y_left.at(i) == list_y_up.at(j)) { list_int_loaction.append(i); break; } } } int_location = list_x_left.size() - 1; if (list_int_loaction.size() > 0) { int_location = list_int_loaction.at(list_int_loaction.size()-1); } listXTemp.clear(); listYTemp.clear(); for (int i = 0; i <= int_location; i++) { listXTemp.append(list_x_left.at(i)); listYTemp.append(list_y_left.at(i)); } list_x_left.clear(); list_x_left = listXTemp; list_y_left.clear(); list_y_left = listYTemp; int_location = 0; for (int i = 0; i < list_x_up.size(); i++) { if (list_x_up.at(i) == list_x_left.at(list_x_left.size()-1) && list_y_up.at(i) == list_y_left.at(list_y_left.size()-1)) { int_location = i; } } listXTemp.clear(); listYTemp.clear(); for (int i = int_location; i < list_x_up.size(); i++) { listXTemp.append(list_x_up.at(i)); listYTemp.append(list_y_up.at(i)); } list_x_up.clear(); list_x_up = listXTemp; list_y_up.clear(); list_y_up = listYTemp; #endif #if 0 //最上面的线向下索引 for (int i = 0; i < list_x_up.size(); i++) { QString str_x = list_x_up.at(i); QString str_y = list_y_up.at(i); int point_x = str_x.toInt(); int point_y = str_y.toInt(); int location = point_y * x + point_x; red = qRed(data[location]); //green= qGreen(data[location]); //blue= qBlue(data[location]); if (red == 255) { //白点,为分界线 list_x_contour.append(QString("%1").arg(point_x)); list_y_contour.append(QString("%1").arg(point_y - distance_lunkuo)); list_point_true.append(QString("%1").arg(1)); } else { //黑点,向下搜索 for (int j = 1; j < (y_max - point_y + 1); j++) { //循环向下搜索,找到分界点 if (qRed(data[(point_y + j) * x + point_x]) == 255) { list_drawwhit_x.append(QString("%1").arg(point_x)); list_drawwhit_y.append(QString("%1").arg(point_y + j)); if (list_x_contour.size() > 0) { //如果不是起始点,判断与上一个点的位置关系 //QString last_x_contour = list_x_contour.at(list_x_contour.size()-1); QString last_y_contour = list_y_contour.at(list_y_contour.size()-1); //int point_last_x_contour = last_x_contour.toInt(); int point_last_y_contour = last_y_contour.toInt() + distance_lunkuo; if (0) //if ((point_last_y_contour - (point_y + j)) > (10) || (point_last_y_contour - (point_y + j)) < -10) { list_x_contour.append(QString("%1").arg(point_x)); list_y_contour.append(QString("%1").arg(point_last_y_contour - distance_lunkuo)); } else { list_x_contour.append(QString("%1").arg(point_x)); list_y_contour.append(QString("%1").arg(point_y + j - distance_lunkuo)); } QString str_check_x = list_x_contour.at(list_x_contour.size()-1); QString str_check_y = list_y_contour.at(list_y_contour.size()-1); int point_check_x = str_check_x.toInt(); int point_check_y = str_check_y.toInt(); for (int check = 0; check <= 5; check++) { //判断当前点是否可用,是否需要移动 if (qRed(data[point_check_y * x + point_check_x + check]) == 255 ) { //需要向右移动 for (int check_1 = 1; check_1 <= distance_lunkuo * 2; check_1++) { if (qRed(data[point_check_y * x + point_check_x + check - check_1]) == 255 ) { //无法移动,需要舍弃 list_point_true.append(QString("%1").arg(0)); break; } else { //可以移动 if (check_1 == distance_lunkuo) { //list_x_contour.replace(list_x_contour.size()-1,QString("%1").arg(point_check_x + check - distance_lunkuo)); //list_x_contour[list_x_contour.size()-1] = QString("%1").arg(point_check_y * x + point_check_x + check - distance_lunkuo); list_point_true.append(QString("%1").arg(1)); //list_point_true.append(QString("%1").arg(0)); break; } } } break; } else if (qRed(data[point_check_y * x + point_check_x - check]) == 255) { //需要向左移动 for (int check_1 = 1; check_1 <= distance_lunkuo * 2; check_1++) { if (qRed(data[point_check_y * x + point_check_x - check + check_1]) == 255 ) { //无法移动,需要舍弃 list_point_true.append(QString("%1").arg(0)); break; } else { //可以移动 if (check_1 == distance_lunkuo) { //list_x_contour.replace(list_x_contour.size()-1,QString("%1").arg(point_check_x - check + distance_lunkuo)); //list_x_contour[list_x_contour.size()-1] = QString("%1").arg(point_check_y * x + point_check_x - check + distance_lunkuo); list_point_true.append(QString("%1").arg(1)); //list_point_true.append(QString("%1").arg(0)); break; } } } break; } else { //不需要移动 if (check == 5) { list_point_true.append(QString("%1").arg(1)); break; } } } break; } else { list_x_contour.append(QString("%1").arg(point_x)); list_y_contour.append(QString("%1").arg(point_y + j - distance_lunkuo)); list_point_true.append(QString("%1").arg(1)); break; } } } //---------------------------------- if (0) { QString str_y_finally = list_y_contour.at(list_y_contour.size() - 1); QString str_y_finally_last; for (int j = list_y_contour.size() - 2; j > 0; j--) { if (list_point_true.at(j) == "1") { str_y_finally_last = list_y_contour.at(j); break; } } int str_y_finally_int = str_y_finally.toInt(); int str_y_finally_last_int = str_y_finally_last.toInt(); if ((str_y_finally_int - str_y_finally_last_int) > 20 || (str_y_finally_last_int - str_y_finally_int) > 20) { list_point_true.replace(list_point_true.size() - 1, QString("%1").arg(0)); } } //--------------------------------------- } } QStringList list_get_up_x; QStringList list_get_up_y; QStringList list_get_up_true; for (int i = 0; i < list_x_contour.size(); i++) { if (list_point_true.at(i) == "1") { list_get_up_x.append(list_x_contour.at(i)); list_get_up_y.append(list_y_contour.at(i)); list_get_up_true.append(QString("%1").arg(1)); } } list_x_contour.clear(); list_y_contour.clear(); list_point_true.clear(); list_x_contour = list_get_up_x; list_y_contour = list_get_up_y; list_point_true = list_get_up_true; int next_line_star = 0; for (int i = 0; i < list_y_right.size(); i++) { QString str = list_y_right.at(i); QString str_1 = list_y_contour.at(list_y_contour.size()-1); if (str.toInt() == str_1.toInt()) { next_line_star = i; break; } } //最右面的线向左索引 for (int i = next_line_star; i < list_y_right.size(); i++) { QString str_x = list_x_right.at(i); QString str_y = list_y_right.at(i); int point_x = str_x.toInt(); int point_y = str_y.toInt(); int location = point_y * x + point_x; red = qRed(data[location]); //green= qGreen(data[location]); //blue= qBlue(data[location]); if (red == 255) { //白点,为分界线 list_x_contour.append(QString("%1").arg(point_x + distance_lunkuo)); list_y_contour.append(QString("%1").arg(point_y)); list_point_true.append(QString("%1").arg(1)); } else { //黑色,向左搜索 for (int j = 1; j < (point_x); j++) { //循环向左搜索,找到分界点 if (qRed(data[point_y * x + point_x - j]) == 255) { list_drawwhit_x.append(QString("%1").arg(point_x - j)); list_drawwhit_y.append(QString("%1").arg(point_y)); if (list_x_contour.size() > 0) { //如果不是起始点,判断与上一个点的位置关系 list_x_contour.append(QString("%1").arg(point_x - j + distance_lunkuo)); list_y_contour.append(QString("%1").arg(point_y)); QString str_check_x = list_x_contour.at(list_x_contour.size()-1); QString str_check_y = list_y_contour.at(list_y_contour.size()-1); int point_check_x = str_check_x.toInt(); int point_check_y = str_check_y.toInt(); for (int check = 0; check <= 5; check++) { //判断当前点是否可用,是否需要移动 if (qRed(data[(point_check_y + check) * x + point_check_x]) == 255) { //需要向上移动 for (int check_1 = 1; check_1 <= distance_lunkuo; check_1++) { if (qRed(data[(point_check_y + check - check_1) * x + point_check_x]) == 255 ) { //无法移动,需要舍弃 list_point_true.append(QString("%1").arg(0)); break; } else { //可以移动 if (check_1 == distance_lunkuo) { //list_y_contour.replace(list_y_contour.size()-1,QString("%1").arg(point_check_y + check - distance_lunkuo)); //list_x_contour[list_x_contour.size()-1] = QString("%1").arg(point_check_y * x + point_check_x + check - distance_lunkuo); list_point_true.append(QString("%1").arg(1)); //list_point_true.append(QString("%1").arg(0)); break; } } } break; } else if (qRed(data[(point_check_y - check) * x + point_check_x]) == 255) { //需要向下移动 for (int check_1 = 1; check_1 <= distance_lunkuo; check_1++) { if (qRed(data[(point_check_y - check + check_1) * x + point_check_x]) == 255 ) { //无法移动,需要舍弃 list_point_true.append(QString("%1").arg(0)); break; } else { //可以移动 if (check_1 == distance_lunkuo) { //list_y_contour.replace(list_y_contour.size()-1,QString("%1").arg(point_check_y - check + distance_lunkuo)); //list_x_contour[list_x_contour.size()-1] = QString("%1").arg(point_check_y * x + point_check_x + check - distance_lunkuo); list_point_true.append(QString("%1").arg(1)); //list_point_true.append(QString("%1").arg(0)); break; } } } break; } else { //不需要移动 if (check == 5) { list_point_true.append(QString("%1").arg(1)); break; } } } break; } else { list_x_contour.append(QString("%1").arg(point_x)); list_y_contour.append(QString("%1").arg(point_y + j - distance_lunkuo)); list_point_true.append(QString("%1").arg(1)); break; } } } } //---------------------------------- QString str_x_finally = list_x_contour.at(list_x_contour.size() - 1); QString str_x_finally_last; for (int j = list_x_contour.size() - 2; j > 0; j--) { if (list_point_true.at(j) == "1") { str_x_finally_last = list_x_contour.at(j); break; } } int str_x_finally_int = str_x_finally.toInt(); int str_x_finally_last_int = str_x_finally_last.toInt(); if ((str_x_finally_int - str_x_finally_last_int) > 20 || (str_x_finally_last_int - str_x_finally_int) > 20) { list_point_true.replace(list_point_true.size() - 1, QString("%1").arg(0)); } //--------------------------------------- } QStringList list_get_right_x; QStringList list_get_right_y; QStringList list_get_right_true; for (int i = 0; i < list_x_contour.size(); i++) { if (list_point_true.at(i) == "1") { list_get_right_x.append(list_x_contour.at(i)); list_get_right_y.append(list_y_contour.at(i)); list_get_right_true.append(QString("%1").arg(1)); } } list_x_contour.clear(); list_y_contour.clear(); list_point_true.clear(); list_x_contour = list_get_right_x; list_y_contour = list_get_right_y; list_point_true = list_get_right_true; for (int i = 0; i < list_x_down.size(); i++) { QString str = list_x_down.at(i); QString str_1 = list_x_contour.at(list_y_contour.size()-1); if (str.toInt() == str_1.toInt()) { next_line_star = i; break; } } //最下面的线向上索引 for (int i = next_line_star; i < list_x_down.size(); i++) { QString str_x = list_x_down.at(i); QString str_y = list_y_down.at(i); int point_x = str_x.toInt(); int point_y = str_y.toInt(); int location = point_y * x + point_x; red = qRed(data[location]); //green= qGreen(data[location]); //blue= qBlue(data[location]); if (red == 255) { //白点,为分界线 list_x_contour.append(QString("%1").arg(point_x)); list_y_contour.append(QString("%1").arg(point_y + distance_lunkuo)); list_point_true.append(QString("%1").arg(1)); } else { //黑点,向上搜索 for (int j = 1; j < (point_y ); j++) { //循环向上搜索,找到分界点 list_drawwhit_x.append(QString("%1").arg(point_x)); list_drawwhit_y.append(QString("%1").arg(point_y - j)); if (qRed(data[(point_y - j) * x + point_x]) == 255) { if (list_x_contour.size() > 0) { //如果不是起始点,判断与上一个点的位置关系 //QString last_x_contour = list_x_contour.at(list_x_contour.size()-1); QString last_y_contour = list_y_contour.at(list_y_contour.size()-1); //int point_last_x_contour = last_x_contour.toInt(); int point_last_y_contour = last_y_contour.toInt() + distance_lunkuo; if (0) //if ((point_last_y_contour - (point_y + j)) > (10) || (point_last_y_contour - (point_y + j)) < -10) { list_x_contour.append(QString("%1").arg(point_x)); list_y_contour.append(QString("%1").arg(point_last_y_contour - distance_lunkuo)); } else { list_x_contour.append(QString("%1").arg(point_x)); list_y_contour.append(QString("%1").arg(point_y - j + distance_lunkuo)); } QString str_check_x = list_x_contour.at(list_x_contour.size()-1); QString str_check_y = list_y_contour.at(list_y_contour.size()-1); int point_check_x = str_check_x.toInt(); int point_check_y = str_check_y.toInt(); for (int check = 0; check <= 5; check++) { //判断当前点是否可用,是否需要移动 if (qRed(data[point_check_y * x + point_check_x + check]) == 255 ) { //需要向右移动 for (int check_1 = 1; check_1 <= distance_lunkuo * 2; check_1++) { if (qRed(data[point_check_y * x + point_check_x + check - check_1]) == 255 ) { //无法移动,需要舍弃 list_point_true.append(QString("%1").arg(0)); break; } else { //可以移动 if (check_1 == distance_lunkuo) { //list_x_contour.replace(list_x_contour.size()-1,QString("%1").arg(point_check_x + check - distance_lunkuo)); //list_x_contour[list_x_contour.size()-1] = QString("%1").arg(point_check_y * x + point_check_x + check - distance_lunkuo); list_point_true.append(QString("%1").arg(1)); //list_point_true.append(QString("%1").arg(0)); break; } } } break; } else if (qRed(data[point_check_y * x + point_check_x - check]) == 255) { //需要向左移动 for (int check_1 = 1; check_1 <= distance_lunkuo * 2; check_1++) { if (qRed(data[point_check_y * x + point_check_x - check + check_1]) == 255 ) { //无法移动,需要舍弃 list_point_true.append(QString("%1").arg(0)); break; } else { //可以移动 if (check_1 == distance_lunkuo) { //list_x_contour.replace(list_x_contour.size()-1,QString("%1").arg(point_check_x - check + distance_lunkuo)); //list_x_contour[list_x_contour.size()-1] = QString("%1").arg(point_check_y * x + point_check_x - check + distance_lunkuo); list_point_true.append(QString("%1").arg(1)); //list_point_true.append(QString("%1").arg(0)); break; } } } break; } else { //不需要移动 if (check == 5) { list_point_true.append(QString("%1").arg(1)); break; } } } break; } else { list_x_contour.append(QString("%1").arg(point_x)); list_y_contour.append(QString("%1").arg(point_y - j + distance_lunkuo)); list_point_true.append(QString("%1").arg(1)); break; } } } } //---------------------------------- QString str_y_finally = list_y_contour.at(list_y_contour.size() - 1); QString str_y_finally_last; for (int j = list_y_contour.size() - 2; j > 0; j--) { if (list_point_true.at(j) == "1") { str_y_finally_last = list_y_contour.at(j); break; } } int str_y_finally_int = str_y_finally.toInt(); int str_y_finally_last_int = str_y_finally_last.toInt(); if ((str_y_finally_int - str_y_finally_last_int) > 20 || (str_y_finally_last_int - str_y_finally_int) > 20) { list_point_true.replace(list_point_true.size() - 1, QString("%1").arg(0)); } //--------------------------------------- } QStringList list_get_down_x; QStringList list_get_down_y; QStringList list_get_down_true; for (int i = 0; i < list_x_contour.size(); i++) { if (list_point_true.at(i) == "1") { list_get_down_x.append(list_x_contour.at(i)); list_get_down_y.append(list_y_contour.at(i)); list_get_down_true.append(QString("%1").arg(1)); } } list_x_contour.clear(); list_y_contour.clear(); list_point_true.clear(); list_x_contour = list_get_down_x; list_y_contour = list_get_down_y; list_point_true = list_get_down_true; for (int i = 0; i < list_y_left.size(); i++) { QString str = list_y_left.at(i); QString str_1 = list_y_contour.at(list_y_contour.size()-1); if (str.toInt() == str_1.toInt()) { next_line_star = i; break; } } int next_line_end = 0; for (int i = 0; i < list_y_left.size(); i++) { QString str = list_y_left.at(i); QString str_1 = list_y_contour.at(0); if (str.toInt() == str_1.toInt()) { next_line_end = i; break; } } qDebug()<<"next_line_star:"< 0) { //如果不是起始点,判断与上一个点的位置关系 list_x_contour.append(QString("%1").arg(point_x + j - distance_lunkuo)); list_y_contour.append(QString("%1").arg(point_y)); QString str_check_x = list_x_contour.at(list_x_contour.size()-1); QString str_check_y = list_y_contour.at(list_y_contour.size()-1); int point_check_x = str_check_x.toInt(); int point_check_y = str_check_y.toInt(); for (int check = 0; check <= 5; check++) { //判断当前点是否可用,是否需要移动 if (qRed(data[(point_check_y + check) * x + point_check_x]) == 255) { //需要向上移动 for (int check_1 = 1; check_1 <= distance_lunkuo; check_1++) { if (qRed(data[(point_check_y + check - check_1) * x + point_check_x]) == 255 ) { //无法移动,需要舍弃 list_point_true.append(QString("%1").arg(0)); break; } else { //可以移动 if (check_1 == distance_lunkuo) { //list_y_contour.replace(list_y_contour.size()-1,QString("%1").arg(point_check_y + check - distance_lunkuo)); //list_x_contour[list_x_contour.size()-1] = QString("%1").arg(point_check_y * x + point_check_x + check - distance_lunkuo); list_point_true.append(QString("%1").arg(1)); //list_point_true.append(QString("%1").arg(0)); break; } } } break; } else if (qRed(data[(point_check_y - check) * x + point_check_x]) == 255) { //需要向下移动 for (int check_1 = 1; check_1 <= distance_lunkuo; check_1++) { if (qRed(data[(point_check_y - check + check_1) * x + point_check_x]) == 255 ) { //无法移动,需要舍弃 list_point_true.append(QString("%1").arg(0)); break; } else { //可以移动 if (check_1 == distance_lunkuo) { //list_y_contour.replace(list_y_contour.size()-1,QString("%1").arg(point_check_y - check + distance_lunkuo)); //list_x_contour[list_x_contour.size()-1] = QString("%1").arg(point_check_y * x + point_check_x + check - distance_lunkuo); list_point_true.append(QString("%1").arg(1)); //list_point_true.append(QString("%1").arg(0)); break; } } } break; } else { //不需要移动 if (check == 5) { list_point_true.append(QString("%1").arg(1)); break; } } } break; } else { list_x_contour.append(QString("%1").arg(point_x)); list_y_contour.append(QString("%1").arg(point_y + j - distance_lunkuo)); list_point_true.append(QString("%1").arg(1)); break; } } } } //---------------------------------- QString str_x_finally = list_x_contour.at(list_x_contour.size() - 1); QString str_x_finally_last; for (int j = list_x_contour.size() - 2; j > 0; j--) { if (list_point_true.at(j) == "1") { str_x_finally_last = list_x_contour.at(j); break; } } int str_x_finally_int = str_x_finally.toInt(); int str_x_finally_last_int = str_x_finally_last.toInt(); if ((str_x_finally_int - str_x_finally_last_int) > 20 || (str_x_finally_last_int - str_x_finally_int) > 20) { list_point_true.replace(list_point_true.size() - 1, QString("%1").arg(0)); } //--------------------------------------- } QStringList list_get_left_x; QStringList list_get_left_y; QStringList list_get_left_true; for (int i = 0; i < list_x_contour.size(); i++) { if (list_point_true.at(i) == "1") { list_get_left_x.append(list_x_contour.at(i)); list_get_left_y.append(list_y_contour.at(i)); list_get_left_true.append(QString("%1").arg(1)); } } list_x_contour.clear(); list_y_contour.clear(); list_point_true.clear(); list_x_contour = list_get_left_x; list_y_contour = list_get_left_y; list_point_true = list_get_left_true; for (int i = 0; i < list_x_down.size(); i++) { QString str = list_x_down.at(i); QString str_1 = list_x_contour.at(list_y_contour.size()-1); if (str.toInt() == str_1.toInt()) { next_line_star = i; break; } } qDebug()<<"list_x:"< distance_lunkuo && point_x < (x - distance_lunkuo) && point_y > distance_lunkuo && point_y < (y - distance_lunkuo)) { for (int j = 0; j < distance_lunkuo; j++) { if((qRed(data[point_y * x + point_x + j]) == 255) //向右搜索 || (qRed(data[point_y * x + point_x - j]) == 255) //向左搜索 || (qRed(data[(point_y + j)* x + point_x]) == 255) //向下搜索 || (qRed(data[(point_y - j)* x + point_x]) == 255) //向下搜索 || (qRed(data[(point_y - j / 2)* x + point_x + j / 2]) == 255) //向右上搜索 || (qRed(data[(point_y - j / 2)* x + point_x - j / 2]) == 255) //向左上搜索 || (qRed(data[(point_y + j / 2)* x + point_x + j / 2]) == 255) //向右下搜索 || (qRed(data[(point_y + j / 2)* x + point_x - j / 2]) == 255) //向左下搜索 ) { list_point_true.replace(i,QString("%1").arg(0)); } } } } list_x_cache_1.clear(); list_y_cache_1.clear(); list_point_true_cache_1.clear(); for(int i = 0; i < list_point_true.size(); i++) { if(list_point_true.at(i) == "1") { QString str_1 = list_x_contour.at(i); QString str_2 = list_y_contour.at(i); list_x_cache_1.append(str_1); list_y_cache_1.append(str_2); list_point_true_cache_1.append(QString("%1").arg(1)); } } list_x_contour.clear(); list_y_contour.clear(); list_point_true.clear(); list_point_true = list_point_true_cache_1; list_x_contour = list_x_cache_1; list_y_contour = list_y_cache_1; #endif #if 0 //删除距离太远的点 for (int i = 1; i < list_x_contour.size(); i++) { QString str_x = list_x_contour.at(i); QString str_y = list_y_contour.at(i); QString str_x_lasr = list_x_contour.at(i - 1); QString str_y_lasr = list_y_contour.at(i - 1); int point_x = str_x.toInt(); int point_y = str_y.toInt(); int point_x_last = str_x_lasr.toInt(); int point_y_last = str_y_lasr.toInt(); if ( ((point_x - point_x_last) > 100) || ((point_x_last - point_x) > 100) || ((point_y - point_y_last) > 100) || ((point_y_last - point_y) > 100) ) { list_point_true.replace(i,QString("%1").arg(0)); } } list_x_cache_1.clear(); list_y_cache_1.clear(); list_point_true_cache_1.clear(); for(int i = 0; i < list_point_true.size(); i++) { if(list_point_true.at(i) == "1") { QString str_1 = list_x_contour.at(i); QString str_2 = list_y_contour.at(i); list_x_cache_1.append(str_1); list_y_cache_1.append(str_2); list_point_true_cache_1.append(QString("%1").arg(1)); } } list_x_contour.clear(); list_y_contour.clear(); list_point_true.clear(); list_point_true = list_point_true_cache_1; list_x_contour = list_x_cache_1; list_y_contour = list_y_cache_1; #endif #if 0 //对获取的点重新排序 QStringList list_x_reset; QStringList list_y_reset; QStringList list_point_true_reset; QString str_reset_x_now; QString str_reset_x_last; QString str_reset_y_now; QString str_reset_y_last; int reset_x_now = 0; int reset_x_last = 0; int reset_y_now = 0; int reset_y_last = 0; double distance_point_min = 100000.0; int jilupointposition = 0; for (int i = 0; i < list_x_contour.size(); i++) { jilupointposition = 0; if(i == 0) { list_x_reset.append(list_x_contour.at(0)); list_y_reset.append(list_y_contour.at(0)); list_point_true_reset.append(list_point_true.at(0)); list_x_contour.replace(0,QString("%1").arg(100000)); list_y_contour.replace(0,QString("%1").arg(100000)); } else { double distance = 0.0; distance_point_min = 100000.0; for (int j = 1; j < list_x_contour.size(); j++) { str_reset_x_now = list_x_contour.at(j); str_reset_x_last = list_x_reset.at(list_x_reset.size()-1); str_reset_y_now = list_y_contour.at(j); str_reset_y_last = list_y_reset.at(list_y_reset.size()-1); reset_x_now = str_reset_x_now.toInt(); reset_x_last = str_reset_x_last.toInt(); reset_y_now = str_reset_y_now.toInt(); reset_y_last = str_reset_y_last.toInt(); if (reset_x_now != 100000 || reset_y_now != 100000) { distance = sqrt((reset_x_now - reset_x_last) * (reset_x_now - reset_x_last) * 1.0 + (reset_y_now - reset_y_last) * (reset_y_now - reset_y_last) * 1.0); if(distance < distance_point_min) { distance_point_min = distance; jilupointposition = j; } } } list_x_reset.append(list_x_contour.at(jilupointposition)); list_y_reset.append(list_y_contour.at(jilupointposition)); list_point_true_reset.append(list_point_true.at(jilupointposition)); list_x_contour.replace(jilupointposition,QString("%1").arg(100000)); list_y_contour.replace(jilupointposition,QString("%1").arg(100000)); } } list_x_contour.clear(); list_y_contour.clear(); list_point_true.clear(); list_x_contour = list_x_reset; list_y_contour = list_y_reset; list_point_true = list_point_true_reset; #endif //输出的x,y坐标 QStringList list_output_x; QStringList list_output_y; //画图 //按点画图 #if 0 for (int i = 0 ; i < list_x_contour.size(); i++) { if (list_point_true.at(i) == "1") { QString str_x = list_x_contour.at(i); QString str_y = list_y_contour.at(i); int point_x = str_x.toInt(); int point_y = str_y.toInt(); int weizhi = point_y * x + point_x; int rgb = 255; data[weizhi] = qRgba(rgb, 0, 0, qAlpha(data[weizhi])); } } #endif //按线画图 #if 0 QString str_x_first = list_x_contour.at(0); QString str_y_first = list_y_contour.at(0); list_x_contour.append(str_x_first); list_y_contour.append(str_y_first); for (int i = 0 ; i < list_x_contour.size() - 1; i++) { QStringList list_Cache_x; QStringList list_Cache_y; QString str_x = list_x_contour.at(i); QString str_y = list_y_contour.at(i); QString str_x_lasr = list_x_contour.at(i + 1); QString str_y_lasr = list_y_contour.at(i + 1); int point_x = str_x.toInt(); int point_y = str_y.toInt(); int point_x_last = str_x_lasr.toInt(); int point_y_last = str_y_lasr.toInt(); if (point_x_last >= point_x) { if (point_y_last >= point_y) { for (int x_huatu = 1; x_huatu <= (point_x_last - point_x); x_huatu++) { list_Cache_x.append(QString("%1").arg(point_x + x_huatu)); list_Cache_y.append(QString("%1").arg(point_y)); // int weizhi = point_y * x + point_x + x_huatu; // int rgb = 255; // data[weizhi] = qRgba(rgb, 0, 0, qAlpha(data[weizhi])); } for (int y_huatu = 1; y_huatu <= (point_y_last - point_y); y_huatu++) { list_Cache_x.append(QString("%1").arg(point_x_last)); list_Cache_y.append(QString("%1").arg(point_y + y_huatu)); // int weizhi = (point_y + y_huatu) * x + point_x_last; // int rgb = 255; // data[weizhi] = qRgba(rgb, 0, 0, qAlpha(data[weizhi])); } } else { for (int y_huatu = 1; y_huatu <= (point_y - point_y_last); y_huatu++) { list_Cache_x.append(QString("%1").arg(point_x)); list_Cache_y.append(QString("%1").arg(point_y - y_huatu)); // int weizhi = (point_y - y_huatu) * x + point_x; // int rgb = 255; // data[weizhi] = qRgba(rgb, 0, 0, qAlpha(data[weizhi])); } for (int x_huatu = 1; x_huatu <= (point_x_last - point_x); x_huatu++) { list_Cache_x.append(QString("%1").arg(point_x + x_huatu)); list_Cache_y.append(QString("%1").arg(point_y_last)); // int weizhi = point_y_last * x + point_x + x_huatu; // int rgb = 255; // data[weizhi] = qRgba(rgb, 0, 0, qAlpha(data[weizhi])); } } } else { if (point_y_last >= point_y) { for (int y_huatu = 1; y_huatu <= (point_y_last - point_y); y_huatu++) { list_Cache_x.append(QString("%1").arg(point_x)); list_Cache_y.append(QString("%1").arg(point_y + y_huatu)); // int weizhi = (point_y + y_huatu) * x + point_x; // int rgb = 255; // data[weizhi] = qRgba(rgb, 0, 0, qAlpha(data[weizhi])); } for (int x_huatu = 1; x_huatu <= (point_x - point_x_last); x_huatu++) { list_Cache_x.append(QString("%1").arg(point_x - x_huatu)); list_Cache_y.append(QString("%1").arg(point_y_last)); // int weizhi = point_y_last * x + point_x - x_huatu; // int rgb = 255; // data[weizhi] = qRgba(rgb, 0, 0, qAlpha(data[weizhi])); } } else { for (int x_huatu = 1; x_huatu <= (point_x - point_x_last); x_huatu++) { list_Cache_x.append(QString("%1").arg(point_x - x_huatu)); list_Cache_y.append(QString("%1").arg(point_y)); // int weizhi = point_y * x + point_x - x_huatu; // int rgb = 255; // data[weizhi] = qRgba(rgb, 0, 0, qAlpha(data[weizhi])); } for (int y_huatu = 1; y_huatu <= (point_y - point_y_last); y_huatu++) { list_Cache_x.append(QString("%1").arg(point_x_last)); list_Cache_y.append(QString("%1").arg(point_y - y_huatu)); // int weizhi = (point_y - y_huatu) * x + point_x_last; // int rgb = 255; // data[weizhi] = qRgba(rgb, 0, 0, qAlpha(data[weizhi])); } } } // int weizhi = point_y * x + point_x; // int rgb = 255; // data[weizhi] = qRgba(rgb, 0, 0, qAlpha(data[weizhi])); for (int check_num = 0; check_num < list_Cache_x.size(); check_num++) { QString str_x_check = list_Cache_x.at(check_num); QString str_y_check = list_Cache_y.at(check_num); int point_x_check = str_x_check.toInt(); int point_y_check = str_y_check.toInt(); if(qRed(data[point_y_check * x + point_x_check]) == 255) {//判断画的线是否经过图像 list_Cache_x.clear(); list_Cache_y.clear(); } } if(list_Cache_x.size()>0) { for (int size = 0; size < list_Cache_x.size(); size++) { QString str_x_save = list_Cache_x.at(size); QString str_y_save = list_Cache_y.at(size); int point_x_save = str_x_save.toInt(); int point_y_save = str_y_save.toInt(); list_output_x.append(QString("%1").arg(point_x_save)); list_output_y.append(QString("%1").arg(point_y_save)); } } } list_x_contour.clear(); list_y_contour.clear(); list_x_contour = list_output_x; list_y_contour = list_output_y; //画图 for (int i = 0 ; i < list_x_contour.size(); i++) { //if (list_point_true.at(i) == "1") { QString str_x = list_x_contour.at(i); QString str_y = list_y_contour.at(i); int point_x = str_x.toInt(); int point_y = str_y.toInt(); int weizhi = point_y * x + point_x; int rgb = 255; data[weizhi] = qRgba(rgb, 0, 0, qAlpha(data[weizhi])); } } #endif #if 1 for (int i = 0; i < list_x_up.size(); i++) { if (i == 0) { QString str_y = list_y_up.at(i); int point_y = str_y.toInt(); list_y_up[i] = QString("%1").arg(point_y - distance_lunkuo); QString str_x = list_x_up.at(i); int point_x = str_x.toInt(); list_x_up[i] = QString("%1").arg(point_x - distance_lunkuo); } else if (i == list_x_up.size()-1) { QString str_y = list_y_up.at(i); int point_y = str_y.toInt(); list_y_up[i] = QString("%1").arg(point_y - distance_lunkuo); QString str_x = list_x_up.at(i); int point_x = str_x.toInt(); list_x_up[i] = QString("%1").arg(point_x + distance_lunkuo); } else { QString str_y = list_y_up.at(i); int point_y = str_y.toInt(); list_y_up[i] = QString("%1").arg(point_y - distance_lunkuo); } } for (int i = 0; i < list_x_right.size(); i++) { if ( i == 0) { QString str_x = list_x_right.at(i); int point_x = str_x.toInt(); list_x_right[i] = QString("%1").arg(point_x + distance_lunkuo); QString str_y = list_y_right.at(i); int point_y = str_y.toInt(); list_y_right[i] = QString("%1").arg(point_y - distance_lunkuo); } else if (i == list_x_right.size() - 1) { QString str_x = list_x_right.at(i); int point_x = str_x.toInt(); list_x_right[i] = QString("%1").arg(point_x + distance_lunkuo); QString str_y = list_y_right.at(i); int point_y = str_y.toInt(); list_y_right[i] = QString("%1").arg(point_y + distance_lunkuo); } else { QString str_x = list_x_right.at(i); int point_x = str_x.toInt(); list_x_right[i] = QString("%1").arg(point_x + distance_lunkuo); } } for (int i = 0; i < list_x_down.size(); i++) { if (i == 0) { QString str_y = list_y_down.at(i); int point_y = str_y.toInt(); list_y_down[i] = QString("%1").arg(point_y + distance_lunkuo); QString str_x = list_x_down.at(i); int point_x = str_x.toInt(); list_x_down[i] = QString("%1").arg(point_x + distance_lunkuo); } else if (i == list_x_down.size() - 1) { QString str_y = list_y_down.at(i); int point_y = str_y.toInt(); list_y_down[i] = QString("%1").arg(point_y + distance_lunkuo); QString str_x = list_x_down.at(i); int point_x = str_x.toInt(); list_x_down[i] = QString("%1").arg(point_x - distance_lunkuo); } else { QString str_y = list_y_down.at(i); int point_y = str_y.toInt(); list_y_down[i] = QString("%1").arg(point_y + distance_lunkuo); } } for (int i = 0; i < list_x_left.size(); i++) { if ( i == 0) { QString str_x = list_x_left.at(i); int point_x = str_x.toInt(); list_x_left[i] = QString("%1").arg(point_x - distance_lunkuo); QString str_y = list_y_left.at(i); int point_y = str_y.toInt(); list_y_left[i] = QString("%1").arg(point_y + distance_lunkuo); } else if (i == list_x_left.size() - 1) { QString str_x = list_x_left.at(i); int point_x = str_x.toInt(); list_x_left[i] = QString("%1").arg(point_x - distance_lunkuo); QString str_y = list_y_left.at(i); int point_y = str_y.toInt(); list_y_left[i] = QString("%1").arg(point_y - distance_lunkuo); } else { QString str_x = list_x_left.at(i); int point_x = str_x.toInt(); list_x_left[i] = QString("%1").arg(point_x - distance_lunkuo); } } list_x_contour.clear(); list_y_contour.clear(); for (int i = 0; i < list_x_up.size(); i++) { list_x_contour.append(list_x_up.at(i)); list_y_contour.append(list_y_up.at(i)); } for (int i = 0; i < list_x_right.size(); i++) { list_x_contour.append(list_x_right.at(i)); list_y_contour.append(list_y_right.at(i)); } for (int i = 0; i < list_x_down.size(); i++) { list_x_contour.append(list_x_down.at(i)); list_y_contour.append(list_y_down.at(i)); } for (int i = 0; i < list_x_left.size(); i++) { list_x_contour.append(list_x_left.at(i)); list_y_contour.append(list_y_left.at(i)); } #endif int dsr_x_max = m_maxX; int dsr_x_min = m_minX; int dsr_y_max = m_maxY; int dsr_y_min = m_minY; int point_x_max = x_max; int point_x_min = x_min; int point_y_max = y_max; int point_y_min = y_min; int Stitch_length = 4; //输入的针步长度参数,单位mm int Stitch_length_calculate = Stitch_length / 0.01; int Stitch_length_calculate_min = (Stitch_length - 1) / 0.01; int Stitch_length_calculate_max = (Stitch_length + 1) / 0.01; qDebug()<<"dsr_x_max:"< 2) // { // list_dsr_point_x.append(list_dsr_point_x.at(0)); // list_dsr_point_y.append(list_dsr_point_y.at(0)); // } QStringList list_x_1; QStringList list_y_1; int cont_x = 0; int x_check = (dsr_x_max - dsr_x_min) * 3 /4 + dsr_x_min; int y_check = (dsr_y_max - dsr_y_min) / 2 + dsr_y_min; int x_use_check = 10000000; for (int i = 0 ; i < list_dsr_point_x.size(); i++) { QString str_get_x = list_dsr_point_x.at(i); QString str_get_y = list_dsr_point_y.at(i); int str_get_x_int = str_get_x.toInt(); int str_get_y_int = str_get_y.toInt(); if ((str_get_x_int - x_check) <= x_use_check && str_get_y_int <= y_check && str_get_x_int > x_check ) { x_use_check = str_get_x_int - x_check; cont_x = i; } } qDebug()<<"list_dsr_point_x.size="<= Stitch_length_calculate_min && point_length <= Stitch_length_calculate_max) { list_dsr_x_save.append(list_dsr_point_x.at(j)); list_dsr_y_save.append(list_dsr_point_y.at(j)); i = j; break; } else if (point_length > Stitch_length_calculate_max) { int point_length_int = point_length; int num = point_length_int / Stitch_length_calculate + 1; for (int k = 1; k <= num; k++) { int point_x_now = ((int_dsr_x_next - int_dsr_x_now) * (k * Stitch_length_calculate) / point_length_int ) + int_dsr_x_now; int point_y_now = ((int_dsr_y_next - int_dsr_y_now) * (k * Stitch_length_calculate) / point_length_int ) + int_dsr_y_now; list_dsr_x_save.append(QString("%1").arg(point_x_now)); list_dsr_y_save.append(QString("%1").arg(point_y_now)); } i = j; break; } else { } if (i == list_dsr_point_x.size() - 1) { break; } } } //list_dsr_x_save.append(list_dsr_point_x.at(0)); //list_dsr_y_save.append(list_dsr_point_y.at(0)); DsrStep point_dsr_item; QList dsr_item_list;//记录DSR文件内所有点信息 //第一针插入0 // memset(&point_dsr_item, 0, sizeof(DsrStep)); // point_dsr_item.ctrl = DSR_EMB; // point_dsr_item.attr = 0; // point_dsr_item.action = 0; // point_dsr_item.dx =0; // point_dsr_item.dy = 0; // point_dsr_item.dr = 0; // dsr_item_list.append(point_dsr_item); int point_move_x; int point_move_y; //----生成数据点 for (int i = 0; i< list_dsr_x_save.size(); i++) { QString str_point_x = list_dsr_x_save.at(i); QString str_point_y = list_dsr_y_save.at(i); int point_x = str_point_x.toInt(); int point_y = str_point_y.toInt(); if (i == 0) { memset(&point_dsr_item, 0, sizeof(DsrStep)); point_dsr_item.ctrl = DSR_EMB; point_dsr_item.attr = 0; point_dsr_item.action = 0; point_dsr_item.dx = 0; point_move_x = point_x * (-1); point_dsr_item.dy = 0; point_move_y = point_y; point_dsr_item.dr = 0; dsr_item_list.append(point_dsr_item); } else { memset(&point_dsr_item, 0, sizeof(DsrStep)); point_dsr_item.ctrl = DSR_EMB; point_dsr_item.attr = 0; point_dsr_item.action = 0; point_dsr_item.dx = point_x * (-1) - point_move_x; point_dsr_item.dy = point_y - point_move_y; point_dsr_item.dr = getDsrDr(point_dsr_item.dx, point_dsr_item.dy); dsr_item_list.append(point_dsr_item); } if (i == list_dsr_x_save.size() - 1) { memset(&point_dsr_item, 0, sizeof(DsrStep)); point_dsr_item.ctrl = DSR_NULL; point_dsr_item.attr = 0; point_dsr_item.action = 0; point_dsr_item.dx = point_x * (-1) - point_move_x; point_dsr_item.dy = point_y - point_move_y; point_dsr_item.dr = getDsrDr(point_dsr_item.dx, point_dsr_item.dy); dsr_item_list.append(point_dsr_item); } } qDebug()<