From 51c6fe496b2a81e795171d20da3d16f251bb0f50 Mon Sep 17 00:00:00 2001 From: K1rillProkhorov Date: Fri, 26 Apr 2024 19:40:08 +0300 Subject: [PATCH] Add parametrs input --- .../gradient/Gradient/mainwindow.cpp | 167 +++--- .../gradient/Gradient/mainwindow.h | 24 + .../gradient/Gradient/mainwindow.ui | 475 +++++++++++++++++- 3 files changed, 597 insertions(+), 69 deletions(-) diff --git a/Test/Applications/gradient/Gradient/mainwindow.cpp b/Test/Applications/gradient/Gradient/mainwindow.cpp index cc8336598b..2368436fef 100644 --- a/Test/Applications/gradient/Gradient/mainwindow.cpp +++ b/Test/Applications/gradient/Gradient/mainwindow.cpp @@ -134,7 +134,7 @@ void MainWindow::on_actionCoons_Patch_Parametric_triggered() ui->stackedWidget_2->setCurrentIndex(5); ui->statusbar->showMessage("Coons Patch Parametric"); info.gradient = CoonsPatchParametric; - info.gradient_type = c_BrushTypePathNewLinearGradient; + info.gradient_type = c_BrushTypeCurveGradient; } void MainWindow::on_actionTensor_Coons_Patch_Gradient_triggered() @@ -192,9 +192,17 @@ void MainWindow::on_pushButton_clicked() info.triangle[1].y = ui->Second_Vertex_Y_Coordinate_Input->text().toInt(); info.triangle[2].x = ui->Third_Vertex_X_Coordinate_Input->text().toInt(); info.triangle[2].y = ui->Third_Vertex_Y_Coordinate_Input->text().toInt(); + + if (info.gradient == TriangleParametric) + { + info.triangle_parametrs[0] = ui->First_Vertex_Parametr_Input_4->text().toFloat(); + info.triangle_parametrs[1] = ui->Second_Vertex_Parametr_Input_4->text().toFloat(); + info.triangle_parametrs[2] = ui->Third_Vertex_Parametr_Input_4->text().toFloat(); + } + info.ginfo = NSStructures::GInfoConstructor::get_triangle(info.triangle, {{255, 0, 0}, {0, 255, 0}, {0, 0, 255}}, - {0.f, 0.9f, 1.f}, + info.triangle_parametrs, info.gradient == TriangleParametric); points = {}; for (auto p : info.triangle) @@ -204,33 +212,51 @@ void MainWindow::on_pushButton_clicked() } else if (info.gradient == CoonsPatch || info.gradient == CoonsPatchParametric) { - info.curve[0].x = MM_TO_COORD(ui->lable_test->width()) * ui->First_Vertex_X_Coordinate_Input_3->text().toInt(); - info.curve[0].y = MM_TO_COORD(ui->lable_test->height()) * ui->First_Vertex_Y_Coordinate_Input_3->text().toInt(); - info.curve[1].x = MM_TO_COORD(ui->lable_test->width()) * ui->First_X_Coordinate_First_Edge->text().toInt(); - info.curve[1].y = MM_TO_COORD(ui->lable_test->height()) * ui->First_Y_Coordinate_First_Edge->text().toInt(); - info.curve[2].x = MM_TO_COORD(ui->lable_test->width()) * ui->Second_X_Coordinate_First_Edge->text().toInt(); - info.curve[2].y = MM_TO_COORD(ui->lable_test->height()) * ui->Second_Y_Coordinate_First_Edge->text().toInt(); - info.curve[3].x = MM_TO_COORD(ui->lable_test->width()) * ui->Second_Vertex_X_Coordinate_Input_3->text().toInt(); - info.curve[3].y = MM_TO_COORD(ui->lable_test->height()) * ui->Second_Vertex_Y_Coordinate_Input_3->text().toInt(); - info.curve[4].x = MM_TO_COORD(ui->lable_test->width()) * ui->First_X_Coordinate_Second_Edge->text().toInt(); - info.curve[4].y = MM_TO_COORD(ui->lable_test->height()) * ui->First_Y_Coordinate_Second_Edge->text().toInt(); - info.curve[5].x = MM_TO_COORD(ui->lable_test->width()) * ui->Second_X_Coordinate_Second_Edge->text().toInt(); - info.curve[5].y = MM_TO_COORD(ui->lable_test->height()) * ui->Second_Y_Coordinate_Second_Edge->text().toInt(); - info.curve[6].x = MM_TO_COORD(ui->lable_test->width()) * ui->Third_Vertex_X_Coordinate_Input_3->text().toInt(); - info.curve[6].y = MM_TO_COORD(ui->lable_test->height()) * ui->Third_Vertex_Y_Coordinate_Input_3->text().toInt(); - info.curve[7].x = MM_TO_COORD(ui->lable_test->width()) * ui->First_X_Coordinate_Third_Edge->text().toInt(); - info.curve[7].y = MM_TO_COORD(ui->lable_test->height()) * ui->First_Y_Coordinate_Third_Edge->text().toInt(); - info.curve[8].x = MM_TO_COORD(ui->lable_test->width()) * ui->Second_X_Coordinate_Third_Edge->text().toInt(); - info.curve[8].y = MM_TO_COORD(ui->lable_test->height()) * ui->Second_Y_Coordinate_Third_Edge->text().toInt(); - info.curve[9].x = MM_TO_COORD(ui->lable_test->width()) * ui->Fourth_Vertex_X_Coordinate_Input_3->text().toInt(); - info.curve[9].y = MM_TO_COORD(ui->lable_test->height()) * ui->Fourth_Vertex_Y_Coordinate_Input_3->text().toInt(); - info.curve[10].x = MM_TO_COORD(ui->lable_test->width()) * ui->First_X_Coordinate_Fourth_Edge->text().toInt(); - info.curve[10].y = MM_TO_COORD(ui->lable_test->height()) * ui->First_Y_Coordinate_Fourth_Edge->text().toInt(); - info.curve[11].x = MM_TO_COORD(ui->lable_test->width()) * ui->Second_X_Coordinate_Fourth_Edge->text().toInt(); - info.curve[11].y = MM_TO_COORD(ui->lable_test->height()) * ui->Second_Y_Coordinate_Fourth_Edge->text().toInt(); + info.curve[0].x = ui->First_Vertex_X_Coordinate_Input_3->text().toInt(); + info.curve[0].y = ui->First_Vertex_Y_Coordinate_Input_3->text().toInt(); + info.curve[1].x = ui->First_X_Coordinate_First_Edge->text().toInt(); + info.curve[1].y = ui->First_Y_Coordinate_First_Edge->text().toInt(); + info.curve[2].x = ui->Second_X_Coordinate_First_Edge->text().toInt(); + info.curve[2].y = ui->Second_Y_Coordinate_First_Edge->text().toInt(); + info.curve[3].x = ui->Second_Vertex_X_Coordinate_Input_3->text().toInt(); + info.curve[3].y = ui->Second_Vertex_Y_Coordinate_Input_3->text().toInt(); + info.curve[4].x = ui->First_X_Coordinate_Second_Edge->text().toInt(); + info.curve[4].y = ui->First_Y_Coordinate_Second_Edge->text().toInt(); + info.curve[5].x = ui->Second_X_Coordinate_Second_Edge->text().toInt(); + info.curve[5].y = ui->Second_Y_Coordinate_Second_Edge->text().toInt(); + info.curve[6].x = ui->Third_Vertex_X_Coordinate_Input_3->text().toInt(); + info.curve[6].y = ui->Third_Vertex_Y_Coordinate_Input_3->text().toInt(); + info.curve[7].x = ui->First_X_Coordinate_Third_Edge->text().toInt(); + info.curve[7].y = ui->First_Y_Coordinate_Third_Edge->text().toInt(); + info.curve[8].x = ui->Second_X_Coordinate_Third_Edge->text().toInt(); + info.curve[8].y = ui->Second_Y_Coordinate_Third_Edge->text().toInt(); + info.curve[9].x = ui->Fourth_Vertex_X_Coordinate_Input_3->text().toInt(); + info.curve[9].y = ui->Fourth_Vertex_Y_Coordinate_Input_3->text().toInt(); + info.curve[10].x = ui->First_X_Coordinate_Fourth_Edge->text().toInt(); + info.curve[10].y = ui->First_Y_Coordinate_Fourth_Edge->text().toInt(); + info.curve[11].x = ui->Second_X_Coordinate_Fourth_Edge->text().toInt(); + info.curve[11].y = ui->Second_Y_Coordinate_Fourth_Edge->text().toInt(); + + if (info.gradient == CoonsPatchParametric) + { + info.curve_parametrs[0] = ui->First_Vertex_Parametr_Input_2->text().toFloat(); + info.curve_parametrs[1] = ui->Second_Vertex_Parametr_Input_2->text().toFloat(); + info.curve_parametrs[2] = ui->Third_Vertex_Parametr_Input_2->text().toFloat(); + info.curve_parametrs[3] = ui->Fourth_Vertex_Parametr_Input_2->text().toFloat(); + } + + if (info.gradient == CoonsPatch) + { + for(int j = 0; j < 12; j++) + { + info.curve[j].x *= MM_TO_COORD(ui->lable_test->width()); + info.curve[j].y *= MM_TO_COORD(ui->lable_test->height()); + } + } + info.ginfo = NSStructures::GInfoConstructor::get_curve( info.curve, - {0.1f, 0.5f, 0.9f, 0.2f}, + info.curve_parametrs, {{0, 0, 255}, {255, 0, 255}, {255, 0, 0}, {0, 255, 0}}, info.gradient == CoonsPatchParametric @@ -238,41 +264,62 @@ void MainWindow::on_pushButton_clicked() } else if (info.gradient == TensorCoonsPatch || info.gradient == TensorCoonsPatchParametric) { - info.tensorcurve[0][0].x = MM_TO_COORD(ui->lable_test->width()) * ui->First_X_Coordinate_First_Edge_3->text().toInt(); - info.tensorcurve[0][0].y = MM_TO_COORD(ui->lable_test->height()) * ui->First_Y_Coordinate_First_Edge_3->text().toInt(); - info.tensorcurve[0][1].x = MM_TO_COORD(ui->lable_test->width()) * ui->Second_X_Coordinate_First_Edge_3->text().toInt(); - info.tensorcurve[0][1].y = MM_TO_COORD(ui->lable_test->height()) * ui->Second_Y_Coordinate_First_Edge_3->text().toInt(); - info.tensorcurve[0][2].x = MM_TO_COORD(ui->lable_test->width()) * ui->Third_X_Coordinate_First_Edge_3->text().toInt(); - info.tensorcurve[0][2].y = MM_TO_COORD(ui->lable_test->height()) * ui->Third_Y_Coordinate_First_Edge_3->text().toInt(); - info.tensorcurve[0][3].x = MM_TO_COORD(ui->lable_test->width()) * ui->Fourth_X_Coordinate_First_Edge_3->text().toInt(); - info.tensorcurve[0][3].y = MM_TO_COORD(ui->lable_test->height()) * ui->Fourth_Y_Coordinate_First_Edge_3->text().toInt(); - info.tensorcurve[1][0].x = MM_TO_COORD(ui->lable_test->width()) * ui->First_X_Coordinate_Second_Edge_3->text().toInt(); - info.tensorcurve[1][0].y = MM_TO_COORD(ui->lable_test->height()) * ui->First_Y_Coordinate_Second_Edge_3->text().toInt(); - info.tensorcurve[1][1].x = MM_TO_COORD(ui->lable_test->width()) * ui->Second_X_Coordinate_Second_Edge_3->text().toInt(); - info.tensorcurve[1][1].y = MM_TO_COORD(ui->lable_test->height()) * ui->Second_Y_Coordinate_Second_Edge_3->text().toInt(); - info.tensorcurve[1][2].x = MM_TO_COORD(ui->lable_test->width()) * ui->Third_X_Coordinate_Second_Edge_3->text().toInt(); - info.tensorcurve[1][2].y = MM_TO_COORD(ui->lable_test->height()) * ui->Third_Y_Coordinate_Second_Edge_3->text().toInt(); - info.tensorcurve[1][3].x = MM_TO_COORD(ui->lable_test->width()) * ui->Fourth_X_Coordinate_Second_Edge_3->text().toInt(); - info.tensorcurve[1][3].y = MM_TO_COORD(ui->lable_test->height()) * ui->Fourth_Y_Coordinate_Second_Edge_3->text().toInt(); - info.tensorcurve[2][0].x = MM_TO_COORD(ui->lable_test->width()) * ui->First_X_Coordinate_Third_Edge_3->text().toInt(); - info.tensorcurve[2][0].y = MM_TO_COORD(ui->lable_test->height()) * ui->First_Y_Coordinate_Third_Edge_3->text().toInt(); - info.tensorcurve[2][1].x = MM_TO_COORD(ui->lable_test->width()) * ui->Second_Y_Coordinate_Third_Edge_3->text().toInt(); - info.tensorcurve[2][1].y = MM_TO_COORD(ui->lable_test->height()) * ui->Second_Y_Coordinate_Third_Edge_3->text().toInt(); - info.tensorcurve[2][2].x = MM_TO_COORD(ui->lable_test->width()) * ui->Third_X_Coordinate_Third_Edge_3->text().toInt(); - info.tensorcurve[2][2].y = MM_TO_COORD(ui->lable_test->height()) * ui->Third_Y_Coordinate_Third_Edge_3->text().toInt(); - info.tensorcurve[2][3].x = MM_TO_COORD(ui->lable_test->width()) * ui->Fourth_X_Coordinate_Third_Edge_3->text().toInt(); - info.tensorcurve[2][3].y = MM_TO_COORD(ui->lable_test->height()) * ui->Fourth_Y_Coordinate_Third_Edge_3->text().toInt(); - info.tensorcurve[3][0].x = MM_TO_COORD(ui->lable_test->width()) * ui->First_X_Coordinate_Fourth_Edge_3->text().toInt(); - info.tensorcurve[3][0].y = MM_TO_COORD(ui->lable_test->height()) * ui->First_Y_Coordinate_Fourth_Edge_3->text().toInt(); - info.tensorcurve[3][1].x = MM_TO_COORD(ui->lable_test->width()) * ui->Second_X_Coordinate_Fourth_Edge_3->text().toInt(); - info.tensorcurve[3][1].y = MM_TO_COORD(ui->lable_test->height()) * ui->Second_Y_Coordinate_Fourth_Edge_3->text().toInt(); - info.tensorcurve[3][2].x = MM_TO_COORD(ui->lable_test->width()) * ui->Third_X_Coordinate_Fourth_Edge_3->text().toInt(); - info.tensorcurve[3][2].y = MM_TO_COORD(ui->lable_test->height()) * ui->Third_Y_Coordinate_Fourth_Edge_3->text().toInt(); - info.tensorcurve[3][3].x = MM_TO_COORD(ui->lable_test->width()) * ui->Fourth_X_Coordinate_Fourth_Edge_3->text().toInt(); - info.tensorcurve[3][3].y = MM_TO_COORD(ui->lable_test->height()) * ui->Fourth_Y_Coordinate_Fourth_Edge_3->text().toInt(); + info.tensorcurve[0][0].x = ui->First_X_Coordinate_First_Edge_3->text().toInt(); + info.tensorcurve[0][0].y = ui->First_Y_Coordinate_First_Edge_3->text().toInt(); + info.tensorcurve[0][1].x = ui->Second_X_Coordinate_First_Edge_3->text().toInt(); + info.tensorcurve[0][1].y = ui->Second_Y_Coordinate_First_Edge_3->text().toInt(); + info.tensorcurve[0][2].x = ui->Third_X_Coordinate_First_Edge_3->text().toInt(); + info.tensorcurve[0][2].y = ui->Third_Y_Coordinate_First_Edge_3->text().toInt(); + info.tensorcurve[0][3].x = ui->Fourth_X_Coordinate_First_Edge_3->text().toInt(); + info.tensorcurve[0][3].y = ui->Fourth_Y_Coordinate_First_Edge_3->text().toInt(); + info.tensorcurve[1][0].x = ui->First_X_Coordinate_Second_Edge_3->text().toInt(); + info.tensorcurve[1][0].y = ui->First_Y_Coordinate_Second_Edge_3->text().toInt(); + info.tensorcurve[1][1].x = ui->Second_X_Coordinate_Second_Edge_3->text().toInt(); + info.tensorcurve[1][1].y = ui->Second_Y_Coordinate_Second_Edge_3->text().toInt(); + info.tensorcurve[1][2].x = ui->Third_X_Coordinate_Second_Edge_3->text().toInt(); + info.tensorcurve[1][2].y = ui->Third_Y_Coordinate_Second_Edge_3->text().toInt(); + info.tensorcurve[1][3].x = ui->Fourth_X_Coordinate_Second_Edge_3->text().toInt(); + info.tensorcurve[1][3].y = ui->Fourth_Y_Coordinate_Second_Edge_3->text().toInt(); + info.tensorcurve[2][0].x = ui->First_X_Coordinate_Third_Edge_3->text().toInt(); + info.tensorcurve[2][0].y = ui->First_Y_Coordinate_Third_Edge_3->text().toInt(); + info.tensorcurve[2][1].x = ui->Second_Y_Coordinate_Third_Edge_3->text().toInt(); + info.tensorcurve[2][1].y = ui->Second_Y_Coordinate_Third_Edge_3->text().toInt(); + info.tensorcurve[2][2].x = ui->Third_X_Coordinate_Third_Edge_3->text().toInt(); + info.tensorcurve[2][2].y = ui->Third_Y_Coordinate_Third_Edge_3->text().toInt(); + info.tensorcurve[2][3].x = ui->Fourth_X_Coordinate_Third_Edge_3->text().toInt(); + info.tensorcurve[2][3].y = ui->Fourth_Y_Coordinate_Third_Edge_3->text().toInt(); + info.tensorcurve[3][0].x = ui->First_X_Coordinate_Fourth_Edge_3->text().toInt(); + info.tensorcurve[3][0].y = ui->First_Y_Coordinate_Fourth_Edge_3->text().toInt(); + info.tensorcurve[3][1].x = ui->Second_X_Coordinate_Fourth_Edge_3->text().toInt(); + info.tensorcurve[3][1].y = ui->Second_Y_Coordinate_Fourth_Edge_3->text().toInt(); + info.tensorcurve[3][2].x = ui->Third_X_Coordinate_Fourth_Edge_3->text().toInt(); + info.tensorcurve[3][2].y = ui->Third_Y_Coordinate_Fourth_Edge_3->text().toInt(); + info.tensorcurve[3][3].x = ui->Fourth_X_Coordinate_Fourth_Edge_3->text().toInt(); + info.tensorcurve[3][3].y = ui->Fourth_Y_Coordinate_Fourth_Edge_3->text().toInt(); + + if (info.gradient == TensorCoonsPatchParametric) + { + info.tensor_curve_parametrs[0][0] = ui->First_Vertex_Parametr_Input_3->text().toFloat(); + info.tensor_curve_parametrs[0][1] = ui->Second_Vertex_Parametr_Input_3->text().toFloat(); + info.tensor_curve_parametrs[1][0] = ui->Third_Vertex_Parametr_Input_3->text().toFloat(); + info.tensor_curve_parametrs[1][1] = ui->Fourth_Vertex_Parametr_Input_3->text().toFloat(); + } + + if (info.gradient == TensorCoonsPatch) + { + for (int i = 0; i < 4; i++) + { + for (int j = 0; j < 4; j++) + { + info.tensorcurve[i][j].x *= MM_TO_COORD(ui->lable_test->width()); + info.tensorcurve[i][j].y *= MM_TO_COORD(ui->lable_test->height()); + } + } + } + info.ginfo = NSStructures::GInfoConstructor::get_tensor_curve( info.tensorcurve, - {{0, 0.5}, {1, 0.5}}, + info.tensor_curve_parametrs, {{{0, 0, 255}, {255, 0, 255}}, {{255, 0, 0}, {0, 255, 0}}}, info.gradient == TensorCoonsPatchParametric ); diff --git a/Test/Applications/gradient/Gradient/mainwindow.h b/Test/Applications/gradient/Gradient/mainwindow.h index c49b016d88..7d39bd6d71 100644 --- a/Test/Applications/gradient/Gradient/mainwindow.h +++ b/Test/Applications/gradient/Gradient/mainwindow.h @@ -41,6 +41,27 @@ public slots: } }; +class CustomParametrLineEdit : public QLineEdit +{ + Q_OBJECT +public: + CustomParametrLineEdit(QWidget *parent = nullptr) : QLineEdit(parent) + { + connect(this, &QLineEdit::editingFinished, this, &CustomParametrLineEdit::onEditingFinished); + } + ~CustomParametrLineEdit() {} +public slots: + void onEditingFinished() + { + if (this->text() == "") + this->setText(this->placeholderText()); + if (this->text().toDouble() < 0) + this->setText("0"); + if (this->text().toDouble() > 1) + this->setText("1"); + } +}; + class CustomLabel : public QLabel { Q_OBJECT @@ -134,6 +155,9 @@ struct Info {{150, 250}, {170, 230}, {170, 170}, {50, 150}}, {{350, 250}, {230, 230}, {230, 170}, {150, 250}}, {{300, 300}, {250, 250}, {350, 150}, {300, 100}}}; + std::vector triangle_parametrs = {0.f, 0.5f, 1.f}; + std::vector curve_parametrs = {0.f, 0.3f, 1.f, 0.6f}; + std::vector> tensor_curve_parametrs = {{0.f, 0.3f}, {1.f, 0.6f}}; NSStructures::GradientInfo ginfo; int gradient_type; diff --git a/Test/Applications/gradient/Gradient/mainwindow.ui b/Test/Applications/gradient/Gradient/mainwindow.ui index 509912eddb..923f7d111a 100644 --- a/Test/Applications/gradient/Gradient/mainwindow.ui +++ b/Test/Applications/gradient/Gradient/mainwindow.ui @@ -117,7 +117,7 @@ - 4 + 3 @@ -2481,8 +2481,8 @@ - 360 - 60 + 370 + 40 117 29 @@ -2494,8 +2494,8 @@ - 380 - 110 + 390 + 100 80 29 @@ -2504,6 +2504,19 @@ set from + + + + 300 + 80 + 288 + 20 + + + + Set the coordinates from the label and click + + @@ -2515,7 +2528,7 @@ - 6 + 3 @@ -2646,7 +2659,134 @@ - + + + + + 10 + 10 + 469 + 20 + + + + A parametric gradient differs in that the colors at the corners are set by + + + + + + 10 + 30 + 271 + 20 + + + + the initial parameters (value from 0 to 1). + + + + + + 10 + 50 + 470 + 130 + + + + Set Parametrs + + + + + 10 + 30 + 135 + 20 + + + + First Vertex Parametr + + + + + + 10 + 50 + 113 + 28 + + + + 0 + + + 0 + + + + + + 270 + 30 + 157 + 20 + + + + Second Vertex Parametr + + + + + + 270 + 50 + 113 + 28 + + + + 0.5 + + + 0.5 + + + + + + 10 + 80 + 157 + 20 + + + + Third Vertex Parametr + + + + + + 10 + 100 + 113 + 28 + + + + 1 + + + 1 + + + + @@ -2753,7 +2893,163 @@ - + + + + + 10 + 10 + 469 + 20 + + + + A parametric gradient differs in that the colors at the corners are set by + + + + + + 10 + 30 + 271 + 20 + + + + the initial parameters (value from 0 to 1). + + + + + + 10 + 50 + 470 + 130 + + + + Set Parametrs + + + + + 10 + 30 + 135 + 20 + + + + First Vertex Parametr + + + + + + 10 + 50 + 113 + 28 + + + + 0 + + + 0 + + + + + + 270 + 30 + 157 + 20 + + + + Second Vertex Parametr + + + + + + 270 + 50 + 113 + 28 + + + + 0.3 + + + 0.3 + + + + + + 10 + 80 + 157 + 20 + + + + Third Vertex Parametr + + + + + + 10 + 100 + 113 + 28 + + + + 0.6 + + + 0.6 + + + + + + 270 + 80 + 157 + 20 + + + + Fourth Vertex Parametr + + + + + + 270 + 100 + 113 + 28 + + + + 1 + + + 1 + + + + @@ -2808,7 +3104,163 @@ - + + + + + 10 + 10 + 469 + 20 + + + + A parametric gradient differs in that the colors at the corners are set by + + + + + + 10 + 30 + 271 + 20 + + + + the initial parameters (value from 0 to 1). + + + + + + 10 + 50 + 470 + 130 + + + + Set Parametrs + + + + + 10 + 30 + 135 + 20 + + + + First Vertex Parametr + + + + + + 10 + 50 + 113 + 28 + + + + 0 + + + 0 + + + + + + 270 + 30 + 157 + 20 + + + + Second Vertex Parametr + + + + + + 270 + 50 + 113 + 28 + + + + 0.3 + + + 0.3 + + + + + + 10 + 80 + 157 + 20 + + + + Third Vertex Parametr + + + + + + 10 + 100 + 113 + 28 + + + + 0.6 + + + 0.6 + + + + + + 270 + 80 + 157 + 20 + + + + Fourth Vertex Parametr + + + + + + 270 + 100 + 113 + 28 + + + + 1 + + + 1 + + + + @@ -2911,6 +3363,11 @@ QLabel
mainwindow.h
+ + CustomParametrLineEdit + QLineEdit +
mainwindow.h
+