DialogCalTubeAngle.cpp 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188
  1. // DialogCalTubeAngle.cpp : 实现文件
  2. //
  3. #include "stdafx.h"
  4. #include "DIOS_3DDR_MechCal.h"
  5. #include "DialogCalTubeAngle.h"
  6. #include "afxdialogex.h"
  7. // CDialogCalTubeAngle 对话框
  8. IMPLEMENT_DYNAMIC(CDialogCalTubeAngle, CDialogEx)
  9. CDialogCalTubeAngle::CDialogCalTubeAngle(CWnd* pParent /*=NULL*/)
  10. : CDialogEx(CDialogCalTubeAngle::IDD, pParent)
  11. {
  12. }
  13. CDialogCalTubeAngle::~CDialogCalTubeAngle()
  14. {
  15. }
  16. void CDialogCalTubeAngle::DoDataExchange(CDataExchange* pDX)
  17. {
  18. CDialogEx::DoDataExchange(pDX);
  19. }
  20. BEGIN_MESSAGE_MAP(CDialogCalTubeAngle, CDialogEx)
  21. ON_BN_CLICKED(IDOK, &CDialogCalTubeAngle::OnBnClickedOk)
  22. ON_BN_CLICKED(IDC_BUTTON_STARTMOTION, &CDialogCalTubeAngle::OnBnClickedButtonStartmotion)
  23. ON_BN_CLICKED(IDC_BUTTON_READAD, &CDialogCalTubeAngle::OnBnClickedButtonReadad)
  24. ON_BN_CLICKED(IDC_BUTTON_FINDAXISZ, &CDialogCalTubeAngle::OnBnClickedButtonFindaxisz)
  25. END_MESSAGE_MAP()
  26. // CDialogCalTubeAngle 消息处理程序
  27. void CDialogCalTubeAngle::OnBnClickedOk()
  28. {
  29. // TODO: 在此添加控件通知处理程序代码
  30. ResDataObject Request;
  31. ResDataObject oTemp;
  32. ResDataObject Result;
  33. CString strKeyAngle;
  34. CString strKeyAD;
  35. CString strValueAngle;
  36. CString strValueAD;
  37. int nPointCount = 12;
  38. oTemp.add("PointCount", nPointCount);
  39. for (int i = 0; i < nPointCount; i++)
  40. {
  41. strKeyAngle.Format("Angle%d", i);
  42. strKeyAD.Format("AD%d", i);
  43. GetDlgItem(IDC_EDIT_TUBELINEV_HEIGHT1 + i)->GetWindowText(strValueAngle);
  44. GetDlgItem(IDC_EDIT_TUBELINEV_AD1 + i)->GetWindowText(strValueAD);
  45. int nAD = atoi(strValueAD);
  46. oTemp.add(strKeyAngle, strValueAngle);
  47. oTemp.add(strKeyAD, nAD);
  48. }
  49. Request.add("P0", oTemp);
  50. if (g_DiosAPIServer.ExecuteAction("CalSaveParamsofTubeAngle", Request, Result, 3000) == RET_SUCCEED)
  51. {
  52. string str = Result.encode();
  53. ResDataObject obj1;
  54. try
  55. {
  56. obj1 = Result["P0"];
  57. CString strSlope((const char*)obj1["Slope"]);
  58. CString strIntercept((const char*)obj1["Intercept"]);
  59. CString strText;
  60. strText.Format("Calibration succeed, Y = %s * X + (%s)", strSlope, strIntercept);
  61. AfxMessageBox(strText);
  62. }
  63. catch (ResDataObjectExption &exp)
  64. {
  65. printf("%s%s", exp.what(), "\\n");
  66. TPRINTA_ERROR(exp.what());
  67. }
  68. }
  69. }
  70. BOOL CDialogCalTubeAngle::OnInitDialog()
  71. {
  72. CDialogEx::OnInitDialog();
  73. // TODO: 在此添加额外的初始化
  74. CString str;
  75. for (int i = 0; i < 12; i++)
  76. {
  77. str.Format("角度 %d", i + 1);
  78. GetDlgItem(IDC_STATIC_HEIGHT1 + i)->SetWindowText(str);
  79. str.Format("A/D %d", i + 1);
  80. GetDlgItem(IDC_STATIC_AD1 + i)->SetWindowText(str);
  81. str.Format("%.2f", i * 2.5);
  82. GetDlgItem(IDC_EDIT_TUBELINEV_HEIGHT1 + i)->SetWindowText(str);
  83. str.Format("%d", (i + 1) * 1000);
  84. GetDlgItem(IDC_EDIT_TUBELINEV_AD1 + i)->SetWindowText(str);
  85. }
  86. ((CComboBox*)(GetDlgItem(IDC_COMBO_TUBEANGLE_ORG)))->AddString("逆时针");
  87. ((CComboBox*)(GetDlgItem(IDC_COMBO_TUBEANGLE_ORG)))->AddString("顺时针");
  88. ((CComboBox*)(GetDlgItem(IDC_COMBO_TUBEANGLE_ORG)))->SetCurSel(0);
  89. return TRUE; // return TRUE unless you set the focus to a control
  90. // 异常: OCX 属性页应返回 FALSE
  91. }
  92. void CDialogCalTubeAngle::OnBnClickedButtonStartmotion()
  93. {
  94. // TODO: 在此添加控件通知处理程序代码
  95. int nCurSel = ((CComboBox*)(GetDlgItem(IDC_COMBO_TUBEANGLE_ORG)))->GetCurSel();
  96. CString strAngle;
  97. GetDlgItem(IDC_EDIT_TUBE_ANGLE)->GetWindowText(strAngle);
  98. float nAngle = (float)atof(strAngle);
  99. if (nAngle < 0.01f || nAngle > 20.0f)
  100. {
  101. AfxMessageBox("旋转角度范围应在0.01度至20度之间,请重新设置");
  102. return;
  103. }
  104. ResDataObject Request;
  105. ResDataObject oTemp;
  106. ResDataObject Result;
  107. oTemp.add("Orientation", nCurSel);
  108. oTemp.add("Angle", strAngle);
  109. Request.add("P0", oTemp);
  110. g_DiosAPIServer.ExecuteAction("CalMotionTubeAngleRotate", Request, Result, 3000);
  111. }
  112. void CDialogCalTubeAngle::OnBnClickedButtonReadad()
  113. {
  114. // TODO: 在此添加控件通知处理程序代码
  115. ResDataObject Request;
  116. ResDataObject oTemp;
  117. ResDataObject Result;
  118. Request.add("P0", oTemp);
  119. if (g_DiosAPIServer.ExecuteAction("CalGetADofTubeAngle", Request, Result, 3000) == RET_SUCCEED)
  120. {
  121. ResDataObject obj1;
  122. try
  123. {
  124. obj1 = Result["P0"];
  125. CString strText((const char*)obj1["ADTubeAngle"]);
  126. GetDlgItem(IDC_EDIT_TUBEANGLE_VALUEAD)->SetWindowText(strText);
  127. }
  128. catch (ResDataObjectExption &exp)
  129. {
  130. printf("%s%s", exp.what(), "\\n");
  131. TPRINTA_ERROR(exp.what());
  132. }
  133. }
  134. }
  135. void CDialogCalTubeAngle::OnBnClickedButtonFindaxisz()
  136. {
  137. // TODO: 在此添加控件通知处理程序代码
  138. ResDataObject Request;
  139. ResDataObject oTemp;
  140. ResDataObject Result;
  141. Request.add("P0", oTemp);
  142. g_DiosAPIServer.ExecuteAction("CalMotionTubeAngleFindeAxisZ", Request, Result, 30000);
  143. }