|
|
//////////////////////////////////////////////////////////////////////////////
|
|
|
//文件: SegY文件操作类
|
|
|
//主要功能:
|
|
|
// 根据建立的索引对象,从SegY中读取生成剖面、切片
|
|
|
//程序编写: 2011-4-1
|
|
|
//
|
|
|
//
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
#pragma once
|
|
|
#include "BuilderBase.h"
|
|
|
#include "SeisIndex2D.h"
|
|
|
#include "SeisTraceReader.h"
|
|
|
#include "SeisLineData.h"
|
|
|
#include "SeisReader2D.h"
|
|
|
#include "RowColRange.h"
|
|
|
#include "SeisIndexRandomLine.h"
|
|
|
#include "Mesh2D.h"
|
|
|
#include "MeshRand2D.h"
|
|
|
#include "SeisIndex3D.h"
|
|
|
|
|
|
namespace NSeis
|
|
|
{
|
|
|
|
|
|
//管理一个三维地震数据文件的读操作
|
|
|
class AFX_EXT_CLASS CSeisReader3D
|
|
|
: public CSeisReaderBase
|
|
|
, public CAttachBase
|
|
|
{
|
|
|
public:
|
|
|
CSeisReader3D(void);
|
|
|
~CSeisReader3D(void);
|
|
|
|
|
|
virtual bool AttachInput(void* pIndex3D, bool bAutoDelete = false); //参数为CSeisIndex3D对象
|
|
|
CSeisIndex3D* GetIndex() { return (CSeisIndex3D*)GetInput(); }
|
|
|
|
|
|
bool OpenSegyFile();
|
|
|
bool IsOpenSegyFile();
|
|
|
|
|
|
bool CreateCube(OUT CDimension3D& cb, CCubeRange& cr, bool bReMemory); //读取并生成三维体
|
|
|
bool CreateInline(OUT CSeisLineData& sd, int line_num, bool bReMemory=true); //读取一条主测线地震剖面
|
|
|
bool CreateCrossline(OUT CSeisLineData& sd, int line_num, bool bReMemory=true); //读取一条联络测线地震剖面
|
|
|
bool CreateLine(OUT CSeisLineData& sd, CSeisIndexLine3D* pIndexLine3D, bool bReMemory=true);//读取一条主测线地震剖面
|
|
|
//读取一条任意线数据
|
|
|
bool CreateRandLine(OUT CSeisLineData& sd, IN CSeisIndexRandomLine* pIndexRandLine, bool bReMemory=true);
|
|
|
|
|
|
//获得等时切片,为线道号坐标
|
|
|
bool CreateSliceUp(OUT CMesh2D& dn, float time, bool bLineValue=false);
|
|
|
//根据解释层位等数据读取不等时切片
|
|
|
//>>输入:曲面中坐标为线道号
|
|
|
//>>输出:为线道号坐标
|
|
|
bool CreateSliceRC(OUT CMesh2D& dn, CDimension2D* pInSuf, bool bLineValue);
|
|
|
bool CreateSliceXY(OUT CMesh2D& dn, CDimension2D* pInSuf, bool bLineValue);
|
|
|
|
|
|
//根据定义的曲线生成不规则切片或剖面,曲线为线道号坐标
|
|
|
// EOrientation方向可以为主测线、联络测线、切片三个方向
|
|
|
bool CreateRandMeshRC(OUT CMeshRand2D& md, CCurve* pCurve, EOrientation curOri);
|
|
|
|
|
|
//根据定义的曲线生成不规则剖面,曲线为XY平面的线道号坐标
|
|
|
bool CreateRandLineRC(OUT CSeisLineData& sd, CCurve* pCurve);
|
|
|
|
|
|
//将三维索引转换为二维索引,转换时考虑了线道号指定的范围
|
|
|
bool toIndexLine2D(IN CSeisIndexLine3D* pIndex3D, OUT CSeisIndexLine2D* pIndex2D);
|
|
|
|
|
|
virtual CSeisSampleInfo& GetSampleInfo() { return GetIndex()->m_sampleInfo; }
|
|
|
};
|
|
|
|
|
|
}//namespace
|
|
|
|