Test UI and Bug fixes

Made new ui to test
Fixed bug with linear gradient
Optimised Coons patch
This commit is contained in:
danya
2021-03-26 15:57:37 +03:00
parent 27950b108b
commit ed498c296d
5 changed files with 788 additions and 789 deletions

View File

@ -95,115 +95,17 @@ void GenerateImg(QImage &img, std::vector<Point> &points, Info &info) {
void MainWindow::on_RenderPic_clicked()
{
QImage pm(400, 400,QImage::Format_RGB888);
QImage pm(400, 400, QImage::Format_RGB888);
GenerateImg(pm, points, info);
//setColor2(pm, 0x0000FF);
//pm.invertPixels();
ui->lable_test->setPixmap(QPixmap::fromImage(pm));
ui->lable_test->setPixmap(QPixmap::fromImage(pm)) ;
ui->lable_test->setScaledContents(true);
ui->lable_test->resize(pm.size());
pm.save("test.bmp");
}
void MainWindow::on_AngleSlider_sliderMoved(int position)
{
double angleT = 360. / 100 * position;
ui->lable_angle->setText(std::to_string(angleT).c_str());
info.ginfo.setAngleDegrees(angleT);
this->on_RenderPic_clicked();
}
void MainWindow::on_OffsetSlider_sliderMoved(int position)
{
double offset = ((double)position - 50.0) / 25.0;
ui->lable_offset->setText(std::to_string(offset).c_str());
info.ginfo.linoffset = offset;
this->on_RenderPic_clicked();
}
void MainWindow::on_StretchSlide_sliderMoved(int position)
{
double stretch = pow(2.0, (position - 50.) / 25.0);
ui->lable_stretch->setText(std::to_string(stretch).c_str());
info.ginfo.linstretch = stretch;
this->on_RenderPic_clicked();
}
void MainWindow::on_DiscreteStepSlider_sliderMoved(int position)
{
if (position == 0) {
info.ginfo.discrete_step = 0.0;
ui->label_discrete->setText("Continious");
this->on_RenderPic_clicked();
return;
}
info.ginfo.setStepByNum(position);
ui->label_discrete->setText(std::to_string(position).c_str());
this->on_RenderPic_clicked();
}
void MainWindow::on_PathType_itemDoubleClicked(QListWidgetItem *item)
{
on_PathType_itemClicked(item);
on_RenderPic_clicked();
}
void MainWindow::on_PathType_itemClicked(QListWidgetItem *item)
{
if (item->text() == "Circle") {
points = drawCircle1(100, 53, 53, 50);
}
else if (item->text() == "Square") {
points = {{0, 0}, {105, 0}, {105, 105}, {0, 105}};
}
else if (item->text() == "Triangle") {
points = {{5, 10}, {40, 100}, {100, 1}};
/*
* Пока чтобы тестить прямую интерполяцию цвета, нужно редактировать код
* И вычтавить info.ginfo.shading.shading_type как NSStructures::ShadingInfo::TriangleInterpolation
* Чтобы тестить параметрическую нужно выставить NSStructures::ShadingInfo::Parametric
* С опцией Parametric можно тестить другие градиенты.
*
*/
info.gradient_type = c_BrushTypeTriagnleMeshGradient;
info.ginfo.shading.shading_type = NSStructures::ShadingInfo::Parametric;
info.ginfo.shading.triangle = {{5 * 3.84, 10 * 3.84}, {40 * 3.84, 100 * 3.84}, {100 * 3.84, 1 * 3.84}};
info.ginfo.shading.triangle_parameters = {0.0f, 0.5f, 1.0f} ;
info.ginfo.shading.triangle_colors = {{255,0,0, 255}, {255,255,0,255 }, {0,255,0,255}};
}
else if (item->text() == "Patch") {
points = {{0, 0}, {105, 0}, {105, 105}, {0, 105}};
info.gradient_type = c_BrushTypeTensorCurveGradient ;
info.ginfo.shading.shading_type = NSStructures::ShadingInfo::CurveInterpolation;
info.ginfo.shading.patch = {
{{10, 80}, {20, 70}, {0, 20}, {10,10}},
{{25, 75}, {40, 60}, {40, 40}, {20, 0}},
{{90, 70}, {60,60}, {60, 40}, {70, 20}},
{{80,80}, {40, 40}, {130, 70}, {80,10}}
};
info.ginfo.shading.patch_parameters = {
{0 , 1},
{1, 0.5}
};
info.ginfo.shading.patch_colors = {
{{255, 0, 0}, {150, 255, 255}},
{{0, 255, 0}, {0, 0, 255}}
};
float mult = 4.0;
for (int i = 0; i < info.ginfo.shading.patch.size(); i++)
{
for (int j = 0; j < info.ginfo.shading.patch[0].size(); j++)
{
info.ginfo.shading.patch[i][j] = info.ginfo.shading.patch[i][j] * mult;
}
}
}
}
void MainWindow::on_GradientType_itemDoubleClicked(QListWidgetItem *item)
{
on_GradientType_itemClicked(item);
@ -212,68 +114,98 @@ void MainWindow::on_GradientType_itemDoubleClicked(QListWidgetItem *item)
void MainWindow::on_GradientType_itemClicked(QListWidgetItem *item)
{
points = {{0, 0}, {105, 0}, {105, 105}, {0, 105}};
if (item->text() == "Linear") {
info.gradient_type = c_BrushTypePathNewLinearGradient;
info.ginfo = NSStructures::GInfoConstructor::get_linear(info.p0, info.p1, 0, 1, info.cont_b, info.cont_f);
}
else if (item->text() == "Radial") {
info.gradient_type = c_BrushTypePathRadialGradient;
info.ginfo = NSStructures::GInfoConstructor::get_radial(info.c0, info.c1, info.r0, info.r1,
0, 1, info.cont_b, info.cont_f);
}
else if (item->text() == "Diamond") {
info.gradient_type = c_BrushTypePathDiamondGradient;
else if (item->text() == "Triangle") {
info.gradient_type = c_BrushTypeTriagnleMeshGradient;
info.ginfo = NSStructures::GInfoConstructor::get_triangle(
{{100, 100}, {300, 200}, {200, 350}},
{{255, 0, 0}, {0, 255, 0}, {0, 0, 255}},
{}, false
);
points = {{100 / 3.84, 100 / 3.84}, {300 / 3.84, 200 / 3.84}, {200 / 3.84, 350 / 3.84}};
}
else if (item->text() == "Conical") {
info.gradient_type = c_BrushTypePathConicalGradient;
else if (item->text() == "Functional" ) {
info.ginfo = NSStructures::GInfoConstructor::get_functional(0, 1, 0, 1,
{400, 0, 0, 400, 0, 0});
}
else if (item->text() == "TriangleParametric" ) {
info.gradient_type = c_BrushTypeTriagnleMeshGradient;
info.ginfo = NSStructures::GInfoConstructor::get_triangle(
{{100, 100}, {300, 200}, {200, 350}},
{{255, 0, 0}, {0, 255, 0}, {0, 0, 255}},
{0, 0.4, 1}, true
);
points = {{100 / 3.84, 100 / 3.84}, {300 / 3.84, 200 / 3.84}, {200 / 3.84, 350 / 3.84}};
}
else if (item->text() == "CoonsPatch" ) {
info.gradient_type = c_BrushTypePathNewLinearGradient;
info.ginfo = NSStructures::GInfoConstructor::get_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}
},
{0, 0.5, 1, 0.5},
{{0, 0, 255}, {255, 0, 255},
{255, 0, 0}, {0, 255, 0}},
false
);
}
else if (item->text() == "TesnorCoonsPatch" ) {
info.gradient_type = c_BrushTypePathNewLinearGradient;
info.ginfo = NSStructures::GInfoConstructor::get_tensor_curve(
{
{{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}}
},
{{0, 0.5}, {1, 0.5}},
{{{0, 0, 255}, {255, 0, 255}}, {{255, 0, 0}, {0, 255, 0}}},
false
);
}
else if (item->text() == "CoonsPatchParametric") {
info.gradient_type = c_BrushTypeCurveGradient;
info.ginfo = NSStructures::GInfoConstructor::get_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}
},
{0, 0.5, 1, 0.5},
{{0, 0, 255}, {255, 0, 255},
{255, 0, 0}, {0, 255, 0}},
true
);
}
else if (item->text() == "TensorCoonsPatchParametric") {
info.gradient_type = c_BrushTypeTensorCurveGradient;
info.ginfo = NSStructures::GInfoConstructor::get_tensor_curve(
{
{{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}}
},
{{0, 0.5}, {1, 0.5}},
{{{0, 0, 255}, {255, 0, 255}}, {{255, 0, 0}, {0, 255, 0}}},
true
);
}
}
void MainWindow::on_LittleRadiusSlider_sliderMoved(int position)
{
double llr = (double)position / 100.0;
ui->lable_little_radius->setText(std::to_string(llr).c_str());
info.ginfo.littleRadius = llr;
this->on_RenderPic_clicked();
}
void MainWindow::on_LargeRadiusSlider_sliderMoved(int position)
{
double lgr = (double)position / 100.0;
ui->lable_large_radius->setText(std::to_string(lgr).c_str());
info.ginfo.largeRadius = lgr;
this->on_RenderPic_clicked();
}
void MainWindow::on_xcenterSlider_sliderMoved(int position)
{
double xc = ((double)position - 50.0) / 25.0;
ui->lable_xcenter->setText(std::to_string(xc).c_str());
info.ginfo.centerX = xc;
this->on_RenderPic_clicked();
}
void MainWindow::on_ycenterSlider_sliderMoved(int position)
{
double yc = ((double)position - 50.0) / 25.0;
ui->lable_ycenter->setText(std::to_string(yc).c_str());
info.ginfo.centerY = yc;
this->on_RenderPic_clicked();
}
void MainWindow::on_XSizeSlider_sliderMoved(int position)
{
double xsize = pow(2.0, (position - 50.) / 25.0);
ui->lable_xsize->setText(std::to_string(xsize).c_str());
info.ginfo.xsize = xsize;
this->on_RenderPic_clicked();
}
void MainWindow::on_YSizeSlider_sliderMoved(int position)
{
double ysize = pow(2.0, (position - 50.) / 25.0);
ui->lable_ysize->setText(std::to_string(ysize).c_str());
info.ginfo.ysize = ysize;
this->on_RenderPic_clicked();
}
void MainWindow::on_ColorSpaces_itemClicked(QListWidgetItem *item)
{
@ -311,9 +243,122 @@ void MainWindow::on_ColorSpaces_itemDoubleClicked(QListWidgetItem *item)
on_RenderPic_clicked();
}
void MainWindow::on_Reflected_CheckBox_clicked(bool checked)
void MainWindow::on_Point1X_sliderMoved(int position)
{
info.ginfo.continue_shading = checked;
info.p0.x= position;
if (info.gradient_type != c_BrushTypePathNewLinearGradient) return;
info.ginfo = NSStructures::GInfoConstructor::get_linear(info.p0, info.p1, 0, 1, info.cont_b, info.cont_f);
on_RenderPic_clicked();
}
void MainWindow::on_Point1Y_sliderMoved(int position)
{
info.p0.y = position;
if (info.gradient_type != c_BrushTypePathNewLinearGradient) return;
info.ginfo = NSStructures::GInfoConstructor::get_linear(info.p0, info.p1, 0, 1, info.cont_b, info.cont_f);
on_RenderPic_clicked();
}
void MainWindow::on_Point2X_sliderMoved(int position)
{
info.p1.x = position;
if (info.gradient_type != c_BrushTypePathNewLinearGradient) return;
info.ginfo = NSStructures::GInfoConstructor::get_linear(info.p0, info.p1, 0, 1, info.cont_b, info.cont_f);
on_RenderPic_clicked();
}
void MainWindow::on_Point2Y_sliderMoved(int position)
{
info.p1.y = position;
if (info.gradient_type != c_BrushTypePathNewLinearGradient) return;
info.ginfo = NSStructures::GInfoConstructor::get_linear(info.p0, info.p1, 0, 1, info.cont_b, info.cont_f);
on_RenderPic_clicked();
}
void MainWindow::on_CenterX0_valueChanged(int value)
{
info.c0.x = value;
if (info.gradient_type != c_BrushTypePathRadialGradient) return;
info.ginfo = NSStructures::GInfoConstructor::get_radial(info.c0, info.c1, info.r0, info.r1,
0, 1, info.cont_b, info.cont_f);
on_RenderPic_clicked();
}
void MainWindow::on_CenterY0_valueChanged(int value)
{
info.c0.y = value;
if (info.gradient_type != c_BrushTypePathRadialGradient) return;
info.ginfo = NSStructures::GInfoConstructor::get_radial(info.c0, info.c1, info.r0, info.r1,
0, 1, info.cont_b, info.cont_f);
on_RenderPic_clicked();
}
void MainWindow::on_CenterX1_valueChanged(int value)
{
info.c1.x = value;
if (info.gradient_type != c_BrushTypePathRadialGradient) return;
info.ginfo = NSStructures::GInfoConstructor::get_radial(info.c0, info.c1, info.r0, info.r1,
0, 1, info.cont_b, info.cont_f);
on_RenderPic_clicked();
}
void MainWindow::on_CenterY1_valueChanged(int value)
{
info.c1.y= value;
if (info.gradient_type != c_BrushTypePathRadialGradient) return;
info.ginfo = NSStructures::GInfoConstructor::get_radial(info.c0, info.c1, info.r0, info.r1,
0, 1, info.cont_b, info.cont_f);
on_RenderPic_clicked();
}
void MainWindow::on_r0slider_valueChanged(int value)
{
info.r0 = value;
if (info.gradient_type != c_BrushTypePathRadialGradient) return;
info.ginfo = NSStructures::GInfoConstructor::get_radial(info.c0, info.c1, info.r0, info.r1,
0, 1, info.cont_b, info.cont_f);
on_RenderPic_clicked();
}
void MainWindow::on_r1slider_valueChanged(int value)
{
info.r1 = value;
if (info.gradient_type != c_BrushTypePathRadialGradient) return;
info.ginfo = NSStructures::GInfoConstructor::get_radial(info.c0, info.c1, info.r0, info.r1,
0, 1, info.cont_b, info.cont_f);
on_RenderPic_clicked();
}
void MainWindow::on_ContinueForvard_clicked(bool checked)
{
info.cont_f= checked;
if (info.gradient_type == c_BrushTypePathNewLinearGradient)
{
info.ginfo = NSStructures::GInfoConstructor::get_linear(info.p0, info.p1, 0, 1, info.cont_b, info.cont_f);
on_RenderPic_clicked();
}
if (info.gradient_type == c_BrushTypePathRadialGradient)
{
info.ginfo = NSStructures::GInfoConstructor::get_radial(info.c0, info.c1, info.r0, info.r1,
0, 1, info.cont_b, info.cont_f);
on_RenderPic_clicked();
}
}
void MainWindow::on_ContinueBack_clicked(bool checked)
{
info.cont_b = checked;
if (info.gradient_type == c_BrushTypePathNewLinearGradient)
{
info.ginfo = NSStructures::GInfoConstructor::get_linear(info.p0, info.p1, 0, 1, info.cont_b, info.cont_f);
on_RenderPic_clicked();
}
if (info.gradient_type == c_BrushTypePathRadialGradient)
{
info.ginfo = NSStructures::GInfoConstructor::get_radial(info.c0, info.c1, info.r0, info.r1,
0, 1, info.cont_b, info.cont_f);
on_RenderPic_clicked();
}
}

