QBaseObj.h
上传用户:oybseng
上传日期:2015-04-27
资源大小:7831k
文件大小:7k
源码类别:

GDI/图象编程

开发平台:

Visual C++

  1. // QBaseObj.h: interface for the CQBaseObj class.
  2. //
  3. //////////////////////////////////////////////////////////////////////
  4. #if !defined(AFX_QBASEOBJ_H__85C41B71_9C1A_4072_9688_328E9CA6E462__INCLUDED_)
  5. #define AFX_QBASEOBJ_H__85C41B71_9C1A_4072_9688_328E9CA6E462__INCLUDED_
  6. #if _MSC_VER > 1000
  7. #pragma once
  8. #endif // _MSC_VER > 1000
  9. class CQCoordSys;
  10. enum enumQObjType
  11. {
  12. QGIS_UNKNOW = 0,
  13. QGIS_POINT, //点
  14. QGIS_LINE,  //线
  15. QGIS_AREA,  //区
  16. QGIS_LABEL, //文本
  17. QGIS_CIRCLE //圆
  18. };
  19. //自定义点坐标类
  20. //用于存放一个点位坐标值
  21. //////////////////////////////////////////
  22. ///***************CQGIS****************///
  23. ///类    名:CQPoint
  24. ///基    型:无
  25. ///说    明:点位坐标类
  26. ///***************CQGIS****************///
  27. //////////////////////////////////////////
  28. class AFX_EXT_CLASS CQPoint : public CObject
  29. {
  30. public:
  31. CQPoint();
  32. CQPoint(const CQPoint & pt);                   //拷贝构造
  33. CQPoint(double dx,double dy);
  34. void Copy(const CQPoint & pt);                       //点对象坐标值拷贝
  35. virtual ~CQPoint(){}; // 析构函数 
  36. inline double GetX() const;
  37. inline double GetY() const;
  38. void SetPoint(double dx,double dy);
  39. CQPoint & operator  = (CQPoint & pt); //对点进行赋值
  40. BOOL operator == (CQPoint & pt );     //判断两个点是否相等
  41. //BOOL operator == (CQPoint & pt1,CQPoint & pt2); // 属于类的而不是对象
  42. BOOL operator !=(CQPoint & pt);
  43. double Distance(CQPoint & pt);        //计算两点之间的距离
  44. double Distance(double dx,double dy);
  45. double Distance(CQPoint & pt1,CQPoint & pt2); //点到直线的距离
  46. double YAxisDistance(CQPoint & pt);
  47. double XAxisDistance(CQPoint & pt);
  48.     static double Distance(CQPoint & pt,CQPoint & pt1,CQPoint & pt2); // 点到直线的距离计算
  49. static double Distance(CQPoint & pt,double xx,double yy);         // 两点之间的距离
  50. static double Distance(double x1,double y1,double x2,double y2);  // 两点之间的距离
  51. static double DistanceHasFlag(CQPoint & pt1,CQPoint & pt2);
  52. BOOL PtInLine(CQPoint & pt1,CQPoint & pt2); //判断点是否在直线上
  53. static BOOL PtInLine(CQPoint & pt,CQPoint & pt1,CQPoint & pt2);
  54. short OrientationPtToPt(CQPoint & pt);
  55. static short OrientationPtToPt(CQPoint & pt1,CQPoint & pt2);
  56. DECLARE_SERIAL(CQPoint);
  57. virtual void Serialize(CArchive& ar);
  58. virtual void WriteToFile(CFile * pfile);
  59. virtual void ReadFromFile(CFile * pfile);
  60. void Move(double dx,double dy);
  61. void SetX(double dx);
  62. void SetY(double dy);
  63. protected:
  64. double m_fx;
  65. double m_fy;
  66. };
  67. //外接矩形类,用于表示几何对象的边界矩形
  68. //////////////////////////////////////////
  69. ///***************CQGIS****************///
  70. ///类    名:CBoundaryRect
  71. ///基    型:无
  72. ///说    明:图元的边界矩形类
  73. ///***************CQGIS****************///
  74. //////////////////////////////////////////
  75. class AFX_EXT_CLASS CBoundaryRect :public CObject // 对象的边界矩形对象
  76. {
  77. public:
  78. CBoundaryRect();
  79. CBoundaryRect(CBoundaryRect & Box);
  80. virtual ~CBoundaryRect(); //析构函数
  81. void Copy(CBoundaryRect & Box);
  82. BOOL PtInRect(CQPoint & pt);
  83. void SetRect(double fMinx,double fMinY,double fMaxX,double fMaxY);
  84. CQPoint CenterPoint(); //计算矩形的中心点
  85. BOOL IsValid(); // 判断边界矩形是否有效
  86. inline void Offset(CQPoint & pt); //矩形沿点偏移
  87. inline void Offset(double dx,double dy);
  88. CBoundaryRect & operator = (CBoundaryRect & Box);
  89. CBoundaryRect * UnionBoundary(CBoundaryRect * pBox); // 求两个矩形的最小边界矩形
  90. void Union(CBoundaryRect * pRect);
  91. CBoundaryRect * Cutout(CBoundaryRect * pBox);        // 矩形的裁剪
  92. BOOL IsCross(CBoundaryRect * pBox);                  // 判断矩形是否相交
  93. inline double GetLeftBottomX();
  94. void SetLeftBottomX(double lx);
  95. inline double GetLeftBottomY();
  96. void SetLeftBottomY(double ly);
  97. inline double GetRightTopX();
  98. void SetRightTopY(double ry);
  99. inline double GetRightTopY();
  100. void SetRightTopX(double rx);
  101. double Width();
  102. double Height();
  103. DECLARE_SERIAL(CBoundaryRect);
  104. virtual void Serialize(CArchive & ar);
  105. CString VarToStr();
  106. virtual void WriteToFile(CFile * pFile);
  107. virtual void ReadFromFile(CFile * pFile);
  108. void Lager(double dStep);
  109. void Smaller(double dStep);
  110. public:
  111. double m_fMinX;
  112. double m_fMinY;
  113. double m_fMaxX;
  114. double m_fMaxY;
  115. };
  116. //////////////////////////////////////////
  117. ///***************CQGIS****************///
  118. ///类    名:CQBaseObj
  119. ///基    型:CObject
  120. ///说    明:所有图元对象的基类
  121. ///***************CQGIS****************///
  122. //////////////////////////////////////////
  123. class AFX_EXT_CLASS CQBaseObj  : public CObject
  124. {
  125. public:
  126. CQBaseObj();  // 默认构造函数
  127. CQBaseObj(const CQBaseObj & tmObj); //拷贝构造
  128. virtual void Copy(const CQBaseObj & tmObj); // 对象的复制  虚函数
  129. virtual ~CQBaseObj();
  130. // 基本图元操作
  131. inline void SetObjID(long &);
  132. inline long GetObjID() const;
  133. void SetObjName(CString & szName);
  134. inline CString GetObjName() const;
  135. void SetObjLayerID(const long & lLayerID);
  136. inline long GetObjLayerID() const;
  137. void SetObjMapID(const long & lMapID);
  138. inline long GetObjMapID() const;
  139. void SetobjLineType(short & nLineType);
  140. inline short GetObjLineType() const;
  141. void SetObjPenColor(COLORREF & crPen);
  142. inline COLORREF GetObjPenColor() const;
  143. void SetObjBrushColor(COLORREF & brcolor);
  144. inline COLORREF GetObjBrushColor() const;
  145. void SetObjLineWidth(double & fLineWidth);
  146. inline double GetObjLineWidth() const;
  147. inline void SetObjType(short &);
  148. inline short GetObjType() const;
  149. void SetObjDeleted(BOOL bDeleted);
  150. inline BOOL GetObjDeleted() const;
  151. void SetObjHided(BOOL bHided);
  152. inline BOOL GetObjHided() const;
  153. void SetObjSelected(BOOL bSelected);
  154. inline BOOL GetObjSeleted() const;
  155. //其他操作
  156. virtual void Serialize(CArchive& ar);
  157. static  void Rotate(CQPoint * ptR,CQPoint & ptO,double & fAngleDegree);
  158. virtual void Move(double dx,double dy) = 0;
  159. virtual void Rotate(CQPoint & pt,double & fAngleDegree) = 0;
  160. virtual void GetBoundingRect(CBoundaryRect * pRect) = 0;
  161. virtual void CalculateBoundary(CBoundaryRect * pRect = 0) = 0;//计算图元的边界矩形
  162. virtual BOOL Select(CQCoordSys * pSys,CQPoint & pt, double fEffectDistance) = 0; //点选
  163. virtual BOOL Select(CQCoordSys * pSys,CBoundaryRect & rect) = 0; //框选
  164. virtual void Display(CQCoordSys * pSys,CDC * pDC,int nDrawMode,int nSpecialMode,COLORREF * pColor) = 0;
  165. // 所有图元x坐标的按照中心点x坐标和缩放倍数缩放,dFlex>1会放大,dFlex<1会缩小
  166. virtual void XFlex(double dcp_x,double dFlex)=0;
  167. // 所有图元y坐标的按照中心点y坐标和缩放倍数缩放,dFlex>1会放大,dFlex<1会缩小
  168. virtual void YFlex(double dcp_x,double dFlex)=0;
  169. virtual void WriteToFile(CFile * pFile);
  170. virtual void ReadFromFile(CFile * pFile);
  171. virtual CString  VarToStr();  //将图元的值转换为字符串格式
  172. private:
  173. long SetObjIndex();
  174. long SetObjIDByRand();
  175. protected: 
  176. //图元基类属性
  177. long m_lObjID;       //图元对象的唯一标识号
  178. long m_lLayerID;     //图元所在图层的唯一识别号
  179. long m_lMapID;       //图元所在的图幅的唯一识别号
  180. CString m_szObjName;   //图元名称
  181. COLORREF m_crPenColor; //边框颜色 线条颜色
  182. COLORREF m_crBrushColor; //填充颜色 实体颜色
  183. double  m_fLineWidth;  //图元的线条宽度,单位为毫米
  184. short   m_nLineType;   //图元线型
  185. short   m_nObjType;    //图元对象的类型1-  点 2 - 线 3 - 面 
  186. BOOL m_bDeleted;     //图元的删除状态
  187. BOOL m_bHided;       //图元的显示状态
  188. BOOL m_bSelected;    //图元的选择状态
  189. };
  190. #endif // !defined(AFX_QBASEOBJ_H__85C41B71_9C1A_4072_9688_328E9CA6E462__INCLUDED_)