logplus/DataOutput/src/CDataOutput.cpp

332 lines
12 KiB
C++
Raw Normal View History

2025-10-29 17:23:30 +08:00

#include <QDialog>
#include "TranSlf2Data.h"
#include "CDataOutput.h"
#include "Slf2FileDlg.h"
#include "TrainGenModuleDlg.h"
//#include <Python.h>
#include< QFileDialog>
#include <qthread.h>
CDataOutPut::CDataOutPut()//:m_fdlg(NULL)
{
m_fdlg = new pai::graphics::CSlf2FileDlg();
//m_fdlg->setParent(this);
ml_dlg = new pai::graphics::CTrainGenModuleDlg();
}
CDataOutPut::~CDataOutPut()
{
if (m_fdlg)
{
delete m_fdlg;
m_fdlg=NULL;
}
}
void CDataOutPut::outWellLogRoundMLTrainData(const QStringList& nameList, const QStringList& curveList)
{
if (!ml_dlg)return;
ml_dlg->set_well_tableWidget_RowCount(int(nameList.size()));
for(int i = 0; i < nameList.size(); i++)
{
QString name = nameList[i];
int index = name.lastIndexOf("/");
int index1 = name.lastIndexOf("\\");
if(index1 > index) index = index1;
name = name.mid(index+1);
ml_dlg->tgm_pUI->well_tableWidget->setItem(i, 0, new QTableWidgetItem(name));
QString wellname = nameList.at(i);
ml_dlg->SetDepInfo(wellname,i);
name = name.left(name.lastIndexOf("."));
ml_dlg->WellNamelist.append(name);
}
if(ml_dlg->exec() == QDialog::Accepted)
{
QThread thread_pb;
QObject::connect(&thread_pb, SIGNAL(started()), this, SLOT(progressBar_ML()), Qt::DirectConnection);
thread_pb.start();
execOutputMLmodel(nameList);
thread_pb.quit();
thread_pb.wait();
}
}
void CDataOutPut::outWellLogRound(const QStringList& nameList,
const QStringList& curveList)
{
if (!m_fdlg)
{
return;
}
if(curveList.size() > 0)
{
m_fdlg->m_pUI->lineEdit_OutObj->setText(curveList.join(" "));
m_fdlg->m_pUI->radioButton_Manual->setChecked(1);
m_fdlg->m_pUI->lineEdit_OutObj->setEnabled(true);
m_fdlg->OutFlag=2;
}
m_fdlg->m_pUI->tableWidget->setRowCount(nameList.size()); //设置行数为10
int size=nameList.size();
QString ExtName[10]={"TXT","TXT","LAS","XLS","Wis","XTF","LIS","WLD","dat","dlis"};
//int FormatType=m_fdlg->m_pUI->comboBox->currentIndex();
float outsdep=0,outedep=0,outrlev=0;
for(int i=0;i<nameList.size();i++)
{
QString name=nameList[i];
int index=name.lastIndexOf("/");
int index1=name.lastIndexOf("\\");
if(index1>index) {
index=index1;
}
name=name.mid(index+1);
m_fdlg->m_pUI->tableWidget->setItem(i,0,new QTableWidgetItem(name));//nameList.at(i)));
QString wellname=nameList.at(i);
m_fdlg->SetDepInfo(wellname,i);
name=name.left(name.lastIndexOf("."));
m_fdlg->WellNamelist.append(name);
}
#pragma region 多文件信息统计
for(int i=0;i<nameList.size();i++)
{
QString name=nameList[i];
CLogIO mrw;
int op=mrw.Open(name.toStdString().c_str(),CSlfIO::modeRead);
Slf_FILE_MESSAGE mes;
if (op)mrw.GetFileMessage(mes);
//保证m_fdlg->m_WellAndRound大小和nameList一致
QString m_WellAndRound=QString::fromLocal8Bit(mes.WellName)+"/"+m_fdlg->WellNamelist[i];
m_fdlg->m_WellAndRound.append(m_WellAndRound);
if (!op)continue;
int ObjectCount = mrw.GetObjectCount();
if (ObjectCount == 0)
{
mrw.Close();
continue;
}
WellMap mMap;
mMap.insert(m_WellAndRound,true);
for(int i=0;i<ObjectCount;i++)
{
if(mrw.GetObjectStatus(i)==OBJECT_DISCARD||mrw.GetObjectStatus(i)==OBJECT_DELETE)continue;
char Name[200];
mrw.GetObjectName(i,Name);
QString nn=QString(Name);
if(strstr(Name,"%")!=NULL)continue;
if(mrw.GetObjectType(i)==CURVE_OBJECT)
{
auto rFind = m_fdlg->CurveMap.find(QString(Name));
if(rFind==m_fdlg->CurveMap.end())m_fdlg->CurveMap.insert(QString(Name),mMap);//没找到
else rFind.value().insert(m_WellAndRound,true);//rFind.key();//找到
}
else if(mrw.GetObjectType(i)==WAVE_OBJECT)
{
auto rFind = m_fdlg->WaveMap.find(QString(Name));
if(rFind==m_fdlg->WaveMap.end())m_fdlg->WaveMap.insert(QString(Name),mMap);//没找到
else rFind.value().insert(m_WellAndRound,true);//rFind.key();//找到
}
else if(mrw.GetObjectType(i)==FMT_OBJECT||mrw.GetObjectType(i)==TDT_OBJECT)
{
auto rFind = m_fdlg->OtherMap.find(QString(Name));
if(rFind==m_fdlg->OtherMap.end())m_fdlg->OtherMap.insert(QString(Name),mMap);//没找到
else rFind.value().insert(m_WellAndRound,true);//rFind.key();//找到
}
else if(mrw.GetObjectType(i)==CARD_OBJECT)
{
auto rFind = m_fdlg->ParMap.find(QString(Name));
if(rFind==m_fdlg->ParMap.end())m_fdlg->ParMap.insert(QString(Name),mMap);//没找到
else rFind.value().insert(m_WellAndRound,true);//rFind.key();//找到
}
else
{
auto rFind = m_fdlg->TableMap.find(QString(Name));
if(rFind==m_fdlg->TableMap.end())m_fdlg->TableMap.insert(QString(Name),mMap);//没找到
else rFind.value().insert(m_WellAndRound,true);//rFind.key();//找到
}
}
}
#pragma endregion 多文件信息统计
m_fdlg->FormatType=m_fdlg->m_pUI->comboBox->currentIndex();
m_fdlg->nameList=nameList;
m_fdlg->SetOutNameList();
m_fdlg->currentWellName=nameList[0];
m_fdlg->SetObjectNameList();
if(m_fdlg->exec()==QDialog::Accepted)
{
execOutputWellLog(nameList);
}
}
void CDataOutPut::execOutputWellLog(const QStringList& namelist)
{
if (!m_fdlg)
{
return;
}
BOOL m_RlevIsCheck=0;
BOOL m_EdepIsCheck=0;
BOOL m_SdepIsCheck=0;
BOOL m_CurveIsCheck=1;
BOOL m_WaveIsCheck=1;
BOOL m_TableIsCheck=1;
BOOL m_ParIsCheck=1;
BOOL m_OtherIsCheck=1;
float m_Rlev=0.125;
float m_Sdep=-99999;
float m_Edep=99999;
int FormatType=m_fdlg->m_pUI->comboBox->currentIndex(); //输出格式
OUTOBJECTINF OutInf[1024];
bool IsCheck[6];//0-4输出对象选择开关IsCheck[5]输出深度选项开关0-公制1-英制
IsCheck[0]=m_fdlg->m_pUI->checkBox_Curve->isChecked();
IsCheck[1]=m_fdlg->m_pUI->checkBox_Wave->isChecked();
IsCheck[2]=m_fdlg->m_pUI->checkBox_Table->isChecked();
IsCheck[3]=m_fdlg->m_pUI->checkBox_Stream->isChecked();
IsCheck[4]=m_fdlg->m_pUI->checkBox_Other->isChecked();
IsCheck[5]=m_fdlg->UnitFlag;//输出深度选项开关0-公制1-英制
QStringList Outnamelist; //需要输出的slf名
QMap<QString,vector<QString> > OutFileInfVec;
vector<QString > temp;
temp.reserve(4);//outname,sdep,edep,rlev
for(int i = 0; i < namelist.size(); i++)
{
if(m_fdlg->m_pUI->tableWidget->item(i,0)->checkState()==Qt::Checked) {
QString wellname=namelist.at(i);
if(wellname.isEmpty()) continue;
QString outname=m_fdlg->m_pUI->tableWidget->item(i,1)->text();
Outnamelist.append(outname);
OutFileInfVec.insert(wellname, temp);
if(m_fdlg->m_pUI->tableWidget->item(i,1))
OutFileInfVec.find(wellname).value().push_back(m_fdlg->m_pUI->tableWidget->item(i,1)->text());//输出文件名
else
OutFileInfVec.find(wellname).value().push_back("temp");
// if(!m_fdlg->m_pUI->tableWidget->item(i,4)) continue;
if(m_fdlg->m_pUI->tableWidget->item(i,2) && m_fdlg->m_pUI->tableWidget->item(i,2) != new QTableWidgetItem("original"))
OutFileInfVec.find(wellname).value().push_back(m_fdlg->m_pUI->tableWidget->item(i,2)->text());//sdep
else
OutFileInfVec.find(wellname).value().push_back("-9999.0");
if(m_fdlg->m_pUI->tableWidget->item(i,3) && m_fdlg->m_pUI->tableWidget->item(i,3) != new QTableWidgetItem("original"))
OutFileInfVec.find(wellname).value().push_back(m_fdlg->m_pUI->tableWidget->item(i,3)->text());//edep
else
OutFileInfVec.find(wellname).value().push_back("-9999");
if(m_fdlg->m_pUI->tableWidget->item(i,4) && m_fdlg->m_pUI->tableWidget->item(i,4) != new QTableWidgetItem("original"))
OutFileInfVec.find(wellname).value().push_back(m_fdlg->m_pUI->tableWidget->item(i,4)->text());//rlev
else
OutFileInfVec.find(wellname).value().push_back("-9999");
}
}
int NumObject=0;//可以定制输出曲线曲线条数NumObject曲线信息OutInf
if(m_fdlg->OutFlag==2)//手工定制
{
QString OutObjName=m_fdlg->m_pUI->lineEdit_OutObj->text();
OutObjName.replace(","," ");
OutObjName=OutObjName.simplified();
QStringList OutObjNameList=OutObjName.split(" ");
NumObject=OutObjNameList.size();
for(int i=0;i<NumObject;i++)
{
sprintf(OutInf[i].Name,"%s",OutObjNameList[i].toStdString().c_str());
sprintf(OutInf[i].OutName,"%s",OutObjNameList[i].toStdString().c_str());
sprintf(OutInf[i].AliasName,"%s",OutObjNameList[i].toStdString().c_str());
strcpy(OutInf[i].Unit,"");
strcpy(OutInf[i].AliasUnit,"");
OutInf[i].ObjectType=-1;
}
}
else if(m_fdlg->OutFlag==1)//交互定制,按井曲线信息框制定方案输出
{
NumObject=0;
int Row=m_fdlg->m_pUI->tableWidget_2->rowCount();
char Name[256];
for(int i=0;i<Row;i++)
{
if(m_fdlg->m_pUI->tableWidget_2->item(i, 0)->checkState()==Qt::Checked)
{
strcpy(OutInf[NumObject].Name,m_fdlg->m_pUI->tableWidget_2->item(i, 0)->text().toStdString().c_str());
if(m_fdlg->m_pUI->comboBox->currentText() == "胜利LPS格式" && (QString(OutInf[NumObject].Name) == "RESULT" || QString(OutInf[NumObject].Name) == "VRESULT"))
{
QWidget *widget = m_fdlg->m_pUI->tableWidget_2->cellWidget(i, 1);
QComboBox *combox = (QComboBox*)widget;
strcpy(OutInf[NumObject].OutName, combox->currentText().toStdString().c_str());
}
else strcpy(OutInf[NumObject].OutName,m_fdlg->m_pUI->tableWidget_2->item(i, 1)->text().toStdString().c_str());
strcpy(OutInf[NumObject].AliasName,m_fdlg->m_pUI->tableWidget_2->item(i, 2)->text().toStdString().c_str());
strcpy(OutInf[NumObject].Unit,m_fdlg->m_pUI->tableWidget_2->item(i, 3)->text().toStdString().c_str());
strcpy(OutInf[NumObject].AliasUnit,m_fdlg->m_pUI->tableWidget_2->item(i, 4)->text().toStdString().c_str());
OutInf[NumObject].ObjectType=-1;
QString ss=m_fdlg->m_pUI->tableWidget_2->item(i, 5)->text();
if(ss=="常规曲线")OutInf[NumObject].ObjectType=CURVE_OBJECT;
else if(ss=="阵列曲线")OutInf[NumObject].ObjectType=WAVE_OBJECT;
else if(ss=="参数对象")OutInf[NumObject].ObjectType=CARD_OBJECT;
else if(ss=="FMT曲线")OutInf[NumObject].ObjectType=FMT_OBJECT;
else if(ss=="TDT曲线")OutInf[NumObject].ObjectType=TDT_OBJECT;
else if(ss=="数据表")OutInf[NumObject].ObjectType=0;
if(OutInf[NumObject].ObjectType==-1)AfxMessageBox("对象类型不对");
NumObject++;
}
}
}
else {
int NumObject=0;
int Row=m_fdlg->m_pUI->tableWidget_2->rowCount();
char Name[256];
for(int i=0;i<Row;i++)
{
{
strcpy(OutInf[NumObject].Name,m_fdlg->m_pUI->tableWidget_2->item(i, 0)->text().toStdString().c_str());
if(m_fdlg->m_pUI->comboBox->currentText() == "胜利LPS格式" && (QString(OutInf[NumObject].Name) == "RESULT" || QString(OutInf[NumObject].Name) == "VRESULT"))
{
QWidget *widget = m_fdlg->m_pUI->tableWidget_2->cellWidget(i, 1);
QComboBox *combox = (QComboBox*)widget;
strcpy(OutInf[NumObject].OutName, combox->currentText().toStdString().c_str());
}
else strcpy(OutInf[NumObject].OutName,m_fdlg->m_pUI->tableWidget_2->item(i, 1)->text().toStdString().c_str());
strcpy(OutInf[NumObject].AliasName,m_fdlg->m_pUI->tableWidget_2->item(i, 2)->text().toStdString().c_str());
strcpy(OutInf[NumObject].Unit,m_fdlg->m_pUI->tableWidget_2->item(i, 3)->text().toStdString().c_str());
strcpy(OutInf[NumObject].AliasUnit,m_fdlg->m_pUI->tableWidget_2->item(i, 4)->text().toStdString().c_str());
OutInf[NumObject].ObjectType=-1;
QString ss=m_fdlg->m_pUI->tableWidget_2->item(i, 5)->text();
if(ss=="常规曲线")OutInf[NumObject].ObjectType=CURVE_OBJECT;
else if(ss=="阵列曲线")OutInf[NumObject].ObjectType=WAVE_OBJECT;
else if(ss=="参数对象")OutInf[NumObject].ObjectType=CARD_OBJECT;
else if(ss=="FMT曲线")OutInf[NumObject].ObjectType=FMT_OBJECT;
else if(ss=="TDT曲线")OutInf[NumObject].ObjectType=TDT_OBJECT;
else if(ss=="数据表")OutInf[NumObject].ObjectType=0;
if(OutInf[NumObject].ObjectType==-1)AfxMessageBox("对象类型不对");
NumObject++;
}
}
}
// 3 深度信息 输出曲线信息 曲线数 1
TranSlf2Data(FormatType,OutFileInfVec,OutInf,IsCheck,NumObject,m_fdlg->OutFlag,m_fdlg->m_pUI->checkBox->checkState());
OutFileInfVec.clear();
}
void CDataOutPut::execOutputMLmodel(const QStringList& namelist)
{
AfxMessageBox("映射模块运行失败!\n请检查结论及特征曲线映射方式是否合理!");
}