添加曲线右键菜单【曲线计算】和曲线计算刷新功能

This commit is contained in:
zhaolei 2026-06-11 11:57:34 +08:00
parent 8bfedf3ef6
commit 021d3e3f82
9 changed files with 392 additions and 343 deletions

View File

@ -44,6 +44,8 @@ signals:
// 添加对象通知strName发送模块名字如DataMgr strSlfNameSlf文件名,对象名列表如AC、BS
void sig_Notice_AddObject(QString strName, QString strSlfName, QStringList listObject);
// 改变对象通知strName发送模块名字如DataMgr strSlfNameSlf文件名,对象名列表如AC、BS
void sig_Notice_Changed(QString strName, QString strSlfName, QStringList listObject);
public:
Q_DISABLE_COPY(CallGlobalManage);
};

View File

@ -4,6 +4,7 @@
#include <QDoubleValidator>
// #include "DataImport.h"
// #include "ObjProject.h"
#include "CallGlobalManage.h"
CurveComputePage::CurveComputePage(QWidget *parent)
: QWidget(parent)
{
@ -281,6 +282,9 @@ void CurveComputePage::slotComputeOk()
CurveNames.push_back(fun.csOutName.toUpper());
delete mrw;
emit signalCompute(CurveNames);
QStringList CurveNames1;
CurveNames1.push_back(fun.csOutName.toUpper());
emit CallGlobalManage::getInstance()->sig_Notice_Changed("DataMgr", m_FileName, CurveNames1);
// PaiObject::m_EventAgent.ObjectPropertyChanged(::GetProject(),"Compute",CurveNames);
}

View File

@ -9,6 +9,7 @@
#include "MemRdWt.h"
// #include "ObjProject.h"
#include "Well.h"
#include "CallGlobalManage.h"
#pragma warning(pop)
using namespace pai::ios::welllog;
BEGIN_OSGGRAPHICS_NAMESPACE
@ -245,7 +246,10 @@ void CCurveComputerDlg::slotSave()
}
delete mrw;
// PaiObject::m_EventAgent.ObjectPropertyChanged(GetProject(),"Compute",CurveNames);
QMessageBox::warning(NULL,"提示","完成曲线计算");
QStringList CurveNames1;
CurveNames1.push_back(name);
emit CallGlobalManage::getInstance()->sig_Notice_Changed("DataMgr", FileName, CurveNames1);
QMessageBox::warning(this,"提示","完成曲线计算");
//accept();
}
/**

View File

@ -801,24 +801,24 @@ void CDataManagger::DataStatistics(int Type,
// //whp add 2020.4.9 for 波列曲线预览
// void CDataManagger::DisplayWave(const QString& FileName,const QString& WaveName)
// {
// CLogIO *logio=new CLogIO();
// if(!logio->Open(FileName.toStdString().c_str(),CSlfIO::modeRead))
// {
// delete logio;
// QMessageBox::warning(NULL,"提示","打开文件"+FileName+"错误");
// return ;
// }
// int index=logio->OpenWave(WaveName.toStdString().c_str());
// if(index<0){
// delete logio;
// return;
// }
// logio->CloseWave(index);
// delete logio;
// ShowWave *pDlg=new ShowWave();
// pDlg->FileName=FileName,pDlg->WaveName=WaveName;
// pDlg->init();
// pDlg->show();
// CLogIO *logio=new CLogIO();
// if(!logio->Open(FileName.toStdString().c_str(),CSlfIO::modeRead))
// {
// delete logio;
// QMessageBox::warning(NULL,"提示","打开文件"+FileName+"错误");
// return ;
// }
// int index=logio->OpenWave(WaveName.toStdString().c_str());
// if(index<0){
// delete logio;
// return;
// }
// logio->CloseWave(index);
// delete logio;
// ShowWave *pDlg=new ShowWave();
// pDlg->FileName=FileName,pDlg->WaveName=WaveName;
// pDlg->init();
// pDlg->show();
// }
// //whp add 2020.5.12 for 常规曲线预览
// void CDataManagger::DisplayCurve(const QString& FileName,const QString& CurveName)
@ -1462,239 +1462,241 @@ void CDataManagger::accept2()
}
void CDataManagger::accept1()
{
// QDialog*pd=(QDialog*)sender();
// int sdep=m_edit1->text().toFloat();
// int edep=m_edit2->text().toFloat();
// if(sdep>edep)
// {
// QMessageBox::information(pd,"提示","起始深度不能大于终止深度!",QMessageBox::Yes);
// return;
// }
// QString newCurve;
// CMemRdWt *mrw=new CMemRdWt();
// if(!mrw->Open(m_FileName.toStdString().c_str(),CSlfIO::modeReadWrite)) {
// delete mrw;
// return;
// }
// QString m_Function=m_edit3->text();
// m_Function.toUpper();
// m_Function.replace("\"DEPTH\"","CURRENT_HD.DEP");
// bool OutCurveExist=1;
// float CurveValue,rlev;
// Function fun;
// int noi=fun.GetExpress(m_Function);
// if(noi<0)
// {
// delete mrw;
// 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)
// {
// static char *e[]={
// "语法错误",//"syntax error.",
// "不对称的括号",//"unbalanced parentheses",
// "非法运算符"//"no expression present"
// };
// QMessageBox::warning(pd,"提示",QString(QLatin1String(e[re-1]))+m_Function);
// delete mrw;
// return ;
// }
// char name[20];
// strcpy(name,fun.csOutName.toStdString().c_str());
// int in=mrw->FindObjectIndex(name);
// if(in>=0)
// {
// short objectType=mrw->GetObjectType(in);
// short Attribute,SubAttribute;
// mrw->GetObjectAttribute(in,&Attribute,&SubAttribute);
// if(mrw->GetObjectStatus(in)!=0)//删除状态
// {
// QMessageBox::warning(m_pDialog,"提示",fun.csOutName+"曲线已存在,但该曲线处于删除状态,无法进行计算 !!!");
// delete mrw;
// return ;
// }
// if(objectType >CARD_OBJECT||objectType==0||objectType==CURVE_OBJECT)
// {
QDialog*pd=(QDialog*)sender();
int sdep=m_edit1->text().toFloat();
int edep=m_edit2->text().toFloat();
if(sdep>edep)
{
QMessageBox::information(pd,"提示","起始深度不能大于终止深度!",QMessageBox::Yes);
return;
}
QString newCurve;
CMemRdWt *mrw=new CMemRdWt();
if(!mrw->Open(m_FileName.toStdString().c_str(),CSlfIO::modeReadWrite)) {
delete mrw;
return;
}
QString m_Function=m_edit3->text();
m_Function.toUpper();
m_Function.replace("\"DEPTH\"","CURRENT_HD.DEP");
bool OutCurveExist=1;
float CurveValue,rlev;
Function fun;
int noi=fun.GetExpress(m_Function);
if(noi<0)
{
delete mrw;
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)
{
static const char *e[]={
"语法错误",//"syntax error.",
"不对称的括号",//"unbalanced parentheses",
"非法运算符"//"no expression present"
};
QMessageBox::warning(pd,"提示",QString(QLatin1String(e[re-1]))+m_Function);
delete mrw;
return ;
}
char name[20];
strcpy(name,fun.csOutName.toStdString().c_str());
int in=mrw->FindObjectIndex(name);
if(in>=0)
{
short objectType=mrw->GetObjectType(in);
short Attribute,SubAttribute;
mrw->GetObjectAttribute(in,&Attribute,&SubAttribute);
if(mrw->GetObjectStatus(in)!=0)//删除状态
{
QMessageBox::warning(m_pDialog,"提示",fun.csOutName+"曲线已存在,但该曲线处于删除状态,无法进行计算 !!!");
delete mrw;
return ;
}
if(objectType >CARD_OBJECT||objectType==0||objectType==CURVE_OBJECT)
{
// }
// else
// {
// QMessageBox::warning(m_pDialog,"提示",fun.csOutName+"对象已存在,但其属性不是曲线 !!!");
// delete mrw;
// return ;
// }
// }
// else
// { // 导入曲线不存在
// QString ss="目标曲线"+fun.csOutName+"不存在 \n 是否生成 \n";
// int flag = QMessageBox::warning(m_pDialog,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(m_pDialog,"提示","输入曲线"+fun.csName[i]+"不是曲线类型,不能进行计算!!!\r\n请参考常规曲线计算规则,输入正确的计算公式");
// delete mrw;
// return ;
// }
// index[i]=mrw->OpenCurve(fun.csName[i].toStdString().c_str());
// if(index[i]<0)
// {
// delete mrw;
// QMessageBox::warning(m_pDialog,"提示","打开曲线"+fun.csName[i]+"出错,不能进行计算!!!");
// 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“深度”标识
// //生成导入曲线
}
else
{
QMessageBox::warning(m_pDialog,"提示",fun.csOutName+"对象已存在,但其属性不是曲线 !!!");
delete mrw;
return ;
}
}
else
{ // 导入曲线不存在
QString ss="目标曲线"+fun.csOutName+"不存在 \n 是否生成 \n";
int flag = QMessageBox::warning(m_pDialog,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(m_pDialog,"提示","输入曲线"+fun.csName[i]+"不是曲线类型,不能进行计算!!!\r\n请参考常规曲线计算规则,输入正确的计算公式");
delete mrw;
return ;
}
index[i]=mrw->OpenCurve(fun.csName[i].toStdString().c_str());
if(index[i]<0)
{
delete mrw;
QMessageBox::warning(m_pDialog,"提示","打开曲线"+fun.csName[i]+"出错,不能进行计算!!!");
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_edit1->text().toFloat();
// info.EndDepth=m_edit2->text().toFloat();
// indexout=mrw->OpenCurve(&info);
// break;
// }
// if(indexout==-1)//表达式中没有实际曲线只有CURRENT_HD.DEP“深度”标识
// {
// newCurve=fun.csOutName;
// sprintf(info.AliasName,"%s",fun.csOutName.toStdString().c_str());
// sprintf(info.Name,"%s",fun.csOutName.toStdString().c_str());
// info.StartDepth=m_edit1->text().toFloat();
// info.EndDepth=m_edit2->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)
// {
// delete mrw;
// QMessageBox::warning(m_pDialog,"提示","导入曲线不存在,而且输入曲线中没有可参考的常规曲线,无法进行曲线计算\r\n请参考常规曲线计算规则输入正确的计算公式");
// return ;
// }
// //检查导入曲线深度
// rlev = info.DepLevel;
// sdep = info.StartDepth;
// edep = info.EndDepth ;
// if(MinRlev>rlev)MinRlev=rlev;
// if ( m_edit1->text().toFloat() < sdep-rlev || m_edit2->text().toFloat() > edep+rlev)
// {
// int flag=QMessageBox::warning(m_pDialog,"提示","导入曲线的深度范围("+m_edit1->text()+"--"+m_edit2->text()+")超出输入曲线("+QString::number(sdep)+"--"+QString::number(edep)+"\n继续计算吗?",QMessageBox::Yes,QMessageBox::No);
// if(flag != QMessageBox::Yes){
// delete mrw;
// return ;
// }
// }
// int sample=(int)((m_edit2->text().toFloat()-m_edit1->text().toFloat())/rlev+1.5);//0.5);
// int sampleIn=(int)((m_edit2->text().toFloat()-m_edit1->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_edit2->text().toFloat()-m_edit1->text().toFloat())/CurveRlev[j]+1.5;//0.5;
// mrw->ReadCurve(index[j],m_edit1->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++)
// {
// //sdep = sdeps + rlev * i;
// for(int j=0;j<noi;j++)
// {
// if(fun.csName[j]=="CURRENT_HD.DEP")fun.val[j]=m_edit1->text().toFloat()+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
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_edit1->text().toFloat();
info.EndDepth=m_edit2->text().toFloat();
indexout=mrw->OpenCurve(&info);
break;
}
if(indexout==-1)//表达式中没有实际曲线只有CURRENT_HD.DEP“深度”标识
{
newCurve=fun.csOutName;
sprintf(info.AliasName,"%s",fun.csOutName.toStdString().c_str());
sprintf(info.Name,"%s",fun.csOutName.toStdString().c_str());
info.StartDepth=m_edit1->text().toFloat();
info.EndDepth=m_edit2->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)
{
delete mrw;
QMessageBox::warning(m_pDialog,"提示","导入曲线不存在,而且输入曲线中没有可参考的常规曲线,无法进行曲线计算\r\n请参考常规曲线计算规则,输入正确的计算公式");
return ;
}
//检查导入曲线深度
rlev = info.DepLevel;
sdep = info.StartDepth;
edep = info.EndDepth ;
if(MinRlev>rlev)MinRlev=rlev;
if ( m_edit1->text().toFloat() < sdep-rlev || m_edit2->text().toFloat() > edep+rlev)
{
int flag=QMessageBox::warning(m_pDialog,"提示","导入曲线的深度范围("+m_edit1->text()+"--"+m_edit2->text()+")超出输入曲线("+QString::number(sdep)+"--"+QString::number(edep)+"\n继续计算吗?",QMessageBox::Yes,QMessageBox::No);
if(flag != QMessageBox::Yes){
delete mrw;
return ;
}
}
int sample=(int)((m_edit2->text().toFloat()-m_edit1->text().toFloat())/rlev+1.5);//0.5);
int sampleIn=(int)((m_edit2->text().toFloat()-m_edit1->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_edit2->text().toFloat()-m_edit1->text().toFloat())/CurveRlev[j]+1.5;//0.5;
mrw->ReadCurve(index[j],m_edit1->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++)
{
//sdep = sdeps + rlev * i;
for(int j=0;j<noi;j++)
{
if(fun.csName[j]=="CURRENT_HD.DEP")fun.val[j]=m_edit1->text().toFloat()+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,m_edit1->text().toFloat(),sample,&outdata[0]);
// delete []tDep;
}
mrw->WriteCurve(indexout,m_edit1->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 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);
// delete mrw;
// GetObjectEvent().OnDeAttchData(m_FileName,fun.csOutName);
// GetObjectEvent().OnRefreshData(m_FileName,fun.csOutName,this);
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);
delete mrw;
// GetObjectEvent().OnDeAttchData(m_FileName,fun.csOutName);
// GetObjectEvent().OnRefreshData(m_FileName,fun.csOutName,this);
// QStringList CurveNames;
// CurveNames.push_back(msag.WellName);
// CurveNames.push_back(m_FileName);
// CurveNames.push_back(fun.csOutName);
// if(!newCurve.isEmpty())CurveNames.push_back(newCurve);
// PaiObject::m_EventAgent.ObjectPropertyChanged(GetProject(),"Compute",CurveNames);
// QMessageBox::information(m_pDialog,"提示","计算完毕!",QMessageBox::Ok);
QStringList CurveNames;
CurveNames.push_back(msag.WellName);
CurveNames.push_back(m_FileName);
CurveNames.push_back(fun.csOutName);
if(!newCurve.isEmpty())CurveNames.push_back(newCurve);
// PaiObject::m_EventAgent.ObjectPropertyChanged(GetProject(),"Compute",CurveNames);
QStringList CurveNames1;
CurveNames1.append(fun.csOutName);
emit CallGlobalManage::getInstance()->sig_Notice_Changed("DataMgr", m_FileName, CurveNames1);
QMessageBox::information(m_pDialog,"提示","计算完毕!",QMessageBox::Ok);
}
//曲线计算
// void CDataManagger::CurveCompute(QList<CObjWellLog*>objs,int no)
@ -1783,101 +1785,101 @@ void CDataManagger::accept1()
// }
// }
// void CDataManagger::CurveCompute(const QString& FileName,const QStringList& CurveNameList)
// {
// m_CurveNameList=CurveNameList;
// if(CurveNameList.count()==1)
// {
// QDialog dialog(NULL);
// dialog.setModal(false);
// m_pDialog=&dialog;
// Qt::WindowFlags flags = dialog.windowFlags();
// flags |= Qt::WindowStaysOnTopHint;
// flags &= ~Qt::WindowContextHelpButtonHint;
// dialog.setWindowFlags(flags);
// dialog.setWindowTitle(QString("曲线计算"));
// QFormLayout form(&dialog);
// QString CurveName=CurveNameList[0];
void CDataManagger::CurveCompute(const QString& FileName,const QStringList& CurveNameList)
{
m_CurveNameList=CurveNameList;
if(CurveNameList.count()==1)
{
QDialog dialog(NULL);
dialog.setModal(false);
m_pDialog=&dialog;
Qt::WindowFlags flags = dialog.windowFlags();
flags |= Qt::WindowStaysOnTopHint;
flags &= ~Qt::WindowContextHelpButtonHint;
dialog.setWindowFlags(flags);
dialog.setWindowTitle(QString("曲线计算"));
QFormLayout form(&dialog);
QString CurveName=CurveNameList[0];
// m_CurveName=CurveNameList[0];
// m_FileName=FileName;
// CMemRdWt *mrw=new CMemRdWt();
// if(!mrw->Open(FileName.toStdString().c_str(),CSlfIO::modeReadWrite)) {
// delete mrw;
// return;
// }
// int index=mrw->OpenCurve(CurveName.toStdString().c_str());
// if(index<0) {
// delete mrw;
// return;
// }
// Slf_CURVE pInfo;
// mrw->GetCurveInfo(index,&pInfo);
// Slf_FILE_MESSAGE msag;
// mrw->GetFileMessage(msag);
// delete mrw;
// // 开始深度
// QString value1 = QString("开始深度: ");
// QLineEdit *edit1 = new QLineEdit(&dialog);
// m_edit1=edit1;
// form.addRow(value1, edit1);
// edit1->setText(QString::number(pInfo.StartDepth));
// edit1->setValidator(new QDoubleValidator(-9999999,9999999,6,this));
m_CurveName=CurveNameList[0];
m_FileName=FileName;
CMemRdWt *mrw=new CMemRdWt();
if(!mrw->Open(FileName.toStdString().c_str(),CSlfIO::modeReadWrite)) {
delete mrw;
return;
}
int index=mrw->OpenCurve(CurveName.toStdString().c_str());
if(index<0) {
delete mrw;
return;
}
Slf_CURVE pInfo;
mrw->GetCurveInfo(index,&pInfo);
Slf_FILE_MESSAGE msag;
mrw->GetFileMessage(msag);
delete mrw;
// 开始深度
QString value1 = QString("开始深度: ");
QLineEdit *edit1 = new QLineEdit(&dialog);
m_edit1=edit1;
form.addRow(value1, edit1);
edit1->setText(QString::number(pInfo.StartDepth));
edit1->setValidator(new QDoubleValidator(-9999999,9999999,6,this));
// // 终止深度
// QString value2 = QString("终止深度: ");
// QLineEdit *edit2 = new QLineEdit(&dialog);
// edit2->setValidator(new QDoubleValidator(-9999999,9999999,6,this));
// m_edit2=edit2;
// form.addRow(value2, edit2);
// edit2->setText(QString::number(pInfo.EndDepth));
// //计算公式
// QString value3 = QString("计算公式: ");
// QLineEdit *edit3 = new QLineEdit(&dialog);
// form.addRow(value3, edit3);
// QString ss=CurveName+"=1.0*"+CurveName+"+0.0";
// edit3->setText(ss);
// m_edit2=edit2;
// m_edit3=edit3;
// QString value4 = QString("\n常用数学运算符:\n 加:+,减:-,乘:*,除:/,取余:%,乘方:^,对数:!\n")+
// QString(" 如PAR =SP/CAL+RT^2.5-10!AC\n 10!表示取以10为底的对数,1! 表示取自然对数");
// QString value5 = QString("\n规则及约定:\n 1、输入对象必须是常规曲线名、深度标识或常量\n")+
// QString(" 如:GR=2*GR+5GR2=45TEMP=18+0.038*\"DEPTH\"\n")+
// QString(" 其中:\"DEPTH\"表示深度;\n")+
// QString(" 2、当导入曲线不存在时:\n 如果有输入曲线存在,程序自动根据第一条输入曲线的属性产生导入曲线;\n")+
// QString(" 否则程序自动产生一条浮点类型的导入曲线采样间隔为0.125。");
// form.addRow(new QLabel(value4));
// form.addRow(new QLabel(value5));
// // Add Cancel and OK button
// QDialogButtonBox buttonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel,
// Qt::Horizontal, &dialog);
// form.addRow(&buttonBox);
// QObject::connect(&buttonBox, SIGNAL(accepted()), this, SLOT(accept1()));
// QObject::connect(&buttonBox, SIGNAL(rejected()), &dialog, SLOT(reject()));
// // Process when OK button is clicked
// dialog.show();
// if (dialog.exec() == QDialog::Accepted)
// {
// }
// pai::graphics::CDataImport::ChangetoSlf(FileName,NULL);
// }
// else
// {
// CCurveComputerDlg *pDlg=new CCurveComputerDlg();
// pDlg->FileName=FileName;
// pDlg->CurveNameList=CurveNameList;
// pDlg->init();//FileName, CurveNameList);
// pDlg->setModal(false);
// Qt::WindowFlags flags = pDlg->windowFlags();
// flags |= Qt::WindowStaysOnTopHint;
// pDlg->setWindowFlags(flags);
// pDlg->exec();
// delete pDlg;
// pDlg=NULL;
// pai::graphics::CDataImport::ChangetoSlf(FileName,NULL);
// QMessageBox::information(NULL,"提示","计算完毕!",QMessageBox::Ok);
// }
// }
// 终止深度
QString value2 = QString("终止深度: ");
QLineEdit *edit2 = new QLineEdit(&dialog);
edit2->setValidator(new QDoubleValidator(-9999999,9999999,6,this));
m_edit2=edit2;
form.addRow(value2, edit2);
edit2->setText(QString::number(pInfo.EndDepth));
//计算公式
QString value3 = QString("计算公式: ");
QLineEdit *edit3 = new QLineEdit(&dialog);
form.addRow(value3, edit3);
QString ss=CurveName+"=1.0*"+CurveName+"+0.0";
edit3->setText(ss);
m_edit2=edit2;
m_edit3=edit3;
QString value4 = QString("\n常用数学运算符:\n 加:+,减:-,乘:*,除:/,取余:%,乘方:^,对数:!\n")+
QString("PAR =SP/CAL+RT^2.5-10!AC\n 10!表示取以10为底的对数,1! 表示取自然对数");
QString value5 = QString("\n规则及约定:\n 1、输入对象必须是常规曲线名、深度标识或常量\n")+
QString(" 如:GR=2*GR+5GR2=45TEMP=18+0.038*\"DEPTH\"\n")+
QString(" 其中:\"DEPTH\"表示深度;\n")+
QString(" 2、当导入曲线不存在时:\n 如果有输入曲线存在,程序自动根据第一条输入曲线的属性产生导入曲线;\n")+
QString(" 否则程序自动产生一条浮点类型的导入曲线采样间隔为0.125。");
form.addRow(new QLabel(value4));
form.addRow(new QLabel(value5));
// Add Cancel and OK button
QDialogButtonBox buttonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel,
Qt::Horizontal, &dialog);
form.addRow(&buttonBox);
QObject::connect(&buttonBox, SIGNAL(accepted()), this, SLOT(accept1()));
QObject::connect(&buttonBox, SIGNAL(rejected()), &dialog, SLOT(reject()));
// Process when OK button is clicked
dialog.show();
if (dialog.exec() == QDialog::Accepted)
{
}
CDataImport::ChangetoSlf(FileName,NULL);
}
else
{
CCurveComputerDlg *pDlg=new CCurveComputerDlg();
pDlg->FileName=FileName;
pDlg->CurveNameList=CurveNameList;
pDlg->init();//FileName, CurveNameList);
pDlg->setModal(false);
Qt::WindowFlags flags = pDlg->windowFlags();
flags |= Qt::WindowStaysOnTopHint;
pDlg->setWindowFlags(flags);
pDlg->exec();
delete pDlg;
pDlg=NULL;
CDataImport::ChangetoSlf(FileName,NULL);
QMessageBox::information(NULL,"提示","计算完毕!",QMessageBox::Ok);
}
}
void CDataManagger::CallDisplayWaveOrCurve(int Type, const QString& FileName,
const QString& CurveName, QWidget* parent)

View File

@ -77,6 +77,7 @@ private slots:
void slotImport();
void slotExpdView();
void slotVerScrollValueChange(int nValue);
void s_Notice_Changed(QString strName, QString strSlfName, QStringList listObject);
private:
void swtichViewSize();

View File

@ -52,6 +52,7 @@ WellLogTableDialogNew::WellLogTableDialogNew(QWidget *parent, Qt::WindowFlags fl
connect(m_pUI->btnExport, SIGNAL(clicked()), this, SLOT(slotExport()));
connect(m_pUI->btnImport, SIGNAL(clicked()), this, SLOT(slotImport()));
connect(m_pUI->btnExpView, SIGNAL(clicked()), this, SLOT(slotExpdView()));
connect(CallGlobalManage::getInstance(), SIGNAL(sig_Notice_Changed(QString, QString, QStringList)), this, SLOT(s_Notice_Changed(QString, QString, QStringList)));
m_DataTyle=valid_NULL;
m_pUI->btnExport->setIcon(QIcon( ::GetImagePath() + "icon/Export.png"));
m_pUI->btnImport->setIcon(QIcon( ::GetImagePath() + "icon/Import.png"));
@ -82,6 +83,10 @@ void WellLogTableDialogNew::slotExpdView()
}
}
void WellLogTableDialogNew::s_Notice_Changed(QString strName, QString strSlfName, QStringList listObject)
{
ReFreshWindow(0);
}
void WellLogTableDialogNew::swtichViewSize()
{
@ -161,7 +166,7 @@ void WellLogTableDialogNew::swtichViewSize()
void WellLogTableDialogNew::ReFreshWindow(int type)
{
// m_gridData->ReFreshWindow(m_gridData->m_dtype);
m_gridData->ReFreshWindow(m_gridData->m_dtype);
}
void WellLogTableDialogNew::slotExport()

View File

@ -682,6 +682,7 @@ void GridDataAdapter::ReFreshWindow(int type)
m_pWellLogs[i]->isLoad=false;
m_pWellLogs[i]->LoadFromSLF();
}
slotHorScrollBarPressed();// 防止滑动滚动条后不刷新
updatetWellLogData();
}

View File

@ -42,6 +42,7 @@ QtProjectWidgets::QtProjectWidgets(QWidget *parent)
QtCommonClass *qtCommon = new QtCommonClass(this);
qtCommon->setButtonIconWithText(ui->btnFind, ::GetImagePath()+"crossplot/search.png", "", font, _fontColor);
magr=new CDataManagger();
//initTreeWidget("", "wwer");
connect(ui->btnFind, &QPushButton::clicked, this, [ = ]()
@ -920,6 +921,11 @@ void QtProjectWidgets::initCurveObjectTreeMenu(QMenu *menu, QTreeWidget *treeWid
connect(action_InfoEdit, SIGNAL(triggered()), this, SLOT(onInfoEdit()));
menu->addAction(action_InfoEdit);
QAction* action_CurveCompute = new QAction("曲线计算", treeWidget);
action_CurveCompute->setIcon(QIcon(GetImagePath() + "icon/AddToTrack.png"));
connect(action_CurveCompute, SIGNAL(triggered()), this, SLOT(onCurveCompute()));
menu->addAction(action_CurveCompute);
QAction* action_Copy = new QAction("复制", treeWidget);
action_Copy->setIcon(QIcon(GetImagePath() + "icon/Copy.png")); // 设置图标":/image/u174.png"
connect(action_Copy, SIGNAL(triggered()), this, SLOT(onCopySelObject()));
@ -1610,6 +1616,29 @@ void QtProjectWidgets::onWaveCompose(bool checked)
// pwelllog->SetWell(pObjWellLog->GetWelllogRound()->GetWell());
}
void QtProjectWidgets::onCurveCompute(bool checked)
{
if (NULL==magr)
{
return;
}
QTreeWidgetItem *pItemFirst = *(ui->treeWidget->selectedItems().begin());
QString FileName=pItemFirst->data(0, Qt::UserRole+1).toString();
QStringList CurveNameList;
foreach(QTreeWidgetItem *pItem, ui->treeWidget->selectedItems())
{
QString strTreeTag = pItem->data(0, Qt::UserRole).toString();
if (strTreeTag == "curveObject" && FileName==pItem->data(0, Qt::UserRole+1).toString())
{
CurveNameList.append(pItem->text(0));
}
else
return;
}
magr->CurveCompute(FileName,CurveNameList);
}
void QtProjectWidgets::onInfoEdit(bool checked)//whp add 2019.12.27 曲线属性编辑
{
if (ui->treeWidget->selectedItems().size()>1)
@ -2190,10 +2219,10 @@ void QtProjectWidgets::onPasteSelObject() // 粘贴
foreach(QTreeWidgetItem *pItem, ui->treeWidget->selectedItems())
{
QTreeWidgetItem *parentItem = pItem/*->parent()*/; // 上一层目录是井次
if (parentItem && m_strSlfName == parentItem->data(0, Qt::UserRole+1).toString())
if (parentItem && "wellItem" == parentItem->data(0, Qt::UserRole).toString() && m_strSlfName == parentItem->data(0, Qt::UserRole+1).toString())
RefreshWellRoundTree(parentItem);
parentItem = parentItem = pItem->parent();
if (parentItem && m_strSlfName == parentItem->data(0, Qt::UserRole+1).toString())
if (parentItem && "wellItem" == parentItem->data(0, Qt::UserRole).toString() && m_strSlfName == parentItem->data(0, Qt::UserRole+1).toString())
RefreshWellRoundTree(parentItem);
break;
}
@ -2290,7 +2319,7 @@ void QtProjectWidgets::onPasteWell()
//刷新井次树
void QtProjectWidgets::RefreshWellRoundTree(QTreeWidgetItem *parentItem)
{
if (parentItem && m_strSlfName == parentItem->data(0, Qt::UserRole+1).toString())
if (parentItem && "wellItem" == parentItem->data(0, Qt::UserRole).toString() && m_strSlfName == parentItem->data(0, Qt::UserRole+1).toString())
{
// qDeleteAll(parentItem->takeChildren());
QTreeWidgetItem *pWellItem = parentItem->parent();

View File

@ -60,6 +60,7 @@ public slots:
void onDepthResample(bool checked = false); //深度重采样
void onCurve2Table(bool checked = false); //转换为结论表格
void onWaveCompose(bool checked = false); //合成阵列曲线
void onCurveCompute(bool checked = false); //曲线计算
void onInfoEdit(bool checked = false); //属性
//TDT