添加波列数据显示逻辑
This commit is contained in:
parent
a2853b1c17
commit
9b7c8bbda1
|
|
@ -41,6 +41,7 @@ signals:
|
|||
void sig_ShowCurve(QString strSlfName, QString strName);//曲线数据查看
|
||||
void sig_DepthShift(QString strSlfName, QString strName, double DepthOffset);//深度移动
|
||||
void sig_ShowTable(QString strSlfName, QString strName);//表格数据查看
|
||||
void sig_ShowWave(QString strSlfName, QString strName);//波列数据查看
|
||||
void sig_WelllogInformation(QString strSlfName);//编辑测井信息
|
||||
|
||||
// 0.Uuid 1.WellName 2.SlfName 3.lineName 4.Type 5.W
|
||||
|
|
|
|||
232
DataMgr/src/AngleAdjTool.cpp
Normal file
232
DataMgr/src/AngleAdjTool.cpp
Normal file
|
|
@ -0,0 +1,232 @@
|
|||
#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();
|
||||
}
|
||||
52
DataMgr/src/AngleAdjTool.h
Normal file
52
DataMgr/src/AngleAdjTool.h
Normal file
|
|
@ -0,0 +1,52 @@
|
|||
#ifndef ANGLEADJTOOL_H
|
||||
#define ANGLEADJTOOL_H
|
||||
|
||||
#include <QDialog>
|
||||
#include <qgraphicsscene.h>
|
||||
#include <qgraphicsitem.h>
|
||||
|
||||
namespace Ui {
|
||||
class AngleAdjTool;
|
||||
}
|
||||
|
||||
class AngleAdjTool : public QDialog
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
signals:
|
||||
void sendAngleData(float,float,float,float,float);
|
||||
void cancelAngle();
|
||||
public:
|
||||
explicit AngleAdjTool(QWidget *parent = 0);
|
||||
~AngleAdjTool();
|
||||
|
||||
void setAngDep(float, float, float, float);
|
||||
void setLineEditable();
|
||||
void setSliderRange(int);
|
||||
void setHeadTailValue(int,int);
|
||||
void setEachSetValue(float);
|
||||
bool calcuCurAve(float[], int);
|
||||
private:
|
||||
Ui::AngleAdjTool *Ang_UI;
|
||||
float Sdep, edep, realSdep, realEdep; //平滑深度范围, 实际井深度范围
|
||||
float eachSetValue;
|
||||
int maxSlider, minSlider;
|
||||
float headAve, tailAve;
|
||||
QGraphicsScene *scene;
|
||||
QGraphicsLineItem *lineItem;
|
||||
QGraphicsLineItem *lineItems;
|
||||
|
||||
void depCheck();
|
||||
void initGraph();
|
||||
|
||||
private slots:
|
||||
void calcuAngle();
|
||||
void cancelAngle_SLOT();
|
||||
void headLinkTail_SLOT(int);
|
||||
void headAdd(int);
|
||||
void tailAdd(int);
|
||||
void sdepChange_SLOT();
|
||||
void edepChange_SLOT();
|
||||
};
|
||||
|
||||
#endif // ANGLEADJTOOL_H
|
||||
294
DataMgr/src/CurveComputePage.cpp
Normal file
294
DataMgr/src/CurveComputePage.cpp
Normal file
|
|
@ -0,0 +1,294 @@
|
|||
#include "CurveComputePage.h"
|
||||
#include "ui_CurveComputePage.h"
|
||||
#include "DataHelper.h"
|
||||
#include <QDoubleValidator>
|
||||
// #include "DataImport.h"
|
||||
// #include "ObjProject.h"
|
||||
CurveComputePage::CurveComputePage(QWidget *parent)
|
||||
: QWidget(parent)
|
||||
{
|
||||
m_pUI=new Ui::CurveComputePage();
|
||||
m_pUI->setupUi(this);
|
||||
if(NULL != parent)
|
||||
{
|
||||
int w=width();
|
||||
int h=height();
|
||||
parent->setFixedSize(QSize(w,h));
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
void CurveComputePage::CurveCompute(const QString& FileName,
|
||||
const QStringList& CurveNameList)
|
||||
{
|
||||
m_FileName=FileName;
|
||||
m_cureNameList=CurveNameList;
|
||||
}
|
||||
|
||||
void CurveComputePage::init()
|
||||
{
|
||||
setWindowTitle(QString("曲线计算"));
|
||||
if(m_cureNameList.size()>0)
|
||||
{
|
||||
QString CurveName=m_cureNameList[0];
|
||||
CMemRdWt *mrw=new CMemRdWt();
|
||||
mrw->Open(m_FileName.toStdString().c_str(),CSlfIO::modeReadWrite);
|
||||
int index=mrw->OpenCurve(CurveName.toStdString().c_str());
|
||||
if(index<0) {
|
||||
delete mrw;
|
||||
return;
|
||||
}
|
||||
Slf_CURVE pInfo;
|
||||
mrw->GetCurveInfo(index,&pInfo);
|
||||
delete mrw;
|
||||
//开始深度
|
||||
m_pUI->lineeditsDep->setText(QString::number(pInfo.StartDepth));
|
||||
m_pUI->lineeditsDep->setValidator(new QDoubleValidator(-999999,999999,6,this));
|
||||
// 终止深度
|
||||
m_pUI->lineEditeDep->setText(QString::number(pInfo.EndDepth));
|
||||
m_pUI->lineEditeDep->setValidator(new QDoubleValidator(-999999,999999,6,this));
|
||||
//计算公式
|
||||
QString ss=CurveName+"=1.0*"+CurveName+"+0.0";
|
||||
m_pUI->lineEditExpress->setText(ss);
|
||||
disconnect(m_pUI->btnOk,SIGNAL(clicked()),this,SLOT(slotComputeOk()));
|
||||
connect(m_pUI->btnOk,SIGNAL(clicked()),this,SLOT(slotComputeOk()));
|
||||
}
|
||||
}
|
||||
void CurveComputePage::slotComputeOk()
|
||||
{
|
||||
if(m_pUI->lineeditsDep->text().toFloat()>m_pUI->lineEditeDep->text().toFloat())
|
||||
{
|
||||
AfxMessageBox("起始深度不能大于终止深度");
|
||||
return;
|
||||
}
|
||||
QString m_Function=m_pUI->lineEditExpress->text();
|
||||
m_Function.toUpper();
|
||||
m_Function.replace("\"DEPTH\"","CURRENT_HD.DEP");
|
||||
BOOL OutCurveExist=1;
|
||||
float CurveValue,sdep,edep,rlev;
|
||||
Function fun;
|
||||
int noi=fun.GetExpress(m_Function);
|
||||
if(noi<0)
|
||||
{
|
||||
return ;//输入公式中没有“=”号,或含有不能处理的字符
|
||||
}
|
||||
//检查公式合理性
|
||||
for(int j=0;j<noi;j++)
|
||||
{
|
||||
fun.val[j]=j+1;
|
||||
}
|
||||
fun.prog=fun.TempProg;
|
||||
int re=fun.get_exp(&CurveValue);
|
||||
if(re>0)
|
||||
{
|
||||
const static char *e[]={
|
||||
"语法错误",//"syntax error.",
|
||||
"不对称的括号",//"unbalanced parentheses",
|
||||
"非法运算符"//"no expression present"
|
||||
};
|
||||
QMessageBox::warning(NULL,"提示",QString(QLatin1String(e[re-1]))+m_Function);
|
||||
return ;
|
||||
}
|
||||
char name[20];
|
||||
strcpy(name,fun.csOutName.toStdString().c_str());
|
||||
CMemRdWt *mrw=new CMemRdWt();
|
||||
mrw->Open(m_FileName.toStdString().c_str(),CSlfIO::modeReadWrite);
|
||||
int in=mrw->FindObjectIndex(name);
|
||||
if(in>=0)
|
||||
{
|
||||
short Attribute,SubAttribute;
|
||||
mrw->GetObjectAttribute(in,&Attribute,&SubAttribute);
|
||||
if(mrw->GetObjectStatus(in)!=0)//删除状态
|
||||
{
|
||||
if(Attribute==CHANNEL_OBJECT&&SubAttribute==CURVE_OBJECT)
|
||||
{
|
||||
QMessageBox::warning(NULL,"提示",fun.csOutName+"曲线已存在,但该曲线处于删除状态,无法进行计算 !!!");
|
||||
delete mrw;
|
||||
return ;
|
||||
}
|
||||
else
|
||||
{
|
||||
QMessageBox::warning(NULL,"提示","有一个非曲线对象"+fun.csOutName+"已存在,且该对象处于删除状态,无法进行计算 !!!");
|
||||
delete mrw;
|
||||
return ;
|
||||
}
|
||||
}
|
||||
if (Attribute!=CHANNEL_OBJECT||SubAttribute!=CURVE_OBJECT)
|
||||
{
|
||||
QMessageBox::warning(NULL,"提示",fun.csOutName+"对象已存在,但其属性不是曲线 !!!");
|
||||
delete mrw;
|
||||
return ;
|
||||
}
|
||||
}
|
||||
else
|
||||
{ // 输出曲线不存在
|
||||
QString ss="输出曲线"+fun.csOutName+"不存在 \n 是否生成 ?\n";
|
||||
int flag = QMessageBox::warning(NULL,tr("提示"),ss,QMessageBox::Yes,QMessageBox::No);
|
||||
if(flag != QMessageBox::Yes){
|
||||
delete mrw;
|
||||
return ;
|
||||
}
|
||||
OutCurveExist=0;
|
||||
}
|
||||
int index[20],indexout;
|
||||
float MinRlev=9999;
|
||||
DWORD CurveSample[20];
|
||||
float CurveRlev[20];
|
||||
Slf_CURVE info;
|
||||
for(int i=0;i<noi;i++)
|
||||
{
|
||||
if(fun.csName[i]=="CURRENT_HD.DEP")continue;
|
||||
if(mrw->GetObjectType(fun.csName[i].toStdString().c_str())!=CURVE_OBJECT)
|
||||
{
|
||||
QMessageBox::warning(NULL,"提示","输入曲线"+fun.csName[i]+"不是曲线类型,不能进行计算!!!\r\n请参考常规曲线计算规则,输入正确的计算公式");
|
||||
delete mrw;
|
||||
return ;
|
||||
}
|
||||
index[i]=mrw->OpenCurve(fun.csName[i].toStdString().c_str());
|
||||
if(index[i]<0)
|
||||
{
|
||||
QMessageBox::warning(NULL,"提示","打开曲线"+fun.csName[i]+"出错,不能进行计算!!!");
|
||||
delete mrw;
|
||||
return ;
|
||||
}
|
||||
mrw->GetCurveInfo(index[i],&info);
|
||||
if(MinRlev>info.DepLevel)MinRlev=info.DepLevel;
|
||||
CurveRlev[i]=info.DepLevel;
|
||||
}
|
||||
if(MinRlev==9999)MinRlev=0.125;//表达式中没有实际曲线,只有CURRENT_HD.DEP“深度”标识
|
||||
//生成输出曲线
|
||||
|
||||
if(OutCurveExist==0)
|
||||
{
|
||||
indexout=-1;
|
||||
for(int i=0;i<noi;i++)
|
||||
{
|
||||
if(fun.csName[i]=="CURRENT_HD.DEP")continue;
|
||||
mrw->GetCurveInfo(index[i],&info);
|
||||
sprintf(info.AliasName,"%s",fun.csOutName.toStdString().c_str());
|
||||
sprintf(info.Name,"%s",fun.csOutName.toStdString().c_str());
|
||||
info.StartDepth=m_pUI->lineeditsDep->text().toFloat();
|
||||
info.EndDepth=m_pUI->lineEditeDep->text().toFloat();
|
||||
indexout=mrw->OpenCurve(&info);
|
||||
break;
|
||||
}
|
||||
if(indexout==-1)//表达式中没有实际曲线,只有CURRENT_HD.DEP“深度”标识
|
||||
{
|
||||
sprintf(info.AliasName,"%s",fun.csOutName.toStdString().c_str());
|
||||
sprintf(info.Name,"%s",fun.csOutName.toStdString().c_str());
|
||||
info.StartDepth=m_pUI->lineeditsDep->text().toFloat();
|
||||
info.EndDepth=m_pUI->lineEditeDep->text().toFloat();
|
||||
info.DepLevel=0.125;
|
||||
info.CodeLen=4;
|
||||
info.RepCode=4;
|
||||
info.DefVal=-999.25;
|
||||
info.MaxValue=100;
|
||||
info.MinValue=0;
|
||||
strcpy(info.DepthHZUnit,"米");
|
||||
strcpy(info.DepthUnit,"m");
|
||||
strcpy(info.Unit,"");
|
||||
strcpy(info.AliasUnit,"");
|
||||
indexout=mrw->OpenCurve(&info);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
indexout=mrw->OpenCurve(fun.csOutName.toStdString().c_str());
|
||||
if(indexout>-1) mrw->GetCurveInfo(indexout,&info);
|
||||
}
|
||||
if(indexout<0)
|
||||
{
|
||||
QMessageBox::warning(NULL,"提示","输出曲线不存在,而且输入曲线中没有可参考的常规曲线,无法进行曲线计算\r\n请参考常规曲线计算规则,输入正确的计算公式");
|
||||
delete mrw;
|
||||
return ;
|
||||
}
|
||||
//检查输出曲线深度
|
||||
rlev = info.DepLevel;
|
||||
sdep = info.StartDepth;
|
||||
edep = info.EndDepth ;
|
||||
if(MinRlev>rlev)MinRlev=rlev;
|
||||
if ( m_pUI->lineeditsDep->text().toFloat() < sdep-rlev || m_pUI->lineEditeDep->text().toFloat() > edep+rlev)
|
||||
{
|
||||
int flag=QMessageBox::warning(NULL,"提示","输出曲线的深度范围("+m_pUI->lineeditsDep->text()+"--"+m_pUI->lineEditeDep->text()+")超出输入曲线("+QString::number(sdep)+"--"+QString::number(edep)+"\n继续计算吗?",QMessageBox::Yes,QMessageBox::No);
|
||||
if(flag != QMessageBox::Yes){
|
||||
delete mrw;
|
||||
return ;
|
||||
}
|
||||
}
|
||||
int sample=(int)((m_pUI->lineEditeDep->text().toFloat()-m_pUI->lineeditsDep->text().toFloat())/rlev+1.5);//0.5);
|
||||
int sampleIn=(int)((m_pUI->lineEditeDep->text().toFloat()-m_pUI->lineeditsDep->text().toFloat())/MinRlev+1.5);//0.5);
|
||||
float **indata,*outdata;
|
||||
indata=new float*[noi];
|
||||
outdata=new float[sample+10];
|
||||
float *tDep,*aDep;
|
||||
tDep=new float[sample];
|
||||
for(int k=0; k<sample; k++) tDep[k]=sdep+k*rlev;
|
||||
for(int j=0;j<noi;j++)
|
||||
{
|
||||
if(fun.csName[j]=="CURRENT_HD.DEP")continue;
|
||||
indata[j]=new float[sampleIn];
|
||||
//whp change 2018.10.15 保证读写一致
|
||||
CurveSample[j]=(m_pUI->lineEditeDep->text().toFloat()-m_pUI->lineeditsDep->text().toFloat())/CurveRlev[j]+1.5;//0.5;
|
||||
mrw->ReadCurve(index[j],m_pUI->lineeditsDep->text().toFloat(),CurveSample[j],&indata[j][0]);
|
||||
if(fabs(CurveRlev[j]-rlev)/rlev>0.1)
|
||||
{
|
||||
aDep=new float[CurveSample[j]];
|
||||
for(int k=0; k<CurveSample[j]; k++) aDep[k]=sdep+k*CurveRlev[j];
|
||||
Resample::ReSampling(&indata[j][0],CurveSample[j],1,aDep,tDep,sample);
|
||||
delete []aDep;
|
||||
}
|
||||
}
|
||||
for (int i=0; i<sample; i++)
|
||||
{
|
||||
float sdeps = sdep + rlev * i;
|
||||
float val=0;
|
||||
for(int j=0;j<noi;j++)
|
||||
{
|
||||
if(fun.csName[j]=="CURRENT_HD.DEP")fun.val[j]=m_pUI->lineeditsDep->text().toFloat()+i*rlev;
|
||||
else fun.val[j]=indata[j][i];
|
||||
if(fun.val[j]==-9999||fun.val[j]==-999.25||fun.val[j]==-99999||fun.val[j]==-4.3160208e+008) val=-9999;
|
||||
}
|
||||
fun.prog=fun.TempProg;
|
||||
fun.get_exp(&CurveValue);
|
||||
if(val==-9999) CurveValue=-9999;
|
||||
outdata[i]=CurveValue;
|
||||
}
|
||||
mrw->WriteCurve(indexout,m_pUI->lineeditsDep->text().toFloat(),sample,&outdata[0]);
|
||||
delete []tDep;
|
||||
|
||||
for (int i=0; i<noi;i++)
|
||||
{
|
||||
if(fun.csName[i]=="CURRENT_HD.DEP")continue;
|
||||
mrw->CloseCurve(index[i]);
|
||||
}
|
||||
mrw->CloseCurve(indexout);
|
||||
|
||||
for(int j=0;j<noi;j++)
|
||||
{
|
||||
if(fun.csName[j]=="CURRENT_HD.DEP")continue;
|
||||
delete indata[j];
|
||||
}
|
||||
delete []indata;
|
||||
delete []outdata;
|
||||
|
||||
////
|
||||
Slf_FILE_MESSAGE msag;
|
||||
mrw->GetFileMessage(msag);
|
||||
|
||||
QStringList CurveNames;
|
||||
CurveNames.push_back(msag.WellName);
|
||||
CurveNames.push_back(m_FileName);
|
||||
CurveNames.push_back(fun.csOutName.toUpper());
|
||||
delete mrw;
|
||||
emit signalCompute(CurveNames);
|
||||
// PaiObject::m_EventAgent.ObjectPropertyChanged(::GetProject(),"Compute",CurveNames);
|
||||
}
|
||||
|
||||
CurveComputePage::~CurveComputePage()
|
||||
{
|
||||
if(NULL != m_pUI)
|
||||
{
|
||||
delete m_pUI;
|
||||
m_pUI=NULL;
|
||||
}
|
||||
}
|
||||
31
DataMgr/src/CurveComputePage.h
Normal file
31
DataMgr/src/CurveComputePage.h
Normal file
|
|
@ -0,0 +1,31 @@
|
|||
#ifndef CURVECOMPUTEPAGE_H
|
||||
#define CURVECOMPUTEPAGE_H
|
||||
|
||||
#include <QWidget>
|
||||
class CMemRdWt;
|
||||
namespace Ui
|
||||
{
|
||||
class CurveComputePage;
|
||||
}
|
||||
class CurveComputePage : public QWidget
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
CurveComputePage(QWidget *parent);
|
||||
~CurveComputePage();
|
||||
void CurveCompute(const QString& FileName,
|
||||
const QStringList& CurveNameList);
|
||||
void init();
|
||||
signals:
|
||||
void signalCompute(const QStringList &curveNames);
|
||||
private slots:
|
||||
void slotComputeOk();
|
||||
|
||||
private:
|
||||
Ui::CurveComputePage *m_pUI;
|
||||
QString m_FileName;
|
||||
QStringList m_cureNameList;
|
||||
};
|
||||
|
||||
#endif // CURVECOMPUTEPAGE_H
|
||||
182
DataMgr/src/CurveComputePage.ui
Normal file
182
DataMgr/src/CurveComputePage.ui
Normal file
|
|
@ -0,0 +1,182 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>CurveComputePage</class>
|
||||
<widget class="QWidget" name="CurveComputePage">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>602</width>
|
||||
<height>500</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>0</width>
|
||||
<height>500</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>Form</string>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_2">
|
||||
<item>
|
||||
<layout class="QVBoxLayout" name="verticalLayout">
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_2">
|
||||
<item>
|
||||
<widget class="QLabel" name="label">
|
||||
<property name="text">
|
||||
<string>开始深度</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLineEdit" name="lineeditsDep"/>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="label_2">
|
||||
<property name="text">
|
||||
<string>终止深度</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLineEdit" name="lineEditeDep"/>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_3">
|
||||
<item>
|
||||
<widget class="QLabel" name="label_3">
|
||||
<property name="text">
|
||||
<string>计算公式</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLineEdit" name="lineEditExpress"/>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="verticalSpacer_3">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Vertical</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>20</width>
|
||||
<height>18</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="label_4">
|
||||
<property name="text">
|
||||
<string>常用数学运算符:
|
||||
加:+,减:-,乘:*,除:/,取余:%,乘方:^,对数:!
|
||||
如:PAR =SP/CAL+RT^2.5-10!AC
|
||||
10!表示取以10为底的对数,1! 表示取自然对数
|
||||
|
||||
</string>
|
||||
</property>
|
||||
<property name="textFormat">
|
||||
<enum>Qt::PlainText</enum>
|
||||
</property>
|
||||
<property name="wordWrap">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="label_5">
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>600</width>
|
||||
<height>0</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>规则及约定:
|
||||
1、输入对象必须是常规曲线名、深度标识或常量
|
||||
如:GR=2*GR+5;GR2=45;TEMP=18+0.038*"DEPTH
|
||||
其中:"DEPTH"表示深度;
|
||||
2、当输出曲线不存在时:
|
||||
如果有输入曲线存在,程序自动根据第一条输入曲线的属性产生输出曲线;
|
||||
否则,程序自动产生一条浮点类型的输出曲线,采样间隔为0.125。</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="verticalSpacer_2">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Vertical</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>20</width>
|
||||
<height>18</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout">
|
||||
<item>
|
||||
<spacer name="verticalSpacer">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Vertical</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>20</width>
|
||||
<height>40</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="horizontalSpacer">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>40</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="btnOk">
|
||||
<property name="text">
|
||||
<string>确定</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="horizontalSpacer_2">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>40</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<resources/>
|
||||
<connections/>
|
||||
</ui>
|
||||
361
DataMgr/src/CurveComputerDlg.cpp
Normal file
361
DataMgr/src/CurveComputerDlg.cpp
Normal file
|
|
@ -0,0 +1,361 @@
|
|||
#pragma warning(push,0)
|
||||
// #include "Family.h"
|
||||
#include <QMessageBox>
|
||||
#include <QHeaderView>
|
||||
#include "CurveComputerDlg.h"
|
||||
#include "ui_CurveComputer.h"
|
||||
#include "CStringType.h"
|
||||
#include "DataHelper.h"
|
||||
#include "MemRdWt.h"
|
||||
// #include "ObjProject.h"
|
||||
#include "Well.h"
|
||||
#pragma warning(pop)
|
||||
using namespace pai::ios::welllog;
|
||||
BEGIN_OSGGRAPHICS_NAMESPACE
|
||||
CCurveComputerDlg::CCurveComputerDlg(QWidget * parent, Qt::WindowFlags flags)
|
||||
: QDialog(parent,flags)
|
||||
{
|
||||
m_pUI = new Ui_CurveComputer();
|
||||
m_pUI->setupUi(this);
|
||||
|
||||
QObject::connect(m_pUI->pushButton_SetDepth, SIGNAL(clicked()), this, SLOT(slotSetDepth()));
|
||||
QObject::connect(m_pUI->pushButton_SetFun, SIGNAL(clicked()), this, SLOT(slotSetFun()));
|
||||
QObject::connect(m_pUI->okbtn, SIGNAL(clicked()), this, SLOT(slotSave()));
|
||||
QObject::connect(m_pUI->cancelbtn, SIGNAL(clicked()), this, SLOT(slotCancel()));
|
||||
}
|
||||
|
||||
void CCurveComputerDlg::slotSave()
|
||||
{
|
||||
//检查公式合理性
|
||||
for(int i=0;i<m_pUI->tableWidget->rowCount();i++)
|
||||
{
|
||||
if(Qt::Checked!=m_pUI->tableWidget->item(i,0)->checkState())continue;
|
||||
QString m_Function=m_pUI->tableWidget->item(i,0)->text();
|
||||
m_Function=m_Function.toUpper();
|
||||
Function fun;
|
||||
int noi=fun.GetExpress(m_Function);//检查输入公式中是否存在:没有“=”号,或含有不能处理的字符
|
||||
if(noi<0)return;
|
||||
for(int j=0;j<noi;j++)
|
||||
{
|
||||
fun.val[j]=j+1;
|
||||
}
|
||||
fun.prog=fun.TempProg;
|
||||
float CurveValue;
|
||||
int re=fun.get_exp(&CurveValue);
|
||||
if(re>0)
|
||||
{
|
||||
const static char *e[]={
|
||||
"语法错误",//"syntax error.",
|
||||
"不对称的括号",//"unbalanced parentheses",
|
||||
"非法运算符"//"no expression present"
|
||||
};
|
||||
QMessageBox::warning(NULL,"提示",QString(QLatin1String(e[re-1]))+m_Function);
|
||||
return;
|
||||
}
|
||||
}
|
||||
//检查输入、输出曲线
|
||||
CMemRdWt *mrw=new CMemRdWt();
|
||||
char name[64];
|
||||
if(!mrw->Open(FileName.toStdString().c_str(),CSlfIO::modeReadWrite))
|
||||
{
|
||||
delete mrw;
|
||||
return;
|
||||
}
|
||||
Slf_FILE_MESSAGE msag;
|
||||
mrw->GetFileMessage(msag);
|
||||
for(int m=0;m<m_pUI->tableWidget->rowCount();m++)
|
||||
{
|
||||
if(Qt::Checked!=m_pUI->tableWidget->item(m,0)->checkState())continue;
|
||||
QString m_Function=m_pUI->tableWidget->item(m,0)->text();
|
||||
m_Function=m_Function.toUpper();
|
||||
Function fun;
|
||||
int noi=fun.GetExpress(m_Function);
|
||||
strcpy(name,fun.csOutName.toStdString().c_str());
|
||||
int in=mrw->FindObjectIndex(name);
|
||||
if(in>=0)//检查输出曲线
|
||||
{
|
||||
short Attribute,SubAttribute;
|
||||
mrw->GetObjectAttribute(in,&Attribute,&SubAttribute);
|
||||
if(mrw->GetObjectStatus(in)!=0)//删除状态
|
||||
{
|
||||
if(Attribute==CHANNEL_OBJECT&&SubAttribute==CURVE_OBJECT)
|
||||
{
|
||||
QMessageBox::warning(NULL,"提示",fun.csOutName+"曲线已存在,但该曲线处于删除状态,无法进行计算 !!!");
|
||||
delete mrw;
|
||||
return ;
|
||||
}
|
||||
else
|
||||
{
|
||||
QMessageBox::warning(NULL,"提示","有一个非曲线对象"+fun.csOutName+"已存在,且该对象处于删除状态,无法进行计算 !!!");
|
||||
delete mrw;
|
||||
return ;
|
||||
}
|
||||
}
|
||||
if (Attribute!=CHANNEL_OBJECT||SubAttribute!=CURVE_OBJECT)
|
||||
{
|
||||
QMessageBox::warning(NULL,"提示","输出曲线名称"+fun.csOutName+"已存在,但其属性不是曲线 !!!");
|
||||
delete mrw;
|
||||
return ;
|
||||
}
|
||||
}
|
||||
//检查输入曲线
|
||||
int index[20],indexout;
|
||||
for(int i=0;i<noi;i++)
|
||||
{
|
||||
if(fun.csName[i]=="CURRENT_HD.DEP")continue;
|
||||
if(mrw->FindObjectIndex(fun.csName[i].toStdString().c_str())<0)
|
||||
{
|
||||
QMessageBox::warning(NULL,"提示","输入曲线"+fun.csName[i]+"不存在,无法进行计算!!!");
|
||||
delete mrw;
|
||||
return ;
|
||||
}
|
||||
if(mrw->GetObjectType(fun.csName[i].toStdString().c_str())!=CURVE_OBJECT)
|
||||
{
|
||||
QMessageBox::warning(NULL,"提示","输入曲线"+fun.csName[i]+"不是曲线类型,不能进行计算!!!\r\n请参考常规曲线计算规则,输入正确的计算公式");
|
||||
delete mrw;
|
||||
return ;
|
||||
}
|
||||
}
|
||||
}
|
||||
QStringList CurveNames;
|
||||
CurveNames.push_back(msag.WellName);
|
||||
CurveNames.push_back(FileName);
|
||||
//开始计算
|
||||
for(int m=0;m<m_pUI->tableWidget->rowCount();m++)
|
||||
{
|
||||
if(Qt::Checked!=m_pUI->tableWidget->item(m,0)->checkState())continue;
|
||||
QString m_Function=m_pUI->tableWidget->item(m,0)->text();
|
||||
m_Function=m_Function.toUpper();
|
||||
Function fun;
|
||||
int noi=fun.GetExpress(m_Function);
|
||||
strcpy(name,fun.csOutName.toStdString().c_str());
|
||||
CurveNames.push_back(name);
|
||||
for(int j=0;j<noi;j++)
|
||||
{
|
||||
fun.val[j]=j+1;
|
||||
}
|
||||
fun.prog=fun.TempProg;
|
||||
float CurveValue;
|
||||
//int re=fun.get_exp(&CurveValue);
|
||||
int in=mrw->FindObjectIndex(name);
|
||||
int index[20],indexout=-1;
|
||||
float MinRlev=9999;
|
||||
DWORD CurveSample[20];
|
||||
float CurveRlev[20];
|
||||
Slf_CURVE info;
|
||||
for(int i=0;i<noi;i++)
|
||||
{
|
||||
if(fun.csName[i]=="CURRENT_HD.DEP")continue;
|
||||
index[i]=mrw->OpenCurve(fun.csName[i].toStdString().c_str());
|
||||
if(index[i]>-1)mrw->GetCurveInfo(index[i],&info);
|
||||
if(MinRlev>info.DepLevel)MinRlev=info.DepLevel;
|
||||
CurveRlev[i]=info.DepLevel;
|
||||
}
|
||||
if(MinRlev==9999)MinRlev=0.125;//表达式中没有实际曲线,只有CURRENT_HD.DEP“深度”标识
|
||||
//生成输出曲线
|
||||
indexout=mrw->OpenCurve(fun.csOutName.toStdString().c_str());
|
||||
if(indexout>=0)mrw->GetCurveInfo(indexout,&info);
|
||||
else
|
||||
{//输出曲线不存在
|
||||
indexout=-1;
|
||||
for(int i=0;i<noi;i++)
|
||||
{
|
||||
if(fun.csName[i]=="CURRENT_HD.DEP")continue;
|
||||
mrw->GetCurveInfo(index[i],&info);//根据第一条输入曲线的属性产生输出曲线
|
||||
indexout=i;
|
||||
break;
|
||||
}
|
||||
if(indexout==-1)//表达式中没有实际曲线
|
||||
{
|
||||
info.DepLevel=0.125;
|
||||
info.CodeLen=4;
|
||||
info.RepCode=4;
|
||||
info.DefVal=-999.25;
|
||||
info.MaxValue=100;
|
||||
info.MinValue=0;
|
||||
strcpy(info.DepthHZUnit,"米");
|
||||
strcpy(info.DepthUnit,"m");
|
||||
strcpy(info.Unit,"");
|
||||
strcpy(info.AliasUnit,"");
|
||||
}
|
||||
sprintf(info.AliasName,"%s",fun.csOutName.toStdString().c_str());
|
||||
sprintf(info.Name,"%s",fun.csOutName.toStdString().c_str());
|
||||
info.StartDepth=m_pUI->tableWidget->item(m,1)->text().toFloat();
|
||||
info.EndDepth=m_pUI->tableWidget->item(m,2)->text().toFloat();
|
||||
indexout=mrw->OpenCurve(&info);
|
||||
}
|
||||
float rlev = info.DepLevel;
|
||||
float sdep = m_pUI->tableWidget->item(m,1)->text().toFloat();
|
||||
float edep = m_pUI->tableWidget->item(m,2)->text().toFloat();
|
||||
if(MinRlev>rlev)MinRlev=rlev;
|
||||
int sample=(int)((edep-sdep)/rlev+1.5);//0.5);
|
||||
int sampleIn=(int)((edep-sdep)/MinRlev+1.5);//0.5);
|
||||
float **indata,*outdata;
|
||||
indata=new float*[noi];
|
||||
outdata=new float[sample+10];
|
||||
float *tDep,*aDep;
|
||||
tDep=new float[sample];
|
||||
for(int k=0; k<sample; k++) tDep[k]=sdep+k*rlev;
|
||||
for(int j=0;j<noi;j++)
|
||||
{
|
||||
if(fun.csName[j]=="CURRENT_HD.DEP")continue;
|
||||
indata[j]=new float[sampleIn];
|
||||
//whp change 2018.10.15 保证读写一致
|
||||
CurveSample[j]=(edep-sdep)/CurveRlev[j]+1.5;//0.5;
|
||||
mrw->ReadCurve(index[j],sdep,CurveSample[j],&indata[j][0]);
|
||||
if(fabs(CurveRlev[j]-rlev)/rlev>0.1)
|
||||
{
|
||||
aDep=new float[CurveSample[j]];
|
||||
for(int k=0; k<CurveSample[j]; k++) aDep[k]=sdep+k*CurveRlev[j];
|
||||
Resample::ReSampling(&indata[j][0],CurveSample[j],1,aDep,tDep,sample);
|
||||
delete []aDep;
|
||||
}
|
||||
}
|
||||
for (int i=0; i<sample; i++)
|
||||
{
|
||||
//sdep = sdeps + rlev * i;
|
||||
for(int j=0;j<noi;j++)
|
||||
{
|
||||
if(fun.csName[j]=="CURRENT_HD.DEP")fun.val[j]=sdep+i*rlev;
|
||||
else fun.val[j]=indata[j][i];
|
||||
}
|
||||
fun.prog=fun.TempProg;
|
||||
fun.get_exp(&CurveValue);
|
||||
outdata[i]=CurveValue;
|
||||
//2013.11.20 whp add for 为曲线计算添加数值类型选项:常规,不控制数值大小;方位:控制到0-360
|
||||
|
||||
}
|
||||
mrw->WriteCurve(indexout,sdep,sample,&outdata[0]);
|
||||
delete []tDep;
|
||||
|
||||
for (int i=0; i<noi;i++)
|
||||
{
|
||||
if(fun.csName[i]=="CURRENT_HD.DEP")continue;
|
||||
mrw->CloseCurve(index[i]);
|
||||
}
|
||||
mrw->CloseCurve(indexout);
|
||||
|
||||
for(int j=0;j<noi;j++)
|
||||
{
|
||||
if(fun.csName[j]=="CURRENT_HD.DEP")continue;
|
||||
delete indata[j];
|
||||
}
|
||||
delete []indata;
|
||||
delete []outdata;
|
||||
}
|
||||
delete mrw;
|
||||
// PaiObject::m_EventAgent.ObjectPropertyChanged(GetProject(),"Compute",CurveNames);
|
||||
QMessageBox::warning(NULL,"提示","完成曲线计算");
|
||||
//accept();
|
||||
}
|
||||
/**
|
||||
*@brief 取消槽函数
|
||||
*/
|
||||
void CCurveComputerDlg::slotCancel()
|
||||
{
|
||||
// reject ();
|
||||
}
|
||||
void CCurveComputerDlg::slotSetDepth()//用当前编辑的曲线深度为所有计算曲线设置深度
|
||||
{
|
||||
QString sdep=m_pUI->lineEdit_Sdep->text();
|
||||
QString edep=m_pUI->lineEdit_Edep->text();
|
||||
if(sdep>edep) sdep=edep;
|
||||
for(int i=0;i<m_pUI->tableWidget->rowCount();i++)
|
||||
{
|
||||
m_pUI->tableWidget->setItem(i,1,new QTableWidgetItem(sdep));
|
||||
m_pUI->tableWidget->setItem(i,2,new QTableWidgetItem(edep));
|
||||
}
|
||||
}
|
||||
void CCurveComputerDlg::slotSetFun()
|
||||
{
|
||||
QString m_Function="X="+m_pUI->lineEdit_Fun->text();
|
||||
m_Function=m_Function.toUpper();
|
||||
m_Function.replace("\"DEPTH\"","CURRENT_HD.DEP");
|
||||
Function fun;
|
||||
vector <int>NameType;//输入曲线名类型
|
||||
int noi=fun.GetExpress(m_Function);
|
||||
QString m_FunctionR=m_Function.right(m_Function.length()-m_Function.indexOf('=')-1);
|
||||
for (int i=0; i<noi; i++)
|
||||
{
|
||||
if(fun.csName[i]=="X")NameType.push_back(1);//和输出曲线同名
|
||||
else if(fun.csName[i]=="CURRENT_HD.DEP")NameType.push_back(2);//深度变量
|
||||
else NameType.push_back(0);//曲线名
|
||||
}
|
||||
|
||||
for(int i=0;i<m_pUI->tableWidget->rowCount();i++)
|
||||
{
|
||||
QString m_Function0=m_pUI->tableWidget->item(i,0)->text();
|
||||
m_Function0=m_Function0.toUpper();
|
||||
QString outname=m_Function0.left(m_Function0.indexOf('='));
|
||||
QString newfun=QString(QLatin1String(fun.TempProg));
|
||||
newfun=newfun.simplified();
|
||||
char name[2];
|
||||
name[0]='A'+ i;
|
||||
name[1]=0;
|
||||
for (int j=0; j<noi; j++)
|
||||
{
|
||||
name[0]='A'+ j;
|
||||
QString qname=QString(QLatin1String(name));
|
||||
//if(NameType[j])
|
||||
{
|
||||
|
||||
QString left=newfun.left(newfun.lastIndexOf(qname));
|
||||
QString right=newfun.right(newfun.length()-newfun.lastIndexOf(qname)-1);
|
||||
//right.replace(qname,outname);
|
||||
QString ms=fun.csName[j];//曲线名
|
||||
if(NameType[j]==1)ms=outname;//和输出曲线同名
|
||||
else if(NameType[j]==2)ms="\"DEPTH\"";//深度变量
|
||||
newfun=left+ms+right;
|
||||
}
|
||||
}
|
||||
QString ss=outname+"="+newfun;
|
||||
m_pUI->tableWidget->setItem(i,0,new QTableWidgetItem(ss));//QString(QLatin1String(fun.TempProg))));
|
||||
m_pUI->tableWidget->item(i,0)->setCheckState(Qt::Checked);
|
||||
}
|
||||
}
|
||||
void CCurveComputerDlg::init()//const QString& FileName,const QStringList& CurveNameList)//int row,int col,QStringList header)
|
||||
{
|
||||
m_pUI->tableWidget->setColumnCount(3);
|
||||
QStringList header;
|
||||
header<<"计算公式"<<"起始深度"<<"终止深度";//header<<"曲线名"<<"计算公式"<<"起始深度"<<"终止深度";
|
||||
m_pUI->tableWidget->setHorizontalHeaderLabels(header);
|
||||
m_pUI->tableWidget->setColumnWidth(1,200);
|
||||
m_pUI->tableWidget->horizontalHeader()->setStretchLastSection(true);
|
||||
|
||||
m_pUI->tableWidget->horizontalHeader()->setSectionResizeMode(0, QHeaderView::ResizeToContents);
|
||||
m_pUI->tableWidget->horizontalHeader()->setSectionResizeMode(1, QHeaderView::ResizeToContents);
|
||||
// m_pUI->tableWidget->horizontalHeader()->setResizeMode(2, QHeaderView::ResizeToContents);
|
||||
m_pUI->tableWidget->setRowCount(CurveNameList.count());
|
||||
float Mindep=99999,Maxdep=-99999;
|
||||
for(int i=0;i<CurveNameList.count();i++)
|
||||
{
|
||||
QString CurveName=CurveNameList[i];
|
||||
//m_pUI->tableWidget->setItem(i,0,new QTableWidgetItem(CurveName));
|
||||
QString ss=CurveName+"=1.0*"+CurveName+"+0.0";
|
||||
m_pUI->tableWidget->setItem(i,1-1,new QTableWidgetItem(ss));
|
||||
CMemRdWt *logio=new CMemRdWt();
|
||||
logio->Open(FileName.toStdString().c_str(),CSlfIO::modeReadWrite);
|
||||
int index=logio->OpenCurve(CurveName.toStdString().c_str());
|
||||
if(index<0) {
|
||||
delete logio;
|
||||
continue;
|
||||
}
|
||||
Slf_CURVE pInfo;
|
||||
logio->GetCurveInfo(index,&pInfo);
|
||||
m_pUI->tableWidget->setItem(i,2-1,new QTableWidgetItem(QString::number(pInfo.StartDepth)));
|
||||
m_pUI->tableWidget->setItem(i,3-1,new QTableWidgetItem(QString::number(pInfo.EndDepth)));
|
||||
if(Mindep>pInfo.StartDepth)Mindep=pInfo.StartDepth;
|
||||
if(Mindep>pInfo.EndDepth)Mindep=pInfo.EndDepth;
|
||||
if(Maxdep<pInfo.StartDepth)Maxdep=pInfo.StartDepth;
|
||||
if(Maxdep<pInfo.EndDepth)Maxdep=pInfo.EndDepth;
|
||||
logio->CloseCurve(index);
|
||||
delete logio;
|
||||
m_pUI->tableWidget->item(i,0)->setCheckState(Qt::Checked);
|
||||
}
|
||||
m_pUI->lineEdit_Sdep->setText(QString::number(Mindep));
|
||||
m_pUI->lineEdit_Edep->setText(QString::number(Maxdep));
|
||||
QString ss="1.0*x+0.0";
|
||||
m_pUI->lineEdit_OutCurve->setText("x");
|
||||
m_pUI->lineEdit_Fun->setText(ss);
|
||||
}
|
||||
END_OSGGRAPHICS_NAMESPACE
|
||||
45
DataMgr/src/CurveComputerDlg.h
Normal file
45
DataMgr/src/CurveComputerDlg.h
Normal file
|
|
@ -0,0 +1,45 @@
|
|||
|
||||
#pragma warning(push,0)
|
||||
#include <cassert>
|
||||
#include <QDialog>
|
||||
#include "ConsoleOutputWidget.h"
|
||||
#include "ui_CurveComputer.h"
|
||||
#include "OSGFramework.h"
|
||||
#pragma warning(pop)
|
||||
|
||||
BEGIN_OSGGRAPHICS_NAMESPACE
|
||||
/**
|
||||
* @brief 表格选择列自定义委托
|
||||
*/
|
||||
class CCurveComputerDlg : public QDialog
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
CCurveComputerDlg(QWidget * parent=0, Qt::WindowFlags flags=0);
|
||||
~CCurveComputerDlg()
|
||||
{
|
||||
if(m_pUI) delete m_pUI;
|
||||
}
|
||||
Ui_CurveComputer *m_pUI;
|
||||
void init();//const QString& FileName,const QStringList& CurveNameList);//int row,int col,QStringList headlist);
|
||||
private slots:
|
||||
/**
|
||||
*@brief 保存槽函数
|
||||
*/
|
||||
void slotSave();
|
||||
|
||||
/**
|
||||
*@brief 取消槽函数
|
||||
*/
|
||||
void slotCancel();
|
||||
void slotSetDepth();//用当前编辑的曲线深度为所有计算曲线设置深度
|
||||
void slotSetFun();//用当前编辑的计算公式为所有计算曲线设置公式
|
||||
|
||||
|
||||
public:
|
||||
QString FileName;
|
||||
QStringList CurveNameList;
|
||||
};
|
||||
|
||||
END_OSGGRAPHICS_NAMESPACE;
|
||||
365
DataMgr/src/CurvePropertyEdit.cpp
Normal file
365
DataMgr/src/CurvePropertyEdit.cpp
Normal file
|
|
@ -0,0 +1,365 @@
|
|||
#pragma warning(push,0)
|
||||
// #include "Family.h"
|
||||
#include <QMessageBox>
|
||||
#include <QObjectList>
|
||||
#include <QLineEdit>
|
||||
// #include "ObjectEvent.h"
|
||||
#include "CurvePropertyEdit.h"
|
||||
#include "ui_CurvePropertyEdit.h"
|
||||
#include "CStringType.h"
|
||||
#include "LogIO.h"
|
||||
// #include "ObjProject.h"
|
||||
#include "Well.h"
|
||||
#pragma warning(pop)
|
||||
using namespace pai::ios::welllog;
|
||||
BEGIN_OSGGRAPHICS_NAMESPACE
|
||||
extern char *DataTypea[];
|
||||
extern int DataLengtha[];
|
||||
CCurvePropertyEditDlg::CCurvePropertyEditDlg(QWidget * parent, Qt::WindowFlags flags)
|
||||
: QWidget(parent,flags)
|
||||
{
|
||||
m_pUI = new Ui_CurvePropertyEdit();
|
||||
m_pUI->setupUi(this);
|
||||
int w=width();
|
||||
int h=height();
|
||||
if(NULL != parent)
|
||||
{
|
||||
parent->setFixedSize(w,h);
|
||||
}
|
||||
|
||||
QObject::connect(m_pUI->okbtn, SIGNAL(clicked()), this, SLOT(slotSave()));
|
||||
QObject::connect(m_pUI->cancelbtn, SIGNAL(clicked()), this, SLOT(slotCancel()));
|
||||
tab1=m_pUI->PropertyTab->widget(0);
|
||||
tab2=m_pUI->PropertyTab->widget(1);
|
||||
m_pUI->PropertyTab->setCurrentIndex(0);
|
||||
m_pUI->cancelbtn->hide();
|
||||
/* QObjectList ctls=tab1->children();
|
||||
QLineEdit* liedit=tab1->findChild<QLineEdit*>("lineEdit_CurveName");
|
||||
liedit->setText("11");
|
||||
//foreach (QObject* ctl,ctls)
|
||||
//{
|
||||
// if (ctl->objectName()=="lineEdit_CurveName")
|
||||
// {
|
||||
// QLineEdit* liedit= (QLineEdit*)(ctl);
|
||||
// liedit->setText("11");
|
||||
|
||||
// }
|
||||
//}
|
||||
QObjectList ctls2=tab2->children();
|
||||
foreach (QObject* ctl,ctls2)
|
||||
{
|
||||
if (ctl->objectName()=="lineEdit2_ArrayNum")
|
||||
{
|
||||
QLineEdit* liedit= (QLineEdit*)(ctl);
|
||||
liedit->setText("444");
|
||||
|
||||
}
|
||||
}*/
|
||||
}
|
||||
void CCurvePropertyEditDlg::init()
|
||||
{
|
||||
|
||||
//初始化
|
||||
CLogIO logio(FileName.toStdString().c_str(),(unsigned int)CLogIO::modeReadWrite);
|
||||
if(!logio.mFile) return ;
|
||||
int c=11;
|
||||
QString str;
|
||||
for(int i=0;i<c;i++) {
|
||||
if(!i)str+="[";
|
||||
else str+="|[";
|
||||
str+=Rep_STR[i];
|
||||
str+="]";
|
||||
};
|
||||
QRegExp regExp("[A-Z0-9]{0,100}");//正则表达式,第一位数字为a-z的数字,第二位为1-9的数字,后边是0-2位0-9的数字
|
||||
|
||||
if(Type==0)
|
||||
{
|
||||
m_pUI->PropertyTab->setTabEnabled(1,0);
|
||||
m_pUI->PropertyTab->setStyleSheet("QTabBar::tab:disabled {width: 0; color: transparent;}");
|
||||
Slf_CURVE info;
|
||||
int index=logio.OpenCurve(CurveName.toStdString().c_str());
|
||||
if(index<0) return;
|
||||
logio.GetCurveInfo(index,&info);
|
||||
logio.CloseCurve(index);
|
||||
QLineEdit *lineEdit_CurveName=tab1->findChild<QLineEdit*>("lineEdit_CurveName");
|
||||
QLineEdit *lineEdit_CurveName_2=tab1->findChild<QLineEdit*>("lineEdit_CurveName_2");
|
||||
QLineEdit *lineEdit_CurveUnit=tab1->findChild<QLineEdit*>("lineEdit_CurveUnit");
|
||||
QLineEdit *lineEdit_CurveUnit_2=tab1->findChild<QLineEdit*>("lineEdit_CurveUnit_2");
|
||||
QLineEdit *lineEdit_DepthUnit=tab1->findChild<QLineEdit*>("lineEdit_DepthUnit");
|
||||
QLineEdit *lineEdit_DepthUnit_2=tab1->findChild<QLineEdit*>("lineEdit_DepthUnit_2");
|
||||
QLineEdit *lineEdit_Sdep=tab1->findChild<QLineEdit*>("lineEdit_Sdep");
|
||||
QLineEdit *lineEdit_Edep=tab1->findChild<QLineEdit*>("lineEdit_Edep");
|
||||
QLineEdit *lineEdit_Rlev=tab1->findChild<QLineEdit*>("lineEdit_Rlev");
|
||||
QLineEdit *lineEdit_DataType=tab1->findChild<QLineEdit*>("lineEdit_DataType");
|
||||
QLineEdit *lineEdit_Min=tab1->findChild<QLineEdit*>("lineEdit_Min");
|
||||
QLineEdit *lineEdit_Max=tab1->findChild<QLineEdit*>("lineEdit_Max");
|
||||
QLineEdit *lineEdit_DefVal=tab1->findChild<QLineEdit*>("lineEdit_DefVal");
|
||||
lineEdit_CurveName->setText((QLatin1String(info.Name)));
|
||||
QRegExp regExp("[A-Z0-9]{0,100}");//正则表达式,第一位数字为a-z的数字,第二位为1-9的数字,后边是0-2位0-9的数字
|
||||
lineEdit_CurveName->setValidator(new QRegExpValidator(regExp,this));
|
||||
lineEdit_CurveName_2->setText(QString::fromLocal8Bit(info.AliasName));
|
||||
lineEdit_CurveName_2->setValidator(new QRegExpValidator(regExp,this));
|
||||
lineEdit_CurveUnit->setText(QLatin1String(info.Unit));
|
||||
lineEdit_CurveUnit->setValidator(new QRegExpValidator(regExp,this));
|
||||
lineEdit_CurveUnit_2->setText(QString::fromLocal8Bit(info.AliasUnit));//(QLatin1String(info.AliasUnit));
|
||||
lineEdit_CurveUnit_2->setValidator(new QRegExpValidator(regExp,this));
|
||||
lineEdit_DepthUnit->setText(QLatin1String(info.DepthUnit));
|
||||
lineEdit_DepthUnit->setValidator(new QRegExpValidator(regExp,this));
|
||||
lineEdit_DepthUnit_2->setText(QString::fromLocal8Bit(info.DepthHZUnit));
|
||||
lineEdit_DepthUnit_2->setValidator(new QRegExpValidator(regExp,this));
|
||||
lineEdit_Sdep->setText(QString("%1").arg(info.StartDepth));
|
||||
lineEdit_Sdep->setValidator(new QDoubleValidator(-9999999,9999999,6,this));
|
||||
lineEdit_Edep->setText(QString("%1").arg(info.EndDepth));
|
||||
lineEdit_Edep->setValidator(new QDoubleValidator(-9999999,9999999,6,this));
|
||||
lineEdit_Rlev->setText(QString("%1").arg(info.DepLevel));
|
||||
lineEdit_Rlev->setValidator(new QDoubleValidator(-9999999,9999999,6,this));
|
||||
regExp=QRegExp(str);
|
||||
lineEdit_DataType->setText(QLatin1String(Rep_STR[info.RepCode-1]));
|
||||
lineEdit_Sdep->setValidator(new QRegExpValidator(regExp,this));
|
||||
lineEdit_Min->setText(QString("%1").arg(info.MinValue));
|
||||
lineEdit_Min->setValidator(new QDoubleValidator(-9999999,9999999,6,this));
|
||||
lineEdit_Max->setText(QString("%1").arg(info.MaxValue));
|
||||
lineEdit_Max->setValidator(new QDoubleValidator(-9999999,9999999,6,this));
|
||||
lineEdit_DefVal->setText(QString("%1").arg(info.DefVal));
|
||||
lineEdit_DefVal->setValidator(new QDoubleValidator(-9999999,9999999,6,this));
|
||||
}
|
||||
else
|
||||
{
|
||||
int index=logio.OpenWave(CurveName.toStdString().c_str());
|
||||
if(index<0) return;
|
||||
Slf_WAVE info;
|
||||
logio.GetWaveInfo(index,&info);
|
||||
logio.CloseWave(index);
|
||||
if(info.RepCode>12) return;
|
||||
QLineEdit *lineEdit_CurveName=tab1->findChild<QLineEdit*>("lineEdit_CurveName");
|
||||
QLineEdit *lineEdit_CurveName_2=tab1->findChild<QLineEdit*>("lineEdit_CurveName_2");
|
||||
QLineEdit *lineEdit_CurveUnit=tab1->findChild<QLineEdit*>("lineEdit_CurveUnit");
|
||||
QLineEdit *lineEdit_CurveUnit_2=tab1->findChild<QLineEdit*>("lineEdit_CurveUnit_2");
|
||||
QLineEdit *lineEdit_DepthUnit=tab1->findChild<QLineEdit*>("lineEdit_DepthUnit");
|
||||
QLineEdit *lineEdit_DepthUnit_2=tab1->findChild<QLineEdit*>("lineEdit_DepthUnit_2");
|
||||
QLineEdit *lineEdit_Sdep=tab1->findChild<QLineEdit*>("lineEdit_Sdep");
|
||||
QLineEdit *lineEdit_Edep=tab1->findChild<QLineEdit*>("lineEdit_Edep");
|
||||
QLineEdit *lineEdit_Rlev=tab1->findChild<QLineEdit*>("lineEdit_Rlev");
|
||||
QLineEdit *lineEdit_DataType=tab1->findChild<QLineEdit*>("lineEdit_DataType");
|
||||
QLineEdit *lineEdit_Min=tab1->findChild<QLineEdit*>("lineEdit_Min");
|
||||
QLineEdit *lineEdit_Max=tab1->findChild<QLineEdit*>("lineEdit_Max");
|
||||
QLineEdit *lineEdit_DefVal=tab1->findChild<QLineEdit*>("lineEdit_DefVal");
|
||||
lineEdit_CurveName->setText((QLatin1String(info.Name)));
|
||||
lineEdit_CurveName->setValidator(new QRegExpValidator(regExp,this));
|
||||
lineEdit_CurveName_2->setText(QString::fromLocal8Bit(info.AliasName));
|
||||
lineEdit_CurveName_2->setValidator(new QRegExpValidator(regExp,this));
|
||||
lineEdit_CurveUnit->setText(QLatin1String(info.Unit));
|
||||
lineEdit_CurveUnit->setValidator(new QRegExpValidator(regExp,this));
|
||||
lineEdit_CurveUnit_2->setText(QString::fromLocal8Bit(info.AliasUnit));
|
||||
lineEdit_CurveUnit_2->setValidator(new QRegExpValidator(regExp,this));
|
||||
lineEdit_DepthUnit->setText(QLatin1String(info.DepthUnit));
|
||||
lineEdit_DepthUnit->setValidator(new QRegExpValidator(regExp,this));
|
||||
lineEdit_DepthUnit_2->setText(QString::fromLocal8Bit(info.DepthHZUnit));
|
||||
lineEdit_DepthUnit_2->setValidator(new QRegExpValidator(regExp,this));
|
||||
lineEdit_Sdep->setText(QString("%1").arg(info.StartDepth));
|
||||
lineEdit_Sdep->setValidator(new QDoubleValidator(-9999999,9999999,6,this));
|
||||
lineEdit_Edep->setText(QString("%1").arg(info.EndDepth));
|
||||
lineEdit_Edep->setValidator(new QDoubleValidator(-9999999,9999999,6,this));
|
||||
lineEdit_Rlev->setText(QString("%1").arg(info.DepLevel));
|
||||
lineEdit_Rlev->setValidator(new QDoubleValidator(-9999999,9999999,6,this));
|
||||
regExp=QRegExp(str);
|
||||
lineEdit_DataType->setText(QLatin1String(Rep_STR[info.RepCode-1]));
|
||||
lineEdit_Min->setText(QString("%1").arg(info.MinValue));
|
||||
lineEdit_Min->setValidator(new QDoubleValidator(-9999999,9999999,6,this));
|
||||
lineEdit_Max->setText(QString("%1").arg(info.MaxValue));
|
||||
lineEdit_Max->setValidator(new QDoubleValidator(-9999999,9999999,6,this));
|
||||
lineEdit_DefVal->setText(QString("%1").arg(info.DefVal));
|
||||
lineEdit_DefVal->setValidator(new QDoubleValidator(-9999999,9999999,6,this));
|
||||
|
||||
QLineEdit *lineEdit2_Name=tab2->findChild<QLineEdit*>("lineEdit2_Name");
|
||||
QLineEdit *lineEdit2_Name1=tab2->findChild<QLineEdit*>("lineEdit2_Name1");
|
||||
QLineEdit *lineEdit2_Unit=tab2->findChild<QLineEdit*>("lineEdit2_Unit");
|
||||
QLineEdit *lineEdit2_Unit1=tab2->findChild<QLineEdit*>("lineEdit2_Unit1");
|
||||
QLineEdit *lineEdit2_Start=tab2->findChild<QLineEdit*>("lineEdit2_Start");
|
||||
QLineEdit *lineEdit2_Rlev2=tab2->findChild<QLineEdit*>("lineEdit2_Rlev2");
|
||||
QLineEdit *lineEdit2_ArrayNum=tab2->findChild<QLineEdit*>("lineEdit2_ArrayNum");
|
||||
QLineEdit *lineEdit2_Sample=tab2->findChild<QLineEdit*>("lineEdit2_Sample");
|
||||
QLineEdit *lineEdit2_SampleTotal=tab2->findChild<QLineEdit*>("lineEdit2_SampleTotal");
|
||||
QComboBox *comboBox2_Type=tab2->findChild<QComboBox*>("comboBox2_Type");
|
||||
comboBox2_Type->addItem(QString::fromLocal8Bit("线性刻度"));
|
||||
comboBox2_Type->addItem(QString::fromLocal8Bit("对数刻度"));
|
||||
comboBox2_Type->addItem(QString::fromLocal8Bit("指数刻度"));
|
||||
comboBox2_Type->setCurrentIndex(0);
|
||||
QObject::connect(lineEdit2_ArrayNum, SIGNAL(textChanged(const QString &)), this, SLOT(sampleChanged(const QString &)));
|
||||
QObject::connect(lineEdit2_Sample, SIGNAL(textChanged(const QString &)), this, SLOT(arrayChanged(const QString &)));
|
||||
QRegExp regExp("[A-Za-z0-9]{0,100}");//正则表达式,第一位数字为a-z的数字,第二位为1-9的数字,后边是0-2位0-9的数字
|
||||
lineEdit2_Name->setText(QLatin1String(info.TimeName));
|
||||
lineEdit2_Name->setValidator(new QRegExpValidator(regExp,this));
|
||||
lineEdit2_Name1->setText(QString::fromLocal8Bit(info.TimeHZName));
|
||||
lineEdit2_Name1->setValidator(new QRegExpValidator(regExp,this));
|
||||
lineEdit2_Unit->setText(QLatin1String(info.TimeUnit));
|
||||
lineEdit2_Unit->setValidator(new QRegExpValidator(regExp,this));
|
||||
lineEdit2_Unit1->setText(QString::fromLocal8Bit(info.TimeHZUnit));
|
||||
lineEdit2_Unit1->setValidator(new QRegExpValidator(regExp,this));
|
||||
|
||||
lineEdit2_Start->setText(QString("%1").arg(info.StartTime));
|
||||
lineEdit2_Start->setValidator(new QDoubleValidator(-9999999,9999999,6,this));
|
||||
lineEdit2_Rlev2->setText(QString("%1").arg(info.TimeLevel));
|
||||
lineEdit2_Rlev2->setValidator(new QDoubleValidator(-9999999,9999999,6,this));
|
||||
lineEdit2_ArrayNum->setText(QString("%1").arg(info.ArrayNum));
|
||||
lineEdit2_ArrayNum->setValidator(new QIntValidator(0,9999999,this));
|
||||
lineEdit2_Sample->setText(QString("%1").arg(info.TimeSamples));
|
||||
lineEdit2_Sample->setValidator(new QIntValidator(0,9999999,this));
|
||||
lineEdit2_SampleTotal->setText(QString("%1").arg(info.TimeSamples));
|
||||
lineEdit2_SampleTotal->setValidator(new QIntValidator(0,99999999,this));
|
||||
}
|
||||
logio.Close();
|
||||
}
|
||||
void CCurvePropertyEditDlg::sampleChanged(const QString &str)
|
||||
{
|
||||
QLineEdit *lineEdit2_Sample=tab2->findChild<QLineEdit*>("lineEdit2_Sample");
|
||||
QLineEdit *lineEdit2_SampleTotal=tab2->findChild<QLineEdit*>("lineEdit2_SampleTotal");
|
||||
|
||||
int TotalSample=lineEdit2_SampleTotal->text().toInt();
|
||||
int mSample=lineEdit2_Sample->text().toInt();
|
||||
if(TotalSample==0)return;
|
||||
int arrayNum=str.toInt();
|
||||
int sample=TotalSample;
|
||||
if(sample!=TotalSample)
|
||||
{
|
||||
QMessageBox::warning(NULL,"提示","阵列数不是总元素个数的公约数,请重新输入");
|
||||
QLineEdit *lineEdit2_ArrayNum=tab2->findChild<QLineEdit*>("lineEdit2_ArrayNum");
|
||||
lineEdit2_ArrayNum->setText(QString::number(TotalSample/mSample));
|
||||
}
|
||||
else lineEdit2_Sample->setText(QString::number(sample));
|
||||
}
|
||||
void CCurvePropertyEditDlg::arrayChanged(const QString &str)
|
||||
{
|
||||
QLineEdit *lineEdit2_ArrayNum=tab2->findChild<QLineEdit*>("lineEdit2_ArrayNum");
|
||||
QLineEdit *lineEdit2_SampleTotal=tab2->findChild<QLineEdit*>("lineEdit2_SampleTotal");
|
||||
|
||||
int TotalSample=lineEdit2_SampleTotal->text().toInt();
|
||||
int mArrayNum=lineEdit2_ArrayNum->text().toInt();
|
||||
if(TotalSample==0)return;
|
||||
int sample=str.toInt();
|
||||
int arrayNum=TotalSample/sample;
|
||||
if(arrayNum*sample!=TotalSample)
|
||||
{
|
||||
QMessageBox::warning(this,"提示","您所输入的元素个数不是总元素个数的公约数,请重新输入");
|
||||
QLineEdit *lineEdit2_Sample=tab2->findChild<QLineEdit*>("lineEdit2_Sample");
|
||||
lineEdit2_Sample->setText(QString::number(TotalSample/mArrayNum));
|
||||
}
|
||||
else lineEdit2_ArrayNum->setText(QString::number(arrayNum));
|
||||
}
|
||||
void CCurvePropertyEditDlg::slotSave()
|
||||
{
|
||||
QLineEdit *lineEdit_CurveName=tab1->findChild<QLineEdit*>("lineEdit_CurveName");
|
||||
QString Name=lineEdit_CurveName->text();
|
||||
CLogIO logio(FileName.toStdString().c_str(),(unsigned int)CLogIO::modeReadWrite);
|
||||
if(Name!=CurveName)
|
||||
{
|
||||
if(logio.FindObjectIndex(Name.toStdString().c_str())>=0)
|
||||
{
|
||||
QMessageBox::warning(this,"警告!","名称不能重复!");
|
||||
return;
|
||||
}
|
||||
}
|
||||
Slf_FILE_MESSAGE ms;
|
||||
logio.GetFileMessage(ms);
|
||||
if(Type==0)
|
||||
{
|
||||
Slf_CURVE info;
|
||||
int index=logio.OpenCurve(CurveName.toStdString().c_str());
|
||||
if(index<0) {
|
||||
return;
|
||||
}
|
||||
logio.GetCurveInfo(index,&info);
|
||||
QLineEdit *lineEdit_CurveName=tab1->findChild<QLineEdit*>("lineEdit_CurveName");
|
||||
QLineEdit *lineEdit_CurveName_2=tab1->findChild<QLineEdit*>("lineEdit_CurveName_2");
|
||||
QLineEdit *lineEdit_CurveUnit=tab1->findChild<QLineEdit*>("lineEdit_CurveUnit");
|
||||
QLineEdit *lineEdit_CurveUnit_2=tab1->findChild<QLineEdit*>("lineEdit_CurveUnit_2");
|
||||
QLineEdit *lineEdit_DepthUnit=tab1->findChild<QLineEdit*>("lineEdit_DepthUnit");
|
||||
QLineEdit *lineEdit_DepthUnit_2=tab1->findChild<QLineEdit*>("lineEdit_DepthUnit_2");
|
||||
|
||||
QLineEdit *lineEdit_DefVal=tab1->findChild<QLineEdit*>("lineEdit_DefVal");
|
||||
strcpy(info.Name,lineEdit_CurveName->text().toStdString().c_str());
|
||||
strcpy(info.AliasName,lineEdit_CurveName_2->text().toStdString().c_str());
|
||||
//汉字写回去不对了呀??????
|
||||
strcpy(info.Unit,lineEdit_CurveUnit->text().toStdString().c_str());
|
||||
strcpy(info.AliasUnit,lineEdit_CurveUnit_2->text().toStdString().c_str());
|
||||
strcpy(info.DepthUnit,lineEdit_DepthUnit->text().toStdString().c_str());
|
||||
strcpy(info.DepthHZUnit,lineEdit_DepthUnit_2->text().toStdString().c_str());
|
||||
info.DefVal=lineEdit_DefVal->text().toFloat();
|
||||
logio.SetCurveInfo(index,&info);
|
||||
logio.CloseCurve(index);
|
||||
}
|
||||
else
|
||||
{
|
||||
int index=logio.OpenWave(CurveName.toStdString().c_str());
|
||||
if(index<0) return;
|
||||
Slf_WAVE info;
|
||||
logio.GetWaveInfo(index,&info);
|
||||
|
||||
QLineEdit *lineEdit_CurveName=tab1->findChild<QLineEdit*>("lineEdit_CurveName");
|
||||
QLineEdit *lineEdit_CurveName_2=tab1->findChild<QLineEdit*>("lineEdit_CurveName_2");
|
||||
QLineEdit *lineEdit_CurveUnit=tab1->findChild<QLineEdit*>("lineEdit_CurveUnit");
|
||||
QLineEdit *lineEdit_CurveUnit_2=tab1->findChild<QLineEdit*>("lineEdit_CurveUnit_2");
|
||||
QLineEdit *lineEdit_DepthUnit=tab1->findChild<QLineEdit*>("lineEdit_DepthUnit");
|
||||
QLineEdit *lineEdit_DepthUnit_2=tab1->findChild<QLineEdit*>("lineEdit_DepthUnit_2");
|
||||
|
||||
QLineEdit *lineEdit_DefVal=tab1->findChild<QLineEdit*>("lineEdit_DefVal");
|
||||
strcpy(info.Name,lineEdit_CurveName->text().toStdString().c_str());
|
||||
strcpy(info.AliasName,lineEdit_CurveName_2->text().toStdString().c_str());
|
||||
strcpy(info.Unit,lineEdit_CurveUnit->text().toStdString().c_str());
|
||||
strcpy(info.AliasUnit,lineEdit_CurveUnit_2->text().toStdString().c_str());
|
||||
strcpy(info.DepthUnit,lineEdit_DepthUnit->text().toStdString().c_str());
|
||||
strcpy(info.DepthHZUnit,lineEdit_DepthUnit_2->text().toStdString().c_str());
|
||||
info.DefVal=lineEdit_DefVal->text().toFloat();
|
||||
|
||||
QLineEdit *lineEdit2_Name=tab2->findChild<QLineEdit*>("lineEdit2_Name");
|
||||
QLineEdit *lineEdit2_Name1=tab2->findChild<QLineEdit*>("lineEdit2_Name1");
|
||||
QLineEdit *lineEdit2_Unit=tab2->findChild<QLineEdit*>("lineEdit2_Unit");
|
||||
QLineEdit *lineEdit2_Unit1=tab2->findChild<QLineEdit*>("lineEdit2_Unit1");
|
||||
QLineEdit *lineEdit2_Start=tab2->findChild<QLineEdit*>("lineEdit2_Start");
|
||||
QLineEdit *lineEdit2_Rlev2=tab2->findChild<QLineEdit*>("lineEdit2_Rlev2");
|
||||
QLineEdit *lineEdit2_ArrayNum=tab2->findChild<QLineEdit*>("lineEdit2_ArrayNum");
|
||||
QLineEdit *lineEdit2_Sample=tab2->findChild<QLineEdit*>("lineEdit2_Sample");
|
||||
QLineEdit *lineEdit2_SampleTotal=tab2->findChild<QLineEdit*>("lineEdit2_SampleTotal");
|
||||
QComboBox *comboBox2_Type=tab2->findChild<QComboBox*>("comboBox2_Type");
|
||||
|
||||
strcpy(info.TimeName,lineEdit2_Name->text().toStdString().c_str());
|
||||
strcpy(info.TimeHZName,lineEdit2_Name1->text().toStdString().c_str());
|
||||
strcpy(info.TimeUnit,lineEdit2_Unit->text().toStdString().c_str());
|
||||
strcpy(info.TimeHZUnit,lineEdit2_Unit1->text().toStdString().c_str());
|
||||
info.StartTime=lineEdit2_Start->text().toFloat();
|
||||
info.TimeLevel=lineEdit2_Rlev2->text().toFloat();
|
||||
info.ArrayNum=lineEdit2_ArrayNum->text().toInt();
|
||||
info.TimeSamples=lineEdit2_Sample->text().toInt();
|
||||
logio.SetWaveInfo(index,&info);
|
||||
logio.CloseWave(index);
|
||||
}
|
||||
logio.Close();
|
||||
// GetObjectEvent().OnDeAttchData(FileName,CurveName);
|
||||
// GetObjectEvent().OnRefreshData(FileName,CurveName);
|
||||
if(Name!=CurveName)
|
||||
{
|
||||
QStringList NodeNames;
|
||||
NodeNames.push_back(ms.WellName);
|
||||
NodeNames.push_back(FileName);
|
||||
NodeNames.push_back(CurveName);
|
||||
NodeNames.push_back(Name);
|
||||
// PaiObject::m_EventAgent.ObjectPropertyChanged(GetProject(),"CurvePropertyEdit",NodeNames);
|
||||
}
|
||||
QMessageBox::information(this,"提示","保存成功!");
|
||||
//accept();
|
||||
}
|
||||
/**
|
||||
*@brief 取消槽函数
|
||||
*/
|
||||
void CCurvePropertyEditDlg::slotCancel()
|
||||
{
|
||||
//reject ();
|
||||
}
|
||||
|
||||
void CCurvePropertyEditDlg::closeEvent(QCloseEvent *)
|
||||
{
|
||||
emit signalsCloseed();
|
||||
//throw std::logic_error("The method or operation is not implemented.");
|
||||
}
|
||||
|
||||
END_OSGGRAPHICS_NAMESPACE
|
||||
50
DataMgr/src/CurvePropertyEdit.h
Normal file
50
DataMgr/src/CurvePropertyEdit.h
Normal file
|
|
@ -0,0 +1,50 @@
|
|||
|
||||
#pragma warning(push,0)
|
||||
#include <cassert>
|
||||
#include <QWidget>
|
||||
#include <QDialog>
|
||||
#include "ConsoleOutputWidget.h"
|
||||
#include "ui_CurvePropertyEdit.h"
|
||||
#include "OSGFramework.h"
|
||||
#pragma warning(pop)
|
||||
|
||||
BEGIN_OSGGRAPHICS_NAMESPACE
|
||||
/**
|
||||
* @brief 表格选择列自定义委托
|
||||
*/
|
||||
class CCurvePropertyEditDlg : public QWidget
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
CCurvePropertyEditDlg(QWidget * parent=0, Qt::WindowFlags flags=0);
|
||||
~CCurvePropertyEditDlg()
|
||||
{
|
||||
if(m_pUI) delete m_pUI;
|
||||
}
|
||||
Ui_CurvePropertyEdit *m_pUI;
|
||||
void init();
|
||||
signals:
|
||||
void signalsCloseed();
|
||||
private slots:
|
||||
/**
|
||||
*@brief 保存槽函数
|
||||
*/
|
||||
void slotSave();
|
||||
|
||||
/**
|
||||
*@brief 取消槽函数*/
|
||||
void slotCancel();
|
||||
void sampleChanged(const QString &);
|
||||
void arrayChanged(const QString &);
|
||||
|
||||
virtual void closeEvent(QCloseEvent *);
|
||||
|
||||
public:
|
||||
QString FileName;//slf文件名
|
||||
QString CurveName;//曲线名
|
||||
int Type;//曲线类型,0-曲线,1-波列
|
||||
QWidget* tab1;
|
||||
QWidget* tab2;
|
||||
};
|
||||
|
||||
END_OSGGRAPHICS_NAMESPACE;
|
||||
|
|
@ -14,17 +14,17 @@
|
|||
// #include "ObjWellLogTABLE.h"
|
||||
// #include "CreateNewCurveDlg.h"
|
||||
//#include "TableTBCurve.h"
|
||||
// #include "CurvePropertyEdit.h"
|
||||
#include "CurvePropertyEdit.h"
|
||||
#include "cdialog.h"//"MyListDlg.h"
|
||||
// #include "curvecomputerDlg.h"
|
||||
#include "CurveComputerDlg.h"
|
||||
// #include "UnitConvertDlg.h"
|
||||
// #include "StatisticsDlg.h"
|
||||
// #include "Statistics2Dlg.h"
|
||||
// #include "CurveComputePage.h"
|
||||
#include "StatisticsDlg.h"
|
||||
#include "Statistics2Dlg.h"
|
||||
#include "CurveComputePage.h"
|
||||
// #include "CopyObjectDlg.h"
|
||||
// #include "WaveComposeDlg.h"//2020.4.14 合成阵列曲线
|
||||
// #include "ShowWave.h"//波列曲线预览
|
||||
// #include "ShowCurve.h"//2020.5.12常规曲线预览
|
||||
#include "ShowWave.h"//波列曲线预览
|
||||
#include "ShowCurve.h"//2020.5.12常规曲线预览
|
||||
#include <QEventLoop>
|
||||
// #include "tableproeditdlg.h"
|
||||
#include "CreateNewTableDlg.h"
|
||||
|
|
@ -709,89 +709,89 @@ void CDataManagger::dataInTable(int curitemType,QString& showWellName,QString& w
|
|||
if(BadlistFiles.size()!=1)return;
|
||||
execInDefTable(curitemType,showWellName,wellFileName,BadlistFiles.at(0));//加载自由数据表
|
||||
}
|
||||
// //曲线数值统计
|
||||
// void CDataManagger::DataStatistics(int Type,const QString& FileName,const QString& CurveName)
|
||||
// {
|
||||
// CLogIO logio(FileName.toStdString().c_str(),(unsigned int)CLogIO::modeReadWrite);
|
||||
// if(!logio.mFile) return ;
|
||||
// Slf_CURVE info;
|
||||
// int index=logio.OpenChannel(CurveName.toStdString().c_str());
|
||||
// if(index<0)return;
|
||||
// logio.CloseChannel(index);
|
||||
// logio.Close();
|
||||
// if(!Type)
|
||||
// {
|
||||
// CStatisticsDlg *pDlg=new CStatisticsDlg();
|
||||
// pDlg->FileName=FileName;
|
||||
// pDlg->CurveName=CurveName;
|
||||
// pDlg->init();
|
||||
// //pDlg->exec();
|
||||
// //delete pDlg;
|
||||
// //pDlg=NULL;
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// CStatistics2Dlg *pDlg=new CStatistics2Dlg();
|
||||
// pDlg->FileName=FileName;
|
||||
// pDlg->CurveName=CurveName;
|
||||
// pDlg->init();
|
||||
// //pDlg->exec();
|
||||
// //delete pDlg;
|
||||
// //pDlg=NULL;
|
||||
// }
|
||||
// }
|
||||
//曲线数值统计
|
||||
void CDataManagger::DataStatistics(int Type,const QString& FileName,const QString& CurveName)
|
||||
{
|
||||
CLogIO logio(FileName.toStdString().c_str(),(unsigned int)CLogIO::modeReadWrite);
|
||||
if(!logio.mFile) return ;
|
||||
Slf_CURVE info;
|
||||
int index=logio.OpenChannel(CurveName.toStdString().c_str());
|
||||
if(index<0)return;
|
||||
logio.CloseChannel(index);
|
||||
logio.Close();
|
||||
if(!Type)
|
||||
{
|
||||
CStatisticsDlg *pDlg=new CStatisticsDlg();
|
||||
pDlg->FileName=FileName;
|
||||
pDlg->CurveName=CurveName;
|
||||
pDlg->init();
|
||||
//pDlg->exec();
|
||||
//delete pDlg;
|
||||
//pDlg=NULL;
|
||||
}
|
||||
else
|
||||
{
|
||||
CStatistics2Dlg *pDlg=new CStatistics2Dlg();
|
||||
pDlg->FileName=FileName;
|
||||
pDlg->CurveName=CurveName;
|
||||
pDlg->init();
|
||||
//pDlg->exec();
|
||||
//delete pDlg;
|
||||
//pDlg=NULL;
|
||||
}
|
||||
}
|
||||
|
||||
// void CDataManagger::DataStatistics(int Type,
|
||||
// const QString& FileName,
|
||||
// const QString& CurveName,
|
||||
// QWidget* parent)
|
||||
// {
|
||||
void CDataManagger::DataStatistics(int Type,
|
||||
const QString& FileName,
|
||||
const QString& CurveName,
|
||||
QWidget* parent)
|
||||
{
|
||||
|
||||
// CLogIO logio(FileName.toStdString().c_str(),(unsigned int)CLogIO::modeReadWrite);
|
||||
// if(!logio.mFile) return ;
|
||||
// Slf_CURVE info;
|
||||
// int index=logio.OpenChannel(CurveName.toStdString().c_str());
|
||||
// if(index<0)return;
|
||||
// logio.CloseChannel(index);
|
||||
// logio.Close();
|
||||
// if(!Type)
|
||||
// {
|
||||
CLogIO logio(FileName.toStdString().c_str(),(unsigned int)CLogIO::modeReadWrite);
|
||||
if(!logio.mFile) return ;
|
||||
Slf_CURVE info;
|
||||
int index=logio.OpenChannel(CurveName.toStdString().c_str());
|
||||
if(index<0)return;
|
||||
logio.CloseChannel(index);
|
||||
logio.Close();
|
||||
if(!Type)
|
||||
{
|
||||
|
||||
// CStatisticsDlg *pDlg1=parent->findChild<CStatisticsDlg*>("statView");
|
||||
// if(NULL == pDlg1 )
|
||||
// {
|
||||
// pDlg1=new CStatisticsDlg(parent,0);
|
||||
// pDlg1->setObjectName("statView");
|
||||
// }
|
||||
CStatisticsDlg *pDlg1=parent->findChild<CStatisticsDlg*>("statView");
|
||||
if(NULL == pDlg1 )
|
||||
{
|
||||
pDlg1=new CStatisticsDlg(parent,0);
|
||||
pDlg1->setObjectName("statView");
|
||||
}
|
||||
|
||||
// /* int width=parent->width();
|
||||
// int height=parent->height();
|
||||
// pDlg->resize(QSize(width,height));*/
|
||||
// pDlg1->FileName=FileName;
|
||||
// pDlg1->CurveName=CurveName;
|
||||
// pDlg1->init();
|
||||
// pDlg1->show();
|
||||
// //pDlg->exec();
|
||||
// //delete pDlg;
|
||||
// //pDlg=NULL;
|
||||
// }
|
||||
// //whp add 2020.5.11 for 波列数据编辑和管理 波列曲线数值统计
|
||||
// else
|
||||
// {
|
||||
/* int width=parent->width();
|
||||
int height=parent->height();
|
||||
pDlg->resize(QSize(width,height));*/
|
||||
pDlg1->FileName=FileName;
|
||||
pDlg1->CurveName=CurveName;
|
||||
pDlg1->init();
|
||||
pDlg1->show();
|
||||
//pDlg->exec();
|
||||
//delete pDlg;
|
||||
//pDlg=NULL;
|
||||
}
|
||||
//whp add 2020.5.11 for 波列数据编辑和管理 波列曲线数值统计
|
||||
else
|
||||
{
|
||||
|
||||
// CStatistics2Dlg *pDlg2=parent->findChild<CStatistics2Dlg*>("stat2View");
|
||||
// if(NULL == pDlg2 )
|
||||
// {
|
||||
// pDlg2=new CStatistics2Dlg(parent,0);
|
||||
// pDlg2->setObjectName("stat2View");
|
||||
// }
|
||||
CStatistics2Dlg *pDlg2=parent->findChild<CStatistics2Dlg*>("stat2View");
|
||||
if(NULL == pDlg2 )
|
||||
{
|
||||
pDlg2=new CStatistics2Dlg(parent,0);
|
||||
pDlg2->setObjectName("stat2View");
|
||||
}
|
||||
|
||||
// pDlg2->FileName=FileName;
|
||||
// pDlg2->CurveName=CurveName;
|
||||
// pDlg2->init();
|
||||
// pDlg2->show();
|
||||
// }
|
||||
// }
|
||||
pDlg2->FileName=FileName;
|
||||
pDlg2->CurveName=CurveName;
|
||||
pDlg2->init();
|
||||
pDlg2->show();
|
||||
}
|
||||
}
|
||||
// //whp add 2020.4.9 for 波列曲线预览
|
||||
// void CDataManagger::DisplayWave(const QString& FileName,const QString& WaveName)
|
||||
// {
|
||||
|
|
@ -839,51 +839,51 @@ void CDataManagger::dataInTable(int curitemType,QString& showWellName,QString& w
|
|||
// pDlg->init();
|
||||
// pDlg->show();
|
||||
// }
|
||||
// void CDataManagger::CurvePropertyEdit(int Type,
|
||||
// const QString& FileName,
|
||||
// const QString& CurveName,
|
||||
// QWidget* parent)
|
||||
// {
|
||||
void CDataManagger::CurvePropertyEdit(int Type,
|
||||
const QString& FileName,
|
||||
const QString& CurveName,
|
||||
QWidget* parent)
|
||||
{
|
||||
|
||||
// CCurvePropertyEditDlg *pDlg=new CCurvePropertyEditDlg(parent,0);
|
||||
// connect(pDlg,SIGNAL(destroyed()),this,SLOT(slotCurvePropertyGc()));
|
||||
// pDlg->FileName=FileName;
|
||||
// pDlg->CurveName=CurveName;
|
||||
// pDlg->Type=Type;
|
||||
// pDlg->init();
|
||||
// pDlg->show();
|
||||
CCurvePropertyEditDlg *pDlg=new CCurvePropertyEditDlg(parent,0);
|
||||
connect(pDlg,SIGNAL(destroyed()),this,SLOT(slotCurvePropertyGc()));
|
||||
pDlg->FileName=FileName;
|
||||
pDlg->CurveName=CurveName;
|
||||
pDlg->Type=Type;
|
||||
pDlg->init();
|
||||
pDlg->show();
|
||||
|
||||
// }
|
||||
}
|
||||
|
||||
// void CDataManagger::CurveCompute(const QString& FileName,
|
||||
// const QStringList& CurveNameList,
|
||||
// QWidget* parent)
|
||||
// {
|
||||
void CDataManagger::CurveCompute(const QString& FileName,
|
||||
const QStringList& CurveNameList,
|
||||
QWidget* parent)
|
||||
{
|
||||
|
||||
// if(CurveNameList.count()==1)
|
||||
// {
|
||||
// CurveComputePage *pPage=parent->findChild<CurveComputePage*>("computeV");
|
||||
// if(NULL == pPage)
|
||||
// {
|
||||
// pPage=new CurveComputePage(parent);
|
||||
// pPage->setObjectName("computeV");
|
||||
// }
|
||||
// connect(pPage,SIGNAL(signalCompute(QStringList)),this,SLOT(slotCurveComputeGc(QStringList)));
|
||||
// pPage->CurveCompute(FileName,CurveNameList);
|
||||
// pPage->init();
|
||||
// pPage->show();
|
||||
// }
|
||||
//else
|
||||
//{
|
||||
// CCurveComputerDlg *pDlg=new CCurveComputerDlg();
|
||||
// pDlg->FileName=FileName;
|
||||
// pDlg->CurveNameList=CurveNameList;
|
||||
// pDlg->init();//FileName, CurveNameList);
|
||||
// //pDlg->exec();
|
||||
// //delete pDlg;
|
||||
// //pDlg=NULL;
|
||||
//}
|
||||
// }
|
||||
if(CurveNameList.count()==1)
|
||||
{
|
||||
CurveComputePage *pPage=parent->findChild<CurveComputePage*>("computeV");
|
||||
if(NULL == pPage)
|
||||
{
|
||||
pPage=new CurveComputePage(parent);
|
||||
pPage->setObjectName("computeV");
|
||||
}
|
||||
connect(pPage,SIGNAL(signalCompute(QStringList)),this,SLOT(slotCurveComputeGc(QStringList)));
|
||||
pPage->CurveCompute(FileName,CurveNameList);
|
||||
pPage->init();
|
||||
pPage->show();
|
||||
}
|
||||
else
|
||||
{
|
||||
CCurveComputerDlg *pDlg=new CCurveComputerDlg();
|
||||
pDlg->FileName=FileName;
|
||||
pDlg->CurveNameList=CurveNameList;
|
||||
pDlg->init();//FileName, CurveNameList);
|
||||
//pDlg->exec();
|
||||
//delete pDlg;
|
||||
//pDlg=NULL;
|
||||
}
|
||||
}
|
||||
|
||||
void CDataManagger::slotCurveComputeGc(QStringList listCurveNames)
|
||||
{
|
||||
|
|
@ -1870,60 +1870,60 @@ void CDataManagger::accept1()
|
|||
// }
|
||||
// }
|
||||
|
||||
// void CDataManagger::CallDisplayWaveOrCurve(int Type, const QString& FileName,
|
||||
// const QString& CurveName, QWidget* parent)
|
||||
// {
|
||||
// CLogIO *logio=new CLogIO();
|
||||
// if(!logio->Open(FileName.toStdString().c_str(),CSlfIO::modeRead))
|
||||
// {
|
||||
// delete logio;
|
||||
// QMessageBox::warning(NULL,"提示","打开文件"+FileName+"错误");
|
||||
// return ;
|
||||
// }
|
||||
void CDataManagger::CallDisplayWaveOrCurve(int Type, const QString& FileName,
|
||||
const QString& CurveName, QWidget* parent)
|
||||
{
|
||||
CLogIO *logio=new CLogIO();
|
||||
if(!logio->Open(FileName.toStdString().c_str(),CSlfIO::modeRead))
|
||||
{
|
||||
delete logio;
|
||||
QMessageBox::warning(NULL,"提示","打开文件"+FileName+"错误");
|
||||
return ;
|
||||
}
|
||||
|
||||
// //常规曲线
|
||||
// if (Type == 0)
|
||||
// {
|
||||
// int index=logio->OpenCurve(CurveName.toStdString().c_str());
|
||||
// if(index<0) {
|
||||
// delete logio;
|
||||
// return;
|
||||
// }
|
||||
// logio->CloseCurve(index);
|
||||
// delete logio;
|
||||
// ShowCurve *pDlg=parent->findChild<ShowCurve*>("curveView");
|
||||
// if(NULL == pDlg)
|
||||
// {
|
||||
// pDlg=new ShowCurve(parent);
|
||||
// pDlg->setObjectName("curveView");
|
||||
// }
|
||||
// pDlg->FileName=FileName;
|
||||
// pDlg->CurveName=CurveName;
|
||||
// pDlg->init();
|
||||
// pDlg->show();
|
||||
// //波列 1
|
||||
// }else
|
||||
// {
|
||||
// int index=logio->OpenWave(CurveName.toStdString().c_str());
|
||||
// if(index<0) {
|
||||
// delete logio;
|
||||
// return;
|
||||
// }
|
||||
// logio->CloseWave(index);
|
||||
// delete logio;
|
||||
// ShowWave *pDlgwage=parent->findChild<ShowWave*>("waveView");
|
||||
// if(NULL == pDlgwage)
|
||||
// {
|
||||
// pDlgwage=new ShowWave(parent);
|
||||
// pDlgwage->setObjectName("waveView");
|
||||
// }
|
||||
// pDlgwage->FileName=FileName;
|
||||
// pDlgwage->WaveName=CurveName;
|
||||
// pDlgwage->init();
|
||||
// pDlgwage->show();
|
||||
// }
|
||||
//常规曲线
|
||||
if (Type == 0)
|
||||
{
|
||||
int index=logio->OpenCurve(CurveName.toStdString().c_str());
|
||||
if(index<0) {
|
||||
delete logio;
|
||||
return;
|
||||
}
|
||||
logio->CloseCurve(index);
|
||||
delete logio;
|
||||
ShowCurve *pDlg=parent->findChild<ShowCurve*>("curveView");
|
||||
if(NULL == pDlg)
|
||||
{
|
||||
pDlg=new ShowCurve(parent);
|
||||
pDlg->setObjectName("curveView");
|
||||
}
|
||||
pDlg->FileName=FileName;
|
||||
pDlg->CurveName=CurveName;
|
||||
pDlg->init();
|
||||
pDlg->show();
|
||||
//波列 1
|
||||
}else
|
||||
{
|
||||
int index=logio->OpenWave(CurveName.toStdString().c_str());
|
||||
if(index<0) {
|
||||
delete logio;
|
||||
return;
|
||||
}
|
||||
logio->CloseWave(index);
|
||||
delete logio;
|
||||
ShowWave *pDlgwage=parent->findChild<ShowWave*>("waveView");
|
||||
if(NULL == pDlgwage)
|
||||
{
|
||||
pDlgwage=new ShowWave(parent);
|
||||
pDlgwage->setObjectName("waveView");
|
||||
}
|
||||
pDlgwage->FileName=FileName;
|
||||
pDlgwage->WaveName=CurveName;
|
||||
pDlgwage->init();
|
||||
pDlgwage->show();
|
||||
}
|
||||
|
||||
// }
|
||||
}
|
||||
|
||||
// void CDataManagger::CallDisplayCurveVerChange(int Type, const QString& FileName,
|
||||
// const QString& CurveName, QWidget* parent, int value, float tipValue)
|
||||
|
|
|
|||
|
|
@ -47,48 +47,89 @@ CONFIG(debug, debug|release){
|
|||
|
||||
FORMS += \
|
||||
CreateNewTableDlg.ui \
|
||||
CurveComputePage.ui \
|
||||
UI/AngleAdjTool.ui \
|
||||
UI/CurveComputer.ui \
|
||||
UI/CurvePropertyEdit.ui \
|
||||
UI/InDefTable.ui \
|
||||
UI/ShowCurve.ui \
|
||||
UI/ShowWave.ui \
|
||||
UI/SigelWell.ui \
|
||||
UI/MutlWell.ui\
|
||||
UI/SmoothTool.ui \
|
||||
UI/Statistics.ui \
|
||||
UI/Statistics2.ui \
|
||||
UI/TiShi.ui \
|
||||
UI/cdialog.ui \
|
||||
UI/doubleeditview.ui \
|
||||
UI/editEnd.ui \
|
||||
UI/sigleTextview.ui \
|
||||
UI/sigleview.ui
|
||||
|
||||
HEADERS += \
|
||||
../../common/geometryutils.h \
|
||||
AdaptionComboBox.h \
|
||||
AngleAdjTool.h \
|
||||
CheckHeadView.h \
|
||||
CreateNewTableDlg.h \
|
||||
CurveComputePage.h \
|
||||
CurveComputerDlg.h \
|
||||
CurvePropertyEdit.h \
|
||||
DataHelper.h \
|
||||
DataManagger.h \
|
||||
DrawCurveView.h \
|
||||
DrawWaveView.h \
|
||||
GeneratedFiles/SmoothTool.h \
|
||||
GeneratedFiles/editEnd.h \
|
||||
InDefTableDlg.h\
|
||||
ShowCurve.h \
|
||||
ShowWave.h \
|
||||
Statistics2Dlg.h \
|
||||
StatisticsDlg.h \
|
||||
TiShiDlg.h\
|
||||
ConsoleOutputWidget.h \
|
||||
cdialog.h \
|
||||
dataslothelper.h
|
||||
dataslothelper.h \
|
||||
deptlineedit.h \
|
||||
view.h
|
||||
|
||||
SOURCES += \
|
||||
../../common/geometryutils.cpp \
|
||||
AdaptionComboBox.cpp \
|
||||
AngleAdjTool.cpp \
|
||||
CStringType.cpp \
|
||||
CheckHeadView.cpp \
|
||||
CreateNewTableDlg.cpp \
|
||||
CurveComputePage.cpp \
|
||||
CurveComputerDlg.cpp \
|
||||
CurvePropertyEdit.cpp \
|
||||
DataHelper.cpp \
|
||||
DataManagger.cpp\
|
||||
DrawCurveView.cpp \
|
||||
DrawWaveView.cpp \
|
||||
GeneratedFiles/SmoothTool.cpp \
|
||||
GeneratedFiles/editEnd.cpp \
|
||||
InDefTableDlg.cpp\
|
||||
ShowCurve.cpp \
|
||||
ShowWave.cpp \
|
||||
Statistics2Dlg.cpp \
|
||||
StatisticsDlg.cpp \
|
||||
TiShiDlg.cpp\
|
||||
ConsoleOutputWidget.cpp \
|
||||
cdialog.cpp \
|
||||
dataslothelper.cpp
|
||||
dataslothelper.cpp \
|
||||
deptlineedit.cpp \
|
||||
view.cpp
|
||||
|
||||
INCLUDEPATH += ./
|
||||
INCLUDEPATH += ./GeneratedFiles
|
||||
INCLUDEPATH += ../include
|
||||
INCLUDEPATH += ../CallManage
|
||||
INCLUDEPATH += ../../Slfio/include
|
||||
INCLUDEPATH += ../../BaseFun/include
|
||||
INCLUDEPATH += ../../ConvertorManager/include
|
||||
INCLUDEPATH += ../../OSGFramework/include
|
||||
INCLUDEPATH += ../../OSGDataModel/include
|
||||
INCLUDEPATH += ../../common
|
||||
|
||||
CONFIG(debug, debug|release){
|
||||
|
|
|
|||
1205
DataMgr/src/DrawCurveView.cpp
Normal file
1205
DataMgr/src/DrawCurveView.cpp
Normal file
File diff suppressed because it is too large
Load Diff
155
DataMgr/src/DrawCurveView.h
Normal file
155
DataMgr/src/DrawCurveView.h
Normal file
|
|
@ -0,0 +1,155 @@
|
|||
#ifndef DRAWCURVEVIEW_H
|
||||
#define DRAWCURVEVIEW_H
|
||||
|
||||
#include <QWidget>
|
||||
#include <QPaintEvent>
|
||||
#include "qpushbutton.h"
|
||||
#include "DataManagger.h"
|
||||
#include "SmoothTool.h"
|
||||
#include "AngleAdjTool.h"
|
||||
#include "editEnd.h"
|
||||
|
||||
//视图边距
|
||||
#define D_VIEW_MARGIN_LEFT 80//左、下边界
|
||||
#define D_VIEW_MARGIN_BOTTOM 30//左、下边界
|
||||
#define D_VIEW_MARGIN_RIGHT 40//右、上边界
|
||||
#define D_VIEW_MARGIN_TOP 25//上边界
|
||||
|
||||
|
||||
class DrawCurveView : public QWidget
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
explicit DrawCurveView(QWidget *parent = nullptr);
|
||||
~DrawCurveView();
|
||||
void initView();
|
||||
void setValues(float *values);
|
||||
void setCount(int count);
|
||||
|
||||
signals:
|
||||
void enableEditButtons();
|
||||
void unableEditButtons();
|
||||
void R2L();
|
||||
void verticalSliderUP();
|
||||
void verticalSliderDOWN();
|
||||
void editModeTips();
|
||||
|
||||
public slots:
|
||||
void editIfBegin_Slot();
|
||||
void smoothWin_Slot();
|
||||
void finishEdit_SLOT();
|
||||
void AngAdjWin_SLOT();
|
||||
void overEditSave();
|
||||
|
||||
private slots:
|
||||
void receiveSmoothData(float sd, float ed, int mode, int cal, int count);
|
||||
void cancelSmoothEdit();
|
||||
void saveSmooth_SLOT(int);
|
||||
void receiveAngleData(float,float,float,float,float);
|
||||
void cancelAngleEdit();
|
||||
|
||||
void continueEditNoSave_SLOT();
|
||||
protected:
|
||||
virtual void paintEvent(QPaintEvent *evt);
|
||||
virtual void mouseMoveEvent(QMouseEvent *event);
|
||||
virtual void mousePressEvent(QMouseEvent *event);
|
||||
virtual void mouseReleaseEvent(QMouseEvent *event);
|
||||
virtual void wheelEvent(QWheelEvent *event);
|
||||
private:
|
||||
//绘制坐标
|
||||
void drawCoord(QPainter *painter);
|
||||
|
||||
//波列数据转换为图像坐标
|
||||
QPointF coordCurvePoint(int ix,float value);
|
||||
|
||||
//绘制波列数据点
|
||||
void drawDataPoints(QPainter *painter);
|
||||
|
||||
//绘制鼠标位置线
|
||||
void drawMousePosLine(QPainter *painter);
|
||||
|
||||
//绘制鼠标单点
|
||||
void usevalueDrawPoint(QPainter *painter);
|
||||
|
||||
//曲线操作
|
||||
void initCurveViewQMenu();
|
||||
void initCurveEditQMenu();
|
||||
|
||||
//获取当前鼠标位置的曲线下标
|
||||
int calMousePoint();
|
||||
|
||||
//绘制编辑模式提示字符
|
||||
void drawEditTishi(QPainter *painter);
|
||||
|
||||
void editIfBegin();
|
||||
void initEditPart();//初始化编辑块
|
||||
void initeditIndex();
|
||||
void oriCur2Edit();//载入原有曲线
|
||||
void drawEditLine(QPainter *painter);//绘制编辑曲线
|
||||
void genEditLine();//生成编辑曲线
|
||||
void changeEditStrValue(int temp);//单回合编辑中更新起始编辑点
|
||||
void sortEdit();//顺序
|
||||
bool saveEdit(int Smooth);//保存编辑
|
||||
void overEdit();//结束编辑
|
||||
|
||||
void AngAdjWin();
|
||||
void smoothWin();
|
||||
|
||||
bool isIneditRange(int);
|
||||
private:
|
||||
bool press_noRelease_mode; //点下未抬起状态
|
||||
int press_noRelease_point; //点下未抬起状态下鼠标位置
|
||||
|
||||
float *m_values;
|
||||
int m_count;
|
||||
bool isInit;
|
||||
|
||||
float m_width;
|
||||
float m_height;
|
||||
QPoint lastPos;
|
||||
QPoint frontPos;
|
||||
QList<float> underBarHeight;
|
||||
|
||||
editEnd *msgBox2;
|
||||
bool editLock;
|
||||
bool ifContinue;//继续编辑标
|
||||
int pressPoint, releasePoint;//记录修改上下界
|
||||
int pressEdit,releaseEdit,curEdit,tempCurEdit; //编辑范围
|
||||
int lastEditPos,editIndexNum;
|
||||
int tempPEdit,tempREdit;//备份
|
||||
float *editValue, *tempEditValue;//编辑值
|
||||
int *editIndex;//有编辑过的index
|
||||
|
||||
int editStrValue, onceEditNum;//编辑起始位置,单次编辑量
|
||||
int *onceEditIndex;//单次修改index记录
|
||||
|
||||
bool hasSelect;//选中区域标识
|
||||
int whichMode;
|
||||
bool EditMode;
|
||||
|
||||
SmoothTool *sTool;
|
||||
AngleAdjTool *angTool;
|
||||
|
||||
float mouseDrawDepth, mouseDrawValue;//实时记录鼠标所在深度及数值
|
||||
|
||||
QPoint tishiEdit;
|
||||
float tishiEditTime;
|
||||
public:
|
||||
QString fileName, curveName;
|
||||
|
||||
int PageSize,CurrentPos,userPos;
|
||||
|
||||
float userCurrentPos;
|
||||
float userCurrentValue;
|
||||
|
||||
QRect rthy,rthy1,rthyt;
|
||||
float factor;
|
||||
float m_Xmin,m_Xmax;
|
||||
float sdep,edep,rlev;
|
||||
public:
|
||||
void button_editIfBegin();
|
||||
void button_smoothWin();
|
||||
void button_AngAdjWin();
|
||||
};
|
||||
|
||||
#endif // DRAWCURVEVIEW_H
|
||||
208
DataMgr/src/DrawWaveView.cpp
Normal file
208
DataMgr/src/DrawWaveView.cpp
Normal file
|
|
@ -0,0 +1,208 @@
|
|||
#include "DrawWaveView.h"
|
||||
#include <QPainter>
|
||||
#include <QLine>
|
||||
#include <qfontmetrics.h>
|
||||
#include <QPainter>
|
||||
|
||||
DrawWaveView::DrawWaveView(QWidget *parent) : QWidget(parent),isInit(false)
|
||||
{
|
||||
m_values=NULL;
|
||||
setYGrid(m_yGrid);
|
||||
}
|
||||
|
||||
|
||||
void DrawWaveView::paintEvent(QPaintEvent *evt)
|
||||
{
|
||||
if(m_count > 0)
|
||||
{
|
||||
QPainter paint;
|
||||
paint.begin(this);
|
||||
paint.setBrush(Qt::white);
|
||||
paint.drawRect(rect());
|
||||
paint.save();
|
||||
|
||||
QPen pen(Qt::red);//lightGray);
|
||||
pen.setStyle(Qt::SolidLine);
|
||||
pen.setWidth(2);
|
||||
paint.setPen(pen);
|
||||
//int y1=rect().bottom(),y2=rect().top();
|
||||
//paint.drawLine(rect().left()+5,rect().top()+5,rect().right()-5,rect().top()+5);
|
||||
|
||||
drawCoord(&paint);
|
||||
drawHorlines(&paint);
|
||||
drawVerLines(&paint);
|
||||
// pen.setWidth(2);
|
||||
pen.setColor(Qt::darkGray);
|
||||
paint.setPen(pen);
|
||||
drawDataPoints(&paint);
|
||||
paint.restore();
|
||||
paint.end();
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
void DrawWaveView::initView()
|
||||
{
|
||||
int width=this->width();
|
||||
int height=this->height();
|
||||
|
||||
m_width=width-D_VIEW_MARGIN_LEFT-D_VIEW_MARGIN_RIGHT;
|
||||
m_height=height-D_VIEW_MARGIN_BOTTOM-D_VIEW_MARGIN_TOP;
|
||||
if(0 >= width || 0 >= height )
|
||||
{
|
||||
isInit=false;
|
||||
|
||||
}else
|
||||
{
|
||||
isInit=true;
|
||||
}
|
||||
|
||||
}
|
||||
void DrawWaveView::drawCoord(QPainter *painter)
|
||||
{
|
||||
|
||||
if(!isInit )
|
||||
{
|
||||
return;
|
||||
}
|
||||
m_vGridHeight=m_height/(float)m_yGrid;
|
||||
m_hGridWidth=m_width/(float)m_xGrid;
|
||||
float rangeX= m_Xmax-m_Xmin;
|
||||
float rangeY=m_Ymax-m_Ymin;
|
||||
m_xGridValue=rangeX/m_xGrid;
|
||||
m_yGridValue=rangeY/m_yGrid;
|
||||
|
||||
// m_pixXValue=m_hGridWidth/m_xGridValue*(rangeX/(m_count-0));
|
||||
// m_pixYValue=m_vGridHeight/m_yGridValue;
|
||||
|
||||
}
|
||||
|
||||
void DrawWaveView::drawHorlines(QPainter *painter)
|
||||
{
|
||||
|
||||
QVector<QLine> lsLines;
|
||||
float offsetY=D_VIEW_MARGIN_TOP;
|
||||
|
||||
int fontWidth=0;
|
||||
int fontHeight=0;
|
||||
float offsetYValue=m_Ymin;
|
||||
QString horText;
|
||||
QFontMetrics metrics(this->font());
|
||||
QPoint point;
|
||||
painter->setPen(Qt::black);
|
||||
for(int i=0;i<=m_yGrid;i++)
|
||||
{
|
||||
lsLines<<QLine(D_VIEW_MARGIN_LEFT,m_height+offsetY,D_VIEW_MARGIN_LEFT+m_width,m_height+offsetY);
|
||||
horText=QString::number(offsetYValue);
|
||||
fontWidth=metrics.width(horText);
|
||||
fontHeight=metrics.height();
|
||||
//绘制垂直坐标文本
|
||||
//if( i > 0 )
|
||||
{
|
||||
point.setX(D_VIEW_MARGIN_LEFT-fontWidth*1.1);
|
||||
point.setY(m_height+offsetY+fontHeight/2.);
|
||||
painter->drawText(point,horText);
|
||||
}
|
||||
|
||||
offsetY-=m_vGridHeight;
|
||||
|
||||
offsetYValue+=m_yGridValue;
|
||||
|
||||
}
|
||||
painter->setPen(Qt::lightGray);
|
||||
painter->drawLines(lsLines);
|
||||
|
||||
|
||||
}
|
||||
|
||||
void DrawWaveView::drawVerLines(QPainter *painter)
|
||||
{
|
||||
QVector<QLine> lsLines;
|
||||
float offsetX=0;
|
||||
QString verText;
|
||||
int fontHeight=0;
|
||||
int fontWidth=0;
|
||||
float offsetXValue=m_Xmin;
|
||||
QFontMetrics metrics(this->font());
|
||||
QPoint point;
|
||||
painter->setPen(Qt::black);
|
||||
for(int i=0;i<=m_xGrid;i++)
|
||||
{
|
||||
offsetX=i*m_hGridWidth;//m_xGridValue*m_width/(m_count-0);
|
||||
offsetXValue=m_Xmin+i*m_xGridValue;
|
||||
//if(offsetX>m_width)offsetX=m_width;
|
||||
lsLines<<QLine(D_VIEW_MARGIN_LEFT+offsetX,D_VIEW_MARGIN_TOP,D_VIEW_MARGIN_LEFT+offsetX,m_height+D_VIEW_MARGIN_TOP);
|
||||
fontHeight=metrics.height();
|
||||
verText=QString::number(offsetXValue);
|
||||
fontWidth=metrics.width(verText);
|
||||
//绘制水平坐标文本
|
||||
//if( i>0 )
|
||||
{
|
||||
|
||||
point.setX(D_VIEW_MARGIN_LEFT+offsetX-fontWidth/2.);
|
||||
point.setY(D_VIEW_MARGIN_TOP+fontHeight*1.1+m_height);
|
||||
painter->drawText(point,verText);
|
||||
|
||||
}
|
||||
//offsetX+=m_hGridWidth;
|
||||
//offsetXValue+=m_xGridValue;
|
||||
}
|
||||
painter->setPen(Qt::lightGray);
|
||||
painter->drawLines(lsLines);
|
||||
}
|
||||
|
||||
QPointF DrawWaveView::coordWavePoint(int ix,float value)
|
||||
{
|
||||
float x=D_VIEW_MARGIN_LEFT+ix*m_width/(m_count-0);//m_pixXValue*ix;
|
||||
//x=i*width/(points-1)
|
||||
float y=D_VIEW_MARGIN_TOP+m_height*((m_Ymax-value)/(m_Ymax-m_Ymin));//m_pixYValue*(value-m_Ymin);
|
||||
return QPoint(x,y);
|
||||
|
||||
}
|
||||
|
||||
void DrawWaveView::setValues(float *values)
|
||||
{
|
||||
if(NULL != m_values)
|
||||
{
|
||||
m_values=NULL;
|
||||
}
|
||||
|
||||
m_values=values;
|
||||
}
|
||||
|
||||
void DrawWaveView::setCount(int count)
|
||||
{
|
||||
m_count=count;
|
||||
}
|
||||
void DrawWaveView::setTime(int time)
|
||||
{
|
||||
m_time=time;
|
||||
}
|
||||
void DrawWaveView::setXGrid(int xGrid)//X轴网格数
|
||||
{
|
||||
m_xGrid=xGrid;
|
||||
}
|
||||
void DrawWaveView::setYGrid(int yGrid)//Y轴网格数
|
||||
{
|
||||
m_yGrid=yGrid;
|
||||
}
|
||||
void DrawWaveView::drawDataPoints(QPainter *painter)
|
||||
{
|
||||
|
||||
float value=0;
|
||||
QPolygonF polygon;
|
||||
QPointF *points=new QPointF[m_count];
|
||||
for(int i=0;i<m_count;i++)
|
||||
{
|
||||
value= m_values[i];
|
||||
points[i]=coordWavePoint(i,value);
|
||||
// painter->drawText(points[i],QString::number(value));
|
||||
polygon<<points[i];
|
||||
}
|
||||
painter->setPen(Qt::darkBlue);
|
||||
painter->drawPolyline(points,m_count);
|
||||
painter->setBrush(Qt::red);
|
||||
painter->drawEllipse(points[m_time],5,5);
|
||||
//painter->drawText(points[m_time],"*");//QString::number(m_values[m_time]));
|
||||
//painter->drawPolygon(polygon);
|
||||
}
|
||||
70
DataMgr/src/DrawWaveView.h
Normal file
70
DataMgr/src/DrawWaveView.h
Normal file
|
|
@ -0,0 +1,70 @@
|
|||
#ifndef DRAWWAVEVIEW_H
|
||||
#define DRAWWAVEVIEW_H
|
||||
|
||||
#include <QWidget>
|
||||
#include <QPaintEvent>
|
||||
//水平线条数
|
||||
#define D_HOR_LIENS 4//5
|
||||
//垂直线条数
|
||||
#define D_VER_LINES 8//10
|
||||
//视图边距
|
||||
#define D_VIEW_MARGIN_LEFT 80//左、下边界
|
||||
#define D_VIEW_MARGIN_BOTTOM 30//左、下边界
|
||||
#define D_VIEW_MARGIN_RIGHT 40//右、上边界
|
||||
#define D_VIEW_MARGIN_TOP 25//上边界
|
||||
|
||||
|
||||
class DrawWaveView : public QWidget
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
explicit DrawWaveView(QWidget *parent = nullptr);
|
||||
//QRect widgetRec;
|
||||
float m_Ymax,m_Ymin;
|
||||
float m_Xmin,m_Xmax;
|
||||
void initView();
|
||||
void setValues(float *values);
|
||||
void setCount(int count);
|
||||
void setTime(int time);
|
||||
void setXGrid(int xGrid);//X轴网格数
|
||||
void setYGrid(int yGrid);//Y轴网格数
|
||||
signals:
|
||||
|
||||
public slots:
|
||||
|
||||
// QWidget interface
|
||||
protected:
|
||||
virtual void paintEvent(QPaintEvent *evt);
|
||||
|
||||
private:
|
||||
//绘制坐标
|
||||
void drawCoord(QPainter *painter);
|
||||
//绘制水平网格
|
||||
void drawHorlines(QPainter *painter);
|
||||
//绘制垂直网格
|
||||
void drawVerLines(QPainter *painter);
|
||||
//波列数据转换为图像坐标
|
||||
QPointF coordWavePoint(int ix,float value);
|
||||
//绘制波列数据点
|
||||
void drawDataPoints(QPainter *painter);
|
||||
|
||||
private:
|
||||
float *m_values;
|
||||
int m_count;
|
||||
int m_time;
|
||||
int m_xGrid,m_yGrid;
|
||||
bool isInit;
|
||||
float m_xGridValue;
|
||||
float m_yGridValue;
|
||||
|
||||
float m_hGridWidth;
|
||||
float m_vGridHeight;
|
||||
|
||||
float m_width;
|
||||
float m_height;
|
||||
|
||||
float m_pixXValue;
|
||||
float m_pixYValue;
|
||||
};
|
||||
|
||||
#endif // DRAWWAVEVIEW_H
|
||||
169
DataMgr/src/GeneratedFiles/SmoothTool.cpp
Normal file
169
DataMgr/src/GeneratedFiles/SmoothTool.cpp
Normal file
|
|
@ -0,0 +1,169 @@
|
|||
#include "SmoothTool.h"
|
||||
#include "ui_SmoothTool.h"
|
||||
#include "qstring.h"
|
||||
#include <qpushbutton.h>
|
||||
|
||||
SmoothTool::SmoothTool(QDialog *parent) :
|
||||
QDialog(parent),
|
||||
Sm_UI(new Ui::SmoothTool)
|
||||
{
|
||||
Sm_UI->setupUi(this);
|
||||
setWindowFlags(windowFlags()& ~Qt::WindowMaximizeButtonHint);
|
||||
setFixedSize(this->width(), this->height());
|
||||
|
||||
this->setWindowFlags(this->windowFlags() |Qt::Dialog);
|
||||
this->setWindowModality(Qt::ApplicationModal);
|
||||
|
||||
connect(Sm_UI->pushButton, SIGNAL(clicked()), this, SLOT(acceptSmooth_SLOT()));
|
||||
connect(Sm_UI->pushButton_2, SIGNAL(clicked()), this, SLOT(reject()));
|
||||
connect(Sm_UI->pushButton_2, SIGNAL(clicked()), this, SLOT(rejectSmooth_SLOT()));
|
||||
|
||||
mode = 0;
|
||||
cal = 0;
|
||||
Sm_UI->radioButtonSm3->setChecked(true);
|
||||
Sm_UI->radioButtonJ->setChecked(true);
|
||||
connect(Sm_UI->radioButtonSm3, SIGNAL(toggled(bool)), this, SLOT(Sm3_SLOT(bool)));
|
||||
connect(Sm_UI->radioButtonSm5, SIGNAL(toggled(bool)), this, SLOT(Sm5_SLOT(bool)));
|
||||
connect(Sm_UI->radioButtonSm7, SIGNAL(toggled(bool)), this, SLOT(Sm7_SLOT(bool)));
|
||||
connect(Sm_UI->radioButtonJ, SIGNAL(toggled(bool)), this, SLOT(SmJ_SLOT(bool)));
|
||||
connect(Sm_UI->radioButtonG, SIGNAL(toggled(bool)), this, SLOT(SmG_SLOT(bool)));
|
||||
connect(Sm_UI->radioButtonU, SIGNAL(toggled(bool)), this, SLOT(SmU_SLOT(bool)));
|
||||
|
||||
maxSmoothCount = 40;
|
||||
Sm_UI->SmoothCount->setMinimum(0);
|
||||
Sm_UI->SmoothCount->setMaximum(maxSmoothCount);
|
||||
Sm_UI->SmoothCount->setSingleStep(1);
|
||||
Sm_UI->spinBox->setRange(0, maxSmoothCount);
|
||||
connect(Sm_UI->spinBox, SIGNAL(valueChanged(int)), Sm_UI->SmoothCount, SLOT(setValue(int)));
|
||||
connect(Sm_UI->SmoothCount, SIGNAL(valueChanged(int)), Sm_UI->spinBox, SLOT(setValue(int)));
|
||||
Sm_UI->spinBox->setValue(0);
|
||||
connect(Sm_UI->SmoothCount, SIGNAL(valueChanged(int)), this, SLOT(smoothApplication_SLOT()));
|
||||
|
||||
}
|
||||
|
||||
SmoothTool::~SmoothTool()
|
||||
{
|
||||
delete Sm_UI;
|
||||
}
|
||||
|
||||
void SmoothTool::setLineEditable()
|
||||
{
|
||||
Sm_UI->spinBox->setValue(0);
|
||||
Sm_UI->lineEdit->setEnabled(true);
|
||||
Sm_UI->lineEdit_2->setEnabled(true);
|
||||
|
||||
}
|
||||
|
||||
void SmoothTool::smoothApplication_SLOT()
|
||||
{
|
||||
QString t = Sm_UI->lineEdit->text();
|
||||
Sdep = t.toFloat();
|
||||
depCheck();
|
||||
t = Sm_UI->lineEdit_2->text();
|
||||
edep = t.toFloat();
|
||||
depCheck();
|
||||
|
||||
Sm_UI->lineEdit->setEnabled(false);
|
||||
Sm_UI->lineEdit_2->setEnabled(false);
|
||||
|
||||
emit sendDataSmoothSign(Sdep, edep, mode, cal, Sm_UI->spinBox->value());
|
||||
}
|
||||
|
||||
void SmoothTool::sdepChange_SLOT()
|
||||
{
|
||||
QString t = Sm_UI->lineEdit->text();
|
||||
Sdep = t.toFloat();
|
||||
depCheck();
|
||||
}
|
||||
void SmoothTool::edepChange_SLOT()
|
||||
{
|
||||
QString t = Sm_UI->lineEdit_2->text();
|
||||
edep = t.toFloat();
|
||||
depCheck();
|
||||
}
|
||||
|
||||
void SmoothTool::setSliderValue(int v)
|
||||
{
|
||||
Sm_UI->spinBox->setValue(v);
|
||||
}
|
||||
|
||||
void SmoothTool::Sm3_SLOT(bool flag)
|
||||
{
|
||||
if(flag==true)
|
||||
mode = 0;
|
||||
}
|
||||
void SmoothTool::Sm5_SLOT(bool flag)
|
||||
{
|
||||
if(flag==true)
|
||||
mode = 1;
|
||||
}
|
||||
void SmoothTool::Sm7_SLOT(bool flag)
|
||||
{
|
||||
if(flag==true)
|
||||
mode = 2;
|
||||
}
|
||||
void SmoothTool::SmJ_SLOT(bool flag)
|
||||
{
|
||||
if(flag==true)
|
||||
cal = 0;
|
||||
}
|
||||
void SmoothTool::SmZ_SLOT(bool flag)
|
||||
{
|
||||
//½ûÓÃ
|
||||
if(flag==true)
|
||||
cal = 1;
|
||||
}
|
||||
void SmoothTool::SmG_SLOT(bool flag)
|
||||
{
|
||||
if(flag==true)
|
||||
cal = 2;
|
||||
}
|
||||
void SmoothTool::SmU_SLOT(bool flag)
|
||||
{
|
||||
if(flag==true)
|
||||
cal = 3;
|
||||
}
|
||||
|
||||
void SmoothTool::depCheck()
|
||||
{
|
||||
if(Sdep < realSdep)Sdep = realSdep;
|
||||
if(edep > realEdep)edep = realEdep;
|
||||
if(edep < Sdep)edep = Sdep;
|
||||
}
|
||||
|
||||
void SmoothTool::setSmoothDep(float rsd, float red, float sd, float ed)
|
||||
{
|
||||
realSdep = rsd;
|
||||
realEdep = red;
|
||||
Sdep = sd;
|
||||
edep = ed;
|
||||
|
||||
depCheck();
|
||||
Sm_UI->lineEdit->setText(QString("%1").arg(Sdep));
|
||||
Sm_UI->lineEdit_2->setText(QString("%1").arg(edep));
|
||||
|
||||
Sm_UI->lineEdit->setValidator(new QIntValidator(realSdep,realEdep,this));
|
||||
Sm_UI->lineEdit_2->setValidator(new QIntValidator(realSdep,realEdep,this));
|
||||
}
|
||||
void SmoothTool::setmaxSmoothCount(int count)
|
||||
{
|
||||
if(count > maxSmoothCount){
|
||||
maxSmoothCount = count;
|
||||
Sm_UI->SmoothCount->setMaximum(maxSmoothCount);
|
||||
}
|
||||
}
|
||||
|
||||
void SmoothTool::sliderChange()
|
||||
{
|
||||
//emit sendDataSmoothSign(Sdep, edep, mode, cal, Sm_UI->spinBox->value());
|
||||
}
|
||||
|
||||
void SmoothTool::rejectSmooth_SLOT()
|
||||
{
|
||||
emit cancelSmooth();
|
||||
}
|
||||
void SmoothTool::acceptSmooth_SLOT()
|
||||
{
|
||||
emit SaveSmooth();
|
||||
accept();
|
||||
}
|
||||
52
DataMgr/src/GeneratedFiles/SmoothTool.h
Normal file
52
DataMgr/src/GeneratedFiles/SmoothTool.h
Normal file
|
|
@ -0,0 +1,52 @@
|
|||
#ifndef SMOOTHTOOL_H
|
||||
#define SMOOTHTOOL_H
|
||||
|
||||
#include <QDialog>
|
||||
|
||||
namespace Ui {
|
||||
class SmoothTool;
|
||||
}
|
||||
|
||||
class SmoothTool : public QDialog
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
signals:
|
||||
void sendDataSmoothSign(float,float,int,int,int);
|
||||
void cancelSmooth();
|
||||
void SaveSmooth();
|
||||
public:
|
||||
explicit SmoothTool(QDialog *parent = 0);
|
||||
~SmoothTool();
|
||||
|
||||
void setSmoothDep(float rsd, float red, float sd, float ed);
|
||||
void setSliderValue(int);
|
||||
void setLineEditable();
|
||||
|
||||
private:
|
||||
float Sdep, edep, realSdep, realEdep; //平滑深度范围, 实际井深度范围
|
||||
int maxSmoothCount;//平滑最大次数
|
||||
int mode, cal;
|
||||
|
||||
void depCheck();
|
||||
void setmaxSmoothCount(int c);
|
||||
void sliderChange();
|
||||
|
||||
public slots:
|
||||
void sdepChange_SLOT();
|
||||
void edepChange_SLOT();
|
||||
void Sm3_SLOT(bool a);
|
||||
void Sm5_SLOT(bool a);
|
||||
void Sm7_SLOT(bool a);
|
||||
void SmJ_SLOT(bool a);
|
||||
void SmZ_SLOT(bool a);
|
||||
void SmG_SLOT(bool a);
|
||||
void SmU_SLOT(bool a);
|
||||
void smoothApplication_SLOT();
|
||||
void rejectSmooth_SLOT();
|
||||
void acceptSmooth_SLOT();
|
||||
private:
|
||||
Ui::SmoothTool *Sm_UI;
|
||||
};
|
||||
|
||||
#endif // SMOOTHTOOL_H
|
||||
45
DataMgr/src/GeneratedFiles/editEnd.cpp
Normal file
45
DataMgr/src/GeneratedFiles/editEnd.cpp
Normal file
|
|
@ -0,0 +1,45 @@
|
|||
#include "editEnd.h"
|
||||
#include "ui_editEnd.h"
|
||||
|
||||
editEnd::editEnd(QDialog *parent) :
|
||||
QDialog(parent),
|
||||
ui(new Ui::editEnd)
|
||||
{
|
||||
ui->setupUi(this);
|
||||
ui->radioButton->setChecked(true);
|
||||
|
||||
connect(ui->radioButton, SIGNAL(toggled(bool)), this, SLOT(smChooseChange_SLOT()));
|
||||
connect(ui->radioButton_2, SIGNAL(toggled(bool)), this, SLOT(smChooseChange_SLOT()));
|
||||
connect(ui->radioButton_3, SIGNAL(toggled(bool)), this, SLOT(smChooseChange_SLOT()));
|
||||
connect(ui->pushButton, SIGNAL(clicked()), this, SLOT(reject()));
|
||||
connect(ui->pushButton, SIGNAL(clicked()), this, SLOT(continueEdit_SLOT()));
|
||||
}
|
||||
|
||||
editEnd::~editEnd()
|
||||
{
|
||||
delete ui;
|
||||
}
|
||||
|
||||
void editEnd::continueEdit_SLOT()
|
||||
{
|
||||
emit sendContinueSignal();
|
||||
}
|
||||
|
||||
int editEnd::SmoothResult(){
|
||||
if(ui->radioButton_3->isChecked())
|
||||
return 1;
|
||||
else if(ui->radioButton_2->isChecked())
|
||||
return 2;
|
||||
else
|
||||
return 3;
|
||||
}
|
||||
|
||||
void editEnd::smChooseChange_SLOT()
|
||||
{
|
||||
if(ui->radioButton_3->isChecked())
|
||||
emit sendSmData(1);
|
||||
else if(ui->radioButton_2->isChecked())
|
||||
emit sendSmData(2);
|
||||
else
|
||||
emit sendSmData(3);
|
||||
}
|
||||
32
DataMgr/src/GeneratedFiles/editEnd.h
Normal file
32
DataMgr/src/GeneratedFiles/editEnd.h
Normal file
|
|
@ -0,0 +1,32 @@
|
|||
#ifndef EDITEND_H
|
||||
#define EDITEND_H
|
||||
|
||||
#include <QDialog>
|
||||
|
||||
namespace Ui {
|
||||
class editEnd;
|
||||
}
|
||||
|
||||
class editEnd : public QDialog
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
signals:
|
||||
void sendSmData(int);
|
||||
void sendContinueSignal();
|
||||
|
||||
public:
|
||||
explicit editEnd(QDialog *parent = 0);
|
||||
~editEnd();
|
||||
|
||||
int SmoothResult();
|
||||
private:
|
||||
Ui::editEnd *ui;
|
||||
|
||||
private slots:
|
||||
void smChooseChange_SLOT();
|
||||
void continueEdit_SLOT();
|
||||
|
||||
};
|
||||
|
||||
#endif // EDITEND_H
|
||||
549
DataMgr/src/ShowCurve.cpp
Normal file
549
DataMgr/src/ShowCurve.cpp
Normal file
|
|
@ -0,0 +1,549 @@
|
|||
#include "ShowCurve.h"
|
||||
#include "ui_ShowCurve.h"
|
||||
//#include "DrawAPicture.h"
|
||||
#include <QDebug>
|
||||
#include <qtimer.h>
|
||||
#include <QPainter>
|
||||
#include <QComboBox>
|
||||
#include <QTextCodec>
|
||||
#include <QMessageBox>
|
||||
#include <QResizeEvent>
|
||||
#include <qtextbrowser.h>
|
||||
#include <QPropertyAnimation>
|
||||
#include "GeometryUtils.h"
|
||||
|
||||
#define R2LTIPS "请拖动数据表格纵向滑块即可完成深度初定位."
|
||||
#define EDITMODETIPS "正处于编辑模式单击右键以完成编辑."
|
||||
|
||||
ShowCurve::ShowCurve(QWidget *parent) :
|
||||
QWidget(parent),
|
||||
m_pUI(new Ui::ShowCurve),vmax(-9999),vmin(-9999),
|
||||
mouseDepth(0),
|
||||
mouseValue(0),
|
||||
getBar(false),
|
||||
locked(true),
|
||||
hasTipsWidth(false)
|
||||
{
|
||||
val=NULL;
|
||||
m_pUI->setupUi(this);
|
||||
int w = width();
|
||||
int h = height();
|
||||
m_timer = new QTimer();
|
||||
|
||||
if(NULL != parent)
|
||||
{
|
||||
parent->setFixedSize(w,h);
|
||||
}
|
||||
|
||||
thisParent = parent;
|
||||
m_view = new DrawCurveView();
|
||||
|
||||
m_pUI->pushButton->setEnabled(false);
|
||||
m_pUI->pushButton_2->setEnabled(false);
|
||||
m_pUI->pushButton_3->setEnabled(false);
|
||||
|
||||
connect(m_pUI->verticalSlider,SIGNAL(valueChanged(int)),this,SLOT(onVerDeptSliderValueChange(int)));
|
||||
connect(m_view, SIGNAL(verticalSliderUP()), this, SLOT(SliderUP_SLOT()));
|
||||
connect(m_view, SIGNAL(verticalSliderDOWN()), this, SLOT(SliderDOWN_SLOT()));
|
||||
connect(m_view, SIGNAL(editModeTips()), this, SLOT(editModeTips_SLOT()));
|
||||
|
||||
connect(m_pUI->deptEdit->lineEdit_Depth, SIGNAL(textChanged( QString )),this,SLOT(slotChangeDepth(QString)));
|
||||
connect(m_pUI->pushButtonScale, SIGNAL(clicked()), this, SLOT(slotChangeScale()));
|
||||
connect(m_pUI->pushButtonStretch, SIGNAL(clicked()), this, SLOT(slotStretch()));
|
||||
connect(m_pUI->pushButtonCompres, SIGNAL(clicked()), this, SLOT(slotCompres()));
|
||||
|
||||
connect(m_pUI->pushButton, SIGNAL(clicked()), this, SLOT(editSig_SLOT()));
|
||||
connect(m_pUI->pushButton_2, SIGNAL(clicked()), this, SLOT(smoothSig_SLOT()));
|
||||
connect(m_pUI->pushButton_3, SIGNAL(clicked()), this, SLOT(angSig_SLOT()));
|
||||
connect(m_view, SIGNAL(enableEditButtons()), this, SLOT(editButtonsCon_SLOT()));
|
||||
connect(m_view, SIGNAL(unableEditButtons()), this, SLOT(unEditButtonsCon_SLOT()));
|
||||
|
||||
//测试
|
||||
// connect(m_pUI->pushButton_4, SIGNAL(clicked()), this, SLOT(testButton_SLOT()));
|
||||
|
||||
QPixmap pushButton_5Pixmap; pushButton_5Pixmap.load(::GetImagePath() + "/UIMake/R2L.png");
|
||||
m_pUI->pushButton_5->setFixedSize(pushButton_5Pixmap.width(), pushButton_5Pixmap.height());
|
||||
m_pUI->pushButton_5->setIcon(pushButton_5Pixmap);
|
||||
m_pUI->pushButton_5->setIconSize(QSize(pushButton_5Pixmap.width(), pushButton_5Pixmap.height()));
|
||||
//m_pUI->pushButton_5->setFlat(true);
|
||||
connect(m_pUI->pushButton_5, SIGNAL(clicked()), this, SLOT(R2LButton_SLOT()));
|
||||
connect(m_view, SIGNAL(R2L()), this, SLOT(R2LMouse_SLOT()));
|
||||
connect(m_pUI->lineEdit_Value, SIGNAL(returnPressed()), this, SLOT(R2LButton_SLOT()));
|
||||
m_pUI->lineEdit_Value->setValidator(new QDoubleValidator(-9999999,9999999,6,this));
|
||||
|
||||
QPixmap pushButton_6Pixmap;
|
||||
pushButton_6Pixmap.load(::GetImagePath() + "/UIMake/L2RLock.png");
|
||||
m_pUI->pushButton_6->setFixedSize(pushButton_6Pixmap.width(), pushButton_6Pixmap.height());
|
||||
m_pUI->pushButton_6->setIcon(pushButton_6Pixmap);
|
||||
m_pUI->pushButton_6->setIconSize(QSize(pushButton_6Pixmap.width(), pushButton_6Pixmap.height()));
|
||||
//m_pUI->pushButton_6->setFlat(true);
|
||||
connect(m_pUI->pushButton_6, SIGNAL(clicked()), this, SLOT(lockChange_SLOT()));
|
||||
|
||||
|
||||
QPixmap sizeButtonPixmap;
|
||||
sizeButtonPixmap.load(::GetImagePath() + "/UIMake/UIButtonBig_o.png");
|
||||
m_pUI->pushButtonStretch->setFixedSize(sizeButtonPixmap.width(), sizeButtonPixmap.height());
|
||||
m_pUI->pushButtonStretch->setIcon(sizeButtonPixmap);
|
||||
m_pUI->pushButtonStretch->setIconSize(QSize(sizeButtonPixmap.width(), sizeButtonPixmap.height()));
|
||||
//m_pUI->pushButtonStretch->setStyleSheet("QPushButton:hover{background-color: rgb(254,164,134);}");
|
||||
//m_pUI->pushButtonStretch->setFlat(true);
|
||||
sizeButtonPixmap.load(::GetImagePath() + "/UIMake/UIButtonSmall_o.png");
|
||||
m_pUI->pushButtonCompres->setFixedSize(sizeButtonPixmap.width(), sizeButtonPixmap.height());
|
||||
m_pUI->pushButtonCompres->setIcon(sizeButtonPixmap);
|
||||
m_pUI->pushButtonCompres->setIconSize(QSize(sizeButtonPixmap.width(), sizeButtonPixmap.height()));
|
||||
//m_pUI->pushButtonCompres->setFlat(true);
|
||||
|
||||
tipsHeight = m_pUI->textBrowser->height();
|
||||
//m_pUI->textBrowser->verticalScrollBar()->setVisible(false);
|
||||
//m_pUI->textBrowser->horizontalScrollBar()->setVisible(false);
|
||||
QPalette pa;
|
||||
pa.setColor(QPalette::WindowText, QColor(120,120,120));
|
||||
m_pUI->textBrowser->setPalette(pa);
|
||||
}
|
||||
void ShowCurve::testButton_SLOT()
|
||||
{
|
||||
|
||||
// DrawAPicture *t = new DrawAPicture();
|
||||
// t->show();
|
||||
}
|
||||
|
||||
void ShowCurve::init()
|
||||
{
|
||||
CLogIO *logio=new CLogIO();
|
||||
logio->Open(FileName.toStdString().c_str(),CSlfIO::modeRead);
|
||||
index=logio->OpenCurve(CurveName.toStdString().c_str());
|
||||
if(index<0) {
|
||||
delete logio;
|
||||
return;
|
||||
}
|
||||
logio->GetCurveInfo(index,&curveinfo);
|
||||
sdep=curveinfo.StartDepth;
|
||||
edep=curveinfo.EndDepth;
|
||||
rlev=curveinfo.DepLevel;
|
||||
m_view->sdep = sdep;
|
||||
m_view->edep = edep;
|
||||
m_view->rlev = rlev;
|
||||
m_view->userPos = 0;
|
||||
m_view->fileName = FileName;
|
||||
m_view->curveName = CurveName;
|
||||
curDepth=sdep+(edep-sdep)/2.;
|
||||
|
||||
count=(curveinfo.EndDepth-curveinfo.StartDepth)/curveinfo.DepLevel+1.5;
|
||||
val=new float[count];
|
||||
logio->ReadCurve(index,curveinfo.StartDepth,count,&val[0]);
|
||||
logio->CloseCurve(index);
|
||||
delete logio;
|
||||
|
||||
if(vmax==-9999 && vmin==-9999)
|
||||
if(!getValueRangeFromIni()){
|
||||
vmax=vmin=val[0];
|
||||
for(int i=1;i<count;i++)
|
||||
{
|
||||
if(vmax<val[i])vmax=val[i];
|
||||
if(vmin>val[i])vmin=val[i];
|
||||
}
|
||||
m_view->m_Xmax=vmax,m_view->m_Xmin=vmin;
|
||||
|
||||
m_pUI->lineEdit_Xmax->setText(QString::number(vmax));
|
||||
m_pUI->lineEdit_Xmax->setValidator(new QDoubleValidator(-9999999,9999999,6,this));
|
||||
m_pUI->lineEdit_Xmin->setText(QString::number(vmin));
|
||||
m_pUI->lineEdit_Xmin->setValidator(new QDoubleValidator(-9999999,9999999,6,this));
|
||||
}
|
||||
|
||||
m_view->setValues(val);
|
||||
m_view->factor=2;
|
||||
initVerMaxRange = 200;
|
||||
m_view->PageSize = int(count / initVerMaxRange + 100);
|
||||
if(m_view->PageSize < 500) m_view->PageSize=500;
|
||||
//m_view.PageSize=(int)(200./curveinfo.DepLevel+0.5);
|
||||
//for small rlev
|
||||
//if(curveinfo.DepLevel<0.005)m_view.PageSize/=100;
|
||||
//else if(curveinfo.DepLevel<0.05)m_view.PageSize/=10;
|
||||
|
||||
|
||||
QString title= QString( curveinfo.Name)+QString::fromUtf8("曲线预览");
|
||||
m_pUI->label_WfName->setText(title);
|
||||
m_pUI->label_StartDepth->setText(QString::number(sdep));
|
||||
m_pUI->label_EndDepth->setText(QString::number(edep));
|
||||
|
||||
m_pUI->deptEdit->lineEdit_Depth->setText(QString::number(curDepth));
|
||||
m_pUI->deptEdit->lineEdit_Depth->setValidator(new QDoubleValidator(-9999999,9999999,6,this));
|
||||
|
||||
QPalette pal;
|
||||
m_pUI->widgetPlot->setStyleSheet("background:lightgray");
|
||||
m_pUI->widgetPlot->setPalette(pal);
|
||||
m_view->setParent(m_pUI->widgetPlot);
|
||||
m_view->setCount(count);
|
||||
m_pUI->verticalSlider->setRange(0, initVerMaxRange);
|
||||
m_pUI->verticalSlider->setValue(initVerMaxRange / 2);
|
||||
}
|
||||
|
||||
bool ShowCurve::getValueRangeFromIni()
|
||||
{
|
||||
QString curveFamilyFilePath = ::GetConfPath() + "CurveFamily.ini";
|
||||
QFile curveFamilyFile(curveFamilyFilePath);
|
||||
if(!curveFamilyFile.open(QIODevice::ReadOnly | QIODevice::Text)) return false;
|
||||
|
||||
bool finished = false;
|
||||
while(!curveFamilyFile.atEnd())
|
||||
{
|
||||
QByteArray line = curveFamilyFile.readLine();
|
||||
QString str(line);
|
||||
QStringList strList = str.split("=");
|
||||
if(strList[0] == CurveName)
|
||||
{
|
||||
strList = str.split(",");
|
||||
float minValue = strList[1].toFloat();
|
||||
float maxValue = strList[2].toFloat();
|
||||
if(minValue < -9999 || minValue > 9999) return false;
|
||||
if(maxValue < -9999 || maxValue > 9999) return false;
|
||||
if(maxValue <= minValue) return false;
|
||||
m_view->m_Xmax=maxValue,m_view->m_Xmin=minValue;
|
||||
|
||||
m_pUI->lineEdit_Xmax->setText(QString::number(maxValue));
|
||||
m_pUI->lineEdit_Xmax->setValidator(new QDoubleValidator(-9999999,9999999,6,this));
|
||||
m_pUI->lineEdit_Xmin->setText(QString::number(minValue));
|
||||
m_pUI->lineEdit_Xmin->setValidator(new QDoubleValidator(-9999999,9999999,6,this));
|
||||
|
||||
finished = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
curveFamilyFile.close();
|
||||
|
||||
return finished;
|
||||
}
|
||||
|
||||
void ShowCurve::editSig_SLOT()
|
||||
{
|
||||
m_view->button_editIfBegin();
|
||||
}
|
||||
void ShowCurve::smoothSig_SLOT()
|
||||
{
|
||||
m_view->button_smoothWin();
|
||||
}
|
||||
void ShowCurve::angSig_SLOT()
|
||||
{
|
||||
m_view->button_AngAdjWin();
|
||||
}
|
||||
|
||||
void ShowCurve::editModeTips_SLOT()
|
||||
{
|
||||
if(!hasTipsWidth){
|
||||
tipsWidth = m_pUI->textBrowser->width();
|
||||
hasTipsWidth = true;
|
||||
}
|
||||
tipsText = QString::fromUtf8(EDITMODETIPS);
|
||||
m_pUI->textBrowser->setText(tipsText);
|
||||
m_pUI->textBrowser->setGeometry(QRect( m_pUI->textBrowser->x(),
|
||||
m_pUI->textBrowser->y(),
|
||||
tipsWidth,
|
||||
m_pUI->textBrowser->height()));
|
||||
|
||||
connect(m_timer, SIGNAL(timeout()), SLOT(promptDisplay()));
|
||||
m_timer->setInterval(1000);
|
||||
m_timer->start();
|
||||
return;
|
||||
}
|
||||
|
||||
void ShowCurve::slotChangeDepth(const QString &text)
|
||||
{
|
||||
if(text.toFloat() < sdep || text.toFloat() > edep)
|
||||
{
|
||||
// m_pUI->lineEdit_Depth->setText(QString::number(curDepth));
|
||||
return;
|
||||
}
|
||||
curDepth = text.toFloat();
|
||||
if(curveinfo.EndDepth == curveinfo.StartDepth) {
|
||||
m_view->CurrentPos = 0;
|
||||
}
|
||||
else {
|
||||
m_view->CurrentPos = (curDepth - curveinfo.StartDepth) / (curveinfo.EndDepth - curveinfo.StartDepth) * count;
|
||||
}
|
||||
|
||||
//m_pUI->lineEdit_Value->setText(QString::number(curDepth));
|
||||
m_view->update();
|
||||
}
|
||||
|
||||
void ShowCurve::resizeEvent(QResizeEvent *resize)
|
||||
{
|
||||
QSize orgsize=this->size();
|
||||
QWidget::resizeEvent(resize);
|
||||
|
||||
if(resize->size().isValid())
|
||||
{
|
||||
QSize changeSize=resize->size();
|
||||
int width=changeSize.width()-orgsize.width();
|
||||
int height= changeSize.height()-orgsize.height();
|
||||
|
||||
m_view->resize(changeSize.width()-150,changeSize.height()-100);
|
||||
m_view->initView();
|
||||
m_view->update();
|
||||
}
|
||||
}
|
||||
|
||||
void ShowCurve::onVerDeptSliderValueChange(int value)
|
||||
{
|
||||
curDepth = edep - (edep-sdep) * value / initVerMaxRange;
|
||||
m_pUI->deptEdit->lineEdit_Depth->setText(QString::number(curDepth));
|
||||
m_view->update();
|
||||
|
||||
curDepRange();
|
||||
}
|
||||
|
||||
void ShowCurve::SliderUP_SLOT()
|
||||
{
|
||||
m_pUI->verticalSlider->setValue(m_pUI->verticalSlider->value() + 1);
|
||||
}
|
||||
|
||||
void ShowCurve::SliderDOWN_SLOT()
|
||||
{
|
||||
m_pUI->verticalSlider->setValue(m_pUI->verticalSlider->value() - 1);
|
||||
}
|
||||
|
||||
void ShowCurve::mouseMkChange(float depth, float value){
|
||||
mouseDepth = depth;
|
||||
mouseValue = value;
|
||||
//m_pUI->lineEdit_Value->setText(QString::number(depth));
|
||||
//m_pUI->lineEdit_curValue->setText(QString::number(value));
|
||||
}
|
||||
|
||||
void ShowCurve::lineEdit_curValue_Change(float v){
|
||||
//m_pUI->lineEdit_curValue->setText(QString::number(v));
|
||||
}
|
||||
|
||||
//联动
|
||||
void ShowCurve::linkVerDeptSliderValueChange(int value, float tipValue)
|
||||
{
|
||||
if(rlev <= 0 || edep == sdep || locked == false)return;
|
||||
|
||||
m_pUI->deptEdit->lineEdit_Depth->setText(QString::number(tipValue));
|
||||
m_pUI->lineEdit_Value->setText(QString::number(tipValue));
|
||||
|
||||
int pageNo = (edep - tipValue) / (edep-sdep) * initVerMaxRange + m_view->PageSize / 2 * rlev / ((edep-sdep)/initVerMaxRange);
|
||||
if(pageNo > initVerMaxRange) pageNo = initVerMaxRange;
|
||||
|
||||
int curCount = (tipValue - sdep) / rlev + 0.5;
|
||||
//m_pUI->lineEdit_curValue->setText(QString::number(val[curCount]));
|
||||
|
||||
m_pUI->verticalSlider->setValue(pageNo);
|
||||
onVerDeptSliderValueChange(pageNo);
|
||||
|
||||
m_view->userCurrentPos = tipValue;
|
||||
|
||||
m_view->update();
|
||||
}
|
||||
|
||||
void ShowCurve::setTableBro(QScrollBar *p)
|
||||
{
|
||||
getBar = true;
|
||||
tableBro = p;
|
||||
}
|
||||
void ShowCurve::setCurveTable(QTableWidget *t)
|
||||
{
|
||||
curveTable = t;
|
||||
}
|
||||
|
||||
//改变刻度按钮槽
|
||||
void ShowCurve::slotChangeScale()
|
||||
{
|
||||
m_view->m_Xmin=m_pUI->lineEdit_Xmin->text().toFloat();
|
||||
m_view->m_Xmax=m_pUI->lineEdit_Xmax->text().toFloat();
|
||||
m_view->update();
|
||||
}
|
||||
|
||||
void ShowCurve::slotStretch()//深度拉伸
|
||||
{
|
||||
initVerMaxRange *= 1.5;
|
||||
if(initVerMaxRange == 1)initVerMaxRange=2;
|
||||
m_pUI->verticalSlider->setRange(0, initVerMaxRange);
|
||||
|
||||
if(!m_pUI->pushButtonCompres->isEnabled())
|
||||
m_pUI->pushButtonCompres->setEnabled(true);
|
||||
|
||||
m_view->PageSize/=1.5;
|
||||
if(m_view->PageSize < 50)
|
||||
m_pUI->pushButtonStretch->setEnabled(false);
|
||||
|
||||
m_view->update();
|
||||
|
||||
curDepRange();
|
||||
}
|
||||
void ShowCurve::slotCompres()//深度压缩
|
||||
{
|
||||
initVerMaxRange /= 1.5;
|
||||
|
||||
if(initVerMaxRange / 1.5 <= 1)
|
||||
m_pUI->pushButtonCompres->setEnabled(false);
|
||||
|
||||
m_pUI->verticalSlider->setRange(0, initVerMaxRange);
|
||||
|
||||
if(!m_pUI->pushButtonStretch->isEnabled())
|
||||
m_pUI->pushButtonStretch->setEnabled(true);
|
||||
|
||||
m_view->PageSize*=1.5;
|
||||
m_view->update();
|
||||
|
||||
curDepRange();
|
||||
}
|
||||
|
||||
//改变绘制窗口的深度显示
|
||||
void ShowCurve::curDepRange()
|
||||
{
|
||||
float cDR_value = m_pUI->verticalSlider->value();
|
||||
float cDR_startDepth = edep - (edep-sdep) * cDR_value / initVerMaxRange;
|
||||
float cDR_endDepth = cDR_startDepth + m_view->PageSize * rlev;
|
||||
|
||||
m_pUI->label_StartDepth->setText(QString::number(cDR_startDepth));
|
||||
m_pUI->label_EndDepth->setText(QString::number(cDR_endDepth));
|
||||
}
|
||||
|
||||
void ShowCurve::showEvent(QShowEvent *sEvent)
|
||||
{
|
||||
QWidget::showEvent(sEvent);
|
||||
|
||||
QRect rec=m_pUI->widgetPlot->geometry();
|
||||
qDebug()<<"value:"<<rec;
|
||||
int w=rec.width();
|
||||
int h=rec.height();
|
||||
|
||||
m_view->setGeometry(0,0,w,h);
|
||||
|
||||
m_view->initView();
|
||||
|
||||
}
|
||||
|
||||
ShowCurve::~ShowCurve()
|
||||
{
|
||||
delete m_pUI;
|
||||
if(val)delete []val;
|
||||
delete m_view;
|
||||
delete m_timer;
|
||||
}
|
||||
|
||||
void ShowCurve::editButtonsCon_SLOT()
|
||||
{
|
||||
m_pUI->pushButton->setEnabled(true);
|
||||
m_pUI->pushButton_2->setEnabled(true);
|
||||
m_pUI->pushButton_3->setEnabled(true);
|
||||
}
|
||||
void ShowCurve::unEditButtonsCon_SLOT()
|
||||
{
|
||||
m_pUI->pushButton->setEnabled(false);
|
||||
m_pUI->pushButton_2->setEnabled(false);
|
||||
m_pUI->pushButton_3->setEnabled(false);
|
||||
}
|
||||
|
||||
void ShowCurve::R2LButton_SLOT()
|
||||
{
|
||||
if(!getBar){
|
||||
if(!hasTipsWidth){
|
||||
tipsWidth = m_pUI->textBrowser->width();
|
||||
hasTipsWidth = true;
|
||||
}
|
||||
tipsText = QString::fromUtf8(R2LTIPS);
|
||||
m_pUI->textBrowser->setText(tipsText);
|
||||
m_pUI->textBrowser->setGeometry(QRect( m_pUI->textBrowser->x(),
|
||||
m_pUI->textBrowser->y(),
|
||||
tipsWidth,
|
||||
m_pUI->textBrowser->height()));
|
||||
|
||||
connect(m_timer, SIGNAL(timeout()), SLOT(promptDisplay()));
|
||||
m_timer->setInterval(1000);
|
||||
m_timer->start();
|
||||
return;
|
||||
}
|
||||
|
||||
//以输入框深度信息
|
||||
float R2L_depthValue = m_pUI->lineEdit_Value->text().toFloat();
|
||||
m_view->userCurrentPos = R2L_depthValue;
|
||||
|
||||
int pageNo = (edep - R2L_depthValue) / (edep-sdep) * initVerMaxRange + m_view->PageSize / 2 * rlev / ((edep-sdep)/initVerMaxRange);
|
||||
if(pageNo > initVerMaxRange) pageNo = initVerMaxRange;
|
||||
m_pUI->verticalSlider->setValue(pageNo);
|
||||
|
||||
int tv = tableBro->maximum();
|
||||
float oneValue = (edep - sdep) / tv;
|
||||
int bv = (R2L_depthValue - sdep) / oneValue;
|
||||
tableBro->setValue(bv);
|
||||
|
||||
setCurveTableForce(R2L_depthValue);
|
||||
}
|
||||
|
||||
void ShowCurve::R2LMouse_SLOT()
|
||||
{
|
||||
if(!getBar) return;
|
||||
|
||||
//以鼠标位置深度信息
|
||||
m_view->userCurrentPos = mouseDepth;
|
||||
|
||||
m_pUI->lineEdit_Value->setText(QString::number(mouseDepth));
|
||||
//m_pUI->lineEdit_curValue->setText(QString::number(mouseValue));
|
||||
|
||||
int tv = tableBro->maximum();
|
||||
float oneValue = (edep - sdep) / tv;
|
||||
int bv = (mouseDepth - sdep) / oneValue;
|
||||
tableBro->setValue(bv);
|
||||
|
||||
setCurveTableForce(mouseDepth);
|
||||
}
|
||||
|
||||
void ShowCurve::promptDisplay()
|
||||
{
|
||||
m_timer->stop();
|
||||
|
||||
//m_pUI->textBrowser->setText(tipsText);
|
||||
//m_pUI->textBrowser->windowOpacity
|
||||
QPropertyAnimation *tipsAnimation = new QPropertyAnimation(m_pUI->textBrowser, "geometry");
|
||||
tipsAnimation->setDuration(2000);
|
||||
tipsAnimation->setStartValue(QRect( m_pUI->textBrowser->x(),
|
||||
m_pUI->textBrowser->y(),
|
||||
tipsWidth,
|
||||
m_pUI->textBrowser->height()
|
||||
));
|
||||
tipsAnimation->setEndValue(QRect( m_pUI->textBrowser->x(),
|
||||
m_pUI->textBrowser->y(),
|
||||
0,
|
||||
m_pUI->textBrowser->height()
|
||||
));
|
||||
|
||||
tipsAnimation->start();
|
||||
connect(tipsAnimation, SIGNAL(finished()), this, SLOT(clearTips_SLOT()));
|
||||
}
|
||||
|
||||
void ShowCurve::clearTips_SLOT()
|
||||
{
|
||||
m_pUI->textBrowser->setText("");
|
||||
}
|
||||
|
||||
void ShowCurve::setCurveTableForce(float dep)
|
||||
{
|
||||
float tv = tableBro->maximum();
|
||||
float oneValue = (edep - sdep) / tv;
|
||||
int bv = (dep - sdep) / oneValue;
|
||||
|
||||
float SCTF_r = bv / tv;
|
||||
|
||||
int SCTF_pos = (curveTable->rowCount()+1) * SCTF_r;
|
||||
|
||||
curveTable->selectRow(SCTF_pos);
|
||||
}
|
||||
|
||||
void ShowCurve::lockChange_SLOT()
|
||||
{
|
||||
locked = !locked;
|
||||
if(locked){
|
||||
QPixmap pushButton_6Pixmap;
|
||||
pushButton_6Pixmap.load(::GetImagePath() + "/UIMake/L2RLock.png");
|
||||
m_pUI->pushButton_6->setFixedSize(pushButton_6Pixmap.width(), pushButton_6Pixmap.height());
|
||||
m_pUI->pushButton_6->setIcon(pushButton_6Pixmap);
|
||||
m_pUI->pushButton_6->setIconSize(QSize(pushButton_6Pixmap.width(), pushButton_6Pixmap.height()));
|
||||
}
|
||||
else{
|
||||
QPixmap pushButton_6Pixmap;
|
||||
pushButton_6Pixmap.load(::GetImagePath() + "/UIMake/L2RUnlock.png");
|
||||
m_pUI->pushButton_6->setFixedSize(pushButton_6Pixmap.width(), pushButton_6Pixmap.height());
|
||||
m_pUI->pushButton_6->setIcon(pushButton_6Pixmap);
|
||||
m_pUI->pushButton_6->setIconSize(QSize(pushButton_6Pixmap.width(), pushButton_6Pixmap.height()));
|
||||
}
|
||||
}
|
||||
91
DataMgr/src/ShowCurve.h
Normal file
91
DataMgr/src/ShowCurve.h
Normal file
|
|
@ -0,0 +1,91 @@
|
|||
#ifndef WIDGET_H1
|
||||
#define WIDGET_H1
|
||||
|
||||
#include <QDir>
|
||||
#include <QWidget>
|
||||
#include <QFileInfo>
|
||||
#include <QScrollBar>
|
||||
#include <qtablewidget.h>
|
||||
#include <QTableWidgetItem>
|
||||
#include <windows.h>
|
||||
#include "MemRdWt.h"
|
||||
#include "DrawCurveView.h"
|
||||
|
||||
namespace Ui {
|
||||
class ShowCurve;
|
||||
}
|
||||
|
||||
class ShowCurve : public QWidget
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
explicit ShowCurve(QWidget *parent = 0);
|
||||
~ShowCurve();
|
||||
Slf_CURVE curveinfo;
|
||||
float *val;
|
||||
DWORD count;
|
||||
float sdep,edep,rlev,stime,etime,curTime,curDepth;
|
||||
float vmax,vmin;
|
||||
DrawCurveView *m_view;
|
||||
//void readcurve();
|
||||
void init();
|
||||
QString FileName,CurveName;
|
||||
int index;
|
||||
|
||||
int initVerMaxRange;
|
||||
|
||||
void mouseMkChange(float depth, float value);
|
||||
|
||||
void lineEdit_curValue_Change(float);
|
||||
|
||||
void setTableBro(QScrollBar *p);
|
||||
void setCurveTable(QTableWidget *t);
|
||||
protected:
|
||||
//implement class QWidget
|
||||
virtual void showEvent(QShowEvent *sEvent);
|
||||
virtual void resizeEvent(QResizeEvent *resize);
|
||||
|
||||
public slots:
|
||||
void onVerDeptSliderValueChange(int value);
|
||||
void SliderUP_SLOT();
|
||||
void SliderDOWN_SLOT();
|
||||
void linkVerDeptSliderValueChange(int value,float tipValue);
|
||||
void slotChangeDepth(const QString &text);
|
||||
void slotChangeScale();
|
||||
void slotStretch();
|
||||
void slotCompres();
|
||||
|
||||
void editSig_SLOT();
|
||||
void smoothSig_SLOT();
|
||||
void angSig_SLOT();
|
||||
void editButtonsCon_SLOT();
|
||||
void unEditButtonsCon_SLOT();
|
||||
void R2LButton_SLOT();
|
||||
void R2LMouse_SLOT();
|
||||
private:
|
||||
bool getBar;
|
||||
bool locked;
|
||||
float mouseDepth, mouseValue;
|
||||
QScrollBar *tableBro;
|
||||
QTableWidget *curveTable;
|
||||
QWidget* thisParent;
|
||||
Ui::ShowCurve *m_pUI;
|
||||
float tipsWidth, tipsHeight;
|
||||
bool hasTipsWidth;
|
||||
QTimer *m_timer;
|
||||
QString tipsText;
|
||||
|
||||
void curDepRange();
|
||||
void setCurveTableForce(float dep);
|
||||
bool getValueRangeFromIni();
|
||||
|
||||
private slots:
|
||||
void testButton_SLOT();
|
||||
void lockChange_SLOT();
|
||||
void editModeTips_SLOT();
|
||||
void promptDisplay();
|
||||
void clearTips_SLOT();
|
||||
};
|
||||
|
||||
#endif
|
||||
276
DataMgr/src/ShowWave.cpp
Normal file
276
DataMgr/src/ShowWave.cpp
Normal file
|
|
@ -0,0 +1,276 @@
|
|||
#include "ShowWave.h"
|
||||
#include "ui_ShowWave.h"
|
||||
#include <QPainter>
|
||||
#include <QComboBox>
|
||||
#include <QDebug>
|
||||
#include <QMessageBox>
|
||||
#include <QResizeEvent>
|
||||
#include <QTextCodec>
|
||||
ShowWave::ShowWave(QWidget *parent) :
|
||||
QWidget(parent),
|
||||
m_pUI(new Ui::ShowWave)
|
||||
{
|
||||
m_pUI->setupUi(this);
|
||||
int w=width();
|
||||
int h=height();
|
||||
if(NULL != parent)
|
||||
{
|
||||
parent->setFixedSize(w,h);
|
||||
}
|
||||
connect(m_pUI->verticalSlider,SIGNAL(valueChanged(int)),this,SLOT(onVerDeptSliderValueChange(int)));
|
||||
connect(m_pUI->horizontalSlider,SIGNAL(valueChanged(int)),this,SLOT(onHorTimeSliderValueChange(int)));
|
||||
QObject::connect(m_pUI->checkBox, SIGNAL(clicked()), this, SLOT(slotCheck()));
|
||||
connect(m_pUI->deptEdit->lineEdit_Depth, SIGNAL(textChanged( QString )),this,SLOT(slotChangeDepth(QString)));
|
||||
connect(m_pUI->lineEdit_Time, SIGNAL(textChanged( QString )),this,SLOT(slotChangeTime(QString)));
|
||||
connect(m_pUI->lineEdit_Value, SIGNAL(textChanged( QString )),this,SLOT(slotChangeValue(QString)));
|
||||
connect(m_pUI->lineEdit_XGrid, SIGNAL(textChanged( QString )),this,SLOT(slotChangeXGrid(QString)));
|
||||
connect(m_pUI->lineEdit_YGrid, SIGNAL(textChanged( QString )),this,SLOT(slotChangeYGrid(QString)));
|
||||
memset(&waveinfo,0,sizeof(Slf_WAVE));
|
||||
//QFile *waveFile;
|
||||
val=NULL;
|
||||
//int count;
|
||||
sdep=0,edep=0,stime=0,etime=0,curTime=0,curDepth=0;
|
||||
}
|
||||
void ShowWave::init()
|
||||
{
|
||||
CLogIO *logio=new CLogIO();
|
||||
if(!logio->Open(FileName.toStdString().c_str(),CSlfIO::modeRead)) {
|
||||
delete logio;
|
||||
return;
|
||||
}
|
||||
index=logio->OpenWave(WaveName.toStdString().c_str());
|
||||
if(index==-1) {
|
||||
delete logio;
|
||||
return;
|
||||
}
|
||||
logio->GetWaveInfo(index,&waveinfo);
|
||||
sdep=waveinfo.StartDepth;
|
||||
edep=waveinfo.EndDepth;
|
||||
stime=waveinfo.StartTime;
|
||||
etime=waveinfo.StartTime+(waveinfo.SamplePoint-0)*waveinfo.ArrayNum*waveinfo.TimeLevel;//TimeSamples=SamplePoint*ArrayNum
|
||||
curTime=waveinfo.StartTime+(etime-stime)/2.;
|
||||
curDepth=sdep+(edep-sdep)/2.;
|
||||
//X轴网格数
|
||||
int xGrid=10;
|
||||
for(int i=9;i>=5;i--)
|
||||
{
|
||||
if(int(etime-stime)%i==0)
|
||||
{
|
||||
xGrid=i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
//count=(waveinfo.EndDepth-waveinfo.StartDepth)/waveinfo.DepLevel+1.5;
|
||||
val=new float[waveinfo.SamplePoint*waveinfo.ArrayNum+1];
|
||||
IsFirst=1;
|
||||
bindViewData();
|
||||
IsFirst=0;
|
||||
//需要罗林解决的问题:
|
||||
//1、"阵列曲线"显示乱码(已解决)
|
||||
//2、时间及深度change函数不能刷新时间或深度slider,时间及深度值无效值没做任何处理(读数据起始深度都为0 造成 )
|
||||
|
||||
// QString title= QString::fromLocal8Bit("阵列曲线")+QString( waveinfo.Name);
|
||||
QString title= QString::fromUtf8("阵列曲线")+QString( waveinfo.Name);
|
||||
m_pUI->label_WfName->setText(title);
|
||||
//m_pUI->label_WfName->setText(QString(QLatin1String(waveinfo.Name)));
|
||||
m_pUI->label_StartTime->setText(QString::number(stime));
|
||||
m_pUI->label_EndTime->setText(QString::number(etime));
|
||||
m_pUI->label_StartDepth->setText(QString::number(sdep));
|
||||
m_pUI->label_EndDepth->setText(QString::number(edep));
|
||||
m_pUI->lineEdit_Time->setText(QString::number(curTime));
|
||||
m_pUI->deptEdit->lineEdit_Depth->setText(QString::number(curDepth));
|
||||
|
||||
QPalette pal;
|
||||
m_pUI->widgetPlot->setStyleSheet("background:lightgray");
|
||||
m_pUI->widgetPlot->setPalette(pal);
|
||||
m_view.setParent(m_pUI->widgetPlot);
|
||||
m_view.setCount(waveinfo.SamplePoint);
|
||||
m_view.m_Xmin=stime,m_view.m_Xmax=etime;
|
||||
m_view.setXGrid(xGrid);
|
||||
m_view.setYGrid(D_HOR_LIENS);
|
||||
m_pUI->lineEdit_YGrid->setText(QString::number(D_HOR_LIENS));
|
||||
m_pUI->lineEdit_XGrid->setText(QString::number(xGrid));
|
||||
m_pUI->verticalSlider->setRange(0,100);
|
||||
m_pUI->verticalSlider->setValue(50);
|
||||
m_pUI->horizontalSlider->setRange(0,100);//(stime,etime);
|
||||
m_pUI->horizontalSlider->setValue(50);//(curTime);
|
||||
m_pUI->checkBox->setCheckState(Qt::Checked);
|
||||
m_pUI->lineEdit_Ymin->setEnabled(0);
|
||||
m_pUI->lineEdit_Ymax->setEnabled(0);
|
||||
logio->CloseWave(index);
|
||||
delete logio;
|
||||
}
|
||||
void ShowWave::slotCheck()
|
||||
{
|
||||
if(m_pUI->checkBox->checkState()==Qt::Unchecked)
|
||||
{
|
||||
m_pUI->lineEdit_Ymin->setEnabled(1);
|
||||
m_pUI->lineEdit_Ymax->setEnabled(1);
|
||||
}
|
||||
else
|
||||
{
|
||||
m_pUI->lineEdit_Ymin->setEnabled(0);
|
||||
m_pUI->lineEdit_Ymax->setEnabled(0);
|
||||
}
|
||||
bindViewData();
|
||||
m_view.update();
|
||||
}
|
||||
void ShowWave::slotChangeXGrid(const QString &text)
|
||||
{
|
||||
int xGrid=text.toInt();
|
||||
if(xGrid<1)
|
||||
{
|
||||
xGrid=1;
|
||||
m_pUI->lineEdit_XGrid->setText(QString::number(xGrid));
|
||||
}
|
||||
if(xGrid>20)
|
||||
{
|
||||
xGrid=20;
|
||||
m_pUI->lineEdit_XGrid->setText(QString::number(xGrid));
|
||||
}
|
||||
m_view.setXGrid(xGrid);
|
||||
m_view.update();
|
||||
}
|
||||
void ShowWave::slotChangeYGrid(const QString &Text)
|
||||
{
|
||||
int yGrid=Text.toInt();
|
||||
if(yGrid<1)
|
||||
{
|
||||
yGrid=1;
|
||||
m_pUI->lineEdit_YGrid->setText(QString::number(yGrid));
|
||||
}
|
||||
if(yGrid>20)
|
||||
{
|
||||
yGrid=20;
|
||||
m_pUI->lineEdit_YGrid->setText(QString::number(yGrid));
|
||||
}
|
||||
m_view.setYGrid(yGrid);
|
||||
m_view.update();
|
||||
}
|
||||
void ShowWave::slotChangeDepth(const QString &text)
|
||||
{
|
||||
if(text.toFloat()<sdep||text.toFloat()>edep)
|
||||
{
|
||||
// m_pUI->lineEdit_Depth->setText(QString::number(curDepth));
|
||||
return;
|
||||
}
|
||||
curDepth=text.toFloat();
|
||||
//根据输入的深度,定位verticalSlider保证lineEdit_Depth与verticalSlider同步
|
||||
//int location=100.*(text.toFloat()-stime)/(etime-stime);
|
||||
//int pos=100.*(edep-curDepth)/(edep-sdep);
|
||||
//m_pUI->verticalSlider->setValue(pos);
|
||||
bindViewData();
|
||||
m_view.update();
|
||||
}
|
||||
void ShowWave::slotChangeValue(const QString &text)
|
||||
{
|
||||
//if(text.toFloat()<stime||text.toFloat()>etime)return;
|
||||
// curDepth=edep-value*(edep-sdep)/100;
|
||||
//m_pUI->lineEdit_Depth->setText(QString::number(curDepth));
|
||||
//bindViewData();
|
||||
//m_view.update();
|
||||
}
|
||||
void ShowWave::slotChangeTime(const QString &text)
|
||||
{
|
||||
if(text.toFloat()<stime||text.toFloat()>etime)return;
|
||||
//根据输入的时间,定位horizontalSlider保证lineEdit_Time与horizontalSlider同步
|
||||
//int location=100.*(text.toFloat()-stime)/(etime-stime);
|
||||
//m_pUI->horizontalSlider->setValue(location);
|
||||
//
|
||||
curTime=text.toFloat();
|
||||
int pos=(curTime-stime)/waveinfo.TimeLevel;
|
||||
m_pUI->lineEdit_Value->setText(QString::number(val[pos]));
|
||||
m_view.setTime(pos);
|
||||
m_view.update();
|
||||
}
|
||||
void ShowWave::resizeEvent(QResizeEvent *resize)
|
||||
{
|
||||
QSize orgsize=this->size();
|
||||
QWidget::resizeEvent(resize);
|
||||
|
||||
if(resize->size().isValid())
|
||||
{
|
||||
QSize changeSize=resize->size();
|
||||
int width=changeSize.width()-orgsize.width();
|
||||
int height= changeSize.height()-orgsize.height();
|
||||
|
||||
m_view.resize(changeSize.width()-150,changeSize.height()-100);
|
||||
m_view.initView();
|
||||
m_view.update();
|
||||
}
|
||||
}
|
||||
void ShowWave::onVerDeptSliderValueChange(int value)
|
||||
{
|
||||
curDepth=edep-value*(edep-sdep)/100;
|
||||
m_pUI->deptEdit->lineEdit_Depth->setText(QString::number(curDepth));
|
||||
bindViewData();
|
||||
m_view.update();
|
||||
}
|
||||
|
||||
void ShowWave::onHorTimeSliderValueChange(int value)
|
||||
{
|
||||
curTime=stime+value*(etime-stime)/100;
|
||||
int pos=(curTime-stime)/waveinfo.TimeLevel;
|
||||
curTime=pos*waveinfo.TimeLevel+stime;//此步计算为了保证显示的时间等于采样时间
|
||||
m_pUI->lineEdit_Time->setText(QString::number(curTime));//value));
|
||||
|
||||
m_pUI->lineEdit_Value->setText(QString::number(val[pos]));
|
||||
m_view.setTime(pos);
|
||||
m_view.update();
|
||||
}
|
||||
|
||||
void ShowWave::bindViewData()
|
||||
{
|
||||
readwave();
|
||||
m_view.setValues(val);
|
||||
if(m_pUI->checkBox->checkState()==Qt::Unchecked)
|
||||
{
|
||||
m_view.m_Ymin=m_pUI->lineEdit_Ymin->text().toFloat();
|
||||
m_view.m_Ymax=m_pUI->lineEdit_Ymax->text().toFloat();
|
||||
}
|
||||
}
|
||||
void ShowWave::showEvent(QShowEvent *sEvent)
|
||||
{
|
||||
QWidget::showEvent(sEvent);
|
||||
|
||||
QRect rec=m_pUI->widgetPlot->geometry();
|
||||
qDebug()<<"value:"<<rec;
|
||||
int w=rec.width();
|
||||
int h=rec.height();
|
||||
//m_view.widgetRec=QRect(0,0,w,h);
|
||||
m_view.setGeometry(0,0,w,h);
|
||||
|
||||
m_view.initView();
|
||||
//m_pUI->widgetPlot->update();
|
||||
}
|
||||
void ShowWave::readwave()
|
||||
{
|
||||
CLogIO *logio=new CLogIO();
|
||||
if(logio->Open(FileName.toStdString().c_str(),CSlfIO::modeRead))
|
||||
{
|
||||
int index=logio->OpenWave(WaveName.toStdString().c_str());
|
||||
if(index>-1)logio->ReadWave(index,curDepth,1,&val[0]);
|
||||
}
|
||||
delete logio;
|
||||
vmax=vmin=val[0];
|
||||
for(int i=1;i<waveinfo.SamplePoint;i++)
|
||||
{
|
||||
if(vmax<val[i])vmax=val[i];
|
||||
if(vmin>val[i])vmin=val[i];
|
||||
}
|
||||
//vmin=10,vmax=110;
|
||||
m_view.m_Ymax=vmax,m_view.m_Ymin=vmin;
|
||||
if(IsFirst)
|
||||
{
|
||||
m_pUI->lineEdit_Ymax->setText(QString::number(vmax));
|
||||
m_pUI->lineEdit_Ymin->setText(QString::number(vmin));
|
||||
}
|
||||
}
|
||||
ShowWave::~ShowWave()
|
||||
{
|
||||
delete m_pUI;
|
||||
//waveFile->close();
|
||||
//delete waveFile;
|
||||
delete []val;
|
||||
}
|
||||
|
||||
56
DataMgr/src/ShowWave.h
Normal file
56
DataMgr/src/ShowWave.h
Normal file
|
|
@ -0,0 +1,56 @@
|
|||
#ifndef WIDGET_H
|
||||
#define WIDGET_H
|
||||
|
||||
#include <QWidget>
|
||||
#include <QTableWidgetItem>
|
||||
#include <windows.h>
|
||||
#include <QFileInfo>
|
||||
#include <QDir>
|
||||
#include "DrawWaveView.h"
|
||||
#include "MemRdWt.h"
|
||||
#pragma execution_character_set("utf-8")
|
||||
namespace Ui {
|
||||
class ShowWave;
|
||||
}
|
||||
class ShowWave : public QWidget
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
explicit ShowWave(QWidget *parent = 0);
|
||||
~ShowWave();
|
||||
Slf_WAVE waveinfo;
|
||||
//QFile *waveFile;
|
||||
float *val;
|
||||
//int count;
|
||||
float sdep,edep,stime,etime,curTime,curDepth;
|
||||
float vmax,vmin;
|
||||
DrawWaveView m_view;
|
||||
void readwave();
|
||||
bool IsFirst;
|
||||
void init();
|
||||
QString FileName,WaveName;
|
||||
int index;
|
||||
protected:
|
||||
//implement class QWidget
|
||||
virtual void showEvent(QShowEvent *sEvent);
|
||||
virtual void resizeEvent(QResizeEvent *resize);
|
||||
|
||||
public slots:
|
||||
void onVerDeptSliderValueChange(int value);
|
||||
void onHorTimeSliderValueChange(int value);
|
||||
void slotCheck();
|
||||
void slotChangeDepth(const QString &text);
|
||||
void slotChangeTime(const QString &text);
|
||||
void slotChangeXGrid(const QString &text);
|
||||
void slotChangeYGrid(const QString &text);
|
||||
void slotChangeValue(const QString &text);
|
||||
private:
|
||||
void bindViewData();
|
||||
private:
|
||||
Ui::ShowWave *m_pUI;
|
||||
|
||||
|
||||
};
|
||||
|
||||
#endif
|
||||
482
DataMgr/src/Statistics2Dlg.cpp
Normal file
482
DataMgr/src/Statistics2Dlg.cpp
Normal file
|
|
@ -0,0 +1,482 @@
|
|||
#pragma warning(push,0)
|
||||
// #include "Family.h"
|
||||
#include <QMessageBox>
|
||||
#include <QFileDialog>
|
||||
#include <QPixmap>
|
||||
#include <QDesktopServices>
|
||||
|
||||
#include "Statistics2Dlg.h"
|
||||
#include "ui_Statistics2.h"
|
||||
#include "CStringType.h"
|
||||
#include "Well.h"
|
||||
|
||||
#pragma warning(pop)
|
||||
using namespace pai::ios::welllog;
|
||||
BEGIN_OSGGRAPHICS_NAMESPACE
|
||||
static float ReadSdep=9999999.,ReadEdep=-9999999;
|
||||
CStatistics2Dlg::~CStatistics2Dlg()
|
||||
{
|
||||
if(m_pUI) delete m_pUI;
|
||||
ReadSdep=9999999.,ReadEdep=-9999999;
|
||||
}
|
||||
CStatistics2Dlg::CStatistics2Dlg(QWidget * parent, Qt::WindowFlags flags)
|
||||
: QWidget(parent,flags)//: QDialog(parent,flags)
|
||||
{
|
||||
m_pUI = new Ui_Statistics2();
|
||||
m_pUI->setupUi(this);
|
||||
int w=width();
|
||||
int h=height();
|
||||
if(NULL != parent)
|
||||
{
|
||||
parent->setFixedSize(w,h);
|
||||
}
|
||||
m_pUI->cancelbtn->hide();
|
||||
QObject::connect(m_pUI->okbtn, SIGNAL(clicked()), this, SLOT(slotSave()));
|
||||
QObject::connect(m_pUI->cancelbtn, SIGNAL(clicked()), this, SLOT(slotCancel()));
|
||||
QObject::connect(m_pUI->okbtn_Refurbish, SIGNAL(clicked()), this, SLOT(slotRefurbish()));
|
||||
QObject::connect(m_pUI->checkBox, SIGNAL(clicked()), this, SLOT(slotCheckLjpl()));
|
||||
QObject::connect(m_pUI->lineEditName, SIGNAL(textChanged( QString )),this,SLOT(slotChangeName(QString)));
|
||||
QObject::connect(m_pUI->lineEditUnit, SIGNAL(textChanged( QString )),this,SLOT(slotChangeUnit(QString)));
|
||||
|
||||
QObject::connect(m_pUI->lineEditXmin, SIGNAL(textChanged( QString )),this,SLOT(slotChangeXmin(QString)));
|
||||
QObject::connect(m_pUI->lineEditXmin2, SIGNAL(textChanged( QString )),this,SLOT(slotChangeXmin2(QString)));
|
||||
QObject::connect(m_pUI->lineEditYmin, SIGNAL(textChanged( QString )),this,SLOT(slotChangeYmin(QString)));
|
||||
QObject::connect(m_pUI->lineEditXmax, SIGNAL(textChanged( QString )),this,SLOT(slotChangeXmax(QString)));
|
||||
QObject::connect(m_pUI->lineEditXmax2, SIGNAL(textChanged( QString )),this,SLOT(slotChangeXmax2(QString)));
|
||||
QObject::connect(m_pUI->lineEditYmax, SIGNAL(textChanged( QString )),this,SLOT(slotChangeYmax(QString)));
|
||||
QObject::connect(m_pUI->lineEditSdep, SIGNAL(textChanged( QString )),this,SLOT(slotChangeSdep(QString)));
|
||||
QObject::connect(m_pUI->lineEditEdep, SIGNAL(textChanged( QString )),this,SLOT(slotChangeEdep(QString)));
|
||||
QObject::connect(m_pUI->lineEditSmallGrid, SIGNAL(textChanged( QString )),this,SLOT(slotChangeSmallGrid(QString)));
|
||||
QObject::connect(m_pUI->horizontalSliderSdep, SIGNAL(valueChanged(int)),this, SLOT(slotSetSdep(int)));
|
||||
QObject::connect(m_pUI->horizontalSliderEdep, SIGNAL(valueChanged(int)),this, SLOT(slotSetEdep(int)));
|
||||
//time
|
||||
QObject::connect(m_pUI->lineEditStime, SIGNAL(textChanged( QString )),this,SLOT(slotChangeStime(QString)));
|
||||
QObject::connect(m_pUI->lineEditEtime, SIGNAL(textChanged( QString )),this,SLOT(slotChangeEtime(QString)));
|
||||
QObject::connect(m_pUI->horizontalSliderStime, SIGNAL(valueChanged(int)),this, SLOT(slotSetStime(int)));
|
||||
QObject::connect(m_pUI->horizontalSliderEtime, SIGNAL(valueChanged(int)),this, SLOT(slotSetEtime(int)));
|
||||
m_SmallGrid=10;
|
||||
fmin=0,fmax=0;
|
||||
m_Xmin=0;
|
||||
m_Xmax=9999;
|
||||
m_Ymin=0;
|
||||
m_Ymax=100;
|
||||
m_Xmin2=0;
|
||||
m_Xmax2=0;
|
||||
m_DrawLjpl=0;
|
||||
val=NULL;
|
||||
QPalette pal;
|
||||
m_pUI->widgetPlot->setStyleSheet("background:lightgray");
|
||||
m_pUI->widgetPlot->setPalette(pal);
|
||||
m_view.setParent(m_pUI->widgetPlot);
|
||||
QRect rec=m_pUI->widgetPlot->geometry();
|
||||
m_view.widgetRec=QRect(0,0,rec.width(),rec.height());
|
||||
|
||||
}
|
||||
|
||||
void CStatistics2Dlg::slotSave()
|
||||
{
|
||||
// //保存位图,该部分需要罗林配合
|
||||
// //QMessageBox::about(NULL,"提示","暂时未作");
|
||||
// QString desktopPath=QDesktopServices::storageLocation(QDesktopServices::HomeLocation);
|
||||
// desktopPath=desktopPath+QString("/Statistics2.jpg");
|
||||
// QString imagePath=QFileDialog::getSaveFileName(this,"(Save Image)",desktopPath,"JPG File(*.jpg)");
|
||||
// QSize vSize=m_view.size();
|
||||
// QPixmap image(vSize);
|
||||
// m_view.render(&image);
|
||||
// bool isSave=image.save(imagePath,"JPG");
|
||||
// QMessageBox::information(this,"提示","图片保存成功!");
|
||||
// //accept();
|
||||
}
|
||||
/**
|
||||
*@brief 取消槽函数
|
||||
*/
|
||||
void CStatistics2Dlg::slotCancel()
|
||||
{
|
||||
delete []val;
|
||||
//reject ();
|
||||
|
||||
}
|
||||
void CStatistics2Dlg::slotCheckLjpl()
|
||||
{
|
||||
m_DrawLjpl=!m_DrawLjpl;
|
||||
m_view.m_DrawLjpl=m_DrawLjpl;
|
||||
m_view.update();
|
||||
}
|
||||
void CStatistics2Dlg::slotChangeName(const QString &text)
|
||||
{
|
||||
m_CurveName=text;//m_pUI->lineEditName->text();
|
||||
m_view.m_CurveName=m_CurveName;
|
||||
m_view.update();
|
||||
}
|
||||
void CStatistics2Dlg::slotChangeUnit(const QString &text)
|
||||
{
|
||||
m_CurveUnit=text;//m_pUI->lineEditUnit->text();
|
||||
m_view.m_CurveUnit=m_CurveUnit;
|
||||
m_view.update();
|
||||
}
|
||||
void CStatistics2Dlg::slotChangeXmin(const QString &text)
|
||||
{
|
||||
m_Xmin=text.toFloat();
|
||||
Refurbish();
|
||||
m_view.update();
|
||||
}
|
||||
void CStatistics2Dlg::slotChangeXmax(const QString &text)
|
||||
{
|
||||
m_Xmax=text.toFloat();
|
||||
Refurbish();
|
||||
m_view.update();
|
||||
}
|
||||
void CStatistics2Dlg::slotChangeXmin2(const QString &text)
|
||||
{
|
||||
m_Xmin2=text.toFloat();
|
||||
Refurbish();
|
||||
m_view.update();
|
||||
}
|
||||
void CStatistics2Dlg::slotChangeXmax2(const QString &text)
|
||||
{
|
||||
m_Xmax2=text.toFloat();
|
||||
Refurbish();
|
||||
m_view.update();
|
||||
}
|
||||
void CStatistics2Dlg::slotChangeYmin(const QString &text)
|
||||
{
|
||||
m_Ymin=text.toFloat();
|
||||
Refurbish();
|
||||
m_view.update();
|
||||
}
|
||||
void CStatistics2Dlg::slotChangeYmax(const QString &text)
|
||||
{
|
||||
m_Ymax=text.toFloat();
|
||||
Refurbish();
|
||||
m_view.update();
|
||||
}
|
||||
void CStatistics2Dlg::slotChangeSdep(const QString &text)
|
||||
{
|
||||
sdep=text.toFloat();
|
||||
if(sdep<m_flStDepth)sdep=m_flStDepth;
|
||||
//Refurbish();
|
||||
//m_view.update();
|
||||
}
|
||||
void CStatistics2Dlg::slotChangeEdep(const QString &text)
|
||||
{
|
||||
edep=text.toFloat();
|
||||
if(edep>m_flEnDepth)edep=m_flEnDepth;
|
||||
//Refurbish();
|
||||
//m_view.update();
|
||||
}
|
||||
void CStatistics2Dlg::slotChangeSmallGrid(const QString &text)
|
||||
{
|
||||
m_SmallGrid=text.toInt();
|
||||
if(m_SmallGrid<1)
|
||||
{
|
||||
m_SmallGrid=1;
|
||||
m_pUI->lineEditSmallGrid->setText(QString::number(m_SmallGrid));
|
||||
}
|
||||
if(m_SmallGrid>10)
|
||||
{
|
||||
m_SmallGrid=10;
|
||||
m_pUI->lineEditSmallGrid->setText(QString::number(m_SmallGrid));
|
||||
}
|
||||
Refurbish();
|
||||
m_view.update();
|
||||
}
|
||||
void CStatistics2Dlg::slotSetSdep(const int &dep)
|
||||
{
|
||||
m_pUI->lineEditSdep->setText(QString::number(dep/100.));
|
||||
}
|
||||
void CStatistics2Dlg::slotSetEdep(const int &dep)
|
||||
{
|
||||
m_pUI->lineEditEdep->setText(QString::number(dep/100.));
|
||||
|
||||
}
|
||||
//time
|
||||
void CStatistics2Dlg::slotChangeStime(const QString &text)
|
||||
{
|
||||
stime=text.toFloat();
|
||||
if(stime<m_flStTime)stime=m_flStTime;
|
||||
Refurbish();
|
||||
m_view.update();
|
||||
}
|
||||
void CStatistics2Dlg::slotChangeEtime(const QString &text)
|
||||
{
|
||||
etime=text.toFloat();
|
||||
if(etime>m_flEndTime)etime=m_flEndTime;
|
||||
Refurbish();
|
||||
m_view.update();
|
||||
}
|
||||
void CStatistics2Dlg::slotSetStime(const int &time)
|
||||
{
|
||||
m_pUI->lineEditStime->setText(QString::number(time/100.));
|
||||
}
|
||||
void CStatistics2Dlg::slotSetEtime(const int &time)
|
||||
{
|
||||
m_pUI->lineEditEtime->setText(QString::number(time/100.));
|
||||
|
||||
}
|
||||
//
|
||||
void CStatistics2Dlg::init()
|
||||
{
|
||||
CLogIO logio(FileName.toStdString().c_str(),(unsigned int)CLogIO::modeReadWrite);
|
||||
|
||||
int index=logio.OpenWave(CurveName.toStdString().c_str());
|
||||
if(index<0) return;
|
||||
logio.GetWaveInfo(index,&info);
|
||||
num=(info.EndDepth-info.StartDepth)/info.DepLevel+1.5;
|
||||
logio.CloseWave(index);
|
||||
logio.Close();
|
||||
d_min=info.StartDepth;
|
||||
d_max=info.EndDepth;
|
||||
m_flEnDepth = d_max;
|
||||
m_flStDepth = d_min;
|
||||
rlev=info.DepLevel;
|
||||
|
||||
m_flStTime=info.StartTime;
|
||||
m_flEndTime=info.StartTime+info.TimeSamples*info.TimeLevel;
|
||||
m_CurveName=CurveName,m_CurveUnit="("+QLatin1String(info.Unit)+")";
|
||||
m_pUI->lineEditName->setText(CurveName);
|
||||
m_pUI->lineEditUnit->setText(m_CurveUnit);
|
||||
|
||||
m_pUI->lineEditSdep1->setText(QString::number(d_min));
|
||||
m_pUI->lineEditEdep1->setText(QString::number(d_max));
|
||||
m_pUI->horizontalSliderSdep->setRange(d_min*100,d_max*100);
|
||||
|
||||
m_pUI->horizontalSliderEdep->setRange(d_min*100,d_max*100);
|
||||
|
||||
if(num*info.TimeSamples<=100000)//当数据点较少时全部统计
|
||||
{
|
||||
sdep=d_min;
|
||||
edep=d_max;
|
||||
}
|
||||
else//当数据点较多时统计中间的5000个深度点
|
||||
{
|
||||
int m_ShowDepPoint=100000./info.TimeSamples;
|
||||
m_ShowDepPoint/=2;
|
||||
sdep=d_min+(num/2.-m_ShowDepPoint)*rlev;
|
||||
edep=sdep+2.*m_ShowDepPoint*rlev;
|
||||
}
|
||||
m_pUI->lineEditSdep->setText(QString::number(sdep));
|
||||
m_pUI->lineEditEdep->setText(QString::number(edep));
|
||||
m_pUI->horizontalSliderSdep->setValue(sdep*100);
|
||||
m_pUI->horizontalSliderEdep->setValue(edep*100);
|
||||
m_pUI->lineEditSmallGrid->setText(QString::number(m_SmallGrid));
|
||||
//time
|
||||
m_pUI->lineEditStime1->setText(QString::number(m_flStTime));
|
||||
m_pUI->lineEditEtime1->setText(QString::number(m_flEndTime));
|
||||
m_pUI->horizontalSliderStime->setRange(m_flStTime*100,m_flEndTime*100);
|
||||
|
||||
m_pUI->horizontalSliderEtime->setRange(m_flStTime*100,m_flEndTime*100);
|
||||
|
||||
stime=m_flStTime;etime=m_flEndTime;
|
||||
m_pUI->lineEditStime->setText(QString::number(stime));
|
||||
m_pUI->lineEditEtime->setText(QString::number(etime));
|
||||
m_pUI->horizontalSliderStime->setValue(stime*100);
|
||||
m_pUI->horizontalSliderEtime->setValue(etime*100);
|
||||
//
|
||||
Statistics2();
|
||||
m_Xmin=min;
|
||||
m_Xmax=max;
|
||||
m_pUI->lineEditXmin->setText(QString::number(min));
|
||||
m_pUI->lineEditXmax->setText(QString::number(max));
|
||||
m_pUI->lineEditYmin->setText(QString::number(m_Ymin));
|
||||
m_pUI->lineEditYmax->setText(QString::number(m_Ymax));
|
||||
Refurbish();
|
||||
//初始化主频刻度范围:15%————85%
|
||||
int pp=0;
|
||||
for(int i=0;i<10*m_SmallGrid;i++)
|
||||
{
|
||||
pp+=point[i];
|
||||
if((float)pp/(float)ShowPoint>=0.15)
|
||||
{
|
||||
m_Xmin2=m_Xmin+i*(m_Xmax-m_Xmin)/(10.*m_SmallGrid);
|
||||
ibegin=i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
pp=0;
|
||||
for(int i=0;i<10*m_SmallGrid;i++)
|
||||
{
|
||||
pp+=point[i];
|
||||
if((float)pp/(float)ShowPoint>=0.85)
|
||||
{
|
||||
m_Xmax2=m_Xmin+i*(m_Xmax-m_Xmin)/(10.*m_SmallGrid);
|
||||
iend=i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
m_pUI->lineEditXmin2->setText(QString::number(m_Xmin2));
|
||||
m_pUI->lineEditXmax2->setText(QString::number(m_Xmax2));
|
||||
//频率刻度取整
|
||||
if(fmax>50.)fmax=100.;
|
||||
else if(fmax>20.)fmax=50.;
|
||||
else if(fmax>10.)fmax=20.;
|
||||
else if(fmax>5.)fmax=10.;
|
||||
else fmax=5.;
|
||||
m_Ymax=fmax;
|
||||
m_Ymin=0;
|
||||
m_pUI->lineEditYmin->setText(QString::number(m_Ymin));
|
||||
m_pUI->lineEditYmax->setText(QString::number(m_Ymax));
|
||||
//for plot
|
||||
m_view.m_CurveName=m_CurveName;m_view.m_CurveUnit=m_CurveUnit;//显示的曲线名称和单位
|
||||
for(int i=0;i<100;i++)m_view.point[i]=point[i];
|
||||
m_view.ShowPoint=ShowPoint;
|
||||
m_view.m_SmallGrid=m_SmallGrid;
|
||||
|
||||
m_view.m_Ymax=m_Ymax;
|
||||
m_view.m_Xmin=m_Xmin,m_view.m_Xmax=m_Xmax;
|
||||
m_view.m_DrawLjpl=m_DrawLjpl;
|
||||
m_view.m_Xmin2=m_Xmin2,m_view.m_Xmax2=m_Xmax2;
|
||||
m_view.update();
|
||||
}
|
||||
void CStatistics2Dlg::Statistics2()
|
||||
{
|
||||
bool ReReadData=1;
|
||||
d_min=sdep;
|
||||
d_max=edep;
|
||||
if(val!=NULL){
|
||||
if((sdep>=ReadSdep&&sdep<=ReadEdep)&&(edep>=ReadSdep&&edep<=ReadEdep))ReReadData=0;}//如果要统计的深度在读取的深度范围内,就不在读数据
|
||||
if(ReReadData)
|
||||
{
|
||||
CLogIO logio(FileName.toStdString().c_str(),(unsigned int)CLogIO::modeReadWrite);
|
||||
int index=logio.OpenWave(CurveName.toStdString().c_str());
|
||||
if(index<0) return;
|
||||
if(val!=NULL)delete []val;
|
||||
num=(edep-sdep)/rlev+1.5;
|
||||
val=new float[num*info.TimeSamples];
|
||||
logio.ReadWave(index,sdep,num,&val[0]);
|
||||
logio.CloseWave(index);
|
||||
logio.Close();
|
||||
ReadSdep=sdep;
|
||||
ReadEdep=edep;
|
||||
}
|
||||
int ist=(sdep-ReadSdep)/rlev+0.5;
|
||||
int dpoint=(edep-sdep)/rlev+0.5;//深度点数
|
||||
int timepoint=(etime-stime)/info.TimeLevel+0.5;
|
||||
tpoint=dpoint*timepoint;
|
||||
min=99999;max=-99999;
|
||||
average=0;
|
||||
depmin=depmax=d_min;
|
||||
timemin=timemax=stime;
|
||||
int InvalidNum=0;
|
||||
for(int i=ist;i<ist+dpoint;i++)
|
||||
{
|
||||
for(int j=(stime-m_flStTime)/info.TimeLevel;j<(etime-m_flStTime)/info.TimeLevel;j++)
|
||||
{
|
||||
int pos=i*info.TimeSamples+j;
|
||||
if(val[pos]==-9999.||val[pos]==-999.25||val[pos]==-99999.||val[pos]==-9999.25)
|
||||
{
|
||||
InvalidNum++;
|
||||
continue;
|
||||
}
|
||||
if(min>val[pos]){min=val[pos];depmin=d_min+i*rlev;timemin=j*info.TimeLevel+m_flStTime;}
|
||||
if(max<val[pos]){max=val[pos];depmax=d_min+i*rlev;timemax=j*info.TimeLevel+m_flStTime;}
|
||||
average+=val[pos];
|
||||
}
|
||||
}
|
||||
//剔除无效点
|
||||
if(tpoint>InvalidNum)average/=(tpoint-InvalidNum);
|
||||
else average=val[(ist+1)*info.TimeSamples+int((stime-m_flStTime)/info.TimeLevel+0.5)];
|
||||
float del=(m_Xmax-m_Xmin)/(10*m_SmallGrid);//del=(max-min)/(10*m_SmallGrid);
|
||||
for(int j=0;j<100;j++)point[j]=0;
|
||||
double vvv,v1,v2;
|
||||
Variance=0.;
|
||||
for(int i=ist;i<ist+dpoint;i++)
|
||||
{
|
||||
for(int k=(stime-m_flStTime)/info.TimeLevel;k<(etime-m_flStTime)/info.TimeLevel;k++)
|
||||
{
|
||||
int pos=i*info.TimeSamples+k;
|
||||
if(val[pos]==-9999.||val[pos]==-999.25||val[pos]==-99999.||val[pos]==-9999.25)continue;
|
||||
Variance+=(val[pos]-average)*(val[pos]-average);
|
||||
for(int j=0;j<10*m_SmallGrid;j++)
|
||||
{
|
||||
vvv=val[pos],v1=m_Xmin+j*del,v2=m_Xmin+(float)(j+1)*del;
|
||||
if(vvv>=v1&&vvv<=v2)
|
||||
{
|
||||
point[j]++;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if(tpoint>InvalidNum)Variance/=(tpoint-InvalidNum);
|
||||
else Variance=0;
|
||||
Variance=sqrt(Variance);
|
||||
DWORD maxpoint=0;//point[0];
|
||||
ShowPoint=0;//point[0];
|
||||
for(int j=0;j<10*m_SmallGrid;j++)
|
||||
{
|
||||
if(maxpoint<point[j])
|
||||
{
|
||||
maxpoint=point[j];
|
||||
m_PVmin=m_Xmin+(float)j*del,m_PVmax=m_Xmin+(float)(j+1)*del;
|
||||
}
|
||||
ShowPoint+=point[j];
|
||||
}
|
||||
fmax=(float)maxpoint/(float)ShowPoint*100.;//(float)tpoint*100.;
|
||||
}
|
||||
|
||||
void CStatistics2Dlg::slotRefurbish()
|
||||
{
|
||||
Refurbish();
|
||||
m_view.update();
|
||||
}
|
||||
|
||||
void CStatistics2Dlg::Refurbish()
|
||||
{
|
||||
if(val==NULL)return;
|
||||
/*sdep=m_pUI->lineEditSdep->text().toFloat();
|
||||
edep=m_pUI->lineEditEdep->text().toFloat();
|
||||
m_Xmin=m_pUI->lineEditXmin->text().toFloat();
|
||||
m_Xmax=m_pUI->lineEditXmax->text().toFloat();
|
||||
m_Xmin2=m_pUI->lineEditXmin2->text().toFloat();
|
||||
m_Xmax2=m_pUI->lineEditXmax2->text().toFloat();
|
||||
m_Ymin=m_pUI->lineEditYmin->text().toFloat();
|
||||
m_Ymax=m_pUI->lineEditYmax->text().toFloat();
|
||||
if(sdep<m_flStDepth)sdep=m_flStDepth;
|
||||
if(edep>m_flEnDepth)edep=m_flEnDepth;
|
||||
if(sdep>=edep)return;
|
||||
if(m_Xmin>=m_Xmax)return;
|
||||
if(m_Ymin>=m_Ymax)return;
|
||||
m_SmallGrid=m_pUI->lineEditSmallGrid->text().toInt();
|
||||
if(m_SmallGrid<1)
|
||||
{
|
||||
m_SmallGrid=1;
|
||||
m_pUI->lineEditSmallGrid->setText(QString::number(m_SmallGrid));
|
||||
}
|
||||
if(m_SmallGrid>10)
|
||||
{
|
||||
m_SmallGrid=10;
|
||||
m_pUI->lineEditSmallGrid->setText(QString::number(m_SmallGrid));
|
||||
}*/
|
||||
if(sdep>=edep)return;
|
||||
if(m_Xmin>=m_Xmax)return;
|
||||
if(m_Ymin>=m_Ymax)return;
|
||||
Statistics2();
|
||||
QString str,jieguo;
|
||||
str="开始深度 : "+QString::number(sdep)+"("+QLatin1String(info.DepthUnit)+")";jieguo="\r\n"+str;
|
||||
str="结束深度 : "+QString::number(edep)+"("+QLatin1String(info.DepthUnit)+")";jieguo+="\r\n\r\n"+str;
|
||||
str="统计深度段: "+QString::number(edep-sdep)+"("+QLatin1String(info.DepthUnit)+")";jieguo+="\r\n\r\n"+str;
|
||||
str="开始时间 : "+QString::number(stime)+"("+QLatin1String(info.TimeUnit)+")";jieguo+="\r\n\r\n"+str;
|
||||
str="结束时间 : "+QString::number(etime)+"("+QLatin1String(info.TimeUnit)+")";jieguo+="\r\n\r\n"+str;
|
||||
|
||||
str="有效数据点数 : "+QString::number(ShowPoint);jieguo+="\r\n\r\n"+str;//tpoint);
|
||||
str="最小值 : "+QString::number(min)+m_CurveUnit;jieguo+="\r\n\r\n"+str;
|
||||
str="最小值深度、时间 : "+QString::number(depmin)+"("+QLatin1String(info.DepthUnit)+"),"+QString::number(timemin)+"("+QLatin1String(info.TimeUnit)+")";jieguo+="\r\n\r\n"+str;
|
||||
str="最大值 : "+QString::number(max)+m_CurveUnit;jieguo+="\r\n\r\n"+str;
|
||||
str="最大值深度、时间 : "+QString::number(depmax)+"("+QLatin1String(info.DepthUnit)+"),"+QString::number(timemax)+"("+QLatin1String(info.TimeUnit)+")";jieguo+="\r\n\r\n"+str;
|
||||
str="平均值 : "+QString::number(average)+m_CurveUnit;jieguo+="\r\n\r\n"+str;
|
||||
str="最大频率 : "+QString::number(fmax);str+="/%";jieguo+="\r\n\r\n"+str;
|
||||
str="最大频率数值范围 : "+QString::number(m_PVmin)+" -- "+QString::number(m_PVmax);jieguo+="\r\n\r\n"+str;
|
||||
str="标准偏差 : "+QString::number(Variance);jieguo+="\r\n\r\n"+str;
|
||||
m_pUI->textEditJieGuo->setText(jieguo);
|
||||
//for plot
|
||||
m_view.m_CurveName=m_CurveName;m_view.m_CurveUnit=m_CurveUnit;//显示的曲线名称和单位
|
||||
for(int i=0;i<100;i++)m_view.point[i]=point[i];
|
||||
m_view.ShowPoint=ShowPoint;
|
||||
m_view.m_SmallGrid=m_SmallGrid;
|
||||
|
||||
m_view.m_Ymax=m_Ymax;
|
||||
m_view.m_Xmin=m_Xmin,m_view.m_Xmax=m_Xmax;
|
||||
m_view.m_DrawLjpl=m_DrawLjpl;
|
||||
m_view.m_Xmin2=m_Xmin2,m_view.m_Xmax2=m_Xmax2;
|
||||
}
|
||||
END_OSGGRAPHICS_NAMESPACE
|
||||
93
DataMgr/src/Statistics2Dlg.h
Normal file
93
DataMgr/src/Statistics2Dlg.h
Normal file
|
|
@ -0,0 +1,93 @@
|
|||
|
||||
#pragma warning(push,0)
|
||||
#include <cassert>
|
||||
#include <QDialog>
|
||||
#include "ConsoleOutputWidget.h"
|
||||
#include "ui_Statistics2.h"
|
||||
#include "LogIO.h"
|
||||
#include "view.h"//ll
|
||||
#include "OSGFramework.h"
|
||||
#pragma warning(pop)
|
||||
|
||||
#pragma execution_character_set("utf-8")
|
||||
BEGIN_OSGGRAPHICS_NAMESPACE
|
||||
/**
|
||||
* @brief 表格选择列自定义委托
|
||||
*/
|
||||
class CStatistics2Dlg : public QWidget//public QDialog
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
CStatistics2Dlg(QWidget * parent=0, Qt::WindowFlags flags=0);
|
||||
~CStatistics2Dlg();
|
||||
Ui_Statistics2 *m_pUI;
|
||||
MyView m_view;//ll
|
||||
private slots:
|
||||
/**
|
||||
*@brief 保存槽函数
|
||||
*/
|
||||
void slotSave();
|
||||
|
||||
/**
|
||||
*@brief 取消槽函数
|
||||
*/
|
||||
void slotCancel();
|
||||
void slotRefurbish();
|
||||
//改变曲线名称
|
||||
void slotChangeName(const QString &text);
|
||||
//改变曲线单位
|
||||
void slotChangeUnit(const QString &text);
|
||||
//void slotRefurbish(const QString &text);
|
||||
void slotChangeXmin(const QString &text);
|
||||
void slotChangeXmax(const QString &text);
|
||||
void slotChangeXmin2(const QString &text);
|
||||
void slotChangeXmax2(const QString &text);
|
||||
void slotChangeYmin(const QString &text);
|
||||
void slotChangeYmax(const QString &text);
|
||||
void slotChangeSdep(const QString &text);
|
||||
void slotChangeEdep(const QString &text);
|
||||
void slotChangeStime(const QString &text);
|
||||
void slotChangeEtime(const QString &text);
|
||||
void slotChangeSmallGrid(const QString &text);
|
||||
void slotSetSdep(const int &dep);
|
||||
void slotSetEdep(const int &dep);
|
||||
void slotSetStime(const int &dep);
|
||||
void slotSetEtime(const int &dep);
|
||||
void slotCheckLjpl();
|
||||
public:
|
||||
QString FileName;//slf文件名
|
||||
QString CurveName;//曲线名
|
||||
void init();
|
||||
void Refurbish();
|
||||
void Statistics2();
|
||||
Slf_WAVE info;
|
||||
DWORD num;
|
||||
float *val;
|
||||
float d_min,d_max;
|
||||
float m_flEnDepth;
|
||||
float m_flStDepth;
|
||||
float m_flEndTime;
|
||||
float m_flStTime;
|
||||
float stime;
|
||||
float etime;
|
||||
float sdep,edep,rlev,min,max;
|
||||
float fmin,fmax;
|
||||
float depmin,depmax,timemin,timemax;//最小、最大值所在的深度、时间
|
||||
double average;
|
||||
double Variance;//方差
|
||||
DWORD point[100],tpoint,ShowPoint;
|
||||
int m_SmallGrid;
|
||||
float m_Xmin;
|
||||
float m_Xmax;
|
||||
float m_Ymin;
|
||||
float m_Ymax;
|
||||
float m_PVmax,m_PVmin;//最大频率的数值范围
|
||||
float m_Xmin2;
|
||||
float m_Xmax2;
|
||||
int ibegin,iend;
|
||||
bool m_DrawLjpl;
|
||||
QString m_CurveName,m_CurveUnit;//显示的曲线名称和单位
|
||||
};
|
||||
|
||||
END_OSGGRAPHICS_NAMESPACE;
|
||||
411
DataMgr/src/StatisticsDlg.cpp
Normal file
411
DataMgr/src/StatisticsDlg.cpp
Normal file
|
|
@ -0,0 +1,411 @@
|
|||
#pragma warning(push,0)
|
||||
// #include "Family.h"
|
||||
#include <QMessageBox>
|
||||
#include <QFileDialog>
|
||||
#include <QPixmap>
|
||||
#include <QDesktopServices>
|
||||
#include <QRegExpValidator>
|
||||
|
||||
#include "StatisticsDlg.h"
|
||||
#include "ui_Statistics.h"
|
||||
#include "CStringType.h"
|
||||
#include "Well.h"
|
||||
|
||||
#pragma warning(pop)
|
||||
using namespace pai::ios::welllog;
|
||||
BEGIN_OSGGRAPHICS_NAMESPACE
|
||||
CStatisticsDlg::CStatisticsDlg(QWidget * parent, Qt::WindowFlags flags)
|
||||
: QWidget(parent,flags)
|
||||
{
|
||||
m_pUI = new Ui_Statistics();
|
||||
m_pUI->setupUi(this);
|
||||
int w=width();
|
||||
int h=height();
|
||||
if(NULL != parent)
|
||||
{
|
||||
parent->setFixedSize(w,h);
|
||||
}
|
||||
m_pUI->cancelbtn->hide();
|
||||
QObject::connect(m_pUI->okbtn, SIGNAL(clicked()), this, SLOT(slotSave()));
|
||||
QObject::connect(m_pUI->cancelbtn, SIGNAL(clicked()), this, SLOT(slotCancel()));
|
||||
QObject::connect(m_pUI->checkBox, SIGNAL(clicked()), this, SLOT(slotCheckLjpl()));
|
||||
QObject::connect(m_pUI->lineEditName, SIGNAL(textChanged( QString )),this,SLOT(slotChangeName(QString)));
|
||||
QObject::connect(m_pUI->lineEditUnit, SIGNAL(textChanged( QString )),this,SLOT(slotChangeUnit(QString)));
|
||||
|
||||
QObject::connect(m_pUI->lineEditXmin, SIGNAL(textChanged( QString )),this,SLOT(slotChangeXmin(QString)));
|
||||
QObject::connect(m_pUI->lineEditXmin2, SIGNAL(textChanged( QString )),this,SLOT(slotChangeXmin2(QString)));
|
||||
QObject::connect(m_pUI->lineEditYmin, SIGNAL(textChanged( QString )),this,SLOT(slotChangeYmin(QString)));
|
||||
QObject::connect(m_pUI->lineEditXmax, SIGNAL(textChanged( QString )),this,SLOT(slotChangeXmax(QString)));
|
||||
QObject::connect(m_pUI->lineEditXmax2, SIGNAL(textChanged( QString )),this,SLOT(slotChangeXmax2(QString)));
|
||||
QObject::connect(m_pUI->lineEditYmax, SIGNAL(textChanged( QString )),this,SLOT(slotChangeYmax(QString)));
|
||||
QObject::connect(m_pUI->lineEditSdep, SIGNAL(textChanged( QString )),this,SLOT(slotChangeSdep(QString)));
|
||||
QObject::connect(m_pUI->lineEditEdep, SIGNAL(textChanged( QString )),this,SLOT(slotChangeEdep(QString)));
|
||||
QObject::connect(m_pUI->lineEditSmallGrid, SIGNAL(textChanged( QString )),this,SLOT(slotChangeSmallGrid(QString)));
|
||||
QObject::connect(m_pUI->horizontalSliderSdep, SIGNAL(valueChanged(int)),this, SLOT(slotSetSdep(int)));
|
||||
QObject::connect(m_pUI->horizontalSliderEdep, SIGNAL(valueChanged(int)),this, SLOT(slotSetEdep(int)));
|
||||
m_SmallGrid=10;
|
||||
fmin=0,fmax=0;
|
||||
m_Xmin=0;
|
||||
m_Xmax=9999;
|
||||
m_Ymin=0;
|
||||
m_Ymax=100;
|
||||
m_Xmin2=0;
|
||||
m_Xmax2=0;
|
||||
m_DrawLjpl=0;
|
||||
QPalette pal;
|
||||
m_pUI->widgetPlot->setStyleSheet("background:lightgray");
|
||||
m_pUI->widgetPlot->setPalette(pal);
|
||||
m_view.setParent(m_pUI->widgetPlot);
|
||||
QRect rec=m_pUI->widgetPlot->geometry();
|
||||
m_view.widgetRec=QRect(0,0,rec.width(),rec.height());
|
||||
val=NULL;
|
||||
}
|
||||
|
||||
void CStatisticsDlg::slotSave()
|
||||
{
|
||||
// //保存位图,该部分需要罗林配合
|
||||
// QString desktopPath=QDesktopServices::storageLocation(QDesktopServices::HomeLocation);
|
||||
// desktopPath=desktopPath+QString("/statistics.jpg");
|
||||
// QString imagePath=QFileDialog::getSaveFileName(this,"(Save Image)",desktopPath,"JPG File(*.jpg)");
|
||||
// if(imagePath.isEmpty())
|
||||
// {
|
||||
// return;
|
||||
// }
|
||||
// QSize vSize=m_view.size();
|
||||
// QPixmap image(vSize);
|
||||
// m_view.render(&image);
|
||||
// bool isSave=image.save(imagePath,"JPG");
|
||||
// QMessageBox::information(this,"提示","图片保存成功!");
|
||||
// //accept();
|
||||
}
|
||||
/**
|
||||
*@brief 取消槽函数
|
||||
*/
|
||||
void CStatisticsDlg::slotCancel()
|
||||
{
|
||||
delete []val;
|
||||
val=NULL;
|
||||
//reject ();
|
||||
|
||||
}
|
||||
void CStatisticsDlg::slotCheckLjpl()
|
||||
{
|
||||
m_DrawLjpl=!m_DrawLjpl;
|
||||
m_view.m_DrawLjpl=m_DrawLjpl;
|
||||
m_view.update();
|
||||
}
|
||||
void CStatisticsDlg::slotChangeName(const QString &text)
|
||||
{
|
||||
m_CurveName=text;//m_pUI->lineEditName->text();
|
||||
m_view.m_CurveName=m_CurveName;
|
||||
m_view.update();
|
||||
}
|
||||
void CStatisticsDlg::slotChangeUnit(const QString &text)
|
||||
{
|
||||
m_CurveUnit=text;//m_pUI->lineEditUnit->text();
|
||||
m_view.m_CurveUnit=m_CurveUnit;
|
||||
m_view.update();
|
||||
}
|
||||
void CStatisticsDlg::slotChangeXmin(const QString &text)
|
||||
{
|
||||
m_Xmin=text.toFloat();
|
||||
Refurbish();
|
||||
m_view.update();
|
||||
}
|
||||
void CStatisticsDlg::slotChangeXmax(const QString &text)
|
||||
{
|
||||
m_Xmax=text.toFloat();
|
||||
Refurbish();
|
||||
m_view.update();
|
||||
}
|
||||
void CStatisticsDlg::slotChangeXmin2(const QString &text)
|
||||
{
|
||||
m_Xmin2=text.toFloat();
|
||||
Refurbish();
|
||||
m_view.update();
|
||||
}
|
||||
void CStatisticsDlg::slotChangeXmax2(const QString &text)
|
||||
{
|
||||
m_Xmax2=text.toFloat();
|
||||
Refurbish();
|
||||
m_view.update();
|
||||
}
|
||||
void CStatisticsDlg::slotChangeYmin(const QString &text)
|
||||
{
|
||||
m_Ymin=text.toFloat();
|
||||
Refurbish();
|
||||
m_view.update();
|
||||
}
|
||||
void CStatisticsDlg::slotChangeYmax(const QString &text)
|
||||
{
|
||||
m_Ymax=text.toFloat();
|
||||
Refurbish();
|
||||
m_view.update();
|
||||
}
|
||||
void CStatisticsDlg::slotChangeSdep(const QString &text)
|
||||
{
|
||||
sdep=text.toFloat();
|
||||
if(sdep<m_flStDepth)sdep=m_flStDepth;
|
||||
Refurbish();
|
||||
m_view.update();
|
||||
}
|
||||
void CStatisticsDlg::slotChangeEdep(const QString &text)
|
||||
{
|
||||
edep=text.toFloat();
|
||||
if(edep>m_flEnDepth)edep=m_flEnDepth;
|
||||
Refurbish();
|
||||
m_view.update();
|
||||
}
|
||||
void CStatisticsDlg::slotChangeSmallGrid(const QString &text)
|
||||
{
|
||||
m_SmallGrid=text.toInt();
|
||||
if(m_SmallGrid<1)
|
||||
{
|
||||
m_SmallGrid=1;
|
||||
m_pUI->lineEditSmallGrid->setText(QString::number(m_SmallGrid));
|
||||
}
|
||||
if(m_SmallGrid>10)
|
||||
{
|
||||
m_SmallGrid=10;
|
||||
m_pUI->lineEditSmallGrid->setText(QString::number(m_SmallGrid));
|
||||
}
|
||||
Refurbish();
|
||||
m_view.update();
|
||||
}
|
||||
void CStatisticsDlg::slotSetSdep(const int &dep)
|
||||
{
|
||||
m_pUI->lineEditSdep->setText(QString::number(dep/100.));
|
||||
}
|
||||
void CStatisticsDlg::slotSetEdep(const int &dep)
|
||||
{
|
||||
m_pUI->lineEditEdep->setText(QString::number(dep/100.));
|
||||
|
||||
}
|
||||
void CStatisticsDlg::init()
|
||||
{
|
||||
CLogIO logio(FileName.toStdString().c_str(),(unsigned int)CLogIO::modeReadWrite);
|
||||
|
||||
int index=logio.OpenCurve(CurveName.toStdString().c_str());
|
||||
if(index<0) return;
|
||||
logio.GetCurveInfo(index,&info);
|
||||
num=(info.EndDepth-info.StartDepth)/info.DepLevel+1.5;
|
||||
// value.reserve(num);
|
||||
val=new float[num];
|
||||
logio.ReadCurve(index,info.StartDepth,num,&val[0]);
|
||||
logio.CloseCurve(index);
|
||||
logio.Close();
|
||||
d_min=info.StartDepth;
|
||||
d_max=info.EndDepth;
|
||||
m_flEnDepth = d_max;
|
||||
m_flStDepth = d_min;
|
||||
sdep=d_min;
|
||||
edep=d_max;
|
||||
rlev=info.DepLevel;
|
||||
sample=num;
|
||||
|
||||
m_CurveName=CurveName,m_CurveUnit="("+QLatin1String(info.Unit)+")";
|
||||
m_pUI->lineEditName->setText(CurveName);
|
||||
QRegExp regExp("[A-Za-z0-9]{0,100}");//正则表达式,第一位数字为a-z的数字,第二位为1-9的数字,后边是0-2位0-9的数字
|
||||
m_pUI->lineEditName->setValidator(new QRegExpValidator(regExp,this));
|
||||
m_pUI->lineEditUnit->setText(m_CurveUnit);
|
||||
m_pUI->lineEditUnit->setValidator(new QRegExpValidator(regExp,this));
|
||||
|
||||
m_pUI->lineEditSdep1->setText(QString::number(sdep));
|
||||
m_pUI->lineEditSdep1->setValidator(new QDoubleValidator(-9999999,9999999,6,this));
|
||||
m_pUI->lineEditEdep1->setText(QString::number(edep));
|
||||
m_pUI->lineEditEdep1->setValidator(new QDoubleValidator(-9999999,9999999,6,this));
|
||||
m_pUI->horizontalSliderSdep->setRange(d_min*100,d_max*100);
|
||||
m_pUI->horizontalSliderSdep->setValue(d_min*100);
|
||||
m_pUI->horizontalSliderEdep->setRange(d_min*100,d_max*100);
|
||||
m_pUI->horizontalSliderEdep->setValue(d_max*100);
|
||||
m_pUI->lineEditSdep->setText(QString::number(sdep));
|
||||
m_pUI->lineEditSdep->setValidator(new QDoubleValidator(-9999999,9999999,6,this));
|
||||
|
||||
m_pUI->lineEditEdep->setText(QString::number(edep));
|
||||
m_pUI->lineEditEdep->setValidator(new QDoubleValidator(-9999999,9999999,6,this));
|
||||
m_pUI->lineEditSmallGrid->setText(QString::number(m_SmallGrid));
|
||||
m_pUI->lineEditSmallGrid->setValidator(new QDoubleValidator(-9999999,9999999,6,this));
|
||||
|
||||
statistics();
|
||||
m_Xmin=min;
|
||||
m_Xmax=max;
|
||||
m_pUI->lineEditXmin->setText(QString::number(min));
|
||||
m_pUI->lineEditXmin->setValidator(new QDoubleValidator(-9999999,9999999,6,this));
|
||||
m_pUI->lineEditXmax->setText(QString::number(max));
|
||||
m_pUI->lineEditXmax->setValidator(new QDoubleValidator(-9999999,9999999,6,this));
|
||||
m_pUI->lineEditYmin->setText(QString::number(m_Ymin));
|
||||
m_pUI->lineEditYmin->setValidator(new QDoubleValidator(-9999999,9999999,6,this));
|
||||
m_pUI->lineEditYmax->setText(QString::number(m_Ymax));
|
||||
m_pUI->lineEditYmax->setValidator(new QDoubleValidator(-9999999,9999999,6,this));
|
||||
Refurbish();
|
||||
//初始化主频刻度范围:15%————85%
|
||||
int pp=0;
|
||||
for(int i=0;i<10*m_SmallGrid;i++)
|
||||
{
|
||||
pp+=point[i];
|
||||
if((float)pp/(float)ShowPoint>=0.15)
|
||||
{
|
||||
m_Xmin2=m_Xmin+i*(m_Xmax-m_Xmin)/(10.*m_SmallGrid);
|
||||
ibegin=i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
pp=0;
|
||||
for(int i=0;i<10*m_SmallGrid;i++)
|
||||
{
|
||||
pp+=point[i];
|
||||
if((float)pp/(float)ShowPoint>=0.85)
|
||||
{
|
||||
m_Xmax2=m_Xmin+i*(m_Xmax-m_Xmin)/(10.*m_SmallGrid);
|
||||
iend=i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
m_pUI->lineEditXmin2->setText(QString::number(m_Xmin2));
|
||||
m_pUI->lineEditXmin2->setValidator(new QDoubleValidator(-9999999,9999999,6,this));
|
||||
m_pUI->lineEditXmax2->setText(QString::number(m_Xmax2));
|
||||
m_pUI->lineEditXmax2->setValidator(new QDoubleValidator(-9999999,9999999,6,this));
|
||||
//频率刻度取整
|
||||
if(fmax>50.)fmax=100.;
|
||||
else if(fmax>20.)fmax=50.;
|
||||
else if(fmax>10.)fmax=20.;
|
||||
else if(fmax>5.)fmax=10.;
|
||||
else fmax=5.;
|
||||
m_Ymax=fmax;
|
||||
m_Ymin=0;
|
||||
m_pUI->lineEditYmin->setText(QString::number(m_Ymin));
|
||||
m_pUI->lineEditYmin->setValidator(new QDoubleValidator(-9999999,9999999,6,this));
|
||||
m_pUI->lineEditYmax->setText(QString::number(m_Ymax));
|
||||
m_pUI->lineEditYmax->setValidator(new QDoubleValidator(-9999999,9999999,6,this));
|
||||
//for plot
|
||||
m_view.m_CurveName=m_CurveName;m_view.m_CurveUnit=m_CurveUnit;//显示的曲线名称和单位
|
||||
for(int i=0;i<100;i++)m_view.point[i]=point[i];
|
||||
m_view.ShowPoint=ShowPoint;
|
||||
m_view.m_SmallGrid=m_SmallGrid;
|
||||
|
||||
m_view.m_Ymax=m_Ymax;
|
||||
m_view.m_Xmin=m_Xmin,m_view.m_Xmax=m_Xmax;
|
||||
m_view.m_DrawLjpl=m_DrawLjpl;
|
||||
m_view.m_Xmin2=m_Xmin2,m_view.m_Xmax2=m_Xmax2;
|
||||
m_view.update();
|
||||
}
|
||||
void CStatisticsDlg::statistics()
|
||||
{
|
||||
int ist=(sdep-d_min)/rlev+0.5;
|
||||
if(ist<0) ist=0;
|
||||
tpoint=(edep-sdep)/rlev;
|
||||
if(tpoint<0) return;
|
||||
sample=tpoint;
|
||||
min=99999;max=-99999;
|
||||
average=0;
|
||||
depmin=depmax=d_min;
|
||||
int InvalidNum=0;
|
||||
for(int i=ist;i<ist+tpoint;i++)
|
||||
{
|
||||
if(val[i]==-9999.||val[i]==-999.25||val[i]==-99999.||val[i]==-9999.25)
|
||||
{
|
||||
InvalidNum++;
|
||||
continue;
|
||||
}
|
||||
if(min>val[i]){min=val[i];depmin=d_min+i*rlev;}
|
||||
if(max<val[i]){max=val[i];depmax=d_min+i*rlev;}
|
||||
average+=val[i];
|
||||
}
|
||||
//剔除无效点
|
||||
//average/=tpoint;
|
||||
if(tpoint>InvalidNum)average/=(tpoint-InvalidNum);
|
||||
else average=val[ist+1];
|
||||
float del=(m_Xmax-m_Xmin)/(10*m_SmallGrid);//del=(max-min)/(10*m_SmallGrid);
|
||||
for(int j=0;j<100;j++)point[j]=0;
|
||||
double vvv,v1,v2;
|
||||
Variance=0.;
|
||||
for(int i=ist+1;i<ist+tpoint;i++)
|
||||
{
|
||||
if(val[i]==-9999.||val[i]==-999.25||val[i]==-99999.||val[i]==-9999.25)continue;
|
||||
Variance+=(val[i]-average)*(val[i]-average);
|
||||
for(int j=0;j<10*m_SmallGrid;j++)
|
||||
{
|
||||
vvv=val[i],v1=m_Xmin+j*del,v2=m_Xmin+(float)(j+1)*del;
|
||||
/*if(j==0)
|
||||
{
|
||||
if(vvv>=v1&&vvv<=v2)
|
||||
{
|
||||
point[j]++;
|
||||
break;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if(vvv>v1&&vvv<=v2)
|
||||
{
|
||||
point[j]++;
|
||||
break;
|
||||
}
|
||||
}*/
|
||||
if(vvv>v1&&vvv<=v2)
|
||||
{
|
||||
point[j]++;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
if(tpoint>InvalidNum)Variance/=(tpoint-InvalidNum);
|
||||
else Variance=0;
|
||||
Variance=sqrt(Variance);
|
||||
int maxpoint=-1;//point[0];
|
||||
ShowPoint=0;//point[0];
|
||||
for(int j=0;j<10*m_SmallGrid;j++)
|
||||
{
|
||||
if(maxpoint<point[j])
|
||||
{
|
||||
maxpoint=point[j];
|
||||
m_PVmin=m_Xmin+(float)j*del,m_PVmax=m_Xmin+(float)(j+1)*del;
|
||||
}
|
||||
ShowPoint+=point[j];
|
||||
}
|
||||
fmax=(float)maxpoint/(float)ShowPoint*100.;//(float)tpoint*100.;
|
||||
}
|
||||
/*
|
||||
void CStatisticsDlg::slotRefurbish(const QString &text)
|
||||
{
|
||||
Refurbish();
|
||||
m_view.update();
|
||||
}
|
||||
*/
|
||||
void CStatisticsDlg::Refurbish()
|
||||
{
|
||||
if(sdep<d_min||edep>d_max)
|
||||
{
|
||||
AfxMessageBox("深度超界!");
|
||||
return;
|
||||
}
|
||||
if(sdep>=edep)return;
|
||||
if(m_Xmin>=m_Xmax)return;
|
||||
if(m_Ymin>=m_Ymax)return;
|
||||
statistics();
|
||||
QString str,jieguo;
|
||||
str="开始深度 : "+QString::number(sdep)+"(m)";jieguo="\r\n"+str;
|
||||
str="结束深度 : "+QString::number(edep)+"(m)";jieguo+="\r\n\r\n"+str;
|
||||
str="统计深度段 : "+QString::number(edep-sdep)+"(m)";jieguo+="\r\n\r\n"+str;
|
||||
str="有效数据点数 : "+QString::number(ShowPoint);jieguo+="\r\n\r\n"+str;//tpoint);
|
||||
str="最小值 : "+QString::number(min)+m_CurveUnit;jieguo+="\r\n\r\n"+str;
|
||||
str="最小值深度 : "+QString::number(depmin)+"(m)";jieguo+="\r\n\r\n"+str;
|
||||
str="最大值 : "+QString::number(max)+m_CurveUnit;jieguo+="\r\n\r\n"+str;
|
||||
str="最大值深度 : "+QString::number(depmax)+"(m)";jieguo+="\r\n\r\n"+str;
|
||||
str="平均值 : "+QString::number(average)+m_CurveUnit;jieguo+="\r\n\r\n"+str;
|
||||
str="最大频率 : "+QString::number(fmax);str+="(%)";jieguo+="\r\n\r\n"+str;
|
||||
str="最大频率数值范围 : "+QString::number(m_PVmin)+" -- "+QString::number(m_PVmax);jieguo+="\r\n\r\n"+str;
|
||||
str="标准偏差 : "+QString::number(Variance);jieguo+="\r\n\r\n"+str;
|
||||
m_pUI->textEditJieGuo->setText(jieguo);
|
||||
//for plot
|
||||
m_view.m_CurveName=m_CurveName;m_view.m_CurveUnit=m_CurveUnit;//显示的曲线名称和单位
|
||||
for(int i=0;i<100;i++)m_view.point[i]=point[i];
|
||||
m_view.ShowPoint=ShowPoint;
|
||||
m_view.m_SmallGrid=m_SmallGrid;
|
||||
|
||||
m_view.m_Ymax=m_Ymax;
|
||||
m_view.m_Xmin=m_Xmin,m_view.m_Xmax=m_Xmax;
|
||||
m_view.m_DrawLjpl=m_DrawLjpl;
|
||||
m_view.m_Xmin2=m_Xmin2,m_view.m_Xmax2=m_Xmax2;
|
||||
}
|
||||
END_OSGGRAPHICS_NAMESPACE
|
||||
87
DataMgr/src/StatisticsDlg.h
Normal file
87
DataMgr/src/StatisticsDlg.h
Normal file
|
|
@ -0,0 +1,87 @@
|
|||
|
||||
#pragma warning(push,0)
|
||||
#include <cassert>
|
||||
#include <QDialog>
|
||||
#include "ConsoleOutputWidget.h"
|
||||
#include "ui_Statistics.h"
|
||||
#include "LogIO.h"
|
||||
#include "view.h"//ll
|
||||
#include "OSGFramework.h"
|
||||
#pragma warning(pop)
|
||||
|
||||
#pragma execution_character_set("utf-8")
|
||||
BEGIN_OSGGRAPHICS_NAMESPACE
|
||||
/**
|
||||
* @brief 表格选择列自定义委托
|
||||
*/
|
||||
class CStatisticsDlg : public QWidget
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
CStatisticsDlg(QWidget * parent=0, Qt::WindowFlags flags=0);
|
||||
~CStatisticsDlg()
|
||||
{
|
||||
if(m_pUI) delete m_pUI;
|
||||
if(val) delete val;
|
||||
}
|
||||
Ui_Statistics *m_pUI;
|
||||
MyView m_view;//ll
|
||||
private slots:
|
||||
/**
|
||||
*@brief 保存槽函数
|
||||
*/
|
||||
void slotSave();
|
||||
|
||||
/**
|
||||
*@brief 取消槽函数
|
||||
*/
|
||||
void slotCancel();
|
||||
//改变曲线名称
|
||||
void slotChangeName(const QString &text);
|
||||
//改变曲线单位
|
||||
void slotChangeUnit(const QString &text);
|
||||
//void slotRefurbish(const QString &text);
|
||||
void slotChangeXmin(const QString &text);
|
||||
void slotChangeXmax(const QString &text);
|
||||
void slotChangeXmin2(const QString &text);
|
||||
void slotChangeXmax2(const QString &text);
|
||||
void slotChangeYmin(const QString &text);
|
||||
void slotChangeYmax(const QString &text);
|
||||
void slotChangeSdep(const QString &text);
|
||||
void slotChangeEdep(const QString &text);
|
||||
void slotChangeSmallGrid(const QString &text);
|
||||
void slotSetSdep(const int &dep);
|
||||
void slotSetEdep(const int &dep);
|
||||
void slotCheckLjpl();
|
||||
public:
|
||||
QString FileName;//slf文件名
|
||||
QString CurveName;//曲线名
|
||||
void init();
|
||||
void Refurbish();
|
||||
void statistics();
|
||||
Slf_CURVE info;
|
||||
DWORD num;
|
||||
float *val;
|
||||
float d_min,d_max;
|
||||
float m_flEnDepth;
|
||||
float m_flStDepth;
|
||||
float sdep,edep,rlev,min,max;
|
||||
float fmin,fmax,depmin,depmax;
|
||||
double average;
|
||||
double Variance;//方差
|
||||
int sample,point[100],tpoint,ShowPoint;
|
||||
int m_SmallGrid;
|
||||
float m_Xmin;
|
||||
float m_Xmax;
|
||||
float m_Ymin;
|
||||
float m_Ymax;
|
||||
float m_PVmax,m_PVmin;//最大频率的数值范围
|
||||
float m_Xmin2;
|
||||
float m_Xmax2;
|
||||
int ibegin,iend;
|
||||
bool m_DrawLjpl;
|
||||
QString m_CurveName,m_CurveUnit;//显示的曲线名称和单位
|
||||
};
|
||||
|
||||
END_OSGGRAPHICS_NAMESPACE;
|
||||
69
DataMgr/src/deptlineedit.cpp
Normal file
69
DataMgr/src/deptlineedit.cpp
Normal file
|
|
@ -0,0 +1,69 @@
|
|||
#include "deptlineedit.h"
|
||||
#include <QPaintEvent>
|
||||
#include <QPainter>
|
||||
#include <QStyleOptionFrameV2>
|
||||
#include <QScrollBar>
|
||||
#include <QGraphicsProxyWidget>
|
||||
#include <QHBoxLayout>
|
||||
#include <QTextCodec>
|
||||
#include <QSpacerItem>
|
||||
|
||||
DeptLineEdit::DeptLineEdit(QWidget *parent)
|
||||
: QGraphicsView(parent)
|
||||
{
|
||||
|
||||
init();
|
||||
}
|
||||
|
||||
DeptLineEdit::~DeptLineEdit()
|
||||
{
|
||||
|
||||
}
|
||||
void DeptLineEdit::init()
|
||||
{
|
||||
proxyWidget=NULL;
|
||||
m_depWidget=NULL;
|
||||
m_lbl=NULL;
|
||||
this->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
|
||||
this->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
|
||||
|
||||
m_depWidget=new QWidget();
|
||||
m_depWidget->setFixedSize(200,35);
|
||||
QHBoxLayout *hlayout=new QHBoxLayout();
|
||||
lineEdit_Depth=new QLineEdit(m_depWidget);
|
||||
lineEdit_Depth->setFixedSize(100,30);
|
||||
lineEdit_Depth->setAlignment(Qt::AlignLeft|Qt::AlignVCenter);
|
||||
lineEdit_Depth->setContentsMargins(0,0,0,0);
|
||||
|
||||
lineEdit_Depth->setStyleSheet("border:1px solid gray;");
|
||||
m_lbl=new QLabel(m_depWidget);
|
||||
m_lbl->setFixedHeight(30);
|
||||
m_lbl->setText(tr("当前深度(m):"));//
|
||||
hlayout->addStretch(1);
|
||||
hlayout->addWidget(m_lbl,0,Qt::AlignHCenter);
|
||||
hlayout->addWidget(lineEdit_Depth,1);
|
||||
hlayout->addStretch(1);
|
||||
hlayout->setContentsMargins(0,0,0,0);
|
||||
m_lbl->setAlignment(Qt::AlignHCenter|Qt::AlignVCenter);
|
||||
m_depWidget->setLayout(hlayout);
|
||||
m_depWidget->setContentsMargins(0,0,0,0);
|
||||
m_scene=new QGraphicsScene();
|
||||
this->setScene(m_scene);
|
||||
|
||||
}
|
||||
void DeptLineEdit::showEvent(QShowEvent *)
|
||||
{
|
||||
m_scene->setSceneRect(rect());
|
||||
|
||||
m_depWidget->setFixedSize(height(),width());
|
||||
proxyWidget= m_scene->addWidget(m_depWidget);
|
||||
this->setContentsMargins(0,0,0,0);
|
||||
proxyWidget->setContentsMargins(0,0,0,0);
|
||||
QPoint point=rect().center();
|
||||
// proxyWidget->translate(0,point.y()+height()/2.+1);
|
||||
QPointF newPos = proxyWidget->pos() + QPointF(0, point.y()+height()/2.+1); // 计算新的位置
|
||||
proxyWidget->setPos(newPos);
|
||||
proxyWidget->setRotation(-90);
|
||||
|
||||
|
||||
}
|
||||
37
DataMgr/src/deptlineedit.h
Normal file
37
DataMgr/src/deptlineedit.h
Normal file
|
|
@ -0,0 +1,37 @@
|
|||
#ifndef DEPTLINEEDIT_H
|
||||
#define DEPTLINEEDIT_H
|
||||
|
||||
#include <QWidget>
|
||||
#include <QLineEdit>
|
||||
#include <QGraphicsProxyWidget>
|
||||
#include <QGraphicsView>
|
||||
#include <QLineEdit>
|
||||
#include <QLabel>
|
||||
#pragma execution_character_set("utf-8")
|
||||
/*自定义输入控件*/
|
||||
class DeptLineEdit : public QGraphicsView
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
DeptLineEdit(QWidget *parent);
|
||||
~DeptLineEdit();
|
||||
QLineEdit *lineEdit_Depth;
|
||||
QLabel *m_lbl;
|
||||
// QWidget interface
|
||||
protected:
|
||||
void showEvent(QShowEvent *);
|
||||
private:
|
||||
void init();
|
||||
private:
|
||||
|
||||
QGraphicsScene *m_scene;
|
||||
private:
|
||||
QRect m_rect;
|
||||
QGraphicsProxyWidget* proxyWidget;
|
||||
QWidget *m_depWidget;
|
||||
|
||||
|
||||
};
|
||||
|
||||
#endif // DEPTLINEEDIT_H
|
||||
108
DataMgr/src/view.cpp
Normal file
108
DataMgr/src/view.cpp
Normal file
|
|
@ -0,0 +1,108 @@
|
|||
#include "view.h"
|
||||
#include <QPainter>
|
||||
|
||||
MyView::MyView(QWidget *parent) : QWidget(parent)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
|
||||
void MyView::paintEvent(QPaintEvent *event)
|
||||
{
|
||||
|
||||
/* QPainter paint;
|
||||
paint.begin(this);
|
||||
paint.setBrush(Qt::white);
|
||||
paint.drawRect(plotrec);
|
||||
QString str=m_CurveName+"曲线数值分布图";
|
||||
QRect rec=QRect(plotrec.left(),plotrec.top(),plotrec.width(),30);
|
||||
paint.drawText(rec, Qt::AlignHCenter| Qt::AlignVCenter,str);
|
||||
paint.end();*/
|
||||
QPainter paint;
|
||||
paint.begin(this);
|
||||
// paint.setBrush(Qt::lightGray);
|
||||
//paint.drawRect(plotrec);
|
||||
QRect plotrec=widgetRec;
|
||||
QRect rec1=widgetRec;
|
||||
QString str=m_CurveName+"曲线数值分布图";
|
||||
QRect rec=QRect(plotrec.left(),plotrec.top(),plotrec.width(),30);
|
||||
paint.drawText(rec, Qt::AlignHCenter| Qt::AlignVCenter,str);
|
||||
|
||||
QRect rthy=plotrec;
|
||||
rthy.adjust(70,40,-60,-60);
|
||||
int x0=rthy.left(),y0=rthy.bottom(),h=rthy.height(),w=rthy.width();
|
||||
int ptotal=point[0],pmax=point[0];
|
||||
for(int i=1;i<10*m_SmallGrid;i++)
|
||||
{
|
||||
ptotal+=point[i];
|
||||
if(pmax<point[i])pmax=point[i];
|
||||
}
|
||||
float hmax=100.*(float)pmax/(float)ShowPoint;
|
||||
plotrec.setTop(rthy.bottom()+16);
|
||||
for(int i=0;i<=10;i++)
|
||||
{
|
||||
//横线
|
||||
paint.drawLine(x0,y0-i*h/10,x0+w,y0-i*h/10);
|
||||
str=QString::number(i*m_Ymax/10.,'f',1);
|
||||
if((m_Ymax/10.)==int(m_Ymax/10))str=QString::number(i*m_Ymax/10.);//测试5,20
|
||||
paint.drawText(x0-25,y0-i*h/10+10,str);
|
||||
//纵线
|
||||
paint.drawLine(x0+i*w/10,y0-h,x0+i*w/10,y0);
|
||||
if(i%2==0)
|
||||
{
|
||||
plotrec.setLeft(x0+(i-1)*w/10);
|
||||
plotrec.setRight(x0+(i+1)*w/10);
|
||||
str=QString::number(m_Xmin+i*(m_Xmax-m_Xmin)/10.);
|
||||
paint.drawText(plotrec, Qt::AlignHCenter| Qt::AlignTop,str);
|
||||
}
|
||||
}
|
||||
//写x、y轴坐标名
|
||||
rec1.adjust(0,40,rec1.left()+40-rec1.right(),0);
|
||||
//rec1.top+=40;
|
||||
//rec1.right=rec1.left+40;
|
||||
paint.drawText(rec1,Qt::AlignHCenter| Qt::AlignTop,"pp");//"频");
|
||||
rec1.adjust(0,20,0,0);//rec1.top+=20;
|
||||
paint.drawText(rec1,Qt::AlignHCenter| Qt::AlignTop,"LL");//"率");//dc.DrawText("",rec1,DT_SINGLELINE|DT_TOP|DT_CENTER);
|
||||
rec1.adjust(0,20,0,0);//rec1.top+=20;
|
||||
paint.drawText(rec1,Qt::AlignHCenter| Qt::AlignTop,"(%)");//dc.DrawText("",rec1,DT_SINGLELINE|DT_TOP|DT_CENTER);
|
||||
plotrec.setLeft(x0);plotrec.setBottom(plotrec.bottom()-10);
|
||||
paint.drawText(plotrec,Qt::AlignHCenter| Qt::AlignBottom,m_CurveName+m_CurveUnit);//dc.DrawText(,plotrec,DT_SINGLELINE|DT_BOTTOM|DT_CENTER);
|
||||
//CBrush *oldBrush=dc.SelectObject(&GreenBrush);
|
||||
|
||||
|
||||
for(int i=0;i<10*m_SmallGrid;i++)
|
||||
{
|
||||
plotrec.setLeft(x0+i*w/(10*m_SmallGrid));//plotrec.left=x0+i*w/(10*m_SmallGrid);//注意:i*w/(10*m_SmallGrid)和w/(10*m_SmallGrid)*i误差挺大
|
||||
plotrec.setRight(x0+(i+1)*w/(10*m_SmallGrid));
|
||||
plotrec.setBottom(y0);
|
||||
float y=(float)point[i]/(float)pmax;//y=(float)point[i]/(float)pmax;
|
||||
plotrec.setTop(y0-y*h*hmax/m_Ymax);
|
||||
float left=m_Xmin+i*(m_Xmax-m_Xmin)/(10*m_SmallGrid);
|
||||
float right=m_Xmin+(i+1)*(m_Xmax-m_Xmin)/(10*m_SmallGrid);
|
||||
if(left>=m_Xmax2||right<=m_Xmin2)paint.setBrush(Qt::green);
|
||||
//if(i<ibegin||i>iend)dc.FillRect(plotrec,&GreenBrush);
|
||||
else paint.setBrush(Qt::red);
|
||||
paint.drawRect(plotrec);
|
||||
}
|
||||
if(!m_DrawLjpl) {
|
||||
paint.end();
|
||||
return;
|
||||
}
|
||||
//画累计频率线
|
||||
int pp=0;
|
||||
QPen pen(Qt::red);
|
||||
pen.setStyle(Qt::SolidLine);
|
||||
pen.setWidth(2);
|
||||
paint.setPen(pen);
|
||||
float x1=x0,y1=y0;
|
||||
for(int i=0;i<10*m_SmallGrid;i++)
|
||||
{
|
||||
pp+=point[i];
|
||||
float x=x0+(float)((i+1.)*w/(10.*m_SmallGrid));
|
||||
float y=(float)pp/(float)ShowPoint;//ptotal;
|
||||
paint.drawLine(x1,y1,x,y0-y*h);
|
||||
x1=x,y1=y0-y*h;
|
||||
}
|
||||
paint.end();
|
||||
|
||||
}
|
||||
31
DataMgr/src/view.h
Normal file
31
DataMgr/src/view.h
Normal file
|
|
@ -0,0 +1,31 @@
|
|||
#ifndef VIEW_H
|
||||
#define VIEW_H
|
||||
|
||||
#include <QWidget>
|
||||
#pragma execution_character_set("utf-8")
|
||||
class MyView : public QWidget
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
explicit MyView(QWidget *parent = nullptr);
|
||||
|
||||
QRect widgetRec;
|
||||
QString m_CurveName,m_CurveUnit;//显示的曲线名称和单位
|
||||
int point[100];
|
||||
int ShowPoint;
|
||||
int m_SmallGrid;
|
||||
|
||||
float m_Ymax;
|
||||
float m_Xmin,m_Xmax;
|
||||
bool m_DrawLjpl;
|
||||
float m_Xmin2,m_Xmax2;
|
||||
signals:
|
||||
|
||||
public slots:
|
||||
|
||||
// QWidget interface
|
||||
protected:
|
||||
void paintEvent(QPaintEvent *event);
|
||||
};
|
||||
|
||||
#endif // VIEW_H
|
||||
60
OSGDataModel/include/ObjWelllogWavefile.h
Normal file
60
OSGDataModel/include/ObjWelllogWavefile.h
Normal file
|
|
@ -0,0 +1,60 @@
|
|||
/**
|
||||
* @file ObjWellLogWavefile.h
|
||||
* @brief 测井多维曲线数据模型
|
||||
* @date 2015-2-10
|
||||
* @author: zhangjie
|
||||
*/
|
||||
#ifndef PAI_FRAME_OSGWELLLOGWAVEFILE_H
|
||||
#define PAI_FRAME_OSGWELLLOGWAVEFILE_H
|
||||
#pragma warning( push ,0)
|
||||
#include <QUuid>
|
||||
// #include "ObjectEvent.h"
|
||||
#include "BaseObject.h"
|
||||
#include "ObjWelllog.h"
|
||||
#include "MemRdWt.h"
|
||||
#include <QVector>
|
||||
#pragma warning( pop )
|
||||
|
||||
BEGIN_OSGDATAMODEL_NAMESPACE;
|
||||
|
||||
class CObjWell;
|
||||
class OSGDATAMODEL_EXPORT CObjWellLogWavefile: public CObjWellLog
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
CObjWellLogWavefile();
|
||||
virtual ~CObjWellLogWavefile();
|
||||
virtual QUuid GetTypeID()const;
|
||||
virtual QString GetDescription();
|
||||
virtual void GetValidMDProperty(PFLOATPROPERTY &vMD,PFLOATPROPERTY &vProperty,float sdep=0,float edep=7000 );
|
||||
void SetisCorrDepth(bool IsCorrDepth);
|
||||
void SetisCorrA1ZM(bool IsCorrA1ZM);
|
||||
void SetArrayNum(int ArrayNum);
|
||||
//从slf加载数据
|
||||
virtual bool LoadFromSLF();
|
||||
virtual bool SaveToSLF();
|
||||
//数据变化后写入slf数据
|
||||
// virtual bool SaveToSLF();
|
||||
void SetData(int i,int j,float *buffer);//行列设置数据
|
||||
double GetData(int i,int j,char *buffer);//行列取数据
|
||||
void SetData(float dep,int j,float *buffer);//深度列设置数据
|
||||
double GetData(float dep,int j,char *buffer);//深度列设置数据
|
||||
void DepthAlign(char *mr,int num,int pad,int ToolType);
|
||||
void AzmiuthCorrect(char *mr,int Row,int Col,char *p1az,Slf_CURVE &curveinfo,int shift0);
|
||||
void HorizMirror(float *mr,int Row,int Col);
|
||||
int m_ArrayNum;
|
||||
Slf_WAVE waveinfo;
|
||||
Slf_WAVE gaincurveinfo;
|
||||
Slf_WAVE timecurveinfo;
|
||||
bool isCorrDepth;
|
||||
bool isCorrA1ZM;
|
||||
QVector <double> valMin,valMax;
|
||||
QSharedMemory m_GainSharedMemory;
|
||||
QSharedMemory m_TimeSharedMemory;
|
||||
};
|
||||
|
||||
using namespace pai::datamodel;
|
||||
using namespace pai::ios::welllog;
|
||||
|
||||
END_OSGDATAMODEL_NAMESPACE
|
||||
#endif
|
||||
|
|
@ -37,12 +37,14 @@ DEFINES += QT_DLL
|
|||
|
||||
HeadS += ../include/*.h
|
||||
|
||||
SOURCES += *.cpp
|
||||
SOURCES += *.cpp \
|
||||
../../common/geometryutils.cpp
|
||||
HEADERS += \
|
||||
../include/BaseObject.h \
|
||||
../include/ObjWelllog.h \
|
||||
../include/ObjWelllogINP.h \
|
||||
../include/ObjWelllogTABLE.h \
|
||||
../include/ObjWelllogWavefile.h \
|
||||
../include/WellLogWorkflowDataModel.h
|
||||
|
||||
#CPATH = $$system(pwd)
|
||||
|
|
|
|||
1181
OSGDataModel/src/ObjWellLogWavefile.cpp
Normal file
1181
OSGDataModel/src/ObjWellLogWavefile.cpp
Normal file
File diff suppressed because it is too large
Load Diff
|
|
@ -17,7 +17,7 @@
|
|||
#include "LogIO.h"
|
||||
#include "MemRdWt.h"
|
||||
#pragma warning( pop )
|
||||
|
||||
#pragma execution_character_set("utf-8")
|
||||
//class CDataManagger;
|
||||
class GridDataAdapter;
|
||||
|
||||
|
|
|
|||
|
|
@ -21,8 +21,7 @@
|
|||
#include <QApplication>
|
||||
#include "BaseFun.h"
|
||||
// #include "ObjCoreImage.h"
|
||||
#include "geometryutils.h"
|
||||
// #include "ObjWellLogWavefile.h"
|
||||
#include "ObjWellLogWavefile.h"
|
||||
#include "ObjWelllog.h"
|
||||
#include "LogIO.h"
|
||||
// #include "CurveLineLog.h"
|
||||
|
|
@ -39,6 +38,7 @@
|
|||
* 局部刷新填充数据 编辑时实保存 导出 导入
|
||||
*/
|
||||
|
||||
#pragma execution_character_set("utf-8")
|
||||
using namespace pai::datamodel;
|
||||
using namespace pai::gui;
|
||||
|
||||
|
|
@ -275,7 +275,7 @@ private:
|
|||
QScrollBar *m_verScrolBar;
|
||||
QScrollBar *m_horScrolBar;
|
||||
PFLOATPROPERTY *m_MutiVM;
|
||||
// CObjWellLogWavefile *m_pWave;
|
||||
CObjWellLogWavefile *m_pWave;
|
||||
// CObjWellLogTDT *m_pTDT;
|
||||
// CObjWellLogFMT *m_pFMT;
|
||||
QList<QTableWidgetItem*> m_pageItems;
|
||||
|
|
|
|||
|
|
@ -59,13 +59,13 @@ WellLogTableDialogNew::WellLogTableDialogNew(QWidget *parent, Qt::WindowFlags fl
|
|||
m_pUI->btnSave->setIcon(QIcon( ::GetImagePath() + "icon/Save.png"));
|
||||
|
||||
//隐藏
|
||||
m_pUI->verticalScrollBar->hide();
|
||||
m_pUI->horizontalScrollBar->hide();
|
||||
m_pUI->btnExpView->hide();
|
||||
// m_pUI->verticalScrollBar->hide();
|
||||
// m_pUI->horizontalScrollBar->hide();
|
||||
// m_pUI->btnExpView->hide();
|
||||
|
||||
connect(m_pUI->tableWidget->verticalScrollBar(), SIGNAL(valueChanged(int)),this,SLOT(slotVerScrollValueChange(int)));
|
||||
// connect(m_pUI->tableWidget->verticalScrollBar(), SIGNAL(sliderPressed()), this, SLOT(slotVerScrollBarPressed()));
|
||||
// connect(m_pUI->tableWidget->verticalScrollBar(), SIGNAL(sliderReleased()), this, SLOT(slotVerScrollBarReleased()));
|
||||
connect(m_pUI->tableWidget->verticalScrollBar(), SIGNAL(sliderPressed()), this, SLOT(slotVerScrollBarPressed()));
|
||||
connect(m_pUI->tableWidget->verticalScrollBar(), SIGNAL(sliderReleased()), this, SLOT(slotVerScrollBarReleased()));
|
||||
}
|
||||
|
||||
void WellLogTableDialogNew::slotExpdView()
|
||||
|
|
@ -75,13 +75,13 @@ void WellLogTableDialogNew::slotExpdView()
|
|||
|
||||
|
||||
|
||||
// if(m_gridData)
|
||||
// {
|
||||
// swtichViewSize();
|
||||
// m_gridData->switchLogView(!isExp);
|
||||
// m_gridData->bindData();
|
||||
if(m_gridData)
|
||||
{
|
||||
swtichViewSize();
|
||||
m_gridData->switchLogView(!isExp);
|
||||
m_gridData->bindData();
|
||||
|
||||
// }
|
||||
}
|
||||
}
|
||||
|
||||
void WellLogTableDialogNew::swtichViewSize()
|
||||
|
|
@ -93,88 +93,71 @@ void WellLogTableDialogNew::swtichViewSize()
|
|||
|
||||
bool isExp=m_pUI->btnExpView->property(SWITCH_VIEWID).toBool();
|
||||
bool isNull=NULL == spanItem;
|
||||
if(!isNull)
|
||||
{
|
||||
QSize size=this->size();
|
||||
if(isExp)
|
||||
{
|
||||
// int changeSize=size.width()/2.0;
|
||||
if(!isNull)
|
||||
{
|
||||
if(m_pWellLogs.size() > 1
|
||||
&& NULL != m_pWellLogs[0]
|
||||
&& m_pWellLogs[0]->GetTypeID()==GetClassID_WellLog()
|
||||
)
|
||||
{
|
||||
QSize size=this->size();
|
||||
if(isExp)
|
||||
{
|
||||
int changeSize=size.width()/2.0;
|
||||
|
||||
// spanItem->setMinimumWidth(changeSize);
|
||||
// spanItem->show();
|
||||
spanItem->setMinimumWidth(changeSize);
|
||||
spanItem->show();
|
||||
m_gridData->m_middleWidth=changeSize-10;
|
||||
}else
|
||||
{
|
||||
m_gridData->m_gridWidth=size.width()-10;
|
||||
}
|
||||
|
||||
m_pUI->tabWidget->setFixedWidth(0);
|
||||
spanItem->setMinimumWidth(0);
|
||||
m_gridData->m_gridWidth=size.width()-10;
|
||||
spanItem->show();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// if(!isNull)
|
||||
// {
|
||||
// if(m_pWellLogs.size() > 1
|
||||
// && NULL != m_pWellLogs[0]
|
||||
// && m_pWellLogs[0]->GetTypeID()==GetClassID_WellLog()
|
||||
// )
|
||||
// {
|
||||
// QSize size=this->size();
|
||||
// if(isExp)
|
||||
// {
|
||||
// int changeSize=size.width()/2.0;
|
||||
else if(NULL != m_pWellLogs[0]
|
||||
&& m_pWellLogs[0]->GetTypeID()==GetClassID_WellLogWavefile()
|
||||
)
|
||||
{
|
||||
QSize size=this->size();
|
||||
if(isExp)
|
||||
{
|
||||
int changeSize=size.width()/2.0;
|
||||
m_pUI->tabWidget->setFixedWidth(changeSize);
|
||||
//spanItem->setMinimumWidth(changeSize);
|
||||
m_pUI->tabWidget->show();
|
||||
spanItem->show();
|
||||
m_gridData->m_middleWidth=changeSize-10;
|
||||
}else
|
||||
{
|
||||
m_pUI->tabWidget->setFixedWidth(0);
|
||||
spanItem->setMinimumWidth(0);
|
||||
m_gridData->m_gridWidth=size.width()-10;
|
||||
}
|
||||
|
||||
// spanItem->setMinimumWidth(changeSize);
|
||||
// spanItem->show();
|
||||
// m_gridData->m_middleWidth=changeSize-10;
|
||||
// }else
|
||||
// {
|
||||
// m_gridData->m_gridWidth=size.width()-10;
|
||||
// }
|
||||
}
|
||||
|
||||
// }
|
||||
else if(m_pWellLogs.size() == 1
|
||||
&&NULL != m_pWellLogs[0]
|
||||
&& m_pWellLogs[0]->GetTypeID()==GetClassID_WellLog()
|
||||
)
|
||||
{
|
||||
QSize size=this->size();
|
||||
int changeSize=size.width()-size.width()/3.0;
|
||||
|
||||
// else if(NULL != m_pWellLogs[0]
|
||||
// && m_pWellLogs[0]->GetTypeID()==GetClassID_WellLogWavefile()
|
||||
// )
|
||||
// {
|
||||
// QSize size=this->size();
|
||||
// if(isExp)
|
||||
// {
|
||||
// int changeSize=size.width()/2.0;
|
||||
// m_pUI->tabWidget->setFixedWidth(changeSize);
|
||||
// //spanItem->setMinimumWidth(changeSize);
|
||||
// m_pUI->tabWidget->show();
|
||||
// spanItem->show();
|
||||
// m_gridData->m_middleWidth=changeSize-10;
|
||||
// }else
|
||||
// {
|
||||
// m_pUI->tabWidget->setFixedWidth(0);
|
||||
// spanItem->setMinimumWidth(0);
|
||||
// m_gridData->m_gridWidth=size.width()-10;
|
||||
// }
|
||||
spanItem->setMinimumWidth(changeSize);
|
||||
spanItem->show();
|
||||
}
|
||||
|
||||
// }
|
||||
if(isExp)
|
||||
{
|
||||
m_pUI->btnExpView->setText("=>");
|
||||
|
||||
// else if(m_pWellLogs.size() == 1
|
||||
// &&NULL != m_pWellLogs[0]
|
||||
// && m_pWellLogs[0]->GetTypeID()==GetClassID_WellLog()
|
||||
// )
|
||||
// {
|
||||
// QSize size=this->size();
|
||||
// int changeSize=size.width()-size.width()/3.0;
|
||||
|
||||
// spanItem->setMinimumWidth(changeSize);
|
||||
// spanItem->show();
|
||||
// }
|
||||
|
||||
// if(isExp)
|
||||
// {
|
||||
// m_pUI->btnExpView->setText("=>");
|
||||
|
||||
// }else
|
||||
// {
|
||||
// m_pUI->btnExpView->setText("<=");
|
||||
// }
|
||||
// }
|
||||
}else
|
||||
{
|
||||
m_pUI->btnExpView->setText("<=");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void WellLogTableDialogNew::ReFreshWindow(int type)
|
||||
|
|
@ -196,7 +179,14 @@ void WellLogTableDialogNew::setName(QString strOldPath, QString strOldName, int
|
|||
FileName = strOldPath;
|
||||
CurveName = strOldName;
|
||||
m_ObjectType = nObjectType;
|
||||
CObjWellLogTABLE* pWellLog = new CObjWellLogTABLE;
|
||||
|
||||
CObjWellLog* pWellLog = NULL;
|
||||
if (TABLEE_OBJECT == m_ObjectType)
|
||||
pWellLog = new CObjWellLogTABLE;
|
||||
if (WAVE_OBJECT == m_ObjectType)
|
||||
pWellLog = new CObjWellLogWavefile;
|
||||
if (CURVE_OBJECT == m_ObjectType)
|
||||
pWellLog = new CObjWellLogTABLE;
|
||||
pWellLog->SetSlfFileName(strOldPath);
|
||||
pWellLog->m_name = strOldName;
|
||||
m_pWellLogs.clear();
|
||||
|
|
@ -204,6 +194,8 @@ void WellLogTableDialogNew::setName(QString strOldPath, QString strOldName, int
|
|||
//初始化
|
||||
InitWell();
|
||||
|
||||
m_gridData->m_middleWidth=0;
|
||||
m_gridData->m_gridWidth=0;
|
||||
InitWellLog();
|
||||
|
||||
qDebug() << "count=" << QString::number(count);
|
||||
|
|
@ -233,6 +225,16 @@ void WellLogTableDialogNew::InitWell()
|
|||
|
||||
return;
|
||||
}
|
||||
if (WAVE_OBJECT == m_ObjectType)
|
||||
{
|
||||
m_DataTyle=valid_NULL;
|
||||
m_gridData->initMultWellLogData(D_MultWellLogData,m_pWellLogs);
|
||||
m_pUI->tableWidget->verticalHeader()->hide();//隐藏左侧系统序号栏
|
||||
QShowEvent *evt = new QShowEvent();
|
||||
showEvent(evt);
|
||||
// swtichViewSize();
|
||||
return;
|
||||
}
|
||||
|
||||
CLogIO *logio=new CLogIO();
|
||||
logio->Open(FileName.toStdString().c_str(),CSlfIO::modeRead);
|
||||
|
|
@ -289,7 +291,7 @@ void WellLogTableDialogNew::InitWell()
|
|||
|
||||
bool WellLogTableDialogNew::InitWellLog()
|
||||
{
|
||||
if (TABLEE_OBJECT == m_ObjectType)
|
||||
if (TABLEE_OBJECT == m_ObjectType || WAVE_OBJECT == m_ObjectType)
|
||||
{
|
||||
//表格数据
|
||||
m_gridData->bindData();
|
||||
|
|
@ -782,38 +784,38 @@ bool WellLogTableDialogNew::TableFromCSVFile(QTableWidget *tableWidget)
|
|||
|
||||
void WellLogTableDialogNew::showEvent(QShowEvent *evt)
|
||||
{
|
||||
// if(!m_pWellLogs.size())
|
||||
// return;
|
||||
// QDialog::showEvent(evt);
|
||||
// if( (m_pWellLogs[0]->GetTypeID()==GetClassID_WellLog() ||
|
||||
// m_pWellLogs[0]->GetTypeID()==GetClassID_WellLogTABLE()
|
||||
// )
|
||||
// && m_pWellLogs.size() == 1 )
|
||||
// {
|
||||
// m_pUI->btnExpView->hide();
|
||||
// }
|
||||
if(!m_pWellLogs.size()||CURVE_OBJECT == m_ObjectType)
|
||||
return;
|
||||
QDialog::showEvent(evt);
|
||||
if( (m_pWellLogs[0]->GetTypeID()==GetClassID_WellLog() ||
|
||||
m_pWellLogs[0]->GetTypeID()==GetClassID_WellLogTABLE()
|
||||
)
|
||||
&& m_pWellLogs.size() == 1 )
|
||||
{
|
||||
m_pUI->btnExpView->hide();
|
||||
}
|
||||
|
||||
|
||||
// m_isShowDig=true;
|
||||
m_isShowDig=true;
|
||||
|
||||
// m_gridData->m_middleWidth=0;
|
||||
// m_gridData->m_gridWidth=0;
|
||||
// swtichViewSize();
|
||||
// m_gridData->bindData();
|
||||
m_gridData->m_middleWidth=0;
|
||||
m_gridData->m_gridWidth=0;
|
||||
swtichViewSize();
|
||||
m_gridData->bindData();
|
||||
}
|
||||
|
||||
void WellLogTableDialogNew::resizeEvent(QResizeEvent *evt)
|
||||
{
|
||||
|
||||
QDialog::resizeEvent(evt);
|
||||
// if(m_isShowDig)
|
||||
// {
|
||||
if(m_isShowDig)
|
||||
{
|
||||
|
||||
// m_gridData->m_middleWidth=0;
|
||||
// m_gridData->m_gridWidth=0;
|
||||
// swtichViewSize();
|
||||
// m_gridData->bindData();
|
||||
// }
|
||||
m_gridData->m_middleWidth=0;
|
||||
m_gridData->m_gridWidth=0;
|
||||
swtichViewSize();
|
||||
m_gridData->bindData();
|
||||
}
|
||||
}
|
||||
|
||||
bool WellLogTableDialogNew::TableToCSVFile(QTableWidget *tableWidget)
|
||||
|
|
|
|||
|
|
@ -22,6 +22,7 @@
|
|||
// #include "DataTree.h"
|
||||
// #include <qtconcurrentrun.h>
|
||||
// #include "ObjWellLogWavefile.h"
|
||||
#include <QtConcurrent/QtConcurrentRun>
|
||||
#include "DataManagger.h"
|
||||
#include "assetcopy.h"
|
||||
// #include <Windows.h>
|
||||
|
|
@ -568,100 +569,100 @@ void GridDataAdapter::attachWellLogView()
|
|||
|
||||
void GridDataAdapter::bindWellLogData(int wellLogIndex)
|
||||
{
|
||||
// if(wellLogIndex>=m_pWellLogs.size()) return;
|
||||
// if(m_horScrolValue /*+wellLogIndex*/ >= m_nSamples/*m_pWellLogs.size()*/) {
|
||||
// m_horScrolValue=m_nSamples/*m_pWellLogs.size()-wellLogIndex*/-1;
|
||||
// if(m_horScrolValue<0) m_horScrolValue=0;
|
||||
// }
|
||||
// if(wellLogIndex > m_pWellLogs.size()){
|
||||
// wellLogIndex = m_pWellLogs.size() - 1;
|
||||
// }
|
||||
// int index=/*m_horScrolValue+*/wellLogIndex;
|
||||
// if(index<0) return;
|
||||
if(wellLogIndex>=m_pWellLogs.size()) return;
|
||||
if(m_horScrolValue /*+wellLogIndex*/ >= m_nSamples/*m_pWellLogs.size()*/) {
|
||||
m_horScrolValue=m_nSamples/*m_pWellLogs.size()-wellLogIndex*/-1;
|
||||
if(m_horScrolValue<0) m_horScrolValue=0;
|
||||
}
|
||||
if(wellLogIndex > m_pWellLogs.size()){
|
||||
wellLogIndex = m_pWellLogs.size() - 1;
|
||||
}
|
||||
int index=/*m_horScrolValue+*/wellLogIndex;
|
||||
if(index<0) return;
|
||||
// CObjWellLogTABLE* pTable = dynamic_cast<CObjWellLogTABLE*>(m_pWellLogs[index]);
|
||||
// if(pTable) return;
|
||||
// CObjWellLog* pround = dynamic_cast<CObjWellLog*>(m_pWellLogs[index]);
|
||||
// if(pround && pround->GetSlfFileName()!="")
|
||||
// {
|
||||
// CString TypeName=pround->GetParent()->GetName();
|
||||
// int Type=0;
|
||||
// //if(TypeName=="波列数据")Type=1;
|
||||
// if(m_pWellLogs[0]->GetTypeID()==GetClassID_WellLogWavefile())Type=1;//whp add 2020.5.11 for 波列数据编辑和管理
|
||||
// QString CurveName=pround->GetName();
|
||||
// curveName = CurveName;
|
||||
// QString FileName=pround->GetSlfFileName();
|
||||
// fileName = FileName;
|
||||
// QWidget* parent=qobject_cast<QWidget*>(m_table->parent());
|
||||
// if(NULL == parent)
|
||||
// {
|
||||
// return;
|
||||
// }
|
||||
// QWidget* sPage=parent->findChild<QWidget*>("statisticsPage");
|
||||
// QWidget* pPage=parent->findChild<QWidget*>("protoprtyPage");
|
||||
// QWidget* cPage=parent->findChild<QWidget*>("computePage");
|
||||
// QWidget* pvPage=parent->findChild<QWidget*>("curvePreViewPage");
|
||||
// QTabWidget* tabWidget=parent->findChild<QTabWidget*>("tabWidget");
|
||||
// if(NULL != sPage && NULL != pPage && NULL != cPage && NULL != pvPage)
|
||||
// {
|
||||
// if(NULL != tabWidget)
|
||||
// {
|
||||
// if(Type==0)
|
||||
// {
|
||||
// tabWidget->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding);
|
||||
// //tabWidget->setMinimumWidth(0);
|
||||
// //tabWidget->setMaximumWidth(16777215);
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// tabWidget->setSizePolicy(QSizePolicy::Fixed/*Preferred*/,QSizePolicy::Expanding);//whp add 2020.5.11 for 波列数据编辑和管理
|
||||
// //tabWidget->setMinimumWidth(1216);
|
||||
// //tabWidget->setMaximumWidth(1216);
|
||||
// }
|
||||
// QScrollArea* sScrollArea=tabWidget->findChild<QScrollArea*>("sScrollArea");
|
||||
// QScrollArea* pScrollArea=tabWidget->findChild<QScrollArea*>("pScrollArea");
|
||||
// QScrollArea* cScrollArea=tabWidget->findChild<QScrollArea*>("cscrollArea");
|
||||
// QScrollArea* curveScrollArea=tabWidget->findChild<QScrollArea*>("curveScrollArea");
|
||||
// if(NULL != sScrollArea)
|
||||
// {
|
||||
// sScrollArea->setWidget(sPage);
|
||||
// }
|
||||
CObjWellLog* pround = dynamic_cast<CObjWellLog*>(m_pWellLogs[index]);
|
||||
if(pround && pround->GetSlfFileName()!="")
|
||||
{
|
||||
// CString TypeName=pround->GetParent()->GetName();
|
||||
int Type=0;
|
||||
//if(TypeName=="波列数据")Type=1;
|
||||
if(m_pWellLogs[0]->GetTypeID()==GetClassID_WellLogWavefile())Type=1;//whp add 2020.5.11 for 波列数据编辑和管理
|
||||
QString CurveName=pround->GetName();
|
||||
curveName = CurveName;
|
||||
QString FileName=pround->GetSlfFileName();
|
||||
fileName = FileName;
|
||||
QWidget* parent=qobject_cast<QWidget*>(m_table->parent());
|
||||
if(NULL == parent)
|
||||
{
|
||||
return;
|
||||
}
|
||||
QWidget* sPage=parent->findChild<QWidget*>("statisticsPage");
|
||||
QWidget* pPage=parent->findChild<QWidget*>("protoprtyPage");
|
||||
QWidget* cPage=parent->findChild<QWidget*>("computePage");
|
||||
QWidget* pvPage=parent->findChild<QWidget*>("curvePreViewPage");
|
||||
QTabWidget* tabWidget=parent->findChild<QTabWidget*>("tabWidget");
|
||||
if(NULL != sPage && NULL != pPage && NULL != cPage && NULL != pvPage)
|
||||
{
|
||||
if(NULL != tabWidget)
|
||||
{
|
||||
if(Type==0)
|
||||
{
|
||||
tabWidget->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding);
|
||||
//tabWidget->setMinimumWidth(0);
|
||||
//tabWidget->setMaximumWidth(16777215);
|
||||
}
|
||||
else
|
||||
{
|
||||
tabWidget->setSizePolicy(QSizePolicy::Fixed/*Preferred*/,QSizePolicy::Expanding);//whp add 2020.5.11 for 波列数据编辑和管理
|
||||
//tabWidget->setMinimumWidth(1216);
|
||||
//tabWidget->setMaximumWidth(1216);
|
||||
}
|
||||
QScrollArea* sScrollArea=tabWidget->findChild<QScrollArea*>("sScrollArea");
|
||||
QScrollArea* pScrollArea=tabWidget->findChild<QScrollArea*>("pScrollArea");
|
||||
QScrollArea* cScrollArea=tabWidget->findChild<QScrollArea*>("cscrollArea");
|
||||
QScrollArea* curveScrollArea=tabWidget->findChild<QScrollArea*>("curveScrollArea");
|
||||
if(NULL != sScrollArea)
|
||||
{
|
||||
sScrollArea->setWidget(sPage);
|
||||
}
|
||||
|
||||
// if(NULL != pScrollArea)
|
||||
// {
|
||||
// pScrollArea->setWidget(pPage);
|
||||
// }
|
||||
if(NULL != pScrollArea)
|
||||
{
|
||||
pScrollArea->setWidget(pPage);
|
||||
}
|
||||
|
||||
// if(NULL != cScrollArea)
|
||||
// {
|
||||
// if(Type==0)cScrollArea->setWidget(cPage);
|
||||
// }
|
||||
if(NULL != cScrollArea)
|
||||
{
|
||||
if(Type==0)cScrollArea->setWidget(cPage);
|
||||
}
|
||||
|
||||
// if(NULL != curveScrollArea)
|
||||
// {
|
||||
// curveScrollArea->setWidget(pvPage);
|
||||
// }
|
||||
if(NULL != curveScrollArea)
|
||||
{
|
||||
curveScrollArea->setWidget(pvPage);
|
||||
}
|
||||
|
||||
// sPage->show();
|
||||
// pPage->show();
|
||||
// pvPage->show();
|
||||
// if(Type==0)
|
||||
// {
|
||||
// cPage->show();//whp change 2020.5.11 for 波列数据编辑和管理 波列曲线不计算
|
||||
// }
|
||||
sPage->show();
|
||||
pPage->show();
|
||||
pvPage->show();
|
||||
if(Type==0)
|
||||
{
|
||||
cPage->show();//whp change 2020.5.11 for 波列数据编辑和管理 波列曲线不计算
|
||||
}
|
||||
|
||||
// tabWidget->show();
|
||||
// //调用
|
||||
// m_mgr->DataStatistics(Type,FileName,CurveName,sPage);
|
||||
// m_mgr->CurvePropertyEdit(Type,FileName,CurveName,pPage);
|
||||
// m_mgr->CallDisplayWaveOrCurve(Type,FileName,CurveName,pvPage);
|
||||
// if(Type==0)
|
||||
// {
|
||||
// m_mgr->CurveCompute(FileName,QStringList()<<CurveName,cPage);
|
||||
// }
|
||||
// }
|
||||
tabWidget->show();
|
||||
//调用
|
||||
m_mgr->DataStatistics(Type,FileName,CurveName,sPage);
|
||||
m_mgr->CurvePropertyEdit(Type,FileName,CurveName,pPage);
|
||||
m_mgr->CallDisplayWaveOrCurve(Type,FileName,CurveName,pvPage);
|
||||
if(Type==0)
|
||||
{
|
||||
m_mgr->CurveCompute(FileName,QStringList()<<CurveName,cPage);
|
||||
}
|
||||
}
|
||||
|
||||
// }
|
||||
// }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -687,9 +688,9 @@ void GridDataAdapter::ReFreshWindow(int type)
|
|||
break;
|
||||
case D_MultWellLogData:
|
||||
{
|
||||
// m_pWave->isLoad=false;
|
||||
// m_pWave->LoadFromSLF();
|
||||
// updatetMultWellLogData();
|
||||
m_pWave->isLoad=false;
|
||||
m_pWave->LoadFromSLF();
|
||||
updatetMultWellLogData();
|
||||
}
|
||||
break;
|
||||
case D_TableWellLogData:
|
||||
|
|
@ -791,9 +792,7 @@ void GridDataAdapter::calcuPageRowsCols()
|
|||
m_pageCol = m_pWellLogs.size() + 1;
|
||||
//m_pageCol = (tableWidth%DefColWidth==0)?(tableWidth/DefColWidth):(tableWidth/DefColWidth+1);
|
||||
}
|
||||
|
||||
|
||||
|
||||
if(m_dtype == D_TableWellLogData||
|
||||
m_dtype==D_TDTWellLogData||
|
||||
m_dtype==D_FMTWellLogData){
|
||||
|
|
@ -1909,44 +1908,44 @@ void GridDataAdapter::exportWellLogData(FILE *fp, DepthProgress& progress)
|
|||
//////////////////////////////////////////////////////////
|
||||
void GridDataAdapter::initMultWellLogData(DType type,QList<CObjWellLog*> WellLogs)
|
||||
{
|
||||
// m_pWellLogs=WellLogs;
|
||||
m_pWellLogs=WellLogs;
|
||||
|
||||
// for(int i = 0; i < m_pWellLogs.size(); i++){
|
||||
// m_pWellLogs[i]->isUsing = true;
|
||||
// }
|
||||
for(int i = 0; i < m_pWellLogs.size(); i++){
|
||||
m_pWellLogs[i]->isUsing = true;
|
||||
}
|
||||
|
||||
// m_pAssetCopy->SetWellLogs(type,WellLogs);
|
||||
// m_pWave=(CObjWellLogWavefile *)m_pWellLogs[0];
|
||||
// if(!m_pWave)return;
|
||||
// m_pWave->isLoad=false;
|
||||
// m_pWave->LoadFromSLF();
|
||||
// m_MutiVM=&m_pWave->GetProperty();
|
||||
// WaveInfo=m_pWave->waveinfo;
|
||||
// m_dtype=type;
|
||||
// m_SDep = WaveInfo.StartDepth;
|
||||
// m_EDep = WaveInfo.EndDepth;
|
||||
// m_Rlev = WaveInfo.DepLevel;
|
||||
// m_RepCode = WaveInfo.RepCode;
|
||||
// m_CodeLen = WaveInfo.CodeLen;
|
||||
// m_SamplePoint = WaveInfo.SamplePoint;
|
||||
// m_nSamples = WaveInfo.SamplePoint*WaveInfo.ArrayNum;
|
||||
// m_flRlev2 = WaveInfo.TimeLevel;
|
||||
// m_PointNum = (float)(fabs((m_EDep-m_SDep)/m_Rlev+1.5));
|
||||
// m_TitleField.clear();
|
||||
// QString depthUnit=m_pWellLogs[0]->GetDepthUnit();
|
||||
// if(m_pWellLogs[0]->GetDepthUnit()=="m"&&depthUnit!="m"&&depthUnit!="米") depthUnit="";
|
||||
// else if(m_pWellLogs[0]->GetDepthUnit()=="ft"&&depthUnit!="ft"&&depthUnit!="英尺") depthUnit="";
|
||||
// if(depthUnit.isEmpty()) depthUnit=m_pWellLogs[0]->GetDepthAliasUnit();
|
||||
// if(depthUnit.isEmpty()) depthUnit="米";
|
||||
// m_TitleField << "MD\n"+depthUnit;
|
||||
// char buf[100];
|
||||
// for(int j=0;j<WaveInfo.ArrayNum;j++) {
|
||||
// for(int i=0;i<WaveInfo.SamplePoint;i++){
|
||||
// sprintf(buf,"A:%d D:%d",j+1,i+1);
|
||||
// m_TitleField << buf;//+"\n";
|
||||
// }
|
||||
// }
|
||||
// m_TitleField << " " ;
|
||||
m_pAssetCopy->SetWellLogs(type,WellLogs);
|
||||
m_pWave=(CObjWellLogWavefile *)m_pWellLogs[0];
|
||||
if(!m_pWave)return;
|
||||
m_pWave->isLoad=false;
|
||||
m_pWave->LoadFromSLF();
|
||||
m_MutiVM=&m_pWave->GetProperty();
|
||||
WaveInfo=m_pWave->waveinfo;
|
||||
m_dtype=type;
|
||||
m_SDep = WaveInfo.StartDepth;
|
||||
m_EDep = WaveInfo.EndDepth;
|
||||
m_Rlev = WaveInfo.DepLevel;
|
||||
m_RepCode = WaveInfo.RepCode;
|
||||
m_CodeLen = WaveInfo.CodeLen;
|
||||
m_SamplePoint = WaveInfo.SamplePoint;
|
||||
m_nSamples = WaveInfo.SamplePoint*WaveInfo.ArrayNum;
|
||||
m_flRlev2 = WaveInfo.TimeLevel;
|
||||
m_PointNum = (float)(fabs((m_EDep-m_SDep)/m_Rlev+1.5));
|
||||
m_TitleField.clear();
|
||||
QString depthUnit=m_pWellLogs[0]->GetDepthUnit();
|
||||
if(m_pWellLogs[0]->GetDepthUnit()=="m"&&depthUnit!="m"&&depthUnit!="米") depthUnit="";
|
||||
else if(m_pWellLogs[0]->GetDepthUnit()=="ft"&&depthUnit!="ft"&&depthUnit!="英尺") depthUnit="";
|
||||
if(depthUnit.isEmpty()) depthUnit=m_pWellLogs[0]->GetDepthAliasUnit();
|
||||
if(depthUnit.isEmpty()) depthUnit="米";
|
||||
m_TitleField << "MD\n"+depthUnit;
|
||||
char buf[100];
|
||||
for(int j=0;j<WaveInfo.ArrayNum;j++) {
|
||||
for(int i=0;i<WaveInfo.SamplePoint;i++){
|
||||
sprintf(buf,"A:%d D:%d",j+1,i+1);
|
||||
m_TitleField << buf;//+"\n";
|
||||
}
|
||||
}
|
||||
m_TitleField << " " ;
|
||||
|
||||
}
|
||||
//////////////////////////////////////////////////////////
|
||||
|
|
@ -2010,103 +2009,103 @@ void GridDataAdapter::initTDTWellLogData(DType type,QList<CObjWellLog*> WellLogs
|
|||
//////////////////////////////////////////////////////////
|
||||
void GridDataAdapter::initFMTWellLogData(DType type,QList<CObjWellLog*> WellLogs)
|
||||
{
|
||||
// m_pWellLogs=WellLogs;
|
||||
m_pWellLogs=WellLogs;
|
||||
|
||||
// for(int i = 0; i < m_pWellLogs.size(); i++){
|
||||
// m_pWellLogs[i]->isUsing = true;
|
||||
// }
|
||||
for(int i = 0; i < m_pWellLogs.size(); i++){
|
||||
m_pWellLogs[i]->isUsing = true;
|
||||
}
|
||||
|
||||
// m_pAssetCopy->SetWellLogs(type,WellLogs);
|
||||
// m_pWave=(CObjWellLogWavefile *)m_pWellLogs[0];
|
||||
// if(!m_pWave)return;
|
||||
// m_pWave->isLoad=false;
|
||||
// m_pWave->LoadFromSLF();
|
||||
// m_MutiVM=&m_pWave->GetProperty();
|
||||
// WaveInfo=m_pWave->waveinfo;
|
||||
// m_dtype=type;
|
||||
// m_SDep = WaveInfo.StartDepth;
|
||||
// m_EDep = WaveInfo.EndDepth;
|
||||
// m_Rlev = WaveInfo.DepLevel;
|
||||
// m_RepCode = WaveInfo.RepCode;
|
||||
// m_CodeLen = WaveInfo.CodeLen;
|
||||
// m_SamplePoint = WaveInfo.SamplePoint;
|
||||
// m_nSamples = WaveInfo.SamplePoint*WaveInfo.ArrayNum;
|
||||
// m_flRlev2 = WaveInfo.TimeLevel;
|
||||
// m_PointNum = (float)(fabs((m_EDep-m_SDep)/m_Rlev+1.5));
|
||||
// m_TitleField.clear();
|
||||
// QString depthUnit=m_pWellLogs[0]->GetDepthUnit();
|
||||
// if(m_pWellLogs[0]->GetDepthUnit()=="m"&&depthUnit!="m"&&depthUnit!="米") depthUnit="";
|
||||
// else if(m_pWellLogs[0]->GetDepthUnit()=="ft"&&depthUnit!="ft"&&depthUnit!="英尺") depthUnit="";
|
||||
// if(depthUnit.isEmpty()) depthUnit=m_pWellLogs[0]->GetDepthAliasUnit();
|
||||
// if(depthUnit.isEmpty()) depthUnit="米";
|
||||
// m_TitleField << "MD\n"+depthUnit;
|
||||
// char buf[100];
|
||||
// for(int j=0;j<WaveInfo.ArrayNum;j++) {
|
||||
// for(int i=0;i<WaveInfo.SamplePoint;i++){
|
||||
// sprintf(buf,"A:%d D:%d",j+1,i+1);
|
||||
// m_TitleField << buf;//+"\n";
|
||||
// }
|
||||
// }
|
||||
// m_TitleField << " " ;
|
||||
m_pAssetCopy->SetWellLogs(type,WellLogs);
|
||||
m_pWave=(CObjWellLogWavefile *)m_pWellLogs[0];
|
||||
if(!m_pWave)return;
|
||||
m_pWave->isLoad=false;
|
||||
m_pWave->LoadFromSLF();
|
||||
m_MutiVM=&m_pWave->GetProperty();
|
||||
WaveInfo=m_pWave->waveinfo;
|
||||
m_dtype=type;
|
||||
m_SDep = WaveInfo.StartDepth;
|
||||
m_EDep = WaveInfo.EndDepth;
|
||||
m_Rlev = WaveInfo.DepLevel;
|
||||
m_RepCode = WaveInfo.RepCode;
|
||||
m_CodeLen = WaveInfo.CodeLen;
|
||||
m_SamplePoint = WaveInfo.SamplePoint;
|
||||
m_nSamples = WaveInfo.SamplePoint*WaveInfo.ArrayNum;
|
||||
m_flRlev2 = WaveInfo.TimeLevel;
|
||||
m_PointNum = (float)(fabs((m_EDep-m_SDep)/m_Rlev+1.5));
|
||||
m_TitleField.clear();
|
||||
QString depthUnit=m_pWellLogs[0]->GetDepthUnit();
|
||||
if(m_pWellLogs[0]->GetDepthUnit()=="m"&&depthUnit!="m"&&depthUnit!="米") depthUnit="";
|
||||
else if(m_pWellLogs[0]->GetDepthUnit()=="ft"&&depthUnit!="ft"&&depthUnit!="英尺") depthUnit="";
|
||||
if(depthUnit.isEmpty()) depthUnit=m_pWellLogs[0]->GetDepthAliasUnit();
|
||||
if(depthUnit.isEmpty()) depthUnit="米";
|
||||
m_TitleField << "MD\n"+depthUnit;
|
||||
char buf[100];
|
||||
for(int j=0;j<WaveInfo.ArrayNum;j++) {
|
||||
for(int i=0;i<WaveInfo.SamplePoint;i++){
|
||||
sprintf(buf,"A:%d D:%d",j+1,i+1);
|
||||
m_TitleField << buf;//+"\n";
|
||||
}
|
||||
}
|
||||
m_TitleField << " " ;
|
||||
|
||||
}
|
||||
|
||||
void GridDataAdapter::saveMultWellLogData(bool &isScuccess)
|
||||
{
|
||||
// FLOATPROPERTY vM;
|
||||
// vM.SetSize(3);
|
||||
// vM.m_vProperty[0]=m_SDep;
|
||||
// vM.m_vProperty[1]=m_EDep;
|
||||
// vM.m_vProperty[2]=m_Rlev;
|
||||
// QString filePath=/*m_pWellLogs[0]*/m_pWave->GetSlfFileName();
|
||||
// CLogIO * logio=new CLogIO();
|
||||
// if(!logio->Open(filePath.toStdString().c_str(),CSlfIO::modeReadWrite))
|
||||
// {
|
||||
// delete logio;
|
||||
// return;
|
||||
// }
|
||||
FLOATPROPERTY vM;
|
||||
vM.SetSize(3);
|
||||
vM.m_vProperty[0]=m_SDep;
|
||||
vM.m_vProperty[1]=m_EDep;
|
||||
vM.m_vProperty[2]=m_Rlev;
|
||||
QString filePath=/*m_pWellLogs[0]*/m_pWave->GetSlfFileName();
|
||||
CLogIO * logio=new CLogIO();
|
||||
if(!logio->Open(filePath.toStdString().c_str(),CSlfIO::modeReadWrite))
|
||||
{
|
||||
delete logio;
|
||||
return;
|
||||
}
|
||||
|
||||
// int iIndex = logio->OpenWave(m_pWave->GetName().toStdString().c_str());
|
||||
// if (iIndex >= 0)
|
||||
// {
|
||||
// int row,col,pos;
|
||||
// row=0;
|
||||
// col=pos=row;
|
||||
// float value,dep;
|
||||
// value=dep=0;
|
||||
// int actRow=0;
|
||||
// int actCol=0;
|
||||
// char *vchar=(char*)m_MutiVM->m_vProperty;
|
||||
int iIndex = logio->OpenWave(m_pWave->GetName().toStdString().c_str());
|
||||
if (iIndex >= 0)
|
||||
{
|
||||
int row,col,pos;
|
||||
row=0;
|
||||
col=pos=row;
|
||||
float value,dep;
|
||||
value=dep=0;
|
||||
int actRow=0;
|
||||
int actCol=0;
|
||||
char *vchar=(char*)m_MutiVM->m_vProperty;
|
||||
|
||||
// int sRow=m_editRange.topRow();
|
||||
// int eRow=m_editRange.bottomRow();
|
||||
// int sCol=m_editRange.leftColumn();
|
||||
// int eCol=m_editRange.rightColumn();
|
||||
// QList<QList<float> > editlist;
|
||||
// extractMultWellLogData(editlist,isScuccess);
|
||||
// for(int i=sRow;i<=eRow;i++)
|
||||
// {
|
||||
// actRow=m_verScrolValue+i;
|
||||
// col=0;
|
||||
// for(int j=sCol;j<=eCol;j++)
|
||||
// {
|
||||
// actCol=m_horScrolValue+j;
|
||||
// if(isScuccess)
|
||||
// {
|
||||
// pos=actRow*m_nSamples+(actCol-1);
|
||||
// value=editlist.value(row).value(col);
|
||||
// setData(m_RepCode,(char*)&vchar[pos*m_CodeLen],value);
|
||||
// DWORD result=logio->WriteWave(iIndex,m_SDep,m_PointNum,(void*)m_MutiVM->m_vProperty);
|
||||
int sRow=m_editRange.topRow();
|
||||
int eRow=m_editRange.bottomRow();
|
||||
int sCol=m_editRange.leftColumn();
|
||||
int eCol=m_editRange.rightColumn();
|
||||
QList<QList<float> > editlist;
|
||||
extractMultWellLogData(editlist,isScuccess);
|
||||
for(int i=sRow;i<=eRow;i++)
|
||||
{
|
||||
actRow=m_verScrolValue+i;
|
||||
col=0;
|
||||
for(int j=sCol;j<=eCol;j++)
|
||||
{
|
||||
actCol=m_horScrolValue+j;
|
||||
if(isScuccess)
|
||||
{
|
||||
pos=actRow*m_nSamples+(actCol-1);
|
||||
value=editlist.value(row).value(col);
|
||||
setData(m_RepCode,(char*)&vchar[pos*m_CodeLen],value);
|
||||
DWORD result=logio->WriteWave(iIndex,m_SDep,m_PointNum,(void*)m_MutiVM->m_vProperty);
|
||||
|
||||
|
||||
// }
|
||||
// col++;
|
||||
// }
|
||||
// row++;
|
||||
// }
|
||||
// logio->CloseWave(iIndex);
|
||||
// }
|
||||
// delete logio;
|
||||
}
|
||||
col++;
|
||||
}
|
||||
row++;
|
||||
}
|
||||
logio->CloseWave(iIndex);
|
||||
}
|
||||
delete logio;
|
||||
}
|
||||
|
||||
//void GridDataAdapter::extractMultWellLogData(int &row,int &col,float &value,bool &isScuccess)
|
||||
|
|
@ -3543,11 +3542,11 @@ void GridDataAdapter::valueChange()
|
|||
break;
|
||||
}
|
||||
|
||||
// if(NULL != m_pComplete)
|
||||
// {
|
||||
// future= QtConcurrent::run(this,m_pComplete);
|
||||
// watcher.setFuture(future);
|
||||
// }
|
||||
if(NULL != m_pComplete)
|
||||
{
|
||||
future= QtConcurrent::run(this,m_pComplete);
|
||||
watcher.setFuture(future);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -79,12 +79,15 @@ MainWindow::MainWindow(QWidget *parent) :
|
|||
connect(CallManage::getInstance(), SIGNAL(sig_CloseProject()), this, SLOT(s_CloseProject()));
|
||||
|
||||
//曲线
|
||||
//关联信号槽,数据查看
|
||||
//关联信号槽,数据查看曲线数据
|
||||
connect(CallManage::getInstance(), SIGNAL(sig_ShowCurve(QString, QString)), this, SLOT(s_ShowCurve(QString, QString)));
|
||||
|
||||
//关联信号槽,数据查看
|
||||
//关联信号槽,数据查看表格数据
|
||||
connect(CallManage::getInstance(), SIGNAL(sig_ShowTable(QString, QString)), this, SLOT(s_ShowTable(QString, QString)));
|
||||
|
||||
//关联信号槽,数据查看波列数据
|
||||
connect(CallManage::getInstance(), SIGNAL(sig_ShowWave(QString, QString)), this, SLOT(s_ShowWave(QString, QString)));
|
||||
|
||||
//关联信号槽,测井信息表数据查看
|
||||
connect(CallManage::getInstance(), SIGNAL(sig_WelllogInformation(QString)), this, SLOT(s_WelllogInformation(QString)));
|
||||
}
|
||||
|
|
@ -524,6 +527,20 @@ void MainWindow::s_ShowTable(QString strSlfName, QString strName)
|
|||
}
|
||||
}
|
||||
|
||||
//表格数据查看
|
||||
void MainWindow::s_ShowWave(QString strSlfName, QString strName)
|
||||
{
|
||||
if(m_centerWidgets)
|
||||
{
|
||||
WellLogTableDialogNew* pDialog = new WellLogTableDialogNew();
|
||||
pDialog->setName(strSlfName, strName, WAVE_OBJECT);
|
||||
QString wellname;QString path;
|
||||
GetWellNameAndPath(strSlfName, wellname, path);
|
||||
m_centerWidgets->addTab(pDialog, wellname + ":" + strName);
|
||||
int iCount = m_centerWidgets->count();
|
||||
m_centerWidgets->m_pTabBar->setCurrentIndex(iCount-1);
|
||||
}
|
||||
}
|
||||
//编辑测井信息
|
||||
void MainWindow::s_WelllogInformation(QString strSlfName)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -92,6 +92,7 @@ public slots:
|
|||
|
||||
void s_ShowCurve(QString strSlfName, QString strName);//曲线数据查看
|
||||
void s_ShowTable(QString strSlfName, QString strName);//表格数据查看
|
||||
void s_ShowWave(QString strSlfName, QString strName); //波列数据查看
|
||||
void s_WelllogInformation(QString strSlfName);//编辑测井信息
|
||||
|
||||
//插件消息
|
||||
|
|
|
|||
|
|
@ -114,7 +114,6 @@ MainWindowCurve::MainWindowCurve(QWidget *parent) :
|
|||
connect(CallManage::getInstance(), SIGNAL(sig_changeScale(QString, int)), this, SLOT(s_changeScale(QString, int)));
|
||||
connect(CallManage::getInstance(), SIGNAL(sig_changeDepth(QString, QString, QString, int, int)), this, SLOT(s_changeDepth(QString, QString, QString, int, int)));
|
||||
connect(CallManage::getInstance(), SIGNAL(sig_changeWidth(QString, QString, QString, QString, int, int)), this, SLOT(s_changeWidth(QString, QString, QString, QString, int, int)));
|
||||
|
||||
connect(CallManage::getInstance(), SIGNAL(sig_changeTrackProperty(QVariantList)), this, SLOT(s_changeTrackProperty(QVariantList)));
|
||||
|
||||
//曲线选中,置顶
|
||||
|
|
@ -1723,6 +1722,15 @@ void MainWindowCurve::s_ModuleOpen()
|
|||
pModuleConsole->m_pWorkflowDataModel = new CWellLogWorkflowDataModel();
|
||||
pDialog->m_CurrentSLFFileName = strSlfName;
|
||||
pDialog->CreatParamControlWidget();
|
||||
|
||||
QString subStr = strSlfName;
|
||||
int startPos = strSlfName.indexOf("Logdata");
|
||||
if (startPos>=0)
|
||||
{
|
||||
subStr = subStr.right(strSlfName.length() - startPos - 7);
|
||||
}
|
||||
pDialog->setWindowTitle(subStr);
|
||||
|
||||
pDialog->show();
|
||||
return;
|
||||
}
|
||||
|
|
@ -3561,7 +3569,6 @@ void MainWindowCurve::DisplayTracks(QJsonArray tracksArray)
|
|||
QJsonValue trackValue = tracksArray[iNum];
|
||||
QJsonObject trackObj = trackValue.toObject();
|
||||
//
|
||||
//
|
||||
if (trackObj.contains("topinfo"))
|
||||
{
|
||||
QJsonValue value = trackObj.value("topinfo");
|
||||
|
|
|
|||
|
|
@ -682,10 +682,10 @@ void QtProjectWidgets::initCurveObjectTreeMenu(QMenu *menu, QTreeWidget *treeWid
|
|||
//初始化波列对象-右键菜单
|
||||
void QtProjectWidgets::initWaveObjectTreeMenu(QMenu *menu, QTreeWidget *treeWidget)
|
||||
{
|
||||
// QAction* action_WaveObject = new QAction("数据查看", treeWidget);
|
||||
// action_WaveObject->setIcon(QIcon(GetImagePath() + "icon/Sheet.png")); // 设置图标
|
||||
// connect(action_WaveObject, SIGNAL(triggered(bool)), this, SLOT(onShowWave(bool)));
|
||||
// menu->addAction(action_WaveObject);
|
||||
QAction* action_WaveObject = new QAction("数据查看", treeWidget);
|
||||
action_WaveObject->setIcon(QIcon(GetImagePath() + "icon/Sheet.png")); // 设置图标
|
||||
connect(action_WaveObject, SIGNAL(triggered(bool)), this, SLOT(onShowWave(bool)));
|
||||
menu->addAction(action_WaveObject);
|
||||
//
|
||||
QAction* action_DepthShift = new QAction("深度移动", treeWidget);
|
||||
action_DepthShift->setIcon(QIcon(GetImagePath() + "icon/RigidDepthShifting.png")); // 设置图标
|
||||
|
|
@ -875,6 +875,12 @@ void QtProjectWidgets::onShowTable(bool checked)
|
|||
emit CallManage::getInstance()->sig_ShowTable(m_strSlfName, m_strCurveObjectName);
|
||||
}
|
||||
|
||||
//波列数据查看
|
||||
void QtProjectWidgets::onShowWave(bool checked)
|
||||
{
|
||||
emit CallManage::getInstance()->sig_ShowWave(m_strSlfName, m_strCurveObjectName);
|
||||
}
|
||||
|
||||
//编辑测井信息
|
||||
void QtProjectWidgets::onWelllogInformation()
|
||||
{
|
||||
|
|
|
|||
|
|
@ -44,6 +44,9 @@ public slots:
|
|||
void onDepthShift(bool checked = false); //深度移动
|
||||
//表格
|
||||
void onShowTable(bool checked = false); //数据查看
|
||||
//波列
|
||||
void onShowWave(bool checked = false); //波列查看
|
||||
|
||||
void onEditWelllogRound();
|
||||
void onImportSingleWellLogData();
|
||||
void onImportSlfTable();
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user