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.

70 lines
2.4 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文件操作类
//主要功能:
// 根据建立的索引对象从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