You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
92 lines
2.7 KiB
C++
92 lines
2.7 KiB
C++
//////////////////////////////////////////////////////////////////////////////
|
|
//文件: 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<int>& 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<int>& range); //使用线程,但等待线程执行完毕
|
|
bool ReadData(CSeisIndexLine2D* pIndex, TInterval<float>& range); //使用线程,但等待线程执行完毕
|
|
|
|
CSeisIndexLine2D* GetIndex() { return m_pIndex2D; }
|
|
|
|
protected:
|
|
//仅是指针指向,并不释放
|
|
CSeisIndexLine2D* m_pIndex2D; //索引指向
|
|
CSeisLineData* m_pData; //存取的数据指向
|
|
bool m_bReMemory; //是否重新分配数据存取内存
|
|
};
|
|
|
|
} //namespace NSeis
|