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