image_framework_ymj/include/open3d/utility/ProgressReporters.h

77 lines
2.3 KiB
C
Raw Permalink Normal View History

2024-12-06 16:25:16 +08:00
// ----------------------------------------------------------------------------
// - Open3D: www.open3d.org -
// ----------------------------------------------------------------------------
// Copyright (c) 2018-2023 www.open3d.org
// SPDX-License-Identifier: MIT
// ----------------------------------------------------------------------------
#pragma once
#include <functional>
#include <string>
#include "open3d/utility/ProgressBar.h"
namespace open3d {
namespace utility {
/// Progress reporting through update_progress(double percent) function.
/// If you have a set number of items to process (or bytes to load),
/// CountingProgressReporter will convert that to percentages (you still have to
/// specify how many items you have, of course)
class CountingProgressReporter {
public:
CountingProgressReporter(std::function<bool(double)> f) {
update_progress_ = f;
}
void SetTotal(int64_t total) { total_ = total; }
bool Update(int64_t count) {
if (!update_progress_) return true;
last_count_ = count;
double percent = 0;
if (total_ > 0) {
if (count < total_) {
percent = count * 100.0 / total_;
} else {
percent = 100.0;
}
}
return CallUpdate(percent);
}
void Finish() { CallUpdate(100); }
// for compatibility with ProgressBar
void operator++() { Update(last_count_ + 1); }
private:
bool CallUpdate(double percent) {
if (update_progress_) {
return update_progress_(percent);
}
return true;
}
std::function<bool(double)> update_progress_;
int64_t total_ = -1;
int64_t last_count_ = -1;
};
/// update_progress(double percent) functor for ProgressBar
struct ConsoleProgressUpdater {
ConsoleProgressUpdater(const std::string &progress_info,
bool active = false)
: progress_bar_(100, progress_info, active) {}
bool operator()(double pct) {
while (last_pct_ < pct) {
++last_pct_;
++progress_bar_;
}
return true;
}
private:
utility::ProgressBar progress_bar_;
int last_pct_ = 0;
};
} // namespace utility
} // namespace open3d