calibration_tools_v1.0/lidar_driver/include/open3d/visualization/visualizer/ViewControlWithCustomAnimation.h
2025-02-20 10:45:17 +08:00

89 lines
3.3 KiB
C++

// ----------------------------------------------------------------------------
// - Open3D: www.open3d.org -
// ----------------------------------------------------------------------------
// Copyright (c) 2018-2023 www.open3d.org
// SPDX-License-Identifier: MIT
// ----------------------------------------------------------------------------
#pragma once
#include "open3d/camera/PinholeCameraTrajectory.h"
#include "open3d/visualization/visualizer/ViewControl.h"
#include "open3d/visualization/visualizer/ViewTrajectory.h"
namespace open3d {
namespace visualization {
class ViewControlWithCustomAnimation : public ViewControl {
public:
enum AnimationMode {
FreeMode = 0,
PreviewMode = 1,
PlayMode = 2,
};
public:
virtual ~ViewControlWithCustomAnimation() {}
void Reset() override;
void ChangeFieldOfView(double step) override;
void Scale(double scale) override;
void Rotate(double x, double y, double xo, double yo) override;
void Translate(double x, double y, double xo, double yo) override;
void SetAnimationMode(AnimationMode mode);
void AddKeyFrame();
void UpdateKeyFrame();
void DeleteKeyFrame();
void AddSpinKeyFrames(int num_of_key_frames = 20);
void ClearAllKeyFrames() { view_trajectory_.view_status_.clear(); }
size_t NumOfKeyFrames() const {
return view_trajectory_.view_status_.size();
}
size_t NumOfFrames() const { return view_trajectory_.NumOfFrames(); }
void ToggleTrajectoryLoop() {
if (animation_mode_ == AnimationMode::FreeMode) {
view_trajectory_.is_loop_ = !view_trajectory_.is_loop_;
}
}
void ChangeTrajectoryInterval(int change) {
if (animation_mode_ == AnimationMode::FreeMode) {
view_trajectory_.ChangeInterval(change);
}
}
int GetTrajectoryInterval() const { return view_trajectory_.interval_; }
std::string GetStatusString() const;
void Step(double change);
void GoToFirst();
void GoToLast();
bool CaptureTrajectory(const std::string &filename = "");
bool LoadTrajectoryFromJsonFile(const std::string &filename);
bool LoadTrajectoryFromCameraTrajectory(
const camera::PinholeCameraTrajectory &camera_trajectory);
bool IsPreviewing() {
return animation_mode_ == AnimationMode::PreviewMode;
}
bool IsPlaying() { return animation_mode_ == AnimationMode::PlayMode; }
bool IsPlayingEnd(size_t num) {
return (IsPlaying() && num >= view_trajectory_.NumOfFrames());
}
bool IsValidPinholeCameraTrajectory() const;
protected:
size_t CurrentFrame() const { return (size_t)round(current_frame_); }
size_t CurrentKeyframe() const { return (size_t)round(current_keyframe_); }
double RegularizeFrameIndex(double current_frame,
size_t num_of_frames,
bool is_loop);
void SetViewControlFromTrajectory();
protected:
AnimationMode animation_mode_ = AnimationMode::FreeMode;
ViewTrajectory view_trajectory_;
double current_frame_ = 0.0;
double current_keyframe_ = 0.0;
};
} // namespace visualization
} // namespace open3d