#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); //计算斜井情况下的道头区域,cx,cy旋转中心,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 &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); };