CADDoc.cpp
上传用户:shangwu01
上传日期:2013-04-22
资源大小:707k
文件大小:7k
源码类别:

CAD

开发平台:

Visual C++

  1. // CADDoc.cpp : implementation of the CCADDoc class
  2. //
  3. #include "stdafx.h"
  4. #include "CAD.h"
  5. #include "CADDoc.h"
  6. #include "CADView.h"
  7. #include "MainFrm.h"
  8. #include "math.h"
  9. #ifdef _DEBUG
  10. #define new DEBUG_NEW
  11. #undef THIS_FILE
  12. static char THIS_FILE[] = __FILE__;
  13. #endif
  14. /////////////////////////////////////////////////////////////////////////////
  15. // CCADDoc
  16. IMPLEMENT_DYNCREATE(CCADDoc, CDocument)
  17. BEGIN_MESSAGE_MAP(CCADDoc, CDocument)
  18. //{{AFX_MSG_MAP(CCADDoc)
  19. ON_COMMAND(IDR_DRAW_LINE, OnDrawLine)
  20. ON_UPDATE_COMMAND_UI(IDR_DRAW_LINE, OnUpdateDrawLine)
  21. ON_COMMAND(ID_DRAW_CIRCLE, OnDrawCircle)
  22. ON_UPDATE_COMMAND_UI(ID_DRAW_CIRCLE, OnUpdateDrawCircle)
  23. ON_COMMAND(ID_DRAW_ELLIPS, OnDrawEllips)
  24. ON_UPDATE_COMMAND_UI(ID_DRAW_ELLIPS, OnUpdateDrawEllips)
  25. ON_COMMAND(ID_DRAW_MULTLINE, OnDrawMultline)
  26. ON_UPDATE_COMMAND_UI(ID_DRAW_MULTLINE, OnUpdateDrawMultline)
  27. ON_COMMAND(ID_DRAW_RECTANGE, OnDrawRectange)
  28. ON_UPDATE_COMMAND_UI(ID_DRAW_RECTANGE, OnUpdateDrawRectange)
  29. ON_COMMAND(ID_DRAW_TEXT, OnDrawText)
  30. ON_UPDATE_COMMAND_UI(ID_DRAW_TEXT, OnUpdateDrawText)
  31. ON_UPDATE_COMMAND_UI(ID_MODE_D, OnUpdateModeD)
  32. ON_UPDATE_COMMAND_UI(ID_MODE_E, OnUpdateModeE)
  33. ON_COMMAND(ID_MODE_E, OnModeE)
  34. ON_COMMAND(ID_MODE_D, OnModeD)
  35. ON_COMMAND(ID_DRAW_ARC, OnDrawArc)
  36. ON_UPDATE_COMMAND_UI(ID_DRAW_ARC, OnUpdateDrawArc)
  37. ON_COMMAND(IDM_wARC, OnwARC)
  38. ON_COMMAND(IDM_wCIRCLE, OnwCIRCLE)
  39. ON_COMMAND(IDM_wELLIPS, OnwELLIPS)
  40. ON_COMMAND(IDM_wLINE, OnwLINE)
  41. ON_COMMAND(IDM_wRECTANGE, OnwRECTANGE)
  42. //}}AFX_MSG_MAP
  43. END_MESSAGE_MAP()
  44. /////////////////////////////////////////////////////////////////////////////
  45. // CCADDoc construction/destruction
  46. CCADDoc::CCADDoc()
  47. {
  48. m_line_width=1;
  49. m_line_style=PS_SOLID;
  50. m_line_color=RGB(0,0,0);
  51. m_mode_flage=true;
  52. m_DrawType=1;
  53. /////////////////////////////////////////
  54. ///
  55. }
  56. CCADDoc::~CCADDoc()
  57. {
  58. }
  59. BOOL CCADDoc::OnNewDocument()
  60. {
  61. if (!CDocument::OnNewDocument())
  62. return FALSE;
  63. this->SetTitle("CAD");
  64. // TODO: add reinitialization code here
  65. // (SDI documents will reuse this document)
  66. return TRUE;
  67. }
  68. /////////////////////////////////////////////////////////////////////////////
  69. // CCADDoc serialization
  70. void CCADDoc::Serialize(CArchive& ar)
  71. {
  72. if (ar.IsStoring())
  73. {
  74. // TODO: add storing code here
  75. }
  76. else
  77. {
  78. // TODO: add loading code here
  79. }
  80. }
  81. /////////////////////////////////////////////////////////////////////////////
  82. // CCADDoc diagnostics
  83. #ifdef _DEBUG
  84. void CCADDoc::AssertValid() const
  85. {
  86. CDocument::AssertValid();
  87. }
  88. void CCADDoc::Dump(CDumpContext& dc) const
  89. {
  90. CDocument::Dump(dc);
  91. }
  92. #endif //_DEBUG
  93. /////////////////////////////////////////////////////////////////////////////
  94. // CCADDoc commands
  95. void CCADDoc::OnDrawLine() 
  96. {
  97. if(m_mode_flage)
  98. m_DrawType=1;
  99. }
  100. void CCADDoc::OnUpdateDrawLine(CCmdUI* pCmdUI) 
  101. {
  102. if(m_DrawType==1)
  103. pCmdUI->SetCheck(1);
  104. else if(m_DrawType!=1)
  105. pCmdUI->SetCheck(0);
  106. }
  107. void CCADDoc::OnDrawCircle() 
  108. {
  109. if(m_mode_flage)
  110. m_DrawType=3;
  111. }
  112. void CCADDoc::OnUpdateDrawCircle(CCmdUI* pCmdUI) 
  113. {
  114. if(m_DrawType==3)
  115. pCmdUI->SetCheck(1);
  116. else if(m_DrawType!=3)
  117. pCmdUI->SetCheck(0);
  118. }
  119. void CCADDoc::OnDrawEllips() 
  120. {
  121. if(m_mode_flage)
  122. m_DrawType=5;
  123. }
  124. void CCADDoc::OnUpdateDrawEllips(CCmdUI* pCmdUI) 
  125. {
  126. if(m_DrawType==5)
  127. pCmdUI->SetCheck(1);
  128. else if(m_DrawType!=5)
  129. pCmdUI->SetCheck(0);
  130. }
  131. void CCADDoc::OnDrawMultline() 
  132. {
  133. if(m_mode_flage)
  134. m_DrawType=4;
  135. }
  136. void CCADDoc::OnUpdateDrawMultline(CCmdUI* pCmdUI) 
  137. {
  138. if(m_DrawType==4)
  139. pCmdUI->SetCheck(1);
  140. else if(m_DrawType!=4)
  141. pCmdUI->SetCheck(0);
  142. }
  143. void CCADDoc::OnDrawRectange() 
  144. {
  145. if(m_mode_flage)
  146. m_DrawType=2;
  147. }
  148. void CCADDoc::OnUpdateDrawRectange(CCmdUI* pCmdUI) 
  149. {
  150. if(m_DrawType==2)
  151. pCmdUI->SetCheck(1);
  152. else if(m_DrawType!=2)
  153. pCmdUI->SetCheck(0);
  154. }
  155. void CCADDoc::OnDrawArc() 
  156. {
  157. if(m_mode_flage)
  158. m_DrawType=7;
  159. }
  160. void CCADDoc::OnUpdateDrawArc(CCmdUI* pCmdUI) 
  161. {
  162. if(m_DrawType==7)
  163. pCmdUI->SetCheck(1);
  164. else if(m_DrawType!=2)
  165. pCmdUI->SetCheck(0);
  166. }
  167. void CCADDoc::OnDrawText() 
  168. {
  169. if(m_mode_flage)
  170. m_DrawType=6;
  171. }
  172. void CCADDoc::OnUpdateDrawText(CCmdUI* pCmdUI) 
  173. {
  174. if(m_DrawType==6)
  175. pCmdUI->SetCheck(1);
  176. else if(m_DrawType!=6)
  177. pCmdUI->SetCheck(0);
  178. }
  179. void CCADDoc::OnUpdateModeD(CCmdUI* pCmdUI) 
  180. {
  181. if(m_mode_flage)
  182. pCmdUI->SetCheck(1);
  183. else
  184. pCmdUI->SetCheck(0);
  185. }
  186. void CCADDoc::OnUpdateModeE(CCmdUI* pCmdUI) 
  187. {
  188. if(!m_mode_flage)
  189. pCmdUI->SetCheck(1);
  190. else
  191. pCmdUI->SetCheck(0);
  192. }
  193. void CCADDoc::OnModeE() 
  194. {
  195. m_mode_flage=false;
  196. m_DrawType=0;
  197. POSITION pos = GetFirstViewPosition();
  198.     while (pos != NULL)
  199.     {
  200.        CCADView* pView = (CCADView*)GetNextView(pos);
  201. pView->UpdateWindow();//视图操作
  202. pView->catchcertre=false;
  203. pView->catchcross=false;
  204. pView->catchend=false;
  205. pView->catchmiddle=false;
  206. pView->catchcut=false;
  207. CMainFrame* pFrm = (CMainFrame*) AfxGetMainWnd();
  208. pFrm->ShowControlBar(&pFrm->m_wndCatchTool,!pFrm->m_wndCatchTool.IsWindowVisible(),false);
  209. }
  210. void CCADDoc::OnModeD() 
  211. {
  212. m_mode_flage=true;
  213. m_DrawType=1;
  214. CMainFrame* pFrm = (CMainFrame*) AfxGetMainWnd();
  215. pFrm->ShowControlBar(&pFrm->m_wndCatchTool,!pFrm->m_wndCatchTool.IsWindowVisible(),false);
  216. }
  217. void CCADDoc::OnwARC() 
  218. {
  219. CLG_wARC dlg;
  220. if(dlg.DoModal()==IDOK)
  221. {
  222. CPoint certrepoint,startpoint,endpoint;
  223. certrepoint=CPoint(dlg.m_Xcertre,dlg.m_Ycertre);
  224. startpoint=CPoint(dlg.m_Xcertre+dlg.m_R*cos(dlg.m_ARC1*3.1415926/180),dlg.m_Ycertre-dlg.m_R*sin(dlg.m_ARC1*3.1415926/180));
  225. endpoint=CPoint(dlg.m_Xcertre+dlg.m_R*cos(dlg.m_ARC2*3.1415926/180),dlg.m_Ycertre-dlg.m_R*sin(dlg.m_ARC2*3.1415926/180));
  226. m_arc.arc_drawstore(certrepoint,startpoint,endpoint,m_line_style,m_line_width,m_line_color);
  227. }
  228. else
  229. return;
  230. }
  231. void CCADDoc::OnwCIRCLE() 
  232. {
  233. CLG_wCIRCLE dlg;
  234. if(dlg.DoModal()==IDOK)
  235. {
  236. m_circle.circle_store(CPoint(dlg.m_Xcertre,dlg.m_Ycertre),
  237. CPoint(dlg.m_Xcertre+dlg.m_R,dlg.m_Ycertre),
  238. m_line_style,m_line_width,m_line_color);
  239. }
  240. else
  241. return;
  242. }
  243. void CCADDoc::OnwELLIPS() 
  244. {
  245. CLG_wELLIPS dlg;
  246. if(dlg.DoModal()==IDOK)
  247. {
  248. m_ellips.ellips_store(CPoint(dlg.m_Xcertre,dlg.m_Ycertre),
  249.       CPoint(dlg.m_Xcertre+dlg.m_Xlength/2,dlg.m_Ycertre+dlg.m_Ylength/2),
  250.   m_line_style,m_line_width,m_line_color);
  251. }
  252. else
  253. return;
  254. }
  255. void CCADDoc::OnwLINE() 
  256. {
  257. CLG_wLINE dlg;
  258. if(dlg.DoModal()==IDOK)
  259. {
  260. m_line.Line_store(CPoint(dlg.m_Xfirst,dlg.m_Yfirst),CPoint(dlg.m_Xsecond,dlg.m_Ysecond),
  261. m_line_style,m_line_width,m_line_color);
  262. }
  263. else
  264. return;
  265. }
  266. void CCADDoc::OnwRECTANGE() 
  267. {
  268. CLG_wRECTANGE dlg;
  269. if(dlg.DoModal()==IDOK)
  270. {
  271. m_rectange.rectange_store(CPoint(dlg.m_Xtopleft,dlg.m_Ytopleft),CPoint(dlg.m_Xbottomright,dlg.m_Ybottomright),
  272. m_line_style,m_line_width,m_line_color);
  273. }
  274. else
  275. return;
  276. }