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.

133 lines
4.8 KiB
C

1 month ago
//////////////////////////////////////////////////////////////////////////////
//<2F>ļ<EFBFBD>: SegY<67>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//<2F><>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>:
//
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д: 2011-4-1
//
//
/////////////////////////////////////////////////////////////////////////////
#pragma once
#include "DrawModel\ObjectSet.h"
#include "SeisTraceData.h"
#include "Texture.h"
#include "Mesh2D.h"
namespace NSeis
{
class CSeisLinePar
{
public:
CSeisLinePar();
enum EColorType
{
colTypeSeis252 = 1, //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫ<EFBFBD><C9AB><EFBFBD>𣬱<EFBFBD><F0A3ACB1>ܶ<EFBFBD><DCB6><EFBFBD>ɫΪ252<35><32>
colTypeMesh = 2 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫ<EFBFBD><C9AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>ɫ<EFBFBD><C9AB>
};
double Uniform(double a, double b)
{
//<2F><>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
a /= b;
a *= m_dScaleFactor; //Ϊ<><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫ<EFBFBD><C9AB><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><E3A3AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(-100, 100<30><30><EFBFBD><EFBFBD>, <20>򲻱<EFBFBD>
return a;
}
double m_dScaleFactor; //<2F><><EFBFBD><EFBFBD><EFBFBD>Ŵ<EFBFBD><C5B4><EFBFBD><EFBFBD>ӣ<EFBFBD><D3A3>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ100<30><30><EFBFBD><EFBFBD>MESH<53><48><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ1
EColorType m_colorType;
EUniformType m_uniformType; //<2F><>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
};
//<2F>һ<E6B4A2><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڶ<EFBFBD><DAB6><EFBFBD>ά<EFBFBD><CEAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><>֮ǰ<D6AE><C7B0>CTraceData<74><61><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
class AFX_EXT_CLASS CSeisLineData
{
public:
CSeisLineData(void);
~CSeisLineData(void);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>飬ΪnCol<6F><6C><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD>ÿ<EFBFBD><C3BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ΪnRow<6F><77><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>㣬ÿ<E3A3AC><C3BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֽڳ<D6BD><DAB3>ȸ<EFBFBD><C8B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͻ<EFBFBD><CDBB><EFBFBD>
//<2F>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>н<EFBFBD><D0BD>б<EFBFBD><D0B1>棬ÿ<E6A3AC><C3BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ΪnRow<6F><77>
bool Create(CSize sz, CFileSegy::EDataType eDataType = CFileSegy::typeIbmFloat);
bool Create(int nRow, int nCol, CFileSegy::EDataType eDataType = CFileSegy::typeIbmFloat);
virtual void Clear();
bool CreateTexture(CTexture* pTex, CColorBase& cb, int nBPP);
bool ToMesh2D(CMesh2D& md);
bool CreateFormMesh2D(CMesh2D& md);
protected:
//<2F><><EFBFBD>ص<EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD>Ҫ<EFBFBD>ⲿʹ<E2B2BF><CAB9>deleteɾ<65><C9BE><EFBFBD><EFBFBD>ά<EFBFBD><CEAC>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(x)<29><>(y)<29><>
unsigned char* CreateTexture(CColorBase& cb, int nBPP);
public:
int GetTotalBytes() { return m_traces[0]->GetBytesLength() * GetTraceCount(); } //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD><DDB5><EFBFBD><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD>
int GetSampleCount() { return m_size.cx; } //ÿ<><C3BF><EFBFBD><EFBFBD><EFBFBD>ݵIJ<DDB5><C4B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
int GetTraceCount() { return m_size.cy; } //<2F>ܵ<EFBFBD><DCB5><EFBFBD>
CFileSegy::EDataType GetDataType() { return m_eDataType; } //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
EOrientation GetOrientation() { return m_eOrientation; }
void SetOrientation(EOrientation eo) { m_eOrientation = eo; }
inline CSize GetSize(void) { return m_size; }
inline void SetSize(CSize sz) { m_size = sz; } //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA>add<64><64><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>
inline void add( CSeisTraceData* td ) { m_traces += td; m_size.cy+=1; }
inline CSeisTraceData* operator[](int nCol) const { return m_traces[nCol]; }
inline CSeisTraceData* GetTrace(int nCol) const { return m_traces[nCol]; } //<2F><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
float GetValue(int nRow, int nCol); //<2F><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD>ݵ㣨<DDB5><E3A3A8><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>
CSeisTraceDataInfo& GetTraceDataInfo(int nCol) { return m_traces[nCol]->GetDataInfo(); }
bool GetCurveCoordRC(CCurve& cv, bool bIsMaxRange); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ߵĿռ<C4BF><D5BC><EFBFBD><EFBFBD><EFBFBD>
bool GetTraceCoordRC(int nTraceIndex, dfPoint& pt, bool bIsMaxRange); //<2F><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
bool GetCurveCoordXY(CCurve& cv, bool bIsMaxRange); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ߵĿռ<C4BF><D5BC><EFBFBD><EFBFBD><EFBFBD>
bool GetTraceCoordXY(int nTraceIndex, dfPoint& pt, bool bIsMaxRange); //<2F><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
double GetMaxValue(int nCol) { return GetTraceDataInfo(nCol).m_dMaxValue;} //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ, 0<=nRow<m_size.cx
void SetMaxValue(int nCol, double val) { GetTraceDataInfo(nCol).m_dMaxValue = val; }
double GetMinValue(int nCol) { return GetTraceDataInfo(nCol).m_dMinValue;} //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Сֵ
void SetMinValue(int nCol, double val) { GetTraceDataInfo(nCol).m_dMinValue = val; }
double GetRMS(int nCol) { return GetTraceDataInfo(nCol).m_dRms; } //<2F><><EFBFBD>þ<EFBFBD><C3BE><EFBFBD><EFBFBD><EFBFBD>ֵ
void SetRMS(int nCol, double val) { GetTraceDataInfo(nCol).m_dRms = val; }
//<2F><><EFBFBD>ݵ<EFBFBD><DDB5><EFBFBD><EFBFBD>ݼ<EFBFBD><DDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>Сֵ<D0A1><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
void RestatDataInfo();
void EnableLock(bool bEnable) { m_bLock = bEnable; }
bool IsLock() { return m_bLock; }
void operator = (CSeisLineData& sd);
void Reversal(void); //<2F><>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD>Ŀ<EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>ֵ
void SetTimeRange(TInterval<float>& range) { m_zRange = range; }
TInterval<float>& GetTimeRange() { return m_zRange; }
CCubeRange GetCubeRange(); //<2F><><EFBFBD>ø<EFBFBD><C3B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E6BCB0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С<EFBFBD>ߵ<EFBFBD><DFB5>ŷ<EFBFBD>Χ
void Serialize(CArchive& ar, const short &ver);
bool WriteMesh(LPCTSTR lpszFileName);
bool WriteTraceDataInfo(LPCTSTR lpszFileName); //д<><D0B4>ͳ<EFBFBD><CDB3><EFBFBD><EFBFBD>Ϣ
bool WriteSegy(LPCTSTR lpszFileName, unsigned short sample_interval = 1000);
void WriteSegyTrace(CFileSegy& fw, int nTraceIndex, unsigned short sample_interval, char* pTraceHeader=NULL);
void SetLinePar(CSeisLinePar& par) { m_sectionPar = par; }
CSeisLinePar& GetLinePar() { return m_sectionPar; }
protected:
NSet::TObjectSet<CSeisTraceData> m_traces; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CSize m_size; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>cx<63><78>ÿ<EFBFBD><C3BF><EFBFBD><EFBFBD><EFBFBD>ݲ<EFBFBD><DDB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>cy<63><79><EFBFBD>ܹ<EFBFBD><DCB9><EFBFBD><EFBFBD>ٵ<EFBFBD><D9B5><EFBFBD><EFBFBD>ݣ<EFBFBD>
bool m_bLock; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD>ܱ༭
CFileSegy::EDataType m_eDataType; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
EOrientation m_eOrientation; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͣ<EFBFBD><CDA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E6A1A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E6A3AC><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
TInterval<float> m_zRange; //Z<><5A><EFBFBD>Ŀ<EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
CSeisLinePar m_sectionPar;
};
}//namespace