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

GDI/图象编程

开发平台:

Visual C++

  1. // QEllipseObj.h: interface for the CQEllipseObj class.
  2. //
  3. //////////////////////////////////////////////////////////////////////
  4. #if !defined(AFX_QELLIPSEOBJ_H__3553C38F_41CA_41C3_9FE1_65F7C4D4EECA__INCLUDED_)
  5. #define AFX_QELLIPSEOBJ_H__3553C38F_41CA_41C3_9FE1_65F7C4D4EECA__INCLUDED_
  6. #if _MSC_VER > 1000
  7. #pragma once
  8. #endif // _MSC_VER > 1000
  9. #include "QBaseObj.h"
  10. #include "QPointArray.h"
  11. //////////////////////////////////////////
  12. ///***************CQGIS****************///
  13. ///类    名:CQEllipseObj
  14. ///基    型:CQBaseObj
  15. ///说    明:椭圆对象类型
  16. ///***************CQGIS****************///
  17. //////////////////////////////////////////
  18. class AFX_EXT_CLASS CQEllipseObj : public CQBaseObj  
  19. {
  20. public:
  21. CQEllipseObj();
  22. CQEllipseObj(double dx,double dy,double fLongAxis,double fShortAxis,double fStartAngle,
  23. double fEndAngle,double fRotateAngle);
  24. CQEllipseObj(CQEllipseObj & tmEllipse);       //拷贝构造函数
  25.   virtual void Copy(CQEllipseObj & tmEllipse);  //拷贝函数
  26. virtual ~CQEllipseObj();
  27. static CQEllipseObj * CreateEllipse(CQPoint ptCenter,double fLongAxis,double fShortAxis,double fStartAngle,
  28. double fEndAngle,double fRotateAngle);  //创建一个 椭圆对象以指针形式返回
  29. virtual void Display(CQCoordSys * pSys,CDC * pDC,int nDrawMode,int nSpecialMode,COLORREF * pColor);
  30. virtual void Move(double dx,double dy); //偏移椭圆对象
  31. virtual void Rotate(CQPoint & pt,double & fAngleDegree);
  32. //镜像对象 nMirrorType: 0 - 原点镜像, 1 - X轴镜像, 2 - Y轴镜像
  33. virtual void Mirror(int nMirrorType);  //镜像类型
  34. virtual void CalculateBoundary(CBoundaryRect * pRect /* = 0 */); //计算椭圆对象的边界矩形
  35. virtual void GetBoundingRect(CBoundaryRect * pRect);             //获取对象的边界矩形
  36. virtual BOOL Select(CQCoordSys * pSys,CBoundaryRect & rect);     //框选 
  37. virtual BOOL Select(CQCoordSys * pSys,CQPoint & pt,double fEffectiveDistance);
  38. virtual void Serialize(CArchive& ar);    //串行化
  39. // 所有图元x坐标的按照中心点x坐标和缩放倍数缩放,dFlex>1会放大,dFlex<1会缩小 // [9/5/2006 Jchen] 
  40. // 暂时没有实现 
  41. virtual void XFlex(double dcp_x,double dFlex);
  42. // 所有图元y坐标的按照中心点y坐标和缩放倍数缩放,dFlex>1会放大,dFlex<1会缩小 // [9/5/2006 Jchen] 
  43. // 暂时没有实现 
  44. virtual void YFlex(double dcp_x,double dFlex);
  45. double GetPerimeter(); //获取线条的周长,获取的是封闭的椭圆的周长
  46. double GetArcLength(); //获取线条的长度
  47. double GetArea(); //获取面积,获取的是封闭的椭圆的面积
  48. //通过给定的角度,计算椭圆在该角度的点的坐标, dAngleDeg为角度
  49. void CalculatePointByAngleRad(double dAngleRad, double &x, double &y);
  50. void CalculatePointByAngleRad(double dAngleRad, CQPoint &pt);
  51. CQPointArray * GetPointList();
  52. public://内存操作
  53. virtual void WriteToFile(CFile * pf);
  54. virtual void ReadFromFile(CFile * pf);
  55. virtual CString VarToStr(); //将对象的成员信息转换成字符串信息
  56. public://对象剪贴板操作
  57. inline double GetLongAxis(); //获取椭圆长轴
  58. inline void SetLongAxis(double a); //设置椭圆长轴
  59. inline double GetShortAxis(); //获取椭圆短轴
  60. inline void SetShortAxis(double b); //设置椭圆短轴
  61. inline void GetCenterPoint(double &x, double &y); //获取椭圆中心点
  62. inline void GetCenterPoint(CQPoint &pt); //获取椭圆中心点
  63. void SetCenterPoint(double x, double y); //设置椭圆中心点
  64. void SetCenterPoint(CQPoint pt); //设置椭圆中心点
  65. inline double GetStartAngleRad(); //获取椭圆起始角度
  66. inline void SetStartAngleRad(double dAngDeg); //设置椭圆起始角度
  67. inline double GetEndAngleRad(); //获取椭圆终止角度
  68. inline void SetEndAngleRad(double dAngDeg); //设置椭圆终止角度
  69. inline double GetRotateAngleRad(); //获取椭圆旋转角度
  70. inline void SetRotateAngleRad(double dAngDeg); //设置椭圆旋转角度
  71. //设定椭圆的参数,五个参数一起设置,这样只需计算一次点阵
  72. void SetEllipseParams(double dCenterX,double dCenterY,double dMajorAxis,
  73. double dMinorAxis,double dStartAngleRad,double dEndAngleRad,double dRotateAngleRad);
  74. void RecalculatePtlist();//通过椭圆的参数, 重新计算椭圆显示,选择时需要的点阵
  75. protected:
  76. void DisplayPolyline(CQCoordSys * pSys,CDC * pDC,int nDrawMode,int nSpecialMode,COLORREF * pColor);   //以画折线的方式进行逼近
  77. void DisplayPolygon(CQCoordSys * pSys,CDC * pDC,int nDrawMode,int nSpecialMode,COLORREF * pColor);    //以画区的方式进行逼近
  78. private: //成员变量 
  79. CQPoint m_ptCenter;       //椭圆的中心点坐标
  80. double m_fLongAxis;       //椭圆长轴
  81. double m_fShortAxis;   //椭圆短轴
  82. double m_fStartAngleRad;  //椭圆起始角度
  83. double m_fEndAngleRad;    //椭圆终止角度
  84. double m_fRotateAngleRad; //椭圆旋转角度
  85. CQPointArray m_PtList;    //椭圆的边界点阵
  86. BOOL m_bFill;             //是否填充
  87. CBoundaryRect m_Boundary; //边界矩形对象
  88. };
  89. #endif // !defined(AFX_QELLIPSEOBJ_H__3553C38F_41CA_41C3_9FE1_65F7C4D4EECA__INCLUDED_)