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.

100 lines
2.7 KiB
C++

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

//////////////////////////////////////////////////////////////////////////////
//文件: 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;