1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
|
// ----------------------------------------------------------------------------
// - Open3D: www.open3d.org -
// ----------------------------------------------------------------------------
// Copyright (c) 2018-2024 www.open3d.org
// SPDX-License-Identifier: MIT
// ----------------------------------------------------------------------------
#include "open3d/Open3D.h"
#include "tools/ManuallyAlignPointCloud/AlignmentSession.h"
namespace open3d {
class VisualizerForAlignment : public visualization::Visualizer {
public:
VisualizerForAlignment(visualization::VisualizerWithEditing &source,
visualization::VisualizerWithEditing &target,
double voxel_size = -1.0,
double max_correspondence_distance = -1.0,
bool with_scaling = true,
bool use_dialog = true,
const std::string &polygon_filename = "",
const std::string &directory = "")
: source_visualizer_(source),
target_visualizer_(target),
voxel_size_(voxel_size),
max_correspondence_distance_(max_correspondence_distance),
with_scaling_(with_scaling),
use_dialog_(use_dialog),
polygon_filename_(polygon_filename),
default_directory_(directory) {}
~VisualizerForAlignment() override {}
public:
void PrintVisualizerHelp() override;
bool AddSourceAndTarget(std::shared_ptr<geometry::PointCloud> source,
std::shared_ptr<geometry::PointCloud> target);
protected:
void KeyPressCallback(GLFWwindow *window,
int key,
int scancode,
int action,
int mods) override;
bool SaveSessionToFile(const std::string &filename);
bool LoadSessionFromFile(const std::string &filename);
bool AlignWithManualAnnotation();
void PrintTransformation();
void EvaluateAlignmentAndSave(const std::string &filename);
protected:
visualization::VisualizerWithEditing &source_visualizer_;
visualization::VisualizerWithEditing &target_visualizer_;
double voxel_size_ = -1.0;
double max_correspondence_distance_ = -1.0;
bool with_scaling_ = true;
bool use_dialog_ = true;
Eigen::Matrix4d transformation_ = Eigen::Matrix4d::Identity();
std::string polygon_filename_ = "";
std::shared_ptr<geometry::PointCloud> source_copy_ptr_;
std::shared_ptr<geometry::PointCloud> target_copy_ptr_;
AlignmentSession alignment_session_;
std::string default_directory_;
};
} // namespace open3d
|