From 9b7c8bbda10f9b9623160eebe31054a39feac14b Mon Sep 17 00:00:00 2001 From: zhaolei <353719554@qq.com> Date: Thu, 29 Jan 2026 16:57:06 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=B3=A2=E5=88=97=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E6=98=BE=E7=A4=BA=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CallManage/CallManage.h | 1 + DataMgr/src/AngleAdjTool.cpp | 232 ++++ DataMgr/src/AngleAdjTool.h | 52 + DataMgr/src/CurveComputePage.cpp | 294 +++++ DataMgr/src/CurveComputePage.h | 31 + DataMgr/src/CurveComputePage.ui | 182 ++++ DataMgr/src/CurveComputerDlg.cpp | 361 ++++++ DataMgr/src/CurveComputerDlg.h | 45 + DataMgr/src/CurvePropertyEdit.cpp | 365 +++++++ DataMgr/src/CurvePropertyEdit.h | 50 + DataMgr/src/DataManagger.cpp | 354 +++--- DataMgr/src/DataMgr.pro | 45 +- DataMgr/src/DrawCurveView.cpp | 1205 +++++++++++++++++++++ DataMgr/src/DrawCurveView.h | 155 +++ DataMgr/src/DrawWaveView.cpp | 208 ++++ DataMgr/src/DrawWaveView.h | 70 ++ DataMgr/src/GeneratedFiles/SmoothTool.cpp | 169 +++ DataMgr/src/GeneratedFiles/SmoothTool.h | 52 + DataMgr/src/GeneratedFiles/editEnd.cpp | 45 + DataMgr/src/GeneratedFiles/editEnd.h | 32 + DataMgr/src/ShowCurve.cpp | 549 ++++++++++ DataMgr/src/ShowCurve.h | 91 ++ DataMgr/src/ShowWave.cpp | 276 +++++ DataMgr/src/ShowWave.h | 56 + DataMgr/src/Statistics2Dlg.cpp | 482 +++++++++ DataMgr/src/Statistics2Dlg.h | 93 ++ DataMgr/src/StatisticsDlg.cpp | 411 +++++++ DataMgr/src/StatisticsDlg.h | 87 ++ DataMgr/src/deptlineedit.cpp | 69 ++ DataMgr/src/deptlineedit.h | 37 + DataMgr/src/view.cpp | 108 ++ DataMgr/src/view.h | 31 + OSGDataModel/include/ObjWelllogWavefile.h | 60 + OSGDataModel/src/OSGDataModel.pro | 4 +- OSGDataModel/src/ObjWellLogWavefile.cpp | 1181 ++++++++++++++++++++ WellLogUI/include/WellLogTableDialogNew.h | 2 +- WellLogUI/include/griddataadapter.h | 6 +- WellLogUI/src/WellLogTableDialogNew.cpp | 220 ++-- WellLogUI/src/griddataadapter.cpp | 435 ++++---- logPlus/mainwindow.cpp | 21 +- logPlus/mainwindow.h | 1 + logPlus/mainwindowcurve.cpp | 11 +- logPlus/qtprojectwidgets.cpp | 14 +- logPlus/qtprojectwidgets.h | 3 + 44 files changed, 7677 insertions(+), 519 deletions(-) create mode 100644 DataMgr/src/AngleAdjTool.cpp create mode 100644 DataMgr/src/AngleAdjTool.h create mode 100644 DataMgr/src/CurveComputePage.cpp create mode 100644 DataMgr/src/CurveComputePage.h create mode 100644 DataMgr/src/CurveComputePage.ui create mode 100644 DataMgr/src/CurveComputerDlg.cpp create mode 100644 DataMgr/src/CurveComputerDlg.h create mode 100644 DataMgr/src/CurvePropertyEdit.cpp create mode 100644 DataMgr/src/CurvePropertyEdit.h create mode 100644 DataMgr/src/DrawCurveView.cpp create mode 100644 DataMgr/src/DrawCurveView.h create mode 100644 DataMgr/src/DrawWaveView.cpp create mode 100644 DataMgr/src/DrawWaveView.h create mode 100644 DataMgr/src/GeneratedFiles/SmoothTool.cpp create mode 100644 DataMgr/src/GeneratedFiles/SmoothTool.h create mode 100644 DataMgr/src/GeneratedFiles/editEnd.cpp create mode 100644 DataMgr/src/GeneratedFiles/editEnd.h create mode 100644 DataMgr/src/ShowCurve.cpp create mode 100644 DataMgr/src/ShowCurve.h create mode 100644 DataMgr/src/ShowWave.cpp create mode 100644 DataMgr/src/ShowWave.h create mode 100644 DataMgr/src/Statistics2Dlg.cpp create mode 100644 DataMgr/src/Statistics2Dlg.h create mode 100644 DataMgr/src/StatisticsDlg.cpp create mode 100644 DataMgr/src/StatisticsDlg.h create mode 100644 DataMgr/src/deptlineedit.cpp create mode 100644 DataMgr/src/deptlineedit.h create mode 100644 DataMgr/src/view.cpp create mode 100644 DataMgr/src/view.h create mode 100644 OSGDataModel/include/ObjWelllogWavefile.h create mode 100644 OSGDataModel/src/ObjWellLogWavefile.cpp diff --git a/CallManage/CallManage.h b/CallManage/CallManage.h index 01dced1..c120516 100644 --- a/CallManage/CallManage.h +++ b/CallManage/CallManage.h @@ -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 diff --git a/DataMgr/src/AngleAdjTool.cpp b/DataMgr/src/AngleAdjTool.cpp new file mode 100644 index 0000000..2b3e2b9 --- /dev/null +++ b/DataMgr/src/AngleAdjTool.cpp @@ -0,0 +1,232 @@ +#include "AngleAdjTool.h" +#include "ui_AngleAdjTool.h" +#include "math.h" +#include +#include + +#define PI 3.1415926 + +AngleAdjTool::AngleAdjTool(QWidget *parent) : + QDialog(parent), + Ang_UI(new Ui::AngleAdjTool) +{ + Ang_UI->setupUi(this); + setWindowFlags(windowFlags()& ~Qt::WindowMaximizeButtonHint); + setFixedSize(this->width(), this->height()); + this->setWindowFlags(this->windowFlags() |Qt::Dialog); + this->setWindowModality(Qt::ApplicationModal); + + connect(Ang_UI->okButton, SIGNAL(clicked()), this, SLOT(accept())); + connect(Ang_UI->cancelButton, SIGNAL(clicked()), this, SLOT(reject())); + connect(Ang_UI->cancelButton, SIGNAL(clicked()), this, SLOT(cancelAngle_SLOT())); + + maxSlider = 50; + minSlider = -50; + Ang_UI->headSlider->setMinimum(minSlider); + Ang_UI->headSlider->setMaximum(maxSlider); + Ang_UI->headSlider->setSingleStep(1); + Ang_UI->tailSlider->setMinimum(minSlider); + Ang_UI->tailSlider->setMaximum(maxSlider); + Ang_UI->tailSlider->setSingleStep(1); + Ang_UI->head_spinBox->setRange(minSlider, maxSlider); + Ang_UI->tail_spinBox->setRange(minSlider, maxSlider); + Ang_UI->head_spinBox->setValue(0); + Ang_UI->tail_spinBox->setValue(0); + connect(Ang_UI->head_spinBox, SIGNAL(valueChanged(int)), Ang_UI->headSlider, SLOT(setValue(int))); + //connect(Ang_UI->headSlider, SIGNAL(valueChanged(int)), Ang_UI->head_spinBox, SLOT(setValue(int))); + connect(Ang_UI->tail_spinBox, SIGNAL(valueChanged(int)), Ang_UI->tailSlider, SLOT(setValue(int))); + connect(Ang_UI->tailSlider, SIGNAL(valueChanged(int)), Ang_UI->tail_spinBox, SLOT(setValue(int))); + connect(Ang_UI->headSlider, SIGNAL(valueChanged(int)), this, SLOT(headAdd(int))); + connect(Ang_UI->tailSlider, SIGNAL(valueChanged(int)), this, SLOT(tailAdd(int))); + connect(Ang_UI->headSlider, SIGNAL(valueChanged(int)), this, SLOT(headLinkTail_SLOT(int))); + connect(Ang_UI->headSlider, SIGNAL(valueChanged(int)), this, SLOT(calcuAngle())); + connect(Ang_UI->tailSlider, SIGNAL(valueChanged(int)), this, SLOT(calcuAngle())); + + scene = new QGraphicsScene; + lineItem = new QGraphicsLineItem(0,0, 0,110); + initGraph(); + scene->addItem(lineItem); + Ang_UI->graphicsView->setScene(scene); + + connect(Ang_UI->head_lineEdit, SIGNAL(textChanged(QString)),this,SLOT(sdepChange_SLOT())); + connect(Ang_UI->tail_lineEdit, SIGNAL(textChanged(QString)),this,SLOT(edepChange_SLOT())); + +} + +AngleAdjTool::~AngleAdjTool() +{ + delete Ang_UI; + delete scene; + //delete lineItem; +} + +void AngleAdjTool::depCheck() +{ + if(Sdep < realSdep){Sdep = realSdep;Ang_UI->head_lineEdit->setText(QString("%1").arg(Sdep));} + if(edep > realEdep){edep = realEdep;Ang_UI->tail_lineEdit->setText(QString("%1").arg(edep));} + if(edep < Sdep)edep = Sdep; + +} + +void AngleAdjTool::setAngDep(float rsd, float red, float sd, float ed) +{ + realSdep = rsd; + realEdep = red; + Sdep = sd; + edep = ed; + + depCheck(); + Ang_UI->head_lineEdit->setText(QString("%1").arg(Sdep)); + Ang_UI->tail_lineEdit->setText(QString("%1").arg(edep)); + + Ang_UI->head_lineEdit->setValidator(new QIntValidator(-99999,99999,this)); + Ang_UI->tail_lineEdit->setValidator(new QIntValidator(-99999,99999,this)); +} + +void AngleAdjTool::setLineEditable() +{ + setHeadTailValue(0,0); + Ang_UI->head_lineEdit->setEnabled(true); + Ang_UI->tail_lineEdit->setEnabled(true); +} +void AngleAdjTool::setHeadTailValue(int head, int tail) +{ + Ang_UI->head_spinBox->setValue(head); + Ang_UI->tail_spinBox->setValue(tail); +} + +void AngleAdjTool::setEachSetValue(float value) +{ + eachSetValue = value; +} + +void AngleAdjTool::calcuAngle() +{ + QString t = Ang_UI->head_lineEdit->text(); + float headsValue = t.toFloat(); + t = Ang_UI->tail_lineEdit->text(); + float tailsValue = t.toFloat(); + + float headOffset = Ang_UI->head_spinBox->value() / 10.0; + float tailOffset = Ang_UI->tail_spinBox->value() / 10.0; + + float x = tailsValue - headsValue; + float y = tailOffset - headOffset; + float angle = atan2(y, x)*180/PI; + + Ang_UI->Angle_lineEdit->setText(QString("%1").arg(angle)); + + emit sendAngleData(headsValue, tailsValue, headOffset, tailOffset, angle); +} + +void AngleAdjTool::setSliderRange(int value) +{ + maxSlider = value / 2 * 10; + minSlider = -1 * (value / 2 * 10); + Ang_UI->headSlider->setMinimum(minSlider); + Ang_UI->headSlider->setMaximum(maxSlider); + + Ang_UI->tailSlider->setMinimum(minSlider); + Ang_UI->tailSlider->setMaximum(maxSlider); + + Ang_UI->head_spinBox->setRange(minSlider, maxSlider); + Ang_UI->tail_spinBox->setRange(minSlider, maxSlider); +} + +void AngleAdjTool::cancelAngle_SLOT() +{ + emit cancelAngle(); +} + +void AngleAdjTool::headLinkTail_SLOT(int changeValue) +{ + Ang_UI->head_lineEdit->setEnabled(false); + Ang_UI->tail_lineEdit->setEnabled(false); + int value = changeValue - Ang_UI->head_spinBox->value(); + Ang_UI->head_spinBox->setValue(changeValue); + int tailSpinValue = Ang_UI->tail_spinBox->value(); + int tailSpinValue_2 = tailSpinValue + value; + Ang_UI->tail_spinBox->setValue(tailSpinValue_2); +} + +bool AngleAdjTool::calcuCurAve(float m_value[], int N) +{ + if(N / 2 < 2) return false; + + float headSum, tailSum; + headSum = 0; + //tailSum = 0; + for(int i = 0; i < N; i++) + headSum += m_value[i]; + headAve = headSum / N; + /* + for(int i = N/2; i < N; i++) + tailSum += m_value[i]; + tailAve = tailSum / (N - (N/2)); + */ + + QString t = Ang_UI->head_lineEdit->text(); + float headsValue = t.toFloat(); + t = Ang_UI->tail_lineEdit->text(); + float tailsValue = t.toFloat(); + + float x = (tailsValue - headsValue) / 2; + float y = headAve - m_value[0]; + float angle = atan2(y, x)*180/PI; + + Ang_UI->aveAngle_lineEdit->setText(QString("%1").arg(angle)); + + QPainter paint; + paint.begin(Ang_UI->graphicsView); + paint.setBrush(Qt::black); + paint.drawRect(rect()); + + float xSet = 110 * cos(angle*PI/180.0f); + float ySet = xSet * tan(angle*PI/180.0f); + lineItem->setLine(0, 0, ySet, xSet); + lineItem->setPen(QPen(Qt::blue)); + Ang_UI->graphicsView->show(); + + return true; +} + +void AngleAdjTool::initGraph() +{ + QGraphicsLineItem *lineItems[19]; + + int angle = -90; + for(int i = 0; i < 19; i++){ + lineItems[i] = new QGraphicsLineItem(0,0,0,0); + float xSet = 130 * cos((angle + i*10) * PI / 180.0f); + float ySet = xSet * tan((angle + i*10) * PI / 180.0f); + lineItems[i]->setLine(0, 0, ySet, xSet); + lineItems[i]->setPen(QPen(Qt::lightGray)); + scene->addItem(lineItems[i]); + } +} + +void AngleAdjTool::tailAdd(int v) +{ + Ang_UI->head_lineEdit->setEnabled(false); + Ang_UI->tail_lineEdit->setEnabled(false); + float addchange = v/10 * eachSetValue; + Ang_UI->lineEdit_2->setText(QString("%1").arg(addchange)); +} +void AngleAdjTool::headAdd(int v) +{ + float addchange = v/10 * eachSetValue; + Ang_UI->lineEdit->setText(QString("%1").arg(addchange)); +} + +void AngleAdjTool::sdepChange_SLOT() +{ + QString t = Ang_UI->head_lineEdit->text(); + Sdep = t.toFloat(); + depCheck(); +} +void AngleAdjTool::edepChange_SLOT() +{ + QString t = Ang_UI->tail_lineEdit->text(); + edep = t.toFloat(); + depCheck(); +} \ No newline at end of file diff --git a/DataMgr/src/AngleAdjTool.h b/DataMgr/src/AngleAdjTool.h new file mode 100644 index 0000000..46dbecd --- /dev/null +++ b/DataMgr/src/AngleAdjTool.h @@ -0,0 +1,52 @@ +#ifndef ANGLEADJTOOL_H +#define ANGLEADJTOOL_H + +#include +#include +#include + +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 \ No newline at end of file diff --git a/DataMgr/src/CurveComputePage.cpp b/DataMgr/src/CurveComputePage.cpp new file mode 100644 index 0000000..c32a767 --- /dev/null +++ b/DataMgr/src/CurveComputePage.cpp @@ -0,0 +1,294 @@ +#include "CurveComputePage.h" +#include "ui_CurveComputePage.h" +#include "DataHelper.h" +#include +// #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;j0) + { + 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;iGetObjectType(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;iGetCurveInfo(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; klineEditeDep->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; klineeditsDep->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; iCloseCurve(index[i]); + } + mrw->CloseCurve(indexout); + + for(int j=0;jGetFileMessage(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; + } +} diff --git a/DataMgr/src/CurveComputePage.h b/DataMgr/src/CurveComputePage.h new file mode 100644 index 0000000..8870061 --- /dev/null +++ b/DataMgr/src/CurveComputePage.h @@ -0,0 +1,31 @@ +#ifndef CURVECOMPUTEPAGE_H +#define CURVECOMPUTEPAGE_H + +#include +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 diff --git a/DataMgr/src/CurveComputePage.ui b/DataMgr/src/CurveComputePage.ui new file mode 100644 index 0000000..42daa21 --- /dev/null +++ b/DataMgr/src/CurveComputePage.ui @@ -0,0 +1,182 @@ + + + CurveComputePage + + + + 0 + 0 + 602 + 500 + + + + + 0 + 500 + + + + Form + + + + + + + + + + 开始深度 + + + + + + + + + + 终止深度 + + + + + + + + + + + + + + 计算公式 + + + + + + + + + + + + Qt::Vertical + + + + 20 + 18 + + + + + + + + 常用数学运算符: + 加:+,减:-,乘:*,除:/,取余:%,乘方:^,对数:! + 如:PAR =SP/CAL+RT^2.5-10!AC + 10!表示取以10为底的对数,1! 表示取自然对数 + + + + + Qt::PlainText + + + false + + + + + + + + 600 + 0 + + + + 规则及约定: + 1、输入对象必须是常规曲线名、深度标识或常量 + 如:GR=2*GR+5;GR2=45;TEMP=18+0.038*"DEPTH + 其中:"DEPTH"表示深度; + 2、当输出曲线不存在时: + 如果有输入曲线存在,程序自动根据第一条输入曲线的属性产生输出曲线; + 否则,程序自动产生一条浮点类型的输出曲线,采样间隔为0.125。 + + + + + + + Qt::Vertical + + + + 20 + 18 + + + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + 确定 + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + + + diff --git a/DataMgr/src/CurveComputerDlg.cpp b/DataMgr/src/CurveComputerDlg.cpp new file mode 100644 index 0000000..7a496b0 --- /dev/null +++ b/DataMgr/src/CurveComputerDlg.cpp @@ -0,0 +1,361 @@ +#pragma warning(push,0) +// #include "Family.h" +#include +#include +#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;itableWidget->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;j0) + { + 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;mtableWidget->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;iFindObjectIndex(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;mtableWidget->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;jFindObjectIndex(name); + int index[20],indexout=-1; + float MinRlev=9999; + DWORD CurveSample[20]; + float CurveRlev[20]; + Slf_CURVE info; + for(int i=0;iOpenCurve(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;iGetCurveInfo(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; kReadCurve(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; kWriteCurve(indexout,sdep,sample,&outdata[0]); + delete []tDep; + + for (int i=0; iCloseCurve(index[i]); + } + mrw->CloseCurve(indexout); + + for(int j=0;jlineEdit_Sdep->text(); + QString edep=m_pUI->lineEdit_Edep->text(); + if(sdep>edep) sdep=edep; + for(int i=0;itableWidget->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 NameType;//输入曲线名类型 + int noi=fun.GetExpress(m_Function); + QString m_FunctionR=m_Function.right(m_Function.length()-m_Function.indexOf('=')-1); + for (int i=0; itableWidget->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; jtableWidget->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;itableWidget->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(MaxdepCloseCurve(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 diff --git a/DataMgr/src/CurveComputerDlg.h b/DataMgr/src/CurveComputerDlg.h new file mode 100644 index 0000000..2da16a3 --- /dev/null +++ b/DataMgr/src/CurveComputerDlg.h @@ -0,0 +1,45 @@ + +#pragma warning(push,0) +#include +#include +#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; diff --git a/DataMgr/src/CurvePropertyEdit.cpp b/DataMgr/src/CurvePropertyEdit.cpp new file mode 100644 index 0000000..494e33d --- /dev/null +++ b/DataMgr/src/CurvePropertyEdit.cpp @@ -0,0 +1,365 @@ +#pragma warning(push,0) +// #include "Family.h" +#include +#include +#include +// #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("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;iPropertyTab->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("lineEdit_CurveName"); + QLineEdit *lineEdit_CurveName_2=tab1->findChild("lineEdit_CurveName_2"); + QLineEdit *lineEdit_CurveUnit=tab1->findChild("lineEdit_CurveUnit"); + QLineEdit *lineEdit_CurveUnit_2=tab1->findChild("lineEdit_CurveUnit_2"); + QLineEdit *lineEdit_DepthUnit=tab1->findChild("lineEdit_DepthUnit"); + QLineEdit *lineEdit_DepthUnit_2=tab1->findChild("lineEdit_DepthUnit_2"); + QLineEdit *lineEdit_Sdep=tab1->findChild("lineEdit_Sdep"); + QLineEdit *lineEdit_Edep=tab1->findChild("lineEdit_Edep"); + QLineEdit *lineEdit_Rlev=tab1->findChild("lineEdit_Rlev"); + QLineEdit *lineEdit_DataType=tab1->findChild("lineEdit_DataType"); + QLineEdit *lineEdit_Min=tab1->findChild("lineEdit_Min"); + QLineEdit *lineEdit_Max=tab1->findChild("lineEdit_Max"); + QLineEdit *lineEdit_DefVal=tab1->findChild("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("lineEdit_CurveName"); + QLineEdit *lineEdit_CurveName_2=tab1->findChild("lineEdit_CurveName_2"); + QLineEdit *lineEdit_CurveUnit=tab1->findChild("lineEdit_CurveUnit"); + QLineEdit *lineEdit_CurveUnit_2=tab1->findChild("lineEdit_CurveUnit_2"); + QLineEdit *lineEdit_DepthUnit=tab1->findChild("lineEdit_DepthUnit"); + QLineEdit *lineEdit_DepthUnit_2=tab1->findChild("lineEdit_DepthUnit_2"); + QLineEdit *lineEdit_Sdep=tab1->findChild("lineEdit_Sdep"); + QLineEdit *lineEdit_Edep=tab1->findChild("lineEdit_Edep"); + QLineEdit *lineEdit_Rlev=tab1->findChild("lineEdit_Rlev"); + QLineEdit *lineEdit_DataType=tab1->findChild("lineEdit_DataType"); + QLineEdit *lineEdit_Min=tab1->findChild("lineEdit_Min"); + QLineEdit *lineEdit_Max=tab1->findChild("lineEdit_Max"); + QLineEdit *lineEdit_DefVal=tab1->findChild("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("lineEdit2_Name"); + QLineEdit *lineEdit2_Name1=tab2->findChild("lineEdit2_Name1"); + QLineEdit *lineEdit2_Unit=tab2->findChild("lineEdit2_Unit"); + QLineEdit *lineEdit2_Unit1=tab2->findChild("lineEdit2_Unit1"); + QLineEdit *lineEdit2_Start=tab2->findChild("lineEdit2_Start"); + QLineEdit *lineEdit2_Rlev2=tab2->findChild("lineEdit2_Rlev2"); + QLineEdit *lineEdit2_ArrayNum=tab2->findChild("lineEdit2_ArrayNum"); + QLineEdit *lineEdit2_Sample=tab2->findChild("lineEdit2_Sample"); + QLineEdit *lineEdit2_SampleTotal=tab2->findChild("lineEdit2_SampleTotal"); + QComboBox *comboBox2_Type=tab2->findChild("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("lineEdit2_Sample"); + QLineEdit *lineEdit2_SampleTotal=tab2->findChild("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("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("lineEdit2_ArrayNum"); + QLineEdit *lineEdit2_SampleTotal=tab2->findChild("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("lineEdit2_Sample"); + lineEdit2_Sample->setText(QString::number(TotalSample/mArrayNum)); + } + else lineEdit2_ArrayNum->setText(QString::number(arrayNum)); +} +void CCurvePropertyEditDlg::slotSave() +{ + QLineEdit *lineEdit_CurveName=tab1->findChild("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("lineEdit_CurveName"); + QLineEdit *lineEdit_CurveName_2=tab1->findChild("lineEdit_CurveName_2"); + QLineEdit *lineEdit_CurveUnit=tab1->findChild("lineEdit_CurveUnit"); + QLineEdit *lineEdit_CurveUnit_2=tab1->findChild("lineEdit_CurveUnit_2"); + QLineEdit *lineEdit_DepthUnit=tab1->findChild("lineEdit_DepthUnit"); + QLineEdit *lineEdit_DepthUnit_2=tab1->findChild("lineEdit_DepthUnit_2"); + + QLineEdit *lineEdit_DefVal=tab1->findChild("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("lineEdit_CurveName"); + QLineEdit *lineEdit_CurveName_2=tab1->findChild("lineEdit_CurveName_2"); + QLineEdit *lineEdit_CurveUnit=tab1->findChild("lineEdit_CurveUnit"); + QLineEdit *lineEdit_CurveUnit_2=tab1->findChild("lineEdit_CurveUnit_2"); + QLineEdit *lineEdit_DepthUnit=tab1->findChild("lineEdit_DepthUnit"); + QLineEdit *lineEdit_DepthUnit_2=tab1->findChild("lineEdit_DepthUnit_2"); + + QLineEdit *lineEdit_DefVal=tab1->findChild("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("lineEdit2_Name"); + QLineEdit *lineEdit2_Name1=tab2->findChild("lineEdit2_Name1"); + QLineEdit *lineEdit2_Unit=tab2->findChild("lineEdit2_Unit"); + QLineEdit *lineEdit2_Unit1=tab2->findChild("lineEdit2_Unit1"); + QLineEdit *lineEdit2_Start=tab2->findChild("lineEdit2_Start"); + QLineEdit *lineEdit2_Rlev2=tab2->findChild("lineEdit2_Rlev2"); + QLineEdit *lineEdit2_ArrayNum=tab2->findChild("lineEdit2_ArrayNum"); + QLineEdit *lineEdit2_Sample=tab2->findChild("lineEdit2_Sample"); + QLineEdit *lineEdit2_SampleTotal=tab2->findChild("lineEdit2_SampleTotal"); + QComboBox *comboBox2_Type=tab2->findChild("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 diff --git a/DataMgr/src/CurvePropertyEdit.h b/DataMgr/src/CurvePropertyEdit.h new file mode 100644 index 0000000..bb339ed --- /dev/null +++ b/DataMgr/src/CurvePropertyEdit.h @@ -0,0 +1,50 @@ + +#pragma warning(push,0) +#include +#include +#include +#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; diff --git a/DataMgr/src/DataManagger.cpp b/DataMgr/src/DataManagger.cpp index 541c3b9..4de8f12 100644 --- a/DataMgr/src/DataManagger.cpp +++ b/DataMgr/src/DataManagger.cpp @@ -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 // #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("statView"); -// if(NULL == pDlg1 ) -// { -// pDlg1=new CStatisticsDlg(parent,0); -// pDlg1->setObjectName("statView"); -// } + CStatisticsDlg *pDlg1=parent->findChild("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("stat2View"); -// if(NULL == pDlg2 ) -// { -// pDlg2=new CStatistics2Dlg(parent,0); -// pDlg2->setObjectName("stat2View"); -// } + CStatistics2Dlg *pDlg2=parent->findChild("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("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("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("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("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("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("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) diff --git a/DataMgr/src/DataMgr.pro b/DataMgr/src/DataMgr.pro index 91b676e..d838ffa 100644 --- a/DataMgr/src/DataMgr.pro +++ b/DataMgr/src/DataMgr.pro @@ -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){ diff --git a/DataMgr/src/DrawCurveView.cpp b/DataMgr/src/DrawCurveView.cpp new file mode 100644 index 0000000..1d14da6 --- /dev/null +++ b/DataMgr/src/DrawCurveView.cpp @@ -0,0 +1,1205 @@ +#include "DrawCurveView.h" +#include +#include +#include +#include +#include +#include +#include +#include "ShowCurve.h" +#include "editEnd.h" +#include "SmoothTool.h" +#include "AngleAdjTool.h" +// #include "WellLogTableDialogNew.h" +#include "math.h" +const double PI = 3.14159265358979323846; +DrawCurveView::DrawCurveView(QWidget *parent) : + QWidget(parent), + isInit(false), + mouseDrawDepth(0), + mouseDrawValue(0), + tishiEditTime(0), + frontPos(QPoint(0,0)) +{ + press_noRelease_mode = false; + + m_values=NULL; + CurrentPos=0; + setMouseTracking(true); + pressPoint = -9999; + releasePoint = -9999; + pressEdit = -9999; + releaseEdit = -9999; + EditMode = false; + editLock = false; + ifContinue = false; + hasSelect = false; + sTool = new SmoothTool(); + angTool = new AngleAdjTool(); + msgBox2 = new editEnd(); + connect(msgBox2, SIGNAL(sendSmData(int)), this, SLOT(saveSmooth_SLOT(int))); + connect(msgBox2, SIGNAL(sendContinueSignal()), this, SLOT(continueEditNoSave_SLOT())); + connect(sTool, SIGNAL(sendDataSmoothSign(float,float,int,int,int)), this, SLOT(receiveSmoothData(float,float,int,int,int))); + connect(sTool, SIGNAL(cancelSmooth()), this, SLOT(cancelSmoothEdit())); + connect(sTool, SIGNAL(SaveSmooth()), this, SLOT(overEditSave())); + + connect(angTool, SIGNAL(sendAngleData(float,float,float,float,float)), this, SLOT(receiveAngleData(float,float,float,float,float))); + connect(angTool, SIGNAL(cancelAngle()), this, SLOT(cancelAngleEdit())); +} + +DrawCurveView::~DrawCurveView(){ + if(EditMode && editIndexNum!=0){ + delete []editIndex; + delete []editValue; + //delete []onceEditIndex; + } + delete sTool; + delete angTool; + delete msgBox2; +} + +void DrawCurveView::initCurveViewQMenu(){ + QMenu menu; + //添加菜单项,指定图标、名称、响应函数 + menu.addAction(QString("曲线绘制"),this,SLOT(editIfBegin_Slot())); + menu.addAction(QString("平滑处理"),this,SLOT(smoothWin_Slot())); + menu.addAction(QString("基线校正"),this,SLOT(AngAdjWin_SLOT())); + menu.exec(QCursor::pos()); +} +void DrawCurveView::initCurveEditQMenu(){ + QMenu menu; + //添加菜单项,指定图标、名称、响应函数 + menu.addAction(QString("完成编辑"),this,SLOT(finishEdit_SLOT())); + menu.exec(QCursor::pos()); +} + +int DrawCurveView::calMousePoint() +{ + return lastPos.y() / m_height * PageSize + 0.5 + CurrentPos; +} + +void DrawCurveView::mousePressEvent(QMouseEvent *event){ + lastPos = event->pos(); + + if(rlev == 0 || m_height == 0)return; + + int tempPoint = calMousePoint(); + + // 处于编辑状态 + if (event->buttons() & Qt::LeftButton && EditMode && !editLock) + { + //editStrValue = (tempPoint < pressEdit) ? pressEdit + 1 : tempPoint; + //editStrValue = (tempPoint > releaseEdit) ? releaseEdit : tempPoint; + if(tempPoint < pressEdit) + editStrValue = pressEdit; + else if(tempPoint > releaseEdit) + editStrValue = releaseEdit; + else + editStrValue = tempPoint; + + lastEditPos = editStrValue; + onceEditNum = 0; + + genEditLine(); + update(); + } + + if (event->buttons() & Qt::RightButton){ + if(!EditMode && tempPoint < releasePoint && tempPoint > pressPoint ) initCurveViewQMenu(); + + else if(EditMode/* && tempPointpressEdit*/) initCurveEditQMenu(); + + return; + } + + if(EditMode){ + if(tempPoint > releaseEdit || tempPoint < pressEdit) + emit editModeTips(); + return; + } + + if(pressPoint != -9999){ + if(pressPoint < tempPoint && tempPoint < releasePoint && !EditMode){ + editIfBegin(); + } + pressPoint = -9999; + + emit unableEditButtons(); + + update(); + return; + } + else{ + pressPoint = tempPoint; + + press_noRelease_mode = true; + press_noRelease_point = tempPoint; + + update(); + return; + } +} + +void DrawCurveView::mouseReleaseEvent(QMouseEvent *event){ + if (event->button() != Qt::LeftButton){ + return; + } + if(EditMode){ + editStrValue = -9999;; + onceEditNum = 0; + + return; + } + if(releasePoint != -9999 && hasSelect){ + releasePoint = -9999; + hasSelect = false; + update(); + return; + } + + if(rlev == 0 || m_height == 0)return; + + + if(press_noRelease_mode){ + //计算释放位置 + QPoint Pos = event->pos(); + float curSdep = CurrentPos*rlev + sdep; + float mouseDepth = Pos.y() * PageSize / m_height * rlev + curSdep; + if(mouseDepth > edep) mouseDepth = edep; + releasePoint = (mouseDepth - curSdep) / rlev + 0.5 + CurrentPos; + if(pressPoint > releasePoint){ + int temp = releasePoint; releasePoint = pressPoint; pressPoint = temp; + } + + if(releasePoint - pressPoint > 1){ + emit enableEditButtons(); + hasSelect = true; + } + else{ + emit R2L(); + releasePoint = -9999; + pressPoint = -9999; + } + + press_noRelease_mode = false; + } + + update(); +} + +void DrawCurveView::mouseMoveEvent(QMouseEvent *event){ + lastPos = event->pos(); + + if (event->buttons() & Qt::LeftButton && EditMode && !editLock) + genEditLine(); + + if(rlev == 0 || m_height == 0) return; + + + //更新鼠标位置曲线信息显示 + float mouseDepth, mouseValue; + ShowCurve* fParent= (ShowCurve *)(this->parent()->parent()); + float curSdep = CurrentPos * rlev + sdep; + mouseDepth = lastPos.y() * PageSize / m_height * rlev + curSdep; + int itemp = (mouseDepth-curSdep) / rlev + 0.5 + CurrentPos; + + //没有完成框选情况下,实时更新鼠标的可能释放位置 + if(press_noRelease_mode){ + press_noRelease_point = itemp; + if(press_noRelease_point < pressPoint){ + int t = pressPoint; + pressPoint = press_noRelease_point; + press_noRelease_point = t; + } + } + + + if(itemp >= m_count) mouseValue=-99999.; + else mouseValue= m_values[itemp]; + fParent->mouseMkChange(mouseDepth, mouseValue); + mouseDrawDepth = mouseDepth; + mouseDrawValue = mouseValue; + + + update(); + +} + +void DrawCurveView::wheelEvent(QWheelEvent *event) // 滚轮事件 +{ + if(event->delta() > 0){ + emit verticalSliderUP(); + }else{ + emit verticalSliderDOWN(); + } +} + +void DrawCurveView::usevalueDrawPoint(QPainter *painter){ + if(rlev == 0 || m_height == 0) return; + + /* + float mouseDepth, mouseValue; + + float curSdep = CurrentPos * rlev + sdep; + mouseDepth = lastPos.y() * PageSize / m_height * rlev + curSdep; + int itemp = (mouseDepth-curSdep) / rlev + 0.5; + if(itemp + CurrentPos >= m_count) + mouseValue = -99999.; + else + mouseValue = m_values[itemp + CurrentPos]; + */ + + //mouse position + float x = lastPos.x()/*(mouseValue-m_Xmin)/(m_Xmax-m_Xmin)*m_width*/; + float y = lastPos.y()/*(float)(m_height * itemp / PageSize)*/; + + int wTemp = 4; + float hTemp = 15; + float min_hTemp = 2; + float jTemp = 6; + float reduce_rate = 0.6; + int forceP_index = x / jTemp; + float guanRate = (lastPos.x() - frontPos.x()) / m_width; + + for(int i = 0; i < m_width / jTemp; i++) + { + float draw_reduce_rate = reduce_rate; + float draw_hTemp = hTemp; + //float guanRateTemp = guanRate; + + int cha = forceP_index - i; + //bool isGuanSide = (cha * guanRateTemp > 0) ? true : false; + cha = (cha < 0) ? -cha : cha; + //guanRateTemp = (guanRateTemp < 0) ? -guanRateTemp : guanRateTemp; + + for(int chaN = 0; chaN < cha; chaN++) + { + draw_reduce_rate /= 0.9; + if(draw_reduce_rate >= 1 || draw_reduce_rate < 0) break; + + draw_hTemp *= draw_reduce_rate; + if(draw_hTemp <= min_hTemp) + { + draw_hTemp = min_hTemp; + break; + } + } + painter->fillRect(jTemp * i - wTemp / 2, m_height - draw_hTemp, wTemp, hTemp, QColor(128, 128, 255, 128)); + } + + forceP_index = y / jTemp; + for(int i = 0; i < m_height / jTemp; i++) + { + float draw_reduce_rate = reduce_rate; + float draw_hTemp = hTemp; + + int cha = forceP_index - i; + cha = (cha < 0) ? -cha : cha; + + for(int chaN = 0; chaN < cha; chaN++) + { + draw_reduce_rate /= 0.9; + if(draw_reduce_rate >= 1 || draw_reduce_rate < 0) break; + + draw_hTemp *= draw_reduce_rate; + if(draw_hTemp <= min_hTemp) + { + draw_hTemp = min_hTemp; + break; + } + } + painter->fillRect(m_width - draw_hTemp, jTemp * i - wTemp / 2, hTemp, wTemp, QColor(128, 128, 255, 128)); + } + + frontPos = lastPos; + + //横轴数值显示 + QFont UVDP_fontGray2("Arial", 8, QFont::Bold, false); + UVDP_fontGray2.setBold(false); + painter->setFont(UVDP_fontGray2); + painter->setPen(Qt::blue); + painter->drawText(x, m_height - hTemp - 14, QString(" value")); + painter->drawText(x, m_height - hTemp + 2, QString(" %1").arg((m_Xmax - m_Xmin) / m_width * lastPos.x() + m_Xmin)); + //纵轴数值显示 + painter->drawText(m_width - hTemp - 45, y + 12, QString(" depth")); + painter->drawText(m_width - hTemp - 45, y + 28, QString(" ") + QString::number(mouseDrawDepth, 'f', 2)); + + /* + QFont UVDP_fontGray("Arial", 8, QFont::Bold, false); + UVDP_fontGray.setBold(false); + painter->setFont(UVDP_fontGray); + painter->setPen(Qt::gray); + painter->drawText(m_width - 60, y + 13, QString("%1").arg(mouseDrawValue)); + painter->drawText(m_width - 60, y - 5, QString("%1").arg(mouseDrawDepth)); + */ +} + +void DrawCurveView::drawMousePosLine(QPainter *painter){ + + QPen pen(Qt::gray, 2, Qt::DashLine, Qt::RoundCap, Qt::RoundJoin); + painter->setPen(pen); + + float w = width() - 65; + if(w < 0) w = 0; + + //绘制横向线 + //painter->drawLine(0, lastPos.y(), w, lastPos.y()); + //绘制纵向线 + //painter->drawLine(lastPos.x(), 0, lastPos.x(), height()); +} + +void DrawCurveView::button_AngAdjWin() +{ + if(!EditMode && releasePoint != -9999 && pressPoint != -9999 ) + AngAdjWin(); +} +void DrawCurveView::AngAdjWin_SLOT() +{ + AngAdjWin(); +} +void DrawCurveView::AngAdjWin(){ + angTool->setSliderRange(int(m_width)); + angTool->setAngDep(sdep,edep,pressPoint * rlev + sdep, releasePoint * rlev + sdep); + angTool->setEachSetValue(1 / m_width * (m_Xmax-m_Xmin)); + float *temp = new float[releasePoint - pressPoint + 1]; + for(int i = 0; i < releasePoint - pressPoint + 1; i++) + temp[i] = m_values[i+pressPoint]; + int maxN = (edep - sdep) / rlev; + int N = releasePoint - pressPoint + 1; + if(N>maxN) N = maxN; + angTool->calcuCurAve(temp, N); + angTool->setLineEditable(); + angTool->show(); +} + +void DrawCurveView::receiveAngleData(float sd, float ed, float headOffset, float tailOffset, float angle) +{ + if(!EditMode){ + whichMode = 2; + EditMode = true; + float curSdep = CurrentPos * rlev + sdep; + pressEdit = (sd - curSdep) / rlev + 0.5 + CurrentPos; + releaseEdit = (ed - curSdep) / rlev + 0.5 + CurrentPos; + pressPoint = -9999; + releasePoint = -9999; + hasSelect = false; + initEditPart(); + } + else{ + oriCur2Edit(); + editValue[releaseEdit - pressEdit] = m_values[releaseEdit]; + } + + float eachValue = (1 / m_width * (m_Xmax-m_Xmin)) * headOffset; + for(int i = 0; i < releaseEdit-pressEdit+1; i++){ + editValue[i] += eachValue; + + float offsetValue; + offsetValue = (i*rlev) * tan(angle*PI/180.0f); + editValue[i] += offsetValue; + + } + angTool->calcuCurAve(editValue, releaseEdit - pressEdit + 1); + + initeditIndex(); + update(); +} + +void DrawCurveView::cancelAngleEdit(){ + if(EditMode != true) return; + + for(int i = pressEdit; i < releaseEdit; i++) + editValue[i - pressEdit] = m_values[i]; + editValue[releaseEdit - pressEdit] = m_values[releaseEdit]; +} +void DrawCurveView::smoothWin() +{ + sTool->setSmoothDep(sdep,edep,pressPoint * rlev + sdep, releasePoint * rlev + sdep); + + sTool->setLineEditable(); + + sTool->show(); +} +void DrawCurveView::button_smoothWin() +{ + if(!EditMode && releasePoint != -9999 && pressPoint != -9999 ) + smoothWin(); +} +void DrawCurveView::smoothWin_Slot() +{ + smoothWin(); +} + +void linearSmooth3( float in[], float out[], int N, float rate[], int count){ + float *temp = new float[N]; + for(int j = 0; j < N; j++) + temp[j] = in[j]; + + for(int c = 0; c < count; c++){ + int i; + if ( N < 3 ){ + for ( i = 0; i <= N - 1; i++ ) + out[i] = temp[i]; + } + else{ + out[0] = ( 5.0 * temp[0] + 2.0 * temp[1] - temp[2] ) / 6.0; + for ( i = 1; i <= N - 2; i++ ) + out[i] = ( rate[0] * temp[i - 1] + rate[1] * temp[i] + rate[2] * temp[i + 1] ) / 3.0; + out[N - 1] = ( 5.0 * temp[N - 1] + 2.0 * temp[N - 2] - temp[N - 3] ) / 6.0; + } + for(int j = 0; j < N; j++) + temp[j] = out[j]; + } + delete []temp; +} +void linearSmooth5( float in[], float out[], int N, float rate[], int count ){ + float *temp = new float[N]; + for(int j = 0; j < N; j++) + temp[j] = in[j]; + + for(int c = 0; c < count; c++){ + int i; + if (N <= 5) + for ( i = 0; i < N; i++ ) out[i] = temp[i]; + else{ + float tmpY = (3.0 * temp[0] + 2.0 * temp[1] + temp[2] - temp[4]) / 5.0; + out[0] = tmpY; + tmpY = (4.0 * temp[0] + 3.0 * temp[1] + 2 * temp[2] + temp[3]) / 10.0; + out[1] = tmpY; + for (int i = 2; i <= N - 3; i++){ + tmpY = (rate[0] * temp[i - 2] + rate[1] * temp[i - 1] + rate[2] *temp[i] + rate[3] *temp[i + 1] + rate[4] * temp[i + 2]) / 5.0; + out[i] = tmpY; + } + tmpY = (4.0 * temp[N - 1] + 3.0 * temp[N - 2] + 2 * temp[N - 3] + temp[N - 4]) / 10.0; + out[N - 2] = tmpY; + tmpY = (3.0 * temp[N - 1] + 2.0 * temp[N - 2] + temp[N - 3] - temp[N - 5]) / 5.0; + out[N - 1] = tmpY; + } + for(int j = 0; j < N; j++) + temp[j] = out[j]; + } + + delete []temp; +} +void linearSmooth7( float in[], float out[], int N, float rate[], int count ){ + float *temp = new float[N]; + for(int j = 0; j < N; j++) + temp[j] = in[j]; + float tmpY; + for(int c = 0; c < count; c++){ + int i; + if (N <= 7) + for ( i = 0; i < N; i++ ) out[i] = temp[i]; + else{ + out[0] = temp[0]; + out[1] = temp[1]; + out[2] = temp[2]; + for (int i = 3; i <= N - 4; i++){ + tmpY = (rate[0] * temp[i-3] + rate[1] * temp[i-2] + rate[2] *temp[i-1] + rate[3] *temp[i] + rate[4] * temp[i+1] + rate[5] * temp[i+2] + rate[6] * temp[i+3]) / 7.0; + out[i] = tmpY; + } + out[N - 3] = temp[N - 3]; + out[N - 2] = temp[N - 2]; + out[N - 1] = temp[N - 1]; + } + for(int j = 0; j < N; j++) + temp[j] = out[j]; + } + + delete []temp; +} + +void DrawCurveView::receiveSmoothData(float sd, float ed, int mode, int cal, int count){ + if(!EditMode){ + whichMode = 2; + EditMode = true; + float curSdep = CurrentPos * rlev + sdep; + pressEdit = (sd - curSdep) / rlev + 0.5 + CurrentPos; + releaseEdit = (ed - curSdep) / rlev + 0.5 + CurrentPos; + pressPoint = -9999; + releasePoint = -9999; + hasSelect = false; + + initEditPart(); + } + else{ + oriCur2Edit(); + editValue[releaseEdit - pressEdit] = m_values[releaseEdit]; + } + + float rate[7]; + if(cal == 0) + for(int i = 0; i < 7; i++) + rate[i] = 1; + else if(cal == 2){ + if(mode == 0){rate[0] = 0.5;rate[1] = 2;rate[2] = 0.5;} + else if(mode == 1){rate[0] = 0.4;rate[1] = 0.85;rate[2] = 2.5;rate[3] = 0.85;rate[4] = 0.4;} + else if(mode == 2){rate[0] = 0.25;rate[1] = 0.5;rate[2] = 1;rate[3] = 3.5;rate[4] = 1;rate[5] = 0.5;rate[6] = 0.25;} + } + else if(cal == 3){ + if(mode == 0){rate[0] = 1.25;rate[1] = 0.5;rate[2] = 1.25;} + else if(mode == 1){rate[0] = 1.3;rate[1] = 0.9;rate[2] = 0.6;rate[3] = 0.9;rate[4] = 1.3;} + else if(mode == 2){rate[0] = 1.75;rate[1] = 0.9;rate[2] = 0.6;rate[3] = 0.5;rate[4] = 0.6;rate[5] = 0.9;rate[6] = 1.75;} + } + + switch(mode){ + case 0: + linearSmooth3(editValue, editValue, releaseEdit - pressEdit + 1, rate, count); + break; + case 1: + linearSmooth5(editValue, editValue, releaseEdit - pressEdit + 1, rate, count); + break; + case 2: + linearSmooth7(editValue, editValue, releaseEdit - pressEdit + 1, rate, count); + break; + } + + initeditIndex(); + + update(); +} + +void DrawCurveView::cancelSmoothEdit(){ + if(EditMode != true) return; + + for(int i = pressEdit; i < releaseEdit; i++) + editValue[i - pressEdit] = m_values[i]; + editValue[releaseEdit - pressEdit] = m_values[releaseEdit]; +} +void DrawCurveView::button_editIfBegin(){ + if(!EditMode && releasePoint != -9999 && pressPoint != -9999 ) + editIfBegin(); +} +void DrawCurveView::editIfBegin_Slot(){ + editIfBegin(); +} + +void DrawCurveView::editIfBegin(){ + whichMode = 2; + + EditMode = true; + pressEdit = pressPoint; + releaseEdit = releasePoint; + releasePoint = -9999; + hasSelect = false; + pressPoint = -9999; + initEditPart(); +} + +void DrawCurveView::initeditIndex(){ + for(int i = 0; i < releaseEdit - pressEdit; i++) + editIndex[i] = pressEdit + i; + + editIndexNum = releaseEdit - pressEdit; + + curEdit = releaseEdit-1; +} + +void DrawCurveView::initEditPart(){ + //eg. 2~5 + editValue = new float[releaseEdit - pressEdit + 1]; //4 + oriCur2Edit(); + + curEdit = pressEdit; + + editIndexNum = 1; + editIndex = new int[releaseEdit - pressEdit + 1]; //4 + editIndex[0] = pressEdit; //[0] == 2 + editIndex[releaseEdit - pressEdit] = releaseEdit; //[3]==5 + initeditIndex(); + + //onceEditIndex = new int[releaseEdit - pressEdit + 1]; + + //backup + tempPEdit = pressEdit; + tempREdit = releaseEdit; + + + emit unableEditButtons(); +} + +void DrawCurveView::oriCur2Edit(){ + for(int i = pressEdit; i < releaseEdit + 1; i++) + editValue[i - pressEdit] = m_values[i]; +} + +void DrawCurveView::sortEdit(){ + for(int i = 1; i < editIndexNum-1; i++) + if(editIndex[i] > editIndex[i+1]){ + int tempIndex2 = editIndex[i+1]; + editIndex[i+1] = editIndex[i]; + editIndex[i] = tempIndex2; + } +} + +void DrawCurveView::changeEditStrValue(int itemp){ + int a = editStrValue - itemp; + int b = lastEditPos - itemp; + if(a * b < 0){ + editStrValue = lastEditPos; + onceEditNum = 0; + } +} + +bool DrawCurveView::isIneditRange(int i){ + if(i < 0 || i >= releaseEdit - pressEdit + 1) + return false; + else + return true; +} + +void DrawCurveView::genEditLine(){ + if(!EditMode)return; + if(curEdit == -9999 || releaseEdit == -9999) return; + + int itemp = lastPos.y() * PageSize / m_height + 0.5 + CurrentPos;//当前深度下标 + float ivalue = lastPos.x() / m_width * (m_Xmax - m_Xmin) + m_Xmin; //计算曲线值 + + + if(itemp < pressEdit && itemp > releaseEdit){ + tempCurEdit = curEdit; + curEdit = releaseEdit; + return; + } + + //修正当前绘制朝向 + //changeEditStrValue(itemp); + + //修改头尾下标 + int headP, tailP = 0; + if(editStrValue < itemp){ headP = editStrValue; tailP = itemp;} + else{ headP = itemp; tailP = editStrValue;} + + //赋予新值 + if(!isIneditRange(itemp - pressEdit)) return; + editValue[itemp - pressEdit] = ivalue; + + //单位差 + if(!isIneditRange(headP - pressEdit) || !isIneditRange(tailP - pressEdit)) return; + float oneIndexAdd = (tailP == headP) ? (0) : (editValue[tailP - pressEdit] - editValue[headP - pressEdit]) / (tailP - headP); + + for(int i = 0; i < tailP - headP; i++){ + editValue[headP - pressEdit + i] = editValue[headP - pressEdit] + (i * oneIndexAdd); + } + + /* + int spIndex = -9999; + int eqIndex = -9999; + + for(int i = 0; i < releaseEdit - pressEdit + 1; i++) + { + + //寻找更改位置 + if(itemp < editIndex[i] && eqIndex == -9999 && spIndex == -9999) + spIndex = i; + else if(itemp == editIndex[i] && eqIndex == -9999 && spIndex == -9999) + eqIndex = i; + + bool inThis = false; + for(int j = 0; j < onceEditNum; j++) + if(editIndex[i] == onceEditIndex[j]){ + inThis = true; + break; + } + + if(headP < editIndex[i] && editIndex[i] < tailP && !inThis){ + for(int j = i; j < editIndexNum-1; j++) + editIndex[j] = editIndex[j+1]; + editIndexNum--; + } + else if(editIndex[i] > tailP) break; + } + + + //放置更改 + if(spIndex != -9999){ + for(int j = editIndexNum; j >= spIndex; j--) + editIndex[j+1] = editIndex[j]; + editIndex[spIndex] = itemp; + editIndexNum++; + editValue[itemp - pressEdit] = ivalue; + } + else if(eqIndex != -9999) + editValue[itemp - pressEdit] = ivalue; + + //_ASSERTE( _CrtCheckMemory( ) ); + + //跟新本次修改index集 + int ifi = 0; + for(ifi; ifi < onceEditNum; ifi++) + if(itemp == onceEditIndex[ifi]) break; + if(ifi == onceEditNum) + onceEditIndex[onceEditNum++] = itemp; + */ + + editStrValue = itemp; + + //sortEdit(); +} + +void DrawCurveView::finishEdit_SLOT() +{ + tempCurEdit = curEdit; + curEdit = releaseEdit; + overEdit(); +} + +void DrawCurveView::drawEditLine(QPainter *painter){ + if(!EditMode || pressEdit == -9999 || releaseEdit == -9999)return; + + if(releaseEdit <= CurrentPos || pressEdit >= (PageSize + CurrentPos)) + return; + + int inNum = 0;//画布上的edit点计数 + QPointF *points = new QPointF[PageSize + 1/*editIndexNum + 10*/]; + + int startPoint = (pressEdit < CurrentPos) ? CurrentPos : pressEdit; + int endPoint = (releaseEdit > (PageSize + CurrentPos)) ? (PageSize + CurrentPos) : releaseEdit; + + for(int i = startPoint; i < (endPoint + 1); i++){ + if(!isIneditRange(i - pressEdit)) continue; + points[inNum++] = coordCurvePoint(i - CurrentPos, editValue[i - pressEdit]); + } + + /* + //获取画布范围内的edit点集合 + int i = 0; + for(i; i < editIndexNum; i++){ + if(editIndex[i] < CurrentPos || editIndex[i] > CurrentPos+PageSize) continue; + points[inNum] = coordCurvePoint(editIndex[i] - CurrentPos, editValue[editIndex[i] - pressEdit]); + + if(points[inNum].x() < 0) + points[inNum].setX(0); + + inNum++; + } + + + if(whichMode == 2 && editIndex[i-1] < releaseEdit - 1){ + for(int j = editIndex[i-1]+1; j < releaseEdit; j++){ + points[inNum] = coordCurvePoint(j - CurrentPos, editValue[j - pressEdit]); + if(points[inNum].x() < 0) points[inNum].setX(0); + inNum++; + if(inNum >= editIndexNum + 10)break; + } + } + */ + + + //红色虚线绘笔 + + QPen pen(Qt::red, 1, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin); + painter->setPen(pen); + + painter->drawPolyline(points, inNum); + delete []points; + + /* + if(curEdit >= releaseEdit && !editLock) + overEdit(); + */ +} + +void DrawCurveView::saveSmooth_SLOT(int mode) +{ + float rate[5] = {1,1,1,1,1}; + switch(mode){ + case 1: + linearSmooth3(tempEditValue, editValue, tempREdit - tempPEdit + 1, rate, 1); + break; + case 2: + linearSmooth5(tempEditValue, editValue, tempREdit - tempPEdit + 1, rate, 1); + break; + case 3: + for(int i = 0; i < tempREdit - tempPEdit + 1; i++) + editValue[i] = tempEditValue[i]; + } + update(); +} + +void DrawCurveView::overEdit(){ + if(!EditMode) return; + editLock = true; + bool re = saveEdit(1); + EditMode = false; + if(!re)return; + + curEdit = -9999; + pressPoint = -9999; + releasePoint = -9999; + pressEdit = -9999; + releaseEdit = -9999; + editIndexNum = 0; + + delete []editValue; + delete []editIndex; + //delete []onceEditIndex; + editLock = false; + ifContinue = false; + hasSelect = false; +} +void DrawCurveView::overEditSave(){ + if(!EditMode) return; + editLock = true; + bool re = saveEdit(3); + EditMode = false; + if(!re)return; + + curEdit = -9999; + pressPoint = -9999; + releasePoint = -9999; + pressEdit = -9999; + releaseEdit = -9999; + editIndexNum = 0; + + delete []editValue; + delete []editIndex; + //delete []onceEditIndex; + editLock = false; + ifContinue = false; + hasSelect = false; +} + +void DrawCurveView::continueEditNoSave_SLOT() +{ + ifContinue = true; +} + +bool DrawCurveView::saveEdit(int smooth){ + if(whichMode == 1){ + editIndex[editIndexNum++] = editIndex[tempREdit - tempPEdit]; + + float sValue,eValue,x; + int j=1; + for(int i=1; iOpen(fileName.toStdString().c_str(),CSlfIO::modeWrite); + int aindex=logio->OpenCurve(curveName.toStdString().c_str()); + if(aindex>=0)logio->WriteCurve(aindex, tempPEdit * rlev + sdep, tempREdit - tempPEdit + 1, &m_values[tempPEdit]); + logio->CloseCurve(aindex); + delete logio; + + QMessageBox::information(NULL, "", "保存完成!"); + return true; + } + int result = msgBox2->exec(); + + if(result == QDialog::Accepted){ + + smooth = msgBox2->SmoothResult(); + + float *tempValueList = new float[tempREdit - tempPEdit + 1]; + float rate[5] = {1,1,1,1,1}; + switch(smooth){ + case 1: + linearSmooth3(tempEditValue, tempValueList, tempREdit - tempPEdit + 1, rate, 1); + break; + case 2: + linearSmooth5(tempEditValue, tempValueList, tempREdit - tempPEdit + 1, rate, 1); + break; + } + + + if(smooth == 3){ + for(int i = 0; i < (tempREdit - tempPEdit + 1); i++) + m_values[tempPEdit+i] = tempEditValue[i]/*editValue[i]*/; + } + else{ + for(int i = 0; i < (tempREdit - tempPEdit + 1); i++) + m_values[tempPEdit+i] = tempValueList[i]/*editValue[i]*/; + } + + delete []tempValueList; + delete []tempEditValue; + update(); + + CLogIO *logio=new CLogIO(); + logio->Open(fileName.toStdString().c_str(),CSlfIO::modeWrite); + int aindex=logio->OpenCurve(curveName.toStdString().c_str()); + if(aindex>=0)logio->WriteCurve(aindex, tempPEdit * rlev + sdep, tempREdit - tempPEdit + 1, &m_values[tempPEdit]); + logio->CloseCurve(aindex); + delete logio; + + QMessageBox::information(NULL, "", "保存完成!"); + return true; + } + else{ + if(ifContinue){ + ifContinue = false; + for(int i = 0; i < tempREdit - tempPEdit + 1; i++) + editValue[i] = tempEditValue[i]; + delete []tempEditValue; + initeditIndex(); + editLock = false; + update(); + return false; + } + else{ + delete []tempEditValue; + return true; + } + } + +} + +void DrawCurveView::drawEditTishi(QPainter *painter) +{ + QFont UVDP_fontGray("Arial", tishiEditTime / 10, QFont::Bold, false); + UVDP_fontGray.setBold(false); + painter->setFont(UVDP_fontGray); + painter->setPen(Qt::gray); + + painter->drawText(tishiEdit, QString("编辑中")); + + tishiEditTime--; +} + +void DrawCurveView::paintEvent(QPaintEvent *evt) +{ + if(m_count <= 0) return; + + 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(1); + 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); + + // pen.setWidth(2); + pen.setColor(Qt::darkGray); + paint.setPen(pen); + + drawDataPoints(&paint); + usevalueDrawPoint(&paint); + drawMousePosLine(&paint); + + if(EditMode){ + drawEditLine(&paint); + + //if(tishiEditTime > 0) + // drawEditTishi(&paint); + } + + paint.restore(); + paint.end(); +} +void DrawCurveView::initView() +{ + /*int width=this->width(); + int height=this->height(); + rthy=QRect(0,0,width,height); + rthy1=QRect(0,0,width,30); + rthyt=QRect(0+2,30,width-4,height-30);*/ + m_width=this->width(); + m_height=this->height(); + + +} +void DrawCurveView::drawCoord(QPainter *painter) +{ + + if(!isInit ) + { + return; + } +} + +//计算参数在当前画布上的坐标 +QPointF DrawCurveView::coordCurvePoint(int iy,float value) +{ + float x = (value - m_Xmin) / (m_Xmax - m_Xmin) * m_width; + + float y = (float)(m_height * iy / PageSize); + + return QPoint(x,y); +} + +void DrawCurveView::setValues(float *values) +{ + if(NULL != m_values) + { + m_values=NULL; + } + m_values=values; +} + +void DrawCurveView::setCount(int count) +{ + m_count=count; +} + +void DrawCurveView::drawDataPoints(QPainter *painter) +{ + bool ifDrawEdit = false;//是否需要绘制编辑区域(蓝色) + bool ifEditMode = false;//是否有选中曲线 + + if(press_noRelease_mode) ifDrawEdit = true; + + if(pressPoint != -9999 && releasePoint != -9999){ + ifEditMode = true; + ifDrawEdit = true; + if(releasePoint <= CurrentPos || pressPoint >= (PageSize + CurrentPos)) ifDrawEdit = false; + //if(CurrentPos <= pressPoint && pressPoint < (PageSize + CurrentPos)) ifDrawEdit = true; + //if(CurrentPos < releasePoint && releasePoint <= (PageSize + CurrentPos)) ifDrawEdit = true; + } + + if(pressEdit != -9999 && releaseEdit != -9999){ + ifEditMode = true; + ifDrawEdit = true; + if(releaseEdit <= CurrentPos || pressEdit >= (PageSize + CurrentPos)) ifDrawEdit = false; + //if(CurrentPos <= pressEdit && pressEdit < (PageSize + CurrentPos)) ifDrawEdit = true; + //if(CurrentPos < releaseEdit && releaseEdit <= (PageSize + CurrentPos)) ifDrawEdit = true; + } + + //绘制常规曲线 + float value=0; + + //获得当前页point + QPolygonF polygon; + QPointF *points = new QPointF[PageSize]; + for(int i = 0; i < PageSize; i++) + { + value = (i + CurrentPos >= m_count) ? -9999999. : m_values[i + CurrentPos]; + + //获取该点在画布上的位置 + points[i] = coordCurvePoint(i, value); + + if(points[i].x() < 0) + points[i].setX(0); + + polygon< CurrentPos + PageSize) bPoint = CurrentPos + PageSize; //编辑区域下界在画布下方 + else bPoint = press_noRelease_point; + } + else if(!EditMode){ + if(pressPoint < CurrentPos) fPoint = CurrentPos; //编辑区域上界在画布上方 + else fPoint = pressPoint; + + if(releasePoint > CurrentPos + PageSize) bPoint = CurrentPos + PageSize - 1; //编辑区域下界在画布下方 + else bPoint = releasePoint; + } + else{ + if(pressEdit < CurrentPos) fPoint = CurrentPos; + else fPoint = pressEdit; + if(releaseEdit > CurrentPos + PageSize) bPoint = CurrentPos+PageSize-1; + else bPoint = releaseEdit; + } + + painter->setPen(Qt::gray); + painter->drawPolyline(points, fPoint - CurrentPos); + + + //添加编辑区域背景色 + painter->setBrush(QColor(0xDD, 0xDD, 0xDD)); + painter->drawRect( 0, + points[fPoint - CurrentPos].y(), + width(), + points[bPoint - CurrentPos].y() - points[fPoint - CurrentPos].y() + ); + + //绘制编辑区域的蓝色线段 + QPen pen(Qt::blue, 1, Qt::DashLine, Qt::RoundCap, Qt::RoundJoin); + painter->setPen(pen); + painter->drawPolyline(&points[fPoint - CurrentPos], (bPoint - fPoint)); + + //绘制剩余的灰色线段 + QPen pen1(Qt::gray, 1, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin); + painter->setPen(pen1); + painter->drawPolyline(&points[bPoint - CurrentPos], PageSize - (bPoint - CurrentPos)); + } + else{ + if(ifEditMode || EditMode) + painter->setPen(Qt::gray); + else + painter->setPen(Qt::darkBlue); + painter->drawPolyline(points, PageSize); + } + delete []points; + + + //绘制联动红点 + if(rlev == 0)return; + float curSdep = CurrentPos * rlev + sdep; + float curEdep = (CurrentPos + PageSize-1) * rlev + sdep; + if(curEdep > edep) curEdep = edep; + if(curSdep > edep) curSdep = edep; + if(userCurrentPos > curSdep && userCurrentPos < curEdep) + { + int itemp = (userCurrentPos - curSdep) / rlev + 0.5; + + if(itemp + CurrentPos >= m_count) value=-9999999.; + else + { + value = m_values[itemp + CurrentPos]; + userPos = itemp; + } + float x = (value - m_Xmin) / (m_Xmax - m_Xmin) * m_width; + float y = (float)(m_height * itemp / PageSize); + + QPen pen(Qt::red, 8, Qt::DashDotLine, Qt::RoundCap, Qt::RoundJoin); + pen.setCapStyle(Qt::RoundCap); + painter->setPen(pen); + painter->drawPoint(x, y); + userCurrentValue = value; + + ShowCurve* fParent= (ShowCurve *)(this->parent()->parent()); + fParent->lineEdit_curValue_Change(value); + } + +} diff --git a/DataMgr/src/DrawCurveView.h b/DataMgr/src/DrawCurveView.h new file mode 100644 index 0000000..e50288d --- /dev/null +++ b/DataMgr/src/DrawCurveView.h @@ -0,0 +1,155 @@ +#ifndef DRAWCURVEVIEW_H +#define DRAWCURVEVIEW_H + +#include +#include +#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 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 diff --git a/DataMgr/src/DrawWaveView.cpp b/DataMgr/src/DrawWaveView.cpp new file mode 100644 index 0000000..4439cd0 --- /dev/null +++ b/DataMgr/src/DrawWaveView.cpp @@ -0,0 +1,208 @@ +#include "DrawWaveView.h" +#include +#include +#include +#include + +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 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< 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 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<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;idrawText(points[i],QString::number(value)); + polygon<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); + } \ No newline at end of file diff --git a/DataMgr/src/DrawWaveView.h b/DataMgr/src/DrawWaveView.h new file mode 100644 index 0000000..2cbab99 --- /dev/null +++ b/DataMgr/src/DrawWaveView.h @@ -0,0 +1,70 @@ +#ifndef DRAWWAVEVIEW_H +#define DRAWWAVEVIEW_H + +#include +#include +//水平线条数 +#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 diff --git a/DataMgr/src/GeneratedFiles/SmoothTool.cpp b/DataMgr/src/GeneratedFiles/SmoothTool.cpp new file mode 100644 index 0000000..8ed9db3 --- /dev/null +++ b/DataMgr/src/GeneratedFiles/SmoothTool.cpp @@ -0,0 +1,169 @@ +#include "SmoothTool.h" +#include "ui_SmoothTool.h" +#include "qstring.h" +#include + +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(); +} \ No newline at end of file diff --git a/DataMgr/src/GeneratedFiles/SmoothTool.h b/DataMgr/src/GeneratedFiles/SmoothTool.h new file mode 100644 index 0000000..a995440 --- /dev/null +++ b/DataMgr/src/GeneratedFiles/SmoothTool.h @@ -0,0 +1,52 @@ +#ifndef SMOOTHTOOL_H +#define SMOOTHTOOL_H + +#include + +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 \ No newline at end of file diff --git a/DataMgr/src/GeneratedFiles/editEnd.cpp b/DataMgr/src/GeneratedFiles/editEnd.cpp new file mode 100644 index 0000000..6b84165 --- /dev/null +++ b/DataMgr/src/GeneratedFiles/editEnd.cpp @@ -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); +} diff --git a/DataMgr/src/GeneratedFiles/editEnd.h b/DataMgr/src/GeneratedFiles/editEnd.h new file mode 100644 index 0000000..5863e0c --- /dev/null +++ b/DataMgr/src/GeneratedFiles/editEnd.h @@ -0,0 +1,32 @@ +#ifndef EDITEND_H +#define EDITEND_H + +#include + +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 \ No newline at end of file diff --git a/DataMgr/src/ShowCurve.cpp b/DataMgr/src/ShowCurve.cpp new file mode 100644 index 0000000..4427f62 --- /dev/null +++ b/DataMgr/src/ShowCurve.cpp @@ -0,0 +1,549 @@ +#include "ShowCurve.h" +#include "ui_ShowCurve.h" +//#include "DrawAPicture.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#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;ival[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:"<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())); + } +} diff --git a/DataMgr/src/ShowCurve.h b/DataMgr/src/ShowCurve.h new file mode 100644 index 0000000..d44be54 --- /dev/null +++ b/DataMgr/src/ShowCurve.h @@ -0,0 +1,91 @@ +#ifndef WIDGET_H1 +#define WIDGET_H1 + +#include +#include +#include +#include +#include +#include +#include +#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 diff --git a/DataMgr/src/ShowWave.cpp b/DataMgr/src/ShowWave.cpp new file mode 100644 index 0000000..77ba630 --- /dev/null +++ b/DataMgr/src/ShowWave.cpp @@ -0,0 +1,276 @@ +#include "ShowWave.h" +#include "ui_ShowWave.h" +#include +#include +#include +#include +#include +#include +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()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()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()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:"<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;ival[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; +} + diff --git a/DataMgr/src/ShowWave.h b/DataMgr/src/ShowWave.h new file mode 100644 index 0000000..062ef37 --- /dev/null +++ b/DataMgr/src/ShowWave.h @@ -0,0 +1,56 @@ +#ifndef WIDGET_H +#define WIDGET_H + +#include +#include +#include +#include +#include +#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 diff --git a/DataMgr/src/Statistics2Dlg.cpp b/DataMgr/src/Statistics2Dlg.cpp new file mode 100644 index 0000000..90d1efc --- /dev/null +++ b/DataMgr/src/Statistics2Dlg.cpp @@ -0,0 +1,482 @@ +#pragma warning(push,0) +// #include "Family.h" +#include +#include +#include +#include + +#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(sdepm_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(stimem_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;ival[pos]){min=val[pos];depmin=d_min+i*rlev;timemin=j*info.TimeLevel+m_flStTime;} + if(maxInvalidNum)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=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(maxpointlineEditSdep->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(sdepm_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 diff --git a/DataMgr/src/Statistics2Dlg.h b/DataMgr/src/Statistics2Dlg.h new file mode 100644 index 0000000..e794f85 --- /dev/null +++ b/DataMgr/src/Statistics2Dlg.h @@ -0,0 +1,93 @@ + +#pragma warning(push,0) +#include +#include +#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; diff --git a/DataMgr/src/StatisticsDlg.cpp b/DataMgr/src/StatisticsDlg.cpp new file mode 100644 index 0000000..4de770e --- /dev/null +++ b/DataMgr/src/StatisticsDlg.cpp @@ -0,0 +1,411 @@ +#pragma warning(push,0) +// #include "Family.h" +#include +#include +#include +#include +#include + +#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(sdepm_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;ival[i]){min=val[i];depmin=d_min+i*rlev;} + if(maxInvalidNum)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=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(maxpointd_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 diff --git a/DataMgr/src/StatisticsDlg.h b/DataMgr/src/StatisticsDlg.h new file mode 100644 index 0000000..c079270 --- /dev/null +++ b/DataMgr/src/StatisticsDlg.h @@ -0,0 +1,87 @@ + +#pragma warning(push,0) +#include +#include +#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; diff --git a/DataMgr/src/deptlineedit.cpp b/DataMgr/src/deptlineedit.cpp new file mode 100644 index 0000000..596ec3a --- /dev/null +++ b/DataMgr/src/deptlineedit.cpp @@ -0,0 +1,69 @@ +#include "deptlineedit.h" +#include +#include +#include +#include +#include +#include +#include +#include + +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); + + +} diff --git a/DataMgr/src/deptlineedit.h b/DataMgr/src/deptlineedit.h new file mode 100644 index 0000000..e049759 --- /dev/null +++ b/DataMgr/src/deptlineedit.h @@ -0,0 +1,37 @@ +#ifndef DEPTLINEEDIT_H +#define DEPTLINEEDIT_H + +#include +#include +#include +#include +#include +#include +#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 diff --git a/DataMgr/src/view.cpp b/DataMgr/src/view.cpp new file mode 100644 index 0000000..1492b38 --- /dev/null +++ b/DataMgr/src/view.cpp @@ -0,0 +1,108 @@ +#include "view.h" +#include + +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=m_Xmax2||right<=m_Xmin2)paint.setBrush(Qt::green); + //if(iiend)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(); + +} diff --git a/DataMgr/src/view.h b/DataMgr/src/view.h new file mode 100644 index 0000000..5e287e4 --- /dev/null +++ b/DataMgr/src/view.h @@ -0,0 +1,31 @@ +#ifndef VIEW_H +#define VIEW_H + +#include +#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 diff --git a/OSGDataModel/include/ObjWelllogWavefile.h b/OSGDataModel/include/ObjWelllogWavefile.h new file mode 100644 index 0000000..9c76c42 --- /dev/null +++ b/OSGDataModel/include/ObjWelllogWavefile.h @@ -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 +// #include "ObjectEvent.h" +#include "BaseObject.h" +#include "ObjWelllog.h" +#include "MemRdWt.h" +#include +#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 valMin,valMax; + QSharedMemory m_GainSharedMemory; + QSharedMemory m_TimeSharedMemory; +}; + +using namespace pai::datamodel; +using namespace pai::ios::welllog; + +END_OSGDATAMODEL_NAMESPACE +#endif diff --git a/OSGDataModel/src/OSGDataModel.pro b/OSGDataModel/src/OSGDataModel.pro index bd13193..5639c6f 100644 --- a/OSGDataModel/src/OSGDataModel.pro +++ b/OSGDataModel/src/OSGDataModel.pro @@ -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) diff --git a/OSGDataModel/src/ObjWellLogWavefile.cpp b/OSGDataModel/src/ObjWellLogWavefile.cpp new file mode 100644 index 0000000..7774386 --- /dev/null +++ b/OSGDataModel/src/ObjWellLogWavefile.cpp @@ -0,0 +1,1181 @@ +#pragma warning( push ,0) +#include +#include +#include "ObjWelllogWavefile.h" +#include "ObjWell.h" +#pragma warning( pop ) + +BEGIN_OSGDATAMODEL_NAMESPACE; + +CObjWellLogWavefile::CObjWellLogWavefile() +{ + m_ArrayNum=1; + isRun=false; + // SetIconName("icon/Logs.png"); + isCorrDepth=0; + isCorrA1ZM=0; + isLoad=false; +} + +CObjWellLogWavefile::~CObjWellLogWavefile() +{ + +} +QUuid CObjWellLogWavefile::GetTypeID()const +{ + return GetClassID_WellLogWavefile(); +} + +void CObjWellLogWavefile::SetData(int i,int j,float *buffer) +{ + int pos=i*waveinfo.TimeSamples+j; + CObjWellLog::SetData(pos,buffer); +} +double CObjWellLogWavefile::GetData(int i,int j,char *buffer) +{ + float yy=-9999; + if(m_vProperty.size()>i) { + int pos=(int)(i*waveinfo.TimeSamples+j); + yy=CObjWellLog::GetData(acurveinfo.RepCode,(char *)&((char *)m_vProperty.m_vProperty)[pos*acurveinfo.CodeLen],acurveinfo.CodeLen); + } + return yy; +} +void CObjWellLogWavefile::SetData(float dep,int j,float *buffer) +{ + if(dep>=waveinfo.StartDepth&&dep<=waveinfo.EndDepth) { + int i=(dep-waveinfo.StartDepth)/waveinfo.DepLevel+0.5; + SetData(i,j,buffer); + } +} +double CObjWellLogWavefile::GetData(float dep,int j,char *buffer) +{ + if(dep>=waveinfo.StartDepth&&dep<=waveinfo.EndDepth) { + int i=(dep-waveinfo.StartDepth)/waveinfo.DepLevel+0.5; + double yy=GetData(i,j,buffer); + return yy; + } + else { + if(waveinfo.RepCode==REPR_STRING&&buffer) buffer[0]=0; + return -9999; + } +} +QString CObjWellLogWavefile::GetDescription() +{ + if(!isRun) + { + CLogIO *logio=new CLogIO(); + QString slfFileName=GetSlfFileName(); + if(slfFileName.isEmpty()) return ""; + if(!logio->Open(slfFileName.toStdString().c_str(),CSlfIO::modeRead)) + { + delete logio; + return ""; + } + QString name=GetName(); + int i=logio->OpenWave(name.toStdString().c_str()); + if(i<0) { + delete logio; + return ""; + } + logio->GetWaveInfo(i,&waveinfo); + logio->CloseWave(i); + delete logio; + } + if(waveinfo.RepCode<1) waveinfo.RepCode=1; + if(waveinfo.RepCode>12) waveinfo.RepCode=12; + QString result=""; + char buf[1000]; + sprintf(buf,"对象类型:波列\n\ + 曲线名:%s\n\ + 曲线别名:%s\n\ + 曲线单位:%s\n\ + 单位别名:%s\n\ + 数据类型:%s\n\ + 字节长度:%d\n\ + 最小值:%g\n\ + 最大值:%g\n\ + 起始深度:%g\n\ + 终止深度:%g\n\ + 采样间隔:%g\n\ + 深度单位:%s\n\ + 缺省值:%g\n\ + 阵列数:%d\n\ + 起始时间:%g\n\ + 时间采样间隔:%g\n\ + 阵列采样样本点数:%d\n\ + 时间单位:%s\n\ + 阵列名称:%s\n", + waveinfo.Name, + waveinfo.AliasName, + waveinfo.Unit,//曲线单位%s, + waveinfo.AliasUnit,//单位别名%s, + Rep_STR[waveinfo.RepCode-1],//, + waveinfo.CodeLen,//, + waveinfo.MinValue,//最小值%g, + waveinfo.MaxValue,//最大值%g, + waveinfo.StartDepth,//起始深度%g, + waveinfo.EndDepth,//终止深度%g, + waveinfo.DepLevel,////采样间隔%g, + waveinfo.DepthUnit,//深度单位%g, + waveinfo.DefVal,//缺省值%g, + waveinfo.ArrayNum,//阵列数%d, + waveinfo.StartTime,//起始时间%g, + waveinfo.TimeLevel,//时间间隔%g, + waveinfo.TimeSamples,//阵列采样样本点数%d, + waveinfo.TimeUnit,//时间单位%s, + waveinfo.TimeName);//阵列名称%s + + result.append(buf); + return result; +} +bool CObjWellLogWavefile::SaveToSLF() +{ + if(m_ArrayNum<2) { + // bool m=HasModified(); + // if(!m) return false; + int samplenum=m_vProperty.size(); + if(!m_vMD.size()) return false; + if(samplenum<=0) return false; + if(m_SlfFileName=="") return true; + CLogIO * logio=new CLogIO(); + if(!logio->Open(m_SlfFileName.toStdString().c_str(),CSlfIO::modeRead)) + { + delete logio; + //AppendConsole(pai::log::PAI_ERROR,"SLF文件打开失败,请检查!"); + return false; + } + + int curveindex=logio->OpenWave(GetName().toStdString().c_str()); + if(curveindex<0) + { + delete logio; + return false; + } + if(samplenum)logio->WriteWave(curveindex,m_vMD.m_vProperty[0],samplenum,(void*)(&m_vProperty.m_vProperty[0])); + delete logio; + // //qDebug()< BSplineFit(QVector discretePoints, bool closed, double stride = 0.01) +{ + QVector fittingPoints; + for (int i = 0; i < (closed ? discretePoints.size() : discretePoints.size() - 1); i++) + { + QPointF xy[4]; + xy[0] = (discretePoints[i] + 4 * discretePoints[(i + 1) % discretePoints.size()] + discretePoints[(i + 2) % discretePoints.size()]) / 6; + xy[1] = -(discretePoints[i] - discretePoints[(i + 2) % discretePoints.size()]) / 2; + xy[2] = (discretePoints[i] - 2 * discretePoints[(i + 1) % discretePoints.size()] + discretePoints[(i + 2) % discretePoints.size()]) / 2; + xy[3] = -(discretePoints[i] - 3 * discretePoints[(i + 1) % discretePoints.size()] + 3 * discretePoints[(i + 2) % discretePoints.size()] - discretePoints[(i + 3) % discretePoints.size()]) / 6; + for (double t = 0; t <= 1; t += stride) + { + QPointF totalPoints = QPointF(0, 0); + for (int j = 0; j < 4; j++) { + totalPoints += xy[j] * pow(t, j); + } + fittingPoints.push_back(totalPoints); + } + } + return fittingPoints; +} +//从slf加载数据 +bool CObjWellLogWavefile::LoadFromSLF() +{ + struct IN_OUT_MESSAGE + { + int nPad;//极板数// + int nPadZ;//极板子极板数据 + int nSample;//每个极板元素(电扣)个数// + int Width; + int shift0; + char Name[40][64]; + char A1PZ[64]; + }; + + struct IN_OUT_MESSAGE msa[7]={ + //STAR 1 + { + 6,1,24,360,0, + {"C_P1BTN","C_P2BTN","C_P3BTN","C_P4BTN","C_P5BTN","C_P6BTN"}, + "P1AZ_STAR" + }, + //CBIL 2 + { + 2,1,250,360,0, + {"C_BHTA","C_BHTT"}, + "P1AZ_CBIL" + }, + //EMI 3 + { + 6,1,25,360,0, + {"C_PAD1","C_PAD2","C_PAD3","C_PAD4","C_PAD5","C_PAD6"}, + "P1AZ_EMI" + }, + //XRMI 4 + { + 6,1,25,360,0, + {"C_XPAD1","C_XPAD2","C_XPAD3","C_XPAD4","C_XPAD5","C_XPAD6"}, + "P1AZ_XRMI" + }, + //FMI 5 + { + 16,4,12,360,12, + {"C_FCA1","C_FCA2","C_FCA3","C_FCA4","C_FCB1","C_FCB2","C_FCB3","C_FCB4","C_FCC1","C_FCC2","C_FCC3","C_FCC4","C_FCD1","C_FCD2","C_FCD3","C_FCD4"}, + "C_P1AZ" + }, + //FMS 6 + { + 4,1,16,360,12, + {"C_PAD1","C_PAD2","C_PAD3","C_PAD4"}, + "P1AZ_FMS" + }, + //EIWD KSZ 7 + { + 1,1,128,360,0, + {"C_RTW"} + } + }; + if(m_SlfFileName=="") { + isLoad=false; + if(!key.isEmpty()&&IsMappingMem(key.toStdString().c_str())) { + CloseView(m_Handle,m_SharedMemory); + m_SharedMemory=NULL; + m_Handle=NULL; + key=""; + } + return true; + } + if(isLoad) return true; + + char tem[100]; + QString name=GetName(); + + strcpy(tem,name.toStdString().c_str()); + int fir=-1; + struct IN_OUT_MESSAGE *pMsa=NULL; + if(m_ArrayNum>1) { + for(int i=0;i<7;i++) { + for(int j=0;j=0) break; + } + if(fir<0) { + QStringList msa1=GetSimilarCurves(name); + if(msa1.size()>7) { + pMsa=new struct IN_OUT_MESSAGE; + fir=msa1[0].toInt();//image type + pMsa->nPad=msa1[1].toInt();//极板数// + pMsa->nPadZ=msa1[2].toInt();//极板子极板数据 + pMsa->nSample=msa1[3].toInt();//每个极板元素(电扣)个数// + pMsa->Width=msa1[4].toInt(); + pMsa->shift0=msa1[5].toInt(); + for(int i=0;inPad;i++) { + if(msa1.size()>6+i) strcpy(pMsa->Name[i],msa1[6+i].toStdString().c_str()); + } + if(msa1.size()>6+pMsa->nPad)strcpy(pMsa->A1PZ,msa1[6+pMsa->nPad].toStdString().c_str()); + } + } + } + if(fir<1) m_ArrayNum=1; + name=m_SlfFileName+GetName(); + if(m_ArrayNum>1) { + name+="Array"; + } + if(!key.isEmpty()&&name!=key&&IsMappingMem(key.toStdString().c_str())) + { + CloseView(m_Handle,m_SharedMemory); + m_SharedMemory=NULL; + m_Handle=NULL; + key=""; + } + + if(IsMappingMem(name.toStdString().c_str())) + { + // GetObjectEvent().OnDeAttchData(m_SlfFileName,GetName()); + } + m_SharedMemory=NULL; + m_Handle=NULL; + + name=GetName(); + + CLogIO * logio=new CLogIO(); + if(!logio->Open(m_SlfFileName.toStdString().c_str(),CSlfIO::modeRead)) + { + delete logio; + m_vMD.SetSize(0); + m_vMD.m_vProperty=0; + m_vProperty.SetSize(0); + m_vProperty.m_vProperty=NULL; + return false; + } + int curveindex=logio->OpenWave(name.toStdString().c_str()); + if(curveindex<0) + { + m_vMD.SetSize(0); + m_vMD.m_vProperty=0; + m_vProperty.SetSize(0); + m_vProperty.m_vProperty=NULL; + delete logio; + return false; + } + m_ObjectType=WAVE_OBJECT; + logio->GetWaveInfo(curveindex,&waveinfo); + Slf_WAVE BWAVEINFO=waveinfo; + if(m_ArrayNum>1) { + if(waveinfo.RepCode==REPR_CHAR) waveinfo.RepCode=REPR_UCHAR; + } + acurveinfo.RepCode=waveinfo.RepCode; + acurveinfo.CodeLen=waveinfo.CodeLen; + acurveinfo.DepLevel=waveinfo.DepLevel; + acurveinfo.StartDepth=waveinfo.StartDepth; + acurveinfo.EndDepth=waveinfo.EndDepth; + isRun=true; + + int samplenum=(waveinfo.EndDepth-waveinfo.StartDepth)/waveinfo.DepLevel+1.5; + name=m_SlfFileName+GetName(); + if(m_ArrayNum>1) { + name+="Array"; + } + key=name; + int nbpp=waveinfo.SamplePoint; + int mlen=0; + int myWidth=0; + int chlen=0; + int nPadZ=0; + int myWidth1=waveinfo.SamplePoint; + int shift0=0; + if(m_ArrayNum>1) { + shift0=pMsa->shift0; + nPadZ=pMsa->nPadZ; + myWidth=pMsa->Width; + nbpp=pMsa->nSample; + m_ArrayNum=pMsa->nPad; + mlen=myWidth-m_ArrayNum*nbpp;//总盲区宽度 + mlen/=m_ArrayNum; + if(mlen%2!=0) mlen+=1; + if(nPadZ<4) chlen=mlen/8; + else chlen=mlen/4; + if(chlen%2!=0) chlen+=1; + if(chlen==0) chlen=2; + // mlen=mlen-chlen; + mlen=m_ArrayNum*chlen/nPadZ; + if(mlen%2!=0) mlen++; + if(mlen>20) mlen=20; + if(chlen<4) chlen=4; + // chlen=(myWidth-(mlen*m_ArrayNum+nbpp*m_ArrayNum))/nPadZ; + int klen=pMsa->nPadZ*waveinfo.SamplePoint+mlen+pMsa->nPadZ*chlen; + myWidth1=klen*pMsa->nPad/pMsa->nPadZ; + } + else myWidth=waveinfo.SamplePoint; + int nlen=waveinfo.CodeLen*waveinfo.SamplePoint; + int reclen=waveinfo.CodeLen*myWidth*waveinfo.ArrayNum; + MappingMem(&m_Handle,(LPSTR*)&m_SharedMemory,3*sizeof(float)+sizeof(int)+reclen*(samplenum+1),key.toStdString().c_str()); + if(!m_Handle||!m_SharedMemory) { + CloseView(m_Handle,m_SharedMemory); + m_SharedMemory=NULL; + m_Handle=NULL; + m_vMD.SetSize(0); + m_vMD.m_vProperty=0; + m_vProperty.SetSize(0); + m_vProperty.m_vProperty=NULL; + return false; + } + float *buffer=(float*)m_SharedMemory; + buffer[0]=waveinfo.StartDepth; + buffer[1]=waveinfo.EndDepth; + buffer[2]=waveinfo.DepLevel; + ((int *)buffer)[3]=samplenum; + char *pchar=(char *)&buffer[4]; + double laa=(double)reclen*(double)samplenum/waveinfo.CodeLen; + int num=reclen*samplenum/waveinfo.CodeLen; + float defval=-9999; + if(waveinfo.RepCode==REPR_CHAR||waveinfo.RepCode==REPR_UCHAR) defval=0; + else if(waveinfo.RepCode==REPR_SHORT||waveinfo.RepCode==REPR_USHORT) defval=0xffff; + + for(int i=0;i1) //多极板曲线合并为一个图像数据 + { + int klen=pMsa->nPadZ*waveinfo.SamplePoint+mlen+pMsa->nPadZ*chlen; + myWidth1=klen*pMsa->nPad/pMsa->nPadZ; + int xl=0; + int xladd=0; + for(int n=0;nOpenWave(pMsa->Name[n]); + Slf_WAVE tWaveinfo; + char *bu=NULL; + if(curveindex>-1) { + logio->GetWaveInfo(curveindex,&tWaveinfo); + bu=new char[samplenum*tWaveinfo.ArrayNum*tWaveinfo.SamplePoint*tWaveinfo.CodeLen]; + logio->ReadWave(curveindex,waveinfo.StartDepth,samplenum,(void *)bu); + if(tWaveinfo.CodeLen!=waveinfo.CodeLen) {//数据类型不同,转换一致 + char *bu1=new char[samplenum*nlen]; + for(int i=0;i-1;m--) + { + pos=k1*m+0.5; + memmove(data1,&pchar[j*reclen+pos*waveinfo.CodeLen],(myWidth1-pos+n)*waveinfo.CodeLen); + memmove(&pchar[j*reclen+(pos+1)*waveinfo.CodeLen],data1,(myWidth1-pos+n++)*waveinfo.CodeLen); + } + /* + QVector va; + for(int t=0;tGetData(waveinfo.RepCode,&pchar[j*reclen],&vall); + va.append(QPointF(vall,t)); + } + QVector BSplineFit(); + */ + } + delete data1; + } + } + else logio->ReadWave(curveindex,waveinfo.StartDepth,samplenum,(void *)pchar); + if(isCorrA1ZM) + { + char *pP1AZ=NULL; + int iP1AZ=-1; + Slf_CURVE aziminfo; + QString P1AZ="P1AZ"; + if(pMsa) { + iP1AZ=logio->FindObjectName((char *)pMsa->A1PZ); + } + if(iP1AZ<0) { + if(pMsa&&pMsa->A1PZ[0]) P1AZ=pMsa->A1PZ; + QStringList azims=GetSimilarCurves(P1AZ); + if(azims.size()<0) azims=GetSimilarCurves("P1AZ"); + + foreach(QString cname,azims) + { + iP1AZ=logio->FindObjectName((char *)cname.toStdString().c_str()); + if(iP1AZ>-1) { + P1AZ=cname; + iP1AZ=logio->OpenCurve((char *)P1AZ.toStdString().c_str()); + break; + } + } + } + if(iP1AZ>-1) { + logio->GetCurveInfo(iP1AZ,&aziminfo); + int samplenum1=(aziminfo.EndDepth-aziminfo.StartDepth)/aziminfo.DepLevel+1.5; + pP1AZ=new char[aziminfo.CodeLen*(samplenum1+1)]; + logio->ReadCurve(iP1AZ,aziminfo.StartDepth,samplenum1,(void *)pP1AZ); + logio->CloseCurve(iP1AZ); + if(aziminfo.DepLevel!=waveinfo.DepLevel||aziminfo.StartDepth!=waveinfo.StartDepth||aziminfo.EndDepth!=waveinfo.EndDepth) { + char *pP1AZ1=new char[aziminfo.CodeLen*(samplenum+1)]; + double val=0; + float dep=0,dep1=0,dep2=0; + int pos=0; + double val1=-9999,val2=-9999; + for(int i=0;i=samplenum1) { + val=-9999; + CObjWellLog::SetData(aziminfo.RepCode,(char *)&pP1AZ1[i*aziminfo.CodeLen],val); + continue; + } + dep1=aziminfo.StartDepth+pos*aziminfo.DepLevel; + val1=CObjWellLog::GetData(aziminfo.RepCode,(char *)&pP1AZ[pos*aziminfo.CodeLen],aziminfo.CodeLen); + if(pos>=samplenum1-1) { + CObjWellLog::SetData(aziminfo.RepCode,(char *)&pP1AZ1[i*aziminfo.CodeLen],val1); + continue; + } + dep2=aziminfo.StartDepth+(pos+1)*aziminfo.DepLevel; + val2=CObjWellLog::GetData(aziminfo.RepCode,(char *)&pP1AZ[(pos+1)*aziminfo.CodeLen],aziminfo.CodeLen); + if(val1==-9999||val2==-9999) { + val=-9999; + } + else val=(dep-dep1)/(dep2-dep1)*(val2-val1)+val1; + CObjWellLog::SetData(aziminfo.RepCode,(char *)&pP1AZ1[i*aziminfo.CodeLen],val); + } + delete pP1AZ; + pP1AZ=pP1AZ1; + } + } + if(pP1AZ){ + AzmiuthCorrect(pchar,samplenum,myWidth,pP1AZ,aziminfo,shift0); + } + if(pP1AZ)delete pP1AZ; + } + else { + if(m_ArrayNum>1) AzmiuthCorrect(pchar,samplenum,myWidth,NULL,*(Slf_CURVE *)&waveinfo,shift0); + } + m_vMD.SetSize(3); + m_vMD.m_vProperty=(float *)m_SharedMemory; + int size=((int *)m_SharedMemory)[3]; + m_vProperty.SetSize(size); + m_vProperty.m_vProperty=&m_vMD.m_vProperty[4]; + + if(m_vMD.size()>0){ + m_TopDepth=m_vMD.m_vProperty[0]; + m_BottomDepth=m_vMD.m_vProperty[1]; + m_Rlev=m_vMD.m_vProperty[2]; + } + m_ShiftTopDepth=-9999; + m_ShiftBottomDepth=-9999; + m_DepthOffset=0; + + if(m_ArrayNum>1) { + waveinfo.ArrayNum=pMsa->nPad/pMsa->nPadZ; + waveinfo.SamplePoint=myWidth/(waveinfo.ArrayNum); + waveinfo.TimeSamples=myWidth; + } + if(pMsa) { + delete pMsa; + pMsa=NULL; + } + float val=0; + valMin.clear(); + valMax.clear(); + valMin.resize((waveinfo.SamplePoint)*waveinfo.ArrayNum); + valMax.resize((waveinfo.SamplePoint)*waveinfo.ArrayNum); + for(int j=0;j<(waveinfo.SamplePoint)*waveinfo.ArrayNum;j++) { + valMin[j]=999999999; + valMax[j]=-99999999; + } + char buf[200]; + for(int i=0;ival)valMin[j]=val; + } + } + if(waveinfo.MaxValue==-50||waveinfo.MinValue==50||fabs(waveinfo.MaxValue)<1e-6||waveinfo.MinValue<1e-6||waveinfo.MaxValue==-99999||waveinfo.MaxValue==-9999||waveinfo.MinValue==999999||waveinfo.MinValue==999999||waveinfo.MinValue==99999||waveinfo.MinValue==99999||waveinfo.MinValue==-9999) + { + float valmin=99999; + float valmax=-99999; + for(int j=0;jvalMax[j]) valmin=valMax[j]; + if(valmin>valMin[j]) valmin=valMin[j]; + if(valmaxSetWaveInfo(curveindex,&BWAVEINFO); + } + logio->Clear(); + delete logio; + isLoad=true; +// SetModified(false,false); + // GetObjectEvent().OnRefreshData(GetSlfFileName(),GetName(),this); + return true; +} +void CObjWellLogWavefile::DepthAlign(char *mr,int num,int pad,int ToolType) +{ + // Star:2、4、6极板深度上移0.088392米 + // EMI:2、4、6极板深度上移0.062米 + // FMI:2、4、6、8极板深度上移0.14478米 + //// need change + int BtnPerPad=24; + float vv; + switch(ToolType) + { + case 0: // Star-II deltaZ=0.3" deltaH=3.41" + BtnPerPad=24; + //电扣Z方向:BUTZ =/ 0, -.3, 0, -.3, 0, -.3, 0, -.3, 0, -.3, 0, -.3, 0, -.3, 0, -.3, 0,-.3, 0, -.3, 0, -.3, 0, -.3 / + //if(pad%2==0)//电扣深度对齐,第偶数个电扣需上提0.3",即0.00762m,相当于3倍的采样间隔(3*0.00254) + { + for(int btn=0; btn=Col-1) continue; + memmove(vbuf,&mr[i*Col*cordlen+Col*cordlen-ashift*cordlen],cordlen*ashift); + memmove(&mr[(i*Col+ashift)*cordlen],&mr[i*Col*cordlen],cordlen*(Col-ashift)); + memmove(&mr[i*Col*cordlen],vbuf,cordlen*ashift); + } + } + else { + for(int i=0; i=Col-1) continue; + memmove(vbuf,&mr[i*Col*cordlen+Col*cordlen-ashift*cordlen],cordlen*ashift); + memmove(&mr[(i*Col+ashift)*cordlen],&mr[i*Col*cordlen],cordlen*(Col-ashift)); + memmove(&mr[i*Col*cordlen],vbuf,cordlen*ashift); + } + } + delete vbuf; +} + +void CObjWellLogWavefile::SetArrayNum(int ArrayNum) +{ + if(ArrayNum!=m_ArrayNum) + { + isLoad=false; + m_ArrayNum=ArrayNum; + LoadFromSLF(); + } +} +void CObjWellLogWavefile::GetValidMDProperty( PFLOATPROPERTY &vMD,PFLOATPROPERTY &vProperty,float sdep,float edep) +{ + bool ret=0; + if(key.isEmpty()) ret=0; + else if(!IsMappingMem(key.toStdString().c_str()))ret=LoadFromSLF(); + else + { + if(m_SharedMemory){ + ret=true; + vMD.m_vProperty=(float *)m_SharedMemory; + if(!GetName().isEmpty()&&!m_SlfFileName.isEmpty()&&vMD.m_vProperty) + { + CLogIO * logio=new CLogIO(); + if(logio->Open(m_SlfFileName.toStdString().c_str(),CSlfIO::modeRead)) + { + int curveindex=logio->OpenWave(GetName().toStdString().c_str()); + if(curveindex>-1) + { +// logio->GetWaveInfo(curveindex,&waveinfo); + } + } + delete logio; + int samplenum=(waveinfo.EndDepth-waveinfo.StartDepth)/waveinfo.DepLevel+1.5; + int samplenum1=(m_vMD.m_vProperty[1]-m_vMD.m_vProperty[0])/m_vMD.m_vProperty[2]+1.5; + if(samplenum1==samplenum){ + m_vMD.m_vProperty[0]=waveinfo.StartDepth; + m_vMD.m_vProperty[1]=waveinfo.EndDepth; + m_vMD.m_vProperty[2]=waveinfo.DepLevel; + } + else { + isLoad=false; + LoadFromSLF(); + vMD.m_vProperty=(float *)m_SharedMemory; + m_vProperty.m_vProperty=&m_vMD.m_vProperty[4]; + } + } + } + else + { + struct IN_OUT_MESSAGE + { + int nPad;//极板数// + int nPadZ;//极板子极板数据 + int nSample;//每个极板元素(电扣)个数// + int Width; + int shift0; + char Name[40][64]; + char A1PZ[64]; + }; + + struct IN_OUT_MESSAGE msa[7]={ + //STAR 1 + { + 6,1,24,360,0, + {"C_P1BTN","C_P2BTN","C_P3BTN","C_P4BTN","C_P5BTN","C_P6BTN"}, + "P1AZ_STAR" + }, + //CBIL 2 + { + 2,1,250,360,0, + {"C_BHTA","C_BHTT"}, + "P1AZ_CBIL" + }, + //EMI 3 + { + 6,1,25,360,0, + {"C_PAD1","C_PAD2","C_PAD3","C_PAD4","C_PAD5","C_PAD6"}, + "P1AZ_EMI" + }, + //XRMI 4 + { + 6,1,25,360,0, + {"C_XPAD1","C_XPAD2","C_XPAD3","C_XPAD4","C_XPAD5","C_XPAD6"}, + "P1AZ_XRMI" + }, + //FMI 5 + { + 16,4,12,360,12, + {"C_FCA1","C_FCA2","C_FCA3","C_FCA4","C_FCB1","C_FCB2","C_FCB3","C_FCB4","C_FCC1","C_FCC2","C_FCC3","C_FCC4","C_FCD1","C_FCD2","C_FCD3","C_FCD4"}, + "C_P1AZ" + }, + //FMS 6 + { + 4,1,16,360,12, + {"C_PAD1","C_PAD2","C_PAD3","C_PAD4"}, + "P1AZ_FMS" + }, + //EIWD KSZ 7 + { + 1,1,128,360,0, + {"C_RTW"} + } + }; + if(!m_SlfFileName.isEmpty()) + { + char tem[100]; + QString name=GetName(); + + strcpy(tem,name.toStdString().c_str()); + int fir=-1; + struct IN_OUT_MESSAGE *pMsa=NULL; + if(m_ArrayNum>1) { + for(int i=0;i<7;i++) { + for(int j=0;j=0) break; + } + if(fir<0) { + QStringList msa1=GetSimilarCurves(name); + if(msa1.size()>7) { + pMsa=new struct IN_OUT_MESSAGE; + fir=msa1[0].toInt();//image type + pMsa->nPad=msa1[1].toInt();//极板数// + pMsa->nPadZ=msa1[2].toInt();//极板子极板数据 + pMsa->nSample=msa1[3].toInt();//每个极板元素(电扣)个数// + pMsa->Width=msa1[4].toInt(); + pMsa->shift0=msa1[5].toInt(); + for(int i=0;inPad;i++) { + if(msa1.size()>6+i) strcpy(pMsa->Name[i],msa1[6+i].toStdString().c_str()); + } + if(msa1.size()>6+pMsa->nPad)strcpy(pMsa->A1PZ,msa1[6+pMsa->nPad].toStdString().c_str()); + } + } + } + if(fir<1) m_ArrayNum=1; + name=m_SlfFileName+GetName(); + if(m_ArrayNum>1) { + name+="Array"; + } + m_SharedMemory=NULL; + m_Handle=NULL; + + name=GetName(); + + CLogIO * logio=new CLogIO(); + if(logio->Open(m_SlfFileName.toStdString().c_str(),CSlfIO::modeRead)) + { + int curveindex=logio->OpenWave(name.toStdString().c_str()); + if(curveindex>-1) + { + m_ObjectType=WAVE_OBJECT; + logio->GetWaveInfo(curveindex,&waveinfo); + if(m_ArrayNum>1) { + if(waveinfo.RepCode==REPR_CHAR) waveinfo.RepCode=REPR_UCHAR; + } + acurveinfo.RepCode=waveinfo.RepCode; + acurveinfo.CodeLen=waveinfo.CodeLen; + acurveinfo.DepLevel=waveinfo.DepLevel; + acurveinfo.StartDepth=waveinfo.StartDepth; + acurveinfo.EndDepth=waveinfo.EndDepth; + isRun=true; + + int samplenum=(waveinfo.EndDepth-waveinfo.StartDepth)/waveinfo.DepLevel+1.5; + name=m_SlfFileName+GetName(); + if(m_ArrayNum>1) { + name+="Array"; + } + key=name; + int nbpp=waveinfo.SamplePoint; + int mlen=0; + int myWidth=0; + int chlen=0; + int nPadZ=0; + int myWidth1=waveinfo.SamplePoint; + int shift0=0; + if(m_ArrayNum>1) { + shift0=pMsa->shift0; + nPadZ=pMsa->nPadZ; + myWidth=pMsa->Width; + nbpp=pMsa->nSample; + m_ArrayNum=pMsa->nPad; + mlen=myWidth-m_ArrayNum*nbpp;//总盲区宽度 + mlen/=m_ArrayNum; + if(mlen%2!=0) mlen+=1; + if(nPadZ<4) chlen=mlen/8; + else chlen=mlen/4; + if(chlen%2!=0) chlen+=1; + if(chlen==0) chlen=2; + mlen=m_ArrayNum*chlen/nPadZ; + if(mlen%2!=0) mlen++; + if(mlen>20) mlen=20; + if(chlen<4) chlen=4; + int klen=pMsa->nPadZ*waveinfo.SamplePoint+mlen+pMsa->nPadZ*chlen; + myWidth1=klen*pMsa->nPad/pMsa->nPadZ; + } + else myWidth=waveinfo.SamplePoint; + int nlen=waveinfo.CodeLen*waveinfo.SamplePoint; + int reclen=waveinfo.CodeLen*myWidth*waveinfo.ArrayNum; + MappingMem(&m_Handle,(LPSTR*)&m_SharedMemory,3*sizeof(float)+sizeof(int)+reclen*(samplenum+1),key.toStdString().c_str()); + if(m_Handle&&m_SharedMemory) { + m_vMD.SetSize(3); + m_vMD.m_vProperty=(float *)m_SharedMemory; + int size=((int *)m_SharedMemory)[3]; + m_vProperty.SetSize(size); + m_vProperty.m_vProperty=&m_vMD.m_vProperty[4]; + } + if(m_vMD.size()>0){ + m_TopDepth=m_vMD.m_vProperty[0]; + m_BottomDepth=m_vMD.m_vProperty[1]; + m_Rlev=m_vMD.m_vProperty[2]; + } + m_ShiftTopDepth=-9999; + m_ShiftBottomDepth=-9999; + m_DepthOffset=0; + + if(m_ArrayNum>1) { + waveinfo.ArrayNum=pMsa->nPad/pMsa->nPadZ; + waveinfo.SamplePoint=myWidth/(waveinfo.ArrayNum); + waveinfo.TimeSamples=myWidth; + } + if(pMsa) { + delete pMsa; + pMsa=NULL; + } + float val=0; + valMin.clear(); + valMax.clear(); + valMin.resize((waveinfo.SamplePoint)*waveinfo.ArrayNum); + valMax.resize((waveinfo.SamplePoint)*waveinfo.ArrayNum); + for(int j=0;j<(waveinfo.SamplePoint)*waveinfo.ArrayNum;j++) { + valMin[j]=999999999; + valMax[j]=-99999999; + } + char buf[200]; + for(int i=0;ival)valMin[j]=val; + } + } + if(waveinfo.MaxValue==-50||waveinfo.MinValue==50||fabs(waveinfo.MaxValue)<1e-6||waveinfo.MinValue<1e-6||waveinfo.MaxValue==-99999||waveinfo.MaxValue==-9999||waveinfo.MinValue==999999||waveinfo.MinValue==999999||waveinfo.MinValue==99999||waveinfo.MinValue==99999||waveinfo.MinValue==-9999) + { + float valmin=99999; + float valmax=-99999; + for(int j=0;jvalMax[j]) valmin=valMax[j]; + if(valmin>valMin[j]) valmin=valMin[j]; + if(valmax #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 m_pageItems; diff --git a/WellLogUI/src/WellLogTableDialogNew.cpp b/WellLogUI/src/WellLogTableDialogNew.cpp index 0096da7..00f4fb4 100644 --- a/WellLogUI/src/WellLogTableDialogNew.cpp +++ b/WellLogUI/src/WellLogTableDialogNew.cpp @@ -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) diff --git a/WellLogUI/src/griddataadapter.cpp b/WellLogUI/src/griddataadapter.cpp index 214bc57..7d62f4b 100644 --- a/WellLogUI/src/griddataadapter.cpp +++ b/WellLogUI/src/griddataadapter.cpp @@ -22,6 +22,7 @@ // #include "DataTree.h" // #include // #include "ObjWellLogWavefile.h" +#include #include "DataManagger.h" #include "assetcopy.h" // #include @@ -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(m_pWellLogs[index]); // if(pTable) return; - // CObjWellLog* pround = dynamic_cast(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(m_table->parent()); - // if(NULL == parent) - // { - // return; - // } - // QWidget* sPage=parent->findChild("statisticsPage"); - // QWidget* pPage=parent->findChild("protoprtyPage"); - // QWidget* cPage=parent->findChild("computePage"); - // QWidget* pvPage=parent->findChild("curvePreViewPage"); - // QTabWidget* tabWidget=parent->findChild("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("sScrollArea"); - // QScrollArea* pScrollArea=tabWidget->findChild("pScrollArea"); - // QScrollArea* cScrollArea=tabWidget->findChild("cscrollArea"); - // QScrollArea* curveScrollArea=tabWidget->findChild("curveScrollArea"); - // if(NULL != sScrollArea) - // { - // sScrollArea->setWidget(sPage); - // } + CObjWellLog* pround = dynamic_cast(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(m_table->parent()); + if(NULL == parent) + { + return; + } + QWidget* sPage=parent->findChild("statisticsPage"); + QWidget* pPage=parent->findChild("protoprtyPage"); + QWidget* cPage=parent->findChild("computePage"); + QWidget* pvPage=parent->findChild("curvePreViewPage"); + QTabWidget* tabWidget=parent->findChild("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("sScrollArea"); + QScrollArea* pScrollArea=tabWidget->findChild("pScrollArea"); + QScrollArea* cScrollArea=tabWidget->findChild("cscrollArea"); + QScrollArea* curveScrollArea=tabWidget->findChild("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()<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()<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 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;jSetWellLogs(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 WellLogs ////////////////////////////////////////////////////////// void GridDataAdapter::initFMTWellLogData(DType type,QList 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;jSetWellLogs(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;jGetSlfFileName(); - // 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 > 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 > 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); + } } diff --git a/logPlus/mainwindow.cpp b/logPlus/mainwindow.cpp index 2bd47d4..2e7d390 100644 --- a/logPlus/mainwindow.cpp +++ b/logPlus/mainwindow.cpp @@ -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) { diff --git a/logPlus/mainwindow.h b/logPlus/mainwindow.h index e76ba61..223db9e 100644 --- a/logPlus/mainwindow.h +++ b/logPlus/mainwindow.h @@ -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);//编辑测井信息 //插件消息 diff --git a/logPlus/mainwindowcurve.cpp b/logPlus/mainwindowcurve.cpp index 96db983..d06f634 100644 --- a/logPlus/mainwindowcurve.cpp +++ b/logPlus/mainwindowcurve.cpp @@ -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"); diff --git a/logPlus/qtprojectwidgets.cpp b/logPlus/qtprojectwidgets.cpp index 5f0d0ca..0e3df01 100644 --- a/logPlus/qtprojectwidgets.cpp +++ b/logPlus/qtprojectwidgets.cpp @@ -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() { diff --git a/logPlus/qtprojectwidgets.h b/logPlus/qtprojectwidgets.h index efddf74..561b8c3 100644 --- a/logPlus/qtprojectwidgets.h +++ b/logPlus/qtprojectwidgets.h @@ -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();