int main()

in code/cpp/tools/generate_octomap_samples/main.cpp [19:114]


int main (int argc, const char** argv) {

    //
    // parse input arguments
    //

    args::ArgumentParser parser("generate_octomap_samples", "");

    args::HelpFlag               help                     (parser, "__DUMMY__",            "Display this help menu", {'h', "help"});
    args::ValueFlag<std::string> octomap_file_arg         (parser, "OCTOMAP_FILE",         "octomap_file",           {"octomap_file"},         args::Options::Required);
    args::ValueFlag<std::string> query_positions_file_arg (parser, "QUERY_POSITIONS_FILE", "query_positions_file",   {"query_positions_file"}, args::Options::Required);
    args::ValueFlag<std::string> output_file_arg          (parser, "OUTPUT_FILE",          "output_file",            {"output_file"},          args::Options::Required);
    args::Flag                   silent_arg               (parser, "__DUMMY__",            "silent",                 {"silent"});

    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 octomap_file         = args::get(octomap_file_arg);
    auto query_positions_file = args::get(query_positions_file_arg);
    auto output_file          = args::get(output_file_arg);
    auto silent               = args::get(silent_arg);

    arma::mat query_positions;

    if (!silent) {
        std::cout << "[HYPERSIM: GENERATE_OCTOMAP_SAMPLES] Begin..." << std::endl;
    }

    //
    // load input data
    //

    octomap::OcTree octree_octomap(octomap_file);
    query_positions.load(query_positions_file, arma::hdf5_binary_trans);

    assert(query_positions.n_cols == 3);

    //
    // perform octomap queries
    //

    if (!silent) {
        std::cout << "[HYPERSIM: GENERATE_OCTOMAP_SAMPLES] Performing Octomap queries..." << std::endl;
    }

    arma::ivec occupancy_samples = arma::ones<arma::ivec>(query_positions.n_rows) * -3;

    for (int i = 0; i < query_positions.n_rows; i++) {
        arma::vec query_position = query_positions.row(i).t();
        if (query_position.is_finite()) {
            auto node_octomap = octree_octomap.search(octomap::point3d(query_positions(i,0), query_positions(i,1), query_positions(i,2)));
            if (node_octomap != nullptr) {
                if (node_octomap->getOccupancy() <= octree_octomap.getOccupancyThres()) {
                    occupancy_samples(i) = 0;
                } else {
                    occupancy_samples(i) = 1;
                }
            } else {
                occupancy_samples(i) = -1;
            }
        } else {
            occupancy_samples(i) = -2;
        }
    }

    //
    // save octomap
    //

    if (!silent) {
        std::cout << "[HYPERSIM: GENERATE_OCTOMAP_SAMPLES] Saving Octomap query results..." << std::endl;
    }

    occupancy_samples.save(output_file, arma::hdf5_binary_trans);

    if (!silent) {
        std::cout << "[HYPERSIM: GENERATE_OCTOMAP_SAMPLES] Finished." << std::endl;
    }

    return 0;
}