////////////////////////////////////////////////////////////////////////////// //文件 Circle.h //主要功能: // //程序编写: 2005-12-07 ///////////////////////////////////////////////////////////////////////////// #pragma once #include ".\pointnamerect.h" #include "curveex.h" class AFX_EXT_CLASS CEllipse : public CPointNameRect { public: CEllipse(void); virtual ~CEllipse(void); void Serialize(CArchive& ar, const short &ver) override; virtual int Read(CFile &fr, const short& ver); virtual void Write(CFile &fw, const short& ver); virtual bool GetRange(CRect8 &range); virtual BOOL IsInRange(CRect8& range); virtual void Rotate(double xs, double ys, double angle); virtual void ScaleProperty(double sx, double sy); virtual void WriteDML(CFile &fw, const short& ver, int nBaseTabNum); virtual int ReadDML(CFile &fr, const short &ver); virtual void WritePCG(CFile &fw, const short& ver, int nBaseTabNum); virtual int ReadPCG(CFile &fr, const short &ver); virtual void WritePCG2(CFile &fw, const short& ver, int nBaseTabNum); virtual int ReadPCG2(CFile &fr, const short &ver); int ReadEllipse(CFile &fr); //老格式椭圆 virtual void SetInTriangle(CPoint2D& ptArc1, CPoint2D& ptArc2, CPoint2D& ptArc3);//根据内接三角形的三个顶点设置圆 void GetPoint(double& x, double &y, double angle); //根据角度获得圆上的坐标 CCurveEx* ToCurve(double AngleStep);//获得曲线,使用完成后需要delete; CSize8 GetRadius(int nMode=0); //获得半径,nMode=0为原半径,nMode=1为中心半径(原半径+曲线宽度/2),nMode=2为最大半径(原半径+宽度) void operator=(CEllipse& cir); double m_dCurveWidth; //曲线宽度 DWORD m_nFlags; //宽度定位等 DWORD GetWidthPosition(void); void SetWidthPosition(DWORD nPos); COLORREF color; COLORREF fillColor; int fillState = 0; //是否充填(4否, 20充填 与双狐2032对齐) // Width Style Flags enum WidthStyleFlags { posCenter = 0x0001, //中心 posOut = 0x0002, //外侧 posIn = 0x0004 //内侧 }; public: virtual int ReadPCG(void *pxp, const short &ver); virtual int ReadPCG2(void *pxp, const short &ver); }; class AFX_EXT_CLASS CCircle : public CEllipse { public: CCircle(void); virtual ~CCircle(void); public: virtual int Read(CFile &fr, const short& ver); virtual void Write(CFile &fw, const short& ver); virtual void WriteDML(CFile &fw, const short& ver, int nBaseTabNum); virtual int ReadDML(CFile &fw, const short &ver); virtual int ReadDMLDonut(CFile &fr, const short &ver); virtual void WritePCG(CFile &fw, const short& ver, int nBaseTabNum); virtual int ReadPCG(CFile &fw, const short &ver); virtual int ReadPCGDonut(CFile &fr, const short &ver); //virtual int ReadAnyPCG(CFile &fw, const short &ver); virtual void ScaleProperty(double sx, double sy); int ReadDonut(CFile& fr); void operator=(CCircle& cir); public: virtual int ReadPCG(void *pxp, const short &ver); virtual int ReadPCGDonut(void *pxp, const short &ver); };