#pragma once #include "WellClassObjGroup.h" #include "InTrackTextBase.h" class CInTrackDepthSegment; class CTrackGroup; class CTrackObj; typedef std::list TRACKLIST; class AFX_EXT_CLASS CTrackObj : public CWellClassObjGroup { public: CTrackObj(); CTrackObj(const CRect8& position); virtual ~CTrackObj(); public: virtual double GetWidth() { return m_dTrackWidth; } virtual ETrackType GetTrackType() { return m_eTrackType; }; virtual void SetTrackType(ETrackType type) { m_eTrackType = type; } virtual void SetGroupType(EGroupType type) { m_eGroupType = type; } virtual EGroupType GetGroupType() { return m_eGroupType; } virtual void SetFontScale(double yScale);// 字符缩放先按照y同比例缩放 protected: ETrackType m_eTrackType; // 道类型 EGroupType m_eGroupType; // 组合道类型 DWORD m_nTrackFlags; // 道开关状态 //道基类Flags enum TrackFlags { TrackFlagTitle = 0x0001, // 显示道标题 TrackFlagCombineLeft = 0x0002, // 左组合 TrackFlagCombineRight = 0x0004, // 右组合 TrackFlagLog = 0x0008, // 对数刻度 TrackFlagMark = 0x0010, // 显示道内标注 //波形道开关 TrackWaveFlagLogAxes = 0x0100, // 对数轴 TrackWaveFlagAutoMidClr = 0x0200, // 自动中间色 TrackWaveFlagDraw = 0x0400, // 波形绘制、变密度绘制 TrackWaveFlagFill = 0x0800, // 变密度填充、波形填充 }; public: double m_dTrackWidth; // 道宽(毫米) CString m_strFormat; // 输出格式 CString m_strTrackName; // 名称 int m_nAlignChild; // 道内文本对齐方式(0 左 1 中 2 右) GDFLOGFONTEXT m_fontChild; // 道内文本字体 GDFLOGPENEXT m_penChild; // 道内对象画笔 GDFLOGBRUSH m_brushChild; // 道内对象刷子 //从库导入数据时道的配置表名 CString m_strConfigTable; // 配置表名 vector m_VecConfigField; // 配置字段 CString m_strConfigTableOther; // 配置表名(岩样道时使用) vector m_VecConfigFieldOther; // 配置字段(岩样道时使用) CString m_strConfigClass; // 配置级别 //pcg读取使用(临时变量) int nWellColID; // 井列模板ID CString m_strDataRef; // 道数据索引标识 int m_nColumn; // 道头列 int m_nRow; // 道头行 //如果是斜井,这些用来存储偏转后的井头四个点的坐标及中心点,四个点依次对应矩形的左上,右上,右下,左下(每次井CalculateSize时计算) CCurveEx m_HeadCurve; CRect8 m_active_head; // 交互标题大小 CRect8 m_HeadRect; // 标题大小 CString m_strTitle; // 标题文字 int m_nTitleAlign; // 道标题0居左,1居中,2居右 protected: void Init(); //初始化参数 // Implementation public: BOOL IsOnWellTop(CPoint2D point, double dHandleSize); //是否在 本道所属区域的井头上 BOOL IsOnTrackTop(CPoint2D point, double dHandleSize); //是否在道头边界上 virtual BOOL IsOnTrackRight(CPoint2D point, double dHandleSize); //是否在道的右边界上 virtual BOOL IsInTrackHead(CPoint2D point, float selectSx = 0, float selectSy = 0); //ggff.点是否在道头区域内 // virtual BOOL IsInTrackHead(CPoint2D point, double dHandleSize);///////点是否在道头区域内 virtual void GetHeadPts(double cx, double cy, double angle, double offx = 0, double offy = 0); //计算斜井情况下的道头区域,cx,cy旋转中心,angle旋转角度 //计算道对象大小 virtual void CalculateSize(CPoint2D point); //计算斜井道左右轨迹 virtual void ComputeDisplayTrajectory(); //设置标题属性 virtual void SetTextTitle(CString text, GDFLOGFONTEXT logfont); //设置道宽 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 void SetFontGridMark(GDFLOGFONTEXT& font); //设置刻度间隔 virtual void SetSpace(double major, double minor); virtual void SetPenChild(GDFLOGPENEXT& pen); virtual void SetFontChild(GDFLOGFONTEXT& font); virtual void SetBrushChild(GDFLOGBRUSH& brush); virtual void DrawTrackHead(CXyDC*pDC); virtual void DrawTrackHeadLine(CXyDC* pDC, BOOL bFirst = FALSE); virtual void DrawTrackBodyLine(CXyDC* pDC, BOOL bFirst = FALSE); //添加道标题 virtual void AddTrackHead(); ////添加道头线 //virtual void AddTrackHeadLine(); ////添加道边框线 //virtual void AddTrackBodyLine(); void DrawSelectRange(CXyDC *pDC); void GetSelectRange(std::vector& PtsVec); virtual void DrawActiveTrackHead(CXyDC*pDC); virtual void Draw(CXyDC* pDC); virtual void DrawTrajectory(CXyDC* pDC); virtual int GetHandleCount(); virtual CPoint2D GetHandle(int nHandle); virtual BOOL Intersects(const CRect8& rect, double dHandleSize); virtual void MoveToActiveTrackHead(CRect8& positon); virtual void MoveTo(CRect8& position); virtual void MoveHandleTo(int nHandle, CPoint2D point); virtual void Serialize(CArchive& ar, const short &ver); //开关变量值 virtual void SetTrackFlags(DWORD flags); virtual void SetShowTitle(BOOL bFlag); virtual void SetCombineLeft(BOOL bFlag); virtual void SetCombineRight(BOOL bFlag); virtual void SetLog(BOOL bFlag); virtual void SetShowMark(BOOL bFlag); virtual void SetWaveLogAxes(BOOL bFlag); virtual void SetWaveAutoMidClr(BOOL bFlag); virtual void SetWaveDraw(BOOL bFlag); virtual void SetWaveFill(BOOL bFlag); virtual DWORD GetTrackFlags(); virtual BOOL IsShowTitle(); virtual BOOL IsCombineLeft(); virtual BOOL IsCombineRight(); virtual BOOL IsLog(); virtual BOOL IsShowMark(); virtual BOOL IsWaveLogAxes(); virtual BOOL IsWaveAutoMidClr(); virtual BOOL IsWaveDraw(); virtual BOOL IsWaveFill(); //计算道边界 virtual void CalcBorders(); //删除道内图元 virtual BOOL RemoveTrackChild(); // 根据数据创建道内子对象 virtual void AddObjChild(); // 井内参数改变时重新设置道内子对象的位置 virtual void ResetChildPosition(double oldProportion, double newProportion, double depthDelta); // 道头高发生改变时重新设置道内子对象的位置 virtual void ResetChildPosition(double offsetY = 0.0); // 根据道属性重新设置道内专业子对象的属性 virtual void ResetChildProperties(); //新版pcg中格式规范转换 virtual CString FormatValue(double value); //根据道内对象的深度位置算position的值 virtual void ComputeChildPosition(); //按深度排列道内对象 virtual void SortChildren(WELLOBJVECTOR &drawObjArr); //获取道内数据对象了 virtual void GetChildDatas(StringVectorSet &dataContent, BOOL bHaveWellName = TRUE); //创建道内数据对象 virtual void BuidChildObject(vector &fields, StringVectorSet &datas, BOOL bInit = FALSE); //处理大批量的浮点数时,不使用字符串,如曲线 virtual void BuidChildObject(double *pDepth, double *pData, int datanum, BOOL bInit = FALSE); virtual BOOL ReadCurveData(BOOL bInit = TRUE) { return FALSE; } virtual CString GetTrackPcgType(); //根据道类型构建对象 static CTrackObj* CreateTrackObj(ETrackType eTrackType); static CTrackObj* CreatePCGTrackObj(CString strTrackType); virtual int GetTrackRow() { return m_nRow; } void SortChildDatas(WELLOBJVECTOR &drawObjArr); void GetAllTrack(TRACKLIST* TrackList, int type = -1); virtual void afterCalculateSize() { };//处理需要在所有的道数据计算完毕后,才能进行计算的操作如填充曲线,只有所有曲线都计算完毕后,这时使用的填充曲线的数据才有效 protected: virtual void DrawTrackHead(CXyDC*pDC, CRect8 headrect); //添加道标题 virtual void AddTrackHead(CRect8 headrect); BOOL IsRectInHeadPts(CRect rectT); BOOL m_bActiveTrackHead; //绘制斜井带符号的道头时需要这个bool,临时变量 public: //PCG数据读写 virtual int ReadPCG_Title(CFile &fr, const short& ver); virtual int ReadPCG_GridStyle(CXmlParse& xp, const short& ver); virtual int ReadPCG_SymbolStyle(CXmlParse& xp, const short& ver); virtual int ReadPCG_CurveStyle(CXmlParse& xp, const short& ver); virtual int ReadPCG_StickStyle(CXmlParse& xp, const short& ver); virtual int ReadPCG_Self(CFile &fr, CXmlParse& xp, const short& ver); virtual int ReadPCG_TraceMark(CFile &fr, CXmlParse& xp, const short& ver); virtual int ReadPCG_DataRef(CXmlParse& xp, const short& ver); virtual int ReadPCG_Trace(CXmlParse& xp, CFile &fr, const short& ver, PCG_TRACECOL& traceCol, int fVerstion = 1); virtual int ReadPCG_Data(CFile &fr, const short& ver); virtual int ReadPCG_Font(CXmlParse& xp, const short& ver); virtual int ReadPCG_Major(CXmlParse& xp, const short& ver); virtual int ReadPCG_Minor(CXmlParse& xp, const short& ver); virtual int ReadPCG_DataPropties(CXmlParse &xp, const short &ver); virtual int ReadPCG_TraceSection(CFile &fr, CXmlParse& xp, const short& ver); virtual int ReadPCG_SelfSection(CFile &fr, CXmlParse& xp, const short& ver); virtual int ReadPCG_SelfTraceSection(CFile &fr, CXmlParse& xp, const short& ver); virtual int ReadPCG_TraceSelf(CXmlParse& xp); int PCG_ReadTrackRenderStyle(CXmlParse& xp, const short &ver, CInTrackDepthSegment *pObj); int PCG_ReadTrackHunkContent(CXmlParse& xp, const short &ver, CInTrackTextBase *pObj); int PCG_ReadTrackBackBrush(CXmlParse& xp, const short &ver, GDFLOGBRUSH &gdfbrush); int PCG_ReadTrackBrush(CXmlParse& xp, const short &ver, CInTrackDepthSegment *pObj); int PCG_ReadTrackLayerStyle(CXmlParse& xp, const short &ver); ////读多井对比pcg格式的数据 //virtual int ReadPCG_DataSection(CFile &fr, const short& ver); //写pcg格式的道 virtual void WritePCG_Trace(CFile &fw, int nBaseTabNum); //写pcg格式的道内数据 virtual void WritePCG_Data(CFile &fw, int nBaseTabNum); //写自定义的扩展数据,写pcg及dml格式都可以用 virtual void WritePCG_Ext(CFile &fw, int nBaseTabNum); //写wellcolumn元素中的Trace索引标志,写pcg及dml格式都可以用 virtual void WritePCG_WellColTrace(CFile &fw, int nBaseTabNum); virtual void WritePCG_TraceTitle(CFile &fw, int nBaseTabNum); virtual void WritePCG_TraceHead(CFile &fw, int nBaseTabNum); virtual void WritePCG_TraceTail(CFile &fw, int nBaseTabNum); virtual void WritePCG_TraceMark(CFile &fw, int nBaseTabNum); //写pcg格式的道 virtual void WritePCG_TraceSection(CFile &fw, int nBaseTabNum); //写pcg格式的道内数据 virtual void WritePCG_DataSection(CFile &fw, int nBaseTabNum); virtual CRect8 GetDragMoveRect(); void SortChildrenOrderbyPos(); public: /*读取pcg文件时,某些文件会有重名的井道,这些重名井道应用到井列及数据读取时会有错误,因此使用这些变量进行井道的标定,每次进行pcg文件的读取时确保这些参数为FALSE 读取数据后,设置为TRUE,这样当有重名的道时,新读到的数据可以只应用到那些没有设置数据的井道 */ BOOL m_PcgAddColumn; BOOL m_PcgReadData; public: virtual int ReadPCG_Title(CKXmlParse& xp, const short& ver); virtual int ReadPCG_GridStyle(CKXmlParse& xp, const short& ver); virtual int ReadPCG_SymbolStyle(CKXmlParse& xp, const short& ver); virtual int ReadPCG_CurveStyle(CKXmlParse& xp, const short& ver); virtual int ReadPCG_StickStyle(CKXmlParse& xp, const short& ver); virtual int ReadPCG_Self( CKXmlParse& xp, const short& ver); virtual int ReadPCG_TraceMark(CKXmlParse& xp, const short& ver); virtual int ReadPCG_DataRef(CKXmlParse& xp, const short& ver); virtual int ReadPCG_Trace(CKXmlParse& xp, const short& ver, PCG_TRACECOL& traceCol, int fVerstion = 1); virtual int ReadPCG_Data(CKXmlParse& xp, const short& ver); virtual int ReadPCG_Font(CKXmlParse& xp, const short& ver); virtual int ReadPCG_Major(CKXmlParse& xp, const short& ver); virtual int ReadPCG_Minor(CKXmlParse& xp, const short& ver); virtual int ReadPCG_DataPropties(CKXmlParse &xp, const short &ver); virtual int ReadPCG_TraceSection(CKXmlParse& xp, const short& ver); virtual int ReadPCG_SelfSection(CKXmlParse& xp, const short& ver); virtual int ReadPCG_SelfTraceSection( CKXmlParse& xp, const short& ver); virtual int ReadPCG_TraceSelf(CKXmlParse& xp); int PCG_ReadTrackRenderStyle(CKXmlParse& xp, const short &ver, CInTrackDepthSegment *pObj); int PCG_ReadTrackHunkContent(CKXmlParse& xp, const short &ver, CInTrackTextBase *pObj); int PCG_ReadTrackBackBrush(CKXmlParse& xp, const short &ver, GDFLOGBRUSH &gdfbrush); int PCG_ReadTrackBrush(CKXmlParse& xp, const short &ver, CInTrackDepthSegment *pObj); int PCG_ReadTrackLayerStyle(CKXmlParse& xp, const short &ver); virtual void GetChildDatas(CString& jsonStr); virtual BOOL SetChildDatas(CString& jsonStr); protected: BOOL GetChildDatasFromJsonStr(CString& jsonStr, vector& fields, StringVectorSet& datas); };