logplus/WellLogUI/src/AngleAdjTool.cpp
2025-10-29 17:23:30 +08:00

232 lines
6.7 KiB
C++

#include "AngleAdjTool.h"
#include "ui_AngleAdjTool.h"
#include "math.h"
#include <qgraphicsscene.h>
#include <qgraphicsitem.h>
#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();
}