320 lines
12 KiB
C++
320 lines
12 KiB
C++
#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;
|