View File

@ -30,6 +30,13 @@ struct Color {
};
struct Info {
// Для теста адаптора все вынес в инфо.
float r0, r1;
NSStructures::Point c0, c1;
NSStructures::Point p0, p1;
bool cont_b, cont_f;
NSStructures::GradientInfo ginfo;
int gradient_type;
std::vector<LONG> c;
@ -40,6 +47,16 @@ struct Info {
p = {0.0,0.2,0.4,0.6,0.8,1};
n_colors = 6;
ginfo.shading.shading_type = NSStructures::ShadingInfo::Parametric;
r0 = 0;
r1 = 100;
c0 = {200, 200};
c1 = {200, 200};
p0 = {0, 0};
p1 = {400, 400};
cont_b = cont_f = false;
};
~Info() {
}
@ -62,39 +79,37 @@ public:
private slots:
void on_RenderPic_clicked();
void on_AngleSlider_sliderMoved(int position);
void on_OffsetSlider_sliderMoved(int position);
void on_StretchSlide_sliderMoved(int position);
void on_DiscreteStepSlider_sliderMoved(int position);
void on_PathType_itemDoubleClicked(QListWidgetItem *item);
void on_PathType_itemClicked(QListWidgetItem *item);
void on_GradientType_itemDoubleClicked(QListWidgetItem *item);
void on_GradientType_itemClicked(QListWidgetItem *item);
void on_LittleRadiusSlider_sliderMoved(int position);
void on_LargeRadiusSlider_sliderMoved(int position);
void on_XSizeSlider_sliderMoved(int position);
void on_ycenterSlider_sliderMoved(int position);
void on_xcenterSlider_sliderMoved(int position);
void on_YSizeSlider_sliderMoved(int position);
void on_ColorSpaces_itemClicked(QListWidgetItem *item);
void on_ColorSpaces_itemDoubleClicked(QListWidgetItem *item);
void on_Reflected_CheckBox_clicked(bool checked);
void on_Point1X_sliderMoved(int position);
void on_Point1Y_sliderMoved(int position);
void on_Point2X_sliderMoved(int position);
void on_Point2Y_sliderMoved(int position);
void on_CenterX0_valueChanged(int value);
void on_CenterY0_valueChanged(int value);
void on_CenterX1_valueChanged(int value);
void on_CenterY1_valueChanged(int value);
void on_r0slider_valueChanged(int value);
void on_r1slider_valueChanged(int value);
void on_ContinueForvard_clicked(bool checked);
void on_ContinueBack_clicked(bool checked);
private:
Ui::MainWindow *ui;

View File

@ -52,412 +52,23 @@
<bool>false</bool>
</property>
</widget>
<widget class="QLabel" name="labelName">
<property name="geometry">
<rect>
<x>610</x>
<y>10</y>
<width>91</width>
<height>21</height>
</rect>
</property>
<property name="text">
<string>Set Params</string>
</property>
</widget>
<widget class="QSlider" name="AngleSlider">
<property name="geometry">
<rect>
<x>470</x>
<y>460</y>
<width>211</width>
<height>21</height>
</rect>
</property>
<property name="maximum">
<number>100</number>
</property>
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
</widget>
<widget class="QLabel" name="TextLable2">
<property name="geometry">
<rect>
<x>470</x>
<y>440</y>
<width>58</width>
<height>16</height>
</rect>
</property>
<property name="text">
<string>Angle</string>
</property>
</widget>
<widget class="QLabel" name="lable_angle">
<property name="geometry">
<rect>
<x>530</x>
<y>440</y>
<width>58</width>
<height>16</height>
</rect>
</property>
<property name="text">
<string/>
</property>
</widget>
<widget class="QSlider" name="OffsetSlider">
<property name="geometry">
<rect>
<x>470</x>
<y>410</y>
<width>211</width>
<height>16</height>
</rect>
</property>
<property name="maximum">
<number>100</number>
</property>
<property name="value">
<number>50</number>
</property>
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
</widget>
<widget class="QLabel" name="labelName2">
<property name="geometry">
<rect>
<x>470</x>
<y>380</y>
<width>58</width>
<height>16</height>
</rect>
</property>
<property name="text">
<string>LinOffset</string>
</property>
</widget>
<widget class="QLabel" name="lable_offset">
<property name="geometry">
<rect>
<x>550</x>
<y>380</y>
<width>58</width>
<height>16</height>
</rect>
</property>
<property name="text">
<string/>
</property>
</widget>
<widget class="QSlider" name="StretchSlide">
<property name="geometry">
<rect>
<x>470</x>
<y>350</y>
<width>211</width>
<height>16</height>
</rect>
</property>
<property name="maximum">
<number>100</number>
</property>
<property name="value">
<number>50</number>
</property>
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
</widget>
<widget class="QLabel" name="labelName3">
<property name="geometry">
<rect>
<x>470</x>
<y>320</y>
<width>58</width>
<height>16</height>
</rect>
</property>
<property name="text">
<string>Stretch</string>
</property>
</widget>
<widget class="QLabel" name="lable_stretch">
<property name="geometry">
<rect>
<x>550</x>
<y>320</y>
<width>58</width>
<height>16</height>
</rect>
</property>
<property name="text">
<string/>
</property>
</widget>
<widget class="QSlider" name="XSizeSlider">
<property name="geometry">
<rect>
<x>750</x>
<y>320</y>
<width>16</width>
<height>160</height>
</rect>
</property>
<property name="maximum">
<number>100</number>
</property>
<property name="value">
<number>50</number>
</property>
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
</widget>
<widget class="QSlider" name="YSizeSlider">
<property name="geometry">
<rect>
<x>810</x>
<y>320</y>
<width>16</width>
<height>160</height>
</rect>
</property>
<property name="maximum">
<number>100</number>
</property>
<property name="value">
<number>50</number>
</property>
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
</widget>
<widget class="QSlider" name="LittleRadiusSlider">
<property name="geometry">
<rect>
<x>470</x>
<y>290</y>
<width>211</width>
<height>16</height>
</rect>
</property>
<property name="maximum">
<number>100</number>
</property>
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
</widget>
<widget class="QSlider" name="LargeRadiusSlider">
<property name="geometry">
<rect>
<x>470</x>
<y>230</y>
<width>211</width>
<height>16</height>
</rect>
</property>
<property name="maximum">
<number>100</number>
</property>
<property name="value">
<number>100</number>
</property>
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
</widget>
<widget class="QSlider" name="DiscreteStepSlider">
<property name="geometry">
<rect>
<x>470</x>
<y>170</y>
<width>211</width>
<height>16</height>
</rect>
</property>
<property name="maximum">
<number>100</number>
</property>
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
</widget>
<widget class="QLabel" name="labelName4">
<property name="geometry">
<rect>
<x>730</x>
<y>300</y>
<width>58</width>
<height>16</height>
</rect>
</property>
<property name="text">
<string>xsize</string>
</property>
</widget>
<widget class="QLabel" name="labelName5">
<property name="geometry">
<rect>
<x>800</x>
<y>300</y>
<width>58</width>
<height>16</height>
</rect>
</property>
<property name="text">
<string>ysize</string>
</property>
</widget>
<widget class="Line" name="line">
<property name="geometry">
<rect>
<x>697</x>
<y>280</y>
<width>161</width>
<height>20</height>
</rect>
</property>
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
</widget>
<widget class="QLabel" name="labelName6">
<property name="geometry">
<rect>
<x>470</x>
<y>260</y>
<width>81</width>
<height>16</height>
</rect>
</property>
<property name="text">
<string>LittleRadius</string>
</property>
</widget>
<widget class="QLabel" name="lable_little_radius">
<property name="geometry">
<rect>
<x>570</x>
<y>260</y>
<width>58</width>
<height>16</height>
</rect>
</property>
<property name="text">
<string/>
</property>
</widget>
<widget class="QLabel" name="labelName7">
<property name="geometry">
<rect>
<x>470</x>
<y>200</y>
<width>81</width>
<height>16</height>
</rect>
</property>
<property name="text">
<string>LargeRadius</string>
</property>
</widget>
<widget class="QLabel" name="lable_large_radius">
<property name="geometry">
<rect>
<x>580</x>
<y>200</y>
<width>58</width>
<height>16</height>
</rect>
</property>
<property name="text">
<string/>
</property>
</widget>
<widget class="QLabel" name="labelName8">
<property name="geometry">
<rect>
<x>470</x>
<y>140</y>
<width>81</width>
<height>16</height>
</rect>
</property>
<property name="text">
<string>DiscreteStep</string>
</property>
</widget>
<widget class="QLabel" name="label_discrete">
<property name="geometry">
<rect>
<x>580</x>
<y>140</y>
<width>81</width>
<height>16</height>
</rect>
</property>
<property name="text">
<string/>
</property>
</widget>
<widget class="QSlider" name="xcenterSlider">
<property name="geometry">
<rect>
<x>750</x>
<y>110</y>
<width>16</width>
<height>160</height>
</rect>
</property>
<property name="maximum">
<number>100</number>
</property>
<property name="value">
<number>50</number>
</property>
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
</widget>
<widget class="QSlider" name="ycenterSlider">
<property name="geometry">
<rect>
<x>810</x>
<y>110</y>
<width>16</width>
<height>160</height>
</rect>
</property>
<property name="maximum">
<number>100</number>
</property>
<property name="value">
<number>50</number>
</property>
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
</widget>
<widget class="QListWidget" name="GradientType">
<property name="geometry">
<rect>
<x>20</x>
<y>400</y>
<width>81</width>
<width>171</width>
<height>161</height>
</rect>
</property>
<item>
<property name="text">
<string>Linear</string>
<string>Functional</string>
</property>
</item>
<item>
<property name="text">
<string>Diamond</string>
<string>Linear</string>
</property>
</item>
<item>
@ -467,7 +78,32 @@
</item>
<item>
<property name="text">
<string>Conical</string>
<string>Triangle</string>
</property>
</item>
<item>
<property name="text">
<string>CoonsPatch</string>
</property>
</item>
<item>
<property name="text">
<string>TesnorCoonsPatch</string>
</property>
</item>
<item>
<property name="text">
<string>TriangleParametric</string>
</property>
</item>
<item>
<property name="text">
<string>CoonsPatchParametric</string>
</property>
</item>
<item>
<property name="text">
<string>TensorCoonsPatchParametric</string>
</property>
</item>
</widget>
@ -484,127 +120,6 @@
<string>Gradient Type</string>
</property>
</widget>
<widget class="QListWidget" name="PathType">
<property name="geometry">
<rect>
<x>120</x>
<y>400</y>
<width>71</width>
<height>161</height>
</rect>
</property>
<item>
<property name="text">
<string>Square</string>
</property>
</item>
<item>
<property name="text">
<string>Patch</string>
</property>
</item>
<item>
<property name="text">
<string>Circle</string>
</property>
</item>
<item>
<property name="text">
<string>Triangle</string>
</property>
</item>
</widget>
<widget class="QLabel" name="label_2">
<property name="geometry">
<rect>
<x>130</x>
<y>570</y>
<width>58</width>
<height>16</height>
</rect>
</property>
<property name="text">
<string>Path</string>
</property>
</widget>
<widget class="QLabel" name="label_3">
<property name="geometry">
<rect>
<x>730</x>
<y>90</y>
<width>58</width>
<height>16</height>
</rect>
</property>
<property name="text">
<string>xcenter</string>
</property>
</widget>
<widget class="QLabel" name="label_4">
<property name="geometry">
<rect>
<x>790</x>
<y>90</y>
<width>58</width>
<height>16</height>
</rect>
</property>
<property name="text">
<string>ycenter</string>
</property>
</widget>
<widget class="QLabel" name="lable_xcenter">
<property name="geometry">
<rect>
<x>750</x>
<y>270</y>
<width>58</width>
<height>16</height>
</rect>
</property>
<property name="text">
<string>1</string>
</property>
</widget>
<widget class="QLabel" name="lable_ycenter">
<property name="geometry">
<rect>
<x>810</x>
<y>270</y>
<width>58</width>
<height>16</height>
</rect>
</property>
<property name="text">
<string>1</string>
</property>
</widget>
<widget class="QLabel" name="lable_xsize">
<property name="geometry">
<rect>
<x>750</x>
<y>480</y>
<width>58</width>
<height>16</height>
</rect>
</property>
<property name="text">
<string>1</string>
</property>
</widget>
<widget class="QLabel" name="lable_ysize">
<property name="geometry">
<rect>
<x>810</x>
<y>480</y>
<width>51</width>
<height>20</height>
</rect>
</property>
<property name="text">
<string>1</string>
</property>
</widget>
<widget class="QListWidget" name="ColorSpaces">
<property name="geometry">
<rect>
@ -635,25 +150,6 @@
</property>
</item>
</widget>
<widget class="QCheckBox" name="Reflected_CheckBox">
<property name="enabled">
<bool>true</bool>
</property>
<property name="geometry">
<rect>
<x>600</x>
<y>80</y>
<width>81</width>
<height>22</height>
</rect>
</property>
<property name="text">
<string>Continue</string>
</property>
<property name="checked">
<bool>true</bool>
</property>
</widget>
<widget class="QLabel" name="label_5">
<property name="geometry">
<rect>
@ -680,6 +176,252 @@
<string>Double Click to change</string>
</property>
</widget>
<widget class="QSlider" name="Point1X">
<property name="geometry">
<rect>
<x>460</x>
<y>30</y>
<width>160</width>
<height>16</height>
</rect>
</property>
<property name="maximum">
<number>400</number>
</property>
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
</widget>
<widget class="QSlider" name="Point1Y">
<property name="geometry">
<rect>
<x>460</x>
<y>60</y>
<width>160</width>
<height>16</height>
</rect>
</property>
<property name="maximum">
<number>400</number>
</property>
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
</widget>
<widget class="QSlider" name="Point2X">
<property name="geometry">
<rect>
<x>460</x>
<y>90</y>
<width>160</width>
<height>16</height>
</rect>
</property>
<property name="maximum">
<number>400</number>
</property>
<property name="value">
<number>400</number>
</property>
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
</widget>
<widget class="QSlider" name="Point2Y">
<property name="geometry">
<rect>
<x>460</x>
<y>120</y>
<width>160</width>
<height>16</height>
</rect>
</property>
<property name="maximum">
<number>400</number>
</property>
<property name="value">
<number>400</number>
</property>
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
</widget>
<widget class="QLabel" name="label_2">
<property name="geometry">
<rect>
<x>460</x>
<y>10</y>
<width>151</width>
<height>18</height>
</rect>
</property>
<property name="text">
<string>Points XY Linear</string>
</property>
</widget>
<widget class="QLabel" name="label_3">
<property name="geometry">
<rect>
<x>740</x>
<y>170</y>
<width>58</width>
<height>18</height>
</rect>
</property>
<property name="text">
<string>r0 r1</string>
</property>
</widget>
<widget class="QSlider" name="r0slider">
<property name="geometry">
<rect>
<x>720</x>
<y>200</y>
<width>160</width>
<height>16</height>
</rect>
</property>
<property name="maximum">
<number>200</number>
</property>
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
</widget>
<widget class="QSlider" name="r1slider">
<property name="geometry">
<rect>
<x>720</x>
<y>230</y>
<width>160</width>
<height>16</height>
</rect>
</property>
<property name="maximum">
<number>200</number>
</property>
<property name="value">
<number>100</number>
</property>
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
</widget>
<widget class="QSlider" name="CenterX0">
<property name="geometry">
<rect>
<x>720</x>
<y>30</y>
<width>160</width>
<height>16</height>
</rect>
</property>
<property name="maximum">
<number>400</number>
</property>
<property name="value">
<number>200</number>
</property>
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
</widget>
<widget class="QSlider" name="CenterY0">
<property name="geometry">
<rect>
<x>720</x>
<y>60</y>
<width>160</width>
<height>16</height>
</rect>
</property>
<property name="maximum">
<number>400</number>
</property>
<property name="value">
<number>200</number>
</property>
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
</widget>
<widget class="QSlider" name="CenterX1">
<property name="geometry">
<rect>
<x>720</x>
<y>90</y>
<width>160</width>
<height>16</height>
</rect>
</property>
<property name="maximum">
<number>400</number>
</property>
<property name="value">
<number>200</number>
</property>
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
</widget>
<widget class="QSlider" name="CenterY1">
<property name="geometry">
<rect>
<x>720</x>
<y>120</y>
<width>160</width>
<height>16</height>
</rect>
</property>
<property name="maximum">
<number>400</number>
</property>
<property name="value">
<number>200</number>
</property>
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
</widget>
<widget class="QLabel" name="label_4">
<property name="geometry">
<rect>
<x>740</x>
<y>10</y>
<width>131</width>
<height>18</height>
</rect>
</property>
<property name="text">
<string>CenterXY Radial</string>
</property>
</widget>
<widget class="QCheckBox" name="ContinueForvard">
<property name="geometry">
<rect>
<x>380</x>
<y>420</y>
<width>141</width>
<height>24</height>
</rect>
</property>
<property name="text">
<string>Continue Forward</string>
</property>
</widget>
<widget class="QCheckBox" name="ContinueBack">
<property name="geometry">
<rect>
<x>380</x>
<y>460</y>
<width>141</width>
<height>24</height>
</rect>
</property>
<property name="text">
<string>Continue Back</string>
</property>
</widget>
</widget>
<widget class="QMenuBar" name="menubar">
<property name="geometry">