@@ -1651,6 +1651,30 @@ namespace lfs::vis {
16511651 rm->updateSettings (settings);
16521652 }
16531653
1654+ void SceneManager::finalizeDatasetSceneLoad (
1655+ const std::filesystem::path& dataset_path,
1656+ const std::filesystem::path& scene_path,
1657+ const lfs::core::events::state::SceneLoaded::Type type,
1658+ const size_t num_gaussians,
1659+ const int checkpoint_iteration) {
1660+ {
1661+ std::lock_guard<std::mutex> lock (state_mutex_);
1662+ content_type_ = ContentType::Dataset;
1663+ dataset_path_ = dataset_path;
1664+ }
1665+
1666+ state::SceneLoaded{
1667+ .scene = nullptr ,
1668+ .path = scene_path,
1669+ .type = type,
1670+ .num_gaussians = num_gaussians,
1671+ .checkpoint_iteration = checkpoint_iteration}
1672+ .emit ();
1673+
1674+ python::set_application_scene (&scene_);
1675+ syncDatasetCameraFrustumsToRenderSettings ();
1676+ }
1677+
16541678 std::expected<void , std::string> SceneManager::applyLoadedDataset (
16551679 const std::filesystem::path& path,
16561680 const lfs::core::param::TrainingParameters& params,
@@ -1685,25 +1709,11 @@ namespace lfs::vis {
16851709 services ().trainerOrNull ()->setTrainer (std::move (trainer));
16861710 }
16871711
1688- {
1689- std::lock_guard<std::mutex> lock (state_mutex_);
1690- content_type_ = ContentType::Dataset;
1691- dataset_path_ = path;
1692- }
1693-
16941712 const size_t num_gaussians = scene_.getTrainingModelGaussianCount ();
16951713 const auto * point_cloud = scene_.getVisiblePointCloud ();
16961714 const size_t num_points = point_cloud ? point_cloud->size () : 0 ;
16971715
1698- state::SceneLoaded{
1699- .scene = nullptr ,
1700- .path = path,
1701- .type = state::SceneLoaded::Type::Dataset,
1702- .num_gaussians = num_gaussians}
1703- .emit ();
1704-
1705- python::set_application_scene (&scene_);
1706- syncDatasetCameraFrustumsToRenderSettings ();
1716+ finalizeDatasetSceneLoad (path, path, state::SceneLoaded::Type::Dataset, num_gaussians);
17071717
17081718 if ((num_gaussians > 0 || num_points > 0 ) && services ().trainerOrNull () && services ().trainerOrNull ()->getTrainer ()) {
17091719 ui::PointCloudModeChanged{.enabled = true , .voxel_size = DEFAULT_VOXEL_SIZE}.emit ();
@@ -1782,13 +1792,6 @@ namespace lfs::vis {
17821792 throw std::runtime_error (" No trainer manager available" );
17831793 }
17841794
1785- // Update content state
1786- {
1787- std::lock_guard<std::mutex> lock (state_mutex_);
1788- content_type_ = ContentType::Dataset;
1789- dataset_path_ = path;
1790- }
1791-
17921795 // Get info from scene
17931796 const size_t num_gaussians = scene_.getTrainingModelGaussianCount ();
17941797 const auto * point_cloud = scene_.getVisiblePointCloud ();
@@ -1798,15 +1801,7 @@ namespace lfs::vis {
17981801 LOG_INFO (" Dataset loaded successfully - {} images, {} initial points/gaussians" ,
17991802 num_cameras, num_gaussians > 0 ? num_gaussians : num_points);
18001803
1801- state::SceneLoaded{
1802- .scene = nullptr ,
1803- .path = path,
1804- .type = state::SceneLoaded::Type::Dataset,
1805- .num_gaussians = num_gaussians}
1806- .emit ();
1807-
1808- python::set_application_scene (&scene_);
1809- syncDatasetCameraFrustumsToRenderSettings ();
1804+ finalizeDatasetSceneLoad (path, path, state::SceneLoaded::Type::Dataset, num_gaussians);
18101805
18111806 state::DatasetLoadCompleted{
18121807 .path = path,
@@ -2029,29 +2024,19 @@ namespace lfs::vis {
20292024 services ().trainerOrNull ()->setScene (&scene_);
20302025 services ().trainerOrNull ()->setTrainerFromCheckpoint (std::move (trainer), checkpoint_iteration);
20312026
2032- {
2033- std::lock_guard<std::mutex> lock (state_mutex_);
2034- content_type_ = ContentType::Dataset;
2035- dataset_path_ = checkpoint_params.dataset .data_path ;
2036- }
2037-
20382027 // Keep the viewer's editable state aligned with the restored trainer state.
20392028 if (auto * param_mgr = services ().paramsOrNull ()) {
20402029 param_mgr->importTrainingParams (checkpoint_params);
20412030 }
20422031
20432032 LOG_INFO (" Checkpoint loaded: {} gaussians, iteration {}" , num_gaussians, checkpoint_iteration);
20442033
2045- state::SceneLoaded{
2046- .scene = nullptr ,
2047- .path = path,
2048- .type = state::SceneLoaded::Type::Checkpoint,
2049- .num_gaussians = num_gaussians,
2050- .checkpoint_iteration = checkpoint_iteration}
2051- .emit ();
2052-
2053- python::set_application_scene (&scene_);
2054- syncDatasetCameraFrustumsToRenderSettings ();
2034+ finalizeDatasetSceneLoad (
2035+ checkpoint_params.dataset .data_path ,
2036+ path,
2037+ state::SceneLoaded::Type::Checkpoint,
2038+ num_gaussians,
2039+ checkpoint_iteration);
20552040
20562041 ui::PointCloudModeChanged{.enabled = false , .voxel_size = DEFAULT_VOXEL_SIZE}.emit ();
20572042 selectNode (MODEL_NAME);
0 commit comments