|
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
//<2F>ļ<EFBFBD>: SegY<67>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
//<2F><>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>:
|
|
|
|
|
|
// <09><>ά<EFBFBD><CEAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD>壬<EFBFBD><E5A3AC><EFBFBD><EFBFBD><EFBFBD>ߵ<EFBFBD><DFB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<E0BBA5><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
//
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д: 2011-4-1
|
|
|
|
|
|
//
|
|
|
|
|
|
//
|
|
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
|
|
|
|
|
|
#pragma once
|
|
|
|
|
|
#include "RowColRange.h"
|
|
|
|
|
|
#include "CoorTransform.h"
|
|
|
|
|
|
#include "SeisSampleInfo.h"
|
|
|
|
|
|
#include "SeisSurvey2D.h"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
namespace NSeis
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
|
|
enum EOrientation
|
|
|
|
|
|
{
|
|
|
|
|
|
oriInline = 0,
|
|
|
|
|
|
oriCrossline = 1,
|
|
|
|
|
|
oriZslice = 2,
|
|
|
|
|
|
|
|
|
|
|
|
oriRandline = 3 //<2F><><EFBFBD><EFBFBD>CSeisLineData<74><61>ʹ<EFBFBD><CAB9>
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
//! Defines policy for 2D and 3D Data type
|
|
|
|
|
|
enum EPolicy2D3D
|
|
|
|
|
|
{
|
|
|
|
|
|
polOnly3D = 0,
|
|
|
|
|
|
polBoth2DAnd3D = 1,
|
|
|
|
|
|
polOnly2D = 2
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
enum EAreaStyle
|
|
|
|
|
|
{
|
|
|
|
|
|
areaWork = 0x00000001, //ʹ<>ù<EFBFBD><C3B9><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
areaSnapStep = 0x00000002, //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
areaAutoDelete = 0x00000004, //<2F>Ƿ<EFBFBD><C7B7>Զ<EFBFBD>ɾ<EFBFBD><C9BE>
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><>ά<EFBFBD><CEAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ò<EFBFBD><C3B2><EFBFBD><EFBFBD>ģ<EFBFBD>
|
|
|
|
|
|
// 1<><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ߵ<EFBFBD><DFB5>ŵ<EFBFBD><C5B5>ת<E0BBA5><D7AA>
|
|
|
|
|
|
// 2<><32><EFBFBD><EFBFBD>γ<EFBFBD>ȶ<EFBFBD><C8B6><EFBFBD><EFBFBD><EFBFBD>Ϣ
|
|
|
|
|
|
// 3<><33><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>壺<EFBFBD>û<EFBFBD><C3BB><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD>ߵ<EFBFBD><DFB5>ż<EFBFBD>Z<EFBFBD><5A><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Χ<EFBFBD><CEA7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>壩<EFBFBD><E5A3A9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
class AFX_EXT_CLASS CSeisSurvey3D
|
|
|
|
|
|
{
|
|
|
|
|
|
public:
|
|
|
|
|
|
CSeisSurvey3D(void);
|
|
|
|
|
|
~CSeisSurvey3D(void);
|
|
|
|
|
|
|
|
|
|
|
|
public:
|
|
|
|
|
|
CPoint2D toXY(int row, int col) { return m_b2c.toXY(row, col); }
|
|
|
|
|
|
CPoint2D toXY( const CRowCol& rc ) { return m_b2c.toXY(rc); }
|
|
|
|
|
|
CPoint2D toXY( const CPoint2D& rc ) { return m_b2c.toXY(rc.x0, rc.y0); }
|
|
|
|
|
|
CRowCol toRC( const CPoint2D& pt );
|
|
|
|
|
|
CRowCol toRC( double x, double y );
|
|
|
|
|
|
CPoint2D toRCF( const CPoint2D& pt );
|
|
|
|
|
|
CPoint2D toRCF( double x, double y );
|
|
|
|
|
|
|
|
|
|
|
|
void toRCF( CCurve& cv, bool bAutoLocation = true ); //<2F><>ʵ<EFBFBD><CAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD>ߵ<EFBFBD><DFB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
void toXY( CCurve& cv, bool bAutoLocation = true ); //<2F><><EFBFBD>ߵ<EFBFBD><DFB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊʵ<CEAA><CAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
|
|
|
|
|
|
CRowCol RCF2RC( const CPoint2D& pt );
|
|
|
|
|
|
/*!<\note CRowCol will be snapped using work step. */
|
|
|
|
|
|
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
//Start Work
|
|
|
|
|
|
bool IsWork() { return (m_nFlags & areaWork) ? true:false; }
|
|
|
|
|
|
void EnableWork(bool bWork);
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD>EnableWork<72>趨<EFBFBD><E8B6A8>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǹ<EFBFBD><C7B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>IJ<EFBFBD><C4B2><EFBFBD>
|
|
|
|
|
|
TIntervalStep<int> inlRange();
|
|
|
|
|
|
TIntervalStep<int> crlRange();
|
|
|
|
|
|
TIntervalStep<float>& zRange();
|
|
|
|
|
|
CCubeRange& GetCubeRange() { return IsWork() ? m_workCube : m_surveyCube; }
|
|
|
|
|
|
|
|
|
|
|
|
void GetRange(CPoint3D& minpt, CPoint3D& maxpt);
|
|
|
|
|
|
CPoint3D minCoord();
|
|
|
|
|
|
CPoint3D maxCoord();
|
|
|
|
|
|
bool isInside(const CRowCol&) const;
|
|
|
|
|
|
void WriteSurvey(LPCTSTR lpszFileName);
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD>ʵ<EFBFBD>ʶ<EFBFBD>ά<EFBFBD><CEAC><EFBFBD><EFBFBD>
|
|
|
|
|
|
bool GetSurvey2D(CSeisSurvey2D& sd, LPCTSTR lpszInlHead = NULL, LPCTSTR lpszCrlHead = NULL);
|
|
|
|
|
|
|
|
|
|
|
|
//End Work
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
|
|
|
|
|
|
int inlSnap(double row);
|
|
|
|
|
|
int crlSnap(double col);
|
|
|
|
|
|
float zSnap(double z);
|
|
|
|
|
|
int inlStep() const;
|
|
|
|
|
|
int crlStep() const;
|
|
|
|
|
|
float zStep() const;
|
|
|
|
|
|
double inlDistance(); //!< <20><><EFBFBD><EFBFBD>ʵ<EFBFBD><CAB5><EFBFBD><EFBFBD><DFBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD>ס<EFBFBD><D7A1><EFBFBD>
|
|
|
|
|
|
double crlDistance(); //!< <20><><EFBFBD><EFBFBD>ʵ<EFBFBD>ʵ<EFBFBD><CAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD>ס<EFBFBD><D7A1><EFBFBD>
|
|
|
|
|
|
|
|
|
|
|
|
void Write(CFile& fw, const short& ver);
|
|
|
|
|
|
int Read(CFile& fr, const short& ver);
|
|
|
|
|
|
void Serialize(CArchive& ar, const short &ver);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public:
|
|
|
|
|
|
void setWorkRange(const CCubeRange& cr);
|
|
|
|
|
|
//!< <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ù<EFBFBD><C3B9><EFBFBD><EFBFBD><EFBFBD>Χ
|
|
|
|
|
|
//!< <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> bGetSnapPoint <20>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ߵ<EFBFBD><DFB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С<EFBFBD><D0A1>Χ<EFBFBD><CEA7><EFBFBD><EFBFBD>
|
|
|
|
|
|
void setWorkRangeXY(CPoint3D& ptMin, CPoint3D& ptMax, bool bGetSnapPoint=false);
|
|
|
|
|
|
void setWorkRangeRC(CPoint3D& ptMin, CPoint3D& ptMax, bool bGetSnapPoint=false);
|
|
|
|
|
|
|
|
|
|
|
|
bool IsSnapStep() { return (m_nFlags & areaSnapStep) ? true:false; }
|
|
|
|
|
|
void EnableSnapStep(bool bSnap);
|
|
|
|
|
|
|
|
|
|
|
|
/*!< Orientation is determined by rotating the inline axis to the crossline axis. */
|
|
|
|
|
|
bool isClockWise() const;
|
|
|
|
|
|
/*!< It's the angle (0 to pi/2) between the X-axis and the Inline-axis (not an inline) */
|
|
|
|
|
|
double computeAngleXInl();
|
|
|
|
|
|
|
|
|
|
|
|
/*!<Gives a ballpark figure of how to scale XY to make it comparable to Z. */
|
|
|
|
|
|
static double defaultXYtoZScale( CUnit::EType unit_z, CUnit::EType unit_xy );
|
|
|
|
|
|
/*!<Gives a ballpark figure of how to scale Z to make it comparable to XY. */
|
|
|
|
|
|
double zScale() const;
|
|
|
|
|
|
|
|
|
|
|
|
void InitZRange(CSeisSampleInfo& si);
|
|
|
|
|
|
bool InitCoorTransform(CDimension3D* pMesh3D); //<2F><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>任
|
|
|
|
|
|
|
|
|
|
|
|
public:
|
|
|
|
|
|
CCubeRange m_surveyCube; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȫ<EFBFBD><C8AB><EFBFBD><EFBFBD>Χ<EFBFBD><CEA7>ȱʡ<C8B1><CAA1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Χ<EFBFBD><CEA7>ͬ
|
|
|
|
|
|
CCubeRange m_workCube; //<2F>û<EFBFBD><C3BB><EFBFBD><EFBFBD>õ<EFBFBD><C3B5><EFBFBD>ʾ<EFBFBD><CABE>Χ
|
|
|
|
|
|
|
|
|
|
|
|
CUnit::EType m_unit_xy; //xy<78><79><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>굥λ
|
|
|
|
|
|
CUnit::EType m_unit_z; //z<><7A><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>굥λ
|
|
|
|
|
|
CCoorTransform m_b2c; //<2F>ߵ<EFBFBD><DFB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<E0BBA5><D7AA>
|
|
|
|
|
|
|
|
|
|
|
|
//CProjection m_l2c; //<2F><>γ<EFBFBD><CEB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<E0BBA5><D7AA>
|
|
|
|
|
|
|
|
|
|
|
|
//<2F>Ƿ<EFBFBD>ʹ<EFBFBD><CAB9><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE>
|
|
|
|
|
|
//<2F>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD>ղ<EFBFBD><D5B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
DWORD m_nFlags; //һЩ<D2BB><D0A9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
}//namespace
|
|
|
|
|
|
|
|
|
|
|
|
using namespace NSeis;
|
|
|
|
|
|
|