QEllipseObj.h
资源名称:QGIS.rar [点击查看]
上传用户:oybseng
上传日期:2015-04-27
资源大小:7831k
文件大小:5k
源码类别:
GDI/图象编程
开发平台:
Visual C++
- // QEllipseObj.h: interface for the CQEllipseObj class.
- //
- //////////////////////////////////////////////////////////////////////
- #if !defined(AFX_QELLIPSEOBJ_H__3553C38F_41CA_41C3_9FE1_65F7C4D4EECA__INCLUDED_)
- #define AFX_QELLIPSEOBJ_H__3553C38F_41CA_41C3_9FE1_65F7C4D4EECA__INCLUDED_
- #if _MSC_VER > 1000
- #pragma once
- #endif // _MSC_VER > 1000
- #include "QBaseObj.h"
- #include "QPointArray.h"
- //////////////////////////////////////////
- ///***************CQGIS****************///
- ///类 名:CQEllipseObj
- ///基 型:CQBaseObj
- ///说 明:椭圆对象类型
- ///***************CQGIS****************///
- //////////////////////////////////////////
- class AFX_EXT_CLASS CQEllipseObj : public CQBaseObj
- {
- public:
- CQEllipseObj();
- CQEllipseObj(double dx,double dy,double fLongAxis,double fShortAxis,double fStartAngle,
- double fEndAngle,double fRotateAngle);
- CQEllipseObj(CQEllipseObj & tmEllipse); //拷贝构造函数
- virtual void Copy(CQEllipseObj & tmEllipse); //拷贝函数
- virtual ~CQEllipseObj();
- static CQEllipseObj * CreateEllipse(CQPoint ptCenter,double fLongAxis,double fShortAxis,double fStartAngle,
- double fEndAngle,double fRotateAngle); //创建一个 椭圆对象以指针形式返回
- virtual void Display(CQCoordSys * pSys,CDC * pDC,int nDrawMode,int nSpecialMode,COLORREF * pColor);
- virtual void Move(double dx,double dy); //偏移椭圆对象
- virtual void Rotate(CQPoint & pt,double & fAngleDegree);
- //镜像对象 nMirrorType: 0 - 原点镜像, 1 - X轴镜像, 2 - Y轴镜像
- virtual void Mirror(int nMirrorType); //镜像类型
- virtual void CalculateBoundary(CBoundaryRect * pRect /* = 0 */); //计算椭圆对象的边界矩形
- virtual void GetBoundingRect(CBoundaryRect * pRect); //获取对象的边界矩形
- virtual BOOL Select(CQCoordSys * pSys,CBoundaryRect & rect); //框选
- virtual BOOL Select(CQCoordSys * pSys,CQPoint & pt,double fEffectiveDistance);
- virtual void Serialize(CArchive& ar); //串行化
- // 所有图元x坐标的按照中心点x坐标和缩放倍数缩放,dFlex>1会放大,dFlex<1会缩小 // [9/5/2006 Jchen]
- // 暂时没有实现
- virtual void XFlex(double dcp_x,double dFlex);
- // 所有图元y坐标的按照中心点y坐标和缩放倍数缩放,dFlex>1会放大,dFlex<1会缩小 // [9/5/2006 Jchen]
- // 暂时没有实现
- virtual void YFlex(double dcp_x,double dFlex);
- double GetPerimeter(); //获取线条的周长,获取的是封闭的椭圆的周长
- double GetArcLength(); //获取线条的长度
- double GetArea(); //获取面积,获取的是封闭的椭圆的面积
- //通过给定的角度,计算椭圆在该角度的点的坐标, dAngleDeg为角度
- void CalculatePointByAngleRad(double dAngleRad, double &x, double &y);
- void CalculatePointByAngleRad(double dAngleRad, CQPoint &pt);
- CQPointArray * GetPointList();
- public://内存操作
- virtual void WriteToFile(CFile * pf);
- virtual void ReadFromFile(CFile * pf);
- virtual CString VarToStr(); //将对象的成员信息转换成字符串信息
- public://对象剪贴板操作
- inline double GetLongAxis(); //获取椭圆长轴
- inline void SetLongAxis(double a); //设置椭圆长轴
- inline double GetShortAxis(); //获取椭圆短轴
- inline void SetShortAxis(double b); //设置椭圆短轴
- inline void GetCenterPoint(double &x, double &y); //获取椭圆中心点
- inline void GetCenterPoint(CQPoint &pt); //获取椭圆中心点
- void SetCenterPoint(double x, double y); //设置椭圆中心点
- void SetCenterPoint(CQPoint pt); //设置椭圆中心点
- inline double GetStartAngleRad(); //获取椭圆起始角度
- inline void SetStartAngleRad(double dAngDeg); //设置椭圆起始角度
- inline double GetEndAngleRad(); //获取椭圆终止角度
- inline void SetEndAngleRad(double dAngDeg); //设置椭圆终止角度
- inline double GetRotateAngleRad(); //获取椭圆旋转角度
- inline void SetRotateAngleRad(double dAngDeg); //设置椭圆旋转角度
- //设定椭圆的参数,五个参数一起设置,这样只需计算一次点阵
- void SetEllipseParams(double dCenterX,double dCenterY,double dMajorAxis,
- double dMinorAxis,double dStartAngleRad,double dEndAngleRad,double dRotateAngleRad);
- void RecalculatePtlist();//通过椭圆的参数, 重新计算椭圆显示,选择时需要的点阵
- protected:
- void DisplayPolyline(CQCoordSys * pSys,CDC * pDC,int nDrawMode,int nSpecialMode,COLORREF * pColor); //以画折线的方式进行逼近
- void DisplayPolygon(CQCoordSys * pSys,CDC * pDC,int nDrawMode,int nSpecialMode,COLORREF * pColor); //以画区的方式进行逼近
- private: //成员变量
- CQPoint m_ptCenter; //椭圆的中心点坐标
- double m_fLongAxis; //椭圆长轴
- double m_fShortAxis; //椭圆短轴
- double m_fStartAngleRad; //椭圆起始角度
- double m_fEndAngleRad; //椭圆终止角度
- double m_fRotateAngleRad; //椭圆旋转角度
- CQPointArray m_PtList; //椭圆的边界点阵
- BOOL m_bFill; //是否填充
- CBoundaryRect m_Boundary; //边界矩形对象
- };
- #endif // !defined(AFX_QELLIPSEOBJ_H__3553C38F_41CA_41C3_9FE1_65F7C4D4EECA__INCLUDED_)