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