logplus/ConvertorManager/src/InterIConvertor.cpp
2025-10-29 17:23:30 +08:00

320 lines
12 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#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;