in code/cpp/tools/scene_annotation_tool/main.cpp [214:320]
int main(int argc, const char** argv) {
assert(filesystem_exists("fa-solid-900.ttf"));
//
// parse input arguments
//
args::ArgumentParser parser("scene_annotation_tool", "");
args::HelpFlag help (parser, "__DUMMY__", "Display this help menu", {'h', "help"});
args::ValueFlag<std::string> semantic_label_descs_file_arg (parser, "SEMANTIC_LABEL_DESCS_FILE", "semantic_label_descs_file", {"semantic_label_descs_file"});
args::ValueFlag<std::string> scene_dir_arg (parser, "SCENE_DIR", "scene_dir", {"scene_dir"});
args::ValueFlag<std::string> camera_name_arg (parser, "CAMERA_NAME", "camera_name", {"camera_name"});
args::ValueFlag<int> frame_id_arg (parser, "FRAME_ID", "frame_id", {"frame_id"});
args::ValueFlag<int> fov_x_degrees_arg (parser, "FOV_X_DEGREES", "fov_x_degrees", {"fov_x_degrees"});
args::ValueFlag<int> width_pixels_arg (parser, "WIDTH_PIXELS", "width_pixels", {"width_pixels"});
args::ValueFlag<int> height_pixels_arg (parser, "HEIGHT_PIXELS", "height_pixels", {"height_pixels"});
try {
parser.ParseCLI(argc, argv);
} catch (args::Completion e) {
std::cout << parser;
return 1;
} catch (args::Help e) {
std::cout << parser;
return 1;
} catch (args::ParseError e) {
std::cout << parser;
std::cout << std::endl << std::endl << std::endl << e.what() << std::endl << std::endl << std::endl;
return 1;
} catch (args::RequiredError e) {
std::cout << parser;
std::cout << std::endl << std::endl << std::endl << e.what() << std::endl << std::endl << std::endl;
return 1;
}
auto semantic_label_descs_file = args::get(semantic_label_descs_file_arg);
auto scene_dir = args::get(scene_dir_arg);
auto camera_name = args::get(camera_name_arg);
auto frame_id = args::get(frame_id_arg);
auto fov_x_degrees = args::get(fov_x_degrees_arg);
auto width_pixels = args::get(width_pixels_arg);
auto height_pixels = args::get(height_pixels_arg);
if (semantic_label_descs_file != "") {
g_cmd_semantic_descs_csv_file = semantic_label_descs_file;
}
assert(filesystem_exists(g_cmd_semantic_descs_csv_file));
if (scene_dir != "") {
g_cmd_scene_dir = scene_dir;
g_cmd_camera_name = camera_name;
g_cmd_frame_id = frame_id;
if (fov_x_degrees > 0) {
g_cmd_fov_x_degrees = fov_x_degrees;
}
if (width_pixels > 0) {
g_cmd_width_pixels = width_pixels;
}
if (height_pixels > 0) {
g_cmd_height_pixels = height_pixels;
}
assert(g_cmd_camera_name != "");
assert(g_cmd_frame_id >= 0);
}
assert(g_cmd_fov_x_degrees > 0);
assert(g_cmd_width_pixels > 0);
assert(g_cmd_height_pixels > 0);
// global embree data
assert(RTC_MAX_INSTANCE_LEVEL_COUNT == 1);
g_rtc_device = rtcNewDevice(nullptr);
assert(rtcGetDeviceError(nullptr) == RTC_ERROR_NONE);
// global viewer data
g_viewer.callback_mouse_down = &mouse_down;
g_viewer.callback_mouse_up = &mouse_up;
g_viewer.callback_mouse_move = &mouse_move;
g_viewer.callback_mouse_scroll = &mouse_scroll;
g_viewer.callback_key_down = &key_down;
g_viewer.callback_key_up = &key_up;
g_viewer.callback_key_pressed = &key_pressed;
g_viewer.callback_pre_draw = &pre_draw;
g_viewer.callback_post_draw = &post_draw;
igl::opengl::glfw::imgui::ImGuiMenu menu;
g_viewer.plugins.push_back(&menu);
menu.callback_draw_viewer_window = [&]() {};
menu.callback_draw_viewer_menu = [&]() {};
menu.callback_draw_custom_window = &draw_custom_window;
initialize_tool_state();
g_viewer.launch(true, false, "Hypersim Scene Annotation Tool", g_cmd_width_pixels, g_cmd_height_pixels);
if (g_scene_loaded) {
unload_scene();
}
}