PointEdit.cpp
Upload User: kairuinn
Upload Date: 2009-02-07
Package Size: 2922k
Code Size: 5k
Category:

Graph program

Development Platform:

Visual C++

  1. #include "stdafx.h"
  2. #include "PointEdit.h"
  3. #include "..//resource.h"
  4. CPointEditCommand::CPointEditCommand(sgCPoint* edP, IApplicationInterface* appI):
  5. m_editable_point(edP)
  6. , m_app(appI)
  7. , m_was_started(false)
  8. {
  9. ASSERT(edP);
  10. ASSERT(m_app);
  11. SWITCH_RESOURCE
  12. m_bitmap = new CBitmap;
  13. m_bitmap->LoadBitmap(IDB_PNT_EDIT);
  14. }
  15. CPointEditCommand::~CPointEditCommand()
  16. {
  17. m_app->GetCommandPanel()->RemoveAllDialogs();
  18. m_app->GetViewPort()->InvalidateViewPort();
  19. if (m_bitmap)
  20. {
  21. if (m_bitmap->m_hObject)
  22. m_bitmap->DeleteObject();
  23. delete m_bitmap;
  24. }
  25. }
  26. bool    CPointEditCommand::PreTranslateMessage(MSG* pMsg)
  27. {
  28. /*if (pMsg->message==WM_KEYUP||
  29. pMsg->message==WM_CHAR)
  30. return false;*/
  31. if (pMsg->message==WM_KEYUP||pMsg->message==WM_KEYDOWN || 
  32. pMsg->message==WM_CHAR)
  33. {
  34. if (pMsg->wParam==VK_RETURN)
  35. {
  36. OnEnter();
  37. return true;
  38. }
  39. if (pMsg->wParam==VK_ESCAPE)
  40. {
  41. m_app->StopCommander();
  42. return true;
  43. }
  44. if (m_get_point_panel)
  45. {
  46. m_get_point_panel->GetWindow()->SendMessage(pMsg->message,
  47. pMsg->wParam,
  48. pMsg->lParam);
  49. }
  50. if (pMsg->message==WM_KEYDOWN)
  51. return false;
  52. else 
  53. return true;
  54. }
  55. else
  56. {
  57. if (pMsg->hwnd == m_app->GetViewPort()->GetWindow()->m_hWnd)
  58. {
  59. switch(pMsg->message) 
  60. {
  61. case WM_MOUSEMOVE:
  62. MouseMove(pMsg->wParam,GET_X_LPARAM(pMsg->lParam),GET_Y_LPARAM(pMsg->lParam));
  63. return true;
  64. case WM_LBUTTONUP:
  65. LeftClick(pMsg->wParam,GET_X_LPARAM(pMsg->lParam),GET_Y_LPARAM(pMsg->lParam));
  66. return true;
  67. default:
  68. return false;
  69. }
  70. }
  71. }
  72. return false;
  73. }
  74. void  CPointEditCommand::Start()
  75. {
  76. ASSERT(m_editable_point);
  77. SWITCH_RESOURCE
  78. m_app->GetCommandPanel()->RemoveAllDialogs();
  79. CString lab;
  80. lab.LoadString(IDS_REDACTION);
  81. m_app->StartCommander(lab);
  82. lab.LoadString(IDS_NEW_COORDINATES);
  83. m_get_point_panel = reinterpret_cast<IGetPointPanel*>(m_app->GetCommandPanel()->
  84. AddDialog(IBaseInterfaceOfGetDialogs::GET_POINT_DLG,lab,false));
  85. lab.LoadString(IDS_ENTER_NEW_COORDS);
  86. m_app->PutMessage(IApplicationInterface::MT_MESSAGE,lab);
  87. m_cur_pnt = *m_editable_point->GetGeometry();
  88. m_get_point_panel->SetPoint(m_cur_pnt.x,m_cur_pnt.y,m_cur_pnt.z);
  89. m_app->GetCommandPanel()->SetActiveRadio(0);
  90. m_app->GetViewPort()->SetEditableObject(m_editable_point);
  91. m_was_started = true;
  92. }
  93. void  CPointEditCommand::MouseMove(unsigned int nFlags,int pX,int pY)
  94. {
  95. if (!m_was_started)
  96. return;
  97. ASSERT(m_get_point_panel);
  98. IViewPort::GET_SNAP_IN in_arg;
  99. in_arg.scrX = pX;
  100. in_arg.scrY = pY;
  101. in_arg.snapType = SNAP_SYSTEM;
  102. in_arg.XFix = m_get_point_panel->IsXFixed();
  103. in_arg.YFix = m_get_point_panel->IsYFixed();
  104. in_arg.ZFix = m_get_point_panel->IsZFixed();
  105. m_get_point_panel->GetPoint(in_arg.FixPoint.x,in_arg.FixPoint.y,in_arg.FixPoint.z);
  106. IViewPort::GET_SNAP_OUT out_arg;
  107. m_app->GetViewPort()->GetWorldPointAfterSnap(in_arg,out_arg);
  108. m_cur_pnt = out_arg.result_point;
  109. m_get_point_panel->SetPoint(m_cur_pnt.x,m_cur_pnt.y,m_cur_pnt.z);
  110. m_app->GetViewPort()->InvalidateViewPort();
  111. }
  112. void  CPointEditCommand::LeftClick(unsigned int nFlags,int pX,int pY)
  113. {
  114. if (!m_was_started)
  115. return;
  116. SWITCH_RESOURCE
  117. ASSERT(m_editable_point);
  118. sgCPoint* pnt = sgCreatePoint(m_cur_pnt.x,m_cur_pnt.y,m_cur_pnt.z);
  119. sgGetScene()->StartUndoGroup();
  120. sgGetScene()->DetachObject(m_editable_point);
  121. sgGetScene()->AttachObject(pnt);
  122. sgGetScene()->EndUndoGroup();
  123. m_app->CopyAttributes(*pnt,*m_editable_point);
  124. m_app->GetViewPort()->InvalidateViewPort();
  125. m_app->StopCommander();
  126. }
  127. void  CPointEditCommand::Draw()
  128. {
  129. if (!m_was_started)
  130. return;
  131. float pC[3];
  132. m_app->GetViewPort()->GetPainter()->GetUserColorPoints(pC[0],pC[1],pC[2]);
  133. m_app->GetViewPort()->GetPainter()->SetCurColor(pC[0],pC[1],pC[2]);
  134. m_app->GetViewPort()->GetPainter()->DrawPoint(m_cur_pnt);
  135. }
  136. void  CPointEditCommand::OnEnter()
  137. {
  138. if (!m_was_started)
  139. return;
  140. SWITCH_RESOURCE
  141. ASSERT(m_get_point_panel);
  142. double tmpFl[3];
  143. m_get_point_panel->GetPoint(tmpFl[0],tmpFl[1],tmpFl[2]);
  144. sgCPoint* pnt = sgCreatePoint(tmpFl[0],tmpFl[1],tmpFl[2]);
  145. sgGetScene()->StartUndoGroup();
  146. sgGetScene()->DetachObject(m_editable_point);
  147. sgGetScene()->AttachObject(pnt);
  148. sgGetScene()->EndUndoGroup();
  149. m_app->CopyAttributes(*pnt,*m_editable_point);
  150. m_app->GetViewPort()->InvalidateViewPort();
  151. m_app->StopCommander();
  152. }
  153. unsigned int  CPointEditCommand::GetItemsCount()
  154. {
  155. if (!m_was_started)
  156. return 1;
  157. else
  158. return 0;
  159. }
  160. void         CPointEditCommand::GetItem(unsigned int itemID, CString& itSrt)
  161. {
  162. if (m_was_started)
  163. {
  164. ASSERT(0);
  165. return;
  166. }
  167. SWITCH_RESOURCE
  168. switch(itemID) {
  169. case 0:
  170. itSrt.LoadString(IDS_CHANGE_COORDS);
  171. break;
  172. default:
  173. ASSERT(0);
  174. }
  175. }
  176. void     CPointEditCommand::GetItemState(unsigned int itemID, 
  177. bool& enbl, bool& checked)
  178. {
  179. if (m_was_started)
  180. {
  181. ASSERT(0);
  182. return;
  183. }
  184. enbl = true;
  185. checked = false;
  186. }
  187. HBITMAP  CPointEditCommand::GetItemBitmap(unsigned int)
  188. {
  189. /*if (!m_was_started)
  190. return (HBITMAP)m_bitmap;
  191. else*/
  192. return NULL;
  193. }
  194. void         CPointEditCommand::Run(unsigned int itemID)
  195. {
  196. if (m_was_started)
  197. {
  198. ASSERT(0);
  199. return;
  200. }
  201. if (itemID==0)
  202. {
  203. Start();
  204. }
  205. else
  206. {
  207. ASSERT(0);
  208. }
  209. }