Add MovablePoints on Label

This commit is contained in:
K1rillProkhorov
2024-05-13 11:17:30 +03:00
parent 63c9185fd2
commit fb12bfa57f
3 changed files with 378 additions and 133 deletions

View File

@ -12,6 +12,7 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWi
ui->lable_test->setStyleSheet("QLabel { background-color : white;}"); ui->lable_test->setStyleSheet("QLabel { background-color : white;}");
on_actionLinear_Gradient_triggered(); on_actionLinear_Gradient_triggered();
ui->Rainbow_Colorspace_Radio_Button->setChecked(true); ui->Rainbow_Colorspace_Radio_Button->setChecked(true);
connect(ui->lable_test, SIGNAL(mousePressed()), this, SLOT(on_label_test_clicked()));
} }
MainWindow::~MainWindow() MainWindow::~MainWindow()
@ -223,6 +224,306 @@ std::vector<std::vector<agg::rgba8>> MainWindow::QColor2rgbaMatrix()
return colors; 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<QPoint> 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<NSStructures::Point> 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<NSStructures::Point> 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() void MainWindow::on_pushButton_clicked()
{ {
points = {{0, 0}, 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()); 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->setPixmap(QPixmap::fromImage(pm));
ui->lable_test->setScaledContents(true); ui->lable_test->setScaledContents(true);
} }
void MainWindow::on_pushButton_2_clicked()
{
std::vector<QPoint> 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();
}
}

View File

@ -69,34 +69,95 @@ class CustomLabel : public QLabel
public: public:
CustomLabel(QWidget *parent = nullptr) : QLabel(parent) CustomLabel(QWidget *parent = nullptr) : QLabel(parent)
{ {
connect(this, &CustomLabel::mousePressed, this, &CustomLabel::onCheckPosition); movable = false;
setMouseTracking(true);
} }
~CustomLabel() {} ~CustomLabel() {}
std::vector<QPoint> GetPoints() const void SetPoints(const std::vector<QPoint>& 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() void Clear()
{ {
m_points.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: signals:
void mousePressed(QPoint point); void mousePressed();
void mouseMoved();
protected: protected:
void mousePressEvent(QMouseEvent *event) override void mousePressEvent(QMouseEvent *event) override
{ {
QPoint point = event->pos(); checkPoint = event->pos();
emit mousePressed(point); emit mousePressed();
} }
public slots:
void onCheckPosition(QPoint point) void mouseMoveEvent(QMouseEvent *event) override
{ {
m_points.push_back(point); movePoint = event->pos();
emit mouseMoved();
} }
private: private:
bool movable;
size_t index;
QPoint movePoint;
QPoint checkPoint;
std::vector<QPoint> m_points; std::vector<QPoint> m_points;
}; };
@ -238,6 +299,7 @@ public:
void InitializeColors(bool triangle); void InitializeColors(bool triangle);
std::vector<agg::rgba8> QColor2rgba(bool triangle); std::vector<agg::rgba8> QColor2rgba(bool triangle);
std::vector<std::vector<agg::rgba8>> QColor2rgbaMatrix(); std::vector<std::vector<agg::rgba8>> QColor2rgbaMatrix();
void setPoints(QImage *image);
QImage img; QImage img;
QLabel *lable; QLabel *lable;
std::vector<Point> points; std::vector<Point> points;
@ -245,6 +307,10 @@ public:
private slots: private slots:
void on_label_test_clicked();
void on_label_test_mouse_move();
void on_actionLinear_Gradient_triggered(); void on_actionLinear_Gradient_triggered();
void on_actionRadial_Gradient_triggered(); void on_actionRadial_Gradient_triggered();
@ -263,8 +329,6 @@ private slots:
void on_actionTensor_Coons_Patch_Parametric_triggered(); void on_actionTensor_Coons_Patch_Parametric_triggered();
void on_pushButton_2_clicked();
private: private:
Ui::MainWindow *ui; Ui::MainWindow *ui;
}; };

View File

@ -52,7 +52,7 @@
</rect> </rect>
</property> </property>
<property name="currentIndex"> <property name="currentIndex">
<number>3</number> <number>4</number>
</property> </property>
<widget class="QWidget" name="Linear_Page"> <widget class="QWidget" name="Linear_Page">
<widget class="QGroupBox" name="groupBox"> <widget class="QGroupBox" name="groupBox">
@ -2426,32 +2426,6 @@
<string>Render Gradient</string> <string>Render Gradient</string>
</property> </property>
</widget> </widget>
<widget class="QPushButton" name="pushButton_2">
<property name="geometry">
<rect>
<x>390</x>
<y>100</y>
<width>80</width>
<height>29</height>
</rect>
</property>
<property name="text">
<string>set from</string>
</property>
</widget>
<widget class="QLabel" name="label_42">
<property name="geometry">
<rect>
<x>300</x>
<y>80</y>
<width>288</width>
<height>20</height>
</rect>
</property>
<property name="text">
<string>Set the coordinates from the label and click</string>
</property>
</widget>
<widget class="QStackedWidget" name="stackedWidget_3"> <widget class="QStackedWidget" name="stackedWidget_3">
<property name="geometry"> <property name="geometry">
<rect> <rect>