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.

231 lines
6.7 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>д: 2005-12-07
//
//
/////////////////////////////////////////////////////////////////////////////
#pragma once
#include ".\DrawExchange.h"
#include "Offset.h"
extern "C"
{
AFX_EXT_API double WINAPI DrawExchangeToDepth(double &x,double &y);
AFX_EXT_API double WINAPI DrawExchangeToTime(double &x, double &y);//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>xΪCDP<44>ţ<EFBFBD><79><CEAA><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱyΪʱ<CEAA><CAB1>
AFX_EXT_API CDrawExchange2D* WINAPI GetDrawExchange(void);
AFX_EXT_API COffset ** WINAPI GetPPOffsetX();
AFX_EXT_API void * WINAPI SectionToFXY(CSectionBase &sec);
AFX_EXT_API void WINAPI SetServerHost(CString strServerHost);
};
class AFX_EXT_CLASS CTraceData
{
public:
CTraceData();
~CTraceData(void);
float GetValue(long i, long j); //iΪ<69><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,jΪ<6A><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void SetValue(long i, long j, float v);
float GetMaxValue(long i);
float GetMinValue(long i);
float GetRMS(long i);
float* GetTrace(long i);
void Reversal(void);
void CopyData(CTraceData& td);
void GetMinMax(void);
void GetOneMinMaxRMS(long i);
int Create(long nx, long ny);
void Clear(void);
float* m_pMaxValue; //ÿ<><C3BF><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD><DDB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Сֵ
float* m_pMinValue;
float* m_pTraceRMS; //ÿ<><C3BF><EFBFBD><EFBFBD><EFBFBD>ݵľ<DDB5><C4BE><EFBFBD><EFBFBD><EFBFBD>ֵ
float* m_pData; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
long numx; //<2F><><EFBFBD><EFBFBD>
long numy; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
BYTE* m_pRead; //<2F><>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7>Ѿ<EFBFBD><D1BE><EFBFBD>ȡ
BOOL m_bReadedAll; //<2F>Ƿ<EFBFBD><C7B7>Ѿ<EFBFBD><D1BE><EFBFBD>ȡ<EFBFBD><C8A1>ȫ<EFBFBD><C8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
BOOL IsReaded(long i);
void EnableReaded(long i, BOOL bReaded);
void EnableReaded(BOOL bEnable);
void operator=(CTraceData& td);
};
class AFX_EXT_CLASS CSectionBase :
public CVector
{
public:
CSectionBase(void);
virtual ~CSectionBase(void);
virtual void Serialize(CArchive& ar, const short& ver);
void Serialize_Old(CArchive& ar, const short& ver);
virtual int Read(CFile& fr, const short& ver);
int ReadOld(CFile& fr, const short& ver);
virtual void Write(CFile& fw, const short& ver);
int ReadOther(CFile& fr, const short& ver);
void WriteOther(CFile& fw, const short& ver);
void CreateOther(void); //<2F><><EFBFBD><EFBFBD><EFBFBD>ڳ<EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>n<EFBFBD><6E>dt֮<74><D6AE>
virtual int Create(int numx);
virtual void Clear(void);
virtual int GetRange(double& min, double& max);
virtual void operator=(CSectionBase& sb);
//IndexOffsetΪÿ<CEAA><C3BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ű<EFBFBD><C5B1><EFBFBD><EFBFBD>ڵ<EFBFBD>ͷ<EFBFBD>е<EFBFBD>λ<EFBFBD><CEBB><>˱<EFBFBD><CBB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>SEGY<47><59><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
int WriteSegy(CString outSegy,int IndexOffset); //<2F><><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>дΪһ<CEAA><D2BB>SEGY<47>ļ<EFBFBD>
int WriteSegy(CString outSegy); //<2F><><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><D0B4>һ<EFBFBD><D2BB>SEGY<47>ļ<EFBFBD><C4BC><EFBFBD>
int WriteHead(CFile64& fw,int nHead=3600); //дSEGY<47>ļ<EFBFBD>ͷ
//дΪ<D0B4><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,ppthCurveΪһ<CEAA><D2BB>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD>䲻Ϊ<E4B2BB><CEAA>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ߵ<EFBFBD><DFB5><EFBFBD>ToDepthWidthCurve<76><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
int WriteSegyDepth(CString outSegy, int IndexOffset, CCurve* ppthCurve=NULL);
int WriteSegy(LPCTSTR lpszFileName, CTraceData& td, double dy);
int WriteMesh(LPCTSTR lpszFileName, CTraceData& td, double dy);
int CreateDimension2D(CDimension2D& dim, CTraceData& td, double dy);
//<2F><>SEGY<47>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>в<EFBFBD><D0B2><EFBFBD>,<2C>򿪵<EFBFBD><F2BFAAB5>ļ<EFBFBD><C4BC><EFBFBD>m_input
int Open(void);
void Close(void);
virtual void ClearTraceData(void);//<2F><><EFBFBD><EFBFBD><EFBFBD>Ѷ<EFBFBD>ȡ<EFBFBD>ĵ<EFBFBD><C4B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
protected:
virtual void InitSection(); //<2F><><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>֮ǰ,<2C><><EFBFBD>г<EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
virtual void SectionMath(CVector& vt); //<2F>Զ<EFBFBD>ȡ<EFBFBD>ĵ<EFBFBD><C4B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD>
CVector v[2];
CVector vt;
CCurve *pCurve;
//<2F><>ȡSEGY<47>ļ<EFBFBD>ָ<EFBFBD><D6B8>
CFileSegy *m_pfr;
CVector vh[2];
public:
CImage *ToImage(int sel);
CImage *ToImage(void *pColor);
int GetRange(double& min, double& max,int m_first,int m_end,int step);//step=10;first=2
int GetMN(double l0,double &m,double &n);
CVector* GetOneA(int i);
CCurve* GetCurrentTraceCurve(void);
void SortTrace(void); //<2F><>CDP<44>Ŵ<EFBFBD>С˳<D0A1><CBB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,С<><D0A1><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD>ں<EFBFBD>
virtual void Reversal(void);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
BOOL GetPointSwing(int i, double &t0); //<2F><><EFBFBD><EFBFBD>ijһT0<54><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
BOOL GetRangeSwing(int i, double bt0, double et0, double& swing, int idea); //<2F><><EFBFBD><EFBFBD>ijһ<C4B3><D2BB>Χ<EFBFBD><CEA7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
double X0(void);
double Y0(void);
double X1(void);
double Y1(void);
double DY(void);
double Y0H(void);
double Y1H(void);
double DYH(void);
void SetTimePoint(double dStartTime, double dEndTime);
int StartPoint,EndPoint;//<2F><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>/<2F><><EFBFBD><EFBFBD>(0=<point<=n)
//<2F><><EFBFBD>ڲ<EFBFBD>ɫ<EFBFBD><C9AB>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>ʱ
double delth; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
long numh; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CString name;
__int64 *offset;
double *DrawExchangeM;
double *DrawExchangeN;
double x0;
double y0;
int n; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//int DataType; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
int m_nFormatCode; // SEGY<47><59><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵĸ<DDB5>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD>(1=IBM float,5=IEEE float),<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>dfSegyAnalyzer3D.exe<78><65><EFBFBD>ļ<EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD>
int IsPC;
double dt; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
DWORD m_nFlags; //Ϊ<><CEAA><EFBFBD><EFBFBD>չ<EFBFBD><D5B9>
CFileSegy::EDataType GetFormatCode(void);
CFileSegy* GetIoFile(void);
//Ϊ<><CEAA>ʹ<EFBFBD><CAB9>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><ECA3AC><EFBFBD><EFBFBD>ÿ<EFBFBD><C3BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CTraceData m_traceData; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><><CAB1>ֵ
//<2F><><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٶ<EFBFBD><D9B6><EFBFBD><EFBFBD><EFBFBD>ʱʹ<CAB1><CAB9>
CTraceData m_traceVel; //<2F>ٶ<EFBFBD>ֵ, <20><>Χ<EFBFBD><CEA7>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͬ
CTraceData m_traceDepth; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD>ֵ,<2C><> [<5B>ٶ<EFBFBD><><CAB1>] <20>õ<EFBFBD><C3B5><EFBFBD>,<2C><><EFBFBD><EFBFBD>SetCustomDepth<74><68><EFBFBD>õIJ<C3B5><C4B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD>õ<EFBFBD>
//Ϊ<><CEAA><EFBFBD><EFBFBD>ƽ<EFBFBD><C6BD>
CTraceData m_traceDragFlat; //<2F><>ƽ<EFBFBD><C6BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
int m_bDrawVelocitySection; //<2F><><EFBFBD>ٶ<EFBFBD><D9B6><EFBFBD><EFBFBD><EFBFBD>
void SetCustomDepth(double interval, long numh);
void ToVelocity(double x0, CVector& v);
BOOL IsDrawDepth(void);
BOOL IsDragFlat(void);
virtual int ReadTraceOne(int index, BOOL bMustRead=FALSE);
void ReadTraceData(void);
int TimeToDepthOne(int nIndex, BOOL bMustTo=FALSE);
void TimeToDepth(void);
void ToDragFlat(void); //<2F><>ƽ<EFBFBD><C6BD><EFBFBD>е<EFBFBD>
int ToDragFlatOne(int nIndex, BOOL bMustToDragFlat=FALSE); //<2F><>ƽָ<C6BD><D6B8><EFBFBD><EFBFBD>
//old, <20>ٶȽ<D9B6><C8BD><EFBFBD>,<2C><>CSectionDraw<61><77>ʹ<EFBFBD><CAB9>
virtual int ReadTrace(int index, CVector& vecter); //<2F><>ȡһ<C8A1><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><>ȡһ<C8A1><D2BB><EFBFBD>IJ<EFBFBD><C4B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>vecter.numȷ<6D><C8B7>(0<index<num)
int ToDepth(int nIndex,CVector &v);
int MustToDepth(int nIndex,CVector &v);
int ToDepth(int nIndex,CVector &v,CVector &vh);
int ToDepthWithCurve(int nIndex,CVector &v,CCurve& curve);//<2F><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD>߽<EFBFBD><DFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>
void ToDragFlat(int nIndex);
CScreenXY m_exchange;
CVector ViewC;
CString m_viewc;
CString m_input,m_xf,m_yf;
int ReadViewC();
double amin;
double amax;
CRect8 GetRect(int bIsColor);
int GetIsochronousSwing(double t0, double* data);//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
//curveΪƽ<CEAA><C6BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><><D2AA><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD>ߴ<EFBFBD>pDimDT<44>в<EFBFBD>ֵDT<44><54>SEGY<47><59><EFBFBD><EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD>
//pDimDT<44><54>ΪУ<CEAA><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//<2F>ú<EFBFBD><C3BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>CSectionBase<73><65>ָ<EFBFBD><D6B8><EFBFBD>ĵ<EFBFBD><C4B5><EFBFBD><EFBFBD><EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>дSEGY<47>ļ<EFBFBD>ͷ
//<2F><>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><D0B4>fw<66><77>ȥ
//pDimDTΪ<54><CEAA>ά<EFBFBD><CEAC><EFBFBD><EFBFBD>,<2C><>pDimDTΪNULLʱ<4C><CAB1>deltValueУ<65><D0A3>
int CalibrateSegy(CFileSegy& fw, CCurve& curve, CDimension3D* pDimDT, double deltValue);
//<2F><>ȡ<EFBFBD><C8A1>У<EFBFBD><D0A3>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD>֮ǰ<D6AE><C7B0><EFBFBD>뽫ָ<EBBDAB>붨λ<EBB6A8><CEBB><EFBFBD>õ<EFBFBD>,pOneTrace<63>б<EFBFBD><D0B1><EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD><C4B5><EFBFBD><EFBFBD><EFBFBD>
void CalibrateOneTrace(char* pOneTrace, double dt);
int ReadCoordinate(int posx, int posy);
};
inline CFileSegy* CSectionBase::GetIoFile(void)
{
return m_pfr;
}
inline CFileSegy::EDataType CSectionBase::GetFormatCode(void)
{
return (CFileSegy::EDataType)m_nFormatCode;
}
inline CCurve* CSectionBase::GetCurrentTraceCurve(void)
{
return pCurve;
}