int main()

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();
    }
}