|
|
#ifndef FAULT_H
|
|
|
#define FAULT_H
|
|
|
#pragma once
|
|
|
//#include "BendObj.h"
|
|
|
class CBendObj;
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
|
//文件 Fault.h
|
|
|
//主要功能:
|
|
|
// 多井地层对比断层类
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
//断层与层位中线的交点信息结构
|
|
|
struct FaultOnBendCrossStruct
|
|
|
{
|
|
|
CBendObj* pBend; //bend层指针
|
|
|
int nBendID;
|
|
|
double fLThrow; //左距离
|
|
|
double fRThrow; //右距离
|
|
|
CPoint2D LeftCrossPt;//左层交点
|
|
|
CPoint2D RightCrossPt;//右层交点
|
|
|
CString bendLeftWell;
|
|
|
CString bendRightWell;
|
|
|
int bendLeftLayerID;
|
|
|
int bendRightLayerID;
|
|
|
|
|
|
public:
|
|
|
FaultOnBendCrossStruct()
|
|
|
{
|
|
|
pBend = NULL;
|
|
|
nBendID = -1;
|
|
|
bendLeftLayerID = -1;
|
|
|
bendRightLayerID = -1;
|
|
|
}
|
|
|
|
|
|
void Serialize(CArchive& ar, const short &ver);
|
|
|
};
|
|
|
typedef CArray<FaultOnBendCrossStruct, FaultOnBendCrossStruct> FAULTONBENDCROSSARR; //断层结构数组
|
|
|
|
|
|
class AFX_EXT_CLASS CFaultObj : public CWellBaseObj
|
|
|
{
|
|
|
public:
|
|
|
CFaultObj(void);
|
|
|
~CFaultObj(void);
|
|
|
void operator=( CFaultObj& faultObj);
|
|
|
CLONE_WELLOBJECT(CFaultObj)
|
|
|
|
|
|
public:
|
|
|
CPointArr m_ptArr; //断层控制点数组
|
|
|
double m_fLeftThrow; //断层左侧上升 ,左侧是正数表示左侧地层上升。
|
|
|
double m_fRightThrow; //断层右侧下降,右侧是正数表示右侧地层是下降
|
|
|
CString m_strName; //断层名
|
|
|
|
|
|
FAULTONBENDCROSSARR m_ptCrossArr; //断层与层位中线的交点数组,(控制层位与断层的交点和断距时使用)
|
|
|
std::vector<dfPoint> m_OrgCtrlPts; //初始控制点
|
|
|
protected:
|
|
|
DWORD m_nFaultFlags; // 断层开关状态
|
|
|
|
|
|
// 连层类Flags
|
|
|
enum FaultFlags
|
|
|
{
|
|
|
FlagNULL = 0x0000, // 空白
|
|
|
FaultFlagBSPline = 0x0001, // 是否绘制B样条曲线
|
|
|
FaultFlagCutOffShoot = 0x0002, // 是否屏蔽分支层
|
|
|
FaultFlagCutExtend = 0x0004, // 是否屏蔽延伸层
|
|
|
FaultFlagCutFluid = 0x0008, // 封堵流体
|
|
|
FaultFlagCutLitho = 0x0010, // 分割岩性
|
|
|
FaultFlagCutLeftExtend = 0x0020, // 切断左延伸层
|
|
|
FaultFlagCutRightExtend = 0x0040, // 切断右延伸层
|
|
|
FaultFlagHideLeftBends = 0x0080, // 隐藏左侧连层
|
|
|
FaultFlagHideRightBends = 0x0100, // 隐藏右侧连层
|
|
|
FaultFlagShowLeftArrow = 0x0200, // 显示左侧箭头
|
|
|
FaultFlagShowRightArrow = 0x0400, // 显示右侧箭头
|
|
|
};
|
|
|
|
|
|
public:
|
|
|
virtual void Serialize(CArchive& ar, const short &ver);
|
|
|
virtual void Draw(CXyDC* pDC);
|
|
|
virtual void MoveTo(CRect8& position);
|
|
|
virtual void MoveHandleTo(int nHandle, CPoint2D point);
|
|
|
|
|
|
virtual void GetRange(CRect8& range);
|
|
|
|
|
|
virtual int HitTest(CPoint2D point, double dHandleSize, BOOL bSelected);
|
|
|
virtual BOOL Intersects(const CRect8& rect, double dHandleSize);
|
|
|
virtual int GetHandleCount();
|
|
|
virtual CPoint2D GetHandle(int nHandle);
|
|
|
int GetCrossCount();
|
|
|
|
|
|
void FaultReCut(int fPtThrowNum=0,double *pfptThrowArr = NULL);//计算断层线切割时,是否有断层线上每段的断距
|
|
|
void FaultReCut_ResForm();
|
|
|
void ReComputeBendCrossControl(int nHandle,CPoint2D pt,CPoint2D ptDrag,BOOL bAdjustThrow,double dH=0.0);
|
|
|
//开关变量值
|
|
|
virtual void SetFaultFlags(DWORD flags);
|
|
|
virtual void SetBSPline(BOOL bFlag);
|
|
|
virtual void SetCutOffShoot(BOOL bFlag);
|
|
|
virtual void SetCutExtend(BOOL bFlag);
|
|
|
virtual void SetCutFluid(BOOL bFlag);
|
|
|
virtual void SetCutLitho(BOOL bFlag);
|
|
|
virtual void SetHideLeftBends(BOOL bFlag);
|
|
|
virtual void SetHideRightBends(BOOL bFlag);
|
|
|
virtual void SetShowLeftArrow(BOOL bFlag);
|
|
|
virtual void SetShowRightArrow(BOOL bFlag);
|
|
|
virtual void SetCutLeftExtend(BOOL bFlag);
|
|
|
virtual void SetCutRightExtend(BOOL bFlag);
|
|
|
|
|
|
virtual DWORD GetFaultFlags();
|
|
|
virtual BOOL IsBSPline();
|
|
|
virtual BOOL IsCutOffShoot();
|
|
|
virtual BOOL IsCutExtend();
|
|
|
virtual BOOL IsCutFluid();
|
|
|
virtual BOOL IsCutLitho();
|
|
|
virtual BOOL IsHideLeftBends();
|
|
|
virtual BOOL IsHideRightBends();
|
|
|
virtual BOOL IsShowLeftArrow();
|
|
|
virtual BOOL IsShowRightArrow();
|
|
|
virtual BOOL IsCutLeftExtend();
|
|
|
virtual BOOL IsCutRightExtend();
|
|
|
|
|
|
void Transform(CXyDC* pDC, float* matrix, BOOL bUndo);
|
|
|
public:
|
|
|
|
|
|
void GetFaultPtOrderbyPt1ToPt2(dfPoint pt1, dfPoint pt2, std::vector<dfPoint>& outPt); //获得输入两个点的Y之间的断层线上的点,且按照从pt1到pt2的方向排列
|
|
|
void GetFaultPtByY(dfPoint pt1 , dfPoint pt2,std::vector<dfPoint>& outPt); //获得输入两个点的Y之间的断层线上的点,且按照从到小排列
|
|
|
|
|
|
void GetFaultPtsByDec(CPointArr& ptArr);//按照Y方向由大变小
|
|
|
|
|
|
virtual int ReadPCG(CFile &fr,const short& ver);
|
|
|
virtual void WritePCG(CFile &fw,int nBaseTabNum); //pcg文件
|
|
|
|
|
|
int ReadPCG_FaultPoints(CFile &fr,CXmlParse& xp,const short& ver);
|
|
|
|
|
|
//输入层位交点,及左右滑动断距, 得到左右层位与断层的交点
|
|
|
void GetFaultPointByThrow(dfPoint intsectPt, double lthrow, dfPoint& lPoint);
|
|
|
void GetFaultPointByYOffset(dfPoint intsectPt, double yOffset, dfPoint& lPoint); //将一个点沿着断层线移动,纵坐标变化是yoffset
|
|
|
|
|
|
protected:
|
|
|
void GetBendFaultCross(CPointArr& ptArrCurve,void *pFaultCross,BOOL & bCross,int& FptId); //FptId是与层位线相交的断层线点ID
|
|
|
|
|
|
public:
|
|
|
virtual int ReadPCG(CKXmlParse& xp, const short& ver);
|
|
|
int ReadPCG_FaultPoints( CKXmlParse& xp, const short& ver);
|
|
|
|
|
|
int ReadPCG_FaultProperties(CKXmlParse& xp, const short& ver, CRect8 mapRect);
|
|
|
|
|
|
void ComputedFaultCurvePoints(BOOL bSpline);
|
|
|
BOOL AddFaultPoint(int SelectId);
|
|
|
BOOL DeleteFaultPoint(int SelectId);
|
|
|
|
|
|
CString GetName() { return m_strName; }
|
|
|
|
|
|
};
|
|
|
#endif |