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.

72 lines
2.4 KiB
C++

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

/**************************************************************************************
栅状图类
**************************************************************************************/
#ifndef WELLFENCE_H
#define WELLFENCE_H
#pragma once
class AFX_EXT_CLASS CWellFence : public CWellSection
{
public:
CWellFence(void);
virtual ~CWellFence(void);
//G_CLONE_ELEMENT(CWellFence)
virtual CString GetXmlType() { return _T("FenceDiagram"); }
public:
double m_xMin; //x最小坐标
double m_yMax; //y最大坐标
double m_fHorzRatio; //水平比例系数
//////
double m_fReferenceY; //剖面情况下井体顶位置y的中间值仰俯角度改变时的参考点
double m_fCenterY; //所有井体顶位置y的中间值
CWellBaseObjList m_SortObjList; ///按画的先后顺序排序后的井与连层
public:
virtual void* CloneElement(void);
virtual void Clone(CWellBaseObj& object);
virtual void Serialize(CArchive& ar, const short &ver);
virtual void Draw(CXyDC* pDC);
virtual CBendObj* CreateBendObj() { return new CFenceBendObj; }
void RotateWells(); //旋转后,重新计算新的井位置
void ReComputeWells(); //根据仰俯角再次计算井位置
void ReComputeBends(); //旋转后,重新计算新的连层位置
void ReComputeBends(CWellPole* pWell); //井操作后重新计算相关的层位(包含拖动井 拖拽井 拖动道 拖拽道等操作)
void SortWellAndBendList(); //重新排列井和连层链表
void ReSetPosition(); //重新计算图形范围
virtual void BuildBends(); //构建Bend与层关系
protected:
//旋转后重新计算断层的位置
void ReComputeFaults();
//得到所有井的中心点
CPoint2D GetWellsCenterPoint();
//取得所有井的所在区域的中心点y
double GetFenceCenterY();
///// 计算井位置(fTop 是参考点)
virtual void ComputeWellPosition(double fTop);
///// 根据对象的前后位置放入到链表中
virtual void SortObject();
///// 画连层时检查是否有未画的井位于该连层之间
virtual BOOL FindWellBehindBend(CBendObj* pBend, CWellPole* pWell);
////判断鼠标选中对象
virtual CWellBaseObj* ObjectAt(const CRect8& rect, double dHandleSize, BOOL bNesting=FALSE);
public:
virtual int ReadPCG_Feature(CXmlParse &xp,const short& ver);
virtual int ReadPCG_Section(CFile &fr,const short& ver);
virtual int ReadPCG_Wells(CFile &fr,const short& ver);
virtual void WritePCG_Feature(CFile &fw,int nBaseTabNum); //pcg文件中 特征
virtual void WritePCG_Tail(CFile &fw,int nBaseTabNum); //pcg文件中 尾部分
};
#endif