logplus/DataOutput/src/CDataOutput.cpp
2025-10-29 17:23:30 +08:00

332 lines
12 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#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请检查结论及特征曲线映射方式是否合理!");
}