| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053 |
- /**************************************************************************************************
- 版本所有(C), 2020-2022, 北京普达迪泰
- ***************************************************************************************************
- 文 件 名: DynamicTask.cpp
- 功能描述: 动态测量任务
- 版 本 号: 1.00初版
- 作 者: HYF
- 生成日期; 2021-12-20
- 最近修改:
- 函数列表:
- 修改历史:
- 1.日 期 :2021-12-20
- 作 者 : HYF
- 修改内容 : 创建文件
- **************************************************************************************************/
- #include "pch.h"
- #include "Dms.h"
- #include "DynamicTask.h"
- #include "DmsDoc.h"
- #include "CppSQLite3.h"
- #include "EquipTypePlaceManager.h"
- #include "TaskManager.h"
- #include "EquipDataManager.h"
- #include "PostureDataPointManager.h"
- #include "PostureDataAngleManager.h"
- #include "DynamicReport.h"
- #include "CompareDlg.h"
- #include "IDPMSManager.h"
- #include "OSGView.h"
- #include "MainFrm.h"
- #include "EquipTypePlaceDlg.h"
- #include "EquipTypePlace.h"
- #include "DynamicData.h"
- #include "DynamicTaskThread.h"
- #include "PostureDataAngle.h"
- #include "DbCamConfigDlg.h"
- // 秒定时器:用于显示当前时间
- #define MEASURE_TIMER 1000
- // CDynamicTask
- IMPLEMENT_DYNCREATE(CDynamicTask, CFormView)
- CDynamicTask::CDynamicTask()
- : CFormView(IDD_VIEW_DYNAMIC_TASK)
- , m_szTimeCost(_T(""))
- , m_pOSGView(NULL)
- , m_bExecuted(FALSE)
- {
- m_BkBrush.CreateSolidBrush(RGB(247, 247, 247));
- }
- CDynamicTask::~CDynamicTask()
- {
-
-
- }
- void CDynamicTask::DoDataExchange(CDataExchange* pDX)
- {
- CFormView::DoDataExchange(pDX);
- DDX_Control(pDX, IDC_STATIC_TASK_TITLE, m_Static_Title);
- DDX_Control(pDX, IDC_STATIC_EQUIP_TYPE_CODE, m_Static_EquipTypeCode);
- DDX_Control(pDX, IDC_STATIC_EQUIP_CODE, m_Static_EquipCode);
- DDX_Control(pDX, IDC_STATIC_MEASURE_TIME, m_Static_MeasureTime);
- DDX_Control(pDX, IDC_STATIC_RESULT_1_X, m_Static_Angle_AX);
- DDX_Control(pDX, IDC_STATIC_RESULT_1_Y, m_Static_Angle_AY);
- DDX_Control(pDX, IDC_STATIC_RESULT_1_Z, m_Static_Angle_AZ);
- DDX_Control(pDX, IDC_STATIC_RESULT_1, m_Static_Angle_A_Label);
- DDX_Control(pDX, IDC_STATIC_RESULT_2, m_Static_Angle_E_Label);
- DDX_Control(pDX, IDC_STATIC_RESULT_2_X, m_Static_Angle_EX);
- DDX_Control(pDX, IDC_STATIC_RESULT_2_Y, m_Static_Angle_EY);
- DDX_Control(pDX, IDC_STATIC_RESULT_2_Z, m_Static_Angle_EZ);
- DDX_Control(pDX, IDC_STATIC_RESULT_3, m_Static_Thrust_Label);
- DDX_Control(pDX, IDC_STATIC_RESULT_3_S, m_Static_Line_Start);
- DDX_Control(pDX, IDC_STATIC_RESULT_3_E, m_Static_Line_End);
- DDX_Control(pDX, IDC_BTN_STARTTASK, m_Btn_Start);
- DDX_Control(pDX, IDC_BTN_OUTPUT_REPORT, m_Btn_Report);
- DDX_Control(pDX, IDC_BTN_COMPARE_RESULT, m_Btn_Compare);
- DDX_Control(pDX, IDC_CMB_PLACE, m_Combo_EquipPlace);
- DDX_Control(pDX, IDC_STATIC_ADD_PLACE, m_Static_AddPlace);
- DDX_Control(pDX, IDC_BTN_STOP, m_BtnStop);
- DDX_Text(pDX, IDC_STATIC_MEASURE_TIME, m_szTimeCost);
- DDX_Text(pDX, IDC_STATIC_RESULT_1_X, m_szAngleAX);
- DDX_Text(pDX, IDC_STATIC_RESULT_1_Y, m_szAngleAY);
- DDX_Text(pDX, IDC_STATIC_RESULT_1_Z, m_szAngleAZ);
- DDX_Text(pDX, IDC_STATIC_RESULT_2_X, m_szAngleEX);
- DDX_Text(pDX, IDC_STATIC_RESULT_2_Y, m_szAngleEY);
- DDX_Text(pDX, IDC_STATIC_RESULT_2_Z, m_szAngleEZ);
- DDX_Text(pDX, IDC_STATIC_RESULT_3_S, m_szLineStart);
- DDX_Text(pDX, IDC_STATIC_RESULT_3_E, m_szLineEnd);
- DDX_Control(pDX, IDC_STATIC_TIMESPAN, m_Static_Label_TimeSpan);
- DDX_Control(pDX, IDC_STATIC_SECOND, m_Static_Label_Second);
- DDX_Control(pDX, IDC_COMBO_TIMESPAN, m_Combox_Frequency);
- DDX_Control(pDX, IDC_BTN_COMPLETE, m_Btn_Finish);
- }
- BEGIN_MESSAGE_MAP(CDynamicTask, CFormView)
- ON_WM_CREATE()
- ON_WM_CTLCOLOR()
- ON_WM_TIMER()
- ON_BN_CLICKED(IDC_BTN_STARTTASK, &CDynamicTask::OnBnClickedBtnStartTask)
- ON_BN_CLICKED(IDC_BTN_COMPARE_RESULT, &CDynamicTask::OnBnClickedBtnCompareResult)
- ON_BN_CLICKED(IDC_BTN_OUTPUT_REPORT, &CDynamicTask::OnBnClickedBtnOutputReport)
- ON_WM_SIZE()
- ON_WM_DESTROY()
- ON_BN_CLICKED(IDC_BTN_BACK, &CDynamicTask::OnBnClickedBtnBack)
- ON_STN_CLICKED(IDC_STATIC_ADD_PLACE, &CDynamicTask::OnStnClickedStaticAddPlace)
- ON_MESSAGE(WM_SUCCESS, OnMeasureSuccess)
- ON_MESSAGE(WM_FAILURE, OnMeasureFailure)
- ON_MESSAGE(WM_COMPLETE , OnMeasureComplete )
- ON_MESSAGE(WM_START_IDPMS, OnReStartIDPMS)
- ON_BN_CLICKED(IDC_BTN_STOP, &CDynamicTask::OnBnClickedBtnPause)
- ON_CBN_SELCHANGE(IDC_COMBO_TIMESPAN, &CDynamicTask::OnCbnSelchangeComboTimespan)
- ON_BN_CLICKED(IDC_BTN_CAM_CONFIG, &CDynamicTask::OnBnClickedBtnCamConfig)
- ON_CBN_SELCHANGE(IDC_CMB_PLACE, &CDynamicTask::OnCbnSelchangeEquipPlace)
- ON_BN_CLICKED(IDC_BTN_COMPLETE, &CDynamicTask::OnBnClickedBtnFinish)
- END_MESSAGE_MAP()
- // CDynamicTask 诊断
- #ifdef _DEBUG
- void CDynamicTask::AssertValid() const
- {
- CFormView::AssertValid();
- }
- #ifndef _WIN32_WCE
- void CDynamicTask::Dump(CDumpContext& dc) const
- {
- CFormView::Dump(dc);
- }
- #endif
- #endif //_DEBUG
- /**************************************************************************************************
- 函 数 名 :OnCreate
- 功能描述 :消息处理-WM_CREATE
- 输入参数 :无
- 输出参数 :无
- 返 回 值 :void
- **************************************************************************************************/
- int CDynamicTask::OnCreate(LPCREATESTRUCT lpCreateStruct)
- {
- if (CFormView::OnCreate(lpCreateStruct) == -1)
- return -1;
- m_pDoc = (CDmsDoc *)GetDocument();
- ASSERT(m_pDoc != NULL);
- ASSERT(m_pDoc->IsKindOf(RUNTIME_CLASS(CDmsDoc)));
- return 0;
- }
- /**************************************************************************************************
- 函 数 名 :OnUpdate
- 功能描述 :消息处理-Doc数据变化时回调
- 输入参数 :略
- 输出参数 :略
- 返 回 值 :略
- **************************************************************************************************/
- void CDynamicTask::OnUpdate(CView* /*pSender*/, LPARAM /*lHint*/, CObject* /*pHint*/)
- {
-
- }
- /**************************************************************************************************
- 函 数 名 :OnInitialUpdate
- 功能描述 :初始化UI数据
- 输入参数 :无
- 输出参数 :无
- 返 回 值 :void
- **************************************************************************************************/
- void CDynamicTask::OnInitialUpdate()
- {
- CFormView::OnInitialUpdate();
- // 任务标题
- m_Static_Title.SetFontSize(16);
- m_Static_Title.SetFontBold(TRUE);
- // 型号
- m_Static_EquipTypeCode.SetFontSize(15);
- m_Static_EquipTypeCode.SetFontBold(TRUE);
- m_Static_EquipTypeCode.SetTextColor(g_crInfoText);
- // 编号
- m_Static_EquipCode.SetFontSize(15);
- m_Static_EquipCode.SetTextColor(g_crInfoText);
- m_Static_EquipCode.SetFontBold(TRUE);
- // 新增部位
- m_Static_AddPlace.SetFontSize(13);
- m_Static_AddPlace.SetLink(TRUE);
- m_Static_AddPlace.SetTextColor(RGB(42, 130, 228));
- m_Static_AddPlace.SetLinkCursor(AfxGetApp()->LoadCursor(IDC_HAND_CURSOR));
- // 测量时间
- m_Static_MeasureTime.SetFontSize(28);
- m_Static_MeasureTime.SetFontBold(TRUE);
- // 测量频率
- CString szTimeSpan;
- szTimeSpan.Format("1");
- m_Combox_Frequency.InsertString(0, szTimeSpan);
- m_Combox_Frequency.SetItemData(0, 1);
- szTimeSpan.Format("2");
- m_Combox_Frequency.InsertString(1, szTimeSpan);
- m_Combox_Frequency.SetItemData(1, 2);
- szTimeSpan.Format("3");
- m_Combox_Frequency.InsertString(2, szTimeSpan);
- m_Combox_Frequency.SetItemData(2, 3);
- szTimeSpan.Format("4");
- m_Combox_Frequency.InsertString(3, szTimeSpan);
- m_Combox_Frequency.SetItemData(3, 4);
- szTimeSpan.Format("5");
- m_Combox_Frequency.InsertString(4, szTimeSpan);
- m_Combox_Frequency.SetItemData(4, 5);
- m_Combox_Frequency.SetCurSel(1);
- // 偏移量
- m_Static_Angle_AX.SetFontSize(20);
- m_Static_Angle_AX.SetFontBold(TRUE);
- m_Static_Angle_AX.SetTextColor(g_crInfoText);
- m_Static_Angle_AY.SetFontSize(20);
- m_Static_Angle_AY.SetFontBold(TRUE);
- m_Static_Angle_AY.SetTextColor(g_crInfoText);
- m_Static_Angle_AZ.SetFontSize(20);
- m_Static_Angle_AZ.SetFontBold(TRUE);
- m_Static_Angle_AZ.SetTextColor(g_crInfoText);
- // 调校量
- m_Static_Angle_EX.SetFontSize(20);
- m_Static_Angle_EX.SetFontBold(TRUE);
- m_Static_Angle_EX.SetTextColor(g_crInfoText);
- m_Static_Angle_EY.SetFontSize(20);
- m_Static_Angle_EY.SetFontBold(TRUE);
- m_Static_Angle_EY.SetTextColor(g_crInfoText);
- m_Static_Angle_EZ.SetFontSize(20);
- m_Static_Angle_EZ.SetFontBold(TRUE);
- m_Static_Angle_EZ.SetTextColor(g_crInfoText);
- // OSG三维展示初始化
- CWnd *pWnd = this->GetDlgItem(IDC_STATIC_OSG);
- CRect rect1;
- pWnd->GetWindowRect(&rect1);
- pWnd->ShowWindow(SW_HIDE);
- this->ScreenToClient(&rect1);
- m_pOSGView = (OSGView *)RUNTIME_CLASS(OSGView)->CreateObject();
- m_pOSGView->Create(NULL, NULL, WS_CHILD|WS_VISIBLE, rect1, this, IDC_STATIC_OSG2);
- m_pOSGView->OnInitialUpdate();
- m_pOSGView->ShowWindow(SW_SHOW);
- }
- HBRUSH CDynamicTask::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
- {
- HBRUSH hbr = CFormView::OnCtlColor(pDC, pWnd, nCtlColor);
- return m_BkBrush;
- }
- /**************************************************************************************************
- 函 数 名 :IsModelExist
- 功能描述 :模型文件是否完整
- 输入参数 :略
- 输出参数 :略
- 返 回 值 :略
- **************************************************************************************************/
- BOOL CDynamicTask::IsModelExist(LPCTSTR szEquipTypeCode, CStringArray& arrModel)
- {
- CString szPath = Utils::GetLocalUrlDir();
- szPath.Append("/Model/");
- szPath.Append(szEquipTypeCode);
- szPath.Append("/");
- BOOL bModelExist = true;
- for (int i = 0; i < arrModel.GetCount(); i++)
- {
- CString szModel = arrModel.GetAt(i);
- CString szModelPath(szPath);
- szModelPath.Append(szModel);
- szModelPath.Append(".OSGB");
- bModelExist = Utils::IsFileExist(szModelPath);
- if (!bModelExist) {
- return FALSE;
- }
- LOG::D(szModelPath);
- }
- return TRUE;
- }
- /**************************************************************************************************
- 函 数 名 :InitFormData
- 功能描述 :初始化UI数据
- 输入参数 :无
- 输出参数 :无
- 返 回 值 :void
- **************************************************************************************************/
- void CDynamicTask::InitFormData(DWORD taskId)
- {
- m_taskId = taskId;
- // 初始化任务展示信息
- this->ResetFormData();
- this->ShowTaskFieldStatus();
- this->InitTaskInfo();
- }
- /**************************************************************************************************
- 函 数 名 :InitTaskInfo
- 功能描述 :初始化任务信息
- 输入参数 :略
- 输出参数 :略
- 返 回 值 :略
- **************************************************************************************************/
- void CDynamicTask::InitTaskInfo()
- {
- // 初始化数据
- TaskManager *pTaskManager = m_pDoc->GetTaskManager();
- ASSERT(pTaskManager != NULL);
- CppSQLite3Query q = pTaskManager->Query(m_taskId);
- if (!q.eof()) {
- CString szTaskTitle = q.getStringField("task_title");
- m_Static_Title.SetWindowText(szTaskTitle);
- m_szEquipTypeCode = q.getStringField("equip_type_code");
- m_Static_EquipTypeCode.SetWindowText(m_szEquipTypeCode);
- m_szEquipCode = q.getStringField("equip_code");
- m_Static_EquipCode.SetWindowText(m_szEquipCode);
- // 初始化型号部位列表
- this->InitEquipPlaceList();
- }
- q.finalize();
- }
- /**************************************************************************************************
- 函 数 名 :resetFormData
- 功能描述 :重置UI数据
- 输入参数 :无
- 输出参数 :无
- 返 回 值 :void
- **************************************************************************************************/
- void CDynamicTask::ResetFormData()
- {
- m_szTimeCost = _T("");
- m_iTaskStatus = 0;
- m_iEclapsed = 0;
- ShowTaskFieldStatus();
- // 从IDPMS获取数据
- IDPMSManager *pManager = IDPMSManager::GetManager();
- BOOL bRet = pManager->CloseIDPMSProject();
- if (!bRet) {
- LOG::D(_T("IDPMS 通讯异常"));
- }
- }
- /**************************************************************************************************
- 函 数 名 :ShowTaskFieldStatus
- 功能描述 :初始化任务信息
- 输入参数 :略
- 输出参数 :略
- 返 回 值 :略
- **************************************************************************************************/
- void CDynamicTask::ShowTaskFieldStatus()
- {
- if (m_iTaskStatus == TASK_STATUS_0) {
- m_Btn_Start.ShowWindow(SW_SHOW);
- m_Btn_Finish.ShowWindow(SW_HIDE);
- m_BtnStop.ShowWindow(SW_HIDE);
- m_BtnStop.SetWindowText(_T("暂停"));
- m_Static_Label_TimeSpan.ShowWindow(SW_HIDE);
- m_Combox_Frequency.ShowWindow(SW_HIDE);
- m_Static_Label_Second.ShowWindow(SW_HIDE);
- }
- else if (m_iTaskStatus == TASK_STATUS_RUNNING)
- {
- m_Btn_Start.ShowWindow(SW_HIDE);
- m_Btn_Finish.ShowWindow(SW_SHOW);
- m_BtnStop.ShowWindow(SW_SHOW);
- m_Static_Label_TimeSpan.ShowWindow(SW_SHOW);
- m_Combox_Frequency.ShowWindow(SW_SHOW);
- m_Static_Label_Second.ShowWindow(SW_SHOW);
- }
- else if (m_iTaskStatus == TASK_STATUS_PAUSED)
- {
- m_Btn_Start.ShowWindow(SW_HIDE);
- m_Btn_Report.ShowWindow(SW_SHOW);
- m_BtnStop.ShowWindow(SW_SHOW);
- m_Static_Label_TimeSpan.ShowWindow(SW_SHOW);
- m_Combox_Frequency.ShowWindow(SW_SHOW);
- m_Static_Label_Second.ShowWindow(SW_SHOW);
- }
-
- if (m_iTaskStatus == TASK_STATUS_0)
- {
- m_Static_MeasureTime.ShowWindow(SW_HIDE);
- m_Static_Angle_A_Label.ShowWindow(SW_HIDE);
- m_Static_Angle_AX.ShowWindow(SW_HIDE);
- m_Static_Angle_AY.ShowWindow(SW_HIDE);
- m_Static_Angle_AZ.ShowWindow(SW_HIDE);
- m_Static_Angle_E_Label.ShowWindow(SW_HIDE);
- m_Static_Angle_EX.ShowWindow(SW_HIDE);
- m_Static_Angle_EY.ShowWindow(SW_HIDE);
- m_Static_Angle_EZ.ShowWindow(SW_HIDE);
- m_Static_Thrust_Label.ShowWindow(SW_HIDE);
- m_Static_Line_Start.ShowWindow(SW_HIDE);
- m_Static_Line_End.ShowWindow(SW_HIDE);
- }
- else
- {
- m_Static_MeasureTime.ShowWindow(SW_SHOW);
- m_Static_Angle_A_Label.ShowWindow(SW_SHOW);
- m_Static_Angle_AX.ShowWindow(SW_SHOW);
- m_Static_Angle_AY.ShowWindow(SW_SHOW);
- m_Static_Angle_AZ.ShowWindow(SW_SHOW);
- m_Static_Angle_E_Label.ShowWindow(SW_SHOW);
- m_Static_Angle_EX.ShowWindow(SW_SHOW);
- m_Static_Angle_EY.ShowWindow(SW_SHOW);
- m_Static_Angle_EZ.ShowWindow(SW_SHOW);
- m_Static_Thrust_Label.ShowWindow(SW_SHOW);
- m_Static_Line_Start.ShowWindow(SW_SHOW);
- m_Static_Line_End.ShowWindow(SW_SHOW);
- }
- if (!m_bExecuted)
- {
- m_Btn_Compare.ShowWindow(SW_HIDE);
- m_Btn_Report.ShowWindow(SW_HIDE);
- }
- else
- {
- m_Btn_Compare.ShowWindow(SW_SHOW);
- m_Btn_Report.ShowWindow(SW_SHOW);
- }
- }
- /**************************************************************************************************
- 函 数 名 :InitEquipPlaceList
- 功能描述 :初始化任务信息
- 输入参数 :略
- 输出参数 :略
- 返 回 值 :略
- **************************************************************************************************/
- void CDynamicTask::InitEquipPlaceList()
- {
- m_Combo_EquipPlace.ResetContent();
- // 模型文件
- CStringArray arrModel;
- arrModel.Add(m_szEquipTypeCode);
- // 初始化数据
- EquipTypePlaceManager *pPlaceManager = m_pDoc->GetEquipTypePlaceManager();
- ASSERT(pPlaceManager != NULL);
- int i = 0;
- CppSQLite3Query q = pPlaceManager->Query(m_szEquipTypeCode);
- while (!q.eof()) {
- CString szEquipPlace = q.getStringField("equip_type_place");
- m_Combo_EquipPlace.AddString(szEquipPlace);
- arrModel.Add(szEquipPlace);
- q.nextRow();
- }
- q.finalize();
- // 默认选中第1个
- m_idxEquipPlace = 0;
- CString szEquipPlaceSel;
- if (m_Combo_EquipPlace.GetCount() > 0)
- {
- m_Combo_EquipPlace.SetCurSel(m_idxEquipPlace);
-
- m_Combo_EquipPlace.GetLBText(0, szEquipPlaceSel);
- }
-
- // 初始化型号三维展示
- BOOL bModelExist = IsModelExist(m_szEquipTypeCode, arrModel);
- if (!bModelExist)
- {
- m_Btn_Start.EnableWindow(FALSE);
- MessageBox(_T("模型文件不完整,请联系管理员!"));
- return;
- }
- m_Btn_Start.EnableWindow(TRUE);
- m_pOSGView->LoadOSG(m_szEquipTypeCode, arrModel);
- if (!szEquipPlaceSel.IsEmpty())
- {
- m_pOSGView->SetCurEquipPlace(szEquipPlaceSel);
- }
-
- }
- double g_fx = 0.0f;
- double g_fy = 0.0f;
- double g_fz = 0.0f;
- /**************************************************************************************************
- 函 数 名 :OnTimer
- 功能描述 :定时器消息
- 输入参数 :略
- 输出参数 :略
- 返 回 值 :略
- **************************************************************************************************/
- void CDynamicTask::OnTimer(UINT_PTR nIDEvent)
- {
- // 测量时间按秒类加
- m_iEclapsed++;
- switch (nIDEvent) {
- case MEASURE_TIMER:
- if (m_iEclapsed < 60)
- {
- m_szTimeCost.Format("%d秒", m_iEclapsed);
- }
- else if (m_iEclapsed < 3600)
- {
- m_szTimeCost.Format("%d分%d秒", m_iEclapsed/60, m_iEclapsed%60);
- }
- else
- {
- m_szTimeCost.Format("%d时%d分%d秒", m_iEclapsed/3600 , m_iEclapsed / 60, m_iEclapsed % 60);
- }
- UpdateData(FALSE);
- break;
- }
- CFormView::OnTimer(nIDEvent);
- }
- /**************************************************************************************************
- 函 数 名 :OnBnClickedBtnStarttask
- 功能描述 :事件处理-开始测量
- 输入参数 :略
- 输出参数 :略
- 返 回 值 :略
- **************************************************************************************************/
- void CDynamicTask::OnBnClickedBtnStartTask()
- {
- CString szResult;
- // 1. 未运行 -> 运行
- if (m_iTaskStatus == TASK_STATUS_0)
- {
- int idx = m_Combo_EquipPlace.GetCurSel();
- CString szEquipPlace;
- m_Combo_EquipPlace.GetLBText(idx, szEquipPlace);
- if (szEquipPlace.IsEmpty()) return;
- m_pOSGView->SetCurEquipPlace(szEquipPlace);
- m_bStopClicked = FALSE;
- // 调用IDPMS启动动态测量处理线程
- IDPMSManager *pManager = IDPMSManager::GetManager();
- pManager->StartDynamicProcThread(this, m_taskId, m_szEquipTypeCode, m_szEquipCode, szEquipPlace);
- }
- }
- /**************************************************************************************************
- 函 数 名 :OnMeasureSuccess
- 功能描述 :事件处理-测量成功WM-SUCCESS自定义消息处理
- 输入参数 :略
- 输出参数 :略
- 返 回 值 :略
- **************************************************************************************************/
- LRESULT CDynamicTask::OnMeasureSuccess(WPARAM wp, LPARAM lp)
- {
- if (m_iTaskStatus == TASK_STATUS_0)
- {
- m_iTaskStatus = TASK_STATUS_RUNNING;
- // 开始计算测量时间
- m_iEclapsed = 0;
- // 启动定时器
- SetTimer(MEASURE_TIMER, 1000, NULL);
- this->ShowTaskFieldStatus();
- m_bExecuted = TRUE;
- }
- // 接收消息包如果不为空,则释放资源
- DMSResponse *pMsg = (DMSResponse *)wp;
- if (pMsg != NULL)
- {
- Utils::DMS_FreeMsg(pMsg);
- }
- int idx = m_Combo_EquipPlace.GetCurSel();
- CString szEquipPlace;
- m_Combo_EquipPlace.GetLBText(idx, szEquipPlace);
- // 显示测量结果数据
- ShowDynamicTaskData(szEquipPlace);
- return 0;
- }
- /**************************************************************************************************
- 函 数 名 :OnMeasureFailure
- 功能描述 :测量失败WM-FAILURE自定义消息处理
- 输入参数 :略
- 输出参数 :略
- 返 回 值 :略
- **************************************************************************************************/
- LRESULT CDynamicTask::OnMeasureFailure(WPARAM wp, LPARAM lp)
- {
- if (m_iTaskStatus != TASK_STATUS_0)
- {
- m_iTaskStatus = TASK_STATUS_0;
- // 结束定时器
- if (m_iTaskStatus == TASK_STATUS_RUNNING)
- {
- KillTimer(MEASURE_TIMER);
- }
- this->ShowTaskFieldStatus();
- }
- // 接收消息包如果不为空,则释放资源
- DMSResponse *pMsg = (DMSResponse *)wp;
- if (pMsg != NULL)
- {
- CString szMsg(pMsg->szMsg);
- if (!szMsg.IsEmpty()) MessageBox(szMsg);
- Utils::DMS_FreeMsg(pMsg);
- }
- return 0;
- }
- /**************************************************************************************************
- 函 数 名 :OnMeasureComplete
- 功能描述 :事件处理-WM-COMPLETE自定义消息处理
- 输入参数 :略
- 输出参数 :略
- 返 回 值 :略
- **************************************************************************************************/
- LRESULT CDynamicTask::OnMeasureComplete(WPARAM wp, LPARAM lp)
- {
- // 保存数据到本地
- IDPMSManager *pManager = IDPMSManager::GetManager();
- DynamicData *pData = pManager->m_pDynamicData;
- pData->SaveToDB();
- // 更新任务为完成状态
- TaskManager *pTaskManager = m_pDoc->GetTaskManager();
- ASSERT(pTaskManager != NULL);
- pTaskManager->UpdateStatus(m_taskId, 1); // 1表示完成状态;
- // 任务重置为初始状态
- m_iTaskStatus = TASK_STATUS_0;
- // 重置视图功能
- this->ShowTaskFieldStatus();
- return 0;
- }
- /**************************************************************************************************
- 函 数 名 :OnBnClickedBtnFinish
- 功能描述 :事件处理-停止测量
- 输入参数 :略
- 输出参数 :略
- 返 回 值 :略
- **************************************************************************************************/
- void CDynamicTask::OnBnClickedBtnFinish()
- {
- if (m_iTaskStatus != TASK_STATUS_0)
- {
- m_bStopClicked = TRUE;
- // 调用IDPMS启动动态测量处理线程
- IDPMSManager *pManager = IDPMSManager::GetManager();
- pManager->StopDynamicTask();
- // 结束定时器
- if (m_iTaskStatus == TASK_STATUS_RUNNING)
- {
- KillTimer(MEASURE_TIMER);
- }
- }
- }
- /**************************************************************************************************
- 函 数 名 :OnBnClickedBtnPause
- 功能描述 :事件处理-暂停测量
- 输入参数 :略
- 输出参数 :略
- 返 回 值 :略
- **************************************************************************************************/
- void CDynamicTask::OnBnClickedBtnPause()
- {
- // 停止动态测量线程任务
- IDPMSManager *pManager = IDPMSManager::GetManager();
- if (m_iTaskStatus == TASK_STATUS_RUNNING)
- {
- pManager->PauseDynamicTask();
- m_pOSGView->RotateCurModel(0, 0, 0);
- m_BtnStop.SetWindowText(_T("继续执行"));
- m_iTaskStatus = TASK_STATUS_PAUSED;
- KillTimer(MEASURE_TIMER);
- }
- else if (m_iTaskStatus == TASK_STATUS_PAUSED)
- {
- pManager->ResumeDynamicTask();
- m_BtnStop.SetWindowText(_T("暂停"));
- m_iTaskStatus = TASK_STATUS_RUNNING;
- // 启动定时器
- SetTimer(MEASURE_TIMER, 1000, NULL);
- }
- // 更新UI状态
- this->ShowTaskFieldStatus();
- }
- /**************************************************************************************************
- 函 数 名 :OnBnClickedBtnBack
- 功能描述 :事件处理-结束返回
- 输入参数 :略
- 输出参数 :略
- 返 回 值 :略
- **************************************************************************************************/
- void CDynamicTask::OnBnClickedBtnBack()
- {
- // 隐视图
- this->ShowWindow(SW_HIDE);
- // 中止测量任务
- IDPMSManager *pManager = IDPMSManager::GetManager();
- pManager->StopDynamicTask();
- // 中止计时器
- if (m_iTaskStatus == TASK_STATUS_RUNNING)
- {
- KillTimer(MEASURE_TIMER);
- }
- // 重置任务状态
- m_iTaskStatus = TASK_STATUS_0;
- // 停止OSG渲染
- m_pOSGView->Terminate();
- // 重置UI栏位状态
- this->ResetFormData();
- // 切换视图
- CMainFrame *pMain = (CMainFrame*)AfxGetApp()->m_pMainWnd;
- ::PostMessage(pMain->m_hWnd, WM_BACK_TO_START, NULL, NULL);
- }
- /**************************************************************************************************
- 函 数 名 :FetchDynamicTaskData
- 功能描述 :请求动态任务数据
- 输入参数 :略
- 输出参数 :略
- 返 回 值 :略
- **************************************************************************************************/
- BOOL CDynamicTask::FetchDynamicTaskData(LPCTSTR szEquipPlace)
- {
- // 初始化数据
- PostureDataAngleManager *pAngleManager = m_pDoc->GetPostureDataAngleManager();
- ASSERT(pAngleManager != NULL);
- CppSQLite3Query q = pAngleManager->Query(m_taskId, m_szEquipCode, szEquipPlace);
- if (!q.eof()) {
- m_szAngleAX = q.getStringField("angle_a_x");
- m_szAngleAY = q.getStringField("angle_a_y");
- m_szAngleAZ = q.getStringField("angle_a_z");
- m_szAngleEX = q.getStringField("angle_e_x");
- m_szAngleEY = q.getStringField("angle_e_y");
- m_szAngleEZ = q.getStringField("angle_e_z");
- DOUBLE lineStartX = q.getFloatField("line_start_x");
- DOUBLE lineStartY = q.getFloatField("line_start_y");
- DOUBLE lineStartZ = q.getFloatField("line_start_z");
- DOUBLE lineEndX = q.getFloatField("line_end_x");
- DOUBLE lineEndY = q.getFloatField("line_end_y");
- DOUBLE lineEndZ = q.getFloatField("line_end_z");
- m_szLineStart.Format("起点:(%.3f, %.3f, %.3f)", lineStartX, lineStartY, lineStartZ);
- m_szLineEnd.Format("终点:(%.3f, %.3f, %.3f)", lineEndX, lineEndY, lineEndZ);
- UpdateData(FALSE);
- q.finalize();
- return TRUE;
- }
- q.finalize();
- return FALSE;
- }
- /**************************************************************************************************
- 函 数 名 :OnBnClickedBtnCompareResult
- 功能描述 :事件处理-结果比对
- 输入参数 :无
- 输出参数 :无
- 返 回 值 :void
- **************************************************************************************************/
- void CDynamicTask::OnBnClickedBtnCompareResult()
- {
- CompareDlg dlg(this, m_taskId);
- dlg.DoModal();
- }
- /**************************************************************************************************
- 函 数 名 :OnBnClickedBtnOutputReport
- 功能描述 :事件处理-输出报告
- 输入参数 :略
- 输出参数 :略
- 返 回 值 :略
- **************************************************************************************************/
- void CDynamicTask::OnBnClickedBtnOutputReport()
- {
- // 显示报告视图
- DynamicReport dlg2(this, m_taskId);
- dlg2.DoModal();
- }
- /**************************************************************************************************
- 函 数 名 :OnSize
- 功能描述 :事件处理-WM-SIZE
- 输入参数 :略
- 输出参数 :略
- 返 回 值 :略
- **************************************************************************************************/
- void CDynamicTask::OnSize(UINT nType, int cx, int cy)
- {
- CFormView::OnSize(nType, cx, cy);
- if (m_pOSGView == NULL) return;
- CWnd *pWnd = this->GetDlgItem(IDC_STATIC_OSG);
- if (pWnd == NULL) return;
- CRect rect1;
- pWnd->GetWindowRect(&rect1);
- this->ScreenToClient(&rect1);
- m_pOSGView->MoveWindow(&rect1);
- }
- /**************************************************************************************************
- 函 数 名 :OnCbnSelchangeEquipPlace
- 功能描述 :分机选择事件处理
- 输入参数 :略
- 输出参数 :略
- 返 回 值 :略
- **************************************************************************************************/
- void CDynamicTask::OnCbnSelchangeEquipPlace()
- {
- // 获取当前选中索引
- int iSel = m_Combo_EquipPlace.GetCurSel();
- if (m_idxEquipPlace == iSel) return;
- // 测量任务正在进行中,不能改变部位
- if (m_iTaskStatus != TASK_STATUS_0)
- {
- m_Combo_EquipPlace.SetCurSel(m_idxEquipPlace);
- MessageBox(_T("请先停止测量,再改变设备部位"));
- return;
- }
- }
- /**************************************************************************************************
- 函 数 名 :ShowDynamicTaskData
- 功能描述 :显示动态任务数据
- 输入参数 :略
- 输出参数 :略
- 返 回 值 :略
- **************************************************************************************************/
- BOOL CDynamicTask::ShowDynamicTaskData(LPCTSTR szEquipPlace)
- {
- // 调用IDPMS启动动态测量处理线程
- IDPMSManager *pManager = IDPMSManager::GetManager();
- DynamicData *pData = pManager->m_pDynamicData;
- PostureDataAngle *pAngle = pData->GetAngle(m_taskId, szEquipPlace);
- if (pAngle != NULL) {
- m_szAngleAX.Format("%.3f", pAngle->GetAngleAX());
- m_szAngleAY.Format("%.3f", pAngle->GetAngleAY());
- m_szAngleAZ.Format("%.3f", pAngle->GetAngleAZ());
- // 1.推力线起终点
- DOUBLE fX1 = pAngle->GetLineStartX();
- DOUBLE fY1 = pAngle->GetLineStartY();
- DOUBLE fZ1 = pAngle->GetLineStartZ();
- DOUBLE fX2 = pAngle->GetLineEndX();
- DOUBLE fY2 = pAngle->GetLineEndY();
- DOUBLE fZ2 = pAngle->GetLineEndZ();
- // 2.计算偏角数据
- DOUBLE v1 = (fX1 - fX2);
- DOUBLE v2 = (fY1 - fY2);
- DOUBLE v3 = (fZ1 - fZ2);
- DOUBLE ax = atan(v2 / v3) * 180 / PI;
- DOUBLE ay = atan(v1 / v3) * 180 / PI;
- DOUBLE az = atan(0) * 180 / PI;
- m_pOSGView->RotateCurModel(ax, ay, az);
- // Test
- //double ty = 20 - 1 * m_iEclapsed;
- //m_pOSGView->RotateCurModel(0, ty, 0);
- m_szAngleEX.Format("%.3f", pAngle->GetAngleEX());
- m_szAngleEY.Format("%.3f", pAngle->GetAngleEY());
- m_szAngleEZ.Format("%.3f", pAngle->GetAngleEZ());
- DOUBLE lineStartX = pAngle->GetLineStartX();
- DOUBLE lineStartY = pAngle->GetLineStartY();
- DOUBLE lineStartZ = pAngle->GetLineStartZ();
- DOUBLE lineEndX = pAngle->GetLineEndX();
- DOUBLE lineEndY = pAngle->GetLineEndY();
- DOUBLE lineEndZ = pAngle->GetLineEndZ();
- m_szLineStart.Format("起点:(%.3f, %.3f, %.3f)", lineStartX, lineStartY, lineStartZ);
- m_szLineEnd.Format("终点:(%.3f, %.3f, %.3f)", lineEndX, lineEndY, lineEndZ);
- UpdateData(FALSE);
- return TRUE;
- }
- return FALSE;
- }
- /**************************************************************************************************
- 函 数 名 :OnCbnSelchangeComboTimespan
- 功能描述 :事件处理-修改动态测量时间间隔
- 输入参数 :略
- 输出参数 :略
- 返 回 值 :略
- **************************************************************************************************/
- void CDynamicTask::OnCbnSelchangeComboTimespan()
- {
- int idx = m_Combox_Frequency.GetCurSel();
- DWORD dwFrequency = (DWORD)m_Combox_Frequency.GetItemData(idx);
- DWORD dwNow = GetTickCount();
- DWORD dwTimeSpan = 1000 / dwFrequency;
- IDPMSManager *pManager = IDPMSManager::GetManager();
- pManager->SetDynamicTaskTimeSpan(dwTimeSpan);
- }
- /**************************************************************************************************
- 函 数 名 :OnBnClickedBtnDoubleCameraConfig
- 功能描述 :事件处理-双相机标定
- 输入参数 :略
- 输出参数 :略
- 返 回 值 :略
- **************************************************************************************************/
- void CDynamicTask::OnBnClickedBtnCamConfig()
- {
- DbCamConfigDlg dlg(this, m_szEquipTypeCode, m_szEquipCode);
- if (dlg.DoModal() == IDOK)
- {
-
- }
- }
- /**************************************************************************************************
- 函 数 名 :OnRestartIDPMS
- 功能描述 :WM_RESTART_IDPMS处理
- 输入参数 :略
- 输出参数 :略
- 返 回 值 :略
- **************************************************************************************************/
- afx_msg LRESULT CDynamicTask::OnReStartIDPMS(WPARAM wp, LPARAM lp)
- {
- // 从IDPMS获取数据
- IDPMSManager *pManager = IDPMSManager::GetManager();
- BOOL bRet = pManager->StartIDPMS2();
- if (!bRet)
- {
- MessageBox(_T("IDPMS引擎启动失败!"));
- }
- return 0;
- }
- /**************************************************************************************************
- 函 数 名 :OnDestroy
- 功能描述 :事件处理-WM-DESTORY
- 输入参数 :略
- 输出参数 :略
- 返 回 值 :略
- **************************************************************************************************/
- void CDynamicTask::OnDestroy()
- {
- CFormView::OnDestroy();
- if (m_pOSGView != NULL)
- {
- delete m_pOSGView;
- m_pOSGView = NULL;
- }
- }
- /**************************************************************************************************
- 函 数 名 :OnStnClickedStaticAddPlace
- 功能描述 :事件处理-新增设备部位
- 输入参数 :略
- 输出参数 :略
- 返 回 值 :略
- **************************************************************************************************/
- void CDynamicTask::OnStnClickedStaticAddPlace()
- {
- EquipTypePlaceDlg dlg(this, m_szEquipTypeCode);
- if (dlg.DoModal() == IDOK) {
- this->InitEquipPlaceList();
- }
- return;
- }
|