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.

180 lines
6.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 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,垂向斜率kk2
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<STick> 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