КомпГр_ЛР3_Заболотников_Петрова_Романова_9373
.pdfvoid 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