CAD2006View.cpp
上传用户:ckg1000
上传日期:2013-01-26
资源大小:630k
文件大小:42k
源码类别:

CAD

开发平台:

Visual C++

  1. // CAD2006View.cpp : implementation of the CCAD2006View class
  2. //
  3. #include "stdafx.h"
  4. #include "CAD2006.h"
  5. #include "MainFrm.h"
  6. #include "CAD2006Doc.h"
  7. #include "CAD2006View.h"
  8. #include "shape.h"
  9. #include "Line1.h"
  10. #include "Trigon.h"
  11. #include "Polygon.h"
  12. #include "Circle.h"
  13. #include "Rect.h"
  14. #include "ellipse.h"
  15. #ifdef _DEBUG
  16. #define new DEBUG_NEW
  17. #undef THIS_FILE
  18. static char THIS_FILE[] = __FILE__;
  19. #endif
  20. extern enum SHAPE;
  21. static CString m_allshapepoint;
  22. CArray<CRect,CRect> m_rectarray;
  23. CArray<CRect,CRect> m_textarray;
  24. CString m_array;               //1 line,2 linedown,3 rect,4 trigon,5 polygon,6 circle,7 ellipse
  25. CArray<CPoint,CPoint> m_linearray;
  26. CArray<CPoint,CPoint> m_linedownarray;
  27. CArray<CPoint,CPoint> m_circlearray;
  28. CArray<CPoint,CPoint> m_ellipsearray;
  29. CArray<CPoint,CPoint> m_rectanglearray;
  30. CArray<CPoint,CPoint> m_trigonarray;
  31. CArray<CPoint,CPoint> m_polygonarray;
  32. CArray<POINT *,POINT *> m_polygonarraypoint;
  33. int shapeindex = 0;
  34. enum SelectStatus{NoSelect,YesSelect} selectstatus;   //选定状态
  35. enum MirrorStatus{NoMirror,YesMirror} mirrorstatus;   //镜像状态
  36. static bool bln = true;
  37. static bool blnselecttrigon = true;
  38. static bool blnfirst = true;     //打开
  39. CRect selectrect;
  40. int index;
  41. int count = 0;
  42. bool blnselect = true;
  43. bool blnfrist = true;   //只初始化一次
  44. /////////////////////////////////////////////////////////////////////////////
  45. // CCAD2006View
  46. IMPLEMENT_DYNCREATE(CCAD2006View, CView)
  47. BEGIN_MESSAGE_MAP(CCAD2006View, CView)
  48. //{{AFX_MSG_MAP(CCAD2006View)
  49. ON_WM_MOUSEMOVE()
  50. ON_WM_SETCURSOR()
  51. ON_WM_LBUTTONDOWN()
  52. ON_WM_RBUTTONDOWN()
  53. ON_WM_KEYDOWN()
  54. ON_WM_LBUTTONUP()
  55. ON_COMMAND(ID_FILE_SAVE, OnFileSave)
  56. ON_WM_KILLFOCUS()
  57. ON_WM_MOUSEWHEEL()
  58. ON_WM_ERASEBKGND()
  59. ON_COMMAND(ID_FILE_OPEN, OnFileOpen)
  60. //}}AFX_MSG_MAP
  61. // Standard printing commands
  62. ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint)
  63. ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint)
  64. ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview)
  65. END_MESSAGE_MAP()
  66. /////////////////////////////////////////////////////////////////////////////
  67. // CCAD2006View construction/destruction
  68. CCAD2006View::CCAD2006View()
  69. {
  70. // TODO: add construction code here
  71. this->m_openclose = close;
  72. this->m_state = first;
  73. }
  74. CCAD2006View::~CCAD2006View()
  75. {
  76. }
  77. BOOL CCAD2006View::PreCreateWindow(CREATESTRUCT& cs)
  78. {
  79. // TODO: Modify the Window class or styles here by modifying
  80. //  the CREATESTRUCT cs
  81. return CView::PreCreateWindow(cs);
  82. }
  83. /////////////////////////////////////////////////////////////////////////////
  84. // CCAD2006View drawing
  85. void CCAD2006View::OnDraw(CDC* pDC)
  86. {
  87. CCAD2006Doc* pDoc = GetDocument();
  88. ASSERT_VALID(pDoc);
  89. // TODO: add draw code for native data herestatic HCURSOR hcur = NULL;
  90. /* if( !blnfirst )
  91. {
  92. this->ShowShape(m_allshapepoint);
  93. }*/
  94. /* RECT rect;
  95. ::AfxGetApp()->m_pMainWnd->GetClientRect(&rect);
  96. ::AfxGetApp()->GetMainWnd()->GetClientRect(&rect);
  97. ::AfxGetApp()->GetMainWnd()->InvalidateRect(&rect,false);*/
  98. }
  99. /////////////////////////////////////////////////////////////////////////////
  100. // CCAD2006View printing
  101. BOOL CCAD2006View::OnPreparePrinting(CPrintInfo* pInfo)
  102. {
  103. // default preparation
  104. return DoPreparePrinting(pInfo);
  105. }
  106. void CCAD2006View::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
  107. {
  108. // TODO: add extra initialization before printing
  109. }
  110. void CCAD2006View::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
  111. {
  112. // TODO: add cleanup after printing
  113. }
  114. /////////////////////////////////////////////////////////////////////////////
  115. // CCAD2006View diagnostics
  116. #ifdef _DEBUG
  117. void CCAD2006View::AssertValid() const
  118. {
  119. CView::AssertValid();
  120. }
  121. void CCAD2006View::Dump(CDumpContext& dc) const
  122. {
  123. CView::Dump(dc);
  124. }
  125. CCAD2006Doc* CCAD2006View::GetDocument() // non-debug version is inline
  126. {
  127. ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CCAD2006Doc)));
  128. return (CCAD2006Doc*)m_pDocument;
  129. }
  130. #endif //_DEBUG
  131. /////////////////////////////////////////////////////////////////////////////
  132. // CCAD2006View message handlers
  133. BOOL CCAD2006View::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message) 
  134. {
  135. /*******************设置相应的鼠标光标******************************/
  136. CCAD2006Doc* pDoc = GetDocument();
  137. static HCURSOR hcur = NULL;
  138. switch( pDoc->m_shape )        //形状工具
  139. {
  140. case line:
  141. hcur = ::AfxGetApp()->LoadCursor(IDC_CURSOR_LINE);
  142. break;
  143. case linedown:
  144. hcur = ::AfxGetApp()->LoadCursor(IDC_CURSOR_LINE);
  145. break;
  146. case lineangle:
  147. hcur = ::AfxGetApp()->LoadCursor(IDC_CURSOR_LINE);
  148. break;
  149. case trigon:
  150. hcur = ::AfxGetApp()->LoadCursor(IDC_CURSOR_TRIGON);
  151. break;
  152. case circle:
  153. hcur = ::AfxGetApp()->LoadCursor(IDC_CURSOR_RECT);
  154. break;
  155. case ellipse:
  156. hcur = ::AfxGetApp()->LoadCursor(IDC_CURSOR_RECT);
  157. break;
  158. case circlemater:
  159. hcur = ::AfxGetApp()->LoadCursor(IDC_CURSOR_RECT);
  160. break;
  161. case rect:
  162. hcur = ::AfxGetApp()->LoadCursor(IDC_CURSOR_RECT);
  163. break;
  164. case polygon:
  165. hcur = ::AfxGetApp()->LoadCursor(IDC_CURSOR_RECT);
  166. break;
  167. case font:
  168. hcur = ::AfxGetApp()->LoadCursor(IDC_CURSOR_ARROW);
  169. break;
  170. }
  171. switch( pDoc->m_tool )        //图形工具
  172. {
  173. case arrow:
  174. hcur = ::AfxGetApp()->LoadCursor(IDC_CURSOR_ARROW);
  175. break;
  176. case draw:
  177. hcur = ::AfxGetApp()->LoadCursor(IDC_CURSOR_ARROW);
  178. break;
  179. case fill:
  180. hcur = ::AfxGetApp()->LoadCursor(IDC_CURSOR_ARROW);
  181. break;
  182. case move:
  183. hcur = ::AfxGetApp()->LoadCursor(IDC_CURSOR_ARROW);
  184. break;
  185. case zoom:
  186. hcur = ::AfxGetApp()->LoadCursor(IDC_CURSOR_ARROW);
  187. break;
  188. case msl:
  189. hcur = ::AfxGetApp()->LoadCursor(IDC_CURSOR_ARROW);
  190. break;
  191. case eddy:
  192. hcur = ::AfxGetApp()->LoadCursor(IDC_CURSOR_ROTATE);
  193. break;
  194. }
  195. ::SetCursor(hcur);
  196. return 0;
  197. }
  198. void CCAD2006View::OnMouseMove(UINT nFlags, CPoint point) 
  199. {
  200. // TODO: Add your message handler code here and/or call default
  201. CCAD2006Doc* pDoc = GetDocument();
  202. CDC *pDC = GetDC();
  203. /*******************************************/
  204. /*****************镜像工具***********************/
  205. if( pDoc->m_tool == msl )
  206. {
  207. switch( pDoc->m_shape )
  208. {
  209. case rect:
  210. {
  211. if(mirrorstatus == YesMirror)
  212. {
  213. pDoc->m_shapetool->Mirror(pDC,point);
  214. }
  215. break;
  216. }
  217. case trigon:
  218. {
  219. if(mirrorstatus == YesMirror)
  220. {
  221. pDoc->m_shapetool->Mirror(pDC,point);
  222. }
  223. break;
  224. }
  225. case polygon:
  226. {
  227. if(mirrorstatus == YesMirror)
  228. {
  229. pDoc->m_shapetool->Mirror(pDC,point);
  230. }
  231. break;
  232. }
  233. case circle:
  234. {
  235. if(mirrorstatus == YesMirror)
  236. {
  237. pDoc->m_shapetool->Mirror(pDC,point);
  238. }
  239. break;
  240. }
  241. case line:
  242. {
  243. if(mirrorstatus == YesMirror)
  244. {
  245. pDoc->m_shapetool->Mirror(pDC,point);
  246. }
  247. break;
  248. }
  249. }
  250. }
  251. /*******************缩放工具********************/
  252. if( pDoc->m_tool == zoom )
  253. {
  254. switch( pDoc->m_shape )
  255. {
  256. case trigon:
  257. {
  258. if(selectstatus == YesSelect)
  259. {
  260. pDoc->m_shapetool->Update(pDC); //去小圈再动
  261. pDoc->m_shapetool->Zoom(pDC,point);
  262. }
  263. break;
  264. }
  265. case polygon:
  266. {
  267. if(selectstatus == YesSelect)
  268. {
  269. pDoc->m_shapetool->Update(pDC); //去小圈再动
  270. pDoc->m_shapetool->Zoom(pDC,point);
  271. }
  272. break;
  273. }
  274. case rect:
  275. {
  276. if(selectstatus == YesSelect)
  277. {
  278. pDoc->m_shapetool->Update(pDC); //去小圈再动
  279. pDoc->m_shapetool->Zoom(pDC,point);
  280. }
  281. break;
  282. }
  283. case circle:
  284. {
  285. if(selectstatus == YesSelect)
  286. {
  287. //pDoc->m_shapetool->Update(pDC); //去小圈再动
  288. pDoc->m_shapetool->Zoom(pDC,point);
  289. }
  290. break;
  291. }
  292. case ellipse:
  293. {
  294. if(selectstatus == YesSelect)
  295. {
  296. //pDoc->m_shapetool->Update(pDC); //去小圈再动
  297. pDoc->m_shapetool->Zoom(pDC,point);
  298. }
  299. break;
  300. }
  301. case line:
  302. {
  303. if(selectstatus == YesSelect)
  304. {
  305. //pDoc->m_shapetool->Update(pDC); //去小圈再动
  306. pDoc->m_shapetool->Zoom(pDC,point);
  307. }
  308. break;
  309. }
  310. }
  311. }
  312. /********************画图形****************************/
  313. if( this->m_openclose == open )
  314. {
  315. switch( pDoc->m_shape )
  316. {
  317. case rect:
  318. {
  319. pDoc->m_shapetool->Onmousemove(pDC,point);
  320. this->m_state = second;
  321. break;
  322. }
  323. case line:
  324. {
  325. pDoc->m_shapetool->Onmousemove(pDC,point);
  326. this->m_state = second;
  327. break;
  328. }
  329. case linedown:
  330. {
  331. pDoc->m_shapetool->Onmousemove(pDC,point);
  332. //this->m_state = second;
  333. break;
  334. }
  335. case trigon:
  336. {
  337. pDoc->m_shapetool->Onmousemove(pDC,point);
  338. //this->m_state = second;
  339. break;
  340. }
  341. case polygon:
  342. {
  343. pDoc->m_shapetool->Onmousemove(pDC,point);
  344. this->m_state = second;
  345. break;
  346. }
  347. case circle:
  348. {
  349. pDoc->m_shapetool->Onmousemove(pDC,point);
  350. this->m_state = second;
  351. break;
  352. }
  353. case ellipse:
  354. {
  355. pDoc->m_shapetool->Onmousemove(pDC,point);
  356. this->m_state = second;
  357. break;
  358. }
  359. }
  360. }
  361. /*******************图形移动***********************************/
  362. if( pDoc->m_tool == move )
  363. {
  364. switch( pDoc->m_shape )
  365. {
  366. case line:
  367. {
  368. if(selectstatus == YesSelect)
  369. {
  370. pDoc->m_shapetool->Update(pDC); //去小圈再动
  371. pDoc->m_shapetool->Move(pDC,point);
  372. }
  373. break;
  374. }
  375. case trigon:
  376. {
  377. if(selectstatus == YesSelect)
  378. {
  379. pDoc->m_shapetool->Update(pDC); //去小圈再动
  380. pDoc->m_shapetool->Move(pDC,point);
  381. }
  382. break;
  383. }
  384. case polygon:
  385. {
  386. if(selectstatus == YesSelect)
  387. {
  388. pDoc->m_shapetool->Update(pDC); //去小圈再动
  389. pDoc->m_shapetool->Move(pDC,point);
  390. }
  391. break;
  392. }
  393. case rect:
  394. {
  395. if(selectstatus == YesSelect)
  396. {
  397. pDoc->m_shapetool->Update(pDC); //去小圈再动
  398. pDoc->m_shapetool->Move(pDC,point);
  399. }
  400. break;
  401. }
  402. case circle :
  403. {
  404. if(selectstatus == YesSelect)
  405. {
  406. // pDoc->m_shapetool->Update(pDC);
  407. pDoc->m_shapetool->Move(pDC,point);
  408. }
  409. break;
  410. }
  411. case ellipse:
  412. {
  413. if(selectstatus == YesSelect)
  414. {
  415. // pDoc->m_shapetool->Update(pDC);
  416. pDoc->m_shapetool->Move(pDC,point);
  417. }
  418. break;
  419. }
  420. }
  421. }
  422. /************************字体移动***********************************/
  423. /* if( pDoc->m_tool == move && pDoc->m_shape == font && nFlags == MK_LBUTTON )
  424. {
  425. CPoint m_point;
  426. m_point.x = point.x ;
  427. m_point.y = point.y - 32;
  428. m_point.x = abs(m_point.x - m_fontselect.x);
  429. m_point.y = abs(m_point.y - m_fontselect.y);
  430. //pDoc->m_text.TextMove(pDC,point,index,selectrect);
  431. }*/
  432. /***********  坐标计算   *********/
  433. CMainFrame *pWnd = (CMainFrame *)::AfxGetMainWnd();
  434. pWnd->m_wndStatusBar.SetPaneInfo(2,ID_SEPARATOR,SBPS_NORMAL,45);
  435. CString MouseInfo;
  436. MouseInfo.Format("%002d,%002d",point.x,point.y);
  437. pWnd->m_wndStatusBar.SetPaneText(2,MouseInfo);
  438. CView::OnMouseMove(nFlags, point);
  439. }
  440. void CCAD2006View::OnLButtonDown(UINT nFlags, CPoint point) 
  441. {
  442. CCAD2006Doc* pDoc = GetDocument();
  443. CDC *pDC = GetDC();
  444. /********************旋转工具****************************/
  445. if( pDoc->m_tool == eddy )
  446. {
  447. switch( pDoc->m_shape )
  448. {
  449. case trigon:
  450. {
  451. if(selectstatus == YesSelect) 
  452. {
  453. pDoc->m_shapetool->Rotate(pDC,point);      //转30度
  454. this->m_openclose = close;
  455. }
  456. break;
  457. }
  458. case polygon:
  459. {
  460. if(selectstatus == YesSelect) 
  461. {
  462. pDoc->m_shapetool->Rotate(pDC,point);      //转30度
  463. this->m_openclose = close;
  464. }
  465. break;
  466. }
  467. case line:
  468. {
  469. if(selectstatus == YesSelect) 
  470. {
  471. pDoc->m_shapetool->Rotate(pDC,point);      //转30度
  472. this->m_openclose = close;
  473. }
  474. break;
  475. }
  476. }
  477. }
  478. /*****************镜像工具***********************/
  479. if( pDoc->m_tool == msl )
  480. {
  481. switch( pDoc->m_shape )
  482. {
  483. case rect:
  484. {
  485. if(selectstatus == YesSelect) 
  486. {
  487. mirrorstatus = YesMirror;
  488. pDoc->m_shapetool->OnMirLBtnDn(pDC,point);
  489. }
  490. break;
  491. }
  492. case trigon:
  493. {
  494. if(selectstatus == YesSelect) 
  495. {
  496. mirrorstatus = YesMirror;
  497. pDoc->m_shapetool->OnMirLBtnDn(pDC,point);
  498. }
  499. break;
  500. }
  501. case polygon:
  502. {
  503. if(selectstatus == YesSelect) 
  504. {
  505. mirrorstatus = YesMirror;
  506. pDoc->m_shapetool->OnMirLBtnDn(pDC,point);
  507. }
  508. break;
  509. }
  510. case circle:
  511. {
  512. if(selectstatus == YesSelect) 
  513. {
  514. mirrorstatus = YesMirror;
  515. pDoc->m_shapetool->OnMirLBtnDn(pDC,point);
  516. }
  517. break;
  518. }
  519. case line:
  520. {
  521. if(selectstatus == YesSelect) 
  522. {
  523. mirrorstatus = YesMirror;
  524. pDoc->m_shapetool->OnMirLBtnDn(pDC,point);
  525. }
  526. break;
  527. }
  528. }
  529. }
  530. /**************************缩放工具***********************************/
  531. if( pDoc->m_tool == zoom )
  532. {
  533. if( this->ZoomTrigonSelect(point) )
  534. {
  535. blnselecttrigon = false;
  536. selectstatus = YesSelect;
  537. this->m_openclose = close;
  538. }
  539. else if( this->ZoomPolygonSelect(point) )
  540. {
  541. blnselecttrigon = false;
  542. this->m_openclose = close;
  543. selectstatus = YesSelect;
  544. }
  545. else if( this->RectSelect(point) )
  546. {
  547. blnselecttrigon = false;
  548. this->m_openclose = close;
  549. selectstatus = YesSelect;
  550. }
  551. else if( this->CircleSelect(point) )
  552. {
  553. blnselecttrigon = false;
  554. this->m_openclose = close;
  555. selectstatus = YesSelect;
  556. }
  557. else if( this->EllipseSelect(point) )
  558. {
  559. blnselecttrigon = false;
  560. this->m_openclose = close;
  561. selectstatus = YesSelect;
  562. }
  563. else if( this->ZoomLineSelect(point) )
  564. {
  565. blnselecttrigon = false;
  566. this->m_openclose = close;
  567. selectstatus = YesSelect;
  568. }
  569. }
  570. /*****************选中工具******************/
  571. if( pDoc->m_tool == select )
  572. {
  573. for( int i = 0; i < m_array.GetLength(); i++ )
  574. {
  575. switch( m_array.operator [](i) )
  576. {
  577. case '1':
  578. {
  579. if(this->LineSelect(point))
  580. {
  581. selectstatus = YesSelect;
  582. pDoc->m_shape = line;
  583. blnselecttrigon = false;
  584. blnselect = false;    //删除
  585. }
  586. break;
  587. }
  588. case '2':
  589. {
  590. //(CLine *)pDoc->m_shapetool->Select(pDC,point);
  591. break;
  592. }
  593. case '3':
  594. {
  595. if(RectSelect(point))
  596. {
  597. selectstatus = YesSelect;
  598. pDoc->m_shape = rect;
  599. blnselecttrigon = false;
  600. blnselect = false;    //删除
  601. }
  602. break;
  603. }
  604. case '4':
  605. {
  606. if(TrigonSelect(point))
  607. {
  608. selectstatus = YesSelect;
  609. pDoc->m_shape = trigon;
  610. blnselecttrigon = false;
  611. blnselect = false;    //删除
  612. }
  613. break;
  614. }
  615. case '5':
  616. {
  617. if(this->PolygonSelect(point))
  618. {
  619. selectstatus = YesSelect;
  620. pDoc->m_shape = polygon;
  621. blnselecttrigon = false;
  622. blnselect = false;    //删除
  623. }
  624. break;
  625. }
  626. case '6':
  627. {
  628. //(CCircle *)pDoc->m_shapetool->Select(pDC,point);
  629. if(this->CircleSelect(point))
  630. {
  631. pDoc->m_shape = circle;
  632. blnselecttrigon = false;
  633. selectstatus = YesSelect;
  634. blnselect = false;    //删除
  635. }
  636. break;
  637. }
  638. case '7':
  639. {
  640. //(CCircle *)pDoc->m_shapetool->Select(pDC,point);
  641. if(this->EllipseSelect(point))
  642. {
  643. pDoc->m_shape = ellipse;
  644. blnselecttrigon = false;
  645. selectstatus = YesSelect;
  646. blnselect = false;    //删除
  647. }
  648. break;
  649. }
  650. }
  651. }
  652. }
  653. /**********************画图工具绘画***************************/
  654. if( this->m_state == first && pDoc->m_tool != select && pDoc->m_tool != move && 
  655. pDoc->m_tool != zoom && pDoc->m_tool != msl && pDoc->m_tool != eddy )
  656. {
  657. switch( pDoc->m_shape )
  658. {
  659. case rect:
  660. {
  661. this->m_openclose = open;
  662. pDoc->m_shapetool = new CRectangle;
  663. pDoc->m_shapetool->OnLbuttondown(pDC,point);
  664. pDoc->m_shapearray.Add(((CObject*)pDoc->m_shapetool));
  665. m_rectanglearray.Add(pDoc->m_shapetool->GetPosBegin());
  666. m_array.Insert(m_array.GetLength(),"3");
  667. break;
  668. }
  669. case trigon:
  670. {
  671. this->m_openclose = open;
  672. if( blnfrist )
  673. {
  674. pDoc->m_shapetool = new CTrigon;
  675. pDoc->m_shapetool->OnLbuttondown(pDC,point);
  676. pDoc->m_shapearray.Add(((CObject*)pDoc->m_shapetool));
  677. m_trigonarray.Add(pDoc->m_shapetool->GetPosBegin());
  678. m_array.Insert(m_array.GetLength(),"4");
  679. count++;
  680. blnfrist = false;
  681. }
  682. else
  683. {
  684. if( count == 1 )
  685. {
  686. m_trigonarray.Add(pDoc->m_shapetool->GetPosCenter());
  687. }
  688. else
  689. {
  690. m_trigonarray.Add(pDoc->m_shapetool->GetPosEnd());
  691. }
  692. pDoc->m_shapetool->OnLbuttondown(pDC,point);
  693. count++;
  694. }
  695. break;
  696. }
  697. case line:
  698. {
  699. this->m_openclose = open;
  700. pDoc->m_shapetool = new CLine;
  701. pDoc->m_shapetool->OnLbuttondown(pDC,point);
  702. pDoc->m_shapearray.Add(((CObject*)pDoc->m_shapetool));
  703. m_linearray.Add(pDoc->m_shapetool->GetPosBegin());
  704. m_array.Insert(m_array.GetLength(),"1");
  705. break;
  706. }
  707. case linedown:
  708. {
  709. this->m_openclose = open;
  710. pDoc->m_shapetool = new CLine;
  711. pDoc->m_shapetool->OnLbuttondown(pDC,point);
  712. pDoc->m_shapearray.Add(((CObject*)pDoc->m_shapetool));
  713. m_linedownarray.Add(pDoc->m_shapetool->GetPosBegin());
  714. m_array.Insert(m_array.GetLength(),"2");
  715. break;
  716. }
  717. case polygon:
  718. {
  719. this->m_openclose = open;
  720. pDoc->m_shapetool = new CPolygon;
  721. pDoc->m_shapetool->OnLbuttondown(pDC,point);
  722. m_polygonarray.Add(pDoc->m_shapetool->GetPosBegin());
  723. m_array.Insert(m_array.GetLength(),"5");
  724. break;
  725. }
  726. case circle:
  727. {
  728. this->m_openclose = open;
  729. pDoc->m_shapetool = new CCircle;
  730. pDoc->m_shapetool->OnLbuttondown(pDC,point);
  731. m_circlearray.Add(pDoc->m_shapetool->GetPosBegin());
  732. m_array.Insert(m_array.GetLength(),"6");
  733. break;
  734. }
  735. case ellipse:
  736. {
  737. this->m_openclose = open;
  738. pDoc->m_shapetool = new CEllipse;
  739. pDoc->m_shapetool->OnLbuttondown(pDC,point);
  740. m_ellipsearray.Add(pDoc->m_shapetool->GetPosBegin());
  741. m_array.Insert(m_array.GetLength(),"7");
  742. break;
  743. }
  744. }
  745. }
  746. /*******************移动工具************************/
  747. if( pDoc->m_tool == move  )
  748. {
  749. if( blnselecttrigon  == false )
  750. {
  751. selectstatus = YesSelect;
  752. this->m_openclose = close;
  753. }
  754. else if(TrigonSelect(point))
  755. {
  756. blnselecttrigon = false;
  757. selectstatus = YesSelect;
  758. this->m_openclose = close;
  759. }
  760. else if( this->PolygonSelect(point) )
  761. {
  762. blnselecttrigon = false;
  763. this->m_openclose = close;
  764. selectstatus = YesSelect;
  765. }
  766. else if( this->RectSelect(point) )
  767. {
  768. blnselecttrigon = false;
  769. this->m_openclose = close;
  770. selectstatus = YesSelect;
  771. }
  772. else if( this->CircleSelect(point) )
  773. {
  774. blnselecttrigon = false;
  775. this->m_openclose = close;
  776. selectstatus = YesSelect;
  777. }
  778. else if( this->EllipseSelect(point) )
  779. {
  780. blnselecttrigon = false;
  781. this->m_openclose = close;
  782. selectstatus = YesSelect;
  783. }
  784. else if( this->LineSelect(point) )
  785. {
  786. blnselecttrigon = false;
  787. this->m_openclose = close;
  788. selectstatus = YesSelect;
  789. }
  790. }
  791. if( count == 3 )    //三角形
  792. {
  793. blnfrist = true;
  794. this->m_state = second;
  795. count = 0;
  796. }
  797. /*********************存储数据****************************/
  798. if( this->m_state == second )
  799. {
  800. switch( pDoc->m_shape )
  801. {
  802. case line:
  803. {
  804. m_linearray.Add(pDoc->m_shapetool->GetPosEnd());
  805. break;
  806. }
  807. case rect:
  808. {
  809. m_rectanglearray.Add(pDoc->m_shapetool->GetPosEnd());
  810. break;
  811. }
  812. case polygon:
  813. {
  814. m_polygonarray.Add(pDoc->m_shapetool->GetPosEnd());
  815. m_polygonarraypoint.Add(pDoc->m_shapetool->GetPosBorder());
  816. break;
  817. }
  818. case circle:
  819. {
  820. m_circlearray.Add(pDoc->m_shapetool->GetPosEnd());
  821. break;
  822. }
  823. case ellipse:
  824. {
  825. m_ellipsearray.Add(pDoc->m_shapetool->GetPosCenter());
  826. m_ellipsearray.Add(pDoc->m_shapetool->GetPosEnd());
  827. break;
  828. }
  829. }
  830. this->m_openclose = close;
  831. this->m_state = first;
  832. }
  833. /************************字体工具进行写字***********************************/
  834. if( pDoc->m_shape == font )
  835. {
  836. if( bln == true )
  837. {
  838. int m_num = m_rectarray.GetSize();
  839. if( m_num > 0 )
  840. {
  841. CRect rect = m_rectarray.operator [](m_num - 1);
  842. pDoc->m_text.LostTextFouce(pDC,rect);
  843. }
  844. CRect recttext(point.x+55,point.y+60,point.x+140,point.y+80);
  845. m_textarray.Add(recttext);
  846. CRect rectrect(point.x,point.y,point.x+90,point.y+22);
  847. m_rectarray.Add(rectrect);
  848. pDoc->m_text.draw(recttext);
  849. pDoc->m_text.SetTextFouce(pDC,rectrect);
  850. //pDoc->m_text.SetFouceRect(rectrect);
  851. //pDoc->m_text.SetFouceTextRect(rectrect);
  852. bln = false;
  853. }
  854. else
  855. {
  856. CRect rect = m_rectarray.operator [](m_rectarray.GetSize() - 1);
  857. pDoc->m_text.LostTextFouce(pDC,rect);
  858. bln = true;
  859. }
  860. }
  861. /*********************选中字体****************************/
  862. if( pDoc->m_tool == arrow  )
  863. {
  864. if( m_rectarray.GetSize() > 0 )
  865. {
  866. CPoint m_point;
  867. m_point.x = point.x ;
  868. m_point.y = point.y ;
  869. for( int i = 0; i < m_rectarray.GetSize(); i++ )
  870. {
  871. CRect rect = m_rectarray.operator [](i);
  872. if( rect.PtInRect(m_point) )
  873. {
  874. CRect textrect = m_textarray.operator [](i);
  875. selectrect = rect;
  876. index = i;
  877. blnselect = false;  //判断是否被选取
  878. pDoc->m_text.LostTextFouce(pDC,pDoc->m_text.GetFouceText());
  879. pDoc->m_text.SetTextFouce(pDC,rect);
  880. pDoc->m_text.SetFouceRect(rect);     //存取选取的框架的大小
  881. //pDoc->m_text.SetFouceTextRect(textrect);
  882. //pDoc->m_shape = font;
  883. break;
  884. }
  885. else
  886. {
  887. if( !blnselect )
  888. {
  889. pDoc->m_text.LostTextFouce(pDC,pDoc->m_text.GetFouceText());
  890. }
  891. }
  892. }
  893. }
  894. }
  895. CView::OnLButtonDown(nFlags, point);
  896. }
  897. void CCAD2006View::OnRButtonDown(UINT nFlags, CPoint point) 
  898. {
  899. // TODO: Add your message handler code here and/or call default
  900. CCAD2006Doc* pDoc = GetDocument();
  901. CDC *pDC = GetDC();
  902. this->m_openclose = close;
  903. pDoc->m_tool = select;
  904. pDoc->m_shape = shape;
  905. // pDoc->m_text.DeleteText(pDC,1,rect);
  906. CView::OnRButtonDown(nFlags, point);
  907. }
  908. void CCAD2006View::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) 
  909. {
  910. // TODO: Add your message handler code here and/or call default
  911. CCAD2006Doc* pDoc = GetDocument();
  912. CDC *pDC = GetDC();
  913. if( nChar == 46 && blnselect == false )
  914. {
  915. switch( pDoc->m_shape )
  916. {
  917. case rect:
  918. {
  919. // pDoc->m_shapetool = new CRectangle;
  920. pDoc->m_shapetool->Delete(pDC);
  921. m_rectanglearray.RemoveAt(shapeindex,1);
  922. m_rectanglearray.RemoveAt(shapeindex,1);
  923. blnselect = true;
  924. break;
  925. }
  926. case font:
  927. {
  928. //pDoc->m_shapetool = new CRectangle;
  929. pDoc->m_text.DeleteText(pDC,index,selectrect);
  930. m_rectarray.RemoveAt(index);
  931. m_textarray.RemoveAt(index);
  932. blnselect = true;
  933. break;
  934. }
  935. case trigon:
  936. {
  937. // pDoc->m_shapetool = new CTrigon;
  938. pDoc->m_shapetool->Delete(pDC);
  939. m_trigonarray.RemoveAt(shapeindex,1);
  940. m_trigonarray.RemoveAt(shapeindex,1);
  941. m_trigonarray.RemoveAt(shapeindex,1);
  942. blnselect = true;
  943. break;
  944. }
  945. case polygon:
  946. {
  947. // pDoc->m_shapetool = new CPolygon;
  948. pDoc->m_shapetool->Delete(pDC);
  949. m_polygonarray.RemoveAt(shapeindex,1);
  950. m_polygonarray.RemoveAt(shapeindex,1);
  951. m_polygonarraypoint.RemoveAt(shapeindex/2,1);
  952. blnselect = true;
  953. break;
  954. }
  955. case circle:
  956. {
  957. pDoc->m_shapetool->Delete(pDC);
  958. m_circlearray.RemoveAt(shapeindex,1);
  959. m_circlearray.RemoveAt(shapeindex,1);
  960. blnselect = true;
  961. break;
  962. }
  963. case ellipse:
  964. {
  965. pDoc->m_shapetool->Delete(pDC);
  966. m_ellipsearray.RemoveAt(shapeindex,1);
  967. m_ellipsearray.RemoveAt(shapeindex,1);
  968. blnselect = true;
  969. break;
  970. }
  971. case line:
  972. {
  973. pDoc->m_shapetool->Delete(pDC);
  974. m_linearray.RemoveAt(shapeindex,1);
  975. m_linearray.RemoveAt(shapeindex,1);
  976. blnselect = true;
  977. break;
  978. }
  979. }
  980. switch( pDoc->m_tool )
  981. {
  982. case arrow:
  983. {
  984. pDoc->m_text.DeleteText(pDC,index,selectrect);
  985. m_rectarray.RemoveAt(index);
  986. m_textarray.RemoveAt(index);
  987. blnselect = true;
  988. break;
  989. }
  990. }
  991. }
  992. if( nChar == VK_CONTROL || nChar == 90 )
  993. {
  994. int i = pDoc->m_shapearray.GetSize();
  995. if( i )
  996. {
  997. CShape* temp = (CShape*)pDoc->m_shapearray.operator [](i - 1);
  998. pDoc->m_shapearray.RemoveAt(i - 1);
  999. delete temp;
  1000. CRect rect;
  1001. this->GetClientRect(&rect);
  1002. pDC->InvertRect(rect);
  1003. pDoc->m_shape = shape;
  1004. pDoc->m_tool = arrow;
  1005. }
  1006. }
  1007. CView::OnKeyDown(nChar, nRepCnt, nFlags);
  1008. }
  1009. void CCAD2006View::OnLButtonUp(UINT nFlags, CPoint point) 
  1010. {
  1011. // TODO: Add your message handler code here and/or call default
  1012. CCAD2006Doc* pDoc = GetDocument();
  1013. CDC *pDC = GetDC();
  1014. /******************旋转工具***************************/
  1015. if( pDoc->m_tool == eddy )
  1016. {
  1017. switch( pDoc->m_shape )
  1018. {
  1019. case trigon:
  1020. {
  1021. //selectstatus = NoSelect;
  1022. pDoc->m_shapetool->Update(pDC); //去小圈再动
  1023. m_trigonarray.operator [](shapeindex) = pDoc->m_shapetool->GetPosBegin();
  1024. m_trigonarray.operator [](shapeindex + 1) = pDoc->m_shapetool->GetPosCenter();
  1025. m_trigonarray.operator [](shapeindex + 2) = pDoc->m_shapetool->GetPosEnd();
  1026. //pDoc->m_shapetool->Move(pDC,point);
  1027. //delete pDoc->m_shapetool;
  1028. blnselecttrigon = true;
  1029. break;
  1030. }
  1031. case polygon:
  1032. {
  1033. //selectstatus = NoSelect;
  1034. pDoc->m_shapetool->Update(pDC); //去小圈再动
  1035. m_polygonarray.operator [](shapeindex) = pDoc->m_shapetool->GetPosBegin();
  1036. m_polygonarray.operator [](shapeindex + 1) = pDoc->m_shapetool->GetPosEnd();
  1037. m_polygonarraypoint.operator [](shapeindex/2) = pDoc->m_shapetool->GetPosBorder();
  1038. //pDoc->m_shapetool->Move(pDC,point);
  1039. //delete pDoc->m_shapetool;
  1040. blnselecttrigon = true;
  1041. break;
  1042. }
  1043. }
  1044. }
  1045. /*****************镜像工具***********************/
  1046. if( pDoc->m_tool == msl )
  1047. {
  1048. switch( pDoc->m_shape )
  1049. {
  1050. case rect:
  1051. {
  1052. if(mirrorstatus == YesMirror)
  1053. {
  1054. mirrorstatus = NoMirror;
  1055. pDoc->m_shapetool->Update(pDC);
  1056. }
  1057. break;
  1058. }
  1059. case trigon:
  1060. {
  1061. if(mirrorstatus == YesMirror)
  1062. {
  1063. mirrorstatus = NoMirror;
  1064. m_trigonarray.Add(pDoc->m_shapetool->GetPosBegin());
  1065. m_trigonarray.Add(pDoc->m_shapetool->GetPosCenter());
  1066. m_trigonarray.Add(pDoc->m_shapetool->GetPosEnd());
  1067. pDoc->m_shapetool->Update(pDC);
  1068. }
  1069. break;
  1070. }
  1071. case polygon:
  1072. {
  1073. if(mirrorstatus == YesMirror)
  1074. {
  1075. mirrorstatus = NoMirror;
  1076. pDoc->m_shapetool->Update(pDC);
  1077. }
  1078. break;
  1079. }
  1080. case circle:
  1081. {
  1082. if(mirrorstatus == YesMirror)
  1083. {
  1084. m_circlearray.Add(pDoc->m_shapetool->GetPosBegin());
  1085. m_circlearray.Add(pDoc->m_shapetool->GetPosEnd());
  1086. mirrorstatus = NoMirror;
  1087. pDoc->m_shapetool->Update(pDC);
  1088. }
  1089. break;
  1090. }
  1091. case line:
  1092. {
  1093. if(mirrorstatus == YesMirror)
  1094. {
  1095. m_linearray.Add(pDoc->m_shapetool->GetPosBegin());
  1096. m_linearray.Add(pDoc->m_shapetool->GetPosEnd());
  1097. mirrorstatus = NoMirror;
  1098. pDoc->m_shapetool->Update(pDC);
  1099. }
  1100. break;
  1101. }
  1102. }
  1103. }
  1104. /******************拖动工具*******************/
  1105. if( pDoc->m_tool == move && !blnselecttrigon )
  1106. {
  1107. switch( pDoc->m_shape )
  1108. {
  1109. case line:
  1110. {
  1111. selectstatus = NoSelect;
  1112. pDoc->m_shapetool->Update(pDC); //去小圈再动
  1113. m_linearray.operator [](shapeindex) = pDoc->m_shapetool->GetPosBegin();
  1114. m_linearray.operator [](shapeindex + 1) = pDoc->m_shapetool->GetPosEnd();
  1115. pDoc->m_shapetool->Move(pDC,point);
  1116. blnselecttrigon = true;
  1117. break;
  1118. }
  1119. case trigon:
  1120. {
  1121. selectstatus = NoSelect;
  1122. pDoc->m_shapetool->Update(pDC); //去小圈再动
  1123. m_trigonarray.operator [](shapeindex) = pDoc->m_shapetool->GetPosBegin();
  1124. m_trigonarray.operator [](shapeindex + 1) = pDoc->m_shapetool->GetPosCenter();
  1125. m_trigonarray.operator [](shapeindex + 2) = pDoc->m_shapetool->GetPosEnd();
  1126. pDoc->m_shapetool->Move(pDC,point);
  1127. //delete pDoc->m_shapetool;
  1128. blnselecttrigon = true;
  1129. break;
  1130. }
  1131. case polygon:
  1132. {
  1133. selectstatus = NoSelect;
  1134. pDoc->m_shapetool->Update(pDC); //去小圈再动
  1135. m_polygonarray.operator [](shapeindex) = pDoc->m_shapetool->GetPosBegin();
  1136. m_polygonarray.operator [](shapeindex + 1) = pDoc->m_shapetool->GetPosEnd();
  1137. m_polygonarraypoint.operator [](shapeindex/2) = pDoc->m_shapetool->GetPosBorder();
  1138. pDoc->m_shapetool->Move(pDC,point);
  1139. //delete pDoc->m_shapetool;
  1140. blnselecttrigon = true;
  1141. break;
  1142. }
  1143. case rect:
  1144. {
  1145. selectstatus = NoSelect;
  1146. pDoc->m_shapetool->Update(pDC); //去小圈再动
  1147. m_rectanglearray.operator [](shapeindex) = pDoc->m_shapetool->GetPosBegin();
  1148. m_rectanglearray.operator [](shapeindex + 1) = pDoc->m_shapetool->GetPosEnd();
  1149. //pDoc->m_shapetool->Move(pDC,point);
  1150. //delete pDoc->m_shapetool;
  1151. blnselecttrigon = true;
  1152. break;
  1153. }
  1154. case circle:
  1155. {
  1156. selectstatus = NoSelect;
  1157. //pDoc->m_shapetool->Update(pDC); //去小圈再动
  1158. m_circlearray.operator [](shapeindex) = pDoc->m_shapetool->GetPosBegin();
  1159. m_circlearray.operator [](shapeindex + 1) = pDoc->m_shapetool->GetPosEnd();
  1160. //pDoc->m_shapetool->Move(pDC,point);
  1161. //delete pDoc->m_shapetool;
  1162. blnselecttrigon = true;
  1163. break;
  1164. }
  1165. case ellipse:
  1166. {
  1167. selectstatus = NoSelect;
  1168. //pDoc->m_shapetool->Update(pDC); //去小圈再动
  1169. m_ellipsearray.operator [](shapeindex) = pDoc->m_shapetool->GetPosBegin();
  1170. m_ellipsearray.operator [](shapeindex + 1) = pDoc->m_shapetool->GetPosCenter();
  1171. m_ellipsearray.operator [](shapeindex + 2) = pDoc->m_shapetool->GetPosEnd();
  1172. //pDoc->m_shapetool->Move(pDC,point);
  1173. //delete pDoc->m_shapetool;
  1174. blnselecttrigon = true;
  1175. break;
  1176. }
  1177. }
  1178. }
  1179. /*********************缩放工具*************************/
  1180. if( pDoc->m_tool == zoom && !blnselecttrigon )
  1181. {
  1182. switch( pDoc->m_shape )
  1183. {
  1184. case trigon:
  1185. {
  1186. selectstatus = NoSelect;
  1187. pDoc->m_shapetool->Update(pDC); //去小圈再动
  1188. m_trigonarray.operator [](shapeindex) = pDoc->m_shapetool->GetPosBegin();
  1189. m_trigonarray.operator [](shapeindex + 1) = pDoc->m_shapetool->GetPosCenter();
  1190. m_trigonarray.operator [](shapeindex + 2) = pDoc->m_shapetool->GetPosEnd();
  1191. //delete pDoc->m_shapetool;
  1192. blnselecttrigon = true;
  1193. break;
  1194. }
  1195. case polygon:
  1196. {
  1197. selectstatus = NoSelect;
  1198. pDoc->m_shapetool->Update(pDC); //去小圈再动
  1199. m_polygonarray.operator [](shapeindex) = pDoc->m_shapetool->GetPosBegin();
  1200. m_polygonarray.operator [](shapeindex + 1) = pDoc->m_shapetool->GetPosEnd();
  1201. m_polygonarraypoint.operator [](shapeindex/2) = pDoc->m_shapetool->GetPosBorder();
  1202. //delete pDoc->m_shapetool;
  1203. blnselecttrigon = true;
  1204. break;
  1205. }
  1206. case rect:
  1207. {
  1208. selectstatus = NoSelect;
  1209. pDoc->m_shapetool->Update(pDC); //去小圈再动
  1210. m_rectanglearray.operator [](shapeindex) = pDoc->m_shapetool->GetPosBegin();
  1211. m_rectanglearray.operator [](shapeindex + 1) = pDoc->m_shapetool->GetPosEnd();
  1212. //delete pDoc->m_shapetool;
  1213. blnselecttrigon = true;
  1214. break;
  1215. }
  1216. case circle:
  1217. {
  1218. selectstatus = NoSelect;
  1219. // pDoc->m_shapetool->Update(pDC); //去小圈再动
  1220. m_circlearray.operator [](shapeindex) = pDoc->m_shapetool->GetPosBegin();
  1221. m_circlearray.operator [](shapeindex + 1) = pDoc->m_shapetool->GetPosEnd();
  1222. //delete pDoc->m_shapetool;
  1223. blnselecttrigon = true;
  1224. break;
  1225. }
  1226. case ellipse:
  1227. {
  1228. selectstatus = NoSelect;
  1229. // pDoc->m_shapetool->Update(pDC); //去小圈再动
  1230. m_ellipsearray.operator [](shapeindex) = pDoc->m_shapetool->GetPosBegin();
  1231. m_ellipsearray.operator [](shapeindex + 1) = pDoc->m_shapetool->GetPosCenter();
  1232. m_ellipsearray.operator [](shapeindex + 2) = pDoc->m_shapetool->GetPosEnd();
  1233. //delete pDoc->m_shapetool;
  1234. blnselecttrigon = true;
  1235. break;
  1236. }
  1237. case line:
  1238. {
  1239. selectstatus = NoSelect;
  1240. // pDoc->m_shapetool->Update(pDC); //去小圈再动
  1241. m_linearray.operator [](shapeindex) = pDoc->m_shapetool->GetPosBegin();
  1242. m_linearray.operator [](shapeindex + 1) = pDoc->m_shapetool->GetPosEnd();
  1243. //delete pDoc->m_shapetool;
  1244. blnselecttrigon = true;
  1245. break;
  1246. }
  1247. }
  1248. }
  1249. CView::OnLButtonUp(nFlags, point);
  1250. }
  1251. bool CCAD2006View::TrigonSelect(CPoint point)
  1252. {
  1253. CCAD2006Doc* pDoc = GetDocument();
  1254. CDC *pDC = GetDC();
  1255. pDoc->m_shapetool = new CTrigon;
  1256. for( int j = 0; j < m_trigonarray.GetSize() ; j+=3 )
  1257. {
  1258. pDoc->m_shapetool->SetPosBegin(m_trigonarray.operator [](j));
  1259. pDoc->m_shapetool->SetPosCenter(m_trigonarray.operator [](j+1));
  1260. pDoc->m_shapetool->SetPosEnd(m_trigonarray.operator [](j+2));
  1261. if(pDoc->m_shapetool->Select(pDC,point))
  1262. {
  1263. shapeindex = j;
  1264. return true;
  1265. }
  1266. }
  1267. delete pDoc->m_shapetool;
  1268. return false;
  1269. }
  1270. bool CCAD2006View::LineSelect(CPoint point)
  1271. {
  1272. CCAD2006Doc* pDoc = GetDocument();
  1273. CDC *pDC = GetDC();
  1274. pDoc->m_shapetool = new CLine;
  1275. for( int j = 0; j < m_linearray.GetSize() ; j+=2 )
  1276. {
  1277. pDoc->m_shapetool->SetPosBegin(m_linearray.operator [](j));
  1278. pDoc->m_shapetool->SetPosEnd(m_linearray.operator [](j+1));
  1279. if((CLine *)pDoc->m_shapetool->Select(pDC,point))
  1280. {
  1281. shapeindex = j;
  1282. return true;
  1283. }
  1284. }
  1285. delete pDoc->m_shapetool;
  1286. return false;
  1287. }
  1288. bool CCAD2006View::CircleSelect(CPoint point)
  1289. {
  1290. CCAD2006Doc* pDoc = GetDocument();
  1291. CDC *pDC = GetDC();
  1292. pDoc->m_shapetool = new CCircle;
  1293. for( int j = 0; j < m_circlearray.GetSize() ; j+=2 )
  1294. {
  1295. pDoc->m_shapetool->SetPosBegin(m_circlearray.operator [](j));
  1296. pDoc->m_shapetool->SetPosEnd(m_circlearray.operator [](j+1));
  1297. if((CCircle *)pDoc->m_shapetool->Select(pDC,point))
  1298. {
  1299. pDoc->m_shape = circle;
  1300. shapeindex = j;
  1301. return true;
  1302. }
  1303. }
  1304. delete pDoc->m_shapetool;
  1305. return false;
  1306. }
  1307. bool CCAD2006View::RectSelect(CPoint point)
  1308. {
  1309. CCAD2006Doc* pDoc = GetDocument();
  1310. CDC *pDC = GetDC();
  1311. pDoc->m_shapetool = new CRectangle;
  1312. for( int j = 0; j < m_rectanglearray.GetSize() ; j+=2 )
  1313. {
  1314. pDoc->m_shapetool->SetPosBegin(m_rectanglearray.operator [](j));
  1315. pDoc->m_shapetool->SetPosEnd(m_rectanglearray.operator [](j+1));
  1316. if((CRectangle *)pDoc->m_shapetool->Select(pDC,point))
  1317. {
  1318. shapeindex = j;
  1319. return true;
  1320. }
  1321. }
  1322. delete pDoc->m_shapetool;
  1323. return false;
  1324. }
  1325. bool CCAD2006View::PolygonSelect(CPoint point)
  1326. {
  1327. CCAD2006Doc* pDoc = GetDocument();
  1328. CDC *pDC = GetDC();
  1329. pDoc->m_shapetool = new CPolygon;
  1330. for( int j = 0,i = 0; j < m_polygonarray.GetSize() ; j+=2,i++ )
  1331. {
  1332. pDoc->m_shapetool->SetPosBegin(m_polygonarray.operator [](j));
  1333. pDoc->m_shapetool->SetPosEnd(m_polygonarray.operator [](j+1));
  1334. pDoc->m_shapetool->SetPosBorder(m_polygonarraypoint.operator [](i));
  1335. if((CPolygon *)pDoc->m_shapetool->Select(pDC,point))
  1336. {
  1337. shapeindex = j;
  1338. return true;
  1339. }
  1340. }
  1341. delete pDoc->m_shapetool;
  1342. return false;
  1343. }
  1344. bool CCAD2006View::EllipseSelect(CPoint point)
  1345. {
  1346. CCAD2006Doc* pDoc = GetDocument();
  1347. CDC *pDC = GetDC();
  1348. pDoc->m_shapetool = new CEllipse;
  1349. for( int j = 0; j < m_ellipsearray.GetSize() ; j+=3 )
  1350. {
  1351. pDoc->m_shapetool->SetPosBegin(m_ellipsearray.operator [](j));
  1352. pDoc->m_shapetool->SetPosCenter(m_ellipsearray.operator [](j+1));
  1353. pDoc->m_shapetool->SetPosEnd(m_ellipsearray.operator [](j+2));
  1354. if((CEllipse *)pDoc->m_shapetool->Select(pDC,point))
  1355. {
  1356. pDoc->m_shape = ellipse;
  1357. shapeindex = j;
  1358. return true;
  1359. }
  1360. }
  1361. delete pDoc->m_shapetool;
  1362. return false;
  1363. }
  1364. bool CCAD2006View::ZoomTrigonSelect(CPoint point)
  1365. {
  1366. CCAD2006Doc* pDoc = GetDocument();
  1367. CDC *pDC = GetDC();
  1368. pDoc->m_shapetool = new CTrigon;
  1369. for( int j = 0; j < m_trigonarray.GetSize() ; j+=3 )
  1370. {
  1371. pDoc->m_shapetool->SetPosBegin(m_trigonarray.operator [](j));
  1372. pDoc->m_shapetool->SetPosCenter(m_trigonarray.operator [](j+1));
  1373. pDoc->m_shapetool->SetPosEnd(m_trigonarray.operator [](j+2));
  1374. if((CTrigon *)pDoc->m_shapetool->SelectOnePt(pDC,point))
  1375. {
  1376. shapeindex = j;
  1377. return true;
  1378. }
  1379. }
  1380. delete pDoc->m_shapetool;
  1381. return false;
  1382. }
  1383. bool CCAD2006View::ZoomPolygonSelect(CPoint point)
  1384. {
  1385. CCAD2006Doc* pDoc = GetDocument();
  1386. CDC *pDC = GetDC();
  1387. pDoc->m_shapetool = new CPolygon;
  1388. for( int j = 0,i = 0; j < m_polygonarray.GetSize() ; j+=2,i++ )
  1389. {
  1390. pDoc->m_shapetool->SetPosBegin(m_polygonarray.operator [](j));
  1391. pDoc->m_shapetool->SetPosEnd(m_polygonarray.operator [](j+1));
  1392. pDoc->m_shapetool->SetPosBorder(m_polygonarraypoint.operator [](i));
  1393. if((CPolygon *)pDoc->m_shapetool->Select(pDC,point))
  1394. {
  1395. shapeindex = j;
  1396. return true;
  1397. }
  1398. }
  1399. delete pDoc->m_shapetool;
  1400. return false;
  1401. }
  1402. bool CCAD2006View::ZoomLineSelect(CPoint point)
  1403. {
  1404. CCAD2006Doc* pDoc = GetDocument();
  1405. CDC *pDC = GetDC();
  1406. pDoc->m_shapetool = new CLine;
  1407. for( int j = 0,i = 0; j < m_linearray.GetSize() ; j+=2,i++ )
  1408. {
  1409. pDoc->m_shapetool->SetPosBegin(m_linearray.operator [](j));
  1410. pDoc->m_shapetool->SetPosEnd(m_linearray.operator [](j+1));
  1411. if((CLine *)pDoc->m_shapetool->SelectOnePt(pDC,point))
  1412. {
  1413. shapeindex = j;
  1414. return true;
  1415. }
  1416. }
  1417. delete pDoc->m_shapetool;
  1418. return false;
  1419. }
  1420. void CCAD2006View::OnFileSave() 
  1421. {
  1422. // TODO: Add your command handler code here
  1423. CFile m_file;
  1424. CString m_str;
  1425. CString m_temp;
  1426. int j = m_linearray.GetSize();
  1427. for( int i = 0; i < m_array.GetLength(); i++ )
  1428. {
  1429. switch( m_array.operator [](i) )
  1430. {
  1431. case '1':
  1432. {
  1433. static int m_line = 0;
  1434. CPoint point1 = m_linearray.operator [](m_line);
  1435. CPoint point2 = m_linearray.operator [](m_line + 1);
  1436. m_temp.Format("*%c,%d,%d,%d,%d",m_array.operator [](i),
  1437. point1.x,point1.y,point2.x,point2.y);
  1438. m_str.Insert(m_str.GetLength(),m_temp);
  1439. m_line += 2;
  1440. break;
  1441. }
  1442. case '2':
  1443. {
  1444. /* static int m_linedown = 0;
  1445. m_temp.Format("%s,%d,%d",m_array.operator [](i),
  1446. m_linedownarray.operator [](m_linedown).x,m_linedownarray.operator [](m_linedown + 1).y)
  1447. m_str.Insert(m_str.GetLength(),m_temp);
  1448. m_linedown += 2;*/
  1449. break;
  1450. }
  1451. case '3':
  1452. {
  1453. static int m_rect = 0;
  1454. m_temp.Format("*%c,%d,%d,%d,%d",m_array.operator [](i),
  1455. m_rectanglearray.operator [](m_rect).x,m_rectanglearray.operator [](m_rect).y,
  1456. m_rectanglearray.operator [](m_rect + 1).x,m_rectanglearray.operator [](m_rect + 1).y);
  1457. m_str.Insert(m_str.GetLength(),m_temp);
  1458. m_rect += 2;
  1459. break;
  1460. }
  1461. case '4':
  1462. {
  1463. static int m_trigon = 0;
  1464. m_temp.Format("*%c,%d,%d,%d,%d,%d,%d",m_array.operator [](i),
  1465. m_trigonarray.operator [](m_trigon).x,m_trigonarray.operator [](m_trigon).y,
  1466. m_trigonarray.operator [](m_trigon + 1).x,m_trigonarray.operator [](m_trigon + 1).y,
  1467. m_trigonarray.operator [](m_trigon + 2).x,m_trigonarray.operator [](m_trigon + 2).y);
  1468. m_str.Insert(m_str.GetLength(),m_temp);
  1469. m_trigon += 3;
  1470. break;
  1471. }
  1472. case '5':
  1473. {
  1474. /* static int m_rect = 0;
  1475. m_temp.Format("%s,%d,%d",m_array.operator [](i),
  1476. m_polygonarray.operator [](m_rect).x,m_polygonarray.operator [](m_rect + 1).y)
  1477. m_str.Insert(m_str.GetLength(),m_temp);
  1478. m_rect += 2;*/
  1479. break;
  1480. }
  1481. case '6':
  1482. {
  1483. static int m_circle = 0;
  1484. m_temp.Format("*%c,%d,%d,%d,%d",m_array.operator [](i),
  1485. m_circlearray.operator [](m_circle).x,m_circlearray.operator [](m_circle).y,
  1486. m_circlearray.operator [](m_circle + 1).x,m_circlearray.operator [](m_circle + 1).y);
  1487. m_str.Insert(m_str.GetLength(),m_temp);
  1488. m_circle += 2;
  1489. break;
  1490. }
  1491. case '7':
  1492. {
  1493. static int m_ellipse = 0;
  1494. m_temp.Format("*%c,%d,%d,%d,%d",m_array.operator [](i),
  1495. m_ellipsearray.operator [](m_ellipse).x,m_ellipsearray.operator [](m_ellipse).y,
  1496. m_ellipsearray.operator [](m_ellipse + 1).x,m_ellipsearray.operator [](m_ellipse + 1).y);
  1497. m_str.Insert(m_str.GetLength(),m_temp);
  1498. m_ellipse += 2;
  1499. break;
  1500. }
  1501. }
  1502. }
  1503. m_file.Open("CAD.txt",CFile::modeCreate | CFile::modeWrite);
  1504. m_file.Write(m_str.operator LPCTSTR(),m_str.GetLength());
  1505. }
  1506. void CCAD2006View::OnFileOpen() 
  1507. {
  1508. // TODO: Add your command handler code here
  1509. CFileDialog m_dialog(true);
  1510. m_dialog.m_ofn.lpstrFilter = "文本文件(*.txt)*.txt所有类型(*.*)*.*";
  1511. CFile m_file;
  1512. if(m_dialog.DoModal() == IDOK )
  1513. {
  1514. m_file.Open(m_dialog.GetFileName(),CFile::modeRead);
  1515. m_file.Read((void *)m_allshapepoint.operator LPCTSTR(),m_file.GetLength());
  1516. }
  1517. ShowShape(m_allshapepoint);
  1518. }
  1519. void CCAD2006View::ShowShape(CString str)
  1520. {
  1521. CCAD2006Doc* pDoc = GetDocument();
  1522. CDC *pDC = GetDC();
  1523. CString m_tempshape;
  1524. CString m_temp;
  1525. CString m_point1,m_point2,m_point3,m_point4,m_point5,m_point6;
  1526. int i = 1;
  1527. int j ;
  1528. m_array = "";
  1529. while( 1 == 1 )
  1530. {
  1531. j = ::AfxExtractSubString(m_tempshape,str.operator LPCTSTR(),i,'*');
  1532. AfxExtractSubString(m_temp,m_tempshape.operator LPCTSTR(),0,',');
  1533. AfxExtractSubString(m_point1,m_tempshape.operator LPCTSTR(),1,',');
  1534. AfxExtractSubString(m_point2,m_tempshape.operator LPCTSTR(),2,',');
  1535. AfxExtractSubString(m_point3,m_tempshape.operator LPCTSTR(),3,',');
  1536. AfxExtractSubString(m_point4,m_tempshape.operator LPCTSTR(),4,',');
  1537. CPoint point1(atoi(m_point1.operator LPCTSTR()),atoi(m_point2.operator LPCTSTR()));
  1538. CPoint point2(atoi(m_point3.operator LPCTSTR()),atoi(m_point4.operator LPCTSTR()));
  1539. if( j == 0 )
  1540. {
  1541. break;
  1542. }
  1543. switch( m_temp.operator [](0) )
  1544. {
  1545. case '1':
  1546. {
  1547. pDC->MoveTo(point1.x,point1.y);
  1548. pDC->LineTo(point2.x,point2.y);
  1549. m_linearray.Add(point1);
  1550. m_linearray.Add(point2);
  1551. m_array.Insert(m_array.GetLength(),'1');
  1552. break;
  1553. }
  1554. case '2':
  1555. {
  1556. break;
  1557. }
  1558. case '3':
  1559. {
  1560. pDC->Rectangle(point1.x,point1.y,point2.x,point2.y);
  1561. m_rectanglearray.Add(point1);
  1562. m_rectanglearray.Add(point2);
  1563. m_array.Insert(m_array.GetLength(),'3');
  1564. break;
  1565. }
  1566. case '4':
  1567. {
  1568. AfxExtractSubString(m_point5,m_tempshape.operator LPCTSTR(),5,',');
  1569. AfxExtractSubString(m_point6,m_tempshape.operator LPCTSTR(),6,',');
  1570. CPoint point3(atoi(m_point5.operator LPCTSTR()),atoi(m_point6.operator LPCTSTR()));
  1571. pDC->MoveTo(point1);
  1572. pDC->LineTo(point2);
  1573. pDC->LineTo(point3);
  1574. pDC->LineTo(point1);
  1575. m_trigonarray.Add(point1);
  1576. m_trigonarray.Add(point2);
  1577. m_trigonarray.Add(point3);
  1578. m_array.Insert(m_array.GetLength(),'4');
  1579. break;
  1580. }
  1581. case '5':
  1582. {
  1583. break;
  1584. }
  1585. case '6':
  1586. {
  1587. pDC->Ellipse(point1.x - point2.x,point1.y - point2.x,point1.x + point2.x,point1.y + point2.x);
  1588. m_circlearray.Add(point1);
  1589. m_circlearray.Add(point2);
  1590. m_array.Insert(m_array.GetLength(),'6');
  1591. break;
  1592. }
  1593. case '7':
  1594. {
  1595. pDC->Ellipse(point2.x,point2.y,point1.x,point1.y);
  1596. m_ellipsearray.Add(point1);
  1597. m_ellipsearray.Add(point2);
  1598. m_array.Insert(m_array.GetLength(),'7');
  1599. break;
  1600. }
  1601. }
  1602. i++;
  1603. }
  1604. }