////////////////////////////////////////////////////////////////////////////// //文件: SegY文件操作类 //主要功能: // //程序编写: 2011-4-1 // // ///////////////////////////////////////////////////////////////////////////// #pragma once #include "ProcessThread.h" #include "SeisLineData.h" #include "SeisIndex2D.h" #include "SeisTraceReader.h" #include "ProgressProcess.h" #include "ProgressThreadBase.h" namespace NSeis { //一条剖面据的读取操作,索引数据可以来源于三维体也可来源于二维剖面 class AFX_EXT_CLASS CSeisReaderBase : public CProgressProcess { public: CSeisReaderBase(void); ~CSeisReaderBase(void); void AttachFile(CFileSegy* pFile); //不绑定时将自动根据打开指定的SegY文件 CFileSegy* GetFile() { return m_pFile; } //** @brief 总的采样点个数,如果剖面全部显示时,与当前显示个数相同 unsigned short GetTotalSampleNumber() { return GetSampleInfo().GetTotalSampleNumber(); } //获得一道的采样点个数及采样间隔, 当前显示的采样点个数 int GetCustomSampleNumber() { return GetSampleInfo().GetCustomSampleNumber(); } //获得采样间隔 float GetSampleInterval() { return GetSampleInfo().GetSampleInterval(); } //获得一个采样点的字节长度 int GetOneSampleBytes() { return GetSampleInfo().GetOneSampleBytes(); } float GetStartTime() { return GetSampleInfo().GetStartTime(); } float GetStopTime() { return GetSampleInfo().GetStopTime(); } TInterval& GetTimeRange() { return GetSampleInfo().GetTimeRange(); } //是否是使用整道数据, 根据m_dataRange参数判断 bool IsFullyTraceData() { return GetSampleInfo().IsFullyTraceData(); } virtual CSeisSampleInfo& GetSampleInfo() = 0; CSeisTraceReader& GetTraceReader() { return m_traceReader; } protected: CSeisTraceReader m_traceReader; //在内部进行文件读操作,总是读取一整道的数据 float _undef_value; //无效值,读取切片时使用 //仅是指针指向,并不释放 CFileSegy* m_pFile; }; class AFX_EXT_CLASS CSeisReader2D : public CSeisReaderBase { public: CSeisReader2D(void); ~CSeisReader2D(void); //必须提前绑定相应指针 void Attach(CSeisLineData* pData, bool bReMemory=false); //绑定数据存取指针 void AttachIndex(CSeisIndexLine2D* pIndex); //绑定数据索引 virtual CSeisSampleInfo& GetSampleInfo() { return m_pIndex2D->m_sampleInfo; } bool ReadData(); //不使用线程方式,读取测线地震剖面数据 bool ReadData(CSeisIndexLine2D* pIndex, TInterval& range); //使用线程,但等待线程执行完毕 bool ReadData(CSeisIndexLine2D* pIndex, TInterval& range); //使用线程,但等待线程执行完毕 CSeisIndexLine2D* GetIndex() { return m_pIndex2D; } protected: //仅是指针指向,并不释放 CSeisIndexLine2D* m_pIndex2D; //索引指向 CSeisLineData* m_pData; //存取的数据指向 bool m_bReMemory; //是否重新分配数据存取内存 }; } //namespace NSeis