添加波列数据显示逻辑

This commit is contained in:
zhaolei 2026-01-29 16:57:06 +08:00
parent a2853b1c17
commit 9b7c8bbda1
44 changed files with 7677 additions and 519 deletions

View File

@ -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

View File

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

View File

@ -0,0 +1,52 @@
#ifndef ANGLEADJTOOL_H
#define ANGLEADJTOOL_H
#include <QDialog>
#include <qgraphicsscene.h>
#include <qgraphicsitem.h>
namespace Ui {
class AngleAdjTool;
}
class AngleAdjTool : public QDialog
{
Q_OBJECT
signals:
void sendAngleData(float,float,float,float,float);
void cancelAngle();
public:
explicit AngleAdjTool(QWidget *parent = 0);
~AngleAdjTool();
void setAngDep(float, float, float, float);
void setLineEditable();
void setSliderRange(int);
void setHeadTailValue(int,int);
void setEachSetValue(float);
bool calcuCurAve(float[], int);
private:
Ui::AngleAdjTool *Ang_UI;
float Sdep, edep, realSdep, realEdep; //平滑深度范围, 实际井深度范围
float eachSetValue;
int maxSlider, minSlider;
float headAve, tailAve;
QGraphicsScene *scene;
QGraphicsLineItem *lineItem;
QGraphicsLineItem *lineItems;
void depCheck();
void initGraph();
private slots:
void calcuAngle();
void cancelAngle_SLOT();
void headLinkTail_SLOT(int);
void headAdd(int);
void tailAdd(int);
void sdepChange_SLOT();
void edepChange_SLOT();
};
#endif // ANGLEADJTOOL_H

View File

@ -0,0 +1,294 @@
#include "CurveComputePage.h"
#include "ui_CurveComputePage.h"
#include "DataHelper.h"
#include <QDoubleValidator>
// #include "DataImport.h"
// #include "ObjProject.h"
CurveComputePage::CurveComputePage(QWidget *parent)
: QWidget(parent)
{
m_pUI=new Ui::CurveComputePage();
m_pUI->setupUi(this);
if(NULL != parent)
{
int w=width();
int h=height();
parent->setFixedSize(QSize(w,h));
}
}
void CurveComputePage::CurveCompute(const QString& FileName,
const QStringList& CurveNameList)
{
m_FileName=FileName;
m_cureNameList=CurveNameList;
}
void CurveComputePage::init()
{
setWindowTitle(QString("曲线计算"));
if(m_cureNameList.size()>0)
{
QString CurveName=m_cureNameList[0];
CMemRdWt *mrw=new CMemRdWt();
mrw->Open(m_FileName.toStdString().c_str(),CSlfIO::modeReadWrite);
int index=mrw->OpenCurve(CurveName.toStdString().c_str());
if(index<0) {
delete mrw;
return;
}
Slf_CURVE pInfo;
mrw->GetCurveInfo(index,&pInfo);
delete mrw;
//开始深度
m_pUI->lineeditsDep->setText(QString::number(pInfo.StartDepth));
m_pUI->lineeditsDep->setValidator(new QDoubleValidator(-999999,999999,6,this));
// 终止深度
m_pUI->lineEditeDep->setText(QString::number(pInfo.EndDepth));
m_pUI->lineEditeDep->setValidator(new QDoubleValidator(-999999,999999,6,this));
//计算公式
QString ss=CurveName+"=1.0*"+CurveName+"+0.0";
m_pUI->lineEditExpress->setText(ss);
disconnect(m_pUI->btnOk,SIGNAL(clicked()),this,SLOT(slotComputeOk()));
connect(m_pUI->btnOk,SIGNAL(clicked()),this,SLOT(slotComputeOk()));
}
}
void CurveComputePage::slotComputeOk()
{
if(m_pUI->lineeditsDep->text().toFloat()>m_pUI->lineEditeDep->text().toFloat())
{
AfxMessageBox("起始深度不能大于终止深度");
return;
}
QString m_Function=m_pUI->lineEditExpress->text();
m_Function.toUpper();
m_Function.replace("\"DEPTH\"","CURRENT_HD.DEP");
BOOL OutCurveExist=1;
float CurveValue,sdep,edep,rlev;
Function fun;
int noi=fun.GetExpress(m_Function);
if(noi<0)
{
return ;//输入公式中没有“=”号,或含有不能处理的字符
}
//检查公式合理性
for(int j=0;j<noi;j++)
{
fun.val[j]=j+1;
}
fun.prog=fun.TempProg;
int re=fun.get_exp(&CurveValue);
if(re>0)
{
const static char *e[]={
"语法错误",//"syntax error.",
"不对称的括号",//"unbalanced parentheses",
"非法运算符"//"no expression present"
};
QMessageBox::warning(NULL,"提示",QString(QLatin1String(e[re-1]))+m_Function);
return ;
}
char name[20];
strcpy(name,fun.csOutName.toStdString().c_str());
CMemRdWt *mrw=new CMemRdWt();
mrw->Open(m_FileName.toStdString().c_str(),CSlfIO::modeReadWrite);
int in=mrw->FindObjectIndex(name);
if(in>=0)
{
short Attribute,SubAttribute;
mrw->GetObjectAttribute(in,&Attribute,&SubAttribute);
if(mrw->GetObjectStatus(in)!=0)//删除状态
{
if(Attribute==CHANNEL_OBJECT&&SubAttribute==CURVE_OBJECT)
{
QMessageBox::warning(NULL,"提示",fun.csOutName+"曲线已存在,但该曲线处于删除状态,无法进行计算 !!!");
delete mrw;
return ;
}
else
{
QMessageBox::warning(NULL,"提示","有一个非曲线对象"+fun.csOutName+"已存在,且该对象处于删除状态,无法进行计算 !!!");
delete mrw;
return ;
}
}
if (Attribute!=CHANNEL_OBJECT||SubAttribute!=CURVE_OBJECT)
{
QMessageBox::warning(NULL,"提示",fun.csOutName+"对象已存在,但其属性不是曲线 !!!");
delete mrw;
return ;
}
}
else
{ // 输出曲线不存在
QString ss="输出曲线"+fun.csOutName+"不存在 \n 是否生成 \n";
int flag = QMessageBox::warning(NULL,tr("提示"),ss,QMessageBox::Yes,QMessageBox::No);
if(flag != QMessageBox::Yes){
delete mrw;
return ;
}
OutCurveExist=0;
}
int index[20],indexout;
float MinRlev=9999;
DWORD CurveSample[20];
float CurveRlev[20];
Slf_CURVE info;
for(int i=0;i<noi;i++)
{
if(fun.csName[i]=="CURRENT_HD.DEP")continue;
if(mrw->GetObjectType(fun.csName[i].toStdString().c_str())!=CURVE_OBJECT)
{
QMessageBox::warning(NULL,"提示","输入曲线"+fun.csName[i]+"不是曲线类型,不能进行计算!!!\r\n请参考常规曲线计算规则,输入正确的计算公式");
delete mrw;
return ;
}
index[i]=mrw->OpenCurve(fun.csName[i].toStdString().c_str());
if(index[i]<0)
{
QMessageBox::warning(NULL,"提示","打开曲线"+fun.csName[i]+"出错,不能进行计算!!!");
delete mrw;
return ;
}
mrw->GetCurveInfo(index[i],&info);
if(MinRlev>info.DepLevel)MinRlev=info.DepLevel;
CurveRlev[i]=info.DepLevel;
}
if(MinRlev==9999)MinRlev=0.125;//表达式中没有实际曲线只有CURRENT_HD.DEP“深度”标识
//生成输出曲线
if(OutCurveExist==0)
{
indexout=-1;
for(int i=0;i<noi;i++)
{
if(fun.csName[i]=="CURRENT_HD.DEP")continue;
mrw->GetCurveInfo(index[i],&info);
sprintf(info.AliasName,"%s",fun.csOutName.toStdString().c_str());
sprintf(info.Name,"%s",fun.csOutName.toStdString().c_str());
info.StartDepth=m_pUI->lineeditsDep->text().toFloat();
info.EndDepth=m_pUI->lineEditeDep->text().toFloat();
indexout=mrw->OpenCurve(&info);
break;
}
if(indexout==-1)//表达式中没有实际曲线只有CURRENT_HD.DEP“深度”标识
{
sprintf(info.AliasName,"%s",fun.csOutName.toStdString().c_str());
sprintf(info.Name,"%s",fun.csOutName.toStdString().c_str());
info.StartDepth=m_pUI->lineeditsDep->text().toFloat();
info.EndDepth=m_pUI->lineEditeDep->text().toFloat();
info.DepLevel=0.125;
info.CodeLen=4;
info.RepCode=4;
info.DefVal=-999.25;
info.MaxValue=100;
info.MinValue=0;
strcpy(info.DepthHZUnit,"");
strcpy(info.DepthUnit,"m");
strcpy(info.Unit,"");
strcpy(info.AliasUnit,"");
indexout=mrw->OpenCurve(&info);
}
}
else
{
indexout=mrw->OpenCurve(fun.csOutName.toStdString().c_str());
if(indexout>-1) mrw->GetCurveInfo(indexout,&info);
}
if(indexout<0)
{
QMessageBox::warning(NULL,"提示","输出曲线不存在,而且输入曲线中没有可参考的常规曲线,无法进行曲线计算\r\n请参考常规曲线计算规则,输入正确的计算公式");
delete mrw;
return ;
}
//检查输出曲线深度
rlev = info.DepLevel;
sdep = info.StartDepth;
edep = info.EndDepth ;
if(MinRlev>rlev)MinRlev=rlev;
if ( m_pUI->lineeditsDep->text().toFloat() < sdep-rlev || m_pUI->lineEditeDep->text().toFloat() > edep+rlev)
{
int flag=QMessageBox::warning(NULL,"提示","输出曲线的深度范围("+m_pUI->lineeditsDep->text()+"--"+m_pUI->lineEditeDep->text()+")超出输入曲线("+QString::number(sdep)+"--"+QString::number(edep)+"\n继续计算吗?",QMessageBox::Yes,QMessageBox::No);
if(flag != QMessageBox::Yes){
delete mrw;
return ;
}
}
int sample=(int)((m_pUI->lineEditeDep->text().toFloat()-m_pUI->lineeditsDep->text().toFloat())/rlev+1.5);//0.5);
int sampleIn=(int)((m_pUI->lineEditeDep->text().toFloat()-m_pUI->lineeditsDep->text().toFloat())/MinRlev+1.5);//0.5);
float **indata,*outdata;
indata=new float*[noi];
outdata=new float[sample+10];
float *tDep,*aDep;
tDep=new float[sample];
for(int k=0; k<sample; k++) tDep[k]=sdep+k*rlev;
for(int j=0;j<noi;j++)
{
if(fun.csName[j]=="CURRENT_HD.DEP")continue;
indata[j]=new float[sampleIn];
//whp change 2018.10.15 保证读写一致
CurveSample[j]=(m_pUI->lineEditeDep->text().toFloat()-m_pUI->lineeditsDep->text().toFloat())/CurveRlev[j]+1.5;//0.5;
mrw->ReadCurve(index[j],m_pUI->lineeditsDep->text().toFloat(),CurveSample[j],&indata[j][0]);
if(fabs(CurveRlev[j]-rlev)/rlev>0.1)
{
aDep=new float[CurveSample[j]];
for(int k=0; k<CurveSample[j]; k++) aDep[k]=sdep+k*CurveRlev[j];
Resample::ReSampling(&indata[j][0],CurveSample[j],1,aDep,tDep,sample);
delete []aDep;
}
}
for (int i=0; i<sample; i++)
{
float sdeps = sdep + rlev * i;
float val=0;
for(int j=0;j<noi;j++)
{
if(fun.csName[j]=="CURRENT_HD.DEP")fun.val[j]=m_pUI->lineeditsDep->text().toFloat()+i*rlev;
else fun.val[j]=indata[j][i];
if(fun.val[j]==-9999||fun.val[j]==-999.25||fun.val[j]==-99999||fun.val[j]==-4.3160208e+008) val=-9999;
}
fun.prog=fun.TempProg;
fun.get_exp(&CurveValue);
if(val==-9999) CurveValue=-9999;
outdata[i]=CurveValue;
}
mrw->WriteCurve(indexout,m_pUI->lineeditsDep->text().toFloat(),sample,&outdata[0]);
delete []tDep;
for (int i=0; i<noi;i++)
{
if(fun.csName[i]=="CURRENT_HD.DEP")continue;
mrw->CloseCurve(index[i]);
}
mrw->CloseCurve(indexout);
for(int j=0;j<noi;j++)
{
if(fun.csName[j]=="CURRENT_HD.DEP")continue;
delete indata[j];
}
delete []indata;
delete []outdata;
////
Slf_FILE_MESSAGE msag;
mrw->GetFileMessage(msag);
QStringList CurveNames;
CurveNames.push_back(msag.WellName);
CurveNames.push_back(m_FileName);
CurveNames.push_back(fun.csOutName.toUpper());
delete mrw;
emit signalCompute(CurveNames);
// PaiObject::m_EventAgent.ObjectPropertyChanged(::GetProject(),"Compute",CurveNames);
}
CurveComputePage::~CurveComputePage()
{
if(NULL != m_pUI)
{
delete m_pUI;
m_pUI=NULL;
}
}

View File

@ -0,0 +1,31 @@
#ifndef CURVECOMPUTEPAGE_H
#define CURVECOMPUTEPAGE_H
#include <QWidget>
class CMemRdWt;
namespace Ui
{
class CurveComputePage;
}
class CurveComputePage : public QWidget
{
Q_OBJECT
public:
CurveComputePage(QWidget *parent);
~CurveComputePage();
void CurveCompute(const QString& FileName,
const QStringList& CurveNameList);
void init();
signals:
void signalCompute(const QStringList &curveNames);
private slots:
void slotComputeOk();
private:
Ui::CurveComputePage *m_pUI;
QString m_FileName;
QStringList m_cureNameList;
};
#endif // CURVECOMPUTEPAGE_H

View File

@ -0,0 +1,182 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>CurveComputePage</class>
<widget class="QWidget" name="CurveComputePage">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>602</width>
<height>500</height>
</rect>
</property>
<property name="minimumSize">
<size>
<width>0</width>
<height>500</height>
</size>
</property>
<property name="windowTitle">
<string>Form</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_2">
<item>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<layout class="QHBoxLayout" name="horizontalLayout_2">
<item>
<widget class="QLabel" name="label">
<property name="text">
<string>开始深度</string>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="lineeditsDep"/>
</item>
<item>
<widget class="QLabel" name="label_2">
<property name="text">
<string>终止深度</string>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="lineEditeDep"/>
</item>
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_3">
<item>
<widget class="QLabel" name="label_3">
<property name="text">
<string>计算公式</string>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="lineEditExpress"/>
</item>
</layout>
</item>
<item>
<spacer name="verticalSpacer_3">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>18</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QLabel" name="label_4">
<property name="text">
<string>常用数学运算符:
加:+,减:-,乘:*,除:/,取余:%,乘方:^,对数:!
PAR =SP/CAL+RT^2.5-10!AC
10!表示取以10为底的对数,1! 表示取自然对数
</string>
</property>
<property name="textFormat">
<enum>Qt::PlainText</enum>
</property>
<property name="wordWrap">
<bool>false</bool>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="label_5">
<property name="minimumSize">
<size>
<width>600</width>
<height>0</height>
</size>
</property>
<property name="text">
<string>规则及约定:
1、输入对象必须是常规曲线名、深度标识或常量
如:GR=2*GR+5GR2=45TEMP=18+0.038*&quot;DEPTH
其中:&quot;DEPTH&quot;表示深度;
2、当输出曲线不存在时:
如果有输入曲线存在,程序自动根据第一条输入曲线的属性产生输出曲线;
否则程序自动产生一条浮点类型的输出曲线采样间隔为0.125。</string>
</property>
</widget>
</item>
<item>
<spacer name="verticalSpacer_2">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>18</height>
</size>
</property>
</spacer>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
<item>
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QPushButton" name="btnOk">
<property name="text">
<string>确定</string>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer_2">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout>
</item>
</layout>
</item>
</layout>
</widget>
<resources/>
<connections/>
</ui>

View File

@ -0,0 +1,361 @@
#pragma warning(push,0)
// #include "Family.h"
#include <QMessageBox>
#include <QHeaderView>
#include "CurveComputerDlg.h"
#include "ui_CurveComputer.h"
#include "CStringType.h"
#include "DataHelper.h"
#include "MemRdWt.h"
// #include "ObjProject.h"
#include "Well.h"
#pragma warning(pop)
using namespace pai::ios::welllog;
BEGIN_OSGGRAPHICS_NAMESPACE
CCurveComputerDlg::CCurveComputerDlg(QWidget * parent, Qt::WindowFlags flags)
: QDialog(parent,flags)
{
m_pUI = new Ui_CurveComputer();
m_pUI->setupUi(this);
QObject::connect(m_pUI->pushButton_SetDepth, SIGNAL(clicked()), this, SLOT(slotSetDepth()));
QObject::connect(m_pUI->pushButton_SetFun, SIGNAL(clicked()), this, SLOT(slotSetFun()));
QObject::connect(m_pUI->okbtn, SIGNAL(clicked()), this, SLOT(slotSave()));
QObject::connect(m_pUI->cancelbtn, SIGNAL(clicked()), this, SLOT(slotCancel()));
}
void CCurveComputerDlg::slotSave()
{
//检查公式合理性
for(int i=0;i<m_pUI->tableWidget->rowCount();i++)
{
if(Qt::Checked!=m_pUI->tableWidget->item(i,0)->checkState())continue;
QString m_Function=m_pUI->tableWidget->item(i,0)->text();
m_Function=m_Function.toUpper();
Function fun;
int noi=fun.GetExpress(m_Function);//检查输入公式中是否存在:没有“=”号,或含有不能处理的字符
if(noi<0)return;
for(int j=0;j<noi;j++)
{
fun.val[j]=j+1;
}
fun.prog=fun.TempProg;
float CurveValue;
int re=fun.get_exp(&CurveValue);
if(re>0)
{
const static char *e[]={
"语法错误",//"syntax error.",
"不对称的括号",//"unbalanced parentheses",
"非法运算符"//"no expression present"
};
QMessageBox::warning(NULL,"提示",QString(QLatin1String(e[re-1]))+m_Function);
return;
}
}
//检查输入、输出曲线
CMemRdWt *mrw=new CMemRdWt();
char name[64];
if(!mrw->Open(FileName.toStdString().c_str(),CSlfIO::modeReadWrite))
{
delete mrw;
return;
}
Slf_FILE_MESSAGE msag;
mrw->GetFileMessage(msag);
for(int m=0;m<m_pUI->tableWidget->rowCount();m++)
{
if(Qt::Checked!=m_pUI->tableWidget->item(m,0)->checkState())continue;
QString m_Function=m_pUI->tableWidget->item(m,0)->text();
m_Function=m_Function.toUpper();
Function fun;
int noi=fun.GetExpress(m_Function);
strcpy(name,fun.csOutName.toStdString().c_str());
int in=mrw->FindObjectIndex(name);
if(in>=0)//检查输出曲线
{
short Attribute,SubAttribute;
mrw->GetObjectAttribute(in,&Attribute,&SubAttribute);
if(mrw->GetObjectStatus(in)!=0)//删除状态
{
if(Attribute==CHANNEL_OBJECT&&SubAttribute==CURVE_OBJECT)
{
QMessageBox::warning(NULL,"提示",fun.csOutName+"曲线已存在,但该曲线处于删除状态,无法进行计算 !!!");
delete mrw;
return ;
}
else
{
QMessageBox::warning(NULL,"提示","有一个非曲线对象"+fun.csOutName+"已存在,且该对象处于删除状态,无法进行计算 !!!");
delete mrw;
return ;
}
}
if (Attribute!=CHANNEL_OBJECT||SubAttribute!=CURVE_OBJECT)
{
QMessageBox::warning(NULL,"提示","输出曲线名称"+fun.csOutName+"已存在,但其属性不是曲线 !!!");
delete mrw;
return ;
}
}
//检查输入曲线
int index[20],indexout;
for(int i=0;i<noi;i++)
{
if(fun.csName[i]=="CURRENT_HD.DEP")continue;
if(mrw->FindObjectIndex(fun.csName[i].toStdString().c_str())<0)
{
QMessageBox::warning(NULL,"提示","输入曲线"+fun.csName[i]+"不存在,无法进行计算!!!");
delete mrw;
return ;
}
if(mrw->GetObjectType(fun.csName[i].toStdString().c_str())!=CURVE_OBJECT)
{
QMessageBox::warning(NULL,"提示","输入曲线"+fun.csName[i]+"不是曲线类型,不能进行计算!!!\r\n请参考常规曲线计算规则,输入正确的计算公式");
delete mrw;
return ;
}
}
}
QStringList CurveNames;
CurveNames.push_back(msag.WellName);
CurveNames.push_back(FileName);
//开始计算
for(int m=0;m<m_pUI->tableWidget->rowCount();m++)
{
if(Qt::Checked!=m_pUI->tableWidget->item(m,0)->checkState())continue;
QString m_Function=m_pUI->tableWidget->item(m,0)->text();
m_Function=m_Function.toUpper();
Function fun;
int noi=fun.GetExpress(m_Function);
strcpy(name,fun.csOutName.toStdString().c_str());
CurveNames.push_back(name);
for(int j=0;j<noi;j++)
{
fun.val[j]=j+1;
}
fun.prog=fun.TempProg;
float CurveValue;
//int re=fun.get_exp(&CurveValue);
int in=mrw->FindObjectIndex(name);
int index[20],indexout=-1;
float MinRlev=9999;
DWORD CurveSample[20];
float CurveRlev[20];
Slf_CURVE info;
for(int i=0;i<noi;i++)
{
if(fun.csName[i]=="CURRENT_HD.DEP")continue;
index[i]=mrw->OpenCurve(fun.csName[i].toStdString().c_str());
if(index[i]>-1)mrw->GetCurveInfo(index[i],&info);
if(MinRlev>info.DepLevel)MinRlev=info.DepLevel;
CurveRlev[i]=info.DepLevel;
}
if(MinRlev==9999)MinRlev=0.125;//表达式中没有实际曲线只有CURRENT_HD.DEP“深度”标识
//生成输出曲线
indexout=mrw->OpenCurve(fun.csOutName.toStdString().c_str());
if(indexout>=0)mrw->GetCurveInfo(indexout,&info);
else
{//输出曲线不存在
indexout=-1;
for(int i=0;i<noi;i++)
{
if(fun.csName[i]=="CURRENT_HD.DEP")continue;
mrw->GetCurveInfo(index[i],&info);//根据第一条输入曲线的属性产生输出曲线
indexout=i;
break;
}
if(indexout==-1)//表达式中没有实际曲线
{
info.DepLevel=0.125;
info.CodeLen=4;
info.RepCode=4;
info.DefVal=-999.25;
info.MaxValue=100;
info.MinValue=0;
strcpy(info.DepthHZUnit,"");
strcpy(info.DepthUnit,"m");
strcpy(info.Unit,"");
strcpy(info.AliasUnit,"");
}
sprintf(info.AliasName,"%s",fun.csOutName.toStdString().c_str());
sprintf(info.Name,"%s",fun.csOutName.toStdString().c_str());
info.StartDepth=m_pUI->tableWidget->item(m,1)->text().toFloat();
info.EndDepth=m_pUI->tableWidget->item(m,2)->text().toFloat();
indexout=mrw->OpenCurve(&info);
}
float rlev = info.DepLevel;
float sdep = m_pUI->tableWidget->item(m,1)->text().toFloat();
float edep = m_pUI->tableWidget->item(m,2)->text().toFloat();
if(MinRlev>rlev)MinRlev=rlev;
int sample=(int)((edep-sdep)/rlev+1.5);//0.5);
int sampleIn=(int)((edep-sdep)/MinRlev+1.5);//0.5);
float **indata,*outdata;
indata=new float*[noi];
outdata=new float[sample+10];
float *tDep,*aDep;
tDep=new float[sample];
for(int k=0; k<sample; k++) tDep[k]=sdep+k*rlev;
for(int j=0;j<noi;j++)
{
if(fun.csName[j]=="CURRENT_HD.DEP")continue;
indata[j]=new float[sampleIn];
//whp change 2018.10.15 保证读写一致
CurveSample[j]=(edep-sdep)/CurveRlev[j]+1.5;//0.5;
mrw->ReadCurve(index[j],sdep,CurveSample[j],&indata[j][0]);
if(fabs(CurveRlev[j]-rlev)/rlev>0.1)
{
aDep=new float[CurveSample[j]];
for(int k=0; k<CurveSample[j]; k++) aDep[k]=sdep+k*CurveRlev[j];
Resample::ReSampling(&indata[j][0],CurveSample[j],1,aDep,tDep,sample);
delete []aDep;
}
}
for (int i=0; i<sample; i++)
{
//sdep = sdeps + rlev * i;
for(int j=0;j<noi;j++)
{
if(fun.csName[j]=="CURRENT_HD.DEP")fun.val[j]=sdep+i*rlev;
else fun.val[j]=indata[j][i];
}
fun.prog=fun.TempProg;
fun.get_exp(&CurveValue);
outdata[i]=CurveValue;
//2013.11.20 whp add for 为曲线计算添加数值类型选项常规不控制数值大小方位控制到0-360
}
mrw->WriteCurve(indexout,sdep,sample,&outdata[0]);
delete []tDep;
for (int i=0; i<noi;i++)
{
if(fun.csName[i]=="CURRENT_HD.DEP")continue;
mrw->CloseCurve(index[i]);
}
mrw->CloseCurve(indexout);
for(int j=0;j<noi;j++)
{
if(fun.csName[j]=="CURRENT_HD.DEP")continue;
delete indata[j];
}
delete []indata;
delete []outdata;
}
delete mrw;
// PaiObject::m_EventAgent.ObjectPropertyChanged(GetProject(),"Compute",CurveNames);
QMessageBox::warning(NULL,"提示","完成曲线计算");
//accept();
}
/**
*@brief
*/
void CCurveComputerDlg::slotCancel()
{
// reject ();
}
void CCurveComputerDlg::slotSetDepth()//用当前编辑的曲线深度为所有计算曲线设置深度
{
QString sdep=m_pUI->lineEdit_Sdep->text();
QString edep=m_pUI->lineEdit_Edep->text();
if(sdep>edep) sdep=edep;
for(int i=0;i<m_pUI->tableWidget->rowCount();i++)
{
m_pUI->tableWidget->setItem(i,1,new QTableWidgetItem(sdep));
m_pUI->tableWidget->setItem(i,2,new QTableWidgetItem(edep));
}
}
void CCurveComputerDlg::slotSetFun()
{
QString m_Function="X="+m_pUI->lineEdit_Fun->text();
m_Function=m_Function.toUpper();
m_Function.replace("\"DEPTH\"","CURRENT_HD.DEP");
Function fun;
vector <int>NameType;//输入曲线名类型
int noi=fun.GetExpress(m_Function);
QString m_FunctionR=m_Function.right(m_Function.length()-m_Function.indexOf('=')-1);
for (int i=0; i<noi; i++)
{
if(fun.csName[i]=="X")NameType.push_back(1);//和输出曲线同名
else if(fun.csName[i]=="CURRENT_HD.DEP")NameType.push_back(2);//深度变量
else NameType.push_back(0);//曲线名
}
for(int i=0;i<m_pUI->tableWidget->rowCount();i++)
{
QString m_Function0=m_pUI->tableWidget->item(i,0)->text();
m_Function0=m_Function0.toUpper();
QString outname=m_Function0.left(m_Function0.indexOf('='));
QString newfun=QString(QLatin1String(fun.TempProg));
newfun=newfun.simplified();
char name[2];
name[0]='A'+ i;
name[1]=0;
for (int j=0; j<noi; j++)
{
name[0]='A'+ j;
QString qname=QString(QLatin1String(name));
//if(NameType[j])
{
QString left=newfun.left(newfun.lastIndexOf(qname));
QString right=newfun.right(newfun.length()-newfun.lastIndexOf(qname)-1);
//right.replace(qname,outname);
QString ms=fun.csName[j];//曲线名
if(NameType[j]==1)ms=outname;//和输出曲线同名
else if(NameType[j]==2)ms="\"DEPTH\"";//深度变量
newfun=left+ms+right;
}
}
QString ss=outname+"="+newfun;
m_pUI->tableWidget->setItem(i,0,new QTableWidgetItem(ss));//QString(QLatin1String(fun.TempProg))));
m_pUI->tableWidget->item(i,0)->setCheckState(Qt::Checked);
}
}
void CCurveComputerDlg::init()//const QString& FileName,const QStringList& CurveNameList)//int row,int col,QStringList header)
{
m_pUI->tableWidget->setColumnCount(3);
QStringList header;
header<<"计算公式"<<"起始深度"<<"终止深度";//header<<"曲线名"<<"计算公式"<<"起始深度"<<"终止深度";
m_pUI->tableWidget->setHorizontalHeaderLabels(header);
m_pUI->tableWidget->setColumnWidth(1,200);
m_pUI->tableWidget->horizontalHeader()->setStretchLastSection(true);
m_pUI->tableWidget->horizontalHeader()->setSectionResizeMode(0, QHeaderView::ResizeToContents);
m_pUI->tableWidget->horizontalHeader()->setSectionResizeMode(1, QHeaderView::ResizeToContents);
// m_pUI->tableWidget->horizontalHeader()->setResizeMode(2, QHeaderView::ResizeToContents);
m_pUI->tableWidget->setRowCount(CurveNameList.count());
float Mindep=99999,Maxdep=-99999;
for(int i=0;i<CurveNameList.count();i++)
{
QString CurveName=CurveNameList[i];
//m_pUI->tableWidget->setItem(i,0,new QTableWidgetItem(CurveName));
QString ss=CurveName+"=1.0*"+CurveName+"+0.0";
m_pUI->tableWidget->setItem(i,1-1,new QTableWidgetItem(ss));
CMemRdWt *logio=new CMemRdWt();
logio->Open(FileName.toStdString().c_str(),CSlfIO::modeReadWrite);
int index=logio->OpenCurve(CurveName.toStdString().c_str());
if(index<0) {
delete logio;
continue;
}
Slf_CURVE pInfo;
logio->GetCurveInfo(index,&pInfo);
m_pUI->tableWidget->setItem(i,2-1,new QTableWidgetItem(QString::number(pInfo.StartDepth)));
m_pUI->tableWidget->setItem(i,3-1,new QTableWidgetItem(QString::number(pInfo.EndDepth)));
if(Mindep>pInfo.StartDepth)Mindep=pInfo.StartDepth;
if(Mindep>pInfo.EndDepth)Mindep=pInfo.EndDepth;
if(Maxdep<pInfo.StartDepth)Maxdep=pInfo.StartDepth;
if(Maxdep<pInfo.EndDepth)Maxdep=pInfo.EndDepth;
logio->CloseCurve(index);
delete logio;
m_pUI->tableWidget->item(i,0)->setCheckState(Qt::Checked);
}
m_pUI->lineEdit_Sdep->setText(QString::number(Mindep));
m_pUI->lineEdit_Edep->setText(QString::number(Maxdep));
QString ss="1.0*x+0.0";
m_pUI->lineEdit_OutCurve->setText("x");
m_pUI->lineEdit_Fun->setText(ss);
}
END_OSGGRAPHICS_NAMESPACE

View File

@ -0,0 +1,45 @@

#pragma warning(push,0)
#include <cassert>
#include <QDialog>
#include "ConsoleOutputWidget.h"
#include "ui_CurveComputer.h"
#include "OSGFramework.h"
#pragma warning(pop)
BEGIN_OSGGRAPHICS_NAMESPACE
/**
* @brief
*/
class CCurveComputerDlg : public QDialog
{
Q_OBJECT
public:
CCurveComputerDlg(QWidget * parent=0, Qt::WindowFlags flags=0);
~CCurveComputerDlg()
{
if(m_pUI) delete m_pUI;
}
Ui_CurveComputer *m_pUI;
void init();//const QString& FileName,const QStringList& CurveNameList);//int row,int col,QStringList headlist);
private slots:
/**
*@brief
*/
void slotSave();
/**
*@brief
*/
void slotCancel();
void slotSetDepth();//用当前编辑的曲线深度为所有计算曲线设置深度
void slotSetFun();//用当前编辑的计算公式为所有计算曲线设置公式
public:
QString FileName;
QStringList CurveNameList;
};
END_OSGGRAPHICS_NAMESPACE;

View File

@ -0,0 +1,365 @@
#pragma warning(push,0)
// #include "Family.h"
#include <QMessageBox>
#include <QObjectList>
#include <QLineEdit>
// #include "ObjectEvent.h"
#include "CurvePropertyEdit.h"
#include "ui_CurvePropertyEdit.h"
#include "CStringType.h"
#include "LogIO.h"
// #include "ObjProject.h"
#include "Well.h"
#pragma warning(pop)
using namespace pai::ios::welllog;
BEGIN_OSGGRAPHICS_NAMESPACE
extern char *DataTypea[];
extern int DataLengtha[];
CCurvePropertyEditDlg::CCurvePropertyEditDlg(QWidget * parent, Qt::WindowFlags flags)
: QWidget(parent,flags)
{
m_pUI = new Ui_CurvePropertyEdit();
m_pUI->setupUi(this);
int w=width();
int h=height();
if(NULL != parent)
{
parent->setFixedSize(w,h);
}
QObject::connect(m_pUI->okbtn, SIGNAL(clicked()), this, SLOT(slotSave()));
QObject::connect(m_pUI->cancelbtn, SIGNAL(clicked()), this, SLOT(slotCancel()));
tab1=m_pUI->PropertyTab->widget(0);
tab2=m_pUI->PropertyTab->widget(1);
m_pUI->PropertyTab->setCurrentIndex(0);
m_pUI->cancelbtn->hide();
/* QObjectList ctls=tab1->children();
QLineEdit* liedit=tab1->findChild<QLineEdit*>("lineEdit_CurveName");
liedit->setText("11");
//foreach (QObject* ctl,ctls)
//{
// if (ctl->objectName()=="lineEdit_CurveName")
// {
// QLineEdit* liedit= (QLineEdit*)(ctl);
// liedit->setText("11");
// }
//}
QObjectList ctls2=tab2->children();
foreach (QObject* ctl,ctls2)
{
if (ctl->objectName()=="lineEdit2_ArrayNum")
{
QLineEdit* liedit= (QLineEdit*)(ctl);
liedit->setText("444");
}
}*/
}
void CCurvePropertyEditDlg::init()
{
//初始化
CLogIO logio(FileName.toStdString().c_str(),(unsigned int)CLogIO::modeReadWrite);
if(!logio.mFile) return ;
int c=11;
QString str;
for(int i=0;i<c;i++) {
if(!i)str+="[";
else str+="|[";
str+=Rep_STR[i];
str+="]";
};
QRegExp regExp("[A-Z0-9]{0,100}");//正则表达式第一位数字为a-z的数字第二位为1-9的数字后边是0-2位0-9的数字
if(Type==0)
{
m_pUI->PropertyTab->setTabEnabled(1,0);
m_pUI->PropertyTab->setStyleSheet("QTabBar::tab:disabled {width: 0; color: transparent;}");
Slf_CURVE info;
int index=logio.OpenCurve(CurveName.toStdString().c_str());
if(index<0) return;
logio.GetCurveInfo(index,&info);
logio.CloseCurve(index);
QLineEdit *lineEdit_CurveName=tab1->findChild<QLineEdit*>("lineEdit_CurveName");
QLineEdit *lineEdit_CurveName_2=tab1->findChild<QLineEdit*>("lineEdit_CurveName_2");
QLineEdit *lineEdit_CurveUnit=tab1->findChild<QLineEdit*>("lineEdit_CurveUnit");
QLineEdit *lineEdit_CurveUnit_2=tab1->findChild<QLineEdit*>("lineEdit_CurveUnit_2");
QLineEdit *lineEdit_DepthUnit=tab1->findChild<QLineEdit*>("lineEdit_DepthUnit");
QLineEdit *lineEdit_DepthUnit_2=tab1->findChild<QLineEdit*>("lineEdit_DepthUnit_2");
QLineEdit *lineEdit_Sdep=tab1->findChild<QLineEdit*>("lineEdit_Sdep");
QLineEdit *lineEdit_Edep=tab1->findChild<QLineEdit*>("lineEdit_Edep");
QLineEdit *lineEdit_Rlev=tab1->findChild<QLineEdit*>("lineEdit_Rlev");
QLineEdit *lineEdit_DataType=tab1->findChild<QLineEdit*>("lineEdit_DataType");
QLineEdit *lineEdit_Min=tab1->findChild<QLineEdit*>("lineEdit_Min");
QLineEdit *lineEdit_Max=tab1->findChild<QLineEdit*>("lineEdit_Max");
QLineEdit *lineEdit_DefVal=tab1->findChild<QLineEdit*>("lineEdit_DefVal");
lineEdit_CurveName->setText((QLatin1String(info.Name)));
QRegExp regExp("[A-Z0-9]{0,100}");//正则表达式第一位数字为a-z的数字第二位为1-9的数字后边是0-2位0-9的数字
lineEdit_CurveName->setValidator(new QRegExpValidator(regExp,this));
lineEdit_CurveName_2->setText(QString::fromLocal8Bit(info.AliasName));
lineEdit_CurveName_2->setValidator(new QRegExpValidator(regExp,this));
lineEdit_CurveUnit->setText(QLatin1String(info.Unit));
lineEdit_CurveUnit->setValidator(new QRegExpValidator(regExp,this));
lineEdit_CurveUnit_2->setText(QString::fromLocal8Bit(info.AliasUnit));//(QLatin1String(info.AliasUnit));
lineEdit_CurveUnit_2->setValidator(new QRegExpValidator(regExp,this));
lineEdit_DepthUnit->setText(QLatin1String(info.DepthUnit));
lineEdit_DepthUnit->setValidator(new QRegExpValidator(regExp,this));
lineEdit_DepthUnit_2->setText(QString::fromLocal8Bit(info.DepthHZUnit));
lineEdit_DepthUnit_2->setValidator(new QRegExpValidator(regExp,this));
lineEdit_Sdep->setText(QString("%1").arg(info.StartDepth));
lineEdit_Sdep->setValidator(new QDoubleValidator(-9999999,9999999,6,this));
lineEdit_Edep->setText(QString("%1").arg(info.EndDepth));
lineEdit_Edep->setValidator(new QDoubleValidator(-9999999,9999999,6,this));
lineEdit_Rlev->setText(QString("%1").arg(info.DepLevel));
lineEdit_Rlev->setValidator(new QDoubleValidator(-9999999,9999999,6,this));
regExp=QRegExp(str);
lineEdit_DataType->setText(QLatin1String(Rep_STR[info.RepCode-1]));
lineEdit_Sdep->setValidator(new QRegExpValidator(regExp,this));
lineEdit_Min->setText(QString("%1").arg(info.MinValue));
lineEdit_Min->setValidator(new QDoubleValidator(-9999999,9999999,6,this));
lineEdit_Max->setText(QString("%1").arg(info.MaxValue));
lineEdit_Max->setValidator(new QDoubleValidator(-9999999,9999999,6,this));
lineEdit_DefVal->setText(QString("%1").arg(info.DefVal));
lineEdit_DefVal->setValidator(new QDoubleValidator(-9999999,9999999,6,this));
}
else
{
int index=logio.OpenWave(CurveName.toStdString().c_str());
if(index<0) return;
Slf_WAVE info;
logio.GetWaveInfo(index,&info);
logio.CloseWave(index);
if(info.RepCode>12) return;
QLineEdit *lineEdit_CurveName=tab1->findChild<QLineEdit*>("lineEdit_CurveName");
QLineEdit *lineEdit_CurveName_2=tab1->findChild<QLineEdit*>("lineEdit_CurveName_2");
QLineEdit *lineEdit_CurveUnit=tab1->findChild<QLineEdit*>("lineEdit_CurveUnit");
QLineEdit *lineEdit_CurveUnit_2=tab1->findChild<QLineEdit*>("lineEdit_CurveUnit_2");
QLineEdit *lineEdit_DepthUnit=tab1->findChild<QLineEdit*>("lineEdit_DepthUnit");
QLineEdit *lineEdit_DepthUnit_2=tab1->findChild<QLineEdit*>("lineEdit_DepthUnit_2");
QLineEdit *lineEdit_Sdep=tab1->findChild<QLineEdit*>("lineEdit_Sdep");
QLineEdit *lineEdit_Edep=tab1->findChild<QLineEdit*>("lineEdit_Edep");
QLineEdit *lineEdit_Rlev=tab1->findChild<QLineEdit*>("lineEdit_Rlev");
QLineEdit *lineEdit_DataType=tab1->findChild<QLineEdit*>("lineEdit_DataType");
QLineEdit *lineEdit_Min=tab1->findChild<QLineEdit*>("lineEdit_Min");
QLineEdit *lineEdit_Max=tab1->findChild<QLineEdit*>("lineEdit_Max");
QLineEdit *lineEdit_DefVal=tab1->findChild<QLineEdit*>("lineEdit_DefVal");
lineEdit_CurveName->setText((QLatin1String(info.Name)));
lineEdit_CurveName->setValidator(new QRegExpValidator(regExp,this));
lineEdit_CurveName_2->setText(QString::fromLocal8Bit(info.AliasName));
lineEdit_CurveName_2->setValidator(new QRegExpValidator(regExp,this));
lineEdit_CurveUnit->setText(QLatin1String(info.Unit));
lineEdit_CurveUnit->setValidator(new QRegExpValidator(regExp,this));
lineEdit_CurveUnit_2->setText(QString::fromLocal8Bit(info.AliasUnit));
lineEdit_CurveUnit_2->setValidator(new QRegExpValidator(regExp,this));
lineEdit_DepthUnit->setText(QLatin1String(info.DepthUnit));
lineEdit_DepthUnit->setValidator(new QRegExpValidator(regExp,this));
lineEdit_DepthUnit_2->setText(QString::fromLocal8Bit(info.DepthHZUnit));
lineEdit_DepthUnit_2->setValidator(new QRegExpValidator(regExp,this));
lineEdit_Sdep->setText(QString("%1").arg(info.StartDepth));
lineEdit_Sdep->setValidator(new QDoubleValidator(-9999999,9999999,6,this));
lineEdit_Edep->setText(QString("%1").arg(info.EndDepth));
lineEdit_Edep->setValidator(new QDoubleValidator(-9999999,9999999,6,this));
lineEdit_Rlev->setText(QString("%1").arg(info.DepLevel));
lineEdit_Rlev->setValidator(new QDoubleValidator(-9999999,9999999,6,this));
regExp=QRegExp(str);
lineEdit_DataType->setText(QLatin1String(Rep_STR[info.RepCode-1]));
lineEdit_Min->setText(QString("%1").arg(info.MinValue));
lineEdit_Min->setValidator(new QDoubleValidator(-9999999,9999999,6,this));
lineEdit_Max->setText(QString("%1").arg(info.MaxValue));
lineEdit_Max->setValidator(new QDoubleValidator(-9999999,9999999,6,this));
lineEdit_DefVal->setText(QString("%1").arg(info.DefVal));
lineEdit_DefVal->setValidator(new QDoubleValidator(-9999999,9999999,6,this));
QLineEdit *lineEdit2_Name=tab2->findChild<QLineEdit*>("lineEdit2_Name");
QLineEdit *lineEdit2_Name1=tab2->findChild<QLineEdit*>("lineEdit2_Name1");
QLineEdit *lineEdit2_Unit=tab2->findChild<QLineEdit*>("lineEdit2_Unit");
QLineEdit *lineEdit2_Unit1=tab2->findChild<QLineEdit*>("lineEdit2_Unit1");
QLineEdit *lineEdit2_Start=tab2->findChild<QLineEdit*>("lineEdit2_Start");
QLineEdit *lineEdit2_Rlev2=tab2->findChild<QLineEdit*>("lineEdit2_Rlev2");
QLineEdit *lineEdit2_ArrayNum=tab2->findChild<QLineEdit*>("lineEdit2_ArrayNum");
QLineEdit *lineEdit2_Sample=tab2->findChild<QLineEdit*>("lineEdit2_Sample");
QLineEdit *lineEdit2_SampleTotal=tab2->findChild<QLineEdit*>("lineEdit2_SampleTotal");
QComboBox *comboBox2_Type=tab2->findChild<QComboBox*>("comboBox2_Type");
comboBox2_Type->addItem(QString::fromLocal8Bit("线性刻度"));
comboBox2_Type->addItem(QString::fromLocal8Bit("对数刻度"));
comboBox2_Type->addItem(QString::fromLocal8Bit("指数刻度"));
comboBox2_Type->setCurrentIndex(0);
QObject::connect(lineEdit2_ArrayNum, SIGNAL(textChanged(const QString &)), this, SLOT(sampleChanged(const QString &)));
QObject::connect(lineEdit2_Sample, SIGNAL(textChanged(const QString &)), this, SLOT(arrayChanged(const QString &)));
QRegExp regExp("[A-Za-z0-9]{0,100}");//正则表达式第一位数字为a-z的数字第二位为1-9的数字后边是0-2位0-9的数字
lineEdit2_Name->setText(QLatin1String(info.TimeName));
lineEdit2_Name->setValidator(new QRegExpValidator(regExp,this));
lineEdit2_Name1->setText(QString::fromLocal8Bit(info.TimeHZName));
lineEdit2_Name1->setValidator(new QRegExpValidator(regExp,this));
lineEdit2_Unit->setText(QLatin1String(info.TimeUnit));
lineEdit2_Unit->setValidator(new QRegExpValidator(regExp,this));
lineEdit2_Unit1->setText(QString::fromLocal8Bit(info.TimeHZUnit));
lineEdit2_Unit1->setValidator(new QRegExpValidator(regExp,this));
lineEdit2_Start->setText(QString("%1").arg(info.StartTime));
lineEdit2_Start->setValidator(new QDoubleValidator(-9999999,9999999,6,this));
lineEdit2_Rlev2->setText(QString("%1").arg(info.TimeLevel));
lineEdit2_Rlev2->setValidator(new QDoubleValidator(-9999999,9999999,6,this));
lineEdit2_ArrayNum->setText(QString("%1").arg(info.ArrayNum));
lineEdit2_ArrayNum->setValidator(new QIntValidator(0,9999999,this));
lineEdit2_Sample->setText(QString("%1").arg(info.TimeSamples));
lineEdit2_Sample->setValidator(new QIntValidator(0,9999999,this));
lineEdit2_SampleTotal->setText(QString("%1").arg(info.TimeSamples));
lineEdit2_SampleTotal->setValidator(new QIntValidator(0,99999999,this));
}
logio.Close();
}
void CCurvePropertyEditDlg::sampleChanged(const QString &str)
{
QLineEdit *lineEdit2_Sample=tab2->findChild<QLineEdit*>("lineEdit2_Sample");
QLineEdit *lineEdit2_SampleTotal=tab2->findChild<QLineEdit*>("lineEdit2_SampleTotal");
int TotalSample=lineEdit2_SampleTotal->text().toInt();
int mSample=lineEdit2_Sample->text().toInt();
if(TotalSample==0)return;
int arrayNum=str.toInt();
int sample=TotalSample;
if(sample!=TotalSample)
{
QMessageBox::warning(NULL,"提示","阵列数不是总元素个数的公约数,请重新输入");
QLineEdit *lineEdit2_ArrayNum=tab2->findChild<QLineEdit*>("lineEdit2_ArrayNum");
lineEdit2_ArrayNum->setText(QString::number(TotalSample/mSample));
}
else lineEdit2_Sample->setText(QString::number(sample));
}
void CCurvePropertyEditDlg::arrayChanged(const QString &str)
{
QLineEdit *lineEdit2_ArrayNum=tab2->findChild<QLineEdit*>("lineEdit2_ArrayNum");
QLineEdit *lineEdit2_SampleTotal=tab2->findChild<QLineEdit*>("lineEdit2_SampleTotal");
int TotalSample=lineEdit2_SampleTotal->text().toInt();
int mArrayNum=lineEdit2_ArrayNum->text().toInt();
if(TotalSample==0)return;
int sample=str.toInt();
int arrayNum=TotalSample/sample;
if(arrayNum*sample!=TotalSample)
{
QMessageBox::warning(this,"提示","您所输入的元素个数不是总元素个数的公约数,请重新输入");
QLineEdit *lineEdit2_Sample=tab2->findChild<QLineEdit*>("lineEdit2_Sample");
lineEdit2_Sample->setText(QString::number(TotalSample/mArrayNum));
}
else lineEdit2_ArrayNum->setText(QString::number(arrayNum));
}
void CCurvePropertyEditDlg::slotSave()
{
QLineEdit *lineEdit_CurveName=tab1->findChild<QLineEdit*>("lineEdit_CurveName");
QString Name=lineEdit_CurveName->text();
CLogIO logio(FileName.toStdString().c_str(),(unsigned int)CLogIO::modeReadWrite);
if(Name!=CurveName)
{
if(logio.FindObjectIndex(Name.toStdString().c_str())>=0)
{
QMessageBox::warning(this,"警告!","名称不能重复!");
return;
}
}
Slf_FILE_MESSAGE ms;
logio.GetFileMessage(ms);
if(Type==0)
{
Slf_CURVE info;
int index=logio.OpenCurve(CurveName.toStdString().c_str());
if(index<0) {
return;
}
logio.GetCurveInfo(index,&info);
QLineEdit *lineEdit_CurveName=tab1->findChild<QLineEdit*>("lineEdit_CurveName");
QLineEdit *lineEdit_CurveName_2=tab1->findChild<QLineEdit*>("lineEdit_CurveName_2");
QLineEdit *lineEdit_CurveUnit=tab1->findChild<QLineEdit*>("lineEdit_CurveUnit");
QLineEdit *lineEdit_CurveUnit_2=tab1->findChild<QLineEdit*>("lineEdit_CurveUnit_2");
QLineEdit *lineEdit_DepthUnit=tab1->findChild<QLineEdit*>("lineEdit_DepthUnit");
QLineEdit *lineEdit_DepthUnit_2=tab1->findChild<QLineEdit*>("lineEdit_DepthUnit_2");
QLineEdit *lineEdit_DefVal=tab1->findChild<QLineEdit*>("lineEdit_DefVal");
strcpy(info.Name,lineEdit_CurveName->text().toStdString().c_str());
strcpy(info.AliasName,lineEdit_CurveName_2->text().toStdString().c_str());
//汉字写回去不对了呀??????
strcpy(info.Unit,lineEdit_CurveUnit->text().toStdString().c_str());
strcpy(info.AliasUnit,lineEdit_CurveUnit_2->text().toStdString().c_str());
strcpy(info.DepthUnit,lineEdit_DepthUnit->text().toStdString().c_str());
strcpy(info.DepthHZUnit,lineEdit_DepthUnit_2->text().toStdString().c_str());
info.DefVal=lineEdit_DefVal->text().toFloat();
logio.SetCurveInfo(index,&info);
logio.CloseCurve(index);
}
else
{
int index=logio.OpenWave(CurveName.toStdString().c_str());
if(index<0) return;
Slf_WAVE info;
logio.GetWaveInfo(index,&info);
QLineEdit *lineEdit_CurveName=tab1->findChild<QLineEdit*>("lineEdit_CurveName");
QLineEdit *lineEdit_CurveName_2=tab1->findChild<QLineEdit*>("lineEdit_CurveName_2");
QLineEdit *lineEdit_CurveUnit=tab1->findChild<QLineEdit*>("lineEdit_CurveUnit");
QLineEdit *lineEdit_CurveUnit_2=tab1->findChild<QLineEdit*>("lineEdit_CurveUnit_2");
QLineEdit *lineEdit_DepthUnit=tab1->findChild<QLineEdit*>("lineEdit_DepthUnit");
QLineEdit *lineEdit_DepthUnit_2=tab1->findChild<QLineEdit*>("lineEdit_DepthUnit_2");
QLineEdit *lineEdit_DefVal=tab1->findChild<QLineEdit*>("lineEdit_DefVal");
strcpy(info.Name,lineEdit_CurveName->text().toStdString().c_str());
strcpy(info.AliasName,lineEdit_CurveName_2->text().toStdString().c_str());
strcpy(info.Unit,lineEdit_CurveUnit->text().toStdString().c_str());
strcpy(info.AliasUnit,lineEdit_CurveUnit_2->text().toStdString().c_str());
strcpy(info.DepthUnit,lineEdit_DepthUnit->text().toStdString().c_str());
strcpy(info.DepthHZUnit,lineEdit_DepthUnit_2->text().toStdString().c_str());
info.DefVal=lineEdit_DefVal->text().toFloat();
QLineEdit *lineEdit2_Name=tab2->findChild<QLineEdit*>("lineEdit2_Name");
QLineEdit *lineEdit2_Name1=tab2->findChild<QLineEdit*>("lineEdit2_Name1");
QLineEdit *lineEdit2_Unit=tab2->findChild<QLineEdit*>("lineEdit2_Unit");
QLineEdit *lineEdit2_Unit1=tab2->findChild<QLineEdit*>("lineEdit2_Unit1");
QLineEdit *lineEdit2_Start=tab2->findChild<QLineEdit*>("lineEdit2_Start");
QLineEdit *lineEdit2_Rlev2=tab2->findChild<QLineEdit*>("lineEdit2_Rlev2");
QLineEdit *lineEdit2_ArrayNum=tab2->findChild<QLineEdit*>("lineEdit2_ArrayNum");
QLineEdit *lineEdit2_Sample=tab2->findChild<QLineEdit*>("lineEdit2_Sample");
QLineEdit *lineEdit2_SampleTotal=tab2->findChild<QLineEdit*>("lineEdit2_SampleTotal");
QComboBox *comboBox2_Type=tab2->findChild<QComboBox*>("comboBox2_Type");
strcpy(info.TimeName,lineEdit2_Name->text().toStdString().c_str());
strcpy(info.TimeHZName,lineEdit2_Name1->text().toStdString().c_str());
strcpy(info.TimeUnit,lineEdit2_Unit->text().toStdString().c_str());
strcpy(info.TimeHZUnit,lineEdit2_Unit1->text().toStdString().c_str());
info.StartTime=lineEdit2_Start->text().toFloat();
info.TimeLevel=lineEdit2_Rlev2->text().toFloat();
info.ArrayNum=lineEdit2_ArrayNum->text().toInt();
info.TimeSamples=lineEdit2_Sample->text().toInt();
logio.SetWaveInfo(index,&info);
logio.CloseWave(index);
}
logio.Close();
// GetObjectEvent().OnDeAttchData(FileName,CurveName);
// GetObjectEvent().OnRefreshData(FileName,CurveName);
if(Name!=CurveName)
{
QStringList NodeNames;
NodeNames.push_back(ms.WellName);
NodeNames.push_back(FileName);
NodeNames.push_back(CurveName);
NodeNames.push_back(Name);
// PaiObject::m_EventAgent.ObjectPropertyChanged(GetProject(),"CurvePropertyEdit",NodeNames);
}
QMessageBox::information(this,"提示","保存成功!");
//accept();
}
/**
*@brief
*/
void CCurvePropertyEditDlg::slotCancel()
{
//reject ();
}
void CCurvePropertyEditDlg::closeEvent(QCloseEvent *)
{
emit signalsCloseed();
//throw std::logic_error("The method or operation is not implemented.");
}
END_OSGGRAPHICS_NAMESPACE

View File

@ -0,0 +1,50 @@

#pragma warning(push,0)
#include <cassert>
#include <QWidget>
#include <QDialog>
#include "ConsoleOutputWidget.h"
#include "ui_CurvePropertyEdit.h"
#include "OSGFramework.h"
#pragma warning(pop)
BEGIN_OSGGRAPHICS_NAMESPACE
/**
* @brief
*/
class CCurvePropertyEditDlg : public QWidget
{
Q_OBJECT
public:
CCurvePropertyEditDlg(QWidget * parent=0, Qt::WindowFlags flags=0);
~CCurvePropertyEditDlg()
{
if(m_pUI) delete m_pUI;
}
Ui_CurvePropertyEdit *m_pUI;
void init();
signals:
void signalsCloseed();
private slots:
/**
*@brief
*/
void slotSave();
/**
*@brief */
void slotCancel();
void sampleChanged(const QString &);
void arrayChanged(const QString &);
virtual void closeEvent(QCloseEvent *);
public:
QString FileName;//slf文件名
QString CurveName;//曲线名
int Type;//曲线类型0-曲线1-波列
QWidget* tab1;
QWidget* tab2;
};
END_OSGGRAPHICS_NAMESPACE;

View File

@ -14,17 +14,17 @@
// #include "ObjWellLogTABLE.h"
// #include "CreateNewCurveDlg.h"
//#include "TableTBCurve.h"
// #include "CurvePropertyEdit.h"
#include "CurvePropertyEdit.h"
#include "cdialog.h"//"MyListDlg.h"
// #include "curvecomputerDlg.h"
#include "CurveComputerDlg.h"
// #include "UnitConvertDlg.h"
// #include "StatisticsDlg.h"
// #include "Statistics2Dlg.h"
// #include "CurveComputePage.h"
#include "StatisticsDlg.h"
#include "Statistics2Dlg.h"
#include "CurveComputePage.h"
// #include "CopyObjectDlg.h"
// #include "WaveComposeDlg.h"//2020.4.14 合成阵列曲线
// #include "ShowWave.h"//波列曲线预览
// #include "ShowCurve.h"//2020.5.12常规曲线预览
#include "ShowWave.h"//波列曲线预览
#include "ShowCurve.h"//2020.5.12常规曲线预览
#include <QEventLoop>
// #include "tableproeditdlg.h"
#include "CreateNewTableDlg.h"
@ -709,89 +709,89 @@ void CDataManagger::dataInTable(int curitemType,QString& showWellName,QString& w
if(BadlistFiles.size()!=1)return;
execInDefTable(curitemType,showWellName,wellFileName,BadlistFiles.at(0));//加载自由数据表
}
// //曲线数值统计
// void CDataManagger::DataStatistics(int Type,const QString& FileName,const QString& CurveName)
// {
// CLogIO logio(FileName.toStdString().c_str(),(unsigned int)CLogIO::modeReadWrite);
// if(!logio.mFile) return ;
// Slf_CURVE info;
// int index=logio.OpenChannel(CurveName.toStdString().c_str());
// if(index<0)return;
// logio.CloseChannel(index);
// logio.Close();
// if(!Type)
// {
// CStatisticsDlg *pDlg=new CStatisticsDlg();
// pDlg->FileName=FileName;
// pDlg->CurveName=CurveName;
// pDlg->init();
// //pDlg->exec();
// //delete pDlg;
// //pDlg=NULL;
// }
// else
// {
// CStatistics2Dlg *pDlg=new CStatistics2Dlg();
// pDlg->FileName=FileName;
// pDlg->CurveName=CurveName;
// pDlg->init();
// //pDlg->exec();
// //delete pDlg;
// //pDlg=NULL;
// }
// }
//曲线数值统计
void CDataManagger::DataStatistics(int Type,const QString& FileName,const QString& CurveName)
{
CLogIO logio(FileName.toStdString().c_str(),(unsigned int)CLogIO::modeReadWrite);
if(!logio.mFile) return ;
Slf_CURVE info;
int index=logio.OpenChannel(CurveName.toStdString().c_str());
if(index<0)return;
logio.CloseChannel(index);
logio.Close();
if(!Type)
{
CStatisticsDlg *pDlg=new CStatisticsDlg();
pDlg->FileName=FileName;
pDlg->CurveName=CurveName;
pDlg->init();
//pDlg->exec();
//delete pDlg;
//pDlg=NULL;
}
else
{
CStatistics2Dlg *pDlg=new CStatistics2Dlg();
pDlg->FileName=FileName;
pDlg->CurveName=CurveName;
pDlg->init();
//pDlg->exec();
//delete pDlg;
//pDlg=NULL;
}
}
// void CDataManagger::DataStatistics(int Type,
// const QString& FileName,
// const QString& CurveName,
// QWidget* parent)
// {
void CDataManagger::DataStatistics(int Type,
const QString& FileName,
const QString& CurveName,
QWidget* parent)
{
// CLogIO logio(FileName.toStdString().c_str(),(unsigned int)CLogIO::modeReadWrite);
// if(!logio.mFile) return ;
// Slf_CURVE info;
// int index=logio.OpenChannel(CurveName.toStdString().c_str());
// if(index<0)return;
// logio.CloseChannel(index);
// logio.Close();
// if(!Type)
// {
CLogIO logio(FileName.toStdString().c_str(),(unsigned int)CLogIO::modeReadWrite);
if(!logio.mFile) return ;
Slf_CURVE info;
int index=logio.OpenChannel(CurveName.toStdString().c_str());
if(index<0)return;
logio.CloseChannel(index);
logio.Close();
if(!Type)
{
// CStatisticsDlg *pDlg1=parent->findChild<CStatisticsDlg*>("statView");
// if(NULL == pDlg1 )
// {
// pDlg1=new CStatisticsDlg(parent,0);
// pDlg1->setObjectName("statView");
// }
CStatisticsDlg *pDlg1=parent->findChild<CStatisticsDlg*>("statView");
if(NULL == pDlg1 )
{
pDlg1=new CStatisticsDlg(parent,0);
pDlg1->setObjectName("statView");
}
// /* int width=parent->width();
// int height=parent->height();
// pDlg->resize(QSize(width,height));*/
// pDlg1->FileName=FileName;
// pDlg1->CurveName=CurveName;
// pDlg1->init();
// pDlg1->show();
// //pDlg->exec();
// //delete pDlg;
// //pDlg=NULL;
// }
// //whp add 2020.5.11 for 波列数据编辑和管理 波列曲线数值统计
// else
// {
/* int width=parent->width();
int height=parent->height();
pDlg->resize(QSize(width,height));*/
pDlg1->FileName=FileName;
pDlg1->CurveName=CurveName;
pDlg1->init();
pDlg1->show();
//pDlg->exec();
//delete pDlg;
//pDlg=NULL;
}
//whp add 2020.5.11 for 波列数据编辑和管理 波列曲线数值统计
else
{
// CStatistics2Dlg *pDlg2=parent->findChild<CStatistics2Dlg*>("stat2View");
// if(NULL == pDlg2 )
// {
// pDlg2=new CStatistics2Dlg(parent,0);
// pDlg2->setObjectName("stat2View");
// }
CStatistics2Dlg *pDlg2=parent->findChild<CStatistics2Dlg*>("stat2View");
if(NULL == pDlg2 )
{
pDlg2=new CStatistics2Dlg(parent,0);
pDlg2->setObjectName("stat2View");
}
// pDlg2->FileName=FileName;
// pDlg2->CurveName=CurveName;
// pDlg2->init();
// pDlg2->show();
// }
// }
pDlg2->FileName=FileName;
pDlg2->CurveName=CurveName;
pDlg2->init();
pDlg2->show();
}
}
// //whp add 2020.4.9 for 波列曲线预览
// void CDataManagger::DisplayWave(const QString& FileName,const QString& WaveName)
// {
@ -839,51 +839,51 @@ void CDataManagger::dataInTable(int curitemType,QString& showWellName,QString& w
// pDlg->init();
// pDlg->show();
// }
// void CDataManagger::CurvePropertyEdit(int Type,
// const QString& FileName,
// const QString& CurveName,
// QWidget* parent)
// {
void CDataManagger::CurvePropertyEdit(int Type,
const QString& FileName,
const QString& CurveName,
QWidget* parent)
{
// CCurvePropertyEditDlg *pDlg=new CCurvePropertyEditDlg(parent,0);
// connect(pDlg,SIGNAL(destroyed()),this,SLOT(slotCurvePropertyGc()));
// pDlg->FileName=FileName;
// pDlg->CurveName=CurveName;
// pDlg->Type=Type;
// pDlg->init();
// pDlg->show();
CCurvePropertyEditDlg *pDlg=new CCurvePropertyEditDlg(parent,0);
connect(pDlg,SIGNAL(destroyed()),this,SLOT(slotCurvePropertyGc()));
pDlg->FileName=FileName;
pDlg->CurveName=CurveName;
pDlg->Type=Type;
pDlg->init();
pDlg->show();
// }
}
// void CDataManagger::CurveCompute(const QString& FileName,
// const QStringList& CurveNameList,
// QWidget* parent)
// {
void CDataManagger::CurveCompute(const QString& FileName,
const QStringList& CurveNameList,
QWidget* parent)
{
// if(CurveNameList.count()==1)
// {
// CurveComputePage *pPage=parent->findChild<CurveComputePage*>("computeV");
// if(NULL == pPage)
// {
// pPage=new CurveComputePage(parent);
// pPage->setObjectName("computeV");
// }
// connect(pPage,SIGNAL(signalCompute(QStringList)),this,SLOT(slotCurveComputeGc(QStringList)));
// pPage->CurveCompute(FileName,CurveNameList);
// pPage->init();
// pPage->show();
// }
//else
//{
// CCurveComputerDlg *pDlg=new CCurveComputerDlg();
// pDlg->FileName=FileName;
// pDlg->CurveNameList=CurveNameList;
// pDlg->init();//FileName, CurveNameList);
// //pDlg->exec();
// //delete pDlg;
// //pDlg=NULL;
//}
// }
if(CurveNameList.count()==1)
{
CurveComputePage *pPage=parent->findChild<CurveComputePage*>("computeV");
if(NULL == pPage)
{
pPage=new CurveComputePage(parent);
pPage->setObjectName("computeV");
}
connect(pPage,SIGNAL(signalCompute(QStringList)),this,SLOT(slotCurveComputeGc(QStringList)));
pPage->CurveCompute(FileName,CurveNameList);
pPage->init();
pPage->show();
}
else
{
CCurveComputerDlg *pDlg=new CCurveComputerDlg();
pDlg->FileName=FileName;
pDlg->CurveNameList=CurveNameList;
pDlg->init();//FileName, CurveNameList);
//pDlg->exec();
//delete pDlg;
//pDlg=NULL;
}
}
void CDataManagger::slotCurveComputeGc(QStringList listCurveNames)
{
@ -1870,60 +1870,60 @@ void CDataManagger::accept1()
// }
// }
// void CDataManagger::CallDisplayWaveOrCurve(int Type, const QString& FileName,
// const QString& CurveName, QWidget* parent)
// {
// CLogIO *logio=new CLogIO();
// if(!logio->Open(FileName.toStdString().c_str(),CSlfIO::modeRead))
// {
// delete logio;
// QMessageBox::warning(NULL,"提示","打开文件"+FileName+"错误");
// return ;
// }
void CDataManagger::CallDisplayWaveOrCurve(int Type, const QString& FileName,
const QString& CurveName, QWidget* parent)
{
CLogIO *logio=new CLogIO();
if(!logio->Open(FileName.toStdString().c_str(),CSlfIO::modeRead))
{
delete logio;
QMessageBox::warning(NULL,"提示","打开文件"+FileName+"错误");
return ;
}
// //常规曲线
// if (Type == 0)
// {
// int index=logio->OpenCurve(CurveName.toStdString().c_str());
// if(index<0) {
// delete logio;
// return;
// }
// logio->CloseCurve(index);
// delete logio;
// ShowCurve *pDlg=parent->findChild<ShowCurve*>("curveView");
// if(NULL == pDlg)
// {
// pDlg=new ShowCurve(parent);
// pDlg->setObjectName("curveView");
// }
// pDlg->FileName=FileName;
// pDlg->CurveName=CurveName;
// pDlg->init();
// pDlg->show();
// //波列 1
// }else
// {
// int index=logio->OpenWave(CurveName.toStdString().c_str());
// if(index<0) {
// delete logio;
// return;
// }
// logio->CloseWave(index);
// delete logio;
// ShowWave *pDlgwage=parent->findChild<ShowWave*>("waveView");
// if(NULL == pDlgwage)
// {
// pDlgwage=new ShowWave(parent);
// pDlgwage->setObjectName("waveView");
// }
// pDlgwage->FileName=FileName;
// pDlgwage->WaveName=CurveName;
// pDlgwage->init();
// pDlgwage->show();
// }
//常规曲线
if (Type == 0)
{
int index=logio->OpenCurve(CurveName.toStdString().c_str());
if(index<0) {
delete logio;
return;
}
logio->CloseCurve(index);
delete logio;
ShowCurve *pDlg=parent->findChild<ShowCurve*>("curveView");
if(NULL == pDlg)
{
pDlg=new ShowCurve(parent);
pDlg->setObjectName("curveView");
}
pDlg->FileName=FileName;
pDlg->CurveName=CurveName;
pDlg->init();
pDlg->show();
//波列 1
}else
{
int index=logio->OpenWave(CurveName.toStdString().c_str());
if(index<0) {
delete logio;
return;
}
logio->CloseWave(index);
delete logio;
ShowWave *pDlgwage=parent->findChild<ShowWave*>("waveView");
if(NULL == pDlgwage)
{
pDlgwage=new ShowWave(parent);
pDlgwage->setObjectName("waveView");
}
pDlgwage->FileName=FileName;
pDlgwage->WaveName=CurveName;
pDlgwage->init();
pDlgwage->show();
}
// }
}
// void CDataManagger::CallDisplayCurveVerChange(int Type, const QString& FileName,
// const QString& CurveName, QWidget* parent, int value, float tipValue)

View File

@ -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){

File diff suppressed because it is too large Load Diff

155
DataMgr/src/DrawCurveView.h Normal file
View File

@ -0,0 +1,155 @@
#ifndef DRAWCURVEVIEW_H
#define DRAWCURVEVIEW_H
#include <QWidget>
#include <QPaintEvent>
#include "qpushbutton.h"
#include "DataManagger.h"
#include "SmoothTool.h"
#include "AngleAdjTool.h"
#include "editEnd.h"
//视图边距
#define D_VIEW_MARGIN_LEFT 80//左、下边界
#define D_VIEW_MARGIN_BOTTOM 30//左、下边界
#define D_VIEW_MARGIN_RIGHT 40//右、上边界
#define D_VIEW_MARGIN_TOP 25//上边界
class DrawCurveView : public QWidget
{
Q_OBJECT
public:
explicit DrawCurveView(QWidget *parent = nullptr);
~DrawCurveView();
void initView();
void setValues(float *values);
void setCount(int count);
signals:
void enableEditButtons();
void unableEditButtons();
void R2L();
void verticalSliderUP();
void verticalSliderDOWN();
void editModeTips();
public slots:
void editIfBegin_Slot();
void smoothWin_Slot();
void finishEdit_SLOT();
void AngAdjWin_SLOT();
void overEditSave();
private slots:
void receiveSmoothData(float sd, float ed, int mode, int cal, int count);
void cancelSmoothEdit();
void saveSmooth_SLOT(int);
void receiveAngleData(float,float,float,float,float);
void cancelAngleEdit();
void continueEditNoSave_SLOT();
protected:
virtual void paintEvent(QPaintEvent *evt);
virtual void mouseMoveEvent(QMouseEvent *event);
virtual void mousePressEvent(QMouseEvent *event);
virtual void mouseReleaseEvent(QMouseEvent *event);
virtual void wheelEvent(QWheelEvent *event);
private:
//绘制坐标
void drawCoord(QPainter *painter);
//波列数据转换为图像坐标
QPointF coordCurvePoint(int ix,float value);
//绘制波列数据点
void drawDataPoints(QPainter *painter);
//绘制鼠标位置线
void drawMousePosLine(QPainter *painter);
//绘制鼠标单点
void usevalueDrawPoint(QPainter *painter);
//曲线操作
void initCurveViewQMenu();
void initCurveEditQMenu();
//获取当前鼠标位置的曲线下标
int calMousePoint();
//绘制编辑模式提示字符
void drawEditTishi(QPainter *painter);
void editIfBegin();
void initEditPart();//初始化编辑块
void initeditIndex();
void oriCur2Edit();//载入原有曲线
void drawEditLine(QPainter *painter);//绘制编辑曲线
void genEditLine();//生成编辑曲线
void changeEditStrValue(int temp);//单回合编辑中更新起始编辑点
void sortEdit();//顺序
bool saveEdit(int Smooth);//保存编辑
void overEdit();//结束编辑
void AngAdjWin();
void smoothWin();
bool isIneditRange(int);
private:
bool press_noRelease_mode; //点下未抬起状态
int press_noRelease_point; //点下未抬起状态下鼠标位置
float *m_values;
int m_count;
bool isInit;
float m_width;
float m_height;
QPoint lastPos;
QPoint frontPos;
QList<float> underBarHeight;
editEnd *msgBox2;
bool editLock;
bool ifContinue;//继续编辑标
int pressPoint, releasePoint;//记录修改上下界
int pressEdit,releaseEdit,curEdit,tempCurEdit; //编辑范围
int lastEditPos,editIndexNum;
int tempPEdit,tempREdit;//备份
float *editValue, *tempEditValue;//编辑值
int *editIndex;//有编辑过的index
int editStrValue, onceEditNum;//编辑起始位置,单次编辑量
int *onceEditIndex;//单次修改index记录
bool hasSelect;//选中区域标识
int whichMode;
bool EditMode;
SmoothTool *sTool;
AngleAdjTool *angTool;
float mouseDrawDepth, mouseDrawValue;//实时记录鼠标所在深度及数值
QPoint tishiEdit;
float tishiEditTime;
public:
QString fileName, curveName;
int PageSize,CurrentPos,userPos;
float userCurrentPos;
float userCurrentValue;
QRect rthy,rthy1,rthyt;
float factor;
float m_Xmin,m_Xmax;
float sdep,edep,rlev;
public:
void button_editIfBegin();
void button_smoothWin();
void button_AngAdjWin();
};
#endif // DRAWCURVEVIEW_H

View File

@ -0,0 +1,208 @@
#include "DrawWaveView.h"
#include <QPainter>
#include <QLine>
#include <qfontmetrics.h>
#include <QPainter>
DrawWaveView::DrawWaveView(QWidget *parent) : QWidget(parent),isInit(false)
{
m_values=NULL;
setYGrid(m_yGrid);
}
void DrawWaveView::paintEvent(QPaintEvent *evt)
{
if(m_count > 0)
{
QPainter paint;
paint.begin(this);
paint.setBrush(Qt::white);
paint.drawRect(rect());
paint.save();
QPen pen(Qt::red);//lightGray);
pen.setStyle(Qt::SolidLine);
pen.setWidth(2);
paint.setPen(pen);
//int y1=rect().bottom(),y2=rect().top();
//paint.drawLine(rect().left()+5,rect().top()+5,rect().right()-5,rect().top()+5);
drawCoord(&paint);
drawHorlines(&paint);
drawVerLines(&paint);
// pen.setWidth(2);
pen.setColor(Qt::darkGray);
paint.setPen(pen);
drawDataPoints(&paint);
paint.restore();
paint.end();
}
}
void DrawWaveView::initView()
{
int width=this->width();
int height=this->height();
m_width=width-D_VIEW_MARGIN_LEFT-D_VIEW_MARGIN_RIGHT;
m_height=height-D_VIEW_MARGIN_BOTTOM-D_VIEW_MARGIN_TOP;
if(0 >= width || 0 >= height )
{
isInit=false;
}else
{
isInit=true;
}
}
void DrawWaveView::drawCoord(QPainter *painter)
{
if(!isInit )
{
return;
}
m_vGridHeight=m_height/(float)m_yGrid;
m_hGridWidth=m_width/(float)m_xGrid;
float rangeX= m_Xmax-m_Xmin;
float rangeY=m_Ymax-m_Ymin;
m_xGridValue=rangeX/m_xGrid;
m_yGridValue=rangeY/m_yGrid;
// m_pixXValue=m_hGridWidth/m_xGridValue*(rangeX/(m_count-0));
// m_pixYValue=m_vGridHeight/m_yGridValue;
}
void DrawWaveView::drawHorlines(QPainter *painter)
{
QVector<QLine> lsLines;
float offsetY=D_VIEW_MARGIN_TOP;
int fontWidth=0;
int fontHeight=0;
float offsetYValue=m_Ymin;
QString horText;
QFontMetrics metrics(this->font());
QPoint point;
painter->setPen(Qt::black);
for(int i=0;i<=m_yGrid;i++)
{
lsLines<<QLine(D_VIEW_MARGIN_LEFT,m_height+offsetY,D_VIEW_MARGIN_LEFT+m_width,m_height+offsetY);
horText=QString::number(offsetYValue);
fontWidth=metrics.width(horText);
fontHeight=metrics.height();
//绘制垂直坐标文本
//if( i > 0 )
{
point.setX(D_VIEW_MARGIN_LEFT-fontWidth*1.1);
point.setY(m_height+offsetY+fontHeight/2.);
painter->drawText(point,horText);
}
offsetY-=m_vGridHeight;
offsetYValue+=m_yGridValue;
}
painter->setPen(Qt::lightGray);
painter->drawLines(lsLines);
}
void DrawWaveView::drawVerLines(QPainter *painter)
{
QVector<QLine> lsLines;
float offsetX=0;
QString verText;
int fontHeight=0;
int fontWidth=0;
float offsetXValue=m_Xmin;
QFontMetrics metrics(this->font());
QPoint point;
painter->setPen(Qt::black);
for(int i=0;i<=m_xGrid;i++)
{
offsetX=i*m_hGridWidth;//m_xGridValue*m_width/(m_count-0);
offsetXValue=m_Xmin+i*m_xGridValue;
//if(offsetX>m_width)offsetX=m_width;
lsLines<<QLine(D_VIEW_MARGIN_LEFT+offsetX,D_VIEW_MARGIN_TOP,D_VIEW_MARGIN_LEFT+offsetX,m_height+D_VIEW_MARGIN_TOP);
fontHeight=metrics.height();
verText=QString::number(offsetXValue);
fontWidth=metrics.width(verText);
//绘制水平坐标文本
//if( i>0 )
{
point.setX(D_VIEW_MARGIN_LEFT+offsetX-fontWidth/2.);
point.setY(D_VIEW_MARGIN_TOP+fontHeight*1.1+m_height);
painter->drawText(point,verText);
}
//offsetX+=m_hGridWidth;
//offsetXValue+=m_xGridValue;
}
painter->setPen(Qt::lightGray);
painter->drawLines(lsLines);
}
QPointF DrawWaveView::coordWavePoint(int ix,float value)
{
float x=D_VIEW_MARGIN_LEFT+ix*m_width/(m_count-0);//m_pixXValue*ix;
//x=i*width/(points-1)
float y=D_VIEW_MARGIN_TOP+m_height*((m_Ymax-value)/(m_Ymax-m_Ymin));//m_pixYValue*(value-m_Ymin);
return QPoint(x,y);
}
void DrawWaveView::setValues(float *values)
{
if(NULL != m_values)
{
m_values=NULL;
}
m_values=values;
}
void DrawWaveView::setCount(int count)
{
m_count=count;
}
void DrawWaveView::setTime(int time)
{
m_time=time;
}
void DrawWaveView::setXGrid(int xGrid)//X轴网格数
{
m_xGrid=xGrid;
}
void DrawWaveView::setYGrid(int yGrid)//Y轴网格数
{
m_yGrid=yGrid;
}
void DrawWaveView::drawDataPoints(QPainter *painter)
{
float value=0;
QPolygonF polygon;
QPointF *points=new QPointF[m_count];
for(int i=0;i<m_count;i++)
{
value= m_values[i];
points[i]=coordWavePoint(i,value);
// painter->drawText(points[i],QString::number(value));
polygon<<points[i];
}
painter->setPen(Qt::darkBlue);
painter->drawPolyline(points,m_count);
painter->setBrush(Qt::red);
painter->drawEllipse(points[m_time],5,5);
//painter->drawText(points[m_time],"*");//QString::number(m_values[m_time]));
//painter->drawPolygon(polygon);
}

View File

@ -0,0 +1,70 @@
#ifndef DRAWWAVEVIEW_H
#define DRAWWAVEVIEW_H
#include <QWidget>
#include <QPaintEvent>
//水平线条数
#define D_HOR_LIENS 4//5
//垂直线条数
#define D_VER_LINES 8//10
//视图边距
#define D_VIEW_MARGIN_LEFT 80//左、下边界
#define D_VIEW_MARGIN_BOTTOM 30//左、下边界
#define D_VIEW_MARGIN_RIGHT 40//右、上边界
#define D_VIEW_MARGIN_TOP 25//上边界
class DrawWaveView : public QWidget
{
Q_OBJECT
public:
explicit DrawWaveView(QWidget *parent = nullptr);
//QRect widgetRec;
float m_Ymax,m_Ymin;
float m_Xmin,m_Xmax;
void initView();
void setValues(float *values);
void setCount(int count);
void setTime(int time);
void setXGrid(int xGrid);//X轴网格数
void setYGrid(int yGrid);//Y轴网格数
signals:
public slots:
// QWidget interface
protected:
virtual void paintEvent(QPaintEvent *evt);
private:
//绘制坐标
void drawCoord(QPainter *painter);
//绘制水平网格
void drawHorlines(QPainter *painter);
//绘制垂直网格
void drawVerLines(QPainter *painter);
//波列数据转换为图像坐标
QPointF coordWavePoint(int ix,float value);
//绘制波列数据点
void drawDataPoints(QPainter *painter);
private:
float *m_values;
int m_count;
int m_time;
int m_xGrid,m_yGrid;
bool isInit;
float m_xGridValue;
float m_yGridValue;
float m_hGridWidth;
float m_vGridHeight;
float m_width;
float m_height;
float m_pixXValue;
float m_pixYValue;
};
#endif // DRAWWAVEVIEW_H

View File

@ -0,0 +1,169 @@
#include "SmoothTool.h"
#include "ui_SmoothTool.h"
#include "qstring.h"
#include <qpushbutton.h>
SmoothTool::SmoothTool(QDialog *parent) :
QDialog(parent),
Sm_UI(new Ui::SmoothTool)
{
Sm_UI->setupUi(this);
setWindowFlags(windowFlags()& ~Qt::WindowMaximizeButtonHint);
setFixedSize(this->width(), this->height());
this->setWindowFlags(this->windowFlags() |Qt::Dialog);
this->setWindowModality(Qt::ApplicationModal);
connect(Sm_UI->pushButton, SIGNAL(clicked()), this, SLOT(acceptSmooth_SLOT()));
connect(Sm_UI->pushButton_2, SIGNAL(clicked()), this, SLOT(reject()));
connect(Sm_UI->pushButton_2, SIGNAL(clicked()), this, SLOT(rejectSmooth_SLOT()));
mode = 0;
cal = 0;
Sm_UI->radioButtonSm3->setChecked(true);
Sm_UI->radioButtonJ->setChecked(true);
connect(Sm_UI->radioButtonSm3, SIGNAL(toggled(bool)), this, SLOT(Sm3_SLOT(bool)));
connect(Sm_UI->radioButtonSm5, SIGNAL(toggled(bool)), this, SLOT(Sm5_SLOT(bool)));
connect(Sm_UI->radioButtonSm7, SIGNAL(toggled(bool)), this, SLOT(Sm7_SLOT(bool)));
connect(Sm_UI->radioButtonJ, SIGNAL(toggled(bool)), this, SLOT(SmJ_SLOT(bool)));
connect(Sm_UI->radioButtonG, SIGNAL(toggled(bool)), this, SLOT(SmG_SLOT(bool)));
connect(Sm_UI->radioButtonU, SIGNAL(toggled(bool)), this, SLOT(SmU_SLOT(bool)));
maxSmoothCount = 40;
Sm_UI->SmoothCount->setMinimum(0);
Sm_UI->SmoothCount->setMaximum(maxSmoothCount);
Sm_UI->SmoothCount->setSingleStep(1);
Sm_UI->spinBox->setRange(0, maxSmoothCount);
connect(Sm_UI->spinBox, SIGNAL(valueChanged(int)), Sm_UI->SmoothCount, SLOT(setValue(int)));
connect(Sm_UI->SmoothCount, SIGNAL(valueChanged(int)), Sm_UI->spinBox, SLOT(setValue(int)));
Sm_UI->spinBox->setValue(0);
connect(Sm_UI->SmoothCount, SIGNAL(valueChanged(int)), this, SLOT(smoothApplication_SLOT()));
}
SmoothTool::~SmoothTool()
{
delete Sm_UI;
}
void SmoothTool::setLineEditable()
{
Sm_UI->spinBox->setValue(0);
Sm_UI->lineEdit->setEnabled(true);
Sm_UI->lineEdit_2->setEnabled(true);
}
void SmoothTool::smoothApplication_SLOT()
{
QString t = Sm_UI->lineEdit->text();
Sdep = t.toFloat();
depCheck();
t = Sm_UI->lineEdit_2->text();
edep = t.toFloat();
depCheck();
Sm_UI->lineEdit->setEnabled(false);
Sm_UI->lineEdit_2->setEnabled(false);
emit sendDataSmoothSign(Sdep, edep, mode, cal, Sm_UI->spinBox->value());
}
void SmoothTool::sdepChange_SLOT()
{
QString t = Sm_UI->lineEdit->text();
Sdep = t.toFloat();
depCheck();
}
void SmoothTool::edepChange_SLOT()
{
QString t = Sm_UI->lineEdit_2->text();
edep = t.toFloat();
depCheck();
}
void SmoothTool::setSliderValue(int v)
{
Sm_UI->spinBox->setValue(v);
}
void SmoothTool::Sm3_SLOT(bool flag)
{
if(flag==true)
mode = 0;
}
void SmoothTool::Sm5_SLOT(bool flag)
{
if(flag==true)
mode = 1;
}
void SmoothTool::Sm7_SLOT(bool flag)
{
if(flag==true)
mode = 2;
}
void SmoothTool::SmJ_SLOT(bool flag)
{
if(flag==true)
cal = 0;
}
void SmoothTool::SmZ_SLOT(bool flag)
{
//½ûÓÃ
if(flag==true)
cal = 1;
}
void SmoothTool::SmG_SLOT(bool flag)
{
if(flag==true)
cal = 2;
}
void SmoothTool::SmU_SLOT(bool flag)
{
if(flag==true)
cal = 3;
}
void SmoothTool::depCheck()
{
if(Sdep < realSdep)Sdep = realSdep;
if(edep > realEdep)edep = realEdep;
if(edep < Sdep)edep = Sdep;
}
void SmoothTool::setSmoothDep(float rsd, float red, float sd, float ed)
{
realSdep = rsd;
realEdep = red;
Sdep = sd;
edep = ed;
depCheck();
Sm_UI->lineEdit->setText(QString("%1").arg(Sdep));
Sm_UI->lineEdit_2->setText(QString("%1").arg(edep));
Sm_UI->lineEdit->setValidator(new QIntValidator(realSdep,realEdep,this));
Sm_UI->lineEdit_2->setValidator(new QIntValidator(realSdep,realEdep,this));
}
void SmoothTool::setmaxSmoothCount(int count)
{
if(count > maxSmoothCount){
maxSmoothCount = count;
Sm_UI->SmoothCount->setMaximum(maxSmoothCount);
}
}
void SmoothTool::sliderChange()
{
//emit sendDataSmoothSign(Sdep, edep, mode, cal, Sm_UI->spinBox->value());
}
void SmoothTool::rejectSmooth_SLOT()
{
emit cancelSmooth();
}
void SmoothTool::acceptSmooth_SLOT()
{
emit SaveSmooth();
accept();
}

View File

@ -0,0 +1,52 @@
#ifndef SMOOTHTOOL_H
#define SMOOTHTOOL_H
#include <QDialog>
namespace Ui {
class SmoothTool;
}
class SmoothTool : public QDialog
{
Q_OBJECT
signals:
void sendDataSmoothSign(float,float,int,int,int);
void cancelSmooth();
void SaveSmooth();
public:
explicit SmoothTool(QDialog *parent = 0);
~SmoothTool();
void setSmoothDep(float rsd, float red, float sd, float ed);
void setSliderValue(int);
void setLineEditable();
private:
float Sdep, edep, realSdep, realEdep; //平滑深度范围, 实际井深度范围
int maxSmoothCount;//平滑最大次数
int mode, cal;
void depCheck();
void setmaxSmoothCount(int c);
void sliderChange();
public slots:
void sdepChange_SLOT();
void edepChange_SLOT();
void Sm3_SLOT(bool a);
void Sm5_SLOT(bool a);
void Sm7_SLOT(bool a);
void SmJ_SLOT(bool a);
void SmZ_SLOT(bool a);
void SmG_SLOT(bool a);
void SmU_SLOT(bool a);
void smoothApplication_SLOT();
void rejectSmooth_SLOT();
void acceptSmooth_SLOT();
private:
Ui::SmoothTool *Sm_UI;
};
#endif // SMOOTHTOOL_H

View File

@ -0,0 +1,45 @@
#include "editEnd.h"
#include "ui_editEnd.h"
editEnd::editEnd(QDialog *parent) :
QDialog(parent),
ui(new Ui::editEnd)
{
ui->setupUi(this);
ui->radioButton->setChecked(true);
connect(ui->radioButton, SIGNAL(toggled(bool)), this, SLOT(smChooseChange_SLOT()));
connect(ui->radioButton_2, SIGNAL(toggled(bool)), this, SLOT(smChooseChange_SLOT()));
connect(ui->radioButton_3, SIGNAL(toggled(bool)), this, SLOT(smChooseChange_SLOT()));
connect(ui->pushButton, SIGNAL(clicked()), this, SLOT(reject()));
connect(ui->pushButton, SIGNAL(clicked()), this, SLOT(continueEdit_SLOT()));
}
editEnd::~editEnd()
{
delete ui;
}
void editEnd::continueEdit_SLOT()
{
emit sendContinueSignal();
}
int editEnd::SmoothResult(){
if(ui->radioButton_3->isChecked())
return 1;
else if(ui->radioButton_2->isChecked())
return 2;
else
return 3;
}
void editEnd::smChooseChange_SLOT()
{
if(ui->radioButton_3->isChecked())
emit sendSmData(1);
else if(ui->radioButton_2->isChecked())
emit sendSmData(2);
else
emit sendSmData(3);
}

View File

@ -0,0 +1,32 @@
#ifndef EDITEND_H
#define EDITEND_H
#include <QDialog>
namespace Ui {
class editEnd;
}
class editEnd : public QDialog
{
Q_OBJECT
signals:
void sendSmData(int);
void sendContinueSignal();
public:
explicit editEnd(QDialog *parent = 0);
~editEnd();
int SmoothResult();
private:
Ui::editEnd *ui;
private slots:
void smChooseChange_SLOT();
void continueEdit_SLOT();
};
#endif // EDITEND_H

549
DataMgr/src/ShowCurve.cpp Normal file
View File

@ -0,0 +1,549 @@
#include "ShowCurve.h"
#include "ui_ShowCurve.h"
//#include "DrawAPicture.h"
#include <QDebug>
#include <qtimer.h>
#include <QPainter>
#include <QComboBox>
#include <QTextCodec>
#include <QMessageBox>
#include <QResizeEvent>
#include <qtextbrowser.h>
#include <QPropertyAnimation>
#include "GeometryUtils.h"
#define R2LTIPS "请拖动数据表格纵向滑块即可完成深度初定位."
#define EDITMODETIPS "正处于编辑模式单击右键以完成编辑."
ShowCurve::ShowCurve(QWidget *parent) :
QWidget(parent),
m_pUI(new Ui::ShowCurve),vmax(-9999),vmin(-9999),
mouseDepth(0),
mouseValue(0),
getBar(false),
locked(true),
hasTipsWidth(false)
{
val=NULL;
m_pUI->setupUi(this);
int w = width();
int h = height();
m_timer = new QTimer();
if(NULL != parent)
{
parent->setFixedSize(w,h);
}
thisParent = parent;
m_view = new DrawCurveView();
m_pUI->pushButton->setEnabled(false);
m_pUI->pushButton_2->setEnabled(false);
m_pUI->pushButton_3->setEnabled(false);
connect(m_pUI->verticalSlider,SIGNAL(valueChanged(int)),this,SLOT(onVerDeptSliderValueChange(int)));
connect(m_view, SIGNAL(verticalSliderUP()), this, SLOT(SliderUP_SLOT()));
connect(m_view, SIGNAL(verticalSliderDOWN()), this, SLOT(SliderDOWN_SLOT()));
connect(m_view, SIGNAL(editModeTips()), this, SLOT(editModeTips_SLOT()));
connect(m_pUI->deptEdit->lineEdit_Depth, SIGNAL(textChanged( QString )),this,SLOT(slotChangeDepth(QString)));
connect(m_pUI->pushButtonScale, SIGNAL(clicked()), this, SLOT(slotChangeScale()));
connect(m_pUI->pushButtonStretch, SIGNAL(clicked()), this, SLOT(slotStretch()));
connect(m_pUI->pushButtonCompres, SIGNAL(clicked()), this, SLOT(slotCompres()));
connect(m_pUI->pushButton, SIGNAL(clicked()), this, SLOT(editSig_SLOT()));
connect(m_pUI->pushButton_2, SIGNAL(clicked()), this, SLOT(smoothSig_SLOT()));
connect(m_pUI->pushButton_3, SIGNAL(clicked()), this, SLOT(angSig_SLOT()));
connect(m_view, SIGNAL(enableEditButtons()), this, SLOT(editButtonsCon_SLOT()));
connect(m_view, SIGNAL(unableEditButtons()), this, SLOT(unEditButtonsCon_SLOT()));
//测试
// connect(m_pUI->pushButton_4, SIGNAL(clicked()), this, SLOT(testButton_SLOT()));
QPixmap pushButton_5Pixmap; pushButton_5Pixmap.load(::GetImagePath() + "/UIMake/R2L.png");
m_pUI->pushButton_5->setFixedSize(pushButton_5Pixmap.width(), pushButton_5Pixmap.height());
m_pUI->pushButton_5->setIcon(pushButton_5Pixmap);
m_pUI->pushButton_5->setIconSize(QSize(pushButton_5Pixmap.width(), pushButton_5Pixmap.height()));
//m_pUI->pushButton_5->setFlat(true);
connect(m_pUI->pushButton_5, SIGNAL(clicked()), this, SLOT(R2LButton_SLOT()));
connect(m_view, SIGNAL(R2L()), this, SLOT(R2LMouse_SLOT()));
connect(m_pUI->lineEdit_Value, SIGNAL(returnPressed()), this, SLOT(R2LButton_SLOT()));
m_pUI->lineEdit_Value->setValidator(new QDoubleValidator(-9999999,9999999,6,this));
QPixmap pushButton_6Pixmap;
pushButton_6Pixmap.load(::GetImagePath() + "/UIMake/L2RLock.png");
m_pUI->pushButton_6->setFixedSize(pushButton_6Pixmap.width(), pushButton_6Pixmap.height());
m_pUI->pushButton_6->setIcon(pushButton_6Pixmap);
m_pUI->pushButton_6->setIconSize(QSize(pushButton_6Pixmap.width(), pushButton_6Pixmap.height()));
//m_pUI->pushButton_6->setFlat(true);
connect(m_pUI->pushButton_6, SIGNAL(clicked()), this, SLOT(lockChange_SLOT()));
QPixmap sizeButtonPixmap;
sizeButtonPixmap.load(::GetImagePath() + "/UIMake/UIButtonBig_o.png");
m_pUI->pushButtonStretch->setFixedSize(sizeButtonPixmap.width(), sizeButtonPixmap.height());
m_pUI->pushButtonStretch->setIcon(sizeButtonPixmap);
m_pUI->pushButtonStretch->setIconSize(QSize(sizeButtonPixmap.width(), sizeButtonPixmap.height()));
//m_pUI->pushButtonStretch->setStyleSheet("QPushButton:hover{background-color: rgb(254,164,134);}");
//m_pUI->pushButtonStretch->setFlat(true);
sizeButtonPixmap.load(::GetImagePath() + "/UIMake/UIButtonSmall_o.png");
m_pUI->pushButtonCompres->setFixedSize(sizeButtonPixmap.width(), sizeButtonPixmap.height());
m_pUI->pushButtonCompres->setIcon(sizeButtonPixmap);
m_pUI->pushButtonCompres->setIconSize(QSize(sizeButtonPixmap.width(), sizeButtonPixmap.height()));
//m_pUI->pushButtonCompres->setFlat(true);
tipsHeight = m_pUI->textBrowser->height();
//m_pUI->textBrowser->verticalScrollBar()->setVisible(false);
//m_pUI->textBrowser->horizontalScrollBar()->setVisible(false);
QPalette pa;
pa.setColor(QPalette::WindowText, QColor(120,120,120));
m_pUI->textBrowser->setPalette(pa);
}
void ShowCurve::testButton_SLOT()
{
// DrawAPicture *t = new DrawAPicture();
// t->show();
}
void ShowCurve::init()
{
CLogIO *logio=new CLogIO();
logio->Open(FileName.toStdString().c_str(),CSlfIO::modeRead);
index=logio->OpenCurve(CurveName.toStdString().c_str());
if(index<0) {
delete logio;
return;
}
logio->GetCurveInfo(index,&curveinfo);
sdep=curveinfo.StartDepth;
edep=curveinfo.EndDepth;
rlev=curveinfo.DepLevel;
m_view->sdep = sdep;
m_view->edep = edep;
m_view->rlev = rlev;
m_view->userPos = 0;
m_view->fileName = FileName;
m_view->curveName = CurveName;
curDepth=sdep+(edep-sdep)/2.;
count=(curveinfo.EndDepth-curveinfo.StartDepth)/curveinfo.DepLevel+1.5;
val=new float[count];
logio->ReadCurve(index,curveinfo.StartDepth,count,&val[0]);
logio->CloseCurve(index);
delete logio;
if(vmax==-9999 && vmin==-9999)
if(!getValueRangeFromIni()){
vmax=vmin=val[0];
for(int i=1;i<count;i++)
{
if(vmax<val[i])vmax=val[i];
if(vmin>val[i])vmin=val[i];
}
m_view->m_Xmax=vmax,m_view->m_Xmin=vmin;
m_pUI->lineEdit_Xmax->setText(QString::number(vmax));
m_pUI->lineEdit_Xmax->setValidator(new QDoubleValidator(-9999999,9999999,6,this));
m_pUI->lineEdit_Xmin->setText(QString::number(vmin));
m_pUI->lineEdit_Xmin->setValidator(new QDoubleValidator(-9999999,9999999,6,this));
}
m_view->setValues(val);
m_view->factor=2;
initVerMaxRange = 200;
m_view->PageSize = int(count / initVerMaxRange + 100);
if(m_view->PageSize < 500) m_view->PageSize=500;
//m_view.PageSize=(int)(200./curveinfo.DepLevel+0.5);
//for small rlev
//if(curveinfo.DepLevel<0.005)m_view.PageSize/=100;
//else if(curveinfo.DepLevel<0.05)m_view.PageSize/=10;
QString title= QString( curveinfo.Name)+QString::fromUtf8("曲线预览");
m_pUI->label_WfName->setText(title);
m_pUI->label_StartDepth->setText(QString::number(sdep));
m_pUI->label_EndDepth->setText(QString::number(edep));
m_pUI->deptEdit->lineEdit_Depth->setText(QString::number(curDepth));
m_pUI->deptEdit->lineEdit_Depth->setValidator(new QDoubleValidator(-9999999,9999999,6,this));
QPalette pal;
m_pUI->widgetPlot->setStyleSheet("background:lightgray");
m_pUI->widgetPlot->setPalette(pal);
m_view->setParent(m_pUI->widgetPlot);
m_view->setCount(count);
m_pUI->verticalSlider->setRange(0, initVerMaxRange);
m_pUI->verticalSlider->setValue(initVerMaxRange / 2);
}
bool ShowCurve::getValueRangeFromIni()
{
QString curveFamilyFilePath = ::GetConfPath() + "CurveFamily.ini";
QFile curveFamilyFile(curveFamilyFilePath);
if(!curveFamilyFile.open(QIODevice::ReadOnly | QIODevice::Text)) return false;
bool finished = false;
while(!curveFamilyFile.atEnd())
{
QByteArray line = curveFamilyFile.readLine();
QString str(line);
QStringList strList = str.split("=");
if(strList[0] == CurveName)
{
strList = str.split(",");
float minValue = strList[1].toFloat();
float maxValue = strList[2].toFloat();
if(minValue < -9999 || minValue > 9999) return false;
if(maxValue < -9999 || maxValue > 9999) return false;
if(maxValue <= minValue) return false;
m_view->m_Xmax=maxValue,m_view->m_Xmin=minValue;
m_pUI->lineEdit_Xmax->setText(QString::number(maxValue));
m_pUI->lineEdit_Xmax->setValidator(new QDoubleValidator(-9999999,9999999,6,this));
m_pUI->lineEdit_Xmin->setText(QString::number(minValue));
m_pUI->lineEdit_Xmin->setValidator(new QDoubleValidator(-9999999,9999999,6,this));
finished = true;
break;
}
}
curveFamilyFile.close();
return finished;
}
void ShowCurve::editSig_SLOT()
{
m_view->button_editIfBegin();
}
void ShowCurve::smoothSig_SLOT()
{
m_view->button_smoothWin();
}
void ShowCurve::angSig_SLOT()
{
m_view->button_AngAdjWin();
}
void ShowCurve::editModeTips_SLOT()
{
if(!hasTipsWidth){
tipsWidth = m_pUI->textBrowser->width();
hasTipsWidth = true;
}
tipsText = QString::fromUtf8(EDITMODETIPS);
m_pUI->textBrowser->setText(tipsText);
m_pUI->textBrowser->setGeometry(QRect( m_pUI->textBrowser->x(),
m_pUI->textBrowser->y(),
tipsWidth,
m_pUI->textBrowser->height()));
connect(m_timer, SIGNAL(timeout()), SLOT(promptDisplay()));
m_timer->setInterval(1000);
m_timer->start();
return;
}
void ShowCurve::slotChangeDepth(const QString &text)
{
if(text.toFloat() < sdep || text.toFloat() > edep)
{
// m_pUI->lineEdit_Depth->setText(QString::number(curDepth));
return;
}
curDepth = text.toFloat();
if(curveinfo.EndDepth == curveinfo.StartDepth) {
m_view->CurrentPos = 0;
}
else {
m_view->CurrentPos = (curDepth - curveinfo.StartDepth) / (curveinfo.EndDepth - curveinfo.StartDepth) * count;
}
//m_pUI->lineEdit_Value->setText(QString::number(curDepth));
m_view->update();
}
void ShowCurve::resizeEvent(QResizeEvent *resize)
{
QSize orgsize=this->size();
QWidget::resizeEvent(resize);
if(resize->size().isValid())
{
QSize changeSize=resize->size();
int width=changeSize.width()-orgsize.width();
int height= changeSize.height()-orgsize.height();
m_view->resize(changeSize.width()-150,changeSize.height()-100);
m_view->initView();
m_view->update();
}
}
void ShowCurve::onVerDeptSliderValueChange(int value)
{
curDepth = edep - (edep-sdep) * value / initVerMaxRange;
m_pUI->deptEdit->lineEdit_Depth->setText(QString::number(curDepth));
m_view->update();
curDepRange();
}
void ShowCurve::SliderUP_SLOT()
{
m_pUI->verticalSlider->setValue(m_pUI->verticalSlider->value() + 1);
}
void ShowCurve::SliderDOWN_SLOT()
{
m_pUI->verticalSlider->setValue(m_pUI->verticalSlider->value() - 1);
}
void ShowCurve::mouseMkChange(float depth, float value){
mouseDepth = depth;
mouseValue = value;
//m_pUI->lineEdit_Value->setText(QString::number(depth));
//m_pUI->lineEdit_curValue->setText(QString::number(value));
}
void ShowCurve::lineEdit_curValue_Change(float v){
//m_pUI->lineEdit_curValue->setText(QString::number(v));
}
//联动
void ShowCurve::linkVerDeptSliderValueChange(int value, float tipValue)
{
if(rlev <= 0 || edep == sdep || locked == false)return;
m_pUI->deptEdit->lineEdit_Depth->setText(QString::number(tipValue));
m_pUI->lineEdit_Value->setText(QString::number(tipValue));
int pageNo = (edep - tipValue) / (edep-sdep) * initVerMaxRange + m_view->PageSize / 2 * rlev / ((edep-sdep)/initVerMaxRange);
if(pageNo > initVerMaxRange) pageNo = initVerMaxRange;
int curCount = (tipValue - sdep) / rlev + 0.5;
//m_pUI->lineEdit_curValue->setText(QString::number(val[curCount]));
m_pUI->verticalSlider->setValue(pageNo);
onVerDeptSliderValueChange(pageNo);
m_view->userCurrentPos = tipValue;
m_view->update();
}
void ShowCurve::setTableBro(QScrollBar *p)
{
getBar = true;
tableBro = p;
}
void ShowCurve::setCurveTable(QTableWidget *t)
{
curveTable = t;
}
//改变刻度按钮槽
void ShowCurve::slotChangeScale()
{
m_view->m_Xmin=m_pUI->lineEdit_Xmin->text().toFloat();
m_view->m_Xmax=m_pUI->lineEdit_Xmax->text().toFloat();
m_view->update();
}
void ShowCurve::slotStretch()//深度拉伸
{
initVerMaxRange *= 1.5;
if(initVerMaxRange == 1)initVerMaxRange=2;
m_pUI->verticalSlider->setRange(0, initVerMaxRange);
if(!m_pUI->pushButtonCompres->isEnabled())
m_pUI->pushButtonCompres->setEnabled(true);
m_view->PageSize/=1.5;
if(m_view->PageSize < 50)
m_pUI->pushButtonStretch->setEnabled(false);
m_view->update();
curDepRange();
}
void ShowCurve::slotCompres()//深度压缩
{
initVerMaxRange /= 1.5;
if(initVerMaxRange / 1.5 <= 1)
m_pUI->pushButtonCompres->setEnabled(false);
m_pUI->verticalSlider->setRange(0, initVerMaxRange);
if(!m_pUI->pushButtonStretch->isEnabled())
m_pUI->pushButtonStretch->setEnabled(true);
m_view->PageSize*=1.5;
m_view->update();
curDepRange();
}
//改变绘制窗口的深度显示
void ShowCurve::curDepRange()
{
float cDR_value = m_pUI->verticalSlider->value();
float cDR_startDepth = edep - (edep-sdep) * cDR_value / initVerMaxRange;
float cDR_endDepth = cDR_startDepth + m_view->PageSize * rlev;
m_pUI->label_StartDepth->setText(QString::number(cDR_startDepth));
m_pUI->label_EndDepth->setText(QString::number(cDR_endDepth));
}
void ShowCurve::showEvent(QShowEvent *sEvent)
{
QWidget::showEvent(sEvent);
QRect rec=m_pUI->widgetPlot->geometry();
qDebug()<<"value:"<<rec;
int w=rec.width();
int h=rec.height();
m_view->setGeometry(0,0,w,h);
m_view->initView();
}
ShowCurve::~ShowCurve()
{
delete m_pUI;
if(val)delete []val;
delete m_view;
delete m_timer;
}
void ShowCurve::editButtonsCon_SLOT()
{
m_pUI->pushButton->setEnabled(true);
m_pUI->pushButton_2->setEnabled(true);
m_pUI->pushButton_3->setEnabled(true);
}
void ShowCurve::unEditButtonsCon_SLOT()
{
m_pUI->pushButton->setEnabled(false);
m_pUI->pushButton_2->setEnabled(false);
m_pUI->pushButton_3->setEnabled(false);
}
void ShowCurve::R2LButton_SLOT()
{
if(!getBar){
if(!hasTipsWidth){
tipsWidth = m_pUI->textBrowser->width();
hasTipsWidth = true;
}
tipsText = QString::fromUtf8(R2LTIPS);
m_pUI->textBrowser->setText(tipsText);
m_pUI->textBrowser->setGeometry(QRect( m_pUI->textBrowser->x(),
m_pUI->textBrowser->y(),
tipsWidth,
m_pUI->textBrowser->height()));
connect(m_timer, SIGNAL(timeout()), SLOT(promptDisplay()));
m_timer->setInterval(1000);
m_timer->start();
return;
}
//以输入框深度信息
float R2L_depthValue = m_pUI->lineEdit_Value->text().toFloat();
m_view->userCurrentPos = R2L_depthValue;
int pageNo = (edep - R2L_depthValue) / (edep-sdep) * initVerMaxRange + m_view->PageSize / 2 * rlev / ((edep-sdep)/initVerMaxRange);
if(pageNo > initVerMaxRange) pageNo = initVerMaxRange;
m_pUI->verticalSlider->setValue(pageNo);
int tv = tableBro->maximum();
float oneValue = (edep - sdep) / tv;
int bv = (R2L_depthValue - sdep) / oneValue;
tableBro->setValue(bv);
setCurveTableForce(R2L_depthValue);
}
void ShowCurve::R2LMouse_SLOT()
{
if(!getBar) return;
//以鼠标位置深度信息
m_view->userCurrentPos = mouseDepth;
m_pUI->lineEdit_Value->setText(QString::number(mouseDepth));
//m_pUI->lineEdit_curValue->setText(QString::number(mouseValue));
int tv = tableBro->maximum();
float oneValue = (edep - sdep) / tv;
int bv = (mouseDepth - sdep) / oneValue;
tableBro->setValue(bv);
setCurveTableForce(mouseDepth);
}
void ShowCurve::promptDisplay()
{
m_timer->stop();
//m_pUI->textBrowser->setText(tipsText);
//m_pUI->textBrowser->windowOpacity
QPropertyAnimation *tipsAnimation = new QPropertyAnimation(m_pUI->textBrowser, "geometry");
tipsAnimation->setDuration(2000);
tipsAnimation->setStartValue(QRect( m_pUI->textBrowser->x(),
m_pUI->textBrowser->y(),
tipsWidth,
m_pUI->textBrowser->height()
));
tipsAnimation->setEndValue(QRect( m_pUI->textBrowser->x(),
m_pUI->textBrowser->y(),
0,
m_pUI->textBrowser->height()
));
tipsAnimation->start();
connect(tipsAnimation, SIGNAL(finished()), this, SLOT(clearTips_SLOT()));
}
void ShowCurve::clearTips_SLOT()
{
m_pUI->textBrowser->setText("");
}
void ShowCurve::setCurveTableForce(float dep)
{
float tv = tableBro->maximum();
float oneValue = (edep - sdep) / tv;
int bv = (dep - sdep) / oneValue;
float SCTF_r = bv / tv;
int SCTF_pos = (curveTable->rowCount()+1) * SCTF_r;
curveTable->selectRow(SCTF_pos);
}
void ShowCurve::lockChange_SLOT()
{
locked = !locked;
if(locked){
QPixmap pushButton_6Pixmap;
pushButton_6Pixmap.load(::GetImagePath() + "/UIMake/L2RLock.png");
m_pUI->pushButton_6->setFixedSize(pushButton_6Pixmap.width(), pushButton_6Pixmap.height());
m_pUI->pushButton_6->setIcon(pushButton_6Pixmap);
m_pUI->pushButton_6->setIconSize(QSize(pushButton_6Pixmap.width(), pushButton_6Pixmap.height()));
}
else{
QPixmap pushButton_6Pixmap;
pushButton_6Pixmap.load(::GetImagePath() + "/UIMake/L2RUnlock.png");
m_pUI->pushButton_6->setFixedSize(pushButton_6Pixmap.width(), pushButton_6Pixmap.height());
m_pUI->pushButton_6->setIcon(pushButton_6Pixmap);
m_pUI->pushButton_6->setIconSize(QSize(pushButton_6Pixmap.width(), pushButton_6Pixmap.height()));
}
}

91
DataMgr/src/ShowCurve.h Normal file
View File

@ -0,0 +1,91 @@
#ifndef WIDGET_H1
#define WIDGET_H1
#include <QDir>
#include <QWidget>
#include <QFileInfo>
#include <QScrollBar>
#include <qtablewidget.h>
#include <QTableWidgetItem>
#include <windows.h>
#include "MemRdWt.h"
#include "DrawCurveView.h"
namespace Ui {
class ShowCurve;
}
class ShowCurve : public QWidget
{
Q_OBJECT
public:
explicit ShowCurve(QWidget *parent = 0);
~ShowCurve();
Slf_CURVE curveinfo;
float *val;
DWORD count;
float sdep,edep,rlev,stime,etime,curTime,curDepth;
float vmax,vmin;
DrawCurveView *m_view;
//void readcurve();
void init();
QString FileName,CurveName;
int index;
int initVerMaxRange;
void mouseMkChange(float depth, float value);
void lineEdit_curValue_Change(float);
void setTableBro(QScrollBar *p);
void setCurveTable(QTableWidget *t);
protected:
//implement class QWidget
virtual void showEvent(QShowEvent *sEvent);
virtual void resizeEvent(QResizeEvent *resize);
public slots:
void onVerDeptSliderValueChange(int value);
void SliderUP_SLOT();
void SliderDOWN_SLOT();
void linkVerDeptSliderValueChange(int value,float tipValue);
void slotChangeDepth(const QString &text);
void slotChangeScale();
void slotStretch();
void slotCompres();
void editSig_SLOT();
void smoothSig_SLOT();
void angSig_SLOT();
void editButtonsCon_SLOT();
void unEditButtonsCon_SLOT();
void R2LButton_SLOT();
void R2LMouse_SLOT();
private:
bool getBar;
bool locked;
float mouseDepth, mouseValue;
QScrollBar *tableBro;
QTableWidget *curveTable;
QWidget* thisParent;
Ui::ShowCurve *m_pUI;
float tipsWidth, tipsHeight;
bool hasTipsWidth;
QTimer *m_timer;
QString tipsText;
void curDepRange();
void setCurveTableForce(float dep);
bool getValueRangeFromIni();
private slots:
void testButton_SLOT();
void lockChange_SLOT();
void editModeTips_SLOT();
void promptDisplay();
void clearTips_SLOT();
};
#endif

276
DataMgr/src/ShowWave.cpp Normal file
View File

@ -0,0 +1,276 @@
#include "ShowWave.h"
#include "ui_ShowWave.h"
#include <QPainter>
#include <QComboBox>
#include <QDebug>
#include <QMessageBox>
#include <QResizeEvent>
#include <QTextCodec>
ShowWave::ShowWave(QWidget *parent) :
QWidget(parent),
m_pUI(new Ui::ShowWave)
{
m_pUI->setupUi(this);
int w=width();
int h=height();
if(NULL != parent)
{
parent->setFixedSize(w,h);
}
connect(m_pUI->verticalSlider,SIGNAL(valueChanged(int)),this,SLOT(onVerDeptSliderValueChange(int)));
connect(m_pUI->horizontalSlider,SIGNAL(valueChanged(int)),this,SLOT(onHorTimeSliderValueChange(int)));
QObject::connect(m_pUI->checkBox, SIGNAL(clicked()), this, SLOT(slotCheck()));
connect(m_pUI->deptEdit->lineEdit_Depth, SIGNAL(textChanged( QString )),this,SLOT(slotChangeDepth(QString)));
connect(m_pUI->lineEdit_Time, SIGNAL(textChanged( QString )),this,SLOT(slotChangeTime(QString)));
connect(m_pUI->lineEdit_Value, SIGNAL(textChanged( QString )),this,SLOT(slotChangeValue(QString)));
connect(m_pUI->lineEdit_XGrid, SIGNAL(textChanged( QString )),this,SLOT(slotChangeXGrid(QString)));
connect(m_pUI->lineEdit_YGrid, SIGNAL(textChanged( QString )),this,SLOT(slotChangeYGrid(QString)));
memset(&waveinfo,0,sizeof(Slf_WAVE));
//QFile *waveFile;
val=NULL;
//int count;
sdep=0,edep=0,stime=0,etime=0,curTime=0,curDepth=0;
}
void ShowWave::init()
{
CLogIO *logio=new CLogIO();
if(!logio->Open(FileName.toStdString().c_str(),CSlfIO::modeRead)) {
delete logio;
return;
}
index=logio->OpenWave(WaveName.toStdString().c_str());
if(index==-1) {
delete logio;
return;
}
logio->GetWaveInfo(index,&waveinfo);
sdep=waveinfo.StartDepth;
edep=waveinfo.EndDepth;
stime=waveinfo.StartTime;
etime=waveinfo.StartTime+(waveinfo.SamplePoint-0)*waveinfo.ArrayNum*waveinfo.TimeLevel;//TimeSamples=SamplePoint*ArrayNum
curTime=waveinfo.StartTime+(etime-stime)/2.;
curDepth=sdep+(edep-sdep)/2.;
//X轴网格数
int xGrid=10;
for(int i=9;i>=5;i--)
{
if(int(etime-stime)%i==0)
{
xGrid=i;
break;
}
}
//count=(waveinfo.EndDepth-waveinfo.StartDepth)/waveinfo.DepLevel+1.5;
val=new float[waveinfo.SamplePoint*waveinfo.ArrayNum+1];
IsFirst=1;
bindViewData();
IsFirst=0;
//需要罗林解决的问题:
//1、"阵列曲线"显示乱码(已解决)
//2、时间及深度change函数不能刷新时间或深度slider时间及深度值无效值没做任何处理(读数据起始深度都为0 造成 )
// QString title= QString::fromLocal8Bit("阵列曲线")+QString( waveinfo.Name);
QString title= QString::fromUtf8("阵列曲线")+QString( waveinfo.Name);
m_pUI->label_WfName->setText(title);
//m_pUI->label_WfName->setText(QString(QLatin1String(waveinfo.Name)));
m_pUI->label_StartTime->setText(QString::number(stime));
m_pUI->label_EndTime->setText(QString::number(etime));
m_pUI->label_StartDepth->setText(QString::number(sdep));
m_pUI->label_EndDepth->setText(QString::number(edep));
m_pUI->lineEdit_Time->setText(QString::number(curTime));
m_pUI->deptEdit->lineEdit_Depth->setText(QString::number(curDepth));
QPalette pal;
m_pUI->widgetPlot->setStyleSheet("background:lightgray");
m_pUI->widgetPlot->setPalette(pal);
m_view.setParent(m_pUI->widgetPlot);
m_view.setCount(waveinfo.SamplePoint);
m_view.m_Xmin=stime,m_view.m_Xmax=etime;
m_view.setXGrid(xGrid);
m_view.setYGrid(D_HOR_LIENS);
m_pUI->lineEdit_YGrid->setText(QString::number(D_HOR_LIENS));
m_pUI->lineEdit_XGrid->setText(QString::number(xGrid));
m_pUI->verticalSlider->setRange(0,100);
m_pUI->verticalSlider->setValue(50);
m_pUI->horizontalSlider->setRange(0,100);//(stime,etime);
m_pUI->horizontalSlider->setValue(50);//(curTime);
m_pUI->checkBox->setCheckState(Qt::Checked);
m_pUI->lineEdit_Ymin->setEnabled(0);
m_pUI->lineEdit_Ymax->setEnabled(0);
logio->CloseWave(index);
delete logio;
}
void ShowWave::slotCheck()
{
if(m_pUI->checkBox->checkState()==Qt::Unchecked)
{
m_pUI->lineEdit_Ymin->setEnabled(1);
m_pUI->lineEdit_Ymax->setEnabled(1);
}
else
{
m_pUI->lineEdit_Ymin->setEnabled(0);
m_pUI->lineEdit_Ymax->setEnabled(0);
}
bindViewData();
m_view.update();
}
void ShowWave::slotChangeXGrid(const QString &text)
{
int xGrid=text.toInt();
if(xGrid<1)
{
xGrid=1;
m_pUI->lineEdit_XGrid->setText(QString::number(xGrid));
}
if(xGrid>20)
{
xGrid=20;
m_pUI->lineEdit_XGrid->setText(QString::number(xGrid));
}
m_view.setXGrid(xGrid);
m_view.update();
}
void ShowWave::slotChangeYGrid(const QString &Text)
{
int yGrid=Text.toInt();
if(yGrid<1)
{
yGrid=1;
m_pUI->lineEdit_YGrid->setText(QString::number(yGrid));
}
if(yGrid>20)
{
yGrid=20;
m_pUI->lineEdit_YGrid->setText(QString::number(yGrid));
}
m_view.setYGrid(yGrid);
m_view.update();
}
void ShowWave::slotChangeDepth(const QString &text)
{
if(text.toFloat()<sdep||text.toFloat()>edep)
{
// m_pUI->lineEdit_Depth->setText(QString::number(curDepth));
return;
}
curDepth=text.toFloat();
//根据输入的深度定位verticalSlider保证lineEdit_Depth与verticalSlider同步
//int location=100.*(text.toFloat()-stime)/(etime-stime);
//int pos=100.*(edep-curDepth)/(edep-sdep);
//m_pUI->verticalSlider->setValue(pos);
bindViewData();
m_view.update();
}
void ShowWave::slotChangeValue(const QString &text)
{
//if(text.toFloat()<stime||text.toFloat()>etime)return;
// curDepth=edep-value*(edep-sdep)/100;
//m_pUI->lineEdit_Depth->setText(QString::number(curDepth));
//bindViewData();
//m_view.update();
}
void ShowWave::slotChangeTime(const QString &text)
{
if(text.toFloat()<stime||text.toFloat()>etime)return;
//根据输入的时间定位horizontalSlider保证lineEdit_Time与horizontalSlider同步
//int location=100.*(text.toFloat()-stime)/(etime-stime);
//m_pUI->horizontalSlider->setValue(location);
//
curTime=text.toFloat();
int pos=(curTime-stime)/waveinfo.TimeLevel;
m_pUI->lineEdit_Value->setText(QString::number(val[pos]));
m_view.setTime(pos);
m_view.update();
}
void ShowWave::resizeEvent(QResizeEvent *resize)
{
QSize orgsize=this->size();
QWidget::resizeEvent(resize);
if(resize->size().isValid())
{
QSize changeSize=resize->size();
int width=changeSize.width()-orgsize.width();
int height= changeSize.height()-orgsize.height();
m_view.resize(changeSize.width()-150,changeSize.height()-100);
m_view.initView();
m_view.update();
}
}
void ShowWave::onVerDeptSliderValueChange(int value)
{
curDepth=edep-value*(edep-sdep)/100;
m_pUI->deptEdit->lineEdit_Depth->setText(QString::number(curDepth));
bindViewData();
m_view.update();
}
void ShowWave::onHorTimeSliderValueChange(int value)
{
curTime=stime+value*(etime-stime)/100;
int pos=(curTime-stime)/waveinfo.TimeLevel;
curTime=pos*waveinfo.TimeLevel+stime;//此步计算为了保证显示的时间等于采样时间
m_pUI->lineEdit_Time->setText(QString::number(curTime));//value));
m_pUI->lineEdit_Value->setText(QString::number(val[pos]));
m_view.setTime(pos);
m_view.update();
}
void ShowWave::bindViewData()
{
readwave();
m_view.setValues(val);
if(m_pUI->checkBox->checkState()==Qt::Unchecked)
{
m_view.m_Ymin=m_pUI->lineEdit_Ymin->text().toFloat();
m_view.m_Ymax=m_pUI->lineEdit_Ymax->text().toFloat();
}
}
void ShowWave::showEvent(QShowEvent *sEvent)
{
QWidget::showEvent(sEvent);
QRect rec=m_pUI->widgetPlot->geometry();
qDebug()<<"value:"<<rec;
int w=rec.width();
int h=rec.height();
//m_view.widgetRec=QRect(0,0,w,h);
m_view.setGeometry(0,0,w,h);
m_view.initView();
//m_pUI->widgetPlot->update();
}
void ShowWave::readwave()
{
CLogIO *logio=new CLogIO();
if(logio->Open(FileName.toStdString().c_str(),CSlfIO::modeRead))
{
int index=logio->OpenWave(WaveName.toStdString().c_str());
if(index>-1)logio->ReadWave(index,curDepth,1,&val[0]);
}
delete logio;
vmax=vmin=val[0];
for(int i=1;i<waveinfo.SamplePoint;i++)
{
if(vmax<val[i])vmax=val[i];
if(vmin>val[i])vmin=val[i];
}
//vmin=10,vmax=110;
m_view.m_Ymax=vmax,m_view.m_Ymin=vmin;
if(IsFirst)
{
m_pUI->lineEdit_Ymax->setText(QString::number(vmax));
m_pUI->lineEdit_Ymin->setText(QString::number(vmin));
}
}
ShowWave::~ShowWave()
{
delete m_pUI;
//waveFile->close();
//delete waveFile;
delete []val;
}

56
DataMgr/src/ShowWave.h Normal file
View File

@ -0,0 +1,56 @@
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QTableWidgetItem>
#include <windows.h>
#include <QFileInfo>
#include <QDir>
#include "DrawWaveView.h"
#include "MemRdWt.h"
#pragma execution_character_set("utf-8")
namespace Ui {
class ShowWave;
}
class ShowWave : public QWidget
{
Q_OBJECT
public:
explicit ShowWave(QWidget *parent = 0);
~ShowWave();
Slf_WAVE waveinfo;
//QFile *waveFile;
float *val;
//int count;
float sdep,edep,stime,etime,curTime,curDepth;
float vmax,vmin;
DrawWaveView m_view;
void readwave();
bool IsFirst;
void init();
QString FileName,WaveName;
int index;
protected:
//implement class QWidget
virtual void showEvent(QShowEvent *sEvent);
virtual void resizeEvent(QResizeEvent *resize);
public slots:
void onVerDeptSliderValueChange(int value);
void onHorTimeSliderValueChange(int value);
void slotCheck();
void slotChangeDepth(const QString &text);
void slotChangeTime(const QString &text);
void slotChangeXGrid(const QString &text);
void slotChangeYGrid(const QString &text);
void slotChangeValue(const QString &text);
private:
void bindViewData();
private:
Ui::ShowWave *m_pUI;
};
#endif

View File

@ -0,0 +1,482 @@
#pragma warning(push,0)
// #include "Family.h"
#include <QMessageBox>
#include <QFileDialog>
#include <QPixmap>
#include <QDesktopServices>
#include "Statistics2Dlg.h"
#include "ui_Statistics2.h"
#include "CStringType.h"
#include "Well.h"
#pragma warning(pop)
using namespace pai::ios::welllog;
BEGIN_OSGGRAPHICS_NAMESPACE
static float ReadSdep=9999999.,ReadEdep=-9999999;
CStatistics2Dlg::~CStatistics2Dlg()
{
if(m_pUI) delete m_pUI;
ReadSdep=9999999.,ReadEdep=-9999999;
}
CStatistics2Dlg::CStatistics2Dlg(QWidget * parent, Qt::WindowFlags flags)
: QWidget(parent,flags)//: QDialog(parent,flags)
{
m_pUI = new Ui_Statistics2();
m_pUI->setupUi(this);
int w=width();
int h=height();
if(NULL != parent)
{
parent->setFixedSize(w,h);
}
m_pUI->cancelbtn->hide();
QObject::connect(m_pUI->okbtn, SIGNAL(clicked()), this, SLOT(slotSave()));
QObject::connect(m_pUI->cancelbtn, SIGNAL(clicked()), this, SLOT(slotCancel()));
QObject::connect(m_pUI->okbtn_Refurbish, SIGNAL(clicked()), this, SLOT(slotRefurbish()));
QObject::connect(m_pUI->checkBox, SIGNAL(clicked()), this, SLOT(slotCheckLjpl()));
QObject::connect(m_pUI->lineEditName, SIGNAL(textChanged( QString )),this,SLOT(slotChangeName(QString)));
QObject::connect(m_pUI->lineEditUnit, SIGNAL(textChanged( QString )),this,SLOT(slotChangeUnit(QString)));
QObject::connect(m_pUI->lineEditXmin, SIGNAL(textChanged( QString )),this,SLOT(slotChangeXmin(QString)));
QObject::connect(m_pUI->lineEditXmin2, SIGNAL(textChanged( QString )),this,SLOT(slotChangeXmin2(QString)));
QObject::connect(m_pUI->lineEditYmin, SIGNAL(textChanged( QString )),this,SLOT(slotChangeYmin(QString)));
QObject::connect(m_pUI->lineEditXmax, SIGNAL(textChanged( QString )),this,SLOT(slotChangeXmax(QString)));
QObject::connect(m_pUI->lineEditXmax2, SIGNAL(textChanged( QString )),this,SLOT(slotChangeXmax2(QString)));
QObject::connect(m_pUI->lineEditYmax, SIGNAL(textChanged( QString )),this,SLOT(slotChangeYmax(QString)));
QObject::connect(m_pUI->lineEditSdep, SIGNAL(textChanged( QString )),this,SLOT(slotChangeSdep(QString)));
QObject::connect(m_pUI->lineEditEdep, SIGNAL(textChanged( QString )),this,SLOT(slotChangeEdep(QString)));
QObject::connect(m_pUI->lineEditSmallGrid, SIGNAL(textChanged( QString )),this,SLOT(slotChangeSmallGrid(QString)));
QObject::connect(m_pUI->horizontalSliderSdep, SIGNAL(valueChanged(int)),this, SLOT(slotSetSdep(int)));
QObject::connect(m_pUI->horizontalSliderEdep, SIGNAL(valueChanged(int)),this, SLOT(slotSetEdep(int)));
//time
QObject::connect(m_pUI->lineEditStime, SIGNAL(textChanged( QString )),this,SLOT(slotChangeStime(QString)));
QObject::connect(m_pUI->lineEditEtime, SIGNAL(textChanged( QString )),this,SLOT(slotChangeEtime(QString)));
QObject::connect(m_pUI->horizontalSliderStime, SIGNAL(valueChanged(int)),this, SLOT(slotSetStime(int)));
QObject::connect(m_pUI->horizontalSliderEtime, SIGNAL(valueChanged(int)),this, SLOT(slotSetEtime(int)));
m_SmallGrid=10;
fmin=0,fmax=0;
m_Xmin=0;
m_Xmax=9999;
m_Ymin=0;
m_Ymax=100;
m_Xmin2=0;
m_Xmax2=0;
m_DrawLjpl=0;
val=NULL;
QPalette pal;
m_pUI->widgetPlot->setStyleSheet("background:lightgray");
m_pUI->widgetPlot->setPalette(pal);
m_view.setParent(m_pUI->widgetPlot);
QRect rec=m_pUI->widgetPlot->geometry();
m_view.widgetRec=QRect(0,0,rec.width(),rec.height());
}
void CStatistics2Dlg::slotSave()
{
// //保存位图,该部分需要罗林配合
// //QMessageBox::about(NULL,"提示","暂时未作");
// QString desktopPath=QDesktopServices::storageLocation(QDesktopServices::HomeLocation);
// desktopPath=desktopPath+QString("/Statistics2.jpg");
// QString imagePath=QFileDialog::getSaveFileName(this,"(Save Image)",desktopPath,"JPG File(*.jpg)");
// QSize vSize=m_view.size();
// QPixmap image(vSize);
// m_view.render(&image);
// bool isSave=image.save(imagePath,"JPG");
// QMessageBox::information(this,"提示","图片保存成功!");
// //accept();
}
/**
*@brief
*/
void CStatistics2Dlg::slotCancel()
{
delete []val;
//reject ();
}
void CStatistics2Dlg::slotCheckLjpl()
{
m_DrawLjpl=!m_DrawLjpl;
m_view.m_DrawLjpl=m_DrawLjpl;
m_view.update();
}
void CStatistics2Dlg::slotChangeName(const QString &text)
{
m_CurveName=text;//m_pUI->lineEditName->text();
m_view.m_CurveName=m_CurveName;
m_view.update();
}
void CStatistics2Dlg::slotChangeUnit(const QString &text)
{
m_CurveUnit=text;//m_pUI->lineEditUnit->text();
m_view.m_CurveUnit=m_CurveUnit;
m_view.update();
}
void CStatistics2Dlg::slotChangeXmin(const QString &text)
{
m_Xmin=text.toFloat();
Refurbish();
m_view.update();
}
void CStatistics2Dlg::slotChangeXmax(const QString &text)
{
m_Xmax=text.toFloat();
Refurbish();
m_view.update();
}
void CStatistics2Dlg::slotChangeXmin2(const QString &text)
{
m_Xmin2=text.toFloat();
Refurbish();
m_view.update();
}
void CStatistics2Dlg::slotChangeXmax2(const QString &text)
{
m_Xmax2=text.toFloat();
Refurbish();
m_view.update();
}
void CStatistics2Dlg::slotChangeYmin(const QString &text)
{
m_Ymin=text.toFloat();
Refurbish();
m_view.update();
}
void CStatistics2Dlg::slotChangeYmax(const QString &text)
{
m_Ymax=text.toFloat();
Refurbish();
m_view.update();
}
void CStatistics2Dlg::slotChangeSdep(const QString &text)
{
sdep=text.toFloat();
if(sdep<m_flStDepth)sdep=m_flStDepth;
//Refurbish();
//m_view.update();
}
void CStatistics2Dlg::slotChangeEdep(const QString &text)
{
edep=text.toFloat();
if(edep>m_flEnDepth)edep=m_flEnDepth;
//Refurbish();
//m_view.update();
}
void CStatistics2Dlg::slotChangeSmallGrid(const QString &text)
{
m_SmallGrid=text.toInt();
if(m_SmallGrid<1)
{
m_SmallGrid=1;
m_pUI->lineEditSmallGrid->setText(QString::number(m_SmallGrid));
}
if(m_SmallGrid>10)
{
m_SmallGrid=10;
m_pUI->lineEditSmallGrid->setText(QString::number(m_SmallGrid));
}
Refurbish();
m_view.update();
}
void CStatistics2Dlg::slotSetSdep(const int &dep)
{
m_pUI->lineEditSdep->setText(QString::number(dep/100.));
}
void CStatistics2Dlg::slotSetEdep(const int &dep)
{
m_pUI->lineEditEdep->setText(QString::number(dep/100.));
}
//time
void CStatistics2Dlg::slotChangeStime(const QString &text)
{
stime=text.toFloat();
if(stime<m_flStTime)stime=m_flStTime;
Refurbish();
m_view.update();
}
void CStatistics2Dlg::slotChangeEtime(const QString &text)
{
etime=text.toFloat();
if(etime>m_flEndTime)etime=m_flEndTime;
Refurbish();
m_view.update();
}
void CStatistics2Dlg::slotSetStime(const int &time)
{
m_pUI->lineEditStime->setText(QString::number(time/100.));
}
void CStatistics2Dlg::slotSetEtime(const int &time)
{
m_pUI->lineEditEtime->setText(QString::number(time/100.));
}
//
void CStatistics2Dlg::init()
{
CLogIO logio(FileName.toStdString().c_str(),(unsigned int)CLogIO::modeReadWrite);
int index=logio.OpenWave(CurveName.toStdString().c_str());
if(index<0) return;
logio.GetWaveInfo(index,&info);
num=(info.EndDepth-info.StartDepth)/info.DepLevel+1.5;
logio.CloseWave(index);
logio.Close();
d_min=info.StartDepth;
d_max=info.EndDepth;
m_flEnDepth = d_max;
m_flStDepth = d_min;
rlev=info.DepLevel;
m_flStTime=info.StartTime;
m_flEndTime=info.StartTime+info.TimeSamples*info.TimeLevel;
m_CurveName=CurveName,m_CurveUnit="("+QLatin1String(info.Unit)+")";
m_pUI->lineEditName->setText(CurveName);
m_pUI->lineEditUnit->setText(m_CurveUnit);
m_pUI->lineEditSdep1->setText(QString::number(d_min));
m_pUI->lineEditEdep1->setText(QString::number(d_max));
m_pUI->horizontalSliderSdep->setRange(d_min*100,d_max*100);
m_pUI->horizontalSliderEdep->setRange(d_min*100,d_max*100);
if(num*info.TimeSamples<=100000)//当数据点较少时全部统计
{
sdep=d_min;
edep=d_max;
}
else//当数据点较多时统计中间的5000个深度点
{
int m_ShowDepPoint=100000./info.TimeSamples;
m_ShowDepPoint/=2;
sdep=d_min+(num/2.-m_ShowDepPoint)*rlev;
edep=sdep+2.*m_ShowDepPoint*rlev;
}
m_pUI->lineEditSdep->setText(QString::number(sdep));
m_pUI->lineEditEdep->setText(QString::number(edep));
m_pUI->horizontalSliderSdep->setValue(sdep*100);
m_pUI->horizontalSliderEdep->setValue(edep*100);
m_pUI->lineEditSmallGrid->setText(QString::number(m_SmallGrid));
//time
m_pUI->lineEditStime1->setText(QString::number(m_flStTime));
m_pUI->lineEditEtime1->setText(QString::number(m_flEndTime));
m_pUI->horizontalSliderStime->setRange(m_flStTime*100,m_flEndTime*100);
m_pUI->horizontalSliderEtime->setRange(m_flStTime*100,m_flEndTime*100);
stime=m_flStTime;etime=m_flEndTime;
m_pUI->lineEditStime->setText(QString::number(stime));
m_pUI->lineEditEtime->setText(QString::number(etime));
m_pUI->horizontalSliderStime->setValue(stime*100);
m_pUI->horizontalSliderEtime->setValue(etime*100);
//
Statistics2();
m_Xmin=min;
m_Xmax=max;
m_pUI->lineEditXmin->setText(QString::number(min));
m_pUI->lineEditXmax->setText(QString::number(max));
m_pUI->lineEditYmin->setText(QString::number(m_Ymin));
m_pUI->lineEditYmax->setText(QString::number(m_Ymax));
Refurbish();
//初始化主频刻度范围15%————85%
int pp=0;
for(int i=0;i<10*m_SmallGrid;i++)
{
pp+=point[i];
if((float)pp/(float)ShowPoint>=0.15)
{
m_Xmin2=m_Xmin+i*(m_Xmax-m_Xmin)/(10.*m_SmallGrid);
ibegin=i;
break;
}
}
pp=0;
for(int i=0;i<10*m_SmallGrid;i++)
{
pp+=point[i];
if((float)pp/(float)ShowPoint>=0.85)
{
m_Xmax2=m_Xmin+i*(m_Xmax-m_Xmin)/(10.*m_SmallGrid);
iend=i;
break;
}
}
m_pUI->lineEditXmin2->setText(QString::number(m_Xmin2));
m_pUI->lineEditXmax2->setText(QString::number(m_Xmax2));
//频率刻度取整
if(fmax>50.)fmax=100.;
else if(fmax>20.)fmax=50.;
else if(fmax>10.)fmax=20.;
else if(fmax>5.)fmax=10.;
else fmax=5.;
m_Ymax=fmax;
m_Ymin=0;
m_pUI->lineEditYmin->setText(QString::number(m_Ymin));
m_pUI->lineEditYmax->setText(QString::number(m_Ymax));
//for plot
m_view.m_CurveName=m_CurveName;m_view.m_CurveUnit=m_CurveUnit;//显示的曲线名称和单位
for(int i=0;i<100;i++)m_view.point[i]=point[i];
m_view.ShowPoint=ShowPoint;
m_view.m_SmallGrid=m_SmallGrid;
m_view.m_Ymax=m_Ymax;
m_view.m_Xmin=m_Xmin,m_view.m_Xmax=m_Xmax;
m_view.m_DrawLjpl=m_DrawLjpl;
m_view.m_Xmin2=m_Xmin2,m_view.m_Xmax2=m_Xmax2;
m_view.update();
}
void CStatistics2Dlg::Statistics2()
{
bool ReReadData=1;
d_min=sdep;
d_max=edep;
if(val!=NULL){
if((sdep>=ReadSdep&&sdep<=ReadEdep)&&(edep>=ReadSdep&&edep<=ReadEdep))ReReadData=0;}//如果要统计的深度在读取的深度范围内,就不在读数据
if(ReReadData)
{
CLogIO logio(FileName.toStdString().c_str(),(unsigned int)CLogIO::modeReadWrite);
int index=logio.OpenWave(CurveName.toStdString().c_str());
if(index<0) return;
if(val!=NULL)delete []val;
num=(edep-sdep)/rlev+1.5;
val=new float[num*info.TimeSamples];
logio.ReadWave(index,sdep,num,&val[0]);
logio.CloseWave(index);
logio.Close();
ReadSdep=sdep;
ReadEdep=edep;
}
int ist=(sdep-ReadSdep)/rlev+0.5;
int dpoint=(edep-sdep)/rlev+0.5;//深度点数
int timepoint=(etime-stime)/info.TimeLevel+0.5;
tpoint=dpoint*timepoint;
min=99999;max=-99999;
average=0;
depmin=depmax=d_min;
timemin=timemax=stime;
int InvalidNum=0;
for(int i=ist;i<ist+dpoint;i++)
{
for(int j=(stime-m_flStTime)/info.TimeLevel;j<(etime-m_flStTime)/info.TimeLevel;j++)
{
int pos=i*info.TimeSamples+j;
if(val[pos]==-9999.||val[pos]==-999.25||val[pos]==-99999.||val[pos]==-9999.25)
{
InvalidNum++;
continue;
}
if(min>val[pos]){min=val[pos];depmin=d_min+i*rlev;timemin=j*info.TimeLevel+m_flStTime;}
if(max<val[pos]){max=val[pos];depmax=d_min+i*rlev;timemax=j*info.TimeLevel+m_flStTime;}
average+=val[pos];
}
}
//剔除无效点
if(tpoint>InvalidNum)average/=(tpoint-InvalidNum);
else average=val[(ist+1)*info.TimeSamples+int((stime-m_flStTime)/info.TimeLevel+0.5)];
float del=(m_Xmax-m_Xmin)/(10*m_SmallGrid);//del=(max-min)/(10*m_SmallGrid);
for(int j=0;j<100;j++)point[j]=0;
double vvv,v1,v2;
Variance=0.;
for(int i=ist;i<ist+dpoint;i++)
{
for(int k=(stime-m_flStTime)/info.TimeLevel;k<(etime-m_flStTime)/info.TimeLevel;k++)
{
int pos=i*info.TimeSamples+k;
if(val[pos]==-9999.||val[pos]==-999.25||val[pos]==-99999.||val[pos]==-9999.25)continue;
Variance+=(val[pos]-average)*(val[pos]-average);
for(int j=0;j<10*m_SmallGrid;j++)
{
vvv=val[pos],v1=m_Xmin+j*del,v2=m_Xmin+(float)(j+1)*del;
if(vvv>=v1&&vvv<=v2)
{
point[j]++;
break;
}
}
}
}
if(tpoint>InvalidNum)Variance/=(tpoint-InvalidNum);
else Variance=0;
Variance=sqrt(Variance);
DWORD maxpoint=0;//point[0];
ShowPoint=0;//point[0];
for(int j=0;j<10*m_SmallGrid;j++)
{
if(maxpoint<point[j])
{
maxpoint=point[j];
m_PVmin=m_Xmin+(float)j*del,m_PVmax=m_Xmin+(float)(j+1)*del;
}
ShowPoint+=point[j];
}
fmax=(float)maxpoint/(float)ShowPoint*100.;//(float)tpoint*100.;
}
void CStatistics2Dlg::slotRefurbish()
{
Refurbish();
m_view.update();
}
void CStatistics2Dlg::Refurbish()
{
if(val==NULL)return;
/*sdep=m_pUI->lineEditSdep->text().toFloat();
edep=m_pUI->lineEditEdep->text().toFloat();
m_Xmin=m_pUI->lineEditXmin->text().toFloat();
m_Xmax=m_pUI->lineEditXmax->text().toFloat();
m_Xmin2=m_pUI->lineEditXmin2->text().toFloat();
m_Xmax2=m_pUI->lineEditXmax2->text().toFloat();
m_Ymin=m_pUI->lineEditYmin->text().toFloat();
m_Ymax=m_pUI->lineEditYmax->text().toFloat();
if(sdep<m_flStDepth)sdep=m_flStDepth;
if(edep>m_flEnDepth)edep=m_flEnDepth;
if(sdep>=edep)return;
if(m_Xmin>=m_Xmax)return;
if(m_Ymin>=m_Ymax)return;
m_SmallGrid=m_pUI->lineEditSmallGrid->text().toInt();
if(m_SmallGrid<1)
{
m_SmallGrid=1;
m_pUI->lineEditSmallGrid->setText(QString::number(m_SmallGrid));
}
if(m_SmallGrid>10)
{
m_SmallGrid=10;
m_pUI->lineEditSmallGrid->setText(QString::number(m_SmallGrid));
}*/
if(sdep>=edep)return;
if(m_Xmin>=m_Xmax)return;
if(m_Ymin>=m_Ymax)return;
Statistics2();
QString str,jieguo;
str="开始深度 : "+QString::number(sdep)+"("+QLatin1String(info.DepthUnit)+")";jieguo="\r\n"+str;
str="结束深度 : "+QString::number(edep)+"("+QLatin1String(info.DepthUnit)+")";jieguo+="\r\n\r\n"+str;
str="统计深度段: "+QString::number(edep-sdep)+"("+QLatin1String(info.DepthUnit)+")";jieguo+="\r\n\r\n"+str;
str="开始时间 : "+QString::number(stime)+"("+QLatin1String(info.TimeUnit)+")";jieguo+="\r\n\r\n"+str;
str="结束时间 : "+QString::number(etime)+"("+QLatin1String(info.TimeUnit)+")";jieguo+="\r\n\r\n"+str;
str="有效数据点数 : "+QString::number(ShowPoint);jieguo+="\r\n\r\n"+str;//tpoint);
str="最小值 : "+QString::number(min)+m_CurveUnit;jieguo+="\r\n\r\n"+str;
str="最小值深度、时间 : "+QString::number(depmin)+"("+QLatin1String(info.DepthUnit)+"),"+QString::number(timemin)+"("+QLatin1String(info.TimeUnit)+")";jieguo+="\r\n\r\n"+str;
str="最大值 : "+QString::number(max)+m_CurveUnit;jieguo+="\r\n\r\n"+str;
str="最大值深度、时间 : "+QString::number(depmax)+"("+QLatin1String(info.DepthUnit)+"),"+QString::number(timemax)+"("+QLatin1String(info.TimeUnit)+")";jieguo+="\r\n\r\n"+str;
str="平均值 : "+QString::number(average)+m_CurveUnit;jieguo+="\r\n\r\n"+str;
str="最大频率 : "+QString::number(fmax);str+="/%";jieguo+="\r\n\r\n"+str;
str="最大频率数值范围 : "+QString::number(m_PVmin)+" -- "+QString::number(m_PVmax);jieguo+="\r\n\r\n"+str;
str="标准偏差 "+QString::number(Variance);jieguo+="\r\n\r\n"+str;
m_pUI->textEditJieGuo->setText(jieguo);
//for plot
m_view.m_CurveName=m_CurveName;m_view.m_CurveUnit=m_CurveUnit;//显示的曲线名称和单位
for(int i=0;i<100;i++)m_view.point[i]=point[i];
m_view.ShowPoint=ShowPoint;
m_view.m_SmallGrid=m_SmallGrid;
m_view.m_Ymax=m_Ymax;
m_view.m_Xmin=m_Xmin,m_view.m_Xmax=m_Xmax;
m_view.m_DrawLjpl=m_DrawLjpl;
m_view.m_Xmin2=m_Xmin2,m_view.m_Xmax2=m_Xmax2;
}
END_OSGGRAPHICS_NAMESPACE

View File

@ -0,0 +1,93 @@

#pragma warning(push,0)
#include <cassert>
#include <QDialog>
#include "ConsoleOutputWidget.h"
#include "ui_Statistics2.h"
#include "LogIO.h"
#include "view.h"//ll
#include "OSGFramework.h"
#pragma warning(pop)
#pragma execution_character_set("utf-8")
BEGIN_OSGGRAPHICS_NAMESPACE
/**
* @brief
*/
class CStatistics2Dlg : public QWidget//public QDialog
{
Q_OBJECT
public:
CStatistics2Dlg(QWidget * parent=0, Qt::WindowFlags flags=0);
~CStatistics2Dlg();
Ui_Statistics2 *m_pUI;
MyView m_view;//ll
private slots:
/**
*@brief
*/
void slotSave();
/**
*@brief
*/
void slotCancel();
void slotRefurbish();
//改变曲线名称
void slotChangeName(const QString &text);
//改变曲线单位
void slotChangeUnit(const QString &text);
//void slotRefurbish(const QString &text);
void slotChangeXmin(const QString &text);
void slotChangeXmax(const QString &text);
void slotChangeXmin2(const QString &text);
void slotChangeXmax2(const QString &text);
void slotChangeYmin(const QString &text);
void slotChangeYmax(const QString &text);
void slotChangeSdep(const QString &text);
void slotChangeEdep(const QString &text);
void slotChangeStime(const QString &text);
void slotChangeEtime(const QString &text);
void slotChangeSmallGrid(const QString &text);
void slotSetSdep(const int &dep);
void slotSetEdep(const int &dep);
void slotSetStime(const int &dep);
void slotSetEtime(const int &dep);
void slotCheckLjpl();
public:
QString FileName;//slf文件名
QString CurveName;//曲线名
void init();
void Refurbish();
void Statistics2();
Slf_WAVE info;
DWORD num;
float *val;
float d_min,d_max;
float m_flEnDepth;
float m_flStDepth;
float m_flEndTime;
float m_flStTime;
float stime;
float etime;
float sdep,edep,rlev,min,max;
float fmin,fmax;
float depmin,depmax,timemin,timemax;//最小、最大值所在的深度、时间
double average;
double Variance;//方差
DWORD point[100],tpoint,ShowPoint;
int m_SmallGrid;
float m_Xmin;
float m_Xmax;
float m_Ymin;
float m_Ymax;
float m_PVmax,m_PVmin;//最大频率的数值范围
float m_Xmin2;
float m_Xmax2;
int ibegin,iend;
bool m_DrawLjpl;
QString m_CurveName,m_CurveUnit;//显示的曲线名称和单位
};
END_OSGGRAPHICS_NAMESPACE;

View File

@ -0,0 +1,411 @@
#pragma warning(push,0)
// #include "Family.h"
#include <QMessageBox>
#include <QFileDialog>
#include <QPixmap>
#include <QDesktopServices>
#include <QRegExpValidator>
#include "StatisticsDlg.h"
#include "ui_Statistics.h"
#include "CStringType.h"
#include "Well.h"
#pragma warning(pop)
using namespace pai::ios::welllog;
BEGIN_OSGGRAPHICS_NAMESPACE
CStatisticsDlg::CStatisticsDlg(QWidget * parent, Qt::WindowFlags flags)
: QWidget(parent,flags)
{
m_pUI = new Ui_Statistics();
m_pUI->setupUi(this);
int w=width();
int h=height();
if(NULL != parent)
{
parent->setFixedSize(w,h);
}
m_pUI->cancelbtn->hide();
QObject::connect(m_pUI->okbtn, SIGNAL(clicked()), this, SLOT(slotSave()));
QObject::connect(m_pUI->cancelbtn, SIGNAL(clicked()), this, SLOT(slotCancel()));
QObject::connect(m_pUI->checkBox, SIGNAL(clicked()), this, SLOT(slotCheckLjpl()));
QObject::connect(m_pUI->lineEditName, SIGNAL(textChanged( QString )),this,SLOT(slotChangeName(QString)));
QObject::connect(m_pUI->lineEditUnit, SIGNAL(textChanged( QString )),this,SLOT(slotChangeUnit(QString)));
QObject::connect(m_pUI->lineEditXmin, SIGNAL(textChanged( QString )),this,SLOT(slotChangeXmin(QString)));
QObject::connect(m_pUI->lineEditXmin2, SIGNAL(textChanged( QString )),this,SLOT(slotChangeXmin2(QString)));
QObject::connect(m_pUI->lineEditYmin, SIGNAL(textChanged( QString )),this,SLOT(slotChangeYmin(QString)));
QObject::connect(m_pUI->lineEditXmax, SIGNAL(textChanged( QString )),this,SLOT(slotChangeXmax(QString)));
QObject::connect(m_pUI->lineEditXmax2, SIGNAL(textChanged( QString )),this,SLOT(slotChangeXmax2(QString)));
QObject::connect(m_pUI->lineEditYmax, SIGNAL(textChanged( QString )),this,SLOT(slotChangeYmax(QString)));
QObject::connect(m_pUI->lineEditSdep, SIGNAL(textChanged( QString )),this,SLOT(slotChangeSdep(QString)));
QObject::connect(m_pUI->lineEditEdep, SIGNAL(textChanged( QString )),this,SLOT(slotChangeEdep(QString)));
QObject::connect(m_pUI->lineEditSmallGrid, SIGNAL(textChanged( QString )),this,SLOT(slotChangeSmallGrid(QString)));
QObject::connect(m_pUI->horizontalSliderSdep, SIGNAL(valueChanged(int)),this, SLOT(slotSetSdep(int)));
QObject::connect(m_pUI->horizontalSliderEdep, SIGNAL(valueChanged(int)),this, SLOT(slotSetEdep(int)));
m_SmallGrid=10;
fmin=0,fmax=0;
m_Xmin=0;
m_Xmax=9999;
m_Ymin=0;
m_Ymax=100;
m_Xmin2=0;
m_Xmax2=0;
m_DrawLjpl=0;
QPalette pal;
m_pUI->widgetPlot->setStyleSheet("background:lightgray");
m_pUI->widgetPlot->setPalette(pal);
m_view.setParent(m_pUI->widgetPlot);
QRect rec=m_pUI->widgetPlot->geometry();
m_view.widgetRec=QRect(0,0,rec.width(),rec.height());
val=NULL;
}
void CStatisticsDlg::slotSave()
{
// //保存位图,该部分需要罗林配合
// QString desktopPath=QDesktopServices::storageLocation(QDesktopServices::HomeLocation);
// desktopPath=desktopPath+QString("/statistics.jpg");
// QString imagePath=QFileDialog::getSaveFileName(this,"(Save Image)",desktopPath,"JPG File(*.jpg)");
// if(imagePath.isEmpty())
// {
// return;
// }
// QSize vSize=m_view.size();
// QPixmap image(vSize);
// m_view.render(&image);
// bool isSave=image.save(imagePath,"JPG");
// QMessageBox::information(this,"提示","图片保存成功!");
// //accept();
}
/**
*@brief
*/
void CStatisticsDlg::slotCancel()
{
delete []val;
val=NULL;
//reject ();
}
void CStatisticsDlg::slotCheckLjpl()
{
m_DrawLjpl=!m_DrawLjpl;
m_view.m_DrawLjpl=m_DrawLjpl;
m_view.update();
}
void CStatisticsDlg::slotChangeName(const QString &text)
{
m_CurveName=text;//m_pUI->lineEditName->text();
m_view.m_CurveName=m_CurveName;
m_view.update();
}
void CStatisticsDlg::slotChangeUnit(const QString &text)
{
m_CurveUnit=text;//m_pUI->lineEditUnit->text();
m_view.m_CurveUnit=m_CurveUnit;
m_view.update();
}
void CStatisticsDlg::slotChangeXmin(const QString &text)
{
m_Xmin=text.toFloat();
Refurbish();
m_view.update();
}
void CStatisticsDlg::slotChangeXmax(const QString &text)
{
m_Xmax=text.toFloat();
Refurbish();
m_view.update();
}
void CStatisticsDlg::slotChangeXmin2(const QString &text)
{
m_Xmin2=text.toFloat();
Refurbish();
m_view.update();
}
void CStatisticsDlg::slotChangeXmax2(const QString &text)
{
m_Xmax2=text.toFloat();
Refurbish();
m_view.update();
}
void CStatisticsDlg::slotChangeYmin(const QString &text)
{
m_Ymin=text.toFloat();
Refurbish();
m_view.update();
}
void CStatisticsDlg::slotChangeYmax(const QString &text)
{
m_Ymax=text.toFloat();
Refurbish();
m_view.update();
}
void CStatisticsDlg::slotChangeSdep(const QString &text)
{
sdep=text.toFloat();
if(sdep<m_flStDepth)sdep=m_flStDepth;
Refurbish();
m_view.update();
}
void CStatisticsDlg::slotChangeEdep(const QString &text)
{
edep=text.toFloat();
if(edep>m_flEnDepth)edep=m_flEnDepth;
Refurbish();
m_view.update();
}
void CStatisticsDlg::slotChangeSmallGrid(const QString &text)
{
m_SmallGrid=text.toInt();
if(m_SmallGrid<1)
{
m_SmallGrid=1;
m_pUI->lineEditSmallGrid->setText(QString::number(m_SmallGrid));
}
if(m_SmallGrid>10)
{
m_SmallGrid=10;
m_pUI->lineEditSmallGrid->setText(QString::number(m_SmallGrid));
}
Refurbish();
m_view.update();
}
void CStatisticsDlg::slotSetSdep(const int &dep)
{
m_pUI->lineEditSdep->setText(QString::number(dep/100.));
}
void CStatisticsDlg::slotSetEdep(const int &dep)
{
m_pUI->lineEditEdep->setText(QString::number(dep/100.));
}
void CStatisticsDlg::init()
{
CLogIO logio(FileName.toStdString().c_str(),(unsigned int)CLogIO::modeReadWrite);
int index=logio.OpenCurve(CurveName.toStdString().c_str());
if(index<0) return;
logio.GetCurveInfo(index,&info);
num=(info.EndDepth-info.StartDepth)/info.DepLevel+1.5;
// value.reserve(num);
val=new float[num];
logio.ReadCurve(index,info.StartDepth,num,&val[0]);
logio.CloseCurve(index);
logio.Close();
d_min=info.StartDepth;
d_max=info.EndDepth;
m_flEnDepth = d_max;
m_flStDepth = d_min;
sdep=d_min;
edep=d_max;
rlev=info.DepLevel;
sample=num;
m_CurveName=CurveName,m_CurveUnit="("+QLatin1String(info.Unit)+")";
m_pUI->lineEditName->setText(CurveName);
QRegExp regExp("[A-Za-z0-9]{0,100}");//正则表达式第一位数字为a-z的数字第二位为1-9的数字后边是0-2位0-9的数字
m_pUI->lineEditName->setValidator(new QRegExpValidator(regExp,this));
m_pUI->lineEditUnit->setText(m_CurveUnit);
m_pUI->lineEditUnit->setValidator(new QRegExpValidator(regExp,this));
m_pUI->lineEditSdep1->setText(QString::number(sdep));
m_pUI->lineEditSdep1->setValidator(new QDoubleValidator(-9999999,9999999,6,this));
m_pUI->lineEditEdep1->setText(QString::number(edep));
m_pUI->lineEditEdep1->setValidator(new QDoubleValidator(-9999999,9999999,6,this));
m_pUI->horizontalSliderSdep->setRange(d_min*100,d_max*100);
m_pUI->horizontalSliderSdep->setValue(d_min*100);
m_pUI->horizontalSliderEdep->setRange(d_min*100,d_max*100);
m_pUI->horizontalSliderEdep->setValue(d_max*100);
m_pUI->lineEditSdep->setText(QString::number(sdep));
m_pUI->lineEditSdep->setValidator(new QDoubleValidator(-9999999,9999999,6,this));
m_pUI->lineEditEdep->setText(QString::number(edep));
m_pUI->lineEditEdep->setValidator(new QDoubleValidator(-9999999,9999999,6,this));
m_pUI->lineEditSmallGrid->setText(QString::number(m_SmallGrid));
m_pUI->lineEditSmallGrid->setValidator(new QDoubleValidator(-9999999,9999999,6,this));
statistics();
m_Xmin=min;
m_Xmax=max;
m_pUI->lineEditXmin->setText(QString::number(min));
m_pUI->lineEditXmin->setValidator(new QDoubleValidator(-9999999,9999999,6,this));
m_pUI->lineEditXmax->setText(QString::number(max));
m_pUI->lineEditXmax->setValidator(new QDoubleValidator(-9999999,9999999,6,this));
m_pUI->lineEditYmin->setText(QString::number(m_Ymin));
m_pUI->lineEditYmin->setValidator(new QDoubleValidator(-9999999,9999999,6,this));
m_pUI->lineEditYmax->setText(QString::number(m_Ymax));
m_pUI->lineEditYmax->setValidator(new QDoubleValidator(-9999999,9999999,6,this));
Refurbish();
//初始化主频刻度范围15%————85%
int pp=0;
for(int i=0;i<10*m_SmallGrid;i++)
{
pp+=point[i];
if((float)pp/(float)ShowPoint>=0.15)
{
m_Xmin2=m_Xmin+i*(m_Xmax-m_Xmin)/(10.*m_SmallGrid);
ibegin=i;
break;
}
}
pp=0;
for(int i=0;i<10*m_SmallGrid;i++)
{
pp+=point[i];
if((float)pp/(float)ShowPoint>=0.85)
{
m_Xmax2=m_Xmin+i*(m_Xmax-m_Xmin)/(10.*m_SmallGrid);
iend=i;
break;
}
}
m_pUI->lineEditXmin2->setText(QString::number(m_Xmin2));
m_pUI->lineEditXmin2->setValidator(new QDoubleValidator(-9999999,9999999,6,this));
m_pUI->lineEditXmax2->setText(QString::number(m_Xmax2));
m_pUI->lineEditXmax2->setValidator(new QDoubleValidator(-9999999,9999999,6,this));
//频率刻度取整
if(fmax>50.)fmax=100.;
else if(fmax>20.)fmax=50.;
else if(fmax>10.)fmax=20.;
else if(fmax>5.)fmax=10.;
else fmax=5.;
m_Ymax=fmax;
m_Ymin=0;
m_pUI->lineEditYmin->setText(QString::number(m_Ymin));
m_pUI->lineEditYmin->setValidator(new QDoubleValidator(-9999999,9999999,6,this));
m_pUI->lineEditYmax->setText(QString::number(m_Ymax));
m_pUI->lineEditYmax->setValidator(new QDoubleValidator(-9999999,9999999,6,this));
//for plot
m_view.m_CurveName=m_CurveName;m_view.m_CurveUnit=m_CurveUnit;//显示的曲线名称和单位
for(int i=0;i<100;i++)m_view.point[i]=point[i];
m_view.ShowPoint=ShowPoint;
m_view.m_SmallGrid=m_SmallGrid;
m_view.m_Ymax=m_Ymax;
m_view.m_Xmin=m_Xmin,m_view.m_Xmax=m_Xmax;
m_view.m_DrawLjpl=m_DrawLjpl;
m_view.m_Xmin2=m_Xmin2,m_view.m_Xmax2=m_Xmax2;
m_view.update();
}
void CStatisticsDlg::statistics()
{
int ist=(sdep-d_min)/rlev+0.5;
if(ist<0) ist=0;
tpoint=(edep-sdep)/rlev;
if(tpoint<0) return;
sample=tpoint;
min=99999;max=-99999;
average=0;
depmin=depmax=d_min;
int InvalidNum=0;
for(int i=ist;i<ist+tpoint;i++)
{
if(val[i]==-9999.||val[i]==-999.25||val[i]==-99999.||val[i]==-9999.25)
{
InvalidNum++;
continue;
}
if(min>val[i]){min=val[i];depmin=d_min+i*rlev;}
if(max<val[i]){max=val[i];depmax=d_min+i*rlev;}
average+=val[i];
}
//剔除无效点
//average/=tpoint;
if(tpoint>InvalidNum)average/=(tpoint-InvalidNum);
else average=val[ist+1];
float del=(m_Xmax-m_Xmin)/(10*m_SmallGrid);//del=(max-min)/(10*m_SmallGrid);
for(int j=0;j<100;j++)point[j]=0;
double vvv,v1,v2;
Variance=0.;
for(int i=ist+1;i<ist+tpoint;i++)
{
if(val[i]==-9999.||val[i]==-999.25||val[i]==-99999.||val[i]==-9999.25)continue;
Variance+=(val[i]-average)*(val[i]-average);
for(int j=0;j<10*m_SmallGrid;j++)
{
vvv=val[i],v1=m_Xmin+j*del,v2=m_Xmin+(float)(j+1)*del;
/*if(j==0)
{
if(vvv>=v1&&vvv<=v2)
{
point[j]++;
break;
}
}
else
{
if(vvv>v1&&vvv<=v2)
{
point[j]++;
break;
}
}*/
if(vvv>v1&&vvv<=v2)
{
point[j]++;
break;
}
}
}
if(tpoint>InvalidNum)Variance/=(tpoint-InvalidNum);
else Variance=0;
Variance=sqrt(Variance);
int maxpoint=-1;//point[0];
ShowPoint=0;//point[0];
for(int j=0;j<10*m_SmallGrid;j++)
{
if(maxpoint<point[j])
{
maxpoint=point[j];
m_PVmin=m_Xmin+(float)j*del,m_PVmax=m_Xmin+(float)(j+1)*del;
}
ShowPoint+=point[j];
}
fmax=(float)maxpoint/(float)ShowPoint*100.;//(float)tpoint*100.;
}
/*
void CStatisticsDlg::slotRefurbish(const QString &text)
{
Refurbish();
m_view.update();
}
*/
void CStatisticsDlg::Refurbish()
{
if(sdep<d_min||edep>d_max)
{
AfxMessageBox("深度超界!");
return;
}
if(sdep>=edep)return;
if(m_Xmin>=m_Xmax)return;
if(m_Ymin>=m_Ymax)return;
statistics();
QString str,jieguo;
str="开始深度 : "+QString::number(sdep)+"(m)";jieguo="\r\n"+str;
str="结束深度 : "+QString::number(edep)+"(m)";jieguo+="\r\n\r\n"+str;
str="统计深度段 : "+QString::number(edep-sdep)+"(m)";jieguo+="\r\n\r\n"+str;
str="有效数据点数 : "+QString::number(ShowPoint);jieguo+="\r\n\r\n"+str;//tpoint);
str="最小值 : "+QString::number(min)+m_CurveUnit;jieguo+="\r\n\r\n"+str;
str="最小值深度 : "+QString::number(depmin)+"(m)";jieguo+="\r\n\r\n"+str;
str="最大值 : "+QString::number(max)+m_CurveUnit;jieguo+="\r\n\r\n"+str;
str="最大值深度 : "+QString::number(depmax)+"(m)";jieguo+="\r\n\r\n"+str;
str="平均值 : "+QString::number(average)+m_CurveUnit;jieguo+="\r\n\r\n"+str;
str="最大频率 : "+QString::number(fmax);str+="(%)";jieguo+="\r\n\r\n"+str;
str="最大频率数值范围 : "+QString::number(m_PVmin)+" -- "+QString::number(m_PVmax);jieguo+="\r\n\r\n"+str;
str="标准偏差 "+QString::number(Variance);jieguo+="\r\n\r\n"+str;
m_pUI->textEditJieGuo->setText(jieguo);
//for plot
m_view.m_CurveName=m_CurveName;m_view.m_CurveUnit=m_CurveUnit;//显示的曲线名称和单位
for(int i=0;i<100;i++)m_view.point[i]=point[i];
m_view.ShowPoint=ShowPoint;
m_view.m_SmallGrid=m_SmallGrid;
m_view.m_Ymax=m_Ymax;
m_view.m_Xmin=m_Xmin,m_view.m_Xmax=m_Xmax;
m_view.m_DrawLjpl=m_DrawLjpl;
m_view.m_Xmin2=m_Xmin2,m_view.m_Xmax2=m_Xmax2;
}
END_OSGGRAPHICS_NAMESPACE

View File

@ -0,0 +1,87 @@

#pragma warning(push,0)
#include <cassert>
#include <QDialog>
#include "ConsoleOutputWidget.h"
#include "ui_Statistics.h"
#include "LogIO.h"
#include "view.h"//ll
#include "OSGFramework.h"
#pragma warning(pop)
#pragma execution_character_set("utf-8")
BEGIN_OSGGRAPHICS_NAMESPACE
/**
* @brief
*/
class CStatisticsDlg : public QWidget
{
Q_OBJECT
public:
CStatisticsDlg(QWidget * parent=0, Qt::WindowFlags flags=0);
~CStatisticsDlg()
{
if(m_pUI) delete m_pUI;
if(val) delete val;
}
Ui_Statistics *m_pUI;
MyView m_view;//ll
private slots:
/**
*@brief
*/
void slotSave();
/**
*@brief
*/
void slotCancel();
//改变曲线名称
void slotChangeName(const QString &text);
//改变曲线单位
void slotChangeUnit(const QString &text);
//void slotRefurbish(const QString &text);
void slotChangeXmin(const QString &text);
void slotChangeXmax(const QString &text);
void slotChangeXmin2(const QString &text);
void slotChangeXmax2(const QString &text);
void slotChangeYmin(const QString &text);
void slotChangeYmax(const QString &text);
void slotChangeSdep(const QString &text);
void slotChangeEdep(const QString &text);
void slotChangeSmallGrid(const QString &text);
void slotSetSdep(const int &dep);
void slotSetEdep(const int &dep);
void slotCheckLjpl();
public:
QString FileName;//slf文件名
QString CurveName;//曲线名
void init();
void Refurbish();
void statistics();
Slf_CURVE info;
DWORD num;
float *val;
float d_min,d_max;
float m_flEnDepth;
float m_flStDepth;
float sdep,edep,rlev,min,max;
float fmin,fmax,depmin,depmax;
double average;
double Variance;//方差
int sample,point[100],tpoint,ShowPoint;
int m_SmallGrid;
float m_Xmin;
float m_Xmax;
float m_Ymin;
float m_Ymax;
float m_PVmax,m_PVmin;//最大频率的数值范围
float m_Xmin2;
float m_Xmax2;
int ibegin,iend;
bool m_DrawLjpl;
QString m_CurveName,m_CurveUnit;//显示的曲线名称和单位
};
END_OSGGRAPHICS_NAMESPACE;

View File

@ -0,0 +1,69 @@
#include "deptlineedit.h"
#include <QPaintEvent>
#include <QPainter>
#include <QStyleOptionFrameV2>
#include <QScrollBar>
#include <QGraphicsProxyWidget>
#include <QHBoxLayout>
#include <QTextCodec>
#include <QSpacerItem>
DeptLineEdit::DeptLineEdit(QWidget *parent)
: QGraphicsView(parent)
{
init();
}
DeptLineEdit::~DeptLineEdit()
{
}
void DeptLineEdit::init()
{
proxyWidget=NULL;
m_depWidget=NULL;
m_lbl=NULL;
this->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
this->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
m_depWidget=new QWidget();
m_depWidget->setFixedSize(200,35);
QHBoxLayout *hlayout=new QHBoxLayout();
lineEdit_Depth=new QLineEdit(m_depWidget);
lineEdit_Depth->setFixedSize(100,30);
lineEdit_Depth->setAlignment(Qt::AlignLeft|Qt::AlignVCenter);
lineEdit_Depth->setContentsMargins(0,0,0,0);
lineEdit_Depth->setStyleSheet("border:1px solid gray;");
m_lbl=new QLabel(m_depWidget);
m_lbl->setFixedHeight(30);
m_lbl->setText(tr("当前深度(m):"));//
hlayout->addStretch(1);
hlayout->addWidget(m_lbl,0,Qt::AlignHCenter);
hlayout->addWidget(lineEdit_Depth,1);
hlayout->addStretch(1);
hlayout->setContentsMargins(0,0,0,0);
m_lbl->setAlignment(Qt::AlignHCenter|Qt::AlignVCenter);
m_depWidget->setLayout(hlayout);
m_depWidget->setContentsMargins(0,0,0,0);
m_scene=new QGraphicsScene();
this->setScene(m_scene);
}
void DeptLineEdit::showEvent(QShowEvent *)
{
m_scene->setSceneRect(rect());
m_depWidget->setFixedSize(height(),width());
proxyWidget= m_scene->addWidget(m_depWidget);
this->setContentsMargins(0,0,0,0);
proxyWidget->setContentsMargins(0,0,0,0);
QPoint point=rect().center();
// proxyWidget->translate(0,point.y()+height()/2.+1);
QPointF newPos = proxyWidget->pos() + QPointF(0, point.y()+height()/2.+1); // 计算新的位置
proxyWidget->setPos(newPos);
proxyWidget->setRotation(-90);
}

View File

@ -0,0 +1,37 @@
#ifndef DEPTLINEEDIT_H
#define DEPTLINEEDIT_H
#include <QWidget>
#include <QLineEdit>
#include <QGraphicsProxyWidget>
#include <QGraphicsView>
#include <QLineEdit>
#include <QLabel>
#pragma execution_character_set("utf-8")
/*自定义输入控件*/
class DeptLineEdit : public QGraphicsView
{
Q_OBJECT
public:
DeptLineEdit(QWidget *parent);
~DeptLineEdit();
QLineEdit *lineEdit_Depth;
QLabel *m_lbl;
// QWidget interface
protected:
void showEvent(QShowEvent *);
private:
void init();
private:
QGraphicsScene *m_scene;
private:
QRect m_rect;
QGraphicsProxyWidget* proxyWidget;
QWidget *m_depWidget;
};
#endif // DEPTLINEEDIT_H

108
DataMgr/src/view.cpp Normal file
View File

@ -0,0 +1,108 @@
#include "view.h"
#include <QPainter>
MyView::MyView(QWidget *parent) : QWidget(parent)
{
}
void MyView::paintEvent(QPaintEvent *event)
{
/* QPainter paint;
paint.begin(this);
paint.setBrush(Qt::white);
paint.drawRect(plotrec);
QString str=m_CurveName+"曲线数值分布图";
QRect rec=QRect(plotrec.left(),plotrec.top(),plotrec.width(),30);
paint.drawText(rec, Qt::AlignHCenter| Qt::AlignVCenter,str);
paint.end();*/
QPainter paint;
paint.begin(this);
// paint.setBrush(Qt::lightGray);
//paint.drawRect(plotrec);
QRect plotrec=widgetRec;
QRect rec1=widgetRec;
QString str=m_CurveName+"曲线数值分布图";
QRect rec=QRect(plotrec.left(),plotrec.top(),plotrec.width(),30);
paint.drawText(rec, Qt::AlignHCenter| Qt::AlignVCenter,str);
QRect rthy=plotrec;
rthy.adjust(70,40,-60,-60);
int x0=rthy.left(),y0=rthy.bottom(),h=rthy.height(),w=rthy.width();
int ptotal=point[0],pmax=point[0];
for(int i=1;i<10*m_SmallGrid;i++)
{
ptotal+=point[i];
if(pmax<point[i])pmax=point[i];
}
float hmax=100.*(float)pmax/(float)ShowPoint;
plotrec.setTop(rthy.bottom()+16);
for(int i=0;i<=10;i++)
{
//横线
paint.drawLine(x0,y0-i*h/10,x0+w,y0-i*h/10);
str=QString::number(i*m_Ymax/10.,'f',1);
if((m_Ymax/10.)==int(m_Ymax/10))str=QString::number(i*m_Ymax/10.);//测试520
paint.drawText(x0-25,y0-i*h/10+10,str);
//纵线
paint.drawLine(x0+i*w/10,y0-h,x0+i*w/10,y0);
if(i%2==0)
{
plotrec.setLeft(x0+(i-1)*w/10);
plotrec.setRight(x0+(i+1)*w/10);
str=QString::number(m_Xmin+i*(m_Xmax-m_Xmin)/10.);
paint.drawText(plotrec, Qt::AlignHCenter| Qt::AlignTop,str);
}
}
//写x、y轴坐标名
rec1.adjust(0,40,rec1.left()+40-rec1.right(),0);
//rec1.top+=40;
//rec1.right=rec1.left+40;
paint.drawText(rec1,Qt::AlignHCenter| Qt::AlignTop,"pp");//"频");
rec1.adjust(0,20,0,0);//rec1.top+=20;
paint.drawText(rec1,Qt::AlignHCenter| Qt::AlignTop,"LL");//"率");//dc.DrawText("",rec1,DT_SINGLELINE|DT_TOP|DT_CENTER);
rec1.adjust(0,20,0,0);//rec1.top+=20;
paint.drawText(rec1,Qt::AlignHCenter| Qt::AlignTop,"(%)");//dc.DrawText("",rec1,DT_SINGLELINE|DT_TOP|DT_CENTER);
plotrec.setLeft(x0);plotrec.setBottom(plotrec.bottom()-10);
paint.drawText(plotrec,Qt::AlignHCenter| Qt::AlignBottom,m_CurveName+m_CurveUnit);//dc.DrawText(,plotrec,DT_SINGLELINE|DT_BOTTOM|DT_CENTER);
//CBrush *oldBrush=dc.SelectObject(&GreenBrush);
for(int i=0;i<10*m_SmallGrid;i++)
{
plotrec.setLeft(x0+i*w/(10*m_SmallGrid));//plotrec.left=x0+i*w/(10*m_SmallGrid);//注意i*w/(10*m_SmallGrid)和w/(10*m_SmallGrid)*i误差挺大
plotrec.setRight(x0+(i+1)*w/(10*m_SmallGrid));
plotrec.setBottom(y0);
float y=(float)point[i]/(float)pmax;//y=(float)point[i]/(float)pmax;
plotrec.setTop(y0-y*h*hmax/m_Ymax);
float left=m_Xmin+i*(m_Xmax-m_Xmin)/(10*m_SmallGrid);
float right=m_Xmin+(i+1)*(m_Xmax-m_Xmin)/(10*m_SmallGrid);
if(left>=m_Xmax2||right<=m_Xmin2)paint.setBrush(Qt::green);
//if(i<ibegin||i>iend)dc.FillRect(plotrec,&GreenBrush);
else paint.setBrush(Qt::red);
paint.drawRect(plotrec);
}
if(!m_DrawLjpl) {
paint.end();
return;
}
//画累计频率线
int pp=0;
QPen pen(Qt::red);
pen.setStyle(Qt::SolidLine);
pen.setWidth(2);
paint.setPen(pen);
float x1=x0,y1=y0;
for(int i=0;i<10*m_SmallGrid;i++)
{
pp+=point[i];
float x=x0+(float)((i+1.)*w/(10.*m_SmallGrid));
float y=(float)pp/(float)ShowPoint;//ptotal;
paint.drawLine(x1,y1,x,y0-y*h);
x1=x,y1=y0-y*h;
}
paint.end();
}

31
DataMgr/src/view.h Normal file
View File

@ -0,0 +1,31 @@
#ifndef VIEW_H
#define VIEW_H
#include <QWidget>
#pragma execution_character_set("utf-8")
class MyView : public QWidget
{
Q_OBJECT
public:
explicit MyView(QWidget *parent = nullptr);
QRect widgetRec;
QString m_CurveName,m_CurveUnit;//显示的曲线名称和单位
int point[100];
int ShowPoint;
int m_SmallGrid;
float m_Ymax;
float m_Xmin,m_Xmax;
bool m_DrawLjpl;
float m_Xmin2,m_Xmax2;
signals:
public slots:
// QWidget interface
protected:
void paintEvent(QPaintEvent *event);
};
#endif // VIEW_H

View File

@ -0,0 +1,60 @@
/**
* @file ObjWellLogWavefile.h
* @brief 线
* @date 2015-2-10
* @author: zhangjie
*/
#ifndef PAI_FRAME_OSGWELLLOGWAVEFILE_H
#define PAI_FRAME_OSGWELLLOGWAVEFILE_H
#pragma warning( push ,0)
#include <QUuid>
// #include "ObjectEvent.h"
#include "BaseObject.h"
#include "ObjWelllog.h"
#include "MemRdWt.h"
#include <QVector>
#pragma warning( pop )
BEGIN_OSGDATAMODEL_NAMESPACE;
class CObjWell;
class OSGDATAMODEL_EXPORT CObjWellLogWavefile: public CObjWellLog
{
Q_OBJECT
public:
CObjWellLogWavefile();
virtual ~CObjWellLogWavefile();
virtual QUuid GetTypeID()const;
virtual QString GetDescription();
virtual void GetValidMDProperty(PFLOATPROPERTY &vMD,PFLOATPROPERTY &vProperty,float sdep=0,float edep=7000 );
void SetisCorrDepth(bool IsCorrDepth);
void SetisCorrA1ZM(bool IsCorrA1ZM);
void SetArrayNum(int ArrayNum);
//从slf加载数据
virtual bool LoadFromSLF();
virtual bool SaveToSLF();
//数据变化后写入slf数据
// virtual bool SaveToSLF();
void SetData(int i,int j,float *buffer);//行列设置数据
double GetData(int i,int j,char *buffer);//行列取数据
void SetData(float dep,int j,float *buffer);//深度列设置数据
double GetData(float dep,int j,char *buffer);//深度列设置数据
void DepthAlign(char *mr,int num,int pad,int ToolType);
void AzmiuthCorrect(char *mr,int Row,int Col,char *p1az,Slf_CURVE &curveinfo,int shift0);
void HorizMirror(float *mr,int Row,int Col);
int m_ArrayNum;
Slf_WAVE waveinfo;
Slf_WAVE gaincurveinfo;
Slf_WAVE timecurveinfo;
bool isCorrDepth;
bool isCorrA1ZM;
QVector <double> valMin,valMax;
QSharedMemory m_GainSharedMemory;
QSharedMemory m_TimeSharedMemory;
};
using namespace pai::datamodel;
using namespace pai::ios::welllog;
END_OSGDATAMODEL_NAMESPACE
#endif

View File

@ -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)

File diff suppressed because it is too large Load Diff

View File

@ -17,7 +17,7 @@
#include "LogIO.h"
#include "MemRdWt.h"
#pragma warning( pop )
#pragma execution_character_set("utf-8")
//class CDataManagger;
class GridDataAdapter;

View File

@ -21,8 +21,7 @@
#include <QApplication>
#include "BaseFun.h"
// #include "ObjCoreImage.h"
#include "geometryutils.h"
// #include "ObjWellLogWavefile.h"
#include "ObjWellLogWavefile.h"
#include "ObjWelllog.h"
#include "LogIO.h"
// #include "CurveLineLog.h"
@ -39,6 +38,7 @@
*
*/
#pragma execution_character_set("utf-8")
using namespace pai::datamodel;
using namespace pai::gui;
@ -275,7 +275,7 @@ private:
QScrollBar *m_verScrolBar;
QScrollBar *m_horScrolBar;
PFLOATPROPERTY *m_MutiVM;
// CObjWellLogWavefile *m_pWave;
CObjWellLogWavefile *m_pWave;
// CObjWellLogTDT *m_pTDT;
// CObjWellLogFMT *m_pFMT;
QList<QTableWidgetItem*> m_pageItems;

View File

@ -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)

View File

@ -22,6 +22,7 @@
// #include "DataTree.h"
// #include <qtconcurrentrun.h>
// #include "ObjWellLogWavefile.h"
#include <QtConcurrent/QtConcurrentRun>
#include "DataManagger.h"
#include "assetcopy.h"
// #include <Windows.h>
@ -568,100 +569,100 @@ void GridDataAdapter::attachWellLogView()
void GridDataAdapter::bindWellLogData(int wellLogIndex)
{
// if(wellLogIndex>=m_pWellLogs.size()) return;
// if(m_horScrolValue /*+wellLogIndex*/ >= m_nSamples/*m_pWellLogs.size()*/) {
// m_horScrolValue=m_nSamples/*m_pWellLogs.size()-wellLogIndex*/-1;
// if(m_horScrolValue<0) m_horScrolValue=0;
// }
// if(wellLogIndex > m_pWellLogs.size()){
// wellLogIndex = m_pWellLogs.size() - 1;
// }
// int index=/*m_horScrolValue+*/wellLogIndex;
// if(index<0) return;
if(wellLogIndex>=m_pWellLogs.size()) return;
if(m_horScrolValue /*+wellLogIndex*/ >= m_nSamples/*m_pWellLogs.size()*/) {
m_horScrolValue=m_nSamples/*m_pWellLogs.size()-wellLogIndex*/-1;
if(m_horScrolValue<0) m_horScrolValue=0;
}
if(wellLogIndex > m_pWellLogs.size()){
wellLogIndex = m_pWellLogs.size() - 1;
}
int index=/*m_horScrolValue+*/wellLogIndex;
if(index<0) return;
// CObjWellLogTABLE* pTable = dynamic_cast<CObjWellLogTABLE*>(m_pWellLogs[index]);
// if(pTable) return;
// CObjWellLog* pround = dynamic_cast<CObjWellLog*>(m_pWellLogs[index]);
// if(pround && pround->GetSlfFileName()!="")
// {
// CString TypeName=pround->GetParent()->GetName();
// int Type=0;
// //if(TypeName=="波列数据")Type=1;
// if(m_pWellLogs[0]->GetTypeID()==GetClassID_WellLogWavefile())Type=1;//whp add 2020.5.11 for 波列数据编辑和管理
// QString CurveName=pround->GetName();
// curveName = CurveName;
// QString FileName=pround->GetSlfFileName();
// fileName = FileName;
// QWidget* parent=qobject_cast<QWidget*>(m_table->parent());
// if(NULL == parent)
// {
// return;
// }
// QWidget* sPage=parent->findChild<QWidget*>("statisticsPage");
// QWidget* pPage=parent->findChild<QWidget*>("protoprtyPage");
// QWidget* cPage=parent->findChild<QWidget*>("computePage");
// QWidget* pvPage=parent->findChild<QWidget*>("curvePreViewPage");
// QTabWidget* tabWidget=parent->findChild<QTabWidget*>("tabWidget");
// if(NULL != sPage && NULL != pPage && NULL != cPage && NULL != pvPage)
// {
// if(NULL != tabWidget)
// {
// if(Type==0)
// {
// tabWidget->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding);
// //tabWidget->setMinimumWidth(0);
// //tabWidget->setMaximumWidth(16777215);
// }
// else
// {
// tabWidget->setSizePolicy(QSizePolicy::Fixed/*Preferred*/,QSizePolicy::Expanding);//whp add 2020.5.11 for 波列数据编辑和管理
// //tabWidget->setMinimumWidth(1216);
// //tabWidget->setMaximumWidth(1216);
// }
// QScrollArea* sScrollArea=tabWidget->findChild<QScrollArea*>("sScrollArea");
// QScrollArea* pScrollArea=tabWidget->findChild<QScrollArea*>("pScrollArea");
// QScrollArea* cScrollArea=tabWidget->findChild<QScrollArea*>("cscrollArea");
// QScrollArea* curveScrollArea=tabWidget->findChild<QScrollArea*>("curveScrollArea");
// if(NULL != sScrollArea)
// {
// sScrollArea->setWidget(sPage);
// }
CObjWellLog* pround = dynamic_cast<CObjWellLog*>(m_pWellLogs[index]);
if(pround && pround->GetSlfFileName()!="")
{
// CString TypeName=pround->GetParent()->GetName();
int Type=0;
//if(TypeName=="波列数据")Type=1;
if(m_pWellLogs[0]->GetTypeID()==GetClassID_WellLogWavefile())Type=1;//whp add 2020.5.11 for 波列数据编辑和管理
QString CurveName=pround->GetName();
curveName = CurveName;
QString FileName=pround->GetSlfFileName();
fileName = FileName;
QWidget* parent=qobject_cast<QWidget*>(m_table->parent());
if(NULL == parent)
{
return;
}
QWidget* sPage=parent->findChild<QWidget*>("statisticsPage");
QWidget* pPage=parent->findChild<QWidget*>("protoprtyPage");
QWidget* cPage=parent->findChild<QWidget*>("computePage");
QWidget* pvPage=parent->findChild<QWidget*>("curvePreViewPage");
QTabWidget* tabWidget=parent->findChild<QTabWidget*>("tabWidget");
if(NULL != sPage && NULL != pPage && NULL != cPage && NULL != pvPage)
{
if(NULL != tabWidget)
{
if(Type==0)
{
tabWidget->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding);
//tabWidget->setMinimumWidth(0);
//tabWidget->setMaximumWidth(16777215);
}
else
{
tabWidget->setSizePolicy(QSizePolicy::Fixed/*Preferred*/,QSizePolicy::Expanding);//whp add 2020.5.11 for 波列数据编辑和管理
//tabWidget->setMinimumWidth(1216);
//tabWidget->setMaximumWidth(1216);
}
QScrollArea* sScrollArea=tabWidget->findChild<QScrollArea*>("sScrollArea");
QScrollArea* pScrollArea=tabWidget->findChild<QScrollArea*>("pScrollArea");
QScrollArea* cScrollArea=tabWidget->findChild<QScrollArea*>("cscrollArea");
QScrollArea* curveScrollArea=tabWidget->findChild<QScrollArea*>("curveScrollArea");
if(NULL != sScrollArea)
{
sScrollArea->setWidget(sPage);
}
// if(NULL != pScrollArea)
// {
// pScrollArea->setWidget(pPage);
// }
if(NULL != pScrollArea)
{
pScrollArea->setWidget(pPage);
}
// if(NULL != cScrollArea)
// {
// if(Type==0)cScrollArea->setWidget(cPage);
// }
if(NULL != cScrollArea)
{
if(Type==0)cScrollArea->setWidget(cPage);
}
// if(NULL != curveScrollArea)
// {
// curveScrollArea->setWidget(pvPage);
// }
if(NULL != curveScrollArea)
{
curveScrollArea->setWidget(pvPage);
}
// sPage->show();
// pPage->show();
// pvPage->show();
// if(Type==0)
// {
// cPage->show();//whp change 2020.5.11 for 波列数据编辑和管理 波列曲线不计算
// }
sPage->show();
pPage->show();
pvPage->show();
if(Type==0)
{
cPage->show();//whp change 2020.5.11 for 波列数据编辑和管理 波列曲线不计算
}
// tabWidget->show();
// //调用
// m_mgr->DataStatistics(Type,FileName,CurveName,sPage);
// m_mgr->CurvePropertyEdit(Type,FileName,CurveName,pPage);
// m_mgr->CallDisplayWaveOrCurve(Type,FileName,CurveName,pvPage);
// if(Type==0)
// {
// m_mgr->CurveCompute(FileName,QStringList()<<CurveName,cPage);
// }
// }
tabWidget->show();
//调用
m_mgr->DataStatistics(Type,FileName,CurveName,sPage);
m_mgr->CurvePropertyEdit(Type,FileName,CurveName,pPage);
m_mgr->CallDisplayWaveOrCurve(Type,FileName,CurveName,pvPage);
if(Type==0)
{
m_mgr->CurveCompute(FileName,QStringList()<<CurveName,cPage);
}
}
// }
// }
}
}
}
@ -687,9 +688,9 @@ void GridDataAdapter::ReFreshWindow(int type)
break;
case D_MultWellLogData:
{
// m_pWave->isLoad=false;
// m_pWave->LoadFromSLF();
// updatetMultWellLogData();
m_pWave->isLoad=false;
m_pWave->LoadFromSLF();
updatetMultWellLogData();
}
break;
case D_TableWellLogData:
@ -791,9 +792,7 @@ void GridDataAdapter::calcuPageRowsCols()
m_pageCol = m_pWellLogs.size() + 1;
//m_pageCol = (tableWidth%DefColWidth==0)?(tableWidth/DefColWidth):(tableWidth/DefColWidth+1);
}
if(m_dtype == D_TableWellLogData||
m_dtype==D_TDTWellLogData||
m_dtype==D_FMTWellLogData){
@ -1909,44 +1908,44 @@ void GridDataAdapter::exportWellLogData(FILE *fp, DepthProgress& progress)
//////////////////////////////////////////////////////////
void GridDataAdapter::initMultWellLogData(DType type,QList<CObjWellLog*> WellLogs)
{
// m_pWellLogs=WellLogs;
m_pWellLogs=WellLogs;
// for(int i = 0; i < m_pWellLogs.size(); i++){
// m_pWellLogs[i]->isUsing = true;
// }
for(int i = 0; i < m_pWellLogs.size(); i++){
m_pWellLogs[i]->isUsing = true;
}
// m_pAssetCopy->SetWellLogs(type,WellLogs);
// m_pWave=(CObjWellLogWavefile *)m_pWellLogs[0];
// if(!m_pWave)return;
// m_pWave->isLoad=false;
// m_pWave->LoadFromSLF();
// m_MutiVM=&m_pWave->GetProperty();
// WaveInfo=m_pWave->waveinfo;
// m_dtype=type;
// m_SDep = WaveInfo.StartDepth;
// m_EDep = WaveInfo.EndDepth;
// m_Rlev = WaveInfo.DepLevel;
// m_RepCode = WaveInfo.RepCode;
// m_CodeLen = WaveInfo.CodeLen;
// m_SamplePoint = WaveInfo.SamplePoint;
// m_nSamples = WaveInfo.SamplePoint*WaveInfo.ArrayNum;
// m_flRlev2 = WaveInfo.TimeLevel;
// m_PointNum = (float)(fabs((m_EDep-m_SDep)/m_Rlev+1.5));
// m_TitleField.clear();
// QString depthUnit=m_pWellLogs[0]->GetDepthUnit();
// if(m_pWellLogs[0]->GetDepthUnit()=="m"&&depthUnit!="m"&&depthUnit!="米") depthUnit="";
// else if(m_pWellLogs[0]->GetDepthUnit()=="ft"&&depthUnit!="ft"&&depthUnit!="英尺") depthUnit="";
// if(depthUnit.isEmpty()) depthUnit=m_pWellLogs[0]->GetDepthAliasUnit();
// if(depthUnit.isEmpty()) depthUnit="米";
// m_TitleField << "MD\n"+depthUnit;
// char buf[100];
// for(int j=0;j<WaveInfo.ArrayNum;j++) {
// for(int i=0;i<WaveInfo.SamplePoint;i++){
// sprintf(buf,"A:%d D:%d",j+1,i+1);
// m_TitleField << buf;//+"\n";
// }
// }
// m_TitleField << " " ;
m_pAssetCopy->SetWellLogs(type,WellLogs);
m_pWave=(CObjWellLogWavefile *)m_pWellLogs[0];
if(!m_pWave)return;
m_pWave->isLoad=false;
m_pWave->LoadFromSLF();
m_MutiVM=&m_pWave->GetProperty();
WaveInfo=m_pWave->waveinfo;
m_dtype=type;
m_SDep = WaveInfo.StartDepth;
m_EDep = WaveInfo.EndDepth;
m_Rlev = WaveInfo.DepLevel;
m_RepCode = WaveInfo.RepCode;
m_CodeLen = WaveInfo.CodeLen;
m_SamplePoint = WaveInfo.SamplePoint;
m_nSamples = WaveInfo.SamplePoint*WaveInfo.ArrayNum;
m_flRlev2 = WaveInfo.TimeLevel;
m_PointNum = (float)(fabs((m_EDep-m_SDep)/m_Rlev+1.5));
m_TitleField.clear();
QString depthUnit=m_pWellLogs[0]->GetDepthUnit();
if(m_pWellLogs[0]->GetDepthUnit()=="m"&&depthUnit!="m"&&depthUnit!="") depthUnit="";
else if(m_pWellLogs[0]->GetDepthUnit()=="ft"&&depthUnit!="ft"&&depthUnit!="英尺") depthUnit="";
if(depthUnit.isEmpty()) depthUnit=m_pWellLogs[0]->GetDepthAliasUnit();
if(depthUnit.isEmpty()) depthUnit="";
m_TitleField << "MD\n"+depthUnit;
char buf[100];
for(int j=0;j<WaveInfo.ArrayNum;j++) {
for(int i=0;i<WaveInfo.SamplePoint;i++){
sprintf(buf,"A:%d D:%d",j+1,i+1);
m_TitleField << buf;//+"\n";
}
}
m_TitleField << " " ;
}
//////////////////////////////////////////////////////////
@ -2010,103 +2009,103 @@ void GridDataAdapter::initTDTWellLogData(DType type,QList<CObjWellLog*> WellLogs
//////////////////////////////////////////////////////////
void GridDataAdapter::initFMTWellLogData(DType type,QList<CObjWellLog*> WellLogs)
{
// m_pWellLogs=WellLogs;
m_pWellLogs=WellLogs;
// for(int i = 0; i < m_pWellLogs.size(); i++){
// m_pWellLogs[i]->isUsing = true;
// }
for(int i = 0; i < m_pWellLogs.size(); i++){
m_pWellLogs[i]->isUsing = true;
}
// m_pAssetCopy->SetWellLogs(type,WellLogs);
// m_pWave=(CObjWellLogWavefile *)m_pWellLogs[0];
// if(!m_pWave)return;
// m_pWave->isLoad=false;
// m_pWave->LoadFromSLF();
// m_MutiVM=&m_pWave->GetProperty();
// WaveInfo=m_pWave->waveinfo;
// m_dtype=type;
// m_SDep = WaveInfo.StartDepth;
// m_EDep = WaveInfo.EndDepth;
// m_Rlev = WaveInfo.DepLevel;
// m_RepCode = WaveInfo.RepCode;
// m_CodeLen = WaveInfo.CodeLen;
// m_SamplePoint = WaveInfo.SamplePoint;
// m_nSamples = WaveInfo.SamplePoint*WaveInfo.ArrayNum;
// m_flRlev2 = WaveInfo.TimeLevel;
// m_PointNum = (float)(fabs((m_EDep-m_SDep)/m_Rlev+1.5));
// m_TitleField.clear();
// QString depthUnit=m_pWellLogs[0]->GetDepthUnit();
// if(m_pWellLogs[0]->GetDepthUnit()=="m"&&depthUnit!="m"&&depthUnit!="米") depthUnit="";
// else if(m_pWellLogs[0]->GetDepthUnit()=="ft"&&depthUnit!="ft"&&depthUnit!="英尺") depthUnit="";
// if(depthUnit.isEmpty()) depthUnit=m_pWellLogs[0]->GetDepthAliasUnit();
// if(depthUnit.isEmpty()) depthUnit="米";
// m_TitleField << "MD\n"+depthUnit;
// char buf[100];
// for(int j=0;j<WaveInfo.ArrayNum;j++) {
// for(int i=0;i<WaveInfo.SamplePoint;i++){
// sprintf(buf,"A:%d D:%d",j+1,i+1);
// m_TitleField << buf;//+"\n";
// }
// }
// m_TitleField << " " ;
m_pAssetCopy->SetWellLogs(type,WellLogs);
m_pWave=(CObjWellLogWavefile *)m_pWellLogs[0];
if(!m_pWave)return;
m_pWave->isLoad=false;
m_pWave->LoadFromSLF();
m_MutiVM=&m_pWave->GetProperty();
WaveInfo=m_pWave->waveinfo;
m_dtype=type;
m_SDep = WaveInfo.StartDepth;
m_EDep = WaveInfo.EndDepth;
m_Rlev = WaveInfo.DepLevel;
m_RepCode = WaveInfo.RepCode;
m_CodeLen = WaveInfo.CodeLen;
m_SamplePoint = WaveInfo.SamplePoint;
m_nSamples = WaveInfo.SamplePoint*WaveInfo.ArrayNum;
m_flRlev2 = WaveInfo.TimeLevel;
m_PointNum = (float)(fabs((m_EDep-m_SDep)/m_Rlev+1.5));
m_TitleField.clear();
QString depthUnit=m_pWellLogs[0]->GetDepthUnit();
if(m_pWellLogs[0]->GetDepthUnit()=="m"&&depthUnit!="m"&&depthUnit!="") depthUnit="";
else if(m_pWellLogs[0]->GetDepthUnit()=="ft"&&depthUnit!="ft"&&depthUnit!="英尺") depthUnit="";
if(depthUnit.isEmpty()) depthUnit=m_pWellLogs[0]->GetDepthAliasUnit();
if(depthUnit.isEmpty()) depthUnit="";
m_TitleField << "MD\n"+depthUnit;
char buf[100];
for(int j=0;j<WaveInfo.ArrayNum;j++) {
for(int i=0;i<WaveInfo.SamplePoint;i++){
sprintf(buf,"A:%d D:%d",j+1,i+1);
m_TitleField << buf;//+"\n";
}
}
m_TitleField << " " ;
}
void GridDataAdapter::saveMultWellLogData(bool &isScuccess)
{
// FLOATPROPERTY vM;
// vM.SetSize(3);
// vM.m_vProperty[0]=m_SDep;
// vM.m_vProperty[1]=m_EDep;
// vM.m_vProperty[2]=m_Rlev;
// QString filePath=/*m_pWellLogs[0]*/m_pWave->GetSlfFileName();
// CLogIO * logio=new CLogIO();
// if(!logio->Open(filePath.toStdString().c_str(),CSlfIO::modeReadWrite))
// {
// delete logio;
// return;
// }
FLOATPROPERTY vM;
vM.SetSize(3);
vM.m_vProperty[0]=m_SDep;
vM.m_vProperty[1]=m_EDep;
vM.m_vProperty[2]=m_Rlev;
QString filePath=/*m_pWellLogs[0]*/m_pWave->GetSlfFileName();
CLogIO * logio=new CLogIO();
if(!logio->Open(filePath.toStdString().c_str(),CSlfIO::modeReadWrite))
{
delete logio;
return;
}
// int iIndex = logio->OpenWave(m_pWave->GetName().toStdString().c_str());
// if (iIndex >= 0)
// {
// int row,col,pos;
// row=0;
// col=pos=row;
// float value,dep;
// value=dep=0;
// int actRow=0;
// int actCol=0;
// char *vchar=(char*)m_MutiVM->m_vProperty;
int iIndex = logio->OpenWave(m_pWave->GetName().toStdString().c_str());
if (iIndex >= 0)
{
int row,col,pos;
row=0;
col=pos=row;
float value,dep;
value=dep=0;
int actRow=0;
int actCol=0;
char *vchar=(char*)m_MutiVM->m_vProperty;
// int sRow=m_editRange.topRow();
// int eRow=m_editRange.bottomRow();
// int sCol=m_editRange.leftColumn();
// int eCol=m_editRange.rightColumn();
// QList<QList<float> > editlist;
// extractMultWellLogData(editlist,isScuccess);
// for(int i=sRow;i<=eRow;i++)
// {
// actRow=m_verScrolValue+i;
// col=0;
// for(int j=sCol;j<=eCol;j++)
// {
// actCol=m_horScrolValue+j;
// if(isScuccess)
// {
// pos=actRow*m_nSamples+(actCol-1);
// value=editlist.value(row).value(col);
// setData(m_RepCode,(char*)&vchar[pos*m_CodeLen],value);
// DWORD result=logio->WriteWave(iIndex,m_SDep,m_PointNum,(void*)m_MutiVM->m_vProperty);
int sRow=m_editRange.topRow();
int eRow=m_editRange.bottomRow();
int sCol=m_editRange.leftColumn();
int eCol=m_editRange.rightColumn();
QList<QList<float> > editlist;
extractMultWellLogData(editlist,isScuccess);
for(int i=sRow;i<=eRow;i++)
{
actRow=m_verScrolValue+i;
col=0;
for(int j=sCol;j<=eCol;j++)
{
actCol=m_horScrolValue+j;
if(isScuccess)
{
pos=actRow*m_nSamples+(actCol-1);
value=editlist.value(row).value(col);
setData(m_RepCode,(char*)&vchar[pos*m_CodeLen],value);
DWORD result=logio->WriteWave(iIndex,m_SDep,m_PointNum,(void*)m_MutiVM->m_vProperty);
// }
// col++;
// }
// row++;
// }
// logio->CloseWave(iIndex);
// }
// delete logio;
}
col++;
}
row++;
}
logio->CloseWave(iIndex);
}
delete logio;
}
//void GridDataAdapter::extractMultWellLogData(int &row,int &col,float &value,bool &isScuccess)
@ -3543,11 +3542,11 @@ void GridDataAdapter::valueChange()
break;
}
// if(NULL != m_pComplete)
// {
// future= QtConcurrent::run(this,m_pComplete);
// watcher.setFuture(future);
// }
if(NULL != m_pComplete)
{
future= QtConcurrent::run(this,m_pComplete);
watcher.setFuture(future);
}
}

View File

@ -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)
{

View File

@ -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);//编辑测井信息
//插件消息

View File

@ -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");

View File

@ -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()
{

View File

@ -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();