////////////////////////////////////////////////////////////////////////////// //文件: SegY文件操作类 //主要功能: // //程序编写: 2005-12-07 // // ///////////////////////////////////////////////////////////////////////////// #pragma once class AFX_EXT_CLASS CSectionCube { public: CSectionCube(void); virtual ~CSectionCube(void); public: virtual BOOL Open(void); virtual void Close(void); virtual void Clear(void); virtual BOOL Create(LPCTSTR lpIni3D); int Create(CString posFile, CString segyFile, int n, double dt, int IsPC, int nFormatCode); BOOL IsOpen(void); double A(int k); //根据内部CurrentNo变量获得第K个数据 double A(int i, int j, int k); //根据相对线道号获得该道的第K个数据 double A(int i, int j, double tk); int GetMN(int& m, int& n); //根据实际线道号获得内部线道号 double RA(int m, int n, int k); //根据实际线道号获得该道的第K个数据 double RA(int m, int n, double tk); //获得指定区间内的振幅值,idea=(1:求总和,2:求平均值,3:求振幅绝对值最大值) virtual BOOL GetRangeSwing(int i, int j,double bt0, double et0, double& swing, int idea); //根据开始结束时间获得内部开始结束号,当完全在范围外时返回FALSE BOOL GetIndexInHouse(int &bj, int &ej, double bt0, double et0); //m,n为内部线道号 int ReadSwing(int i, int j, int beginIndex, int endIndex, double* pv); //获得区间内的振幅值 double ReadOneData(CFileSegy* pFile); //根据当前CurrentNo变量读取CDimension3D文件中的一个数据 void SetCurrentNo(int i, int j); //设置CurrentNo的值 BOOL IsInHouse(int i, int j); //是否在内部线道号范围内 //根据指定的线道号写SEGY文件,m为道号,n为线号,nProcessMode(0为拷贝,1为导数,2为深度剖面) //nSampleNum与nSampleIntervel的值小于0时,按照当前SEGY的参数输出 int Write(CString m_output, int m1, int n1, int m2, int n2, int nSampleNum=-1, int nSampleIntervel=-1, int nProcessMode=0, int nFormatCode=1); //读取P.F(x,y)文件中的值 __int64 ValueP(int i, int j); public: int num[2]; double P0[2]; double delt[2]; int IsPC; int n; //采样个数 double dt; //采样间隔 int m_nFormatCode; //格式代码 CString m_vFile; //速度场文件 int m_nIdeaV; //速度场 CString m_sx; //x.f(x,y) CString m_sy; //y.f(x,y) CString m_posFile; CString m_segyFile; CFileSegy::EDataType GetFormatCode(void); protected: BOOL InitWithPosition(void); __int64 Position(void); CFileSegy *fa; CFileSegy *fp; int CurrentNo; }; inline CFileSegy::EDataType CSectionCube::GetFormatCode(void) { return (CFileSegy::EDataType)m_nFormatCode; }