#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