Skip to content
Snippets Groups Projects

WIP: save/load poses from file

Closed Sebastian Hahta requested to merge feature/poses into master
7 files
+ 126
14
Compare changes
  • Side-by-side
  • Inline
Files
7
#include "camera.hpp"
#include "statistics.hpp"
#include <ftl/file.hpp>
#include "../views/camera3d.hpp"
#include <ftl/rgbd/capabilities.hpp>
#include <ftl/streams/renderer.hpp>
@@ -18,6 +20,8 @@
#include <loguru.hpp>
// ==== Camera =================================================================
using ftl::gui2::Camera;
using ftl::codecs::Channel;
using ftl::rgbd::Capability;
@@ -31,6 +35,17 @@ void Camera::init() {
overlay_ = std::unique_ptr<ftl::overlay::Overlay>
(ftl::create<ftl::overlay::Overlay>(this, "overlay"));
try {
ftl::file::unpack(file::config_dir() / "poses.bin", poses_);
for (const auto& pose : poses_) {
ftl::operators::Poser::add(pose, frame_id_);
}
LOG(INFO) << "Poses loaded from file (" << poses_.size() << " items)";
}
catch (msgpack::insufficient_bytes&) {
LOG(INFO) << "No poses loaded from file";
}
}
void Camera::update(double delta) {
@@ -585,7 +600,7 @@ void Camera::setCursor(int x, int y) {
void Camera::setOriginToCursor() {
using ftl::calibration::transform::inverse;
// Check for valid cursor
/*if (cursor_normal_.norm() == 0.0f) return;
float cursor_length = (cursor_target_ - cursor_pos_).norm();
@@ -617,17 +632,17 @@ void Camera::setOriginToCursor() {
}
}
cursor_target_ = Eigen::Vector3f(0.0f,0.0f,0.0f);
cursor_target_ = Eigen::Vector3f(0.0f,0.0f,0.0f);
cursor_pos_ = Eigen::Vector3f(0.0f,0.0f,0.0f);
cursor_normal_ = Eigen::Vector3f(0.0f,0.0f,0.0f);
cursor_normal_ = Eigen::Vector3f(0.0f,0.0f,0.0f);
cursor_ = _cursor();
}
void Camera::resetOrigin() {
cursor_target_ = Eigen::Vector3f(0.0f,0.0f,0.0f);
cursor_target_ = Eigen::Vector3f(0.0f,0.0f,0.0f);
cursor_pos_ = Eigen::Vector3f(0.0f,0.0f,0.0f);
cursor_normal_ = Eigen::Vector3f(0.0f,0.0f,0.0f);
cursor_ = _cursor();
cursor_ = _cursor();
if (movable_) {
auto *rend = io->feed()->getRenderer(frame_id_);
@@ -656,11 +671,14 @@ void Camera::resetOrigin() {
void Camera::saveCursorToPoser() {
ftl::codecs::Shape3D shape;
shape.type = ftl::codecs::Shape3DType::CURSOR;
shape.id = cursor_save_id_++;
shape.id = poses_.size();
shape.label = std::string("Cursor") + std::to_string(shape.id);
shape.pose = cursor().inverse().cast<float>();
shape.size = Eigen::Vector3f(0.1f,0.1f,0.1f);
auto k = (*(io->feed()->getFrameSet(frame_id_.frameset())))[frame_id_.source()].name();
poses_.push_back(shape);
ftl::file::pack(ftl::file::config_dir() / "poses.bin", poses_);
ftl::operators::Poser::add(shape, frame_id_);
}
Loading