#ifndef TRACKDEPTH_H #define TRACKDEPTH_H #pragma once ////////////////////////////////////////////////////////////////////////////// //文件 TrackdepthObj.h //主要功能: // 深度道类 ///////////////////////////////////////////////////////////////////////////// class CInclinedTrack; class AFX_EXT_CLASS CTrackDepth : public CInclinedTrack { protected: //DECLARE_SERIAL(CTrackDepth); void Init(); public: CTrackDepth(); CTrackDepth(const CRect8& position); virtual ~CTrackDepth(); CLONE_WELLOBJECT(CTrackDepth) virtual void operator=(CTrackDepth& object); public: double m_fLevel; // 补心海拔 double m_fMajorGrid; // 主刻度间隔 double m_fMinorGrid; // 次刻度间隔 double m_fMajorWidth; // 主刻度宽度占道宽比例 double m_fMinorWidth; // 次刻度宽度占道宽比例 GDFLOGPENEXT m_penGridMajor; // 主刻度笔 GDFLOGPENEXT m_penGridMinor; // 次刻度笔 GDFLOGFONTEXT m_fontGridMark; // 标注字体 CString m_TextAlign; // 对齐方式 protected: DWORD m_nTrackDepthFlags; // 深度道状态 // 曲线道Flags enum TrackCurveFlags { TrackDepthFlagMarkUnit = 0x0001, // 显示标注单位 TrackDepthFlagGridMinor = 0x0002, // 画次刻线 TrackDepthFlagMarkLeft = 0x0004, // 左标注 TrackDepthFlagHideTitle = 0x0008, // 隐藏标题 TrackDepthFlagMarkLevel = 0x0010, // 海拔刻度 TrackDepthFlagMarkFeet = 0x0020, // 英制单位 TrackDepthFlagGrid = 0x0040, // 显示刻标 TrackDepthFlagMarkArrange = 0x0080, // 竖直显示标注 TrackDepthFlagGridMin = 0x0100, // 画最小刻线 TrackDepthFlagGridFit = 0x0200, // 固定刻线大小 TrackDepthFlagMarkBk = 0x0400 // 显示标注背景(白色) }; //DWORD m_nDepthTraceStyleFlags; //分层道绘制样式 0-不绘制边线 1-绘制左边线 2-绘制上边线 4-绘制右边线 8-绘制下边线 11-仅绘制左边线 ////14-仅绘制右边线 15-绘制全部边线 //enum LayerTraceStyleFlags //{ // TraceStyleFlagNoLine = 0x0000, // // TraceStyleFlagLeftLine = 0x0001, // // TraceStyleFlagTopLine = 0x0002, // // TraceStyleFlagRightLine = 0x0004, // // TraceStyleFlagBottomLine = 0x0008, // TraceStyleFlagOnlyLeftLine = TraceStyleFlagBottomLine|TraceStyleFlagTopLine|TraceStyleFlagLeftLine, // TraceStyleFlagOnlyRightLine = TraceStyleFlagBottomLine|TraceStyleFlagTopLine|TraceStyleFlagRightLine, // TraceStyleFlagAllLine = TraceStyleFlagBottomLine|TraceStyleFlagTopLine|TraceStyleFlagLeftLine|TraceStyleFlagRightLine //}; // Implementation public: virtual void DrawdepthMark(CXyDC* pDC); // 画道标 virtual void Draw(CXyDC* pDC); virtual void Serialize(CArchive& ar, const short &ver); //设置格子属性 virtual void SetPenGrid(GDFLOGPENEXT& penmajor, GDFLOGPENEXT& penminor); //设置道字体属性 virtual void SetFontGridMark(GDFLOGFONTEXT& font); //设置刻度间隔 virtual void SetSpace(double major, double minor); //开关变量值 virtual void SetTrackDepthFlags(DWORD flags); virtual void SetShowMarkUnit(BOOL bFlag); virtual void SetShowGridMinor(BOOL bFlag); virtual void SetShowGrid(BOOL bFlag); virtual void SetMarkLeft(BOOL bFlag); virtual void SetMarkFeet(BOOL bFlag); virtual void SetMarkArrange(BOOL bFlag); virtual void SetMarkLevel(BOOL bFlag); virtual void SetShowGridMin(BOOL bFlag); virtual void SetGridFit(BOOL bFlag); virtual void SetShowMrakBk(BOOL bFlag); virtual DWORD GetTrackDepthFlags(); virtual BOOL IsShowMarkUnit(); virtual BOOL IsShowGridMinor(); virtual BOOL IsShowGrid(); virtual BOOL IsMarkLeft(); virtual BOOL IsMarkFeet(); virtual BOOL IsMarkArrange(); virtual BOOL IsMarkLevel(); virtual BOOL IsShowGridMin(); virtual BOOL IsGridFit(); virtual BOOL IsShowMrakBk(); //计算刻度线标 virtual void CalcBorders(); public: //读深度道属性 virtual int ReadPCG_Self(CFile &fr,CXmlParse& xp,const short& ver ); //读多井深度道属性 virtual int ReadPCG_SelfSection(CFile &fr,CXmlParse& xp,const short& ver); //新版pcg读取welltrace头 virtual int ReadPCG_TraceSelf(CXmlParse& xp); //读取网格 virtual int ReadPCG_GridStyle(CXmlParse& xp,const short& ver); /// 2015.05.04 删状图读取字体以及网格属性 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); //写pcg格式的道 virtual void WritePCG_Trace(CFile &fw,int nBaseTabNum); //写pcg格式的道内数据 virtual void WritePCG_Data(CFile &fw,int nBaseTabNum); //写pcg格式的道 virtual void WritePCG_TraceSection(CFile &fw,int nBaseTabNum); //写pcg格式的道内数据 virtual void WritePCG_DataSection(CFile &fw,int nBaseTabNum); struct STick //刻度标 { CPoint2D pt1; //边界上的端点 CPoint2D pt2; //道内部的端点 CString text; //标注的文字 }; virtual void SetFontScale(double yScale);// 字符缩放先按照y同比例缩放 protected: //画斜井道深度道标 void DrawdepthMarkInclined(CXyDC* pDC); //画直井深度道标 void DrawdepthMarkStraight(CXyDC* pDC); //根据桩号,获取刻线,startIndex为开始序号,lratio 为目标桩号占总桩号比例,widRatio为刻度线宽度占道宽比例 void GetTick(int& sIndexLeft, int& sIndexRight, CPoint2D& ptHead, CPoint2D& ptTail, double lratio, double widRatio ); //根据桩号,获取刻线,和对侧点,startIndex为开始序号,lratio 为目标桩号占总桩号比例,widRatio为刻度线宽度占道宽比例 void GetTick(int& sIndexLeft, int& sIndexRight, CPoint2D& ptHead, CPoint2D& ptTail, CPoint2D& ptOpposit, double lratio, double widRatio ); //获取深度间隔delt_dep对应的桩号长度 double GetDeltL(double delt_dep); //由已知直线的向量,和直线上一端点pt1,斜率k 和长度dist < 0为左侧点,dist > 0 为右侧点 计算线段另一端点pt2 //已修改,需事先指定变量a,b,k k2 ks void CalcSegPoint(/*double a, double b,*/ CPoint2D& pt1, CPoint2D& pt2,/* double k,*/ double dist); //计算曲线第i点到i+1点之间的向量, a,b,垂向斜率k,k2 void CalcCoefficient(CCurve& curve,int index); //根据与pt1的距离计算线段上某点 CPoint2D CalcMidPoint(CPoint2D& pt1, CPoint2D& pt2,double dist2pt1); double a,b; double k,k2; double s; //s = sqrt((1/(k2 + 1))); //刻度标集 list m_ticks; public: virtual int ReadPCG_Self(CKXmlParse& xp, const short& ver); //读多井深度道属性 virtual int ReadPCG_SelfSection( CKXmlParse& xp, const short& ver); //新版pcg读取welltrace头 virtual int ReadPCG_TraceSelf(CKXmlParse& xp); //读取网格 virtual int ReadPCG_GridStyle(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); }; #endif