#include #include #include #include #include #include #include //#include "io.h" #include #include "DataManagger.h" #include "InDefTableDlg.h" #include "DataHelper.h" // #include "DataImport.h" // #include "ObjWellLogTABLE.h" // #include "CreateNewCurveDlg.h" //#include "TableTBCurve.h" #include "CurvePropertyEdit.h" #include "cdialog.h"//"MyListDlg.h" #include "CurveComputerDlg.h" // #include "UnitConvertDlg.h" #include "StatisticsDlg.h" #include "Statistics2Dlg.h" #include "CurveComputePage.h" // #include "CopyObjectDlg.h" // #include "WaveComposeDlg.h"//2020.4.14 合成阵列曲线 #include "ShowWave.h"//波列曲线预览 #include "ShowCurve.h"//2020.5.12常规曲线预览 #include // #include "tableproeditdlg.h" #include "CreateNewTableDlg.h" #include "BaseFun.h" #include "DepthProgress.h" #include "geometryutils.h" extern DEFAULTTABLE *DefauleTable;//[DefTabNum]; extern int DefTabNum; //extern char *DataTypea[]; //extern int DataLengtha[]; //namespace Ui{ // class SigelForm; // class MultForm; //} CDataManagger::CDataManagger() { DataHelper::InitDefauleTable();//whp add 2019.11.21 初始化系统缺省表结构 } CDataManagger::~CDataManagger() { DataHelper::DelDefauleTable();//清除系统缺省表缓存 whp add 2019.11.21 } DEFAULTTABLE *CDataManagger::GetDefauleTable() { return DefauleTable; } int CDataManagger::GetDefTabNum() { return DefTabNum; } //交互导入数据表 //whp change 2020.3.9 for 统一离散数据入口 void CDataManagger::execInDefTable(int curitemType, const QString& showWellName, const QString& wellFileName,const QString& inFile)//const QString& wellFileName) { QString DataFile=inFile;//whp add 2020.3.9 for 统一离散数据入口 if(DataFile=="")DataFile = QFileDialog::getOpenFileName(NULL,"打开表数据文件",::GetDataPath(), "表数据文件(*.txt;*.prn;*.csv;*.las)"); if(DataFile=="")return; CInDefTableDlg *pDlg=new CInDefTableDlg(curitemType,NULL); //pDlg->CurItemType=curitemType; pDlg->FileName=DataFile; //20191227 if(curitemType) { pDlg->m_sigWell->comboBox_WellName->addItem(showWellName); } pDlg->m_pUI->tableWidget->setSortingEnabled(true); pDlg->m_pUI->lineEdit->setText(DataFile);//输入文件 if(DataHelper::m_IsGc) DataHelper::InitDefauleTable(); QStringList temptable; for(int i=0;im_pUI->comboBox_Table->addItem(DefauleTable[i].TableAliasName);//系统缺省表列表 temptable << DefauleTable[i].TableAliasName; } pDlg->m_pUI->comboBox_Table->addItem("自定义数据表"); temptable << "自定义数据表"; QCompleter *completer = new QCompleter(temptable); //int t = DefTabNum; // QCompleter completer2[100] = {temptable}; pDlg->m_pUI->comboBox_Table->setEditable(true); pDlg->m_pUI->comboBox_Table->setCompleter(completer); //pDlg->m_pUI->comboBox_Table->autoCompletion(); //delete completer; pDlg->WellFileName=wellFileName; if(!pDlg->Init()) return; pDlg->exec(); } // //数据对象拷贝 // void CDataManagger::CopyObject(int curitemType,const QString& WellName,const QString& WellRoundName) // { // CCopyObjectDlg *pDlg=new CCopyObjectDlg(); // pDlg->curitemType=curitemType; // pDlg->WellName=WellName; // pDlg->WellRoundFileName=WellRoundName; // pDlg->Init(); // pDlg->exec(); // } //数据表自动导入 //whp change 2020.3.9 for 统一离散数据入口 //void CDataManagger::dataInTable(const QStringList& lst) void CDataManagger::dataInTable(int curitemType,QString& showWellName,QString& wellFileName) { //AfxMessageBox("ddd"); QStringList listFiles = QFileDialog::getOpenFileNames(NULL,"打开表数据文件",::GetDataPath(), "表数据文件(*.txt;*.prn;*.csv;*.las)"); if(listFiles.size()<1)return ; char mfi[300]; //2020.7.14 for 单文件导入都要进交互界面 FILE *fp=fopen(listFiles[0].toStdString().c_str(),"rt"); if(fp) { fscanf(fp,"%s",mfi); if(stricmp(mfi,"wellname")) curitemType=1; fclose(fp); } if(curitemType&&wellFileName.isEmpty()) { QFileInfo ss(listFiles[0]); wellFileName=ss.baseName(); QString path=GetLogdataPath()+"例子2"/*::GetProject()->GetName()*/;//zzzzz path+="/#"; path+=ss.baseName(); QString slfpath=path; path+="/"+ss.baseName(); path+=".slf"; wellFileName=path; QDir sss; if(!sss.exists(path)) { if(QMessageBox::information(NULL,"提示",path+"\n文件不存在,创建文件?",QMessageBox::Yes,QMessageBox::No)!=QMessageBox::Yes) return; } CreateDir((char*)slfpath.toStdString().c_str()); } if(listFiles.size()==1) { execInDefTable(curitemType,showWellName,wellFileName,listFiles.at(0)); return ; } // std::vector fileNameVec;//表文件名 std::vector zdNameVec;//表字段名 std::vectorHaveWellName;//首列是否是井名,“WELLNAME”标示 std::vector>zdLen; std::vector>zdType; //whp change 2020.3.9 for 统一离散数据入口 //listFiles=DataHelper::GetVlidTable(listFiles); QStringList BadlistFiles; listFiles=DataHelper::GetVlidTable(curitemType,listFiles,BadlistFiles); if(listFiles.size()==0) { if(BadlistFiles.size()==1)execInDefTable(curitemType,showWellName,wellFileName,BadlistFiles.at(0)); else { //设置对话框类型:0-只有列表框,1-左列表,右文本,2-只有文本框 CDialog *pDlg=new CDialog(); pDlg->setDialogType(2); if(!curitemType)pDlg->setTitle("多井离散表数据加载"); else pDlg->setTitle("单井离散表数据加载"); pDlg->setTiShi(0,"您所选择的下列文件全部无法识别"); pDlg->setTiShi(1,"建议您选择单文件打开,进入交互加载"); pDlg->setMessage(BadlistFiles.join("\r\n")); pDlg->exec(); } return ; } int *DefaultNo=new int[listFiles.size()]; int TableNum=0; char *pLine=new char[50000]; foreach(QString strFileName, listFiles) { fileNameVec.push_back(strFileName); QFile file(strFileName); if(!file.open(QIODevice::ReadOnly )) continue; // QTextStream textstream( &file ); // QString line = textstream.readLine(); file.readLine(pLine,50000); QByteArray line=pLine; while(DataHelper::IsNullLine(line)){ file.readLine(pLine,50000); line=pLine; } QStringList StrList,StrListZD=GetStringList(line);//=line.split(","); zdNameVec.push_back(StrListZD); int PosWN=0;//井名字段位置 if(StrListZD.at(0).toUpper().indexOf("WELLNAME")>=0)PosWN=1;//if(StrListZD.at(0).toUpper()=="WELLNAME")PosWN=1; HaveWellName.push_back(PosWN); int ColNum=StrListZD.size(); int *FieldType=new int[ColNum]; for(int i=0;i=DataCol)continue;//缺失数据5 QString ss=StrList.at(i); if(FieldType[i]==1){if(DataHelper::StrType(ss)!=FieldType[i])FieldType[i]=DataHelper::StrType(ss);} else if(FieldType[i]==4){if(DataHelper::StrType(ss)==6)FieldType[i]=6;} } } #pragma endregion 根据字段内容确定字段值类型 DefaultNo[TableNum++]=DataHelper::GetSimilarTable(ColNum-PosWN,&FieldType[PosWN]);//匹配缺省表,返回缺省表序号 vectorm_zdLen; vectorm_zdType; for(int i=0;isetDialogType(0,1); else pDlg->setDialogType(1,1); if(!curitemType) { pDlg->setTitle("导入多井离散表数据"); pDlg->setTiShi(0,"请注意检查和完善“导入井名”和“导入表名”信息"); pDlg->setTiShi(1,"是否继续导入当前数据文件?是--点击确认,否--点击取消"); } else { pDlg->setTitle("导入单井离散表数据"); pDlg->setTiShi(0,"请注意检查和完善“导入表名”信息"); if(curitemType==1)pDlg->setTiShi(1,"您确认将所选择的数据文件导入到当前井中?是--点击确认,否--点击取消"); else pDlg->setTiShi(1,"您确认将所选择的数据文件导入到当前井次文件中?是--点击确认,否--点击取消"); } if(BadlistFiles.size()) { pDlg->setTiShi(2,"您所选择的下列文件无法识别"); pDlg->setTiShi(3,"建议您选择单文件打开,进入交互加载"); pDlg->setMessage(BadlistFiles.join("\r\n")); } QStringList head; head<<"输入文件名"<<"导入井名"<<"匹配表名"<<"导入表名"; pDlg->init(TableNum,4,head); for(int m=0;mindex) { index=index1; } tablename=tablename.mid(index+1); pDlg->setItem(m,0,tablename);//listFiles[m])); tablename=tablename.left(tablename.lastIndexOf(".")); //文件名中包含井名,如well1_table if(tablename.indexOf("_")>0) { if(!curitemType)wellname=tablename.left(tablename.lastIndexOf("_")); tablename=tablename.right(tablename.length()-tablename.lastIndexOf("_")-1); } if(DefaultNo[m]>=0){ tablename=DefauleTable[DefaultNo[m]].TableName; HaveDefaultTable++; } OutTableName.append(tablename); if(HaveWellName[m]) { pDlg->setItem(m,1,"多井"); pDlg->setFlags(m,1,Qt::NoItemFlags); } else pDlg->setItem(m,1,wellname); if(DefaultNo[m]>=0)pDlg->setItem(m,2,OutTableName[m]); else pDlg->setItem(m,2,""); pDlg->setItem(m,3,OutTableName[m]); pDlg->setCheckState(m,0,Qt::Checked); pDlg->setFlags(m,2,Qt::NoItemFlags); } if(pDlg->exec()==QDialog::Rejected) { delete []DefaultNo; delete pDlg; pDlg=NULL; return ; } bool *IsCheck=new bool[TableNum]; OutTableName.clear(); for(int i=0;igetItem(i,1); IsCheck[i]=pDlg->getCheckState(i,0); OutTableName.append(pDlg->getItem(i,3)) ; OutWellName.append(pDlg->getItem(i,1)) ; } int count=0; #pragma region 导入表 int ret=0;//QMessageBox提示返回值Yes、AllYes、No、AllNo(覆盖、全覆盖、放弃、全放弃) // //进度提示 QApplication::setOverrideCursor(QCursor(Qt::WaitCursor)); DepthProgress dp; dp.CreatProgress(0,listFiles.size(),"开始导入表格数据..."); for(int m=0;mOpen(fi.toStdString().c_str(),CSlfIO::modeReadWrite); } else { // CObjWell * pWell =CDataImport::GetWellByName(OutWellName[m]); // if(!pWell) continue; // if(pWell->GetWellFileName().isEmpty()) // { // fi=GetLogdataPath()+GetProject()->GetName()+"\\#"+OutWellName[m]; // CreateDir((char *)fi.toStdString().c_str()); // fi+="\\"+OutWellName[m]+".slf"; // pWell->SetWellFileName(fi); // logio->Open(fi.toStdString().c_str(),CSlfIO::modeCreate,1024,1024,MACHINE_TYPE,0); // Slf_FILE_MESSAGE mssage; // logio->GetFileMessage(mssage); // int len=strlen(OutWellName[m].toStdString().c_str()); // strncpy(mssage.WellName,OutWellName[m].toStdString().c_str(),len); // mssage.WellName[len]=0; // logio->SetFileMessage(mssage); // } // else // { // fi=pWell->GetWellFileName(); // if(!logio->Open(fi.toStdString().c_str(),CSlfIO::modeReadWrite))continue; // } } int iIndex=logio->OpenTable(tn); //whp change 2020.3.9 for 当数据表存在时,给出提示 if(iIndex>=0) { if(ret!=QMessageBox::YesAll&&ret!=QMessageBox::NoAll) { QMessageBox box(QMessageBox::Warning,"提示","文件"+fi+"中已存在数据表"+tablename); box.setStandardButtons (QMessageBox::Yes|QMessageBox::No|QMessageBox::YesAll|QMessageBox::NoAll); box.setButtonText (QMessageBox::Yes,QString("覆盖当前\r\n已存在数据表")); box.setButtonText (QMessageBox::YesAll,QString("覆盖所有\r\n已存在数据表")); box.setButtonText (QMessageBox::No,QString("放弃当前\r\n数据表加载")); box.setButtonText (QMessageBox::NoAll,QString("放弃所有\r\n已存在数据表加载")); ret=box.exec(); } if(ret==QMessageBox::NoAll||ret==QMessageBox::No) { logio->CloseTable(iIndex); logio->Close(); continue; } else { logio->DeleteSlfObject(tn); iIndex=-1; } } // if (iIndex < 0) { QString name,len,ty,bk,hz; for(int i=0;i=0) { name+= QString(QLatin1String(DefauleTable[DefaultNo[m]].tinfo[i].Name)); len+=QString::number(DefauleTable[DefaultNo[m]].tinfo[i].CodeLength);//Length); ty+=QString::number(DefauleTable[DefaultNo[m]].tinfo[i].RepCode); bk+="0"; hz+=QString(QLatin1String(DefauleTable[DefaultNo[m]].tinfo[i].Name)); } else { name+=zdNameVec[m].at(i); len+=QString::number(zdLen[m].at(i)); ty+=QString::number(zdType[m].at(i)); bk+="0"; hz+=zdNameVec[m].at(i); } if(iOpen_Set_Table(tablename.toStdString().c_str(),0,zdNameVec[m].size(), cname, clen,//字段长度 cty,//字段类型 cbk, chz );//字段备注 } int rec=logio->GetTableRecordCount(iIndex); int tcount=logio->GetTableFieldCount(iIndex); Slf_TABLE_FIELD *field=new Slf_TABLE_FIELD[tcount+1]; logio->GetTableFieldInfo(iIndex,field); int reclen=logio->GetTableRecordLength(iIndex); char *Buffer=new char[reclen+1]; QFile file(fileNameVec[m]); file.open(QIODevice::ReadOnly ); file.readLine(pLine,50000); QByteArray line=pLine; while(DataHelper::IsNullLine(line)) { file.readLine(pLine,50000); line=pLine; } int lineNo=0; while(!file.atEnd()) { file.readLine(pLine,50000); QByteArray line=pLine; if(DataHelper::IsNullLine(line))continue; // QStringList StrList=GetStringList(line); int DataCol=StrList.size(); int len=0; for(int i=0;iSetData(field[i].RepCode,&Buffer[len],(float *)&buf); } else { strncpy(&Buffer[len],DataStr.toStdString().c_str(),field[i].Length); } len+=field[i].Length; } logio->WriteTable(iIndex,lineNo+1,Buffer); lineNo++; } if(lineNo>rec) rec=lineNo; logio->SetTableRecordCount(iIndex,rec); delete []Buffer; delete []field; logio->CloseTable(iIndex); count++; delete logio; // pai::graphics::CDataImport::ChangetoSlf(fi,NULL); } #pragma region 导入多井 for(int m=0;mGetWellFileName().isEmpty()) // { // fi=GetLogdataPath()+GetProject()->GetName()+"\\#"+WellNameList.at(n); // CreateDir((char *)fi.toStdString().c_str()); // fi+="\\"+WellNameList.at(n)+".slf"; // pWell->SetWellFileName(fi); // logio->Open(fi.toStdString().c_str(),CSlfIO::modeCreate,1024,1024,MACHINE_TYPE,0); // Slf_FILE_MESSAGE mssage; // logio->GetFileMessage(mssage); // int len=strlen(WellNameList.at(n).toStdString().c_str()); // strncpy(mssage.WellName,WellNameList.at(n).toStdString().c_str(),len); // mssage.WellName[len]=0; // logio->SetFileMessage(mssage); // } // else // { // fi=pWell->GetWellFileName(); // if(logio->Open(fi.toStdString().c_str(),CSlfIO::modeReadWrite)) // { // int iIndex=logio->OpenTable(tablename.toStdString().c_str()); // if(iIndex>=0) // { // //logio->DeleteSlfObject(tablename.toStdString().c_str()); // //whp change 2020.3.9 for 当数据表存在时,给出提示 // if(ret!=QMessageBox::YesAll&&ret!=QMessageBox::NoAll) // { // QMessageBox box(QMessageBox::Warning,"提示","文件"+fi+"中已存在数据表"+tablename); // box.setStandardButtons (QMessageBox::Yes|QMessageBox::No|QMessageBox::YesAll|QMessageBox::NoAll); // box.setButtonText (QMessageBox::Yes,QString("覆盖当前\r\n已存在数据表")); // box.setButtonText (QMessageBox::YesAll,QString("覆盖所有\r\n已存在数据表")); // box.setButtonText (QMessageBox::No,QString("放弃当前\r\n数据表加载")); // box.setButtonText (QMessageBox::NoAll,QString("放弃所有\r\n已存在数据表加载")); // ret=box.exec(); // } // if(ret==QMessageBox::NoAll||ret==QMessageBox::No) // { // logio->CloseTable(iIndex); // logio->Close(); // continue; // } // else // { // logio->DeleteSlfObject(tablename.toStdString().c_str()); // iIndex=-1; // } // } // } // } QString name,len,ty,bk,hz; for(int i=0;i=0) { name+= QString(QLatin1String(DefauleTable[DefaultNo[m]].tinfo[i].Name)); len+=QString::number(DefauleTable[DefaultNo[m]].tinfo[i].CodeLength);//Length); ty+=QString::number(DefauleTable[DefaultNo[m]].tinfo[i].RepCode); bk+="0"; hz+=QString(QLatin1String(DefauleTable[DefaultNo[m]].tinfo[i].Name)); } else { name+=zdNameVec[m].at(i+1); len+=QString::number(zdLen[m].at(i+1)); ty+=QString::number(zdType[m].at(i+1)); bk+="0"; hz+=zdNameVec[m].at(i+1); } if(iOpen_Set_Table(tablename.toStdString().c_str(),0,zdNameVec[m].size()-1, cname, clen,//字段长度 cty,//字段类型 cbk, chz );//字段备注 int rec=logio->GetTableRecordCount(iIndex); int tcount=logio->GetTableFieldCount(iIndex); Slf_TABLE_FIELD *field=new Slf_TABLE_FIELD[tcount+1]; logio->GetTableFieldInfo(iIndex,field); int reclen=logio->GetTableRecordLength(iIndex); char *Buffer=new char[reclen+1]; QFile file(fileNameVec[m]); file.open(QIODevice::ReadOnly ); file.readLine(pLine,50000); QByteArray line=pLine; int lineNo=0; while(!file.atEnd()) { file.readLine(pLine,50000); QByteArray line=pLine; if(line=="")continue;//whp add 2020.3.11 for 剔除空行 QStringList StrList=GetStringList(line);//line.split(","); //whp add 2020.3.11 for 剔除空行 bool IsNullLine=1; for(int kk=0;kkSetData(field[i].RepCode,&Buffer[len],(float *)&buf); } else { strncpy(&Buffer[len],DataStr.toStdString().c_str(),field[i].Length); } len+=field[i].Length; } logio->WriteTable(iIndex,lineNo+1,Buffer); lineNo++; } if(lineNo>rec) rec=lineNo; logio->SetTableRecordCount(iIndex,rec); delete []Buffer; delete []field; logio->CloseTable(iIndex); // pai::graphics::CDataImport::ChangetoSlf(fi,NULL); delete logio; outnum++; } if(outnum)count++; } #pragma endregion 导入多井 //QApplication::restoreOverrideCursor(); delete pDlg; pDlg=NULL; delete []IsCheck; delete []DefaultNo; #pragma endregion 导入表 QApplication::restoreOverrideCursor(); if(BadlistFiles.size()!=1)AfxMessageBox("完成"+QString::number(count)+"个表数据文件导入!"); else { QString ss="而数据文件"+BadlistFiles.at(0)+"无法自动识别,即将进入交互导入"; AfxMessageBox("完成"+QString::number(count)+"个表数据文件导入!\r\n\r\n"+ss); } //return BadlistFiles;//whp add 2020.3.9 for 统一离散数据入口 if(BadlistFiles.size()!=1)return; execInDefTable(curitemType,showWellName,wellFileName,BadlistFiles.at(0));//加载自由数据表 } //曲线数值统计 void CDataManagger::DataStatistics(int Type,const QString& FileName,const QString& CurveName) { CLogIO logio(FileName.toStdString().c_str(),(unsigned int)CLogIO::modeReadWrite); if(!logio.mFile) return ; Slf_CURVE info; int index=logio.OpenChannel(CurveName.toStdString().c_str()); if(index<0)return; logio.CloseChannel(index); logio.Close(); if(!Type) { CStatisticsDlg *pDlg=new CStatisticsDlg(); pDlg->FileName=FileName; pDlg->CurveName=CurveName; pDlg->init(); //pDlg->exec(); //delete pDlg; //pDlg=NULL; } else { CStatistics2Dlg *pDlg=new CStatistics2Dlg(); pDlg->FileName=FileName; pDlg->CurveName=CurveName; pDlg->init(); //pDlg->exec(); //delete pDlg; //pDlg=NULL; } } void CDataManagger::DataStatistics(int Type, const QString& FileName, const QString& CurveName, QWidget* parent) { CLogIO logio(FileName.toStdString().c_str(),(unsigned int)CLogIO::modeReadWrite); if(!logio.mFile) return ; Slf_CURVE info; int index=logio.OpenChannel(CurveName.toStdString().c_str()); if(index<0)return; logio.CloseChannel(index); logio.Close(); if(!Type) { CStatisticsDlg *pDlg1=parent->findChild("statView"); if(NULL == pDlg1 ) { pDlg1=new CStatisticsDlg(parent,0); pDlg1->setObjectName("statView"); } /* int width=parent->width(); int height=parent->height(); pDlg->resize(QSize(width,height));*/ pDlg1->FileName=FileName; pDlg1->CurveName=CurveName; pDlg1->init(); pDlg1->show(); //pDlg->exec(); //delete pDlg; //pDlg=NULL; } //whp add 2020.5.11 for 波列数据编辑和管理 波列曲线数值统计 else { CStatistics2Dlg *pDlg2=parent->findChild("stat2View"); if(NULL == pDlg2 ) { pDlg2=new CStatistics2Dlg(parent,0); pDlg2->setObjectName("stat2View"); } pDlg2->FileName=FileName; pDlg2->CurveName=CurveName; pDlg2->init(); pDlg2->show(); } } // //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(); // } // //whp add 2020.5.12 for 常规曲线预览 // void CDataManagger::DisplayCurve(const QString& FileName,const QString& CurveName) // { // CLogIO *logio=new CLogIO(); // if(!logio->Open(FileName.toStdString().c_str(),CSlfIO::modeRead)) // { // delete logio; // QMessageBox::warning(NULL,"提示","打开文件"+FileName+"错误"); // return ; // } // int index = logio->OpenCurve(CurveName.toStdString().c_str()); // if(index<0) { // delete logio; // return; // } // logio->CloseCurve(index); // delete logio; // ShowCurve *pDlg = new ShowCurve(); // pDlg->FileName = FileName,pDlg->CurveName = CurveName; // pDlg->init(); // pDlg->show(); // } void CDataManagger::CurvePropertyEdit(int Type, const QString& FileName, const QString& CurveName, QWidget* parent) { CCurvePropertyEditDlg *pDlg=new CCurvePropertyEditDlg(parent,0); connect(pDlg,SIGNAL(destroyed()),this,SLOT(slotCurvePropertyGc())); pDlg->FileName=FileName; pDlg->CurveName=CurveName; pDlg->Type=Type; pDlg->init(); pDlg->show(); } void CDataManagger::CurveCompute(const QString& FileName, const QStringList& CurveNameList, QWidget* parent) { if(CurveNameList.count()==1) { CurveComputePage *pPage=parent->findChild("computeV"); if(NULL == pPage) { pPage=new CurveComputePage(parent); pPage->setObjectName("computeV"); } connect(pPage,SIGNAL(signalCompute(QStringList)),this,SLOT(slotCurveComputeGc(QStringList))); pPage->CurveCompute(FileName,CurveNameList); pPage->init(); pPage->show(); } else { CCurveComputerDlg *pDlg=new CCurveComputerDlg(); pDlg->FileName=FileName; pDlg->CurveNameList=CurveNameList; pDlg->init();//FileName, CurveNameList); //pDlg->exec(); //delete pDlg; //pDlg=NULL; } } void CDataManagger::slotCurveComputeGc(QStringList listCurveNames) { // PaiObject::m_EventAgent.ObjectPropertyChanged(GetProject(),"Compute",listCurveNames); } void CDataManagger::slotCurvePropertyGc() { // pai::graphics::CDataImport::ChangetoSlf(m_fileName,NULL); } // void CDataManagger::CurvePropertyEdit(int Type,const QString& FileName,const QString& CurveName) // { // CCurvePropertyEditDlg *pDlg=new CCurvePropertyEditDlg(); // pDlg->FileName=FileName; // pDlg->CurveName=CurveName; // pDlg->Type=Type; // pDlg->init(); // //波列 // //if (Type == 1) // { // pDlg->setWindowFlags(Qt::WindowStaysOnTopHint); // pDlg->show(); // QEventLoop loop; // connect(pDlg,SIGNAL(signalsCloseed()),&loop,SLOT(quit()),Qt::UniqueConnection); // loop.exec(); // delete pDlg; // pDlg=NULL; // } // pai::graphics::CDataImport::ChangetoSlf(FileName,NULL); // } // //表属性编辑 // QString CDataManagger::TableProEdit(const QString& wellname,const QString& tablename) // { // TableProEditDlg *pDlg=new TableProEditDlg(); // pDlg->FileName=wellname; // pDlg->TableName=tablename; // pDlg->init(); // if(pDlg->exec()==QDialog::Accepted) // { // QString cs=pDlg->TableName; // delete pDlg; // return cs; // } // else { // delete pDlg; // return ""; // } // } QString CDataManagger::Curve2ResultTable(const QString& wellname,const QString& curvename) { CLogIO *logio=new CLogIO(); if(!logio->Open(wellname.toStdString().c_str(),CSlfIO::modeRead)) { delete logio; QMessageBox::warning(NULL,"提示","打开文件"+wellname+"错误"); return ""; } int index=logio->OpenCurve(curvename.toStdString().c_str()); if(index<0) { delete logio; return ""; } //gen curve data Slf_CURVE Info; logio->GetCurveInfo(index,&Info); if(Info.EndDepth < Info.StartDepth) return ""; DWORD count=(Info.EndDepth - Info.StartDepth)/Info.DepLevel+2.5; float* vVdl; vVdl=new float[count]; logio->ReadCurve(index, Info.StartDepth, count, vVdl); logio->CloseCurve(index); //gen RESULT layer data int Num = 0; float *layerSDEP = new float[count]; float *layerEDEP = new float[count]; int *layerRESULT = new int[count]; for(int i = 0; i < (Info.EndDepth - Info.StartDepth)/Info.DepLevel; i++){ if(vVdl[i] > 0){//find headDep layerSDEP[Num] = Info.StartDepth + i*Info.DepLevel; if(abs(round(vVdl[i]) - vVdl[i]) > 0.01){ return ""; } layerRESULT[Num] = vVdl[i]; while(1){ i++; if(i == (Info.EndDepth - Info.StartDepth)/Info.DepLevel) break; if(vVdl[i] != layerRESULT[Num]){ layerEDEP[Num] = Info.StartDepth + (i-1)*Info.DepLevel; if(layerEDEP[Num] < layerSDEP[Num]) layerEDEP[Num] = layerSDEP[Num]; break; } } Num++; i--; } } //gen new table name int a = 1; QString newTableName = curvename + "_" + QString::number(a, 10); while(1){ if(logio->FindObjectIndex(newTableName.toStdString().c_str()) >= 0) { a++; newTableName = curvename + "_" + QString::number(a, 10); } else break; } LAYER_DATA m_Result; int iIndex = logio->OpenTable(newTableName.toStdString().c_str()); if (iIndex < 0) { iIndex=logio->Open_Set_Table(newTableName.toStdString().c_str(),0,22, "NO,SDEP,EDEP,ZONE,RESULTNO,THICK,TT,MDEPTH1,MDEPTH2,MDEPTH3,MDEPTH4,MDEPTH5,MDEPTH6,MDEPTH7,MDEPTH8,MDEPTH9,MDEPTH10,OIL,POOROIL,OILWATER,GAS,POORGAS,GASWATER,WATERGAS,DEST1,DEST2,DEST3,DEST4,DEST5,DEST6,DEST7,DEST8,DEST9,DEST10", "4,4,4,8,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,48,48,48,48,48,48,48,48,48,48",//字段长度 "1,4,4,6,1,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,6,6,6,6,6,6,6,6,6,6",//字段类型 "0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0");//字段备注 } logio->SetTableRecordCount(iIndex, Num); for(int j = 0; j < Num; j++) { //memset(&m_Result,0,sizeof(LAYER_DATA)); m_Result.Order = j+1; m_Result.EndDepth=layerEDEP[j]; m_Result.StartDepth=layerSDEP[j]; m_Result.Thick=m_Result.EndDepth-m_Result.StartDepth; m_Result.Result = layerRESULT[j]; //int n=layerNameVec[j].size(); //if(n>8) n=8; //strncpy(m_Result.Zone,layerNameVec[j].toStdString().c_str(),n); logio->WriteTable(iIndex,j+1,&m_Result); } logio->CloseTable(iIndex); delete logio; delete []layerSDEP; delete []layerEDEP; delete []layerRESULT; delete []vVdl; return ""; } // //表转曲线 // QString CDataManagger::Table2Curve(const QString& wellname,const QString& tablename) // { // int defalutVal = 38; // CLogIO logio(wellname.toStdString().c_str(),(unsigned int)CLogIO::modeReadWrite); // if(!logio.mFile) return ""; // int index=logio.FindSlfObjectIndex(tablename.toStdString().c_str()); // if(index<0) return ""; // //char name[64],HzName[64]; // //logio.GetObjectName(index,(char *)&name,NULL,(char *)&HzName); // index=logio.OpenTable(tablename.toStdString().c_str()); // int fNum=logio.GetSlfTableFieldCount(index); // Slf_OBJECT_FIELD *info=new Slf_OBJECT_FIELD[fNum+1]; // logio.GetSlfTableFieldInfo(index,&info[0]); // bool ifSDEP = false; // bool ifEDEP = false; // bool ifRESULT = false; // for(int i=0;i= 0) // { // a++; // newCurveName = tablename + "_" + QString::number(a, 10); // } // else // break; // } // float StartDepth=999999; // float EndDepth=-999999; // int count=logio.GetObjectCount(); // for(int i=0;iEndDepth) EndDepth=acurveinfo.EndDepth; // } // } // Slf_CURVE Slf_curve; // memset(&Slf_curve,0,sizeof(Slf_CURVE)); // strcpy(Slf_curve.Name,newCurveName.toStdString().c_str()); // strcpy(Slf_curve.AliasName,newCurveName.toStdString().c_str()); // strcpy(Slf_curve.Unit,""); // strcpy(Slf_curve.AliasUnit,""); // Slf_curve.RepCode=1; // Slf_curve.CodeLen=4; // Slf_curve.MinValue=99999; // Slf_curve.MaxValue=-99999; // Slf_curve.DefVal=0; // Slf_curve.StartDepth = StartDepth; // Slf_curve.EndDepth = EndDepth; // Slf_curve.DepLevel = 0.025; // strcpy(Slf_curve.DepthUnit,"m"); // strcpy(Slf_curve.DepthHZUnit,"m"); // logio.CreateCurve(&Slf_curve,true); // DWORD num=(Slf_curve.EndDepth-Slf_curve.StartDepth)/Slf_curve.DepLevel+1.5; // float *val=new float[num]; // float curD; // for(int i = 0; i < num; i++){ // curD = StartDepth + i * Slf_curve.DepLevel; // val[i] = defalutVal; // for(int j = 0; j < recordcount; j++){ // if(curD >= layerSDep[j] && curD <= layerEDep[j]){ // val[i] = layerType[j]; // break; // } // } // } // index=logio.OpenCurve(Slf_curve.Name); // if(index > -1) { // logio.WriteCurve(index,Slf_curve.StartDepth,num,val); // logio.CloseCurve(index); // } // delete []val; // logio.Close(); // return newCurveName; // } // else // { // logio.CloseTable(index); // logio.Close(); // QMessageBox msg;//对话框设置父组件 // msg.setWindowTitle("生成曲线");//对话框标题 // msg.setText("无法在表格中找到相关深度或结论信息!");//对话框提示文本 // msg.setIcon(QMessageBox::Information);//设置图标类型 // msg.setStandardButtons(QMessageBox::Ok);//对话框上包含的按钮 // msg.exec(); // return ""; // } // } //whp 2020.7.21 //创建新表 QString CDataManagger::CreateNewTable(const QString& wellname) { if(DataHelper::m_IsGc)DataHelper::InitDefauleTable(); CCreateNewTableDlg *pDlg=new CCreateNewTableDlg(); pDlg->FileName=wellname; if(pDlg->exec()==QDialog::Accepted) { QString cs=pDlg->TableName; delete pDlg; return cs; } else { delete pDlg; return ""; } } // QString CDataManagger::CreateNewCurve(const QString& wellname) // { // CCreateNewCurveDlg *pDlg=new CCreateNewCurveDlg(); // pDlg->wellname=wellname; // QString Curvename=""; // if(pDlg->exec()==QDialog::Accepted){ // Curvename=pDlg->CurveName; // } // delete pDlg; // pDlg=NULL; // return Curvename; // } // //单位转换 // void CDataManagger::UnitConvert(const QString& FileName)//,CObjWelllogRound* pround) // { // CMemRdWt *mrw=new CMemRdWt(); // if(!mrw->Open(FileName.toStdString().c_str(),CSlfIO::modeReadWrite)) // { // delete mrw; // QMessageBox::warning(NULL,"提示","打开文件"+FileName+"错误\r\n"); // return ; // } // int ObjectNumber=mrw->GetObjectCount(); // int CurveCount=0,WaveCount=0; // char Name[200]; // for(int i=0;iGetObjectStatus(i)!=OBJECT_NORMAL) // { // continue; // } // mrw->GetObjectName(i,Name); // short Attribute,SubAttribute; // Attribute=mrw->GetObjectType(i); // if(Attribute==CURVE_OBJECT) // { // CurveCount++; // } // else if(Attribute==WAVE_OBJECT) // { // WaveCount++; // } // } // delete mrw; // if(CurveCount+WaveCount==0) // { // QMessageBox::warning(NULL,"提示","您所选择的文件中没有曲线存在\r\n"); // return; // } // CUnitConvertDlg *pDlg=new CUnitConvertDlg(); // pDlg->FileName=FileName; // //pDlg->pround=pround; // pDlg->init(); // pDlg->exec(); // delete pDlg; // pDlg=NULL; // pai::graphics::CDataImport::ChangetoSlf(FileName,NULL); // } // //whp add 2020.4.14 合成阵列曲线 // QString CDataManagger::WaveCompose(const QString& FileName,const QStringList& CurveNameList) // { // CWaveComposeDlg *pDlg=new CWaveComposeDlg(); // pDlg->FileName=FileName; // pDlg->CurveNameList=CurveNameList; // pDlg->init(); // pDlg->show();//exec(); // QString WaveName=""; // return WaveName; // } void CDataManagger::accept2() { // 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"); // float CurveValue,rlev; // Function fun; // int noi=fun.GetExpress(m_Function); // if(noi<0) // { // delete mrw; // return ;//输入公式中没有“=”号,或含有不能处理的字符 // } // //检查公式合理性 // for(int j=0;j0) // { // static char *e[]={ // "语法错误",//"syntax error.", // "不对称的括号",//"unbalanced parentheses", // "非法运算符"//"no expression present" // }; // QMessageBox::warning(NULL,"提示",QString(QLatin1String(e[re-1]))+m_Function); // delete mrw; // return ; // } // char name[20]; // strcpy(name,fun.csOutName.toStdString().c_str()); // int index[20]; // int index1=mrw->OpenTable(m_ObjList.at(0)->GetName().toStdString().c_str()); // if(index1<0) { // delete mrw; // return; // } // int fcount=mrw->GetTableFieldCount(index1); // if(fcount<1) { // delete mrw; // AfxMessageBox("表无效!"); // return; // } // int rcount=mrw->GetTableRecordCount(index1); // Slf_TABLE_FIELD *pInfo=new Slf_TABLE_FIELD[fcount+1]; // mrw->GetTableFieldInfo(index1,pInfo); // QStringList strs; // for(int j=0;jGetName()+"1"; // delete []pInfo; // { // //生成导入曲线 // int sdep=m_edit1->text().toFloat(); // int edep=m_edit2->text().toFloat(); // int sample=edep-sdep; // int oindex=mrw->OpenTable((char*)newnm.toStdString().c_str()); // if(oindex<0) { // mrw->CopyObject(m_ObjList.at(0)->GetName().toStdString().c_str(),newnm.toStdString().c_str()); // oindex=mrw->OpenTable((char*)newnm.toStdString().c_str()); // } // for (int i=0; iGetTableFieldData(index1,index[j],i+1,(char*)&fun.val[j]); // } // } // fun.prog=fun.TempProg; // fun.get_exp(&CurveValue); // mrw->SetTableFieldData(oindex,oindexfield,(char*)&CurveValue,i+1); // } // mrw->CloseTable(oindex); // } // CObjWellLogTABLE *a=dynamic_cast(m_ObjList.at(0)); // // AddToWellRound(newnm,a,GetClassID_WellLogTABLE(),TABLEE_OBJECT); // CObjWelllogRound *pWelllogRound=dynamic_cast(a->GetWelllogRound()); // if(pWelllogRound) { // PaiObject*pBase=pWelllogRound->GetObjectByName(newnm,GetClassID_WellLogTABLE()); // if(!dynamic_cast(pBase)){ // CObjWellLog * acurve=new CObjWellLogTABLE(); // if(acurve) { // acurve->m_ObjectType=TABLEE_OBJECT; // acurve->SetName(newnm); // acurve->SetAliasName(newnm); // acurve->SetSlfFileName(a->GetSlfFileName()); // acurve->SetWell(pWelllogRound->GetWell()); // pWelllogRound->AddChild(acurve); // } // } // } // Slf_FILE_MESSAGE msag; // mrw->GetFileMessage(msag); // delete mrw; // GetObjectEvent().OnDeAttchData(a->GetSlfFileName(),newnm); // GetObjectEvent().OnRefreshData(a->GetSlfFileName(),newnm,this); // /* // QStringList CurveNames; // CurveNames.push_back(msag.WellName); // CurveNames.push_back(m_FileName); // CurveNames.push_back(newnm); // PaiObject::m_EventAgent.ObjectPropertyChanged(GetProject(),"Compute",CurveNames); // */ // QMessageBox::information(m_pDialog,"提示","计算完毕!",QMessageBox::Ok); } 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;j0) // { // 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) // { // } // 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;iGetObjectType(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;iGetCurveInfo(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; ktext().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; ktext().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; // for (int i=0; iCloseCurve(index[i]); // } // mrw->CloseCurve(indexout); // for(int j=0;jGetFileMessage(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); } //曲线计算 // void CDataManagger::CurveCompute(QListobjs,int no) // { // m_ObjList=objs; // if(objs.count()==1) // { // QString FileName=objs.at(0)->GetSlfFileName(); // 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); // m_FileName=FileName; // CMemRdWt *mrw=new CMemRdWt(); // if(!mrw->Open(FileName.toStdString().c_str(),CSlfIO::modeReadWrite)) { // delete mrw; // return; // } // int index=mrw->OpenTable(objs.at(0)->GetName().toStdString().c_str()); // if(index<0) { // delete mrw; // return; // } // int fcount=mrw->GetTableFieldCount(index); // if(fcount<1) { // delete mrw; // AfxMessageBox("表无效!"); // ; return; // } // int rcount=mrw->GetTableRecordCount(index); // Slf_TABLE_FIELD *pInfo=new Slf_TABLE_FIELD[fcount+1]; // mrw->GetTableFieldInfo(index,pInfo); // delete mrw; // if(no>=fcount) no=fcount-1; // if(no<0) no=0; // m_CurveName=pInfo[no].Name; // delete []pInfo; // // 开始深度 // QString value1 = QString("开始层号: "); // QLineEdit *edit1 = new QLineEdit(&dialog); // m_edit1=edit1; // form.addRow(value1, edit1); // edit1->setText(QString::number(0)); // // 终止深度 // QString value2 = QString("终止层号: "); // QLineEdit *edit2 = new QLineEdit(&dialog); // m_edit2=edit2; // form.addRow(value2, edit2); // edit2->setText(QString::number(rcount)); // //计算公式 // QString value3 = QString("计算公式: "); // QLineEdit *edit3 = new QLineEdit(&dialog); // form.addRow(value3, edit3); // QString ss=m_CurveName+"=1.0*"+m_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+5;GR2=45;TEMP=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(accept2())); // 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); // } // } // 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)); // // 终止深度 // 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+5;GR2=45;TEMP=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); // } // } void CDataManagger::CallDisplayWaveOrCurve(int Type, const QString& FileName, const QString& CurveName, QWidget* parent) { CLogIO *logio=new CLogIO(); if(!logio->Open(FileName.toStdString().c_str(),CSlfIO::modeRead)) { delete logio; QMessageBox::warning(NULL,"提示","打开文件"+FileName+"错误"); return ; } //常规曲线 if (Type == 0) { int index=logio->OpenCurve(CurveName.toStdString().c_str()); if(index<0) { delete logio; return; } logio->CloseCurve(index); delete logio; ShowCurve *pDlg=parent->findChild("curveView"); if(NULL == pDlg) { pDlg=new ShowCurve(parent); pDlg->setObjectName("curveView"); } pDlg->FileName=FileName; pDlg->CurveName=CurveName; pDlg->init(); pDlg->show(); //波列 1 }else { int index=logio->OpenWave(CurveName.toStdString().c_str()); if(index<0) { delete logio; return; } logio->CloseWave(index); delete logio; ShowWave *pDlgwage=parent->findChild("waveView"); if(NULL == pDlgwage) { pDlgwage=new ShowWave(parent); pDlgwage->setObjectName("waveView"); } pDlgwage->FileName=FileName; pDlgwage->WaveName=CurveName; pDlgwage->init(); pDlgwage->show(); } } // void CDataManagger::CallDisplayCurveVerChange(int Type, const QString& FileName, // const QString& CurveName, QWidget* parent, int value, float tipValue) // { // //常规曲线 // if (Type == 0) // { // ShowCurve *pDlg=parent->findChild("curveView"); // if(NULL == pDlg) // { // pDlg=new ShowCurve(parent); // pDlg->setObjectName("curveView"); // pDlg->FileName=FileName; // pDlg->CurveName=CurveName; // pDlg->init(); // pDlg->show(); // } // pDlg->linkVerDeptSliderValueChange(value, tipValue); // } // } // void CDataManagger::sendTableP2Mgr(QWidget* parent, QScrollBar *p, QTableWidget *t) // { // ShowCurve *pDlg = parent->findChild("curveView"); // if(NULL == pDlg) return; // pDlg->setTableBro(p); // pDlg->setCurveTable(t); // } /* void CDataManagger::ListMessage(const QString& listName,const QStringList& header,const QStringList& listMessage) { CMyListDlg *pDlg=new CMyListDlg(); pDlg->setWindowTitle(listName); int col=header.size(); int row=listMessage.size()/header.size(); pDlg->init(row,col,header); for(int i=0;im_pUI->tableWidget->setItem(i,j,new QTableWidgetItem(listMessage.at(i*col+j))); } pDlg->exec(); }*/