Shape.h
上传用户:lj3531212
上传日期:2007-06-18
资源大小:346k
文件大小:7k
源码类别:

绘图程序

开发平台:

Visual C++

  1. // Shape.h: interface for the CShape class.
  2. //
  3. //////////////////////////////////////////////////////////////////////
  4. #if !defined(AFX_SHAPE_H__7A2777F2_C8C5_4853_A468_CF20CEE5E178__INCLUDED_)
  5. #define AFX_SHAPE_H__7A2777F2_C8C5_4853_A468_CF20CEE5E178__INCLUDED_
  6. #if _MSC_VER > 1000
  7. #pragma once
  8. #endif // _MSC_VER > 1000
  9. #include "GraphDefines.h"
  10. #include "afxtempl.h"
  11. #include "math.h"
  12. ////////////////////////////////////////Struct tEdge
  13. //此结构用于图形填充
  14. typedef struct tEdge
  15. {
  16. int ymin;
  17. float x,dx;
  18. struct tEdge *next;
  19. }Edge;
  20. typedef Edge* pEdge;
  21. class CShape : public CObject  
  22. {
  23. //for serialization
  24. DECLARE_SERIAL(CShape)
  25. /////////////////////////////////////
  26. public:
  27. CShape();
  28. CShape(COLORREF color,int penWidth,float angle=0);
  29. virtual ~CShape();
  30.     CShape(CShape* const shape);
  31. public:
  32. /////////////////////////
  33. //virtual functions
  34.     virtual void Serialize( CArchive& );
  35. virtual void SetPtData(CArray<float,float>& flArrayX,CArray<float,float>& flArrayY){};
  36. virtual void GetPtData(CArray<float,float>& flArrayX,CArray<float,float>& flArrayY){};
  37. virtual void Draw(CDC *pDC,COLORREF color,COLORREF fillColor,int penWidth){return ;};
  38. virtual void DrawPoints(CDC *pDC,COLORREF color){return;} ;
  39. virtual void DrawPointsCutTo(CDC *pDC,COLORREF color,CFlRect m_rectFrom,CRect m_rectTo){return;} ;
  40. virtual void CreatGraph(CArray<CPoint,CPoint>& ptArray,int nPenWidth,COLORREF color,COLORREF fillColor,SHAPE_FILLSTYLE nStyle=_shape_none_fill){
  41. m_nPenWidth=nPenWidth;
  42. m_color=color;
  43. m_nFillStyle=nStyle;
  44. m_FillColor=fillColor;
  45. }
  46. virtual void CreatGraph(CArray<float,float>& flArrayX,CArray<float,float>& flArrayY,int nPenWidth,COLORREF color,COLORREF fillColor,SHAPE_FILLSTYLE nStyle=_shape_none_fill){
  47. m_nPenWidth=nPenWidth;
  48. m_color=color;
  49. m_nFillStyle=nStyle;
  50. m_FillColor=fillColor;
  51. }
  52. void DrawCutToRect(CDC *pDC,CFlRect m_rectFrom,CRect m_rectTo);
  53. void DrawCutToRect(CDC *pDC,COLORREF color,CFlRect m_rectFrom,CRect m_rectTo);
  54. void DrawCutToRect(CDC *pDC,COLORREF color,COLORREF fillColor,CFlRect m_rectFrom,CRect m_rectTo);
  55. void DrawCutToRect(CDC *pDC,COLORREF color,int penWidth,CFlRect m_rectFrom,CRect m_rectTo);
  56. virtual void DrawCutToRect(CDC *pDC,COLORREF color,COLORREF fillColor,int penWidth,CFlRect m_rectFrom,CRect m_rectTo){return;};
  57. virtual void Move(CDC *pDC,float stepx,float stepy){}
  58. virtual void PartMove(CDC *pDC,float PrevX,float PrevY,float CurX,float CurY){}
  59. virtual void Rotate(CDC *pDC,float CX,float CY,float flAngle){}
  60. virtual void Magnify(CDC *pDC,float CX,float CY,float flScale){}
  61. //在矩形内上下反转
  62. virtual void TopToBottom(CDC* pDC,CRect rect){return;}
  63. //在矩形内左右反转
  64. virtual void LeftToRight(CDC* pDC,CRect rect){return;}
  65. virtual void ExPort(FILE* outStream);//增加导出txt功能时用
  66. virtual void ImPort(FILE* inStream);
  67. virtual CShape* GetCopy(){
  68. CShape* pShape=new CShape(this);
  69. return pShape;
  70. }
  71. virtual CString GetNameString(){
  72. return " ";
  73. }
  74. virtual float GetSelectLineRate(){return 0;}
  75. virtual GRAPH_SHAPE_TYPE GetShapeKind(){
  76. return _shape_none;
  77. }    
  78.     virtual void RefreshData(bool bRefresh){}
  79. //IsInRect
  80. //return value
  81. //0----------out
  82. //1----------cut
  83. //2----------in
  84. //3----------Contain the rect
  85. virtual int IsInRect(CRect rect){
  86. return 0;
  87. }
  88. //GetPtState
  89. //para
  90. //float flx,float fly -----the point value
  91. //float flRate-------------the Rate of magnify of point and line
  92. //return value
  93. //0----------out
  94. //1----------on component point
  95. //2----------on out line
  96. virtual int GetPtState(float flx,float fly,float flRate){
  97. return 0;
  98. }
  99. //IsPointinRegion
  100. //return value
  101. //0----------out
  102. //1----------in
  103. virtual int IsPointinRegion(POINT point){return 0;};
  104. /////////////////////////
  105. virtual CRect GetBoundaryRect(){
  106. return CRect(0,0,0,0);
  107. }
  108. virtual CPoint GetCenterPoint(){
  109. return CPoint(0,0);
  110. }
  111. //Begin of deletion
  112. //For Project GraphSoft,delete by FNST)Xiagongli 2004.3.31
  113. //virtual int GetPointNum(){
  114. // return 04;
  115. //}
  116. //end of deletion
  117. public:
  118. void Draw(CDC *pDC);
  119. void Draw(CDC *pDC,COLORREF color);
  120. void Draw(CDC *pDC,COLORREF color,COLORREF fillColor);
  121. void Draw(CDC *pDC,COLORREF color,int penWidth);
  122. inline void SetColor(COLORREF color){
  123. m_color=color;
  124. }
  125. inline void SetPenWidth(int penWidth){
  126. m_nPenWidth=penWidth;
  127. }
  128. inline void SetAngle(float angle){
  129. m_flAngle=angle;
  130. }
  131. inline float GetAngle(){
  132. return m_flAngle;
  133. }
  134. inline const COLORREF GetColor()const{
  135. return m_color;
  136. }
  137. inline void MultiplyScale(float scale)
  138. {
  139. if(scale>0)
  140. m_flScale*=scale;
  141. }
  142. inline float GetScale(){
  143. return m_flScale;
  144. }
  145. inline const int GetPenWidth()const{
  146. return m_nPenWidth;
  147. }
  148.     inline void SetSelectFlag( bool bFlag ) { 
  149. m_bSelect_flag = bFlag ; 
  150. inline const bool IsSelected()const{
  151. return m_bSelect_flag;
  152. }
  153. inline void SetDrawPointsFlag(int nFlag){
  154. m_nDrawPoints=nFlag;
  155. }
  156. inline int GetDrawPointsFlag(){
  157. return m_nDrawPoints;
  158. }
  159. inline void SetFillStyle(SHAPE_FILLSTYLE nStyle){
  160. m_nFillStyle=nStyle;
  161. }
  162. inline SHAPE_FILLSTYLE GetFillStyle(){
  163. return m_nFillStyle;
  164. }
  165. inline void SetFillColor(COLORREF color){
  166. m_FillColor=color;
  167. }
  168. inline COLORREF GetFillColor(){
  169. return m_FillColor;
  170. }
  171.     inline unsigned long GetID(){
  172. return m_nID;
  173.     }
  174.     inline void SetID(unsigned  long nID){
  175. m_nID=nID;
  176.     }
  177. void BresenhamLine(CDC *pDC,CPoint m_pStart,CPoint m_pEnd,COLORREF color);
  178. void BresenhamLine(CDC *pDC,int x1,int y1,int x2,int y2,COLORREF color);
  179. void BresenhamLine(CDC *pDC,int x1,int y1,int x2,int y2,COLORREF color,CRect rect);
  180.     void DotLine(CDC *pDC,int x1,int y1,int x2,int y2,COLORREF color);
  181. //Polygon Fill color
  182. void InsertEdge(Edge *list,Edge *edge);
  183. //void MakeEdgeRec(POINT lower,POINT upper,int yComp,Edge *edge,Edge *edges[]);
  184. void BuildEdgeList(int cnt,POINT *pts,Edge *edges[],int nScanMin);
  185. void BuildActiveList(int scan,Edge *active,Edge *edges[],int nScanMin);
  186. void FillScan(CDC *pDC,int scan,Edge *active,COLORREF color);
  187. void DeleteAfter(Edge *q);
  188. void UpdateActiveList(int scan,Edge *active);
  189. void AreaFill(CDC *pDC,int cnt,POINT *pts,COLORREF color);
  190. public:
  191. int PtStateToRect(float x,float y,CRect rectRes);//判断一个点与矩形的相对位置,
  192. int PtStateToRect(CPoint point,CRect rectRes);//判断一个点与矩形的相对位置
  193. protected:
  194. int DrawLineToRect(CDC *pDC,POINT start,POINT end,CFlRect m_rectFrom,CRect m_rectTo);
  195. protected:
  196.     static unsigned long    m_nObjectNum;
  197. unsigned long           m_nID;//not save
  198. protected:
  199. CPoint                  m_ptRotateCenterTemp;//not save 
  200. float                   m_flAngleTemp;//not save 
  201. CPoint                  m_ptMagnifyCenterTemp;//not save 
  202. float                   m_flScaleTemp;//not save 
  203. bool                    m_bModified;//not save
  204. int                     m_nSelectPtNum;//not save
  205. int                     m_nSelectLineNum;//not save
  206. SHAPE_FILLSTYLE         m_nFillStyle;//save
  207. private:
  208. //attributes
  209. ////////////////////////
  210. COLORREF                m_color;
  211. COLORREF                m_FillColor;
  212. int                     m_nPenWidth;
  213. float                   m_flAngle;
  214. float                   m_flScale;
  215.     int                     m_nDrawPoints;
  216.     bool                    m_bSelect_flag;//not save   
  217. ////////////////////////
  218. };
  219. #endif // !defined(AFX_SHAPE_H__7A2777F2_C8C5_4853_A468_CF20CEE5E178__INCLUDED_)