logplus/ConvertorManager/src/InterIConvertor.cpp

320 lines
12 KiB
C++
Raw Normal View History

2025-10-29 17:23:30 +08:00
#include <QSettings>
#include "InterIConvertor.h"
#include "MemRdWt.h"
#include "CStringType.h"
//#include "ObjWelllogWavefile.h"
#include "BaseFun.h"
#include "geometryutils.h"
#include <QTextCodec>
BEGIN_OSGGRAPHICS_NAMESPACE;
InterIConvertor::InterIConvertor():IConvertor(),m_fileMessage(NULL),
m_DepthLength(0),
m_DimCurvefilePath("")
{
memset(&WellDynamicInfo,0,sizeof(WELL_DYNAMIC_INFO));
memset(&FILE_MESSAGE,0,sizeof(Slf_FILE_MESSAGE));
memset(&WellStaticInfo,0,sizeof(WELL_STATIC_INFO));
m_vCurverName.resize(MaxCurve);
for (int i=0;i<MaxCurve;i++)
{
m_vCurverName[i]=new char[curve_name_len];
memset(m_vCurverName[i],0,curve_name_len);
}
////ww
m_vCurverUnit.resize(MaxCurve);
for (int i=0;i<MaxCurve;i++)
{
m_vCurverUnit[i]=new char[curve_unit_len];
memset(m_vCurverUnit[i],0,curve_unit_len);
}
////
m_fileMessage=new char[MaxCurve*1000];
memset(m_fileMessage,0,MaxCurve*1000);
memset(&WellDynamicInfo,0,sizeof(WellDynamicInfo));
memset(&FILE_MESSAGE,0,sizeof(FILE_MESSAGE));
memset(&WellDynamicInfo,0,sizeof(WELL_DYNAMIC_INFO));
m_pDepthProgress=NULL;
}
InterIConvertor::~InterIConvertor()
{
vector<char*>::iterator itor=m_vCurverName.begin();
for (;itor!=m_vCurverName.end();)
{
itor=m_vCurverName.erase(itor);
}
m_vCurverName.clear();
///////ww
itor=m_vCurverUnit.begin();
for (;itor!=m_vCurverUnit.end();)
{
itor=m_vCurverUnit.erase(itor);
}
m_vCurverUnit.clear();
///////
if (m_fileMessage)
{
delete[]m_fileMessage;
m_fileMessage=NULL;
}
}
//////////////////
///
//用户配置文件后缀 dll文件同名的.cfg文件
// example :aa.dll =>aa.cfg
//
QVector<QString> InterIConvertor::GetSupportFileExtensions()
{
QVector<QString>exts;
if(!m_thisModuleName.isEmpty())
{
char *name=new char[1000];
// D:\LogPlus\bin\
GetBinDir(name);
QString path=m_thisModuleName;
path=name;
path+="/convertor/";
path+=m_thisModuleName;
path+=".cfg";
FILE *fp=fopen(path.toStdString().c_str(),"rt");
if(fp)
{
while(!feof(fp))
{
memset(name,0,1000);
fread(name,1000,1,fp);
QString line=name;
line.replace(","," ");
line.replace("\t"," ");
line.replace("\r"," ");
line.replace("\n"," ");
QStringList strs=line.split(" ");
strs.removeAll("");
foreach(QString str,strs)exts.push_back(str);
}
fclose(fp);
}
delete name;
}
return exts;
}
QString InterIConvertor::GetFileContent( const QString &filename )
{
if(strlen(m_fileMessage)) {
return m_fileMessage;
}
QFile file(filename);
if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
return "";
QString lineString("");
//读取文件前50行
for (int row=0;row<50;row++)
{
lineString += "\n"+file.readLine();
}
return lineString;
}
bool InterIConvertor::Init()
{
m_TableName="";
IConvertor::Init();
memset(&FILE_MESSAGE,0,sizeof(FILE_MESSAGE));
memset(&WellDynamicInfo,0,sizeof(WELL_DYNAMIC_INFO));
//whp add 2019.8.1 for 初始化井静态信息
memset(&WellStaticInfo,0,sizeof(WELL_STATIC_INFO));
m_DimCurvesList.clear();
if(m_fileMessage) m_fileMessage[0]=0;
////ww
for (int i=0;i<MaxCurve;i++)
{
memset(m_vCurverName[i],0,curve_name_len);
}
for (int i=0;i<MaxCurve;i++)
{
memset(m_vCurverUnit[i],0,curve_unit_len);
}
memset(&m_CurveData,0,sizeof(m_CurveData));
return true;
}
bool InterIConvertor::IsSupport( const QString &filename )
{
IConvertor::IsSupport(filename);
string tempStr=filename.toStdString();
char *filePath=const_cast<char*>(tempStr.c_str());
int Value= ScanLogFile(filePath,m_fileMessage,&m_vCurverName[0],&m_vCurverUnit[0]);
m_CurveData.Curve_Num=Value;
if(Value<=0) return 0;//ww
return Value;
}
// QList<CObjWellLog*> pai::graphics::InterIConvertor::GetWellLogList( const QString &filename )
// {
// m_vWellLogCurve.clear();
// if(m_CurveData.Curve_Num<=0) return m_vWellLogCurve;
// // GetWellLogMetas( m_vWellLogCurve, filename );
// InitWelllogRoundInfo(filename);
// if(WellStaticInfo.XCoor)FILE_MESSAGE.Xcoor=WellStaticInfo.XCoor;
// if(WellStaticInfo.YCoor)FILE_MESSAGE.Ycoor=WellStaticInfo.YCoor;
// memmove(FILE_MESSAGE.Item,WellStaticInfo.MethodCWell,sizeof(FILE_MESSAGE.Item));
// if(*WellStaticInfo.WellName&&*WellStaticInfo.WellName!=' ')memmove(FILE_MESSAGE.WellName,WellStaticInfo.WellName,sizeof(FILE_MESSAGE.WellName));
// if(*WellStaticInfo.AreaName&&*WellStaticInfo.AreaName!=' ')memmove(FILE_MESSAGE.AreaName,WellStaticInfo.AreaName,sizeof(FILE_MESSAGE.AreaName));
// if(*WellStaticInfo.OilCompanyName&&*WellStaticInfo.OilCompanyName!=' ')memmove(FILE_MESSAGE.OilCompanyName,WellStaticInfo.OilCompanyName,sizeof(FILE_MESSAGE.OilCompanyName));
// if(WellStaticInfo.As1)FILE_MESSAGE.Altitude=WellStaticInfo.As1;
// if(WellStaticInfo.Bs1)FILE_MESSAGE.Kelly=WellStaticInfo.Bs1;
// if(strlen(WellStaticInfo.EndDrillDate))FILE_MESSAGE.EndDrillDate=StringToTime(WellStaticInfo.EndDrillDate);
// if(strlen(WellStaticInfo.StartDrillDate))FILE_MESSAGE.StartDrillDate=StringToTime(WellStaticInfo.StartDrillDate);
// if(WellStaticInfo.Sc1Edep)FILE_MESSAGE.StartDepth=WellStaticInfo.Sc1Edep;
// if(WellStaticInfo.Sc2sdep)FILE_MESSAGE.EndDepth=WellStaticInfo.Sc2sdep;
// if(*(float*)&WellStaticInfo.Remark[0])memmove(&FILE_MESSAGE.X0,&WellStaticInfo.Remark[0],4);
// if(*(float*)&WellStaticInfo.Remark[4])memmove(&FILE_MESSAGE.Y0,&WellStaticInfo.Remark[4],4);
// if(*(float*)&WellStaticInfo.Remark[8])memmove(&FILE_MESSAGE.TVD,&WellStaticInfo.Remark[8],4);//whp 2019.7.30 该语句会把解编模块扫描得到的TVD数据清空
// //已在ASCII模块中做了相应的处理不知道别的模块中还有没有
// if(strlen(WellDynamicInfo.LogCompanyName))memmove(FILE_MESSAGE.LogCompanyName,WellDynamicInfo.LogCompanyName,sizeof(FILE_MESSAGE.LogCompanyName));
// if(strlen(WellDynamicInfo.Operator))memmove(FILE_MESSAGE.Operator,WellDynamicInfo.Operator,sizeof(FILE_MESSAGE.Operator));
// if(strlen(WellDynamicInfo.Item))memmove(FILE_MESSAGE.LoggingTeam,WellDynamicInfo.Item,sizeof(FILE_MESSAGE.LoggingTeam));
// if(strlen(WellDynamicInfo.Date))FILE_MESSAGE.LoggingDate=StringToTime(WellDynamicInfo.Date);
// //add end
// InitWellInfo(filename);
// return m_vWellLogCurve;
// }
QString InterIConvertor::GetfilePath(const char *FileName)
{
QFileInfo fileInfo(QString::fromLocal8Bit(FileName));
QDir dir(::GetImagePath());
dir.cdUp();
QString tempPath=dir.absolutePath()+"/"+fileInfo.completeBaseName()+".slf";
return tempPath;
}
// void InterIConvertor::GetWellLogMetas( QList<CObjWellLog*> &vWellLog, QString strWellLogPath)
// {
// //||m_CurveData.Curve_Step==0.0
// if(m_CurveData.Curve_Num<=0) return;//ww
// for( long j = 0 ; j<m_CurveData.Curve_Num;++j )
// {
// CObjWellLog *pWelllog = new CObjWellLog();
// QString curveName=QString::fromLocal8Bit(m_vCurverName[j] );
// pWelllog->SetName(curveName);
// pWelllog->SetAliasName(curveName);
// QString curveUnit=QString::fromLocal8Bit(m_vCurverUnit[j] );//ww
// pWelllog->GetLogCurve().SetUnit(curveUnit.toStdString());
// vWellLog.push_back(pWelllog);
// }
// }
// void InterIConvertor::GetWellLogObjects( QList<CObjWellLog*> &vWellLog, QString strWellLogPath)
// {
// return;
// }
void InterIConvertor::InitWelllogRoundInfo(QString FileName)
{
//char LogRange[24],IntRange[24];char Section[16] SetAudit;
if(WellDynamicInfo.MudViscosity)m_WellLogRoundInfo->SetMudViscosity(WellDynamicInfo.MudViscosity);
else if(FILE_MESSAGE.Mud_Viscosity[0]) m_WellLogRoundInfo->SetMudViscosity(FILE_MESSAGE.Mud_Viscosity[0]);
QString LogCompanyName=WellDynamicInfo.LogCompanyName;
LogCompanyName=LogCompanyName.trimmed();
if(LogCompanyName.length()) m_WellLogRoundInfo->SetCompanyName(WellDynamicInfo.LogCompanyName);
else m_WellLogRoundInfo->SetCompanyName(FILE_MESSAGE.LogCompanyName);
if(strlen(WellDynamicInfo.Date)) m_WellLogRoundInfo->SetDate(WellDynamicInfo.Date);
else {
QString str=ctime((time_t *)&FILE_MESSAGE.LoggingDate);
m_WellLogRoundInfo->SetDate(str.toStdString());
}
if(WellDynamicInfo.TempBot)m_WellLogRoundInfo->SetTempBot(WellDynamicInfo.TempBot);
else m_WellLogRoundInfo->SetTempBot(FILE_MESSAGE.Well_Bottom_Temperature);
if(WellDynamicInfo.WaterLoss) m_WellLogRoundInfo->SetWaterLoss(WellDynamicInfo.WaterLoss);
else m_WellLogRoundInfo->SetWaterLoss(FILE_MESSAGE.WaterLoss);
if(WellDynamicInfo.MudDensity) m_WellLogRoundInfo->SetDensity(WellDynamicInfo.MudDensity);
else m_WellLogRoundInfo->SetDensity(FILE_MESSAGE.Mud_Density[0]);
if(WellDynamicInfo.MudResi)m_WellLogRoundInfo->SetResi(WellDynamicInfo.MudResi);
else m_WellLogRoundInfo->SetResi(FILE_MESSAGE.Mud_Resistivity[0]);
if(WellDynamicInfo.MudTemp)m_WellLogRoundInfo->SetTemp(WellDynamicInfo.MudTemp);
else m_WellLogRoundInfo->SetTemp(FILE_MESSAGE.Mud_Temp);
if(WellDynamicInfo.MudType) m_WellLogRoundInfo->SetMudType(WellDynamicInfo.MudType);
else m_WellLogRoundInfo->SetMudType(FILE_MESSAGE.Mud_Property);
m_WellLogRoundInfo->SetIntProg(WellDynamicInfo.IntProg);
m_WellLogRoundInfo->SetInteDress(WellDynamicInfo.IntDress);
m_WellLogRoundInfo->SetRemark(WellDynamicInfo.Remark);
if(strlen(WellDynamicInfo.Operator))m_WellLogRoundInfo->SetOperator(WellDynamicInfo.Operator);
else m_WellLogRoundInfo->SetOperator(FILE_MESSAGE.Operator);
if(strlen(WellDynamicInfo.Serial)) m_WellLogRoundInfo->SetSerial(WellDynamicInfo.Serial);
else m_WellLogRoundInfo->SetSerial(FILE_MESSAGE.YqType);
if(strlen(WellDynamicInfo.Item))m_WellLogRoundInfo->SetItem(WellDynamicInfo.Item);
else m_WellLogRoundInfo->SetItem(FILE_MESSAGE.Item);
m_WellLogRoundInfo->SetINTLog(WellDynamicInfo.LogRange);
int len=strlen(m_fileMessage);
char *p=m_fileMessage;
p+=len+1;
float sdep,edep;
len=strlen(p);
QString tempWellName;
if(len>1&&len<20)
{
sscanf(p,"%f",&sdep);
p+=strlen(p)+1;
sscanf(p,"%f",&edep);
p+=strlen(p)+1;
tempWellName=p;
}
else
{//解编模块中没有压回深度信息
sdep=0;
edep=0;
tempWellName="";
}
m_WellLogRoundInfo->SetTopDepth(sdep);
m_WellLogRoundInfo->SetBottomDepth(edep);
QFileInfo temDir(FileName);
if(tempWellName=="") tempWellName=temDir.completeBaseName();
tempWellName.replace(" ","");//whp add 2020.3.3 删除井名中的空格
m_WellLogRoundInfo->SetName(tempWellName.toStdString());
}
void InterIConvertor::InitWellInfo(const QString &filename)
{
if(*FILE_MESSAGE.WellName)m_WellLogRoundInfo->SetWellName(FILE_MESSAGE.WellName);//whp add 2020.7.15
if(*FILE_MESSAGE.AreaName)m_WellLogRoundInfo->SetAreaName(FILE_MESSAGE.AreaName);
if(*FILE_MESSAGE.OilCompanyName)m_WellLogRoundInfo->SetOilCompanyName(FILE_MESSAGE.OilCompanyName);
if(*FILE_MESSAGE.LogCompanyName)m_WellLogRoundInfo->SetCompanyName(FILE_MESSAGE.LogCompanyName);
if(FILE_MESSAGE.Xcoor)m_WellLogRoundInfo->SetXCode(FILE_MESSAGE.Xcoor);
if(FILE_MESSAGE.Ycoor)m_WellLogRoundInfo->SetYCode(FILE_MESSAGE.Ycoor);
if(FILE_MESSAGE.Altitude)m_WellLogRoundInfo->SetAsl(FILE_MESSAGE.Altitude);
if(FILE_MESSAGE.Kelly)m_WellLogRoundInfo->SetBsl(FILE_MESSAGE.Kelly);
if(FILE_MESSAGE.X0)m_WellLogRoundInfo->SetXOffset(FILE_MESSAGE.X0);
if(FILE_MESSAGE.Y0)m_WellLogRoundInfo->SetYOffset(FILE_MESSAGE.Y0);
if(FILE_MESSAGE.TVD)m_WellLogRoundInfo->SetTVD0(FILE_MESSAGE.TVD);
QString temp = ::GetConfPath()+"data.ini";
QSettings settings(temp,QSettings::IniFormat,0);
settings.setIniCodec(QTextCodec::codecForName("UTF-8"));
QStringList serials=settings.value("wellType",0).toStringList();
int i=serials.indexOf(FILE_MESSAGE.WellType);
if(i<0) i=0;
m_WellLogRoundInfo->SetWellType(i);
//
if(m_WellLogRoundInfo->GetName()=="")//whp add 2019.8.1
{//???加此句是否合适如果有文件名就不再赋值如JPH-307_core.txt中# WELL FILE: FILEJPH-307
string wellName=string(FILE_MESSAGE.WellName);
if (wellName=="")
{
QFileInfo temDir(filename);
QString tempWellName=temDir.completeBaseName();
tempWellName.replace(" ","");//whp add 2020.3.3 删除井名中的空格
m_WellLogRoundInfo->SetName(tempWellName.toStdString());
}
else
{
m_WellLogRoundInfo->SetName(FILE_MESSAGE.WellName);
}
}
}
END_OSGGRAPHICS_NAMESPACE;