230 lines
7.0 KiB
C++
230 lines
7.0 KiB
C++
#ifndef __MemRdWt_H__
|
||
#define __MemRdWt_H__
|
||
#include "LogIO.h"
|
||
#include "CStringType.h"
|
||
|
||
#define SetVariable(s) float s;
|
||
|
||
#define FB(arg) #arg
|
||
#define InitName(arg) FB(arg)
|
||
|
||
#define GetVALUE(S,a,b) memmove(&S,a.yy,b*sizeof(float));
|
||
|
||
#define SetVALUE(a,S,b) memmove(a.yy,&S,b*sizeof(float));
|
||
#define GetPosValue(S,a,pos,b) memmove(&S,&a.yy[pos-1],b*sizeof(float));
|
||
#define SetPosValue(a,S,pos,b) memmove(&a.yy[pos-1],&S,b*sizeof(float));
|
||
|
||
#define DefVariable(ParName,InName,OutName) SetVariable(ParName);\
|
||
SetVariable(InName);\
|
||
SetVariable(OutName);
|
||
#define GetINWaveValue(WF,POS) memmove(WF,&INP.yy[INP.InpPos[POS-1]],INP.InpLen[POS-1]*sizeof(float));
|
||
#define GetINValue(GR,POS,NO) memmove(&GR,&INP.yy[INP.InpPos[POS-1]],NO*sizeof(float));
|
||
#define SetOUTWaveValue(WF,POS) memmove(&OUTP.yy[OUTP.OutPos[POS-1]],WF,OUTP.OutLen[POS-1]*sizeof(float));
|
||
#define SetOUTValue(GR,POS,NO) memmove(&OUTP.yy[OUTP.OutPos[POS-1]],&GR,NO*sizeof(float));
|
||
#define GetHDValue(GR,DEP,NO) memmove(&GR,&HD.DEP,NO*sizeof(float));
|
||
|
||
#define MAX_STR_LEN 64
|
||
struct OUTC_STRU
|
||
{
|
||
int Noo;
|
||
char Name[8192];
|
||
char Script[8192];
|
||
char Unit[8192];
|
||
};
|
||
struct ErrorInf{
|
||
int ErrorNo;
|
||
char ErrorStr[128];
|
||
};
|
||
struct INC_STRU
|
||
{
|
||
int Noi;
|
||
char Name[8192];
|
||
char Script[8192];
|
||
char Unit[8192];
|
||
};
|
||
struct INP_STRU
|
||
{
|
||
int InpPos[1024],InpLen[1024];
|
||
float yy[20560];
|
||
};
|
||
struct OUTP_STRU
|
||
{
|
||
int OutPos[1024],OutLen[1024];
|
||
float yy[20560];
|
||
};
|
||
struct CONC_STRU
|
||
{
|
||
int Noc;
|
||
char Name[8192];
|
||
char Script[8192];//变量描述
|
||
char Unit[8192];//变量单位
|
||
char Options[8192];//变量选项
|
||
char ValType[8192];//变量分类:如孔隙度计算,泥质计算
|
||
};
|
||
struct CON_STRU
|
||
{
|
||
float yy[1024];
|
||
char stryy[8192];
|
||
};
|
||
struct HD_STRU
|
||
{
|
||
float Dep,//输入运行深度
|
||
Depo,//输出运行深度
|
||
Sdep,//层段起始深度
|
||
Edep,//层段结束深度
|
||
Rlev,//输入曲线最小深度间隔,也是输出曲线的深度间隔
|
||
StartDep,//井起始深度,也是输入曲线的最小深度
|
||
EndDep;//井结束深度,也是输入曲线的最大深度
|
||
char Param[256],//解释参数卡
|
||
Plot[256];//绘图模板
|
||
float Stdep,//参数控制的最浅深度
|
||
Endep;////参数控制的最深深度
|
||
char buffer[500];
|
||
};
|
||
struct LogType
|
||
{
|
||
int Type[1024];
|
||
union DATATYPE {
|
||
Slf_CURVE mCurve;
|
||
Slf_FMT mFmt;
|
||
Slf_TDT mTdt;
|
||
Slf_WAVE mWave;
|
||
} addr[1024];
|
||
};
|
||
QString SLFIO_EXPORT getStrValue(char *stryy,int pos);//stryy 输入字符串缓冲器,pos 参数号,1开始
|
||
|
||
class SLFIO_EXPORT CMemRdWt : public CLogIO
|
||
{
|
||
private:
|
||
struct INC_STRU *INC;
|
||
struct OUTC_STRU *OUTC;
|
||
struct INP_STRU *INP;
|
||
struct OUTP_STRU *OUTP;
|
||
struct CONC_STRU *CONC;
|
||
struct CON_STRU *CON;
|
||
struct HD_STRU *HD;
|
||
struct LogType *OutCurveType;
|
||
struct ErrorInf *SlfError;
|
||
const char *ConstFileName;
|
||
float StartDep,EndDep,Rlev;
|
||
float RunSdep,RunEdep;
|
||
Slf_CHANNEL m_Channel;
|
||
Slf_WAVE m_Wave;
|
||
Slf_CURVE m_Curve;
|
||
public:
|
||
char **InData ;
|
||
char **OutData;
|
||
int *InCurveNo,*OutCurveNo;
|
||
char *ConstBuffer;
|
||
float *InSdep,*InEdep,*OutSdep,*OutEdep;
|
||
int Inflag;
|
||
int SaveFlag;
|
||
|
||
public:
|
||
CMemRdWt();
|
||
CMemRdWt(const char *wellname,bool mconst=FALSE,int FileType=0);
|
||
~CMemRdWt();
|
||
void Initialize(bool mconst=FALSE);
|
||
void BackData();
|
||
void RestoreData();
|
||
void DeleteInCurve(int i);
|
||
void DeleteOutCurve(int i);
|
||
void CloseData();
|
||
void ChangeName(struct INC_STRU *Inc,
|
||
struct OUTC_STRU *Outc,
|
||
struct CONC_STRU *Conc,
|
||
struct CON_STRU *Con
|
||
);
|
||
void Save();
|
||
bool Open(const char *wellname,unsigned int nOpenFlags=modeReadWrite,int BlockLen=1024,int MaxObjectNumber=1024, int MachineType=MACHINE_TYPE,int FileType=0);
|
||
void GetVal(int no,int Len,void *Data,float *yy);
|
||
void SetVal(int no,int Len,void *Data,float *yy);
|
||
bool AddInCurve(char *mCurve);
|
||
bool AddInCurve(int i,char *mCurve);
|
||
void AddOutCurve(Slf_CURVE *mcurve);
|
||
void AddOutCurve(int i,Slf_CURVE *mcurve);
|
||
int GetSamplePos(float depth,int no,int inout=0);
|
||
void CopyCurve(CMemRdWt & SourceData,float SourceStartDepth,float SourceEndDepth,float DecDepth,int SourceCurveNo,int DecCurveNo);
|
||
void CopyCurve(char *SourceData,int i,int j,float DecDepth,int DecCurveNo);
|
||
void CopyCurve( int SourceCurve,float SourceStartDepth,float SourceEndDepth,float DecDepth,int SourceCurveNo,int DecCurveNo);
|
||
void CopyCurve(CMemRdWt &SourceData,float SourceStartDepth,float SourceEndDepth,float DecDepth,char* SourceCurve,char* DecCurve);
|
||
void SetDepthDelta(float sdep,float edep,float rlev=0.125);
|
||
char *OpenCord(const char* mConstFileName);
|
||
void SaveCord(const char* mConstFileName,char *pBuf=NULL);
|
||
char * GetParam();
|
||
void In (float Depth=-99999,int No=-1);
|
||
void Out (float Depth=-99999,int No=-1);
|
||
void Inn (float Depth=-99999,int No=-1);
|
||
void Outt (float Depth=-99999,int No=-1);
|
||
void InOut(float Depth=-99999,int No=-1);
|
||
void SetStruct(
|
||
struct INC_STRU *Inc,
|
||
struct OUTC_STRU *Outc,
|
||
struct INP_STRU *Inp,
|
||
struct OUTP_STRU *Outp,
|
||
struct CONC_STRU *Conc,
|
||
struct CON_STRU *Con,
|
||
struct HD_STRU *Hd,
|
||
struct LogType *OutType=NULL,
|
||
struct ErrorInf *errorinf=NULL
|
||
);
|
||
void OutSave(int i);
|
||
void InSave(int i);
|
||
|
||
//private:
|
||
int Const();
|
||
public:
|
||
void Close();
|
||
void LoadOldStruct();
|
||
CString GetWellName();
|
||
void GetWellName(char *);
|
||
bool EShiftDepth(char *Name,char *pParam=NULL);
|
||
bool EShiftCurveDepth(char *Name,int Count=0,float *dep1=NULL,float *dep2=NULL);
|
||
bool EShiftFMTDepth(char *Name,int Count=0,float *dep1=NULL,float *dep2=NULL);
|
||
bool EShiftTDTDepth(char *Name,int Count=0,float *dep1=NULL,float *dep2=NULL);
|
||
bool EShiftTableDepth(char *Name,int Count=0,float *dep1=NULL,float *dep2=NULL);
|
||
void epshft(int iPos,int Len,int CodeLen,float rlevs,float d_sdep,float d_edep,float dold1,float dold2,float dnew1,float dnew2,int flg,char *d_flLogData,char *d_flSavLogData);
|
||
float epshft(float dest,float rlevs,float d_sdep,float d_edep,float dold1,float dold2,float dnew1,float dnew2);
|
||
void round(float *d,float d1,float d2,float rlevs,float stdeps,int ids);
|
||
void inter(int iPos,int nLen,int CodeLen,float d_sdep,float d_edep,float a,float d,float oldd,float rlevs,char *d_flLogData,char *d_flSavLogData,float *yy);
|
||
void DepthSort(float *xxx,int number);
|
||
|
||
int GetInCurveName(int CurveNo,char *InName);
|
||
int GetOutCurveName(int CurveNo,char *OutName);
|
||
|
||
private:
|
||
struct INC_STRU *OldINC;
|
||
struct OUTC_STRU *OldOUTC;
|
||
struct INP_STRU *OldINP;
|
||
struct OUTP_STRU *OldOUTP;
|
||
struct CONC_STRU *OldCONC;
|
||
struct CON_STRU *OldCON;
|
||
struct HD_STRU *OldHD;
|
||
struct LogType *OldOutCurveType;
|
||
struct ErrorInf *OldSlfError;
|
||
public:
|
||
bool EShiftWFDepth(char *Name,int Count,float *dep1,float *dep2);
|
||
bool EShiftDepth(char *Name,int m_nDepPairsNum,float *FirstDep,float *SecondDep);
|
||
void CorrectAllObjectsDepth(float deltadepth);
|
||
void CorrectObjectDepth(int index,float deltadepth);
|
||
ErrorInf &GetSlfError()
|
||
{
|
||
if(SlfError) return *SlfError;
|
||
else {
|
||
ErrorInf te;
|
||
te.ErrorNo=0;
|
||
te.ErrorStr[0]=0;
|
||
return te;
|
||
}
|
||
}
|
||
bool isfirstrun;
|
||
float ZoneSdep,ZoneEdep;
|
||
bool EshiftStreamDepth(char *Name,int Count,float *dep1,float *dep2);
|
||
int GetInCurveCount();
|
||
int GetOutCurveCount();
|
||
void Innn(float Depth=-99999,int No=-1);
|
||
bool CurveExist(int no);
|
||
bool CurveExist(char*name);
|
||
};
|
||
#endif
|