22Scene::load_scene (std::string
const& base_path)
24 if (base_path.empty())
26 this->basedir = base_path;
33Scene::save_scene (
void)
42Scene::save_bundle (
void)
44 if (this->bundle ==
nullptr || !this->bundle_dirty)
48 this->bundle_dirty =
false;
54Scene::save_views (
void)
56 std::cout <<
"Saving views to MVE files..." << std::flush;
57 for (std::size_t i = 0; i < this->views.size(); ++i)
58 if (this->views[i] !=
nullptr && this->views[i]->is_dirty())
59 this->views[i]->save_view();
60 std::cout <<
" done." << std::endl;
66Scene::is_dirty (
void)
const
68 if (this->bundle_dirty)
71 for (std::size_t i = 0; i < this->views.size(); ++i)
72 if (this->views[i] !=
nullptr && this->views[i]->is_dirty())
81Scene::cache_cleanup (
void)
83 if (this->bundle.use_count() == 1)
86 std::size_t released = 0;
87 std::size_t affected_views = 0;
88 std::size_t total_views = 0;
89 for (std::size_t i = 0; i < this->views.size(); ++i)
91 if (this->views[i] ==
nullptr)
95 std::size_t num = this->views[i]->cache_cleanup();
103 std::cout <<
"Cleanup: Released " << released <<
" embeddings in "
104 << affected_views <<
" of " << total_views <<
" views." << std::endl;
110Scene::get_total_mem_usage (
void)
113 ret += this->get_view_mem_usage();
114 ret += this->get_bundle_mem_usage();
121Scene::get_view_mem_usage (
void)
124 for (std::size_t i = 0; i < this->views.size(); ++i)
125 if (this->views[i] !=
nullptr)
126 ret += this->views[i]->get_byte_size();
133Scene::get_bundle_mem_usage (
void)
135 return (this->bundle !=
nullptr ? this->bundle->get_byte_size() : 0);
141Scene::init_views (
void)
151 views_dir.
scan(views_path);
157 std::sort(views_dir.begin(), views_dir.end());
160 std::cout <<
"Initializing scene with " << views_dir.size()
161 <<
" views..." << std::endl;
166 for (std::size_t i = 0; i < views_dir.size(); ++i)
168 if (views_dir[i].name.size() < 4)
172 View::Ptr view = View::create();
173 view->load_view(views_dir[i].get_absolute_name());
174 temp_list.push_back(view);
175 max_id = std::max(max_id, view->get_id());
178 if (max_id > 5000 && max_id > 2 * (
int)temp_list.size())
183 if (!temp_list.empty())
184 this->views.resize(max_id + 1);
185 for (std::size_t i = 0; i < temp_list.size(); ++i)
187 std::size_t
id = temp_list[i]->get_id();
189 if (this->views[
id] !=
nullptr)
191 std::cout <<
"Warning loading MVE file "
192 << this->views[id]->get_directory() << std::endl
193 <<
" View with ID " <<
id <<
" already present"
194 <<
", skipping file."
199 this->views[id] = temp_list[i];
202 std::cout <<
"Initialized " << temp_list.size()
203 <<
" views (max ID is " << max_id <<
"), took "
210Scene::get_bundle (
void)
212 if (this->bundle ==
nullptr)
217 this->bundle_dirty =
false;
Universal, simple exception class.
virtual const char * what(void) const
Cross-platform high-resolution real-time timer.
std::size_t get_elapsed(void) const
Returns the milli seconds since last reset.
Directory abstraction to scan directory contents.
void scan(std::string const &path)
#define MVE_NAMESPACE_BEGIN
#define MVE_NAMESPACE_END
void save_mve_bundle(Bundle::ConstPtr bundle, std::string const &filename)
TODO: For now refers to save_photosynther_bundle().
Bundle::Ptr load_mve_bundle(std::string const &filename)
TODO: For now refers to load_photosynther_bundle().
std::string join_path(std::string const &path1, std::string const &path2)
Concatenate and canonicalize two paths.
std::string right(std::string const &str, std::size_t chars)
Returns the rightmost 'chars' characters of 'str'.
#define MVE_SCENE_VIEWS_DIR
#define MVE_SCENE_BUNDLE_FILE