///////////////////////////////////////////// // MyLpsLib.h #pragma once #include "GeometryUtils.h" #include #include #define WLD_FILE_FLAG "WellMessage" #define I1D_FILE_FLAG "CurveIndex1d" #define D1D_FILE_FLAG "CurveData1d" #define I2D_FILE_FLAG "CurveIndex2d" #define D2D_FILE_FLAG "CurveData2d" #define I3D_FILE_FLAG "CurveIndex3d" #define D3D_FILE_FLAG "CurveData3d" typedef struct { char flag[16]; int length; char reserved[12]; }WldFileHead; typedef struct { char name[32]; // 井名 32 char region[32]; // 地区名 32 int chin_code[16]; // 井名的汉字代码数组 64 char type[16]; // 井的类别标识 16 float x_coor, y_coor; // 井位的大地坐标 8 char oil_company[40]; // 油公司名称 40 float height; // 井的补心高度 4 float bit_program[5][2]; // 钻头程序 40 float case_program[5][2]; // 套管程序 40 char reserved[64]; // 保留未用 64 } WSM; // 340 typedef struct { int log_times; // 测井次数 4 char log_company[40]; // 测井公司名称 40 char log_team[32]; // 测井队名称 32 char log_series[16]; // 测井系列标识 16 char log_project[16]; // 测井项目标识 16 char log_profile[16]; // 地层剖面类别标识 16 char log_date[12]; // 测井日期 12 float stdep,endep; // 测量井段的起始深度和结束深度 8 float bottom_temp; // 井底温度 4 char mud_type[12]; // 泥浆类别标识 12 float mud_viscosity; // 泥浆粘度 4 float mud_density; // 泥浆密度 4 float mud_resistivity; // 泥浆电阻率 4 char reserved[64]; // 保留未用 64 } WDM; //236 typedef struct { char name[8]; /* 曲线名称 */ char alias[8]; /* 曲线别名 */ char flag[16]; /* 曲线附加标志 */ float sdepth; /* 曲线的起始深度 */ float edepth; /* 曲线的结束深度 */ float dstep; /* 曲线采样的深度间距 */ char dunit[8]; /* 深度值量纲 */ char vunit[8]; /* 曲线值量纲 */ char data_type[8]; /* 曲线值存储类型*/ int address; /* 曲线值的存储首地址 */ } CurveIndex1d; typedef struct { char name[8]; /* 曲线名称 */ char alias[8]; /* 曲线别名 */ char flag[16]; /* 曲线附加标志 */ float sdepth; /* 线的起始深度 */ float edepth; /* 曲线的结束深度 */ float dstep; /* 曲线采样的深度间距 */ char dunit[8]; /* 深度值量纲 */ float stime; /* 起始采样时间 */ float etime; /* 结束采样时间 */ float tstep; /* 采样时间间隔 */ char tunit[8]; /* 时间量纲 */ char vunit[8]; /* 曲线值量纲 */ char data_type[8]; /* 曲线值存储类型 */ int address; /* 曲线值的存储首地址 */ } CurveIndex2d; typedef struct { char name[8]; /* 曲线名称 */ char alias[8]; /* 曲线别名 */ char flag[16]; /* 曲线附加标志 */ float sdepth; /* 曲线的起始深度 */ float edepth; /* 曲线的结束深度 */ float dstep; /* 曲线采样的深度间距 */ char dunit[8]; /* 深度值量纲 */ float sangle; /* 起始采样角度 */ float eangle; /* 结束采样角度 */ float astep; /* 采样角度间隔 */ char aunit; /* 角度量纲 */ float stime; /* 起始采样时间 */ float etime; /* 结束采样时间 */ float tstep; /* 采样时间间隔 */ char tunit[8]; /* 时间量纲 */ char vunit[8]; /* 曲线值量纲 */ char data_type[8]; /* 曲线值存储类型 */ int address; /* 曲线值的存储首地址 */ }CurveIndex3d; extern short ReverseShort(short num); extern long ReverseLong(long num); extern int ReverseInt(int num); extern float ReverseFloat(float num); extern double ReverseDouble(double num); class MyLpsLib { public: WSM wsm; WDM wdm; Slf_FILE_MESSAGE FILE_MESSAGE; // WELL_DYNAMIC_INFO WellDynamicInfo; // WELL_STATIC_INFO WellStaticInfo; float minrlev,stdep,endep; CurveIndex1d *c1d; CurveIndex2d *c2d; CurveIndex3d *c3d; int num1d,num2d,ResultId,CoreId; QString PathName,WellName; QFile *dataFile; MyLpsLib() { num1d=0,num2d=0; ResultId=-1,CoreId=-1; }; ~MyLpsLib() { if(num1d)delete []c1d; if(num2d)delete []c2d; }; int OpenDataFile(QString ExtName) { QString filename; filename=PathName+WellName+ExtName; dataFile=new QFile(filename); dataFile->open(QIODevice::WriteOnly); return 1; }; int Rewind() { dataFile->seek(0); int pos=dataFile->pos(); return 0; }; int CloseDataFile() { dataFile->close(); return 0; }; int WriteDataFile(char *buf,int len) { return dataFile->write(buf, len); }; void TurnData(int iType,int nCount,void *pVal) { int i; if ( iType == REPR_INT ) // 1 int { int *p; p = (int *)pVal; for (i=0; i=0 && iType < 11 ) return strDataType[iType]; else return "unknown"; }; // 取数据类型 : 将数据类型编码,转换为数据类型字符串 //---- 注意:------------------------------------------- // 该类型定义所有程序一定要统一,标准制定后既不能改变 //------------------------------------------------------ int GetDataTypeCode(char *strType,int *nCodeLen) { const char *strDataType[]={"null","int","short","long","float","double" ,"string","char","UCHAR","WORD" ,"UINT","ULONG"}; int nDataTypeLen[]={0,4,2,4,4,8,1,1,1,2,4,4}; QString cs1,cs2; cs2 = QString(QLatin1String(strType)).toUpper(); int iCode = 4; *nDataTypeLen = 4; for (int i=0; i<11; i++) { cs1 = QString(QLatin1String(strDataType[i])).toUpper(); if ( cs1==cs2) { iCode = i; *nCodeLen = nDataTypeLen[i]; break; } } return iCode; }; bool WriteWLD() { QString filename; filename=PathName+WellName+".wld"; FILE *fp=fopen(filename.toStdString().c_str(),"w+b"); if(!fp) { QMessageBox::information(NULL,"提示","产生文件"+filename+"产生文件失败"); return 0; } //将动静态信息转换成wsm、wdm //给静态信息赋值 strncpy(wsm.region,FILE_MESSAGE.AreaName,32); strncpy(wsm.oil_company,FILE_MESSAGE.OilCompanyName,32); strncpy(wsm.name,FILE_MESSAGE.WellName,32); 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>=serials.size()) i=serials.size()-1; if(i<0) i=0; if(i