Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

КомпГр_ЛР3_Заболотников_Петрова_Романова_9373

.pdf
Скачиваний:
23
Добавлен:
20.06.2023
Размер:
1.31 Mб
Скачать

void Scene::show_AddLine(bool click){ var_Alpha = click; this->update();

}

void Scene::keyPressEvent(QKeyEvent* pe)

{

switch (pe->key())

{

case Qt::Key_Plus: scale_Plus();

break;

case Qt::Key_Equal: scale_Plus();

break;

case Qt::Key_Minus: scale_Minus();

break;

case Qt::Key_Up: rotation_X(var_Rot_X+1);

break;

case Qt::Key_Down: rotation_X(var_Rot_X-1);

break;

case Qt::Key_Left: rotation_Y(var_Rot_Y+1);

break;

case Qt::Key_Right: rotation_Y(var_Rot_Y-1);

break;

case Qt::Key_Z: rotation_Z(var_Rot_Z+1);

break;

case Qt::Key_X: rotation_Z(var_Rot_Z-1);

break;

default:

qDebug() << "Not working";

}

this->update();

}

void Scene::invert_X(){ var_Inv_X *= -1; this->update();

}

void Scene::invert_Y(){ var_Inv_Y *= -1; this->update();

}

Файл «setsizewindow.cpp»

#include "setsizewindow.h"

21

SetSizeWindow::SetSizeWindow(QWidget *parent) : QWidget(parent)

{

qsb_ValueOfCol = new QSpinBox(); qsb_ValueOfRow = new QSpinBox();

ql_ValueOfRow = new QLabel ("Row"); ql_ValueOfCol = new QLabel ("Col");

qpb_ValueOfMatrice = new QPushButton("Ok");

qhbl_ValueOfMatrice = new QHBoxLayout();

qsb_ValueOfCol->setRange(3,7); qsb_ValueOfRow->setRange(3,7);

qhbl_ValueOfMatrice->addWidget(qsb_ValueOfRow); qhbl_ValueOfMatrice->addWidget(ql_ValueOfRow); qhbl_ValueOfMatrice->addWidget(qsb_ValueOfCol); qhbl_ValueOfMatrice->addWidget(ql_ValueOfCol);

qhbl_ValueOfMatrice->addWidget(qpb_ValueOfMatrice);

connect(qpb_ValueOfMatrice,SIGNAL(clicked()),SLOT(emitSignalOfMatrice()));

this->setLayout(qhbl_ValueOfMatrice);

}

void SetSizeWindow::emitSignalOfMatrice(){

emit ValueOfMatrice(qsb_ValueOfRow->value(), qsb_ValueOfCol->value());

this->deleteLater();

}

Файл «surface_bezier.cpp»

#include "surface_bezier.h"

Surface_Bezier::Surface_Bezier()

{

}

Surface_Bezier::Surface_Bezier(vector<vector<double> > x, vector<vector<double> > y, vector<vector<double> > z, int depth){

for(int i=0;i<x.size();i++) row.push_back(Curve_Bezier(x[i],y[i],z[i],depth));

//row.push_back(Curve_Bezier::Curve_Bezier(x[i],y[i],z[i],depth)); for(int i=0;i<row[0].get_X().size();i++){

vector <double> temp_x; vector <double> temp_y; vector <double> temp_z;

for(int j=0;j<x.size();j++){ temp_x.push_back(row[j].get_X()[i]); temp_y.push_back(row[j].get_Y()[i]); temp_z.push_back(row[j].get_Z()[i]);

}

22

col.push_back(Curve_Bezier(temp_x,temp_y,temp_z,depth));//Curve_Bezier::Curve _Bezier(temp_x,temp_y,temp_z,depth)

temp_x.clear(); temp_y.clear(); temp_z.clear();

}

}

void Surface_Bezier::set_surf(vector<vector<double> > x, vector<vector<double> > y, vector<vector<double> > z, int depth)

{

row.clear();

col.clear();

for(int i=0;i<x.size();i++) row.push_back(Curve_Bezier(x[i],y[i],z[i],depth));

//row.push_back(Curve_Bezier::Curve_Bezier(x[i],y[i],z[i],depth)); for(int i=0;i<row[0].get_X().size();i++){

vector <double> temp_x; vector <double> temp_y; vector <double> temp_z;

for(int j=0;j<x.size();j++){ temp_x.push_back(row[j].get_X()[i]); temp_y.push_back(row[j].get_Y()[i]); temp_z.push_back(row[j].get_Z()[i]);

}

col.push_back(Curve_Bezier(temp_x,temp_y,temp_z,depth));//Curve_Bezier::Curve _Bezier(temp_x,temp_y,temp_z,depth)

temp_x.clear(); temp_y.clear(); temp_z.clear();

}

}

void Surface_Bezier::qs(){

}

vector <Curve_Bezier> Surface_Bezier::get_Col(){ return col;

}

vector <Curve_Bezier> Surface_Bezier::get_Row(){ return row;

}

Файл «curve_bezier.h»

#include "curve_bezier.h"

Curve_Bezier::Curve_Bezier()

{

}

Curve_Bezier::Curve_Bezier(vector <double> root_x, vector <double> root_y, vector <double> root_z,

23

int depth)

{

calculate(root_x,root_y,root_z,depth);

}

void Curve_Bezier::calculate(vector<double> root_x, vector<double> root_y, vector<double> root_z, int depth){

vector <double> a_x; vector <double> a_y; vector <double> a_z; vector <double> b_x; vector <double> b_y; vector <double> b_z;

int size = root_x.size(); double turn = 100*depth;

for(int i = 1; i < turn; i++){

a_x.clear(); a_y.clear(); a_z.clear(); b_x.clear(); b_y.clear(); b_z.clear();

a_x = root_x; a_y = root_y; a_z = root_z;

for(int j = 0; j < size - 1; j++){

for(int k = 0; k < size - 1 - j; k++){

b_x.push_back(coord(a_x[k],a_x[k+1],i/turn)); b_y.push_back(coord(a_y[k],a_y[k+1],i/turn)); b_z.push_back(coord(a_z[k],a_z[k+1],i/turn));

}

if(j == size - 2){ x.push_back(b_x.back()); y.push_back(b_y.back()); z.push_back(b_z.back());

}

else{ a_x.clear(); a_x = b_x; b_x.clear();

a_y.clear(); a_y = b_y; b_y.clear();

a_z.clear(); a_z = b_z; b_z.clear();

}

}

}

}

double Curve_Bezier::coord(double first, double end, double turn){ if(first == end)

24

return first;

double temp = end - first; return first + temp*turn;

}

void Curve_Bezier::show(){

qDebug() << "Show coordinate of point of Curve Bezier"; for(int i = 0;i<x.size();i++){

qDebug() << x[i] << " , " << y[i] << " , " << z[i];

}

}

vector <double> Curve_Bezier::get_X(){ return x;

}

vector <double> Curve_Bezier::get_Y(){ return y;

}

vector <double> Curve_Bezier::get_Z(){ return z;

}

25