logplus/DataMgr/src/DataManagger.cpp

1975 lines
62 KiB
C++
Raw Normal View History

2025-10-30 09:50:15 +08:00
#include <QFileDialog>
#include <QScrollBar>
#include <qformlayout.h>
#include <QInputDialog>
#include <QListWidget>
#include <QCompleter>
#include <qtablewidget.h>
//#include "io.h"
2025-10-30 09:50:15 +08:00
#include <QMessageBox>
#include "DataManagger.h"
#include "InDefTableDlg.h"
#include "DataHelper.h"
// #include "DataImport.h"
// #include "ObjWellLogTABLE.h"
// #include "CreateNewCurveDlg.h"
//#include "TableTBCurve.h"
2026-01-29 16:57:06 +08:00
#include "CurvePropertyEdit.h"
2025-10-30 09:50:15 +08:00
#include "cdialog.h"//"MyListDlg.h"
2026-01-29 16:57:06 +08:00
#include "CurveComputerDlg.h"
2025-10-30 09:50:15 +08:00
// #include "UnitConvertDlg.h"
2026-01-29 16:57:06 +08:00
#include "StatisticsDlg.h"
#include "Statistics2Dlg.h"
#include "CurveComputePage.h"
2025-10-30 09:50:15 +08:00
// #include "CopyObjectDlg.h"
// #include "WaveComposeDlg.h"//2020.4.14 合成阵列曲线
2026-01-29 16:57:06 +08:00
#include "ShowWave.h"//波列曲线预览
#include "ShowCurve.h"//2020.5.12常规曲线预览
2025-10-30 09:50:15 +08:00
#include <QEventLoop>
// #include "tableproeditdlg.h"
#include "CreateNewTableDlg.h"
2025-10-30 09:50:15 +08:00
#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;i<DefTabNum;i++){
pDlg->m_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<QString> fileNameVec;//表文件名
std::vector<QStringList> zdNameVec;//表字段名
std::vector<int>HaveWellName;//首列是否是井名“WELLNAME”标示
std::vector<vector<int>>zdLen;
std::vector<vector<int>>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<ColNum;i++)FieldType[i]=1;//1-int,2-short,3-long,4-float,5-double,6-string
#pragma region 根据字段内容确定字段值类型
//非数值则为string数值有小数点即为float否则为int
while(!file.atEnd())
{
file.readLine(pLine,50000);
QByteArray line=pLine;
if(DataHelper::IsNullLine(line))continue;
QStringList StrList=GetStringList(line);
int DataCol=StrList.size();
for(int i=0;i<ColNum;i++)
{
if(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]);//匹配缺省表,返回缺省表序号
vector<int>m_zdLen;
vector<int>m_zdType;
for(int i=0;i<ColNum;i++)
{
m_zdType.push_back(FieldType[i]);
int ZdLen=RepSize[FieldType[i]];if(FieldType[i]==6)ZdLen=128;
m_zdLen.push_back(ZdLen);
}
zdType.push_back(m_zdType);
zdLen.push_back(m_zdLen);
delete []FieldType;
file.close();
}
delete pLine;
QStringList OutTableName;
QStringList OutWellName;//导入井名
int HaveDefaultTable=0;//匹配上的缺省表个数
//whp add 20200107
CDialog *pDlg=new CDialog();//CMyListDlg *pDlg=new CMyListDlg();
//设置对话框类型0-只有列表框1-左列表右文本2-只有文本框
//beCheck点击确定时是否需要对"导入井名"和"导入表名"列字符串进行有效性检查
if(BadlistFiles.size()==0)pDlg->setDialogType(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;m<TableNum;m++)
{
QString tablename=listFiles[m],wellname=showWellName;
if(!curitemType)wellname="";//当前选择项是“井”
//ww change 2020.3.13 for 对路径分隔符要进行2种识别
//tablename=tablename.right(tablename.length()-tablename.lastIndexOf("\\")-1);
int index=tablename.lastIndexOf("/");
int index1=tablename.lastIndexOf("\\");
if(index1>index) {
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;i<TableNum;i++){
QString ss=pDlg->getItem(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;m<listFiles.size();m++)//foreach(QString strFileName, listFiles)
{
CLogIO *logio=new CLogIO();
dp.SetDepth(m+1);
if(!IsCheck[m])continue;
QString tablename;
tablename=OutTableName[m];
char tn[100];
QString fi;
strcpy(tn,tablename.toStdString().c_str());
if(HaveWellName[m])continue;//&&(OutWellName[m]=="多井"))continue;
if(OutWellName[m]==showWellName)
{
fi=wellFileName;
logio->Open(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<zdNameVec[m].size();i++)
{
if(DefaultNo[m]>=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(i<zdNameVec[m].size()-1) {
name+=",";
len+=",";
ty+=",";
bk+=",";
hz+=",";
}
}
char cname[500],clen[500],cty[500],cbk[500],chz[500];
strcpy(cname,name.toStdString().c_str());
strcpy(clen,len.toStdString().c_str());
strcpy(cty,ty.toStdString().c_str());
strcpy(cbk,bk.toStdString().c_str());
strcpy(chz,hz.toStdString().c_str());
iIndex=logio->Open_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;i<tcount;i++)
{
QString DataStr="-9999.";
if(i<DataCol)DataStr=StrList[i];
if(field[i].RepCode!=6)
{
float buf=DataStr.toFloat();
logio->SetData(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;m<listFiles.size();m++)//输入数据表文件
{
dp.SetDepth(m+1);
if(!IsCheck[m])continue;
if(!HaveWellName[m])continue;//OutWellName[m]!="多井")continue;
QString tablename;
tablename=OutTableName[m];
char tn[100];
QString fi;
strcpy(tn,tablename.toStdString().c_str());
QStringList WellNameList;
//搜索当前文件包含井名
QFile file(listFiles[m]);
file.open(QIODevice::ReadOnly );
file.readLine(pLine,50000);
QByteArray line=pLine;
while(DataHelper::IsNullLine(line))
{
file.readLine(pLine,50000);
line=pLine;
}
while(!file.atEnd())
{
file.readLine(pLine,50000);
QByteArray line=pLine;
if(DataHelper::IsNullLine(line))continue;
QStringList StrList=GetStringList(line);
bool flag=0;
QString DataStr=StrList[0].toUpper();
for(int j=0;j<WellNameList.size();j++)
{
if(WellNameList.at(j)!=DataStr)continue;
flag=1;break;
}
if(!flag)WellNameList.append(DataStr);
}
//导入
int outnum=0;
for(int n=0;n<WellNameList.size();n++)//导入井名
{
// CObjWell * pWell =CDataImport::GetWellByName(WellNameList.at(n));
// if(!pWell) continue;
CLogIO *logio=new CLogIO();
// QString fi;
// if(pWell->GetWellFileName().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<zdNameVec[m].size()-1;i++)
{
if(DefaultNo[m]>=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(i<zdNameVec[m].size()-2) {
name+=",";
len+=",";
ty+=",";
bk+=",";
hz+=",";
}
}
char cname[500],clen[500],cty[500],cbk[500],chz[500];
strcpy(cname,name.toStdString().c_str());
strcpy(clen,len.toStdString().c_str());
strcpy(cty,ty.toStdString().c_str());
strcpy(cbk,bk.toStdString().c_str());
strcpy(chz,hz.toStdString().c_str());
int iIndex=logio->Open_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;kk<StrList.size();kk++)
{
if(StrList.at(kk)!="")
{
IsNullLine=0;break;
}
}
if(IsNullLine)continue;
//
if(StrList[0].toUpper()!=WellNameList[n])continue;
int DataCol=StrList.size();
int len=0;
for(int i=0;i<tcount;i++)
{
QString DataStr="-9999.";
if(i<DataCol)DataStr=StrList[i+1];
if(field[i].RepCode!=6)
{
float buf=DataStr.toFloat();
logio->SetData(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));//加载自由数据表
}
2026-01-29 16:57:06 +08:00
//曲线数值统计
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;
}
}
2025-10-30 09:50:15 +08:00
2026-01-29 16:57:06 +08:00
void CDataManagger::DataStatistics(int Type,
const QString& FileName,
const QString& CurveName,
QWidget* parent)
{
2025-10-30 09:50:15 +08:00
2026-01-29 16:57:06 +08:00
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)
{
2025-10-30 09:50:15 +08:00
2026-01-29 16:57:06 +08:00
CStatisticsDlg *pDlg1=parent->findChild<CStatisticsDlg*>("statView");
if(NULL == pDlg1 )
{
pDlg1=new CStatisticsDlg(parent,0);
pDlg1->setObjectName("statView");
}
2025-10-30 09:50:15 +08:00
2026-01-29 16:57:06 +08:00
/* 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
{
2025-10-30 09:50:15 +08:00
2026-01-29 16:57:06 +08:00
CStatistics2Dlg *pDlg2=parent->findChild<CStatistics2Dlg*>("stat2View");
if(NULL == pDlg2 )
{
pDlg2=new CStatistics2Dlg(parent,0);
pDlg2->setObjectName("stat2View");
}
2025-10-30 09:50:15 +08:00
2026-01-29 16:57:06 +08:00
pDlg2->FileName=FileName;
pDlg2->CurveName=CurveName;
pDlg2->init();
pDlg2->show();
}
}
2025-10-30 09:50:15 +08:00
// //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();
// }
2026-01-29 16:57:06 +08:00
void CDataManagger::CurvePropertyEdit(int Type,
const QString& FileName,
const QString& CurveName,
QWidget* parent)
{
2025-10-30 09:50:15 +08:00
2026-01-29 16:57:06 +08:00
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();
2025-10-30 09:50:15 +08:00
2026-01-29 16:57:06 +08:00
}
2025-10-30 09:50:15 +08:00
2026-01-29 16:57:06 +08:00
void CDataManagger::CurveCompute(const QString& FileName,
const QStringList& CurveNameList,
QWidget* parent)
{
2025-10-30 09:50:15 +08:00
2026-01-29 16:57:06 +08:00
if(CurveNameList.count()==1)
{
CurveComputePage *pPage=parent->findChild<CurveComputePage*>("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;
}
}
2025-10-30 09:50:15 +08:00
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<fNum;i++)
// {
// if(QString(QLatin1String(info[i].Name)) == "SDEP")
// ifSDEP = true;
// if(QString(QLatin1String(info[i].Name)) == "EDEP")
// ifEDEP = true;
// if(QString(QLatin1String(info[i].Name)) == "RESULTNO")
// ifRESULT = true;
// }
// if(ifSDEP && ifEDEP && ifRESULT)
// {
// QStringList ResultList;
// QString ConfigName = ::GetConfPath() + "RESULT.ini";
// QFile InFile3(ConfigName);
// if( !InFile3.open(QIODevice::ReadOnly ) )
// {
// QMessageBox::warning(NULL, "提示", "打开解释结论配置文件" + ConfigName + "错误");
// }
// else
// {
// QTextStream textstream3( &InFile3 );
// QString line;
// while(!textstream3.atEnd())
// {
// line = textstream3.readLine();
// if(line.length() <= 1)
// continue;
// ResultList.append(line);
// }
// InFile3.close();
// }
// float frontD = 0;
// float lastD = 0;
// int recordcount=logio.GetTableRecordCount(index);
// float depRange = 0;
// float frontDV = 0;
// float lastDV = 0;
// char *buf1 = new char [20];
// char *buf2 = new char [20];
// char *buf3 = new char [20];
// float *layerEDep = new float[recordcount];
// float *layerSDep = new float[recordcount];
// float *layerType = new float[recordcount];
// for(int i = 0; i < recordcount; i++)
// {
// logio.GetTableFieldData(index, "SDEP", buf1, i+1);
// logio.GetTableFieldData(index, "EDEP", buf2, i+1);
// logio.GetTableFieldData(index, "RESULTNO", buf3, i+1);
// layerSDep[i] = atof(buf1);
// layerEDep[i] = atof(buf2);
// depRange = layerEDep[i] - layerSDep[i];
// frontDV = depRange * frontD;
// lastDV = depRange * lastD;
// layerSDep[i] += frontDV;
// layerEDep[i] -= lastDV;
// depRange = layerEDep[i] - layerSDep[i];
// if(depRange <= 0)
// layerEDep[i] = layerSDep[i] + 0.1;
// QString str(buf3);
// for(int j = 0; j < ResultList.size(); j++){
// layerType[i] = defalutVal-1;
// if(ResultList[j] == str){
// layerType[i] = j+1;
// break;
// }
// }
// }
// logio.CloseTable(index);
// //CLogIO logio(wellname.toStdString().c_str(),(unsigned int)CLogIO::modeReadWrite);
// //if(!logio.mFile) return ;
// int a = 1;
// QString newCurveName = tablename + "_" + QString::number(a, 10);
// while(1){
// if(logio.FindObjectIndex(newCurveName.toStdString().c_str()) >= 0)
// {
// a++;
// newCurveName = tablename + "_" + QString::number(a, 10);
// }
// else
// break;
// }
// float StartDepth=999999;
// float EndDepth=-999999;
// int count=logio.GetObjectCount();
// for(int i=0;i<count;i++)
// {
// if(logio.GetObjectStatus(i)!=OBJECT_NORMAL) continue;
// short curvetype=logio.GetObjectType(i);
// if(curvetype == CURVE_OBJECT)
// {
// Slf_CURVE acurveinfo;
// logio.GetCurveInfo(i,&acurveinfo);
// if(acurveinfo.StartDepth<StartDepth) StartDepth=acurveinfo.StartDepth;
// if(acurveinfo.EndDepth>EndDepth) 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 "";
}
}
2025-10-30 09:50:15 +08:00
// 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;i<ObjectNumber;i++)
// {
// if(mrw->GetObjectStatus(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;j<noi;j++)
// {
// fun.val[j]=j+1;
// }
// fun.prog=fun.TempProg;
// int re=fun.get_exp(&CurveValue);
// if(re>0)
// {
// 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;j<fcount;j++)
// {
// strs.append(QString(pInfo[j].Name).toUpper());
// }
// QString Name=QString(name).toUpper();
// int oindexfield=strs.indexOf(Name);
// if(oindexfield<0) {
// AfxMessageBox(Name+"不存在,表格计算不支持创建新字段,无法进行计算!");
// delete mrw;
// delete []pInfo;
// return;
// }
// for(int i=0;i<noi;i++)
// {
// if(fun.csName[i]=="CURRENT_HD.DEP")continue;
// index[i]=strs.indexOf(fun.csName[i]);
// if(index[i]<0) {
// AfxMessageBox(fun.csName[i]+"不存在!");
// delete mrw;
// delete []pInfo;
// return;
// }
// }
// QString newnm=m_ObjList.at(0)->GetName()+"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; i<sample; i++)
// {
// for(int j=0;j<noi;j++)
// {
// if(fun.csName[j]=="CURRENT_HD.DEP") fun.val[j]=sdep+i;
// else {
// mrw->GetTableFieldData(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<CObjWellLogTABLE *>(m_ObjList.at(0));
// // AddToWellRound(newnm,a,GetClassID_WellLogTABLE(),TABLEE_OBJECT);
// CObjWelllogRound *pWelllogRound=dynamic_cast<CObjWelllogRound*>(a->GetWelllogRound());
// if(pWelllogRound) {
// PaiObject*pBase=pWelllogRound->GetObjectByName(newnm,GetClassID_WellLogTABLE());
// if(!dynamic_cast<CObjWellLogTABLE *>(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;j<noi;j++)
// {
// fun.val[j]=j+1;
// }
// fun.prog=fun.TempProg;
// int re=fun.get_exp(&CurveValue);
// if(re>0)
// {
// 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;i<noi;i++)
// {
// if(fun.csName[i]=="CURRENT_HD.DEP")continue;
// if(mrw->GetObjectType(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;i<noi;i++)
// {
// if(fun.csName[i]=="CURRENT_HD.DEP")continue;
// mrw->GetCurveInfo(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; k<sample; k++) tDep[k]=sdep+k*rlev;
// for(int j=0;j<noi;j++)
// {
// if(fun.csName[j]=="CURRENT_HD.DEP")continue;
// indata[j]=new float[sampleIn];
// //whp change 2018.10.15 保证读写一致
// CurveSample[j]=(m_edit2->text().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; k<CurveSample[j]; k++) aDep[k]=sdep+k*CurveRlev[j];
// Resample::ReSampling(&indata[j][0],CurveSample[j],1,aDep,tDep,sample);
// delete []aDep;
// }
// }
// for (int i=0; i<sample; i++)
// {
// //sdep = sdeps + rlev * i;
// for(int j=0;j<noi;j++)
// {
// if(fun.csName[j]=="CURRENT_HD.DEP")fun.val[j]=m_edit1->text().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; i<noi;i++)
// {
// if(fun.csName[i]=="CURRENT_HD.DEP")continue;
// mrw->CloseCurve(index[i]);
// }
// mrw->CloseCurve(indexout);
// for(int j=0;j<noi;j++)
// {
// if(fun.csName[j]=="CURRENT_HD.DEP")continue;
// delete indata[j];
// }
// delete []indata;
// delete []outdata;
// Slf_FILE_MESSAGE msag;
// mrw->GetFileMessage(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(QList<CObjWellLog*>objs,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+5GR2=45TEMP=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+5GR2=45TEMP=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);
// }
// }
2026-01-29 16:57:06 +08:00
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 ;
}
2025-10-30 09:50:15 +08:00
2026-01-29 16:57:06 +08:00
//常规曲线
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<ShowCurve*>("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<ShowWave*>("waveView");
if(NULL == pDlgwage)
{
pDlgwage=new ShowWave(parent);
pDlgwage->setObjectName("waveView");
}
pDlgwage->FileName=FileName;
pDlgwage->WaveName=CurveName;
pDlgwage->init();
pDlgwage->show();
}
2025-10-30 09:50:15 +08:00
2026-01-29 16:57:06 +08:00
}
2025-10-30 09:50:15 +08:00
// void CDataManagger::CallDisplayCurveVerChange(int Type, const QString& FileName,
// const QString& CurveName, QWidget* parent, int value, float tipValue)
// {
// //常规曲线
// if (Type == 0)
// {
// ShowCurve *pDlg=parent->findChild<ShowCurve*>("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<ShowCurve*>("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;i<row;i++)
{
for(int j=0;j<col;j++)
pDlg->m_pUI->tableWidget->setItem(i,j,new QTableWidgetItem(listMessage.at(i*col+j)));
}
pDlg->exec();
}*/