// Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. // Associated header // #include "k4aimuwindow.h" // System headers // #include #include // Library headers // #include "k4aimgui_all.h" // Project headers // #include "k4aviewererrormanager.h" #include "k4awindowsizehelpers.h" using namespace k4aviewer; namespace { constexpr float AccelMinRange = 5.0f; constexpr float AccelMaxRange = 100.0f; constexpr float AccelDefaultRange = 20.0f; constexpr float GyroMinRange = 5.0f; constexpr float GyroMaxRange = 50.0f; constexpr float GyroDefaultRange = 20.0f; } // namespace K4AImuWindow::K4AImuWindow(std::string &&title, std::shared_ptr graphDataGenerator) : m_graphDataGenerator(std::move(graphDataGenerator)), m_title(std::move(title)), m_accGraph("Accelerometer", "X", "Y", "Z", "m/s/s", AccelMinRange, AccelMaxRange, AccelDefaultRange), m_gyroGraph("Gyroscope", " Roll", "Pitch", " Yaw", "Rad/s", GyroMinRange, GyroMaxRange, GyroDefaultRange) { } void K4AImuWindow::Show(K4AWindowPlacementInfo placementInfo) { if (!m_failed && m_graphDataGenerator->IsFailed()) { K4AViewerErrorManager::Instance().SetErrorStatus(m_title + ": data source failed!"); m_failed = true; } if (m_failed) { ImGui::Text("Data source failed!"); return; } K4AImuGraphDataGenerator::GraphReader reader = m_graphDataGenerator->GetGraphData(); // Sizing math // ImGuiStyle &style = ImGui::GetStyle(); ImVec2 graphSize = placementInfo.Size; graphSize.x -= 2 * style.WindowPadding.x; graphSize.y -= GetTitleBarHeight(); // Title bar graphSize.y -= 2 * style.WindowPadding.y; // Window internal padding graphSize.y -= ImGui::GetTextLineHeightWithSpacing(); // Sensor temp label constexpr int numSeparators = 2; constexpr int itemSpacingPerSeparator = 2; graphSize.y -= numSeparators * itemSpacingPerSeparator * style.ItemSpacing.y; // Separators constexpr int graphCount = 2; graphSize.y /= graphCount; // Actually draw the widgets // m_accGraph.Show(graphSize, reader.Data->AccData, reader.Data->StartOffset, reader.Data->AccTimestamp); ImGui::Separator(); m_gyroGraph.Show(graphSize, reader.Data->GyroData, reader.Data->StartOffset, reader.Data->GyroTimestamp); ImGui::Separator(); if (!std::isnan(reader.Data->LastTemperature)) { ImGui::Text("Sensor temperature: %.2f C", static_cast(reader.Data->LastTemperature)); } } const char *K4AImuWindow::GetTitle() const { return m_title.c_str(); }