From fb12bfa57f622618a14ce67712226013a87d0b49 Mon Sep 17 00:00:00 2001 From: K1rillProkhorov Date: Mon, 13 May 2024 11:17:30 +0300 Subject: [PATCH] Add MovablePoints on Label --- .../gradient/Gradient/mainwindow.cpp | 397 +++++++++++++----- .../gradient/Gradient/mainwindow.h | 86 +++- .../gradient/Gradient/mainwindow.ui | 28 +- 3 files changed, 378 insertions(+), 133 deletions(-) diff --git a/Test/Applications/gradient/Gradient/mainwindow.cpp b/Test/Applications/gradient/Gradient/mainwindow.cpp index b146861aea..dba76eaa80 100644 --- a/Test/Applications/gradient/Gradient/mainwindow.cpp +++ b/Test/Applications/gradient/Gradient/mainwindow.cpp @@ -12,6 +12,7 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWi ui->lable_test->setStyleSheet("QLabel { background-color : white;}"); on_actionLinear_Gradient_triggered(); ui->Rainbow_Colorspace_Radio_Button->setChecked(true); + connect(ui->lable_test, SIGNAL(mousePressed()), this, SLOT(on_label_test_clicked())); } MainWindow::~MainWindow() @@ -223,6 +224,306 @@ std::vector> MainWindow::QColor2rgbaMatrix() return colors; } +inline void setPoint(QImage *image, int x, int y, QRgb color) +{ + image->setPixel(x, y, color); + image->setPixel(x - 1, y, color); + image->setPixel(x, y - 1, color); + image->setPixel(x + 1, y, color); + image->setPixel(x, y + 1, color); +} + +void MainWindow::setPoints(QImage *image) +{ + std::vector points; + if (info.gradient == Linear) + { + setPoint(image, + info.p0.x * MM_TO_COORD(ui->lable_test->width()), + info.p0.y * MM_TO_COORD(ui->lable_test->height()), + qRgb(0, 0, 0)); + setPoint(image, + info.p1.x * MM_TO_COORD(ui->lable_test->width()), + info.p1.y * MM_TO_COORD(ui->lable_test->height()), + qRgb(0, 0, 0)); + points.push_back(QPoint(info.p0.x * MM_TO_COORD(ui->lable_test->width()), info.p0.y * MM_TO_COORD(ui->lable_test->height()))); + points.push_back(QPoint(info.p1.x * MM_TO_COORD(ui->lable_test->width()), info.p1.y * MM_TO_COORD(ui->lable_test->height()))); + } + else if (info.gradient == Radial) + { + setPoint(image, + info.c0.x * MM_TO_COORD(ui->lable_test->width()), + info.c0.y * MM_TO_COORD(ui->lable_test->height()), + qRgb(0, 0, 0)); + setPoint(image, + info.c1.x * MM_TO_COORD(ui->lable_test->width()), + info.c1.y * MM_TO_COORD(ui->lable_test->height()), + qRgb(0, 0, 0)); + points.push_back(QPoint(info.c0.x * MM_TO_COORD(ui->lable_test->width()), info.c0.y * MM_TO_COORD(ui->lable_test->height()))); + points.push_back(QPoint(info.c1.x * MM_TO_COORD(ui->lable_test->width()), info.c1.y * MM_TO_COORD(ui->lable_test->height()))); + } + else if (info.gradient == Triangle || info.gradient == TriangleParametric) + { + for (NSStructures::Point p : info.triangle) + { + setPoint(image, + p.x * MM_TO_COORD(ui->lable_test->width()), + p.y * MM_TO_COORD(ui->lable_test->height()), + qRgb(0,0,0)); + points.push_back(QPoint(p.x * MM_TO_COORD(ui->lable_test->width()), p.y * MM_TO_COORD(ui->lable_test->height()))); + } + } + else if (info.gradient == CoonsPatch) + { + for (NSStructures::Point p : info.curve) + { + setPoint(image, + p.x, + p.y, + qRgb(0,0,0)); + points.push_back(QPoint(p.x, p.y)); + } + } + else if (info.gradient == CoonsPatchParametric) + { + for (NSStructures::Point p : info.curve) + { + setPoint(image, + p.x * MM_TO_COORD(ui->lable_test->width()), + p.y * MM_TO_COORD(ui->lable_test->height()), + qRgb(0,0,0)); + points.push_back(QPoint(p.x * MM_TO_COORD(ui->lable_test->width()), p.y * MM_TO_COORD(ui->lable_test->width()))); + } + } + else if (info.gradient == TensorCoonsPatch) + { + for (std::vector v : info.tensorcurve) + { + for (NSStructures::Point p : v) + { + setPoint(image, + p.x, + p.y, + qRgb(0,0,0)); + points.push_back(QPoint(p.x, p.y)); + } + } + } + else if (info.gradient == TensorCoonsPatchParametric) + { + for (std::vector v : info.tensorcurve) + { + for (NSStructures::Point p : v) + { + setPoint(image, + p.x * MM_TO_COORD(ui->lable_test->width()), + p.y * MM_TO_COORD(ui->lable_test->height()), + qRgb(0,0,0)); + points.push_back(QPoint(p.x * MM_TO_COORD(ui->lable_test->width()), p.y * MM_TO_COORD(ui->lable_test->width()))); + } + } + } + ui->lable_test->SetPoints(points); +} + +void MainWindow::on_label_test_clicked() +{ + if (ui->lable_test->Movable()) + { + ui->lable_test->ResetMovable(); + disconnect(ui->lable_test, SIGNAL(mouseMoved()), this, SLOT(on_label_test_mouse_move())); + } + else if (ui->lable_test->CheckPointArea()) + { + ui->lable_test->ResetMovable(); + connect(ui->lable_test, SIGNAL(mouseMoved()), this, SLOT(on_label_test_mouse_move())); + } +} + +void MainWindow::on_label_test_mouse_move() +{ + if (info.gradient == Linear) + { + switch (ui->lable_test->GetIndex()) + { + case 0: + ui->First_X_Coordinate_Input->setText(QString::number(ui->lable_test->GetMovePoint().x() / MM_TO_COORD(ui->lable_test->width()))); + ui->First_Y_Coordinate_Input->setText(QString::number(ui->lable_test->GetMovePoint().y() / MM_TO_COORD(ui->lable_test->height()))); + break; + case 1: + ui->Second_X_Coordinate_Input->setText(QString::number(ui->lable_test->GetMovePoint().x() / MM_TO_COORD(ui->lable_test->width()))); + ui->Second_Y_Coordinate_Input->setText(QString::number(ui->lable_test->GetMovePoint().y() / MM_TO_COORD(ui->lable_test->height()))); + break; + default: + break; + } + } + else if (info.gradient == Radial) + { + switch (ui->lable_test->GetIndex()) + { + case 0: + ui->First_Center_X_Coordinate_Input->setText(QString::number(ui->lable_test->GetMovePoint().x() / MM_TO_COORD(ui->lable_test->width()))); + ui->First_Center_Y_Coordinate_Input->setText(QString::number(ui->lable_test->GetMovePoint().y() / MM_TO_COORD(ui->lable_test->height()))); + break; + case 1: + ui->Second_Center_X_Coordinate_Input->setText(QString::number(ui->lable_test->GetMovePoint().x() / MM_TO_COORD(ui->lable_test->width()))); + ui->Second_Center_Y_Coordinate_Input->setText(QString::number(ui->lable_test->GetMovePoint().y() / MM_TO_COORD(ui->lable_test->height()))); + break; + default: + break; + } + } + else if (info.gradient == Triangle || info.gradient == TriangleParametric) + { + switch (ui->lable_test->GetIndex()) + { + case 0: + ui->First_Vertex_X_Coordinate_Input->setText(QString::number(ui->lable_test->GetMovePoint().x() / MM_TO_COORD(ui->lable_test->width()))); + ui->First_Vertex_Y_Coordinate_Input->setText(QString::number(ui->lable_test->GetMovePoint().y() / MM_TO_COORD(ui->lable_test->height()))); + break; + case 1: + ui->Second_Vertex_X_Coordinate_Input->setText(QString::number(ui->lable_test->GetMovePoint().x() / MM_TO_COORD(ui->lable_test->width()))); + ui->Second_Vertex_Y_Coordinate_Input->setText(QString::number(ui->lable_test->GetMovePoint().y() / MM_TO_COORD(ui->lable_test->height()))); + break; + case 2: + ui->Third_Vertex_X_Coordinate_Input->setText(QString::number(ui->lable_test->GetMovePoint().x() / MM_TO_COORD(ui->lable_test->width()))); + ui->Third_Vertex_Y_Coordinate_Input->setText(QString::number(ui->lable_test->GetMovePoint().y() / MM_TO_COORD(ui->lable_test->height()))); + break; + default: + break; + } + } + else if (info.gradient == CoonsPatch || info.gradient == CoonsPatchParametric) + { + switch (ui->lable_test->GetIndex()) + { + case 0: + ui->First_Vertex_X_Coordinate_Input_3->setText(QString::number(ui->lable_test->GetMovePoint().x() / MM_TO_COORD(ui->lable_test->width()))); + ui->First_Vertex_Y_Coordinate_Input_3->setText(QString::number(ui->lable_test->GetMovePoint().y() / MM_TO_COORD(ui->lable_test->height()))); + break; + case 1: + ui->First_X_Coordinate_First_Edge->setText(QString::number(ui->lable_test->GetMovePoint().x() / MM_TO_COORD(ui->lable_test->width()))); + ui->First_Y_Coordinate_First_Edge->setText(QString::number(ui->lable_test->GetMovePoint().y() / MM_TO_COORD(ui->lable_test->height()))); + break; + case 2: + ui->Second_X_Coordinate_First_Edge->setText(QString::number(ui->lable_test->GetMovePoint().x() / MM_TO_COORD(ui->lable_test->width()))); + ui->Second_Y_Coordinate_First_Edge->setText(QString::number(ui->lable_test->GetMovePoint().y() / MM_TO_COORD(ui->lable_test->height()))); + break; + case 3: + ui->Second_Vertex_X_Coordinate_Input_3->setText(QString::number(ui->lable_test->GetMovePoint().x() / MM_TO_COORD(ui->lable_test->width()))); + ui->Second_Vertex_Y_Coordinate_Input_3->setText(QString::number(ui->lable_test->GetMovePoint().y() / MM_TO_COORD(ui->lable_test->height()))); + break; + case 4: + ui->First_X_Coordinate_Second_Edge->setText(QString::number(ui->lable_test->GetMovePoint().x() / MM_TO_COORD(ui->lable_test->width()))); + ui->First_Y_Coordinate_Second_Edge->setText(QString::number(ui->lable_test->GetMovePoint().y() / MM_TO_COORD(ui->lable_test->height()))); + break; + case 5: + ui->Second_X_Coordinate_Second_Edge->setText(QString::number(ui->lable_test->GetMovePoint().x() / MM_TO_COORD(ui->lable_test->width()))); + ui->Second_Y_Coordinate_Second_Edge->setText(QString::number(ui->lable_test->GetMovePoint().y() / MM_TO_COORD(ui->lable_test->height()))); + break; + case 6: + ui->Third_Vertex_X_Coordinate_Input_3->setText(QString::number(ui->lable_test->GetMovePoint().x() / MM_TO_COORD(ui->lable_test->width()))); + ui->Third_Vertex_Y_Coordinate_Input_3->setText(QString::number(ui->lable_test->GetMovePoint().y() / MM_TO_COORD(ui->lable_test->height()))); + break; + case 7: + ui->First_X_Coordinate_Third_Edge->setText(QString::number(ui->lable_test->GetMovePoint().x() / MM_TO_COORD(ui->lable_test->width()))); + ui->First_Y_Coordinate_Third_Edge->setText(QString::number(ui->lable_test->GetMovePoint().y() / MM_TO_COORD(ui->lable_test->height()))); + break; + case 8: + ui->Second_X_Coordinate_Third_Edge->setText(QString::number(ui->lable_test->GetMovePoint().x() / MM_TO_COORD(ui->lable_test->width()))); + ui->Second_Y_Coordinate_Third_Edge->setText(QString::number(ui->lable_test->GetMovePoint().y() / MM_TO_COORD(ui->lable_test->height()))); + break; + case 9: + ui->Fourth_Vertex_X_Coordinate_Input_3->setText(QString::number(ui->lable_test->GetMovePoint().x() / MM_TO_COORD(ui->lable_test->width()))); + ui->Fourth_Vertex_Y_Coordinate_Input_3->setText(QString::number(ui->lable_test->GetMovePoint().y() / MM_TO_COORD(ui->lable_test->height()))); + break; + case 10: + ui->First_X_Coordinate_Fourth_Edge->setText(QString::number(ui->lable_test->GetMovePoint().x() / MM_TO_COORD(ui->lable_test->width()))); + ui->First_Y_Coordinate_Fourth_Edge->setText(QString::number(ui->lable_test->GetMovePoint().y() / MM_TO_COORD(ui->lable_test->height()))); + break; + case 11: + ui->Second_X_Coordinate_Fourth_Edge->setText(QString::number(ui->lable_test->GetMovePoint().x() / MM_TO_COORD(ui->lable_test->width()))); + ui->Second_Y_Coordinate_Fourth_Edge->setText(QString::number(ui->lable_test->GetMovePoint().y() / MM_TO_COORD(ui->lable_test->height()))); + break; + default: + break; + } + } + else if (info.gradient == TensorCoonsPatch || info.gradient == TensorCoonsPatchParametric) + { + switch (ui->lable_test->GetIndex()) + { + case 0: + ui->First_X_Coordinate_First_Edge_3->setText(QString::number(ui->lable_test->GetMovePoint().x() / MM_TO_COORD(ui->lable_test->width()))); + ui->First_Y_Coordinate_First_Edge_3->setText(QString::number(ui->lable_test->GetMovePoint().y() / MM_TO_COORD(ui->lable_test->height()))); + break; + case 1: + ui->Second_X_Coordinate_First_Edge_3->setText(QString::number(ui->lable_test->GetMovePoint().x() / MM_TO_COORD(ui->lable_test->width()))); + ui->Second_Y_Coordinate_First_Edge_3->setText(QString::number(ui->lable_test->GetMovePoint().y() / MM_TO_COORD(ui->lable_test->height()))); + break; + case 2: + ui->Third_X_Coordinate_First_Edge_3->setText(QString::number(ui->lable_test->GetMovePoint().x()/ MM_TO_COORD(ui->lable_test->width()))); + ui->Third_Y_Coordinate_First_Edge_3->setText(QString::number(ui->lable_test->GetMovePoint().x()/ MM_TO_COORD(ui->lable_test->height()))); + break; + case 3: + ui->Fourth_X_Coordinate_First_Edge_3->setText(QString::number(ui->lable_test->GetMovePoint().x()/ MM_TO_COORD(ui->lable_test->width()))); + ui->Fourth_Y_Coordinate_First_Edge_3->setText(QString::number(ui->lable_test->GetMovePoint().x()/ MM_TO_COORD(ui->lable_test->height()))); + break; + case 4: + ui->First_X_Coordinate_Second_Edge_3->setText(QString::number(ui->lable_test->GetMovePoint().x() / MM_TO_COORD(ui->lable_test->width()))); + ui->First_Y_Coordinate_Second_Edge_3->setText(QString::number(ui->lable_test->GetMovePoint().y() / MM_TO_COORD(ui->lable_test->height()))); + break; + case 5: + ui->Second_X_Coordinate_Second_Edge_3->setText(QString::number(ui->lable_test->GetMovePoint().x() / MM_TO_COORD(ui->lable_test->width()))); + ui->Second_Y_Coordinate_Second_Edge_3->setText(QString::number(ui->lable_test->GetMovePoint().y() / MM_TO_COORD(ui->lable_test->height()))); + break; + case 6: + ui->Third_X_Coordinate_Second_Edge_3->setText(QString::number(ui->lable_test->GetMovePoint().x()/ MM_TO_COORD(ui->lable_test->width()))); + ui->Third_Y_Coordinate_Second_Edge_3->setText(QString::number(ui->lable_test->GetMovePoint().x()/ MM_TO_COORD(ui->lable_test->height()))); + break; + case 7: + ui->Fourth_X_Coordinate_Second_Edge_3->setText(QString::number(ui->lable_test->GetMovePoint().x()/ MM_TO_COORD(ui->lable_test->width()))); + ui->Fourth_Y_Coordinate_Second_Edge_3->setText(QString::number(ui->lable_test->GetMovePoint().x()/ MM_TO_COORD(ui->lable_test->height()))); + break; + case 8: + ui->First_X_Coordinate_Third_Edge_3->setText(QString::number(ui->lable_test->GetMovePoint().x() / MM_TO_COORD(ui->lable_test->width()))); + ui->First_Y_Coordinate_Third_Edge_3->setText(QString::number(ui->lable_test->GetMovePoint().y() / MM_TO_COORD(ui->lable_test->height()))); + break; + case 9: + ui->Second_X_Coordinate_Third_Edge_3->setText(QString::number(ui->lable_test->GetMovePoint().x() / MM_TO_COORD(ui->lable_test->width()))); + ui->Second_Y_Coordinate_Third_Edge_3->setText(QString::number(ui->lable_test->GetMovePoint().y() / MM_TO_COORD(ui->lable_test->height()))); + break; + case 10: + ui->Third_X_Coordinate_Third_Edge_3->setText(QString::number(ui->lable_test->GetMovePoint().x()/ MM_TO_COORD(ui->lable_test->width()))); + ui->Third_Y_Coordinate_Third_Edge_3->setText(QString::number(ui->lable_test->GetMovePoint().x()/ MM_TO_COORD(ui->lable_test->height()))); + break; + case 11: + ui->Fourth_X_Coordinate_Third_Edge_3->setText(QString::number(ui->lable_test->GetMovePoint().x()/ MM_TO_COORD(ui->lable_test->width()))); + ui->Fourth_Y_Coordinate_Third_Edge_3->setText(QString::number(ui->lable_test->GetMovePoint().x()/ MM_TO_COORD(ui->lable_test->height()))); + break; + case 12: + ui->First_X_Coordinate_Fourth_Edge_3->setText(QString::number(ui->lable_test->GetMovePoint().x() / MM_TO_COORD(ui->lable_test->width()))); + ui->First_Y_Coordinate_Fourth_Edge_3->setText(QString::number(ui->lable_test->GetMovePoint().y() / MM_TO_COORD(ui->lable_test->height()))); + break; + case 13: + ui->Second_X_Coordinate_Fourth_Edge_3->setText(QString::number(ui->lable_test->GetMovePoint().x() / MM_TO_COORD(ui->lable_test->width()))); + ui->Second_Y_Coordinate_Fourth_Edge_3->setText(QString::number(ui->lable_test->GetMovePoint().y() / MM_TO_COORD(ui->lable_test->height()))); + break; + case 14: + ui->Third_X_Coordinate_Fourth_Edge_3->setText(QString::number(ui->lable_test->GetMovePoint().x()/ MM_TO_COORD(ui->lable_test->width()))); + ui->Third_Y_Coordinate_Fourth_Edge_3->setText(QString::number(ui->lable_test->GetMovePoint().x()/ MM_TO_COORD(ui->lable_test->height()))); + case 15: + ui->Fourth_X_Coordinate_Fourth_Edge_3->setText(QString::number(ui->lable_test->GetMovePoint().x()/ MM_TO_COORD(ui->lable_test->width()))); + ui->Fourth_Y_Coordinate_Fourth_Edge_3->setText(QString::number(ui->lable_test->GetMovePoint().x()/ MM_TO_COORD(ui->lable_test->height()))); + default: + break; + } + } + + on_pushButton_clicked(); +} + void MainWindow::on_pushButton_clicked() { points = {{0, 0}, @@ -420,101 +721,7 @@ void MainWindow::on_pushButton_clicked() } QImage pm = GenerateImg(points, info, ui->lable_test->width(), ui->lable_test->height()); + setPoints(&pm); ui->lable_test->setPixmap(QPixmap::fromImage(pm)); ui->lable_test->setScaledContents(true); } - -void MainWindow::on_pushButton_2_clicked() -{ - std::vector p = ui->lable_test->GetPoints(); - if (info.gradient == Linear) - { - ui->First_X_Coordinate_Input->setText(QString::number(p[0].x() / MM_TO_COORD(ui->lable_test->width()))); - ui->First_Y_Coordinate_Input->setText(QString::number(p[0].y() / MM_TO_COORD(ui->lable_test->height()))); - ui->Second_X_Coordinate_Input->setText(QString::number(p[1].x() / MM_TO_COORD(ui->lable_test->width()))); - ui->Second_Y_Coordinate_Input->setText(QString::number(p[1].y() / MM_TO_COORD(ui->lable_test->height()))); - ui->lable_test->Clear(); - } - else if (info.gradient == Radial) - { - ui->First_Center_X_Coordinate_Input->setText(QString::number(p[0].x() / MM_TO_COORD(ui->lable_test->width()))); - ui->First_Center_Y_Coordinate_Input->setText(QString::number(p[0].y() / MM_TO_COORD(ui->lable_test->height()))); - ui->Second_Center_X_Coordinate_Input->setText(QString::number(p[1].x() / MM_TO_COORD(ui->lable_test->width()))); - ui->Second_Center_Y_Coordinate_Input->setText(QString::number(p[1].y() / MM_TO_COORD(ui->lable_test->height()))); - ui->lable_test->Clear(); - } - else if (info.gradient == Triangle || info.gradient == TriangleParametric) - { - ui->First_Vertex_X_Coordinate_Input->setText(QString::number(p[0].x() / MM_TO_COORD(ui->lable_test->width()))); - ui->First_Vertex_Y_Coordinate_Input->setText(QString::number(p[0].y() / MM_TO_COORD(ui->lable_test->height()))); - ui->Second_Vertex_X_Coordinate_Input->setText(QString::number(p[1].x() / MM_TO_COORD(ui->lable_test->width()))); - ui->Second_Vertex_Y_Coordinate_Input->setText(QString::number(p[1].y() / MM_TO_COORD(ui->lable_test->height()))); - ui->Third_Vertex_X_Coordinate_Input->setText(QString::number(p[2].x() / MM_TO_COORD(ui->lable_test->width()))); - ui->Third_Vertex_Y_Coordinate_Input->setText(QString::number(p[2].y() / MM_TO_COORD(ui->lable_test->height()))); - ui->lable_test->Clear(); - } - else if (info.gradient == CoonsPatch || info.gradient == CoonsPatchParametric) - { - ui->First_Vertex_X_Coordinate_Input_3->setText(QString::number(p[0].x() / MM_TO_COORD(ui->lable_test->width()))); - ui->First_Vertex_Y_Coordinate_Input_3->setText(QString::number(p[0].y() / MM_TO_COORD(ui->lable_test->height()))); - ui->First_X_Coordinate_First_Edge->setText(QString::number(p[1].x() / MM_TO_COORD(ui->lable_test->width()))); - ui->First_Y_Coordinate_First_Edge->setText(QString::number(p[1].y() / MM_TO_COORD(ui->lable_test->height()))); - ui->Second_X_Coordinate_First_Edge->setText(QString::number(p[2].x() / MM_TO_COORD(ui->lable_test->width()))); - ui->Second_Y_Coordinate_First_Edge->setText(QString::number(p[2].y() / MM_TO_COORD(ui->lable_test->height()))); - ui->Second_Vertex_X_Coordinate_Input_3->setText(QString::number(p[3].x() / MM_TO_COORD(ui->lable_test->width()))); - ui->Second_Vertex_Y_Coordinate_Input_3->setText(QString::number(p[3].y() / MM_TO_COORD(ui->lable_test->height()))); - ui->First_X_Coordinate_Second_Edge->setText(QString::number(p[4].x() / MM_TO_COORD(ui->lable_test->width()))); - ui->First_Y_Coordinate_Second_Edge->setText(QString::number(p[4].y() / MM_TO_COORD(ui->lable_test->height()))); - ui->Second_X_Coordinate_Second_Edge->setText(QString::number(p[5].x() / MM_TO_COORD(ui->lable_test->width()))); - ui->Second_Y_Coordinate_Second_Edge->setText(QString::number(p[5].y() / MM_TO_COORD(ui->lable_test->height()))); - ui->Third_Vertex_X_Coordinate_Input_3->setText(QString::number(p[6].x() / MM_TO_COORD(ui->lable_test->width()))); - ui->Third_Vertex_Y_Coordinate_Input_3->setText(QString::number(p[6].y() / MM_TO_COORD(ui->lable_test->height()))); - ui->First_X_Coordinate_Third_Edge->setText(QString::number(p[7].x() / MM_TO_COORD(ui->lable_test->width()))); - ui->First_Y_Coordinate_Third_Edge->setText(QString::number(p[7].y() / MM_TO_COORD(ui->lable_test->height()))); - ui->Second_X_Coordinate_Third_Edge->setText(QString::number(p[8].x() / MM_TO_COORD(ui->lable_test->width()))); - ui->Second_Y_Coordinate_Third_Edge->setText(QString::number(p[8].y() / MM_TO_COORD(ui->lable_test->height()))); - ui->Fourth_Vertex_X_Coordinate_Input_3->setText(QString::number(p[9].x() / MM_TO_COORD(ui->lable_test->width()))); - ui->Fourth_Vertex_Y_Coordinate_Input_3->setText(QString::number(p[9].y() / MM_TO_COORD(ui->lable_test->height()))); - ui->First_X_Coordinate_Fourth_Edge->setText(QString::number(p[10].x() / MM_TO_COORD(ui->lable_test->width()))); - ui->First_Y_Coordinate_Fourth_Edge->setText(QString::number(p[10].y() / MM_TO_COORD(ui->lable_test->height()))); - ui->Second_X_Coordinate_Fourth_Edge->setText(QString::number(p[11].x() / MM_TO_COORD(ui->lable_test->width()))); - ui->Second_Y_Coordinate_Fourth_Edge->setText(QString::number(p[11].y() / MM_TO_COORD(ui->lable_test->height()))); - ui->lable_test->Clear(); - } - else if (info.gradient == TensorCoonsPatch || info.gradient == TensorCoonsPatchParametric) - { - ui->First_X_Coordinate_First_Edge_3->setText(QString::number(p[0].x() / MM_TO_COORD(ui->lable_test->width()))); - ui->First_Y_Coordinate_First_Edge_3->setText(QString::number(p[0].y() / MM_TO_COORD(ui->lable_test->height()))); - ui->Second_X_Coordinate_First_Edge_3->setText(QString::number(p[1].x() / MM_TO_COORD(ui->lable_test->width()))); - ui->Second_Y_Coordinate_First_Edge_3->setText(QString::number(p[1].y() / MM_TO_COORD(ui->lable_test->height()))); - ui->Third_X_Coordinate_First_Edge_3->setText(QString::number(p[2].x()/ MM_TO_COORD(ui->lable_test->width()))); - ui->Third_Y_Coordinate_First_Edge_3->setText(QString::number(p[2].x()/ MM_TO_COORD(ui->lable_test->height()))); - ui->Fourth_X_Coordinate_First_Edge_3->setText(QString::number(p[3].x()/ MM_TO_COORD(ui->lable_test->width()))); - ui->Fourth_Y_Coordinate_First_Edge_3->setText(QString::number(p[3].x()/ MM_TO_COORD(ui->lable_test->height()))); - ui->First_X_Coordinate_Second_Edge_3->setText(QString::number(p[4].x() / MM_TO_COORD(ui->lable_test->width()))); - ui->First_Y_Coordinate_Second_Edge_3->setText(QString::number(p[4].y() / MM_TO_COORD(ui->lable_test->height()))); - ui->Second_X_Coordinate_Second_Edge_3->setText(QString::number(p[5].x() / MM_TO_COORD(ui->lable_test->width()))); - ui->Second_Y_Coordinate_Second_Edge_3->setText(QString::number(p[5].y() / MM_TO_COORD(ui->lable_test->height()))); - ui->Third_X_Coordinate_Second_Edge_3->setText(QString::number(p[6].x()/ MM_TO_COORD(ui->lable_test->width()))); - ui->Third_Y_Coordinate_Second_Edge_3->setText(QString::number(p[6].x()/ MM_TO_COORD(ui->lable_test->height()))); - ui->Fourth_X_Coordinate_Second_Edge_3->setText(QString::number(p[7].x()/ MM_TO_COORD(ui->lable_test->width()))); - ui->Fourth_Y_Coordinate_Second_Edge_3->setText(QString::number(p[7].x()/ MM_TO_COORD(ui->lable_test->height()))); - ui->First_X_Coordinate_Third_Edge_3->setText(QString::number(p[8].x() / MM_TO_COORD(ui->lable_test->width()))); - ui->First_Y_Coordinate_Third_Edge_3->setText(QString::number(p[8].y() / MM_TO_COORD(ui->lable_test->height()))); - ui->Second_X_Coordinate_Third_Edge_3->setText(QString::number(p[9].x() / MM_TO_COORD(ui->lable_test->width()))); - ui->Second_Y_Coordinate_Third_Edge_3->setText(QString::number(p[9].y() / MM_TO_COORD(ui->lable_test->height()))); - ui->Third_X_Coordinate_Third_Edge_3->setText(QString::number(p[10].x()/ MM_TO_COORD(ui->lable_test->width()))); - ui->Third_Y_Coordinate_Third_Edge_3->setText(QString::number(p[10].x()/ MM_TO_COORD(ui->lable_test->height()))); - ui->Fourth_X_Coordinate_Third_Edge_3->setText(QString::number(p[11].x()/ MM_TO_COORD(ui->lable_test->width()))); - ui->Fourth_Y_Coordinate_Third_Edge_3->setText(QString::number(p[11].x()/ MM_TO_COORD(ui->lable_test->height()))); - ui->First_X_Coordinate_Fourth_Edge_3->setText(QString::number(p[12].x() / MM_TO_COORD(ui->lable_test->width()))); - ui->First_Y_Coordinate_Fourth_Edge_3->setText(QString::number(p[12].y() / MM_TO_COORD(ui->lable_test->height()))); - ui->Second_X_Coordinate_Fourth_Edge_3->setText(QString::number(p[13].x() / MM_TO_COORD(ui->lable_test->width()))); - ui->Second_Y_Coordinate_Fourth_Edge_3->setText(QString::number(p[13].y() / MM_TO_COORD(ui->lable_test->height()))); - ui->Third_X_Coordinate_Fourth_Edge_3->setText(QString::number(p[14].x()/ MM_TO_COORD(ui->lable_test->width()))); - ui->Third_Y_Coordinate_Fourth_Edge_3->setText(QString::number(p[14].x()/ MM_TO_COORD(ui->lable_test->height()))); - ui->Fourth_X_Coordinate_Fourth_Edge_3->setText(QString::number(p[15].x()/ MM_TO_COORD(ui->lable_test->width()))); - ui->Fourth_Y_Coordinate_Fourth_Edge_3->setText(QString::number(p[15].x()/ MM_TO_COORD(ui->lable_test->height()))); - ui->lable_test->Clear(); - } -} diff --git a/Test/Applications/gradient/Gradient/mainwindow.h b/Test/Applications/gradient/Gradient/mainwindow.h index d7edfce592..ca548e2ae1 100644 --- a/Test/Applications/gradient/Gradient/mainwindow.h +++ b/Test/Applications/gradient/Gradient/mainwindow.h @@ -69,34 +69,95 @@ class CustomLabel : public QLabel public: CustomLabel(QWidget *parent = nullptr) : QLabel(parent) { - connect(this, &CustomLabel::mousePressed, this, &CustomLabel::onCheckPosition); + movable = false; + setMouseTracking(true); } ~CustomLabel() {} - std::vector GetPoints() const + void SetPoints(const std::vector& points) { - return m_points; + m_points = points; + } + + QPoint GetCheckPoint() const + { + return checkPoint; + } + + QPoint GetMovePoint() const + { + return movePoint; + } + + size_t GetIndex() const + { + return index; + } + + bool Movable() const + { + return movable; + } + + void ResetMovable() + { + if (movable) + { + movable = false; + } + else + { + movable = true; + } + } + + void setIndex(size_t _index) + { + index = _index; } void Clear() { m_points.clear(); } + + bool CheckPointArea() + { + for (int i = 0; i < m_points.size(); i++) + { + QRect rect(m_points[i].x() - 5, m_points[i].y() - 5, m_points[i].x() + 5, m_points[i].y() + 5); + if (rect.contains(checkPoint)) + { + index = i; + return true; + } + } + return false; + } + signals: - void mousePressed(QPoint point); + void mousePressed(); + void mouseMoved(); + protected: void mousePressEvent(QMouseEvent *event) override { - QPoint point = event->pos(); - emit mousePressed(point); + checkPoint = event->pos(); + emit mousePressed(); } -public slots: - void onCheckPosition(QPoint point) + + void mouseMoveEvent(QMouseEvent *event) override { - m_points.push_back(point); + movePoint = event->pos(); + emit mouseMoved(); } + private: + bool movable; + size_t index; + QPoint movePoint; + QPoint checkPoint; std::vector m_points; }; @@ -238,6 +299,7 @@ public: void InitializeColors(bool triangle); std::vector QColor2rgba(bool triangle); std::vector> QColor2rgbaMatrix(); + void setPoints(QImage *image); QImage img; QLabel *lable; std::vector points; @@ -245,6 +307,10 @@ public: private slots: + void on_label_test_clicked(); + + void on_label_test_mouse_move(); + void on_actionLinear_Gradient_triggered(); void on_actionRadial_Gradient_triggered(); @@ -263,8 +329,6 @@ private slots: void on_actionTensor_Coons_Patch_Parametric_triggered(); - void on_pushButton_2_clicked(); - private: Ui::MainWindow *ui; }; diff --git a/Test/Applications/gradient/Gradient/mainwindow.ui b/Test/Applications/gradient/Gradient/mainwindow.ui index a6ff2122c6..ae202b3f9d 100644 --- a/Test/Applications/gradient/Gradient/mainwindow.ui +++ b/Test/Applications/gradient/Gradient/mainwindow.ui @@ -52,7 +52,7 @@ - 3 + 4 @@ -2426,32 +2426,6 @@ Render Gradient - - - - 390 - 100 - 80 - 29 - - - - set from - - - - - - 300 - 80 - 288 - 20 - - - - Set the coordinates from the label and click - -