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.

151 lines
5.5 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.

#pragma once
#include "TrackObj.h"
class AFX_EXT_CLASS CTrackGroup : public CTrackObj
{
public:
CTrackGroup();
CTrackGroup(const CRect8& position);
~CTrackGroup();
void operator=(const CTrackGroup &trackGroupObj);
public:
TRACKLIST& GetTrackList() { return m_trackList; }
void SetGroupType(EGroupType type) { m_eGroupType = type; }
EGroupType GetGroupType() { return m_eGroupType; }
protected:
void Initialize(); //初始化参数
public:
virtual void Clear(void);
virtual void SetParent(CWellBaseObj * pobjParent);
virtual void SetParentXY(void* pXy);
//添加道链表
virtual void AddTrack(CTrackObj* pTrackObj);
////获得指定的索引道
//POSITION GetTrack(int nIndex);
/*仅移除指定道并不释放pTrackObj对象,
本函数使用时最好从井或被删道的爷爷开始,因为对于只有两个道的组合道,删除一个子道,会涉及只包含一个子道的组合道的处理问题,此时只有该组合道的父道能处理这个包含一个道的组合道。
如果直接使用父道删除子道,则只能简单删除,不处理包含一个道的组合道*/
bool RemoveTrack(CTrackObj* pDelTrack);
//删除所有子道
void DeleteAllTrack();
//删除指定道(移除并删除对象)
//void DeleteTrack(TRACKLIST::iterator pos);
//查找是否包含指定的道bIncludeSub是否包含内部的子道
BOOL FindTrack(CTrackObj* pTrackObj, bool bIncludeSub);
//根据道类型查找对象,查找第一个
CTrackObj* FindTrack(ETrackType type);
//根据道名称查找道
CTrackObj* FindTrack(ETrackType type, LPCTSTR strTrackName);
//根据pcg数据索引找到道对象
CTrackObj* FindDataRefTrack(LPCTSTR strDataRef,BOOL bReadData);
//找到指定坐标下的道
CTrackObj* FindTrack(CPoint2D pt);
//找到当前范围所属的组(移动道头使用)
CTrackGroup* FindTrackGroup(CPoint2D pt);
///////判断是否存在同标题的道
virtual BOOL FindTrackTitle(CString str);
///////判断是否存在同名称的道
virtual BOOL FindTrackName(CString str);
///////取出所有的道(非组)对象,可以指定道的类型,默认情况下,所有的道都有
virtual void GetAllTrack(TRACKLIST* TrackList, int type = -1);
////////////////////////////////////////
virtual int GetTrackRow();
//查找井内的边界道
CTrackObj* FindTrackLeft();
CTrackObj* FindTrackRight();
//找到当前点所在右边界上的组合道
CTrackGroup* FindTrackGroupOnRight(CPoint2D pt, double dHandleSize);
/// 获得组内所有实际道的个数(不包含组对象本身)
virtual int GetTrackCount();
int GetTrackCount(ETrackType trackType, bool bIncludeSub); //根据类型统计个数
virtual void SetTrackWidthRatio(double r);
virtual void SetPenTrack(GDFLOGPENEXT& pen);
virtual void SetPenGrid(GDFLOGPENEXT& penmajor, GDFLOGPENEXT& penminor);
virtual void SetFontTrack(GDFLOGFONTEXT& font, BOOL bReplaceClr = TRUE);
virtual void SetFontHeadMark(GDFLOGFONTEXT& font, BOOL bReplaceClr = TRUE);
virtual BOOL ReadCurveData(BOOL bInit = TRUE);
////// 2016.3.16 曲线、散点道清除曲线段数据统计以及岩性归为时添加的深度段child对象
virtual void ClearCurveSegmentObj();
virtual void ResetChildPosition(double oldProportion, double newProportion, double depthDelta);
virtual void ResetChildPosition(double offsetY = 0.0);
//移动道宽
void MoveTrackWidth(double width);
virtual void SetFontGridMark(GDFLOGFONTEXT& font);
virtual void SetSpace(double major, double minor);
virtual void DivideTrack(TRACKLIST* CurveList, TRACKLIST* OtherList);
virtual void GetTrackCurve(TRACKLIST* CurveList);
virtual CWellBaseObj* ObjectAt(const CRect8& rect, double dHandleSize, BOOL bNesting = FALSE);
virtual BOOL Intersects(const CRect8& rect, double dHandleSize);
virtual void CalculateSize(CPoint2D point); // 计算道组合范围
virtual void GetHeadPts(double cx, double cy, double angle, double offx = 0, double offy = 0); //计算斜井情况下的道头区域,cxcy旋转中心angle旋转角度
virtual double GetWidth();
virtual void Serialize(CArchive& ar, const short &ver);
virtual void Serialize_TrackList(CArchive& ar, const short &ver);
virtual void SetTitle(CString title);
virtual void MoveToActiveTrackHead(CRect8& positon);
virtual void MoveTo(CRect8& position);
virtual void MoveHandleTo(int nHandle, CPoint2D point);
virtual void DrawTrackHead(CXyDC* pDC);
virtual void DrawTrackHeadLine(CXyDC* pDC, BOOL bFirst = FALSE);
virtual void DrawTrackBodyLine(CXyDC* pDC, BOOL bFirst = FALSE);
virtual void DrawActiveTrackHead(CXyDC*pDC);
virtual void Draw(CXyDC* pDC);
//绘制井体边线
virtual void DrawWellBodyLine(CXyDC* pDC);
//virtual void AddLineEntity(); //创建线对象
//virtual void AddTextEntity(); //创建文本对象
////添加道标题
//virtual void AddTrackHead();
////添加道头线
//virtual void AddTrackHeadLine();
virtual void WritePCG_WellTemp(CFile &fw, int nBaseTabNum);//pcg文件中 井模板
virtual void WritePCG_Traces(CFile &fw, int nBaseTabNum); //pcg文件中 道部分
virtual void WritePCG_Datas(CFile &fw, int nBaseTabNum); //pcg文件中 道数据
//写自定义的扩展数据,写pcg及dml格式都可以用
virtual void WritePCG_Ext(CFile &fw, int nBaseTabNum);
virtual int ReadPCG_Exts(CFile &fr, const short &ver);
//void GetChildTracks(std::vector<CTrackObj*> &trackVec); //高峰.2016.03.24 得到一个trackGroup中所有非Group的道
virtual void DrawTrajectory(CXyDC* pDC);
virtual void SetActionNoSaveData(BOOL b);
int GetTrackPosInList(CTrackObj* pTrack);
void AddTarckToPos(int ipos, CTrackObj* pTrack);
void GetMaxVGroupTrackNum(int& totalNum);
virtual CRect8 GetDragMoveRect();
virtual void SetFontScale(double yScale);// 字符缩放先按照y同比例缩放
virtual void afterCalculateSize();
virtual void GetTypeTrackList(TRACKLIST* trackList,ETrackType trackType);
protected:
TRACKLIST m_trackList;
EGroupType m_eGroupType;
public:
virtual int ReadPCG_Exts(CKXmlParse& xp, const short &ver);
};