#include "AngleAdjTool.h" #include "ui_AngleAdjTool.h" #include "math.h" #include #include #define PI 3.1415926 AngleAdjTool::AngleAdjTool(QWidget *parent) : QDialog(parent), Ang_UI(new Ui::AngleAdjTool) { Ang_UI->setupUi(this); setWindowFlags(windowFlags()& ~Qt::WindowMaximizeButtonHint); setFixedSize(this->width(), this->height()); this->setWindowFlags(this->windowFlags() |Qt::Dialog); this->setWindowModality(Qt::ApplicationModal); connect(Ang_UI->okButton, SIGNAL(clicked()), this, SLOT(accept())); connect(Ang_UI->cancelButton, SIGNAL(clicked()), this, SLOT(reject())); connect(Ang_UI->cancelButton, SIGNAL(clicked()), this, SLOT(cancelAngle_SLOT())); maxSlider = 50; minSlider = -50; Ang_UI->headSlider->setMinimum(minSlider); Ang_UI->headSlider->setMaximum(maxSlider); Ang_UI->headSlider->setSingleStep(1); Ang_UI->tailSlider->setMinimum(minSlider); Ang_UI->tailSlider->setMaximum(maxSlider); Ang_UI->tailSlider->setSingleStep(1); Ang_UI->head_spinBox->setRange(minSlider, maxSlider); Ang_UI->tail_spinBox->setRange(minSlider, maxSlider); Ang_UI->head_spinBox->setValue(0); Ang_UI->tail_spinBox->setValue(0); connect(Ang_UI->head_spinBox, SIGNAL(valueChanged(int)), Ang_UI->headSlider, SLOT(setValue(int))); //connect(Ang_UI->headSlider, SIGNAL(valueChanged(int)), Ang_UI->head_spinBox, SLOT(setValue(int))); connect(Ang_UI->tail_spinBox, SIGNAL(valueChanged(int)), Ang_UI->tailSlider, SLOT(setValue(int))); connect(Ang_UI->tailSlider, SIGNAL(valueChanged(int)), Ang_UI->tail_spinBox, SLOT(setValue(int))); connect(Ang_UI->headSlider, SIGNAL(valueChanged(int)), this, SLOT(headAdd(int))); connect(Ang_UI->tailSlider, SIGNAL(valueChanged(int)), this, SLOT(tailAdd(int))); connect(Ang_UI->headSlider, SIGNAL(valueChanged(int)), this, SLOT(headLinkTail_SLOT(int))); connect(Ang_UI->headSlider, SIGNAL(valueChanged(int)), this, SLOT(calcuAngle())); connect(Ang_UI->tailSlider, SIGNAL(valueChanged(int)), this, SLOT(calcuAngle())); scene = new QGraphicsScene; lineItem = new QGraphicsLineItem(0,0, 0,110); initGraph(); scene->addItem(lineItem); Ang_UI->graphicsView->setScene(scene); connect(Ang_UI->head_lineEdit, SIGNAL(textChanged(QString)),this,SLOT(sdepChange_SLOT())); connect(Ang_UI->tail_lineEdit, SIGNAL(textChanged(QString)),this,SLOT(edepChange_SLOT())); } AngleAdjTool::~AngleAdjTool() { delete Ang_UI; delete scene; //delete lineItem; } void AngleAdjTool::depCheck() { if(Sdep < realSdep){Sdep = realSdep;Ang_UI->head_lineEdit->setText(QString("%1").arg(Sdep));} if(edep > realEdep){edep = realEdep;Ang_UI->tail_lineEdit->setText(QString("%1").arg(edep));} if(edep < Sdep)edep = Sdep; } void AngleAdjTool::setAngDep(float rsd, float red, float sd, float ed) { realSdep = rsd; realEdep = red; Sdep = sd; edep = ed; depCheck(); Ang_UI->head_lineEdit->setText(QString("%1").arg(Sdep)); Ang_UI->tail_lineEdit->setText(QString("%1").arg(edep)); Ang_UI->head_lineEdit->setValidator(new QIntValidator(-99999,99999,this)); Ang_UI->tail_lineEdit->setValidator(new QIntValidator(-99999,99999,this)); } void AngleAdjTool::setLineEditable() { setHeadTailValue(0,0); Ang_UI->head_lineEdit->setEnabled(true); Ang_UI->tail_lineEdit->setEnabled(true); } void AngleAdjTool::setHeadTailValue(int head, int tail) { Ang_UI->head_spinBox->setValue(head); Ang_UI->tail_spinBox->setValue(tail); } void AngleAdjTool::setEachSetValue(float value) { eachSetValue = value; } void AngleAdjTool::calcuAngle() { QString t = Ang_UI->head_lineEdit->text(); float headsValue = t.toFloat(); t = Ang_UI->tail_lineEdit->text(); float tailsValue = t.toFloat(); float headOffset = Ang_UI->head_spinBox->value() / 10.0; float tailOffset = Ang_UI->tail_spinBox->value() / 10.0; float x = tailsValue - headsValue; float y = tailOffset - headOffset; float angle = atan2(y, x)*180/PI; Ang_UI->Angle_lineEdit->setText(QString("%1").arg(angle)); emit sendAngleData(headsValue, tailsValue, headOffset, tailOffset, angle); } void AngleAdjTool::setSliderRange(int value) { maxSlider = value / 2 * 10; minSlider = -1 * (value / 2 * 10); Ang_UI->headSlider->setMinimum(minSlider); Ang_UI->headSlider->setMaximum(maxSlider); Ang_UI->tailSlider->setMinimum(minSlider); Ang_UI->tailSlider->setMaximum(maxSlider); Ang_UI->head_spinBox->setRange(minSlider, maxSlider); Ang_UI->tail_spinBox->setRange(minSlider, maxSlider); } void AngleAdjTool::cancelAngle_SLOT() { emit cancelAngle(); } void AngleAdjTool::headLinkTail_SLOT(int changeValue) { Ang_UI->head_lineEdit->setEnabled(false); Ang_UI->tail_lineEdit->setEnabled(false); int value = changeValue - Ang_UI->head_spinBox->value(); Ang_UI->head_spinBox->setValue(changeValue); int tailSpinValue = Ang_UI->tail_spinBox->value(); int tailSpinValue_2 = tailSpinValue + value; Ang_UI->tail_spinBox->setValue(tailSpinValue_2); } bool AngleAdjTool::calcuCurAve(float m_value[], int N) { if(N / 2 < 2) return false; float headSum, tailSum; headSum = 0; //tailSum = 0; for(int i = 0; i < N; i++) headSum += m_value[i]; headAve = headSum / N; /* for(int i = N/2; i < N; i++) tailSum += m_value[i]; tailAve = tailSum / (N - (N/2)); */ QString t = Ang_UI->head_lineEdit->text(); float headsValue = t.toFloat(); t = Ang_UI->tail_lineEdit->text(); float tailsValue = t.toFloat(); float x = (tailsValue - headsValue) / 2; float y = headAve - m_value[0]; float angle = atan2(y, x)*180/PI; Ang_UI->aveAngle_lineEdit->setText(QString("%1").arg(angle)); QPainter paint; paint.begin(Ang_UI->graphicsView); paint.setBrush(Qt::black); paint.drawRect(rect()); float xSet = 110 * cos(angle*PI/180.0f); float ySet = xSet * tan(angle*PI/180.0f); lineItem->setLine(0, 0, ySet, xSet); lineItem->setPen(QPen(Qt::blue)); Ang_UI->graphicsView->show(); return true; } void AngleAdjTool::initGraph() { QGraphicsLineItem *lineItems[19]; int angle = -90; for(int i = 0; i < 19; i++){ lineItems[i] = new QGraphicsLineItem(0,0,0,0); float xSet = 130 * cos((angle + i*10) * PI / 180.0f); float ySet = xSet * tan((angle + i*10) * PI / 180.0f); lineItems[i]->setLine(0, 0, ySet, xSet); lineItems[i]->setPen(QPen(Qt::lightGray)); scene->addItem(lineItems[i]); } } void AngleAdjTool::tailAdd(int v) { Ang_UI->head_lineEdit->setEnabled(false); Ang_UI->tail_lineEdit->setEnabled(false); float addchange = v/10 * eachSetValue; Ang_UI->lineEdit_2->setText(QString("%1").arg(addchange)); } void AngleAdjTool::headAdd(int v) { float addchange = v/10 * eachSetValue; Ang_UI->lineEdit->setText(QString("%1").arg(addchange)); } void AngleAdjTool::sdepChange_SLOT() { QString t = Ang_UI->head_lineEdit->text(); Sdep = t.toFloat(); depCheck(); } void AngleAdjTool::edepChange_SLOT() { QString t = Ang_UI->tail_lineEdit->text(); edep = t.toFloat(); depCheck(); }