void AppStage_ComputeTrackerPoses::renderUI() { const float k_panel_width = 300.f; const char *k_window_title = "Compute Tracker Poses"; const ImGuiWindowFlags window_flags = ImGuiWindowFlags_ShowBorders | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoScrollbar | ImGuiWindowFlags_NoCollapse; switch (m_menuState) { case eMenuState::inactive: break; case eMenuState::pendingControllerListRequest: case eMenuState::pendingControllerStartRequest: case eMenuState::pendingTrackerListRequest: case eMenuState::pendingTrackerStartRequest: { ImGui::SetNextWindowPos(ImVec2(ImGui::GetIO().DisplaySize.x / 2.f - k_panel_width / 2.f, 20.f)); ImGui::SetNextWindowSize(ImVec2(k_panel_width, 80)); ImGui::Begin(k_window_title, nullptr, window_flags); ImGui::Text("Pending device initialization..."); if (ImGui::Button("Return to Tracker Settings")) { request_exit_to_app_stage(AppStage_TrackerSettings::APP_STAGE_NAME); } ImGui::End(); } break; case eMenuState::failedControllerListRequest: case eMenuState::failedControllerStartRequest: case eMenuState::failedTrackerListRequest: case eMenuState::failedTrackerStartRequest: { ImGui::SetNextWindowPosCenter(); ImGui::SetNextWindowSize(ImVec2(k_panel_width, 180)); ImGui::Begin(k_window_title, nullptr, window_flags); switch (m_menuState) { case eMenuState::failedControllerListRequest: ImGui::Text("Failed controller list retrieval!"); break; case eMenuState::failedControllerStartRequest: ImGui::Text("Failed controller stream start!"); break; case eMenuState::failedTrackerListRequest: ImGui::Text("Failed tracker list retrieval!"); break; case eMenuState::failedTrackerStartRequest: ImGui::Text("Failed tracker stream start!"); break; } if (ImGui::Button("Ok")) { request_exit_to_app_stage(AppStage_TrackerSettings::APP_STAGE_NAME); } if (ImGui::Button("Return to Main Menu")) { request_exit_to_app_stage(AppStage_MainMenu::APP_STAGE_NAME); } ImGui::End(); } break; case eMenuState::verifyTrackers: { ImGui::SetNextWindowPos(ImVec2(ImGui::GetIO().DisplaySize.x / 2.f - 500.f / 2.f, 20.f)); ImGui::SetNextWindowSize(ImVec2(500.f, (m_trackerViews.size() > 0) ? 150.f : 100.f)); ImGui::Begin(k_window_title, nullptr, window_flags); ImGui::Text("Verify that your tracking cameras can see the tracking origin"); ImGui::Separator(); if (m_trackerViews.size() > 1) { ImGui::Text("Tracker #%d", m_renderTrackerIndex + 1); if (ImGui::Button("Previous Tracker")) { go_previous_tracker(); } ImGui::SameLine(); if (ImGui::Button("Next Tracker")) { go_next_tracker(); } } if (ImGui::Button("Looks Good!")) { setState(eMenuState::calibrateWithMat); } if (ImGui::Button("Hmm... Something is wrong.")) { request_exit_to_app_stage(AppStage_TrackerSettings::APP_STAGE_NAME); } ImGui::End(); } break; case eMenuState::calibrateWithMat: { m_pCalibrateWithMat->renderUI(); } break; case eMenuState::testTracking: { ImGui::SetNextWindowPos(ImVec2(20.f, 20.f)); ImGui::SetNextWindowSize(ImVec2(250.f, 260.f)); ImGui::Begin("Test Tracking", nullptr, window_flags); // display per tracker UI for (t_tracker_state_map_iterator iter = m_trackerViews.begin(); iter != m_trackerViews.end(); ++iter) { const ClientTrackerView *trackerView = iter->second.trackerView; ImGui::PushItemWidth(125.f); if (does_tracker_see_any_controller(trackerView)) { ImGui::Text("Tracker #%d: OK", trackerView->getTrackerId()); } else { ImGui::Text("Tracker #%d: FAIL", trackerView->getTrackerId()); } ImGui::PopItemWidth(); ImGui::SameLine(); ImGui::PushItemWidth(100.f); ImGui::PushID(trackerView->getTrackerId()); if (ImGui::Button("Tracker Video")) { m_renderTrackerIter = iter; setState(eMenuState::showTrackerVideo); } ImGui::PopID(); ImGui::PopItemWidth(); } ImGui::Separator(); if (!m_bSkipCalibration) { ImGui::Text("Calibration Complete"); if (ImGui::Button("Redo Calibration")) { setState(eMenuState::verifyTrackers); } } if (ImGui::Button("Exit")) { m_app->setAppStage(AppStage_TrackerSettings::APP_STAGE_NAME); } ImGui::End(); } break; case eMenuState::showTrackerVideo: { ImGui::SetNextWindowPos(ImVec2(20.f, 20.f)); ImGui::SetNextWindowSize(ImVec2(200, 100)); ImGui::Begin("Tracker Video Feed", nullptr, window_flags); ImGui::Text("Tracker ID: #%d", m_renderTrackerIter->second.trackerView->getTrackerId()); if (ImGui::Button("Return")) { setState(eMenuState::testTracking); } ImGui::End(); } break; case eMenuState::calibrateStepFailed: { ImGui::SetNextWindowPosCenter(); ImGui::SetNextWindowSize(ImVec2(k_panel_width, 130)); ImGui::Begin(k_window_title, nullptr, window_flags); ImGui::Text("Calibration Failed"); if (ImGui::Button("Restart Calibration")) { setState(eMenuState::verifyTrackers); } if (ImGui::Button("Cancel")) { m_app->setAppStage(AppStage_TrackerSettings::APP_STAGE_NAME); } ImGui::End(); } break; default: assert(0 && "unreachable"); } }
void AppStage_ComputeTrackerPoses::renderUI() { const float k_panel_width = 300.f; const char *k_window_title = "Compute Tracker Poses"; const ImGuiWindowFlags window_flags = ImGuiWindowFlags_ShowBorders | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoScrollbar | ImGuiWindowFlags_NoCollapse; switch (m_menuState) { case eMenuState::inactive: break; case eMenuState::pendingControllerListRequest: case eMenuState::pendingControllerStartRequest: case eMenuState::pendingTrackerListRequest: case eMenuState::pendingTrackerStartRequest: { ImGui::SetNextWindowPos(ImVec2(ImGui::GetIO().DisplaySize.x / 2.f - k_panel_width / 2.f, 20.f)); ImGui::SetNextWindowSize(ImVec2(k_panel_width, 80)); ImGui::Begin(k_window_title, nullptr, window_flags); ImGui::Text("Pending device initialization..."); if (ImGui::Button("Return to Tracker Settings")) { request_exit_to_app_stage(AppStage_TrackerSettings::APP_STAGE_NAME); } ImGui::End(); } break; case eMenuState::failedControllerListRequest: case eMenuState::failedControllerStartRequest: case eMenuState::failedTrackerListRequest: case eMenuState::failedTrackerStartRequest: { ImGui::SetNextWindowPosCenter(); ImGui::SetNextWindowSize(ImVec2(k_panel_width, 180)); ImGui::Begin(k_window_title, nullptr, window_flags); switch (m_menuState) { case eMenuState::failedControllerListRequest: ImGui::Text("Failed controller list retrieval!"); break; case eMenuState::failedControllerStartRequest: ImGui::Text("Failed controller stream start!"); break; case eMenuState::failedTrackerListRequest: ImGui::Text("Failed tracker list retrieval!"); break; case eMenuState::failedTrackerStartRequest: ImGui::Text("Failed tracker stream start!"); break; } if (ImGui::Button("Ok")) { request_exit_to_app_stage(AppStage_TrackerSettings::APP_STAGE_NAME); } if (ImGui::Button("Return to Main Menu")) { request_exit_to_app_stage(AppStage_MainMenu::APP_STAGE_NAME); } ImGui::End(); } break; case eMenuState::verifyHMD: { ImGui::SetNextWindowPosCenter(); ImGui::SetNextWindowSize(ImVec2(k_panel_width, 180)); ImGui::Begin(k_window_title, nullptr, window_flags); if (m_hmdView != nullptr) { ImGui::Text("Verify that your HMD is tracking correctly"); ImGui::Separator(); if (ImGui::Button("Looks Good!")) { setState(eMenuState::verifyTrackers); } if (ImGui::Button("Hmm... Something is wrong.")) { request_exit_to_app_stage(AppStage_HMDSettings::APP_STAGE_NAME); } } ImGui::End(); } break; case eMenuState::verifyTrackers: { // const int trackerCount = static_cast<int>(m_trackerViews.size()); ImGui::SetNextWindowPos(ImVec2(ImGui::GetIO().DisplaySize.x / 2.f - 500.f / 2.f, 20.f)); ImGui::SetNextWindowSize(ImVec2(500.f, (m_trackerViews.size() > 0) ? 150.f : 100.f)); ImGui::Begin(k_window_title, nullptr, window_flags); ImGui::Text("Verify that your tracking cameras can see the tracking origin"); ImGui::Separator(); if (m_trackerViews.size() > 1) { ImGui::Text("Tracker #%d", m_renderTrackerIndex + 1); if (ImGui::Button("Previous Tracker")) { go_previous_tracker(); } ImGui::SameLine(); if (ImGui::Button("Next Tracker")) { go_next_tracker(); } } if (ImGui::Button("Looks Good!")) { setState(eMenuState::selectCalibrationType); } if (ImGui::Button("Hmm... Something is wrong.")) { request_exit_to_app_stage(AppStage_TrackerSettings::APP_STAGE_NAME); } ImGui::End(); } break; case eMenuState::selectCalibrationType: { ImGui::SetNextWindowPosCenter(); ImGui::SetNextWindowSize(ImVec2(k_panel_width, 130)); ImGui::Begin(k_window_title, nullptr, window_flags); ImGui::Text("Select a camera pose estimation method"); if (m_hmdView != nullptr && ImGui::Button("Attach PSMove To HMD")) { setState(eMenuState::calibrateWithHMD); } if (ImGui::Button("Use Calibration Mat")) { setState(eMenuState::calibrateWithMat); } if (ImGui::Button("Cancel")) { m_app->setAppStage(AppStage_TrackerSettings::APP_STAGE_NAME); } ImGui::End(); } break; case eMenuState::calibrateWithHMD: { m_pCalibrateWithHMD->renderUI(); } break; case eMenuState::calibrateWithMat: { m_pCalibrateWithMat->renderUI(); } break; case eMenuState::testTracking: { ImGui::SetNextWindowPos(ImVec2(ImGui::GetIO().DisplaySize.x / 2.f - k_panel_width / 2.f, 20.f)); ImGui::SetNextWindowSize(ImVec2(k_panel_width, 130)); ImGui::Begin(k_window_title, nullptr, window_flags); ImGui::Text("Calibration Complete"); if (ImGui::Button("Redo Calibration")) { setState(eMenuState::selectCalibrationType); } if (ImGui::Button("Exit")) { m_app->setAppStage(AppStage_TrackerSettings::APP_STAGE_NAME); } ImGui::End(); } break; case eMenuState::calibrateStepFailed: { ImGui::SetNextWindowPosCenter(); ImGui::SetNextWindowSize(ImVec2(k_panel_width, 130)); ImGui::Begin(k_window_title, nullptr, window_flags); ImGui::Text("Calibration Failed"); if (ImGui::Button("Restart Calibration")) { setState(eMenuState::selectCalibrationType); } if (ImGui::Button("Cancel")) { m_app->setAppStage(AppStage_TrackerSettings::APP_STAGE_NAME); } ImGui::End(); } break; default: assert(0 && "unreachable"); } }