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

GDI/图象编程

开发平台:

Visual C++

  1. // QLineObj.h: interface for the CQLineObj class.
  2. //
  3. //////////////////////////////////////////////////////////////////////
  4. #include "QBaseObj.h"
  5. #include "QPointArray.h"
  6. #include "QCoordSys.h"
  7. #if !defined(AFX_QLINEOBJ_H__B550BECE_CA9D_4562_8068_7731453D7E3F__INCLUDED_)
  8. #define AFX_QLINEOBJ_H__B550BECE_CA9D_4562_8068_7731453D7E3F__INCLUDED_
  9. #if _MSC_VER > 1000
  10. #pragma once
  11. #endif // _MSC_VER > 1000
  12. //////////////////////////////////////////
  13. ///***************CQGIS****************///
  14. ///类    名:CQLineObj
  15. ///基    型:CQBaseObj
  16. ///说    明:线类型
  17. ///***************CQGIS****************///
  18. //////////////////////////////////////////
  19. class AFX_EXT_CLASS CQLineObj : public CQBaseObj
  20. {
  21. public:
  22. CQLineObj();
  23. virtual ~CQLineObj();
  24. CQLineObj(CQLineObj & lObj); 
  25. void Copy(CQLineObj & lObj);     //以基类对象作为参数
  26. BOOL IsClosed();                 //获取是否
  27. void SetLineClosed(BOOL bClosed);//设置线对象的封闭状态
  28. static CQLineObj * Create(CQPointArray & ptArray); //由点集创建线对象
  29. //显示图元
  30. //m_nDrawMode为下列值之一
  31. //R2_BLACK , //R2_COPYPEN , //R2_MASKNOTPEN 
  32. //R2_MASKPEN  //R2_MASKPENNOT  //R2_MERGENOTPEN 
  33. //R2_MERGEPEN  //R2_MERGEPENNOT   //R2_NOP  
  34. //R2_NOT  ///R2_NOTCOPYPEN  //R2_NOTMASKPEN 
  35. //R2_NOTMERGEPEN  //R2_NOTXORPEN  //R2_WHITE //R2_XORPEN 
  36. virtual void Display(CQCoordSys * pSys,CDC * pDC,int nDrawMode,int nSpecialMode,COLORREF * pColor);
  37. virtual void Move(double dx,double dy);  //移动线对象
  38. virtual void Rotate(CQPoint & pt,double & fAngleDegree); //旋转线对象
  39. //镜像操作 0-Y轴镜像1-X轴镜像3-原点镜像
  40. virtual void Mirror(int nMirrorType,CQPoint & ptOrign,CQLineObj * pNewLine);
  41. virtual void GetBoundingRect(CBoundaryRect * pRect); // 计算线对象的边界矩形
  42. virtual BOOL Select(CQCoordSys * pSys,CBoundaryRect & rect); // 框选
  43. virtual BOOL Select(CQCoordSys * pSys,CQPoint & pt,double fEffactDistance);
  44. virtual void Serialize(CArchive& ar); // 线图元的序列化
  45. virtual void XFlex(double dcp_x,double dFlex); //按照X轴进行缩放
  46. // 所有图元y坐标的按照中心点y坐标和缩放倍数缩放,dFlex>1会放大,dFlex<1会缩小 /
  47. virtual void YFlex(double dcp_y,double dFley); 
  48. virtual CString VarToStr();
  49. virtual void CalculateBoundary(CBoundaryRect * pRect = 0 /* = 0 */);
  50. double GetLineLength(); //获取线条长度 
  51. void SetShowPointFlag(BOOL bShowPt);  // 设置显示点的状态
  52. BOOL GetShowPointFlag();              // 获取是否显示点的状态
  53. void SetStartNodeID(long lStartID);   //设置起始结点ID
  54. void SetEndNodeID(long lEndID);       //设置终止结点ID
  55. void SetLeftAreaID(long lLeftID);     //设置左多边形的ID
  56. void SetRightAreaID(long lRightID);   //设置右多边形ID
  57. long GetStartNodeID();
  58. long GetEndNodeID();
  59. long GetLeftAreaID();
  60. long GetRightAreaID();
  61. long GetPtInWndport(CQCoordSys * pSys);
  62. // 线条抽稀
  63. void PtListBeThin(double dThinScale);
  64. //设置样条曲线的类型
  65. inline void SetSplineType(int nSplineType);
  66. //获取样条曲线的类型
  67. inline int GetSplineType() const; 
  68. void CalculateDisplayPtlist(); //计算折线显示时候的点阵
  69. virtual void WriteToFile(CFile * pFile);
  70. virtual void ReadFromFile(CFile * pFile); 
  71. inline void SetElevation(double fEle);
  72. double GetElevation() const;
  73. public:
  74. CQPointArray m_PtList;  //构成线对象的所有点
  75. CQPointArray m_ptListDisplay; //显示用的点数组
  76. protected:
  77. BOOL m_bClosed;         //是否圈闭
  78. BOOL m_bShowPt;         //是否显示线条的端点
  79. double m_fElevation;    //线条的高程信息
  80. ////线条样式: 0-普通线条; 1-插值曲线; 2-二次B样条; 3-三次B样条
  81. int m_nSplineType;
  82. protected:
  83. //拓扑信息存储
  84. long m_lStartNode; //开始节点ID
  85. long m_lEndNode; //结束节点ID
  86. long m_lLeftArea; //左边区域ID
  87. long m_lRightArea; //右边区域ID
  88. CBoundaryRect m_Boundary;       //直线的边界矩形对象
  89. };
  90. #endif // !defined(AFX_QLINEOBJ_H__B550BECE_CA9D_4562_8068_7731453D7E3F__INCLUDED_)