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.

323 lines
12 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 "WellClassObjGroup.h"
#include "InTrackTextBase.h"
class CInTrackDepthSegment;
class CTrackGroup;
class CTrackObj;
typedef std::list<CTrackObj*> 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<CString> m_VecConfigField; // 配置字段
CString m_strConfigTableOther; // 配置表名(岩样道时使用)
vector<CString> 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); //计算斜井情况下的道头区域,cxcy旋转中心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<CPoint2D>& 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<CString> &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<CString>& fields, StringVectorSet& datas);
};