|
|
//////////////////////////////////////////////////////////////////////////////
|
|
|
//文件: SegY文件操作类
|
|
|
//主要功能:
|
|
|
//
|
|
|
//程序编写: 2011-4-1
|
|
|
//
|
|
|
//
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
#pragma once
|
|
|
#include "BuilderBase.h"
|
|
|
#include "SeisIndex2D.h"
|
|
|
#include "SeisIndex3D.h"
|
|
|
#include "SeisFileHeader.h"
|
|
|
#include "ProgressThreadBase.h"
|
|
|
|
|
|
namespace NSeis
|
|
|
{
|
|
|
///////////////////////////////////////////////////////////////////////////////////////////
|
|
|
//通过扫描整个SegY文件,获得坐标与线道号的范围,并建立对应关系,
|
|
|
//为后面坐标与线道号相互转换做好准备
|
|
|
//一个工区可以有多个SegY文件,包括二维三维
|
|
|
///////////////////////////////////////////////////////////////////////////////////////////
|
|
|
class AFX_EXT_CLASS CSeisScanner : public CProgressThreadBase
|
|
|
{
|
|
|
public:
|
|
|
CSeisScanner(void);
|
|
|
~CSeisScanner(void);
|
|
|
|
|
|
public:
|
|
|
CSeisFileHeader fileHeader;
|
|
|
CSeisTraceHeader traceHeader;
|
|
|
|
|
|
//初始化二三维地震剖面的头信息
|
|
|
bool InitFileHeader(CFileSegy& fr, CSeisFileHeader& fileHeader);
|
|
|
|
|
|
protected:
|
|
|
CString m_strFileName;
|
|
|
|
|
|
protected:
|
|
|
//需要重写的函数
|
|
|
virtual bool DoThreadWork() = 0; //执行线程处理的工作
|
|
|
};
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////////////////////////
|
|
|
class AFX_EXT_CLASS CSeisScanner2D : public CSeisScanner
|
|
|
{
|
|
|
public:
|
|
|
CSeisScanner2D(void);
|
|
|
~CSeisScanner2D(void);
|
|
|
|
|
|
void AttachIndex(CSeisIndex2D* pIndex);
|
|
|
CSeisIndex2D* GetIndex() { return m_pIndex2D;}
|
|
|
|
|
|
//该误差是为了去除测线中的节点,从而使其更优化
|
|
|
void SetRedundantError(double re) { m_dRedundantError = re; }
|
|
|
|
|
|
//设置当前文件名称,并启动线程
|
|
|
bool ScannerAdd(LPCTSTR lpszFileName); //启动线程,并等待线程执行结束后才返回
|
|
|
|
|
|
//查找路径下的所有SegY文件,按照2D方式增加,每个文件均需要调用ScannerAdd一次
|
|
|
int SearchAdd(LPCTSTR lpszFilePath, LPCTSTR lpszExtName=_T("*.sgy"));
|
|
|
|
|
|
//对二维地震剖面的扫描,完成后并回到二维体定位中
|
|
|
bool ProcessFunc(); //不使用线程方式,直接扫描文件
|
|
|
CSeisIndexLine2D* Scanner(LPCTSTR lpszFileName);//直接扫描文件,返回建立好的索引线
|
|
|
|
|
|
protected:
|
|
|
virtual bool DoThreadWork() ; //执行线程处理的工作
|
|
|
|
|
|
protected:
|
|
|
//仅是指针指向
|
|
|
CSeisIndex2D* m_pIndex2D;
|
|
|
double m_dRedundantError; //坐标冗余因子
|
|
|
};
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
class AFX_EXT_CLASS CSeisScanner3D
|
|
|
: public CSeisScanner
|
|
|
, public CAttachBase
|
|
|
{
|
|
|
public:
|
|
|
CSeisScanner3D(void);
|
|
|
~CSeisScanner3D(void);
|
|
|
|
|
|
CSeisIndex3D* GetIndex() { return (CSeisIndex3D*)GetInput(); }
|
|
|
|
|
|
//对三维体的建立
|
|
|
bool Scanner(LPCTSTR lpszFileName); //启动线程,并等待线程执行结束后才返回
|
|
|
bool ProcessFunc(); //不使用线程方式,直接扫描文件
|
|
|
bool Scanner(CFileSegy& fr); //直接扫描文件,不使用线程
|
|
|
|
|
|
protected:
|
|
|
virtual bool DoThreadWork() ; //执行线程处理的工作
|
|
|
};
|
|
|
|
|
|
} //namespace NSeis
|
|
|
|
|
|
using namespace NSeis;
|