Add default parametrs and new gradient types

This commit is contained in:
K1rillProkhorov
2024-04-10 01:18:40 +03:00
parent 29afb2aed9
commit 3e4c531538
4 changed files with 2775 additions and 292 deletions

View File

@ -468,13 +468,13 @@ namespace NSStructures
{
GradientInfo ginfo;
ginfo.shading.triangle = points;
ginfo.shading.f_type = ShadingInfo::UseNew;
ginfo.shading.function = ColorFunction<agg::rgba8>(256, t0, t1);
ginfo.continue_shading_f = false;
ginfo.continue_shading_b = false;
if (parametric)
{
ginfo.shading.triangle_parameters = params;
ginfo.shading.f_type = ShadingInfo::UseNew;
ginfo.shading.shading_type = ShadingInfo::Parametric;
}
else
@ -513,7 +513,10 @@ namespace NSStructures
ginfo.shading.patch[2][0] = curve_points[10];
ginfo.shading.patch[1][0] = curve_points[11];
ginfo.shading.f_type = ShadingInfo::UseNew;
ginfo.shading.function = ColorFunction<agg::rgba8>(256, t0, t1);
ginfo.continue_shading_f = false;
ginfo.continue_shading_b = false;
if (parametric)
{
@ -522,11 +525,7 @@ namespace NSStructures
ginfo.shading.patch_parameters[0][1] = curve_parametrs[1];
ginfo.shading.patch_parameters[1][0] = curve_parametrs[3];
ginfo.shading.patch_parameters[1][1] = curve_parametrs[2];
ginfo.shading.f_type = ShadingInfo::UseNew;
ginfo.shading.function = ColorFunction<agg::rgba8>(256, t0, t1);
ginfo.shading.shading_type = ShadingInfo::Parametric;
ginfo.continue_shading_f = false;
ginfo.continue_shading_b = false;
}
else
{
@ -549,14 +548,15 @@ namespace NSStructures
ginfo.shading.patch = curve_poits;
ginfo.shading.f_type = ShadingInfo::UseNew;
ginfo.shading.function = ColorFunction<agg::rgba8>(256, t0, t1);
ginfo.continue_shading_f = false;
ginfo.continue_shading_b = false;
if (parametric)
{
ginfo.shading.patch_parameters = curve_parametrs;
ginfo.shading.f_type = ShadingInfo::UseNew;
ginfo.shading.function = ColorFunction<agg::rgba8>(256, t0, t1);
ginfo.shading.shading_type = ShadingInfo::Parametric;
ginfo.continue_shading_f = false;
ginfo.continue_shading_b = false;
}
else
{

View File

@ -10,9 +10,11 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWi
{
ui->setupUi(this);
ui->lable_test->setStyleSheet("QLabel { background-color : white;}");
points = {{0, 0}, {500, 0}, {500, 500}, {0, 500}};
ui->stackedWidget->setCurrentIndex(0);
ui->stackedWidget_2->setCurrentIndex(0);
ui->statusbar->showMessage("Linear");
ui->Rainbow_Colorspace_Radio_Button->setChecked(true);
info.colorspace = Rainbow;
}
MainWindow::~MainWindow()
@ -86,35 +88,84 @@ QImage GenerateImg(std::vector<Point> &points, Info &info, const int& w, const i
return img;
}
bool parametric = false;
void MainWindow::on_actionLinear_Gradient_triggered()
{
ui->stackedWidget->setCurrentIndex(0);
ui->stackedWidget_2->setCurrentIndex(0);
ui->statusbar->showMessage("Linear");
info.gradient = Linear;
info.gradient_type = c_BrushTypePathNewLinearGradient;
points = {{0, 0}, {500, 0}, {500, 500}, {0, 500}};
}
void MainWindow::on_actionRadial_Gradient_triggered()
{
ui->stackedWidget->setCurrentIndex(1);
ui->stackedWidget_2->setCurrentIndex(1);
ui->statusbar->showMessage("Radial");
info.gradient = Radial;
info.gradient_type = c_BrushTypePathRadialGradient;
points = {{0, 0}, {500, 0}, {500, 500}, {0, 500}};
}
void MainWindow::on_actionTriangle_Gradient_triggered()
{
ui->stackedWidget->setCurrentIndex(2);
ui->stackedWidget_2->setCurrentIndex(2);
ui->statusbar->showMessage("Triangle");
info.gradient = Triangle;
info.gradient_type = c_BrushTypeTriagnleMeshGradient;
points = {{0, 0}, {500, 0}, {500, 500}, {0, 500}};
}
void MainWindow::on_actionTriangle_Parametric_Gradient_triggered()
{
ui->stackedWidget->setCurrentIndex(3);
ui->stackedWidget->setCurrentIndex(2);
ui->stackedWidget_2->setCurrentIndex(3);
ui->statusbar->showMessage("Triangle Parametric");
info.gradient = TriangleParametric;
info.gradient_type = c_BrushTypeTriagnleMeshGradient;
parametric = true;
points = {{0, 0}, {500, 0}, {500, 500}, {0, 500}};
}
void MainWindow::on_actionCoons_Patch_Gradient_triggered()
{
ui->stackedWidget->setCurrentIndex(3);
ui->stackedWidget_2->setCurrentIndex(4);
ui->statusbar->showMessage("Coons Patch");
info.gradient = CoonsPatch;
info.gradient_type = c_BrushTypePathNewLinearGradient;
points = {{0, 0}, {500, 0}, {500, 500}, {0, 500}};
}
void MainWindow::on_actionCoons_Patch_Parametric_triggered()
{
ui->stackedWidget->setCurrentIndex(3);
ui->stackedWidget_2->setCurrentIndex(5);
ui->statusbar->showMessage("Coons Patch Parametric");
info.gradient = CoonsPatchParametric;
info.gradient_type = c_BrushTypeCurveGradient;
points = {{0, 0}, {500, 0}, {500, 500}, {0, 500}};
}
void MainWindow::on_actionTensor_Coons_Patch_Gradient_triggered()
{
ui->stackedWidget->setCurrentIndex(4);
ui->stackedWidget_2->setCurrentIndex(6);
ui->statusbar->showMessage("Tensor Coons Patch");
info.gradient = TensorCoonsPatch;
info.gradient_type = c_BrushTypePathNewLinearGradient;
points = {{0, 0}, {500, 0}, {500, 500}, {0, 500}};
}
void MainWindow::on_actionTensor_Coons_Patch_Parametric_triggered()
{
ui->stackedWidget->setCurrentIndex(4);
ui->stackedWidget_2->setCurrentIndex(7);
ui->statusbar->showMessage("Tensor Coons Patch Parametric");
info.gradient = TensorCoonsPatchParametric;
info.gradient_type = c_BrushTypeTensorCurveGradient;
points = {{0, 0}, {500, 0}, {500, 500}, {0, 500}};
}
void MainWindow::on_BAW_Colorspace_Radio_Button_clicked()
@ -138,7 +189,7 @@ void MainWindow::on_Rainbow_Colorspace_Radio_Button_clicked()
void MainWindow::on_pushButton_clicked()
{
if (info.gradient_type == c_BrushTypePathNewLinearGradient)
if (info.gradient == Linear)
{
if (ui->First_X_Coordinate_Input->text() == "")
{
@ -166,7 +217,7 @@ void MainWindow::on_pushButton_clicked()
info.p1.y = ui->Second_Y_Coordinate_Input->text().toInt();
info.ginfo = NSStructures::GInfoConstructor::get_linear(info.p0, info.p1, 0, 1, info.cont_b, info.cont_f);
}
else if (info.gradient_type == c_BrushTypePathRadialGradient)
else if (info.gradient == Radial)
{
if (ui->First_Center_X_Coordinate_Input->text() == "")
{
@ -206,7 +257,7 @@ void MainWindow::on_pushButton_clicked()
info.r1 = ui->Second_Radius_Input->text().toInt();
info.ginfo = NSStructures::GInfoConstructor::get_radial(info.c0, info.c1, info.r0, info.r1, 0, 1, info.cont_b, info.cont_f);
}
else if (info.gradient_type == c_BrushTypeTriagnleMeshGradient && !parametric)
else if (info.gradient == Triangle || info.gradient == TriangleParametric)
{
if (ui->First_Vertex_X_Coordinate_Input->text() == "")
{
@ -244,58 +295,370 @@ void MainWindow::on_pushButton_clicked()
return;
}
info.triangle[2].y = ui->Third_Vertex_Y_Coordinate_Input->text().toInt();
info.ginfo = NSStructures::GInfoConstructor::get_triangle(info.triangle, {{255, 0, 0}, {0, 255, 0}, {0, 0, 255}}, {}, false);
info.ginfo = NSStructures::GInfoConstructor::get_triangle(info.triangle,
{{255, 0, 0}, {0, 255, 0}, {0, 0, 255}},
{},
info.gradient == TriangleParametric);
points = {};
for (auto p : info.triangle)
{
points.push_back({p.x, p.y});
}
}
else if (info.gradient_type = c_BrushTypeTriagnleMeshGradient && parametric)
else if (info.gradient == CoonsPatch || info.gradient == CoonsPatchParametric)
{
if (ui->First_Vertex_X_Coordinate_Input_2->text() == "")
if (ui->First_Vertex_X_Coordinate_Input_3->text() == "")
{
ui->statusbar->showMessage("First Vertex X coordinate = NULL");
ui->statusbar->showMessage("First Vertex X Coordinate = NULL");
return;
}
info.triangle[0].x = ui->First_Vertex_X_Coordinate_Input_2->text().toInt();
if (ui->First_Vertex_Y_Coordinate_Input_2->text() == "")
info.curve[0].x = 5 * ui->First_Vertex_X_Coordinate_Input_3->text().toInt();
if (ui->First_Vertex_Y_Coordinate_Input_3->text() == "")
{
ui->statusbar->showMessage("First Vertex Y coordinate = NULL");
ui->statusbar->showMessage("First Vertex Y Coordinate = NULL");
return;
}
info.triangle[0].y = ui->First_Vertex_Y_Coordinate_Input_2->text().toInt();
if (ui->Second_Vertex_X_Coordinate_Input_2->text() == "")
info.curve[0].y = 5 * ui->First_Vertex_Y_Coordinate_Input_3->text().toInt();
if (ui->First_X_Coordinate_First_Edge->text() == "")
{
ui->statusbar->showMessage("Second Vertex X coordinate = NULL");
ui->statusbar->showMessage("First X Coordinate First Edge = NULL");
return;
}
info.triangle[1].x = ui->Second_Vertex_X_Coordinate_Input_2->text().toInt();
if (ui->Second_Vertex_Y_Coordinate_Input_2->text() == "")
info.curve[1].x = 5 * ui->First_X_Coordinate_First_Edge->text().toInt();
if (ui->First_Y_Coordinate_First_Edge->text() == "")
{
ui->statusbar->showMessage("Second Vertex Y coordinate = NULL");
ui->statusbar->showMessage("First Y Coordinate First Edge = NULL");
return;
}
info.triangle[1].y = ui->Second_Vertex_Y_Coordinate_Input_2->text().toInt();
if (ui->Third_Vertex_X_Coordinate_Input_2->text() == "")
info.curve[1].y = 5 * ui->First_Y_Coordinate_First_Edge->text().toInt();
if (ui->Second_X_Coordinate_First_Edge->text() == "")
{
ui->statusbar->showMessage("Third Vertex X coordinate = NULL");
ui->statusbar->showMessage("Second X Coordinate First Edge = NULL");
return;
}
info.triangle[2].x = ui->Third_Vertex_X_Coordinate_Input_2->text().toInt();
if (ui->Third_Vertex_Y_Coordinate_Input_2->text() == "")
info.curve[2].x = 5 * ui->Second_X_Coordinate_First_Edge->text().toInt();
if (ui->Second_Y_Coordinate_First_Edge->text() == "")
{
ui->statusbar->showMessage("Third Vertex Y coordinate = NULL");
ui->statusbar->showMessage("Second Y Coordinate First Edge = NULL");
return;
}
info.triangle[2].y = ui->Third_Vertex_Y_Coordinate_Input_2->text().toInt();
info.ginfo = NSStructures::GInfoConstructor::get_triangle(info.triangle, {{255, 0, 0}, {0, 255, 0}, {0, 0, 255}},
{0.f, 0.4f, 1.f}, true);
points = {};
for (auto p : info.triangle)
info.curve[2].y = 5 * ui->Second_Y_Coordinate_First_Edge->text().toInt();
if (ui->Second_Vertex_X_Coordinate_Input_3->text() == "")
{
points.push_back({p.x, p.y});
ui->statusbar->showMessage("Second Vertex X Coordinate = NULL");
return;
}
info.curve[3].x = 5 * ui->Second_Vertex_X_Coordinate_Input_3->text().toInt();
if (ui->Second_Vertex_Y_Coordinate_Input_3->text() == "")
{
ui->statusbar->showMessage("Second Vertex Y Coordinate = NULL");
return;
}
info.curve[3].y = 5 * ui->Second_Vertex_Y_Coordinate_Input_3->text().toInt();
if (ui->First_X_Coordinate_Second_Edge->text() == "")
{
ui->statusbar->showMessage("First X Coordinate Second Edge = NULL");
return;
}
info.curve[4].x = 5 * ui->First_X_Coordinate_Second_Edge->text().toInt();
if (ui->First_Y_Coordinate_Second_Edge->text() == "")
{
ui->statusbar->showMessage("First Y Coordinate Second Edge = NULL");
return;
}
info.curve[4].y = 5 * ui->First_Y_Coordinate_Second_Edge->text().toInt();
if (ui->Second_X_Coordinate_Second_Edge->text() == "")
{
ui->statusbar->showMessage("Second X Coordinate Second Edge = NULL");
return;
}
info.curve[5].x = 5 * ui->Second_X_Coordinate_Second_Edge->text().toInt();
if (ui->Second_Y_Coordinate_Second_Edge->text() == "")
{
ui->statusbar->showMessage("Second Y Coordinate Second Edge = NULL");
return;
}
info.curve[5].y = 5 * ui->Second_Y_Coordinate_Second_Edge->text().toInt();
if (ui->Third_Vertex_X_Coordinate_Input_3->text() == "")
{
ui->statusbar->showMessage("Third Vertex X Coordinate = NULL");
return;
}
info.curve[6].x = 5 * ui->Third_Vertex_X_Coordinate_Input_3->text().toInt();
if (ui->Third_Vertex_Y_Coordinate_Input_3->text() == "")
{
ui->statusbar->showMessage("Third Vertex Y Coordinate = NULL");
return;
}
info.curve[6].y = 5 * ui->Third_Vertex_Y_Coordinate_Input_3->text().toInt();
if (ui->First_X_Coordinate_Third_Edge->text() == "")
{
ui->statusbar->showMessage("First X Coordinate Third Edge = NULL");
return;
}
info.curve[7].x = 5 * ui->First_X_Coordinate_Third_Edge->text().toInt();
if (ui->First_Y_Coordinate_Third_Edge->text() == "")
{
ui->statusbar->showMessage("First Y Coordinate Third Edge = NULL");
return;
}
info.curve[7].y = 5 * ui->First_Y_Coordinate_Third_Edge->text().toInt();
if (ui->Second_X_Coordinate_Third_Edge->text() == "")
{
ui->statusbar->showMessage("Second X Coordinate Third Edge = NULL");
return;
}
info.curve[8].x = 5 * ui->Second_X_Coordinate_Third_Edge->text().toInt();
if (ui->Second_Y_Coordinate_Third_Edge->text() == "")
{
ui->statusbar->showMessage("Second Y Coordinate Third Edge = NULL");
return;
}
info.curve[8].y = 5 * ui->Second_Y_Coordinate_Third_Edge->text().toInt();
if (ui->Fourth_Vertex_X_Coordinate_Input_3->text() == "")
{
ui->statusbar->showMessage("Fourth Vertex X Coordinate = NULL");
return;
}
info.curve[9].x = 5 * ui->Fourth_Vertex_X_Coordinate_Input_3->text().toInt();
if (ui->Fourth_Vertex_Y_Coordinate_Input_3->text() == "")
{
ui->statusbar->showMessage("Fourth Vertex Y Coordinate = NULL");
return;
}
info.curve[9].y = 5 * ui->Fourth_Vertex_Y_Coordinate_Input_3->text().toInt();
if (ui->First_X_Coordinate_Fourth_Edge->text() == "")
{
ui->statusbar->showMessage("First X Coordinate Fourth Edge = NULL");
return;
}
info.curve[10].x = 5 * ui->First_X_Coordinate_Fourth_Edge->text().toInt();
if (ui->First_Y_Coordinate_Fourth_Edge->text() == "")
{
ui->statusbar->showMessage("First Y Coordinate Fourth Edge = NULL");
return;
}
info.curve[10].y = 5 * ui->First_Y_Coordinate_Fourth_Edge->text().toInt();
if (ui->Second_X_Coordinate_Fourth_Edge->text() == "")
{
ui->statusbar->showMessage("Second X Coordinate Fourth Edge = NULL");
return;
}
info.curve[11].x = 5 * ui->Second_X_Coordinate_Fourth_Edge->text().toInt();
if (ui->Second_Y_Coordinate_Fourth_Edge->text() == "")
{
ui->statusbar->showMessage("Second Y Coordinate Fourth Edge = NULL");
return;
}
info.curve[11].y = 5 * ui->Second_Y_Coordinate_Fourth_Edge->text().toInt();
info.ginfo = NSStructures::GInfoConstructor::get_curve(
info.curve,
{0, 0.5, 1, 0.5},
{{0, 0, 255}, {255, 0, 255},
{255, 0, 0}, {0, 255, 0}},
info.gradient == CoonsPatchParametric
);
}
else if (info.gradient == TensorCoonsPatch || info.gradient == TensorCoonsPatchParametric)
{
if (ui->First_X_Coordinate_First_Edge_3->text() == "")
{
ui->statusbar->showMessage("First X Coordinate First Edge = NULL");
return;
}
info.tensorcurve[0][0].x = 5 * ui->First_X_Coordinate_First_Edge_3->text().toInt();
if (ui->First_Y_Coordinate_First_Edge_3->text() == "")
{
ui->statusbar->showMessage("First Y Coordinate First Edge = NULL");
return;
}
info.tensorcurve[0][0].y = 5 * ui->First_Y_Coordinate_First_Edge_3->text().toInt();
if (ui->Second_X_Coordinate_First_Edge_3->text() == "")
{
ui->statusbar->showMessage("Second X Coordinate First Edge = NULL");
return;
}
info.tensorcurve[0][1].x = 5 * ui->Second_X_Coordinate_First_Edge_3->text().toInt();
if (ui->Second_Y_Coordinate_First_Edge_3->text() == "")
{
ui->statusbar->showMessage("Second Y Coordinate First Edge = NULL");
return;
}
info.tensorcurve[0][1].y = 5 * ui->Second_Y_Coordinate_First_Edge_3->text().toInt();
if (ui->Third_X_Coordinate_First_Edge_3->text() == "")
{
ui->statusbar->showMessage("Third X Coordinate First Edge = NULL");
return;
}
info.tensorcurve[0][2].x = 5 * ui->Third_X_Coordinate_First_Edge_3->text().toInt();
if (ui->Third_Y_Coordinate_First_Edge_3->text() == "")
{
ui->statusbar->showMessage("Third Y Coordinate First Edge = NULL");
return;
}
info.tensorcurve[0][2].y = 5 * ui->Third_Y_Coordinate_First_Edge_3->text().toInt();
if (ui->Fourth_X_Coordinate_First_Edge_3->text() == "")
{
ui->statusbar->showMessage("Fourth X Coordinate First Edge = NULL");
return;
}
info.tensorcurve[0][3].x = 5 * ui->Fourth_X_Coordinate_First_Edge_3->text().toInt();
if (ui->Fourth_Y_Coordinate_First_Edge_3->text() == "")
{
ui->statusbar->showMessage("Fourth Y Coordinate First Edge = NULL");
return;
}
info.tensorcurve[0][3].y = 5 * ui->Fourth_Y_Coordinate_First_Edge_3->text().toInt();
if (ui->First_X_Coordinate_Second_Edge_3->text() == "")
{
ui->statusbar->showMessage("First X Coordinate Second Edge = NULL");
return;
}
info.tensorcurve[1][0].x = 5 * ui->First_X_Coordinate_Second_Edge_3->text().toInt();
if (ui->First_Vertex_Y_Coordinate_Input_3->text() == "")
{
ui->statusbar->showMessage("First Y Coordinate Second Edge = NULL");
return;
}
info.tensorcurve[1][0].y = 5 * ui->First_Y_Coordinate_Second_Edge_3->text().toInt();
if (ui->Second_X_Coordinate_Second_Edge_3->text() == "")
{
ui->statusbar->showMessage("Second X Coordinate Second Edge = NULL");
return;
}
info.tensorcurve[1][1].x = 5 * ui->Second_X_Coordinate_Second_Edge_3->text().toInt();
if (ui->Second_Y_Coordinate_Second_Edge_3->text() == "")
{
ui->statusbar->showMessage("Second Y Coordinate Second Edge = NULL");
return;
}
info.tensorcurve[1][1].y = 5 * ui->Second_Y_Coordinate_Second_Edge_3->text().toInt();
if (ui->Third_X_Coordinate_Second_Edge_3->text() == "")
{
ui->statusbar->showMessage("Third X Coordinate Second Edge = NULL");
return;
}
info.tensorcurve[1][2].x = 5 * ui->Third_X_Coordinate_Second_Edge_3->text().toInt();
if (ui->Third_Y_Coordinate_Second_Edge_3->text() == "")
{
ui->statusbar->showMessage("Third Y Coordinate Second Edge = NULL");
return;
}
info.tensorcurve[1][2].y = 5 * ui->Third_Y_Coordinate_Second_Edge_3->text().toInt();
if (ui->Fourth_X_Coordinate_Second_Edge_3->text() == "")
{
ui->statusbar->showMessage("Fourth X Coordinate Second Edge = NULL");
return;
}
info.tensorcurve[1][3].x = 5 * ui->Fourth_X_Coordinate_Second_Edge_3->text().toInt();
if (ui->Fourth_Y_Coordinate_Second_Edge_3->text() == "")
{
ui->statusbar->showMessage("Fourth Y Coordinate Second Edge = NULL");
return;
}
info.tensorcurve[1][3].y = 5 * ui->Fourth_Y_Coordinate_Second_Edge_3->text().toInt();
if (ui->First_X_Coordinate_Third_Edge_3->text() == "")
{
ui->statusbar->showMessage("First X Coordinate Third Edge = NULL");
return;
}
info.tensorcurve[2][0].x = 5 * ui->First_X_Coordinate_Third_Edge_3->text().toInt();
if (ui->First_Y_Coordinate_Third_Edge_3->text() == "")
{
ui->statusbar->showMessage("First Y Coordinate Third Edge = NULL");
return;
}
info.tensorcurve[2][0].y = 5 * ui->First_Y_Coordinate_Third_Edge_3->text().toInt();
if (ui->Second_X_Coordinate_Third_Edge_3->text() == "")
{
ui->statusbar->showMessage("Second X Coordinate Third Edge = NULL");
return;
}
info.tensorcurve[2][1].x = 5 * ui->Second_Y_Coordinate_Third_Edge_3->text().toInt();
if (ui->Second_Y_Coordinate_Third_Edge_3->text() == "")
{
ui->statusbar->showMessage("Second Y Coordinate Third Edge = NULL");
return;
}
info.tensorcurve[2][1].y = 5 * ui->Second_Y_Coordinate_Third_Edge_3->text().toInt();
if (ui->Third_X_Coordinate_Third_Edge_3->text() == "")
{
ui->statusbar->showMessage("Third X Coordinate Third Edge = NULL");
return;
}
info.tensorcurve[2][2].x = 5 * ui->Third_X_Coordinate_Third_Edge_3->text().toInt();
if (ui->Third_Y_Coordinate_Third_Edge_3->text() == "")
{
ui->statusbar->showMessage("Third Y Coordinate Third Edge = NULL");
return;
}
info.tensorcurve[2][2].y = 5 * ui->Third_Y_Coordinate_Third_Edge_3->text().toInt();
if (ui->Fourth_X_Coordinate_Third_Edge_3->text() == "")
{
ui->statusbar->showMessage("Fourth X Coordinate Third Edge = NULL");
return;
}
info.tensorcurve[2][3].x = 5 * ui->Fourth_X_Coordinate_Third_Edge_3->text().toInt();
if (ui->Fourth_Y_Coordinate_Third_Edge_3->text() == "")
{
ui->statusbar->showMessage("Fourth Y Coordinate Third Edge = NULL");
return;
}
info.tensorcurve[2][3].y = 5 * ui->Fourth_Y_Coordinate_Third_Edge_3->text().toInt();
if (ui->First_X_Coordinate_Fourth_Edge_3->text() == "")
{
ui->statusbar->showMessage("First X Coordinate Fourth Edge = NULL");
return;
}
info.tensorcurve[3][0].x = 5 * ui->First_X_Coordinate_Fourth_Edge_3->text().toInt();
if (ui->First_Y_Coordinate_Fourth_Edge_3->text() == "")
{
ui->statusbar->showMessage("First Y Coordinate Fourth Edge = NULL");
return;
}
info.tensorcurve[3][0].y = 5 * ui->First_Y_Coordinate_Fourth_Edge_3->text().toInt();
if (ui->Second_X_Coordinate_Fourth_Edge_3->text() == "")
{
ui->statusbar->showMessage("Second X Coordinate Fourth Edge = NULL");
return;
}
info.tensorcurve[3][1].x = 5 * ui->Second_X_Coordinate_Fourth_Edge_3->text().toInt();
if (ui->Second_Y_Coordinate_Fourth_Edge_3->text() == "")
{
ui->statusbar->showMessage("Second Y Coordinate Fourth Edge = NULL");
return;
}
info.tensorcurve[3][1].y = 5 * ui->Second_Y_Coordinate_Fourth_Edge_3->text().toInt();
if (ui->Third_X_Coordinate_Fourth_Edge_3->text() == "")
{
ui->statusbar->showMessage("Third X Coordinate Fourth Edge = NULL");
return;
}
info.tensorcurve[3][2].x = 5 * ui->Third_X_Coordinate_Fourth_Edge_3->text().toInt();
if (ui->Third_Y_Coordinate_Fourth_Edge_3->text() == "")
{
ui->statusbar->showMessage("Third X Coordinate Fourth Edge = NULL");
return;
}
info.tensorcurve[3][2].y = 5 * ui->Third_Y_Coordinate_Fourth_Edge_3->text().toInt();
if (ui->Fourth_X_Coordinate_Fourth_Edge_3->text() == "")
{
ui->statusbar->showMessage("Fourth X Coordinate Fourth Edge = NULL");
return;
}
info.tensorcurve[3][3].x = 5 * ui->Fourth_X_Coordinate_Fourth_Edge_3->text().toInt();
if (ui->Fourth_Y_Coordinate_Fourth_Edge_3->text() == "")
{
ui->statusbar->showMessage("Fourth Y Coordinate Fourth Edge = NULL");
return;
}
info.tensorcurve[3][3].y = 5 * ui->Fourth_Y_Coordinate_Fourth_Edge_3->text().toInt();
info.ginfo = NSStructures::GInfoConstructor::get_tensor_curve(
info.tensorcurve,
{{0, 0.5}, {1, 0.5}},
{{{0, 0, 255}, {255, 0, 255}}, {{255, 0, 0}, {0, 255, 0}}},
info.gradient == TensorCoonsPatchParametric
);
}
if (info.colorspace == NoColorspaceType)
@ -451,38 +814,338 @@ void MainWindow::on_Third_Vertex_Y_Coordinate_Input_editingFinished()
}
void MainWindow::on_First_Vertex_X_Coordinate_Input_2_editingFinished()
void MainWindow::on_First_Vertex_X_Coordinate_Input_3_editingFinished()
{
ClampCoords(ui->First_Vertex_X_Coordinate_Input_2);
ClampCoords(ui->First_Vertex_X_Coordinate_Input_3);
}
void MainWindow::on_First_Vertex_Y_Coordinate_Input_2_editingFinished()
void MainWindow::on_First_Vertex_Y_Coordinate_Input_3_editingFinished()
{
ClampCoords(ui->First_Vertex_Y_Coordinate_Input_2);
ClampCoords(ui->First_Vertex_Y_Coordinate_Input_3);
}
void MainWindow::on_Second_Vertex_X_Coordinate_Input_2_editingFinished()
void MainWindow::on_Second_Vertex_X_Coordinate_Input_3_editingFinished()
{
ClampCoords(ui->Second_Vertex_X_Coordinate_Input_2);
ClampCoords(ui->Second_Vertex_X_Coordinate_Input_3);
}
void MainWindow::on_Second_Vertex_Y_Coordinate_Input_2_editingFinished()
void MainWindow::on_Second_Vertex_Y_Coordinate_Input_3_editingFinished()
{
ClampCoords(ui->Second_Vertex_Y_Coordinate_Input_2);
ClampCoords(ui->Second_Vertex_Y_Coordinate_Input_3);
}
void MainWindow::on_Third_Vertex_X_Coordinate_Input_2_editingFinished()
void MainWindow::on_Third_Vertex_X_Coordinate_Input_3_editingFinished()
{
ClampCoords(ui->Third_Vertex_X_Coordinate_Input_2);
ClampCoords(ui->Third_Vertex_X_Coordinate_Input_3);
}
void MainWindow::on_Third_Vertex_Y_Coordinate_Input_2_editingFinished()
void MainWindow::on_Third_Vertex_Y_Coordinate_Input_3_editingFinished()
{
ClampCoords(ui->Third_Vertex_Y_Coordinate_Input_2);
ClampCoords(ui->Third_Vertex_Y_Coordinate_Input_3);
}
void MainWindow::on_Fourth_Vertex_X_Coordinate_Input_3_editingFinished()
{
ClampCoords(ui->Fourth_Vertex_X_Coordinate_Input_3);
}
void MainWindow::on_Fourth_Vertex_Y_Coordinate_Input_3_editingFinished()
{
ClampCoords(ui->Fourth_Vertex_Y_Coordinate_Input_3);
}
void MainWindow::on_First_X_Coordinate_First_Edge_editingFinished()
{
ClampCoords(ui->First_X_Coordinate_First_Edge);
}
void MainWindow::on_First_Y_Coordinate_First_Edge_editingFinished()
{
ClampCoords(ui->First_Y_Coordinate_First_Edge);
}
void MainWindow::on_Second_X_Coordinate_First_Edge_editingFinished()
{
ClampCoords(ui->Second_X_Coordinate_First_Edge);
}
void MainWindow::on_Second_Y_Coordinate_First_Edge_editingFinished()
{
ClampCoords(ui->Second_Y_Coordinate_First_Edge);
}
void MainWindow::on_First_X_Coordinate_Second_Edge_editingFinished()
{
ClampCoords(ui->First_X_Coordinate_Second_Edge);
}
void MainWindow::on_First_Y_Coordinate_Second_Edge_editingFinished()
{
ClampCoords(ui->First_Y_Coordinate_Second_Edge);
}
void MainWindow::on_Second_X_Coordinate_Second_Edge_editingFinished()
{
ClampCoords(ui->Second_X_Coordinate_Second_Edge);
}
void MainWindow::on_Second_Y_Coordinate_Second_Edge_editingFinished()
{
ClampCoords(ui->Second_Y_Coordinate_Second_Edge);
}
void MainWindow::on_First_X_Coordinate_Third_Edge_editingFinished()
{
ClampCoords(ui->First_X_Coordinate_Third_Edge);
}
void MainWindow::on_First_Y_Coordinate_Third_Edge_editingFinished()
{
ClampCoords(ui->First_Y_Coordinate_Third_Edge);
}
void MainWindow::on_Second_X_Coordinate_Third_Edge_editingFinished()
{
ClampCoords(ui->Second_X_Coordinate_Third_Edge);
}
void MainWindow::on_Second_Y_Coordinate_Third_Edge_editingFinished()
{
ClampCoords(ui->Second_Y_Coordinate_Third_Edge);
}
void MainWindow::on_First_X_Coordinate_Fourth_Edge_editingFinished()
{
ClampCoords(ui->First_X_Coordinate_Fourth_Edge);
}
void MainWindow::on_First_Y_Coordinate_Fourth_Edge_editingFinished()
{
ClampCoords(ui->First_Y_Coordinate_Fourth_Edge);
}
void MainWindow::on_Second_X_Coordinate_Fourth_Edge_editingFinished()
{
ClampCoords(ui->Second_X_Coordinate_Fourth_Edge);
}
void MainWindow::on_Second_Y_Coordinate_Fourth_Edge_editingFinished()
{
ClampCoords(ui->Second_Y_Coordinate_Fourth_Edge);
}
void MainWindow::on_First_X_Coordinate_First_Edge_3_editingFinished()
{
ClampCoords(ui->First_X_Coordinate_First_Edge_3);
}
void MainWindow::on_First_Y_Coordinate_First_Edge_3_editingFinished()
{
ClampCoords(ui->First_Y_Coordinate_First_Edge_3);
}
void MainWindow::on_Second_X_Coordinate_First_Edge_3_editingFinished()
{
ClampCoords(ui->Second_X_Coordinate_First_Edge_3);
}
void MainWindow::on_Second_Y_Coordinate_First_Edge_3_editingFinished()
{
ClampCoords(ui->Second_Y_Coordinate_First_Edge_3);
}
void MainWindow::on_Third_X_Coordinate_First_Edge_3_editingFinished()
{
ClampCoords(ui->Third_X_Coordinate_First_Edge_3);
}
void MainWindow::on_Third_Y_Coordinate_First_Edge_3_editingFinished()
{
ClampCoords(ui->Third_Y_Coordinate_First_Edge_3);
}
void MainWindow::on_Fourth_X_Coordinate_First_Edge_3_editingFinished()
{
ClampCoords(ui->Fourth_X_Coordinate_First_Edge_3);
}
void MainWindow::on_Fourth_Y_Coordinate_First_Edge_3_editingFinished()
{
ClampCoords(ui->Fourth_Y_Coordinate_First_Edge_3);
}
void MainWindow::on_First_X_Coordinate_Second_Edge_3_editingFinished()
{
ClampCoords(ui->First_X_Coordinate_Second_Edge_3);
}
void MainWindow::on_First_Y_Coordinate_Second_Edge_3_editingFinished()
{
ClampCoords(ui->First_Y_Coordinate_Second_Edge_3);
}
void MainWindow::on_Second_X_Coordinate_Second_Edge_3_editingFinished()
{
ClampCoords(ui->Second_X_Coordinate_Second_Edge_3);
}
void MainWindow::on_Second_Y_Coordinate_Second_Edge_3_editingFinished()
{
ClampCoords(ui->Second_Y_Coordinate_Second_Edge_3);
}
void MainWindow::on_Third_X_Coordinate_Second_Edge_3_editingFinished()
{
ClampCoords(ui->Third_X_Coordinate_Second_Edge_3);
}
void MainWindow::on_Third_Y_Coordinate_Second_Edge_3_editingFinished()
{
ClampCoords(ui->Third_Y_Coordinate_Second_Edge_3);
}
void MainWindow::on_Fourth_X_Coordinate_Second_Edge_3_editingFinished()
{
ClampCoords(ui->Fourth_X_Coordinate_Second_Edge_3);
}
void MainWindow::on_Fourth_Y_Coordinate_Second_Edge_3_editingFinished()
{
ClampCoords(ui->Fourth_Y_Coordinate_Second_Edge_3);
}
void MainWindow::on_First_X_Coordinate_Third_Edge_3_editingFinished()
{
ClampCoords(ui->First_X_Coordinate_Third_Edge_3);
}
void MainWindow::on_First_Y_Coordinate_Third_Edge_3_editingFinished()
{
ClampCoords(ui->First_Y_Coordinate_Third_Edge_3);
}
void MainWindow::on_Second_X_Coordinate_Third_Edge_3_editingFinished()
{
ClampCoords(ui->Second_X_Coordinate_Third_Edge_3);
}
void MainWindow::on_Second_Y_Coordinate_Third_Edge_3_editingFinished()
{
ClampCoords(ui->Second_Y_Coordinate_Third_Edge_3);
}
void MainWindow::on_Third_X_Coordinate_Third_Edge_3_editingFinished()
{
ClampCoords(ui->Third_X_Coordinate_Third_Edge_3);
}
void MainWindow::on_Third_Y_Coordinate_Third_Edge_3_editingFinished()
{
ClampCoords(ui->Third_Y_Coordinate_Third_Edge_3);
}
void MainWindow::on_Fourth_X_Coordinate_Third_Edge_3_editingFinished()
{
ClampCoords(ui->Fourth_X_Coordinate_Third_Edge_3);
}
void MainWindow::on_Fourth_Y_Coordinate_Third_Edge_3_editingFinished()
{
ClampCoords(ui->Fourth_Y_Coordinate_Third_Edge_3);
}
void MainWindow::on_First_X_Coordinate_Fourth_Edge_3_editingFinished()
{
ClampCoords(ui->First_X_Coordinate_Fourth_Edge_3);
}
void MainWindow::on_First_Y_Coordinate_Fourth_Edge_3_editingFinished()
{
ClampCoords(ui->First_Y_Coordinate_Fourth_Edge_3);
}
void MainWindow::on_Second_X_Coordinate_Fourth_Edge_3_editingFinished()
{
ClampCoords(ui->Second_X_Coordinate_Fourth_Edge_3);
}
void MainWindow::on_Second_Y_Coordinate_Fourth_Edge_3_editingFinished()
{
ClampCoords(ui->Second_Y_Coordinate_Fourth_Edge_3);
}
void MainWindow::on_Third_X_Coordinate_Fourth_Edge_3_editingFinished()
{
ClampCoords(ui->Third_X_Coordinate_Fourth_Edge_3);
}
void MainWindow::on_Third_Y_Coordinate_Fourth_Edge_3_editingFinished()
{
ClampCoords(ui->Third_Y_Coordinate_Fourth_Edge_3);
}
void MainWindow::on_Fourth_X_Coordinate_Fourth_Edge_3_editingFinished()
{
ClampCoords(ui->Fourth_X_Coordinate_Fourth_Edge_3);
}
void MainWindow::on_Fourth_Y_Coordinate_Fourth_Edge_3_editingFinished()
{
ClampCoords(ui->Fourth_Y_Coordinate_Fourth_Edge_3);
}

View File

@ -13,6 +13,19 @@ namespace Ui
}
QT_END_NAMESPACE
typedef enum
{
Linear,
Radial,
Triangle,
TriangleParametric,
CoonsPatch,
CoonsPatchParametric,
TensorCoonsPatch,
TensorCoonsPatchParametric,
Functional
} GradientType;
typedef enum
{
NoColorspaceType,
@ -51,12 +64,20 @@ struct Color
struct Info
{
ColorspaceType colorspace = NoColorspaceType;
GradientType gradient = Linear;
float r0, r1;
NSStructures::Point c0, c1;
NSStructures::Point p0, p1;
bool cont_b, cont_f;
std::vector<NSStructures::Point> triangle = {{100, 100}, {300, 200}, {200, 350}};
std::vector<NSStructures::Point> curve = {{100, 300}, {50, 250}, {150, 150}, {100, 100},
{150, 50}, {250, 150}, {300, 100}, {250, 150},
{350, 250}, {300, 300}, {250, 350}, {150,250}};
std::vector<std::vector<NSStructures::Point>> tensorcurve = {{{100, 300}, {150, 250}, {50, 150}, {100,100}},
{{150, 250}, {170, 230}, {170, 170}, {50, 150}},
{{350, 250}, {230, 230}, {230, 170}, {150, 250}},
{{300, 300}, {250, 250}, {350, 150}, {300, 100}}};
NSStructures::GradientInfo ginfo;
int gradient_type;
@ -155,17 +176,125 @@ private slots:
void on_actionTriangle_Parametric_Gradient_triggered();
void on_First_Vertex_X_Coordinate_Input_2_editingFinished();
void on_actionCoons_Patch_Gradient_triggered();
void on_First_Vertex_Y_Coordinate_Input_2_editingFinished();
void on_actionCoons_Patch_Parametric_triggered();
void on_Second_Vertex_X_Coordinate_Input_2_editingFinished();
void on_actionTensor_Coons_Patch_Gradient_triggered();
void on_Second_Vertex_Y_Coordinate_Input_2_editingFinished();
void on_actionTensor_Coons_Patch_Parametric_triggered();
void on_Third_Vertex_X_Coordinate_Input_2_editingFinished();
void on_First_Vertex_X_Coordinate_Input_3_editingFinished();
void on_Third_Vertex_Y_Coordinate_Input_2_editingFinished();
void on_First_Vertex_Y_Coordinate_Input_3_editingFinished();
void on_Second_Vertex_X_Coordinate_Input_3_editingFinished();
void on_Second_Vertex_Y_Coordinate_Input_3_editingFinished();
void on_Third_Vertex_X_Coordinate_Input_3_editingFinished();
void on_Third_Vertex_Y_Coordinate_Input_3_editingFinished();
void on_Fourth_Vertex_X_Coordinate_Input_3_editingFinished();
void on_Fourth_Vertex_Y_Coordinate_Input_3_editingFinished();
void on_First_X_Coordinate_First_Edge_editingFinished();
void on_First_Y_Coordinate_First_Edge_editingFinished();
void on_Second_X_Coordinate_First_Edge_editingFinished();
void on_Second_Y_Coordinate_First_Edge_editingFinished();
void on_First_X_Coordinate_Second_Edge_editingFinished();
void on_First_Y_Coordinate_Second_Edge_editingFinished();
void on_Second_X_Coordinate_Second_Edge_editingFinished();
void on_Second_Y_Coordinate_Second_Edge_editingFinished();
void on_First_X_Coordinate_Third_Edge_editingFinished();
void on_First_Y_Coordinate_Third_Edge_editingFinished();
void on_Second_X_Coordinate_Third_Edge_editingFinished();
void on_Second_Y_Coordinate_Third_Edge_editingFinished();
void on_First_X_Coordinate_Fourth_Edge_editingFinished();
void on_First_Y_Coordinate_Fourth_Edge_editingFinished();
void on_Second_X_Coordinate_Fourth_Edge_editingFinished();
void on_Second_Y_Coordinate_Fourth_Edge_editingFinished();
void on_First_X_Coordinate_First_Edge_3_editingFinished();
void on_First_Y_Coordinate_First_Edge_3_editingFinished();
void on_Second_X_Coordinate_First_Edge_3_editingFinished();
void on_Second_Y_Coordinate_First_Edge_3_editingFinished();
void on_Third_X_Coordinate_First_Edge_3_editingFinished();
void on_Third_Y_Coordinate_First_Edge_3_editingFinished();
void on_Fourth_X_Coordinate_First_Edge_3_editingFinished();
void on_Fourth_Y_Coordinate_First_Edge_3_editingFinished();
void on_First_X_Coordinate_Second_Edge_3_editingFinished();
void on_First_Y_Coordinate_Second_Edge_3_editingFinished();
void on_Second_X_Coordinate_Second_Edge_3_editingFinished();
void on_Second_Y_Coordinate_Second_Edge_3_editingFinished();
void on_Third_X_Coordinate_Second_Edge_3_editingFinished();
void on_Third_Y_Coordinate_Second_Edge_3_editingFinished();
void on_Fourth_X_Coordinate_Second_Edge_3_editingFinished();
void on_Fourth_Y_Coordinate_Second_Edge_3_editingFinished();
void on_First_X_Coordinate_Third_Edge_3_editingFinished();
void on_First_Y_Coordinate_Third_Edge_3_editingFinished();
void on_Second_X_Coordinate_Third_Edge_3_editingFinished();
void on_Second_Y_Coordinate_Third_Edge_3_editingFinished();
void on_Third_X_Coordinate_Third_Edge_3_editingFinished();
void on_Third_Y_Coordinate_Third_Edge_3_editingFinished();
void on_Fourth_X_Coordinate_Third_Edge_3_editingFinished();
void on_Fourth_Y_Coordinate_Third_Edge_3_editingFinished();
void on_First_X_Coordinate_Fourth_Edge_3_editingFinished();
void on_First_Y_Coordinate_Fourth_Edge_3_editingFinished();
void on_Second_X_Coordinate_Fourth_Edge_3_editingFinished();
void on_Second_Y_Coordinate_Fourth_Edge_3_editingFinished();
void on_Third_X_Coordinate_Fourth_Edge_3_editingFinished();
void on_Third_Y_Coordinate_Fourth_Edge_3_editingFinished();
void on_Fourth_X_Coordinate_Fourth_Edge_3_editingFinished();
void on_Fourth_Y_Coordinate_Fourth_Edge_3_editingFinished();
private:
Ui::MainWindow *ui;

File diff suppressed because it is too large Load Diff