From a765454abfd6f0dc5e388f501f85f1eabd992f13 Mon Sep 17 00:00:00 2001 From: "k.koide" Date: Tue, 14 Jul 2026 17:09:58 +0900 Subject: [PATCH] auto export map --- include/glim/viewer/offline_viewer.hpp | 3 ++- src/glim/mapping/async_global_mapping.cpp | 1 + src/glim/viewer/offline_viewer.cpp | 25 ++++++++++++++++++++--- 3 files changed, 25 insertions(+), 4 deletions(-) diff --git a/include/glim/viewer/offline_viewer.hpp b/include/glim/viewer/offline_viewer.hpp index 1c2037b0..54aeeac1 100644 --- a/include/glim/viewer/offline_viewer.hpp +++ b/include/glim/viewer/offline_viewer.hpp @@ -14,7 +14,7 @@ namespace glim { class OfflineViewer : public InteractiveViewer { public: - OfflineViewer(const std::string& init_map_path = ""); + OfflineViewer(const std::string& init_map_path = "", const std::string& export_map_path = ""); virtual ~OfflineViewer() override; private: @@ -28,6 +28,7 @@ class OfflineViewer : public InteractiveViewer { private: std::string init_map_path; + std::string export_map_path; std::unique_ptr progress_modal; std::unordered_set imported_shared_libs; diff --git a/src/glim/mapping/async_global_mapping.cpp b/src/glim/mapping/async_global_mapping.cpp index 06f4035e..2469d3af 100644 --- a/src/glim/mapping/async_global_mapping.cpp +++ b/src/glim/mapping/async_global_mapping.cpp @@ -70,6 +70,7 @@ void AsyncGlobalMapping::save(const std::string& path) { gtsam_points::PointCloud::Ptr AsyncGlobalMapping::export_points() { std::lock_guard lock(global_mapping_mutex); logger->info("exporting points"); + logger->info("global_mapping: {}", global_mapping.get() == nullptr); auto points = global_mapping->export_points(); return points; } diff --git a/src/glim/viewer/offline_viewer.cpp b/src/glim/viewer/offline_viewer.cpp index 491561a8..9bc9aa6f 100644 --- a/src/glim/viewer/offline_viewer.cpp +++ b/src/glim/viewer/offline_viewer.cpp @@ -15,7 +15,7 @@ namespace glim { -OfflineViewer::OfflineViewer(const std::string& init_map_path) : init_map_path(init_map_path) {} +OfflineViewer::OfflineViewer(const std::string& init_map_path, const std::string& export_map_path) : init_map_path(init_map_path), export_map_path(export_map_path) {} OfflineViewer::~OfflineViewer() {} @@ -165,6 +165,21 @@ void OfflineViewer::main_menu() { } auto export_result = progress_modal->run("export"); + if (async_global_mapping && !export_map_path.empty()) { + logger->info("Exporting map to {}", export_map_path); + const std::string path = export_map_path; + progress_modal->open("auto_export", [this, path = path](guik::ProgressInterface& progress) { + export_map(progress, path); + return path; + }); + export_map_path.clear(); + } + auto auto_export_result = progress_modal->run("auto_export"); + if (auto_export_result) { + logger->info("Exported map to {}", *auto_export_result); + request_to_terminate = true; + } + // close map if (start_close_map) { if (async_global_mapping) { @@ -188,8 +203,12 @@ std::shared_ptr OfflineViewer::load_map(guik::ProgressInter params.isam2_relinearize_skip = 1; params.isam2_relinearize_thresh = 0.0; - const auto result = pfd::message("Confirm", "Do optimization?", pfd::choice::yes_no).result(); - params.enable_optimization = (result == pfd::button::ok) || (result == pfd::button::yes); + if (!export_map_path.empty()) { + params.enable_optimization = false; + } else { + const auto result = pfd::message("Confirm", "Do optimization?", pfd::choice::yes_no).result(); + params.enable_optimization = (result == pfd::button::ok) || (result == pfd::button::yes); + } logger->info("enable_optimization={}", params.enable_optimization); global_mapping.reset(new glim::GlobalMapping(params));