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