#include #include "TranSlf2Data.h" #include "CDataOutput.h" #include "Slf2FileDlg.h" #include "TrainGenModuleDlg.h" //#include #include< QFileDialog> #include 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;iindex) { 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;im_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;iCurveMap.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 > OutFileInfVec; vector 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;iOutFlag==1)//交互定制,按井曲线信息框制定方案输出 { NumObject=0; int Row=m_fdlg->m_pUI->tableWidget_2->rowCount(); char Name[256]; for(int i=0;im_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;im_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请检查结论及特征曲线映射方式是否合理!"); }