mirror of
https://github.com/wpilibsuite/allwpilib
synced 2026-06-20 00:51:42 +00:00
[sysid] Add SysId (#5672)
The source is copied from this commit:
625ff04784.
This commit is contained in:
80
sysid/src/main/native/cpp/Util.cpp
Normal file
80
sysid/src/main/native/cpp/Util.cpp
Normal file
@@ -0,0 +1,80 @@
|
||||
// Copyright (c) FIRST and other WPILib contributors.
|
||||
// Open Source Software; you can modify and/or share it under the terms of
|
||||
// the WPILib BSD license file in the root directory of this project.
|
||||
|
||||
#include "sysid/Util.h"
|
||||
|
||||
#include <filesystem>
|
||||
#include <stdexcept>
|
||||
|
||||
#include <imgui.h>
|
||||
#include <wpi/raw_ostream.h>
|
||||
|
||||
void sysid::CreateTooltip(const char* text) {
|
||||
ImGui::SameLine();
|
||||
ImGui::TextDisabled(" (?)");
|
||||
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::BeginTooltip();
|
||||
ImGui::PushTextWrapPos(ImGui::GetFontSize() * 35.0f);
|
||||
ImGui::TextUnformatted(text);
|
||||
ImGui::PopTextWrapPos();
|
||||
ImGui::EndTooltip();
|
||||
}
|
||||
}
|
||||
|
||||
void sysid::CreateErrorPopup(bool& isError, std::string_view errorMessage) {
|
||||
if (isError) {
|
||||
ImGui::OpenPopup("Exception Caught!");
|
||||
}
|
||||
|
||||
// Handle exceptions.
|
||||
ImGui::SetNextWindowSize(ImVec2(480.f, 0.0f));
|
||||
if (ImGui::BeginPopupModal("Exception Caught!")) {
|
||||
ImGui::PushTextWrapPos(0.0f);
|
||||
ImGui::TextColored(ImVec4(1.0f, 0.4f, 0.4f, 1.0f), "%s",
|
||||
errorMessage.data());
|
||||
ImGui::PopTextWrapPos();
|
||||
if (ImGui::Button("Close")) {
|
||||
ImGui::CloseCurrentPopup();
|
||||
isError = false;
|
||||
}
|
||||
ImGui::EndPopup();
|
||||
}
|
||||
}
|
||||
|
||||
std::string_view sysid::GetAbbreviation(std::string_view unit) {
|
||||
if (unit == "Meters") {
|
||||
return "m";
|
||||
} else if (unit == "Feet") {
|
||||
return "ft";
|
||||
} else if (unit == "Inches") {
|
||||
return "in";
|
||||
} else if (unit == "Radians") {
|
||||
return "rad";
|
||||
} else if (unit == "Degrees") {
|
||||
return "deg";
|
||||
} else if (unit == "Rotations") {
|
||||
return "rot";
|
||||
} else {
|
||||
throw std::runtime_error("Invalid Unit");
|
||||
}
|
||||
}
|
||||
|
||||
void sysid::SaveFile(std::string_view contents,
|
||||
const std::filesystem::path& path) {
|
||||
// Create the path if it doesn't already exist.
|
||||
std::filesystem::create_directories(path.root_directory());
|
||||
|
||||
// Open a fd_ostream to write to file.
|
||||
std::error_code ec;
|
||||
wpi::raw_fd_ostream ostream{path.string(), ec};
|
||||
|
||||
// Check error code.
|
||||
if (ec) {
|
||||
throw std::runtime_error("Cannot write to file: " + ec.message());
|
||||
}
|
||||
|
||||
// Write contents.
|
||||
ostream << contents;
|
||||
}
|
||||
Reference in New Issue
Block a user