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.

203 lines
6.3 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 CWellBaseObj_H
#define CWellBaseObj_H
#pragma once
#include "WellCommonDef.h"
#include "WellCommonFunction.h"
#include "NGraphExtend.h"
#include "DrawOperator/KXmlParse.h"
//For any coordinates (x, y) in world space, the transformed coordinates in page
//space (x', y') can be determined by the following algorithm:
//x' = x * eM11 + y * eM21 + eDx,
//y' = x * eM12 + y * eM22 + eDy,
//where the transformation matrix is represented by the following:
// | eM11 eM12 | | 1 0 | | m[0] m[1] |
//Matrix = | eM21 eM22 | = | 0 1 | = | m[2] m[3] |
// | eDx eDy | | 0 0 | | m[4] m[5] |
//XFORM struct
//matrix中的顺序为m11=scaleX, m12=, m21, m22=scaleY, m31=eDx, m32=eDy
static DWORD64 s_Number = 0;
class CWellPole;
class CBaseExtend;
class AFX_EXT_CLASS CWellBaseObj : public CBaseExtend
{
protected:
void Init();
public:
CWellBaseObj();
CWellBaseObj(const CRect8& rect);
virtual ~CWellBaseObj();
public:
GDFLOGPENEXT m_pen; //笔属性
GDFLOGBRUSH m_brush; //刷子属性
GDFLOGFONTEXT m_font; //字体属性
CPoint2D m_delta; //记录对象的移动位置
protected:
CWellBaseObj* m_pParent;
CRect8 m_position;
int m_type;
DWORD m_nFlags; //图元基本状态
DWORD m_nId;
CXy* m_pParentXY;
int m_nViewState;
public:
virtual CBaseExtend* CreateClone() { return NULL; }; //如果需要继承对象在CXy拷贝时发生作用就需要实现这个函数它负责给COne的value 复制扩展对象
virtual void* CloneElement(void) { return NULL; };
//编辑、可视状态
virtual BOOL IsCanEdit(void);
virtual BOOL IsView(void);
CWellBaseObj* GetParent() { return m_pParent; };
void SetParent(CWellBaseObj* pParent) { m_pParent = pParent; };
virtual CRect8 GetRect(void);
virtual void GetRange(CRect8& range);
virtual BOOL IsInRange(CRect8& range);
virtual void SetRange(CRect8& range);
virtual int GetType(void) { return m_type; };
virtual void SetType(int type) { m_type = type; }
virtual CWellPole* GetWell();
virtual CXy* GetParentXY() { return m_pParentXY; }
virtual void SetParentXY(CXy* pxy) { m_pParentXY = pxy; }
static CWellBaseObj* CWellBaseObj::CreateObj(int eType);
static void cTransform(CXyDC* pDC, float* matrix, double& x, double& y, BOOL bUndo);
static void cTransformPoint(float* matrix, double& x0, double& y0, BOOL bUndo);
static void cTransformPoint(float* matrix, CPoint2D& pt, BOOL bUndo);
static void cTransformCurve(CXyDC* pDC, CCurveEx& curve, float* matrix, BOOL bUndo);
static void cTransform(CXyDC* pDC, CRect8& rect, float* matrix, BOOL bUndo);
protected:
// 图元笔、刷子等 Flags
enum BaseFlags
{
FlagNULL = 0x0000, //空白
FlagPen = 0x0001, //使用笔
FlagBrush = 0x0002, //使用刷子
FlagCompound = 0x0004, //复合图元
FlagMove = 0x0008, //移动
FlagDepth = 0x0100, //显示深度值
FlagActionTemplate = 0x1000,// 写模板
FlagActionNoSaveData = 0x2000,// 不备份数据(针对大数据,撤销重做使用)
FlagNoSaveCallouts = 0x4000,// 不保存井位数据
};
public:
virtual LPVOID GetLogFont();
virtual void SetLogPen(LPVOID plogPen); //笔属性
virtual void SetlogBrush(LPVOID plogBrush); //刷子属性
virtual void SetLogFont(LPVOID pLogFont);
//virtual void SetTextFlags( CTextFlags& textFlags);
CRect8 & GetPos() { return m_position; };
virtual void SetDelta(CPoint2D delta) { m_delta = delta; }
virtual CPoint2D GetDelta() { return m_delta; };
//当前选择对象
// virtual CWellBaseObj* SelectWho() { return this; };
//删除对象
virtual BOOL DeleteSelection();
//开关变量值
virtual void SetFlags(DWORD flags);
virtual void SetFlagPen(BOOL bFlag);
virtual void SetFlagBrush(BOOL bFlag);
virtual void SetFlagCompound(BOOL bFlag);
virtual void SetFlagMove(BOOL bFlag);
virtual void SetFlagDepth(BOOL bFlag);
virtual DWORD GetFlags();
virtual BOOL IsFlagPen();
virtual BOOL IsFlagBrush();
virtual BOOL IsFlagCompound();
virtual BOOL IsFlagMove();
virtual BOOL IsFlagDepth();
//操作类开关变量
virtual BOOL IsActionTemplate();
virtual void SetActionTemplate(BOOL b);
virtual BOOL IsActionNoSaveData();
virtual void SetActionNoSaveData(BOOL b);
virtual BOOL IsNoSaveCallouts();
virtual void SetNoSaveCallouts(BOOL b);
//设置文本字体
virtual void SetTextFont(GDFLOGFONTEXT logfont);
//绘制
virtual void Draw(CXyDC *pDC);
virtual void Draw(CXyDC &pDC);
virtual void DrawHandle(CXyDC* pDC);
//画文本内容(换行处理) nHor = 0,1,2, nVer = 0,12上)
virtual void DrawTextContent(CXyDC* pDC, CString text, CRect8 rect, GDFLOGFONT *plogFont, int nHor = 1, int nVer = 1, double angle = 0);
//添加标题
virtual void AddTitleName(CString text, CRect8 rect, GDFLOGFONT *plogFont, int nAlign = 1);
//控制点操作函数
virtual int GetHandleCount();
virtual CPoint2D GetHandle(int nHandle);
virtual CRect8 GetHandleRect(int nHandleID, double dHandleSize);
//交互操作函数
virtual void MoveTo(CRect8& position);
virtual void MoveHandleTo(int nHandle, CPoint2D point);
virtual CWellBaseObj* ObjectAt(const CRect8& rect, double dHandleSize, BOOL bNesting = FALSE);//objectAt用来挖掘选中的最深层次的子对象.
virtual int HitTest(CPoint2D point, double dHandleSize, BOOL bSelected);
virtual BOOL Intersects(const CRect8& rect, double dHandleSize);
virtual void Serialize(CArchive& ar, const short &ver);
virtual void SerializeHead(CArchive& ar, const short& ver);
virtual void SerializeTail(CArchive& ar, const short& ver);
virtual void operator=(CWellBaseObj& object);
//重设矩形范围
virtual void ReSetPosition(CRect8 rect);
//标准化文字操作
virtual void NormalText();
//范围操作
virtual CRect8 GetPosition(void);
virtual CRect8 GetSelectedRange(void);
virtual void Transform(CXyDC* pDC, float* matrix, BOOL bUndo = FALSE);//matrix length is 6
//数据
virtual void TransferData(CWellBaseObj* pObj) {}
// 实际宽度与屏幕宽度坐标转换
double WidthToScreenCX(double dWidth/* 实际宽度cm */);
double ScreenCXToWidth(double dCX);
double HeightToScreenCY(double dHeight/* 实际高度mm */);
double ScreenCYToHeight(double dCY);
//根据图元类型构建对象
//static CObjectBase* CreateObj(EElementType eType);
virtual BOOL IsTrackChildTopEnd() { return FALSE; }; //是否是道内的子对象
virtual int GetId();
virtual void SetId(int id);
virtual int GetViewState() { return m_nViewState; };
virtual void SetViewState(int state) { m_nViewState = state; }
virtual BOOL IsDerivedTextBase(){ return FALSE; }
};
typedef std::list<CWellBaseObj*> WELLOBJLIST;
typedef std::vector<CWellBaseObj*> WELLOBJVECTOR;
#endif