image_framework_ymj/include/open3d/visualization/visualizer/ViewControlWithEditing.h

75 lines
2.3 KiB
C
Raw 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 "open3d/visualization/visualizer/ViewControl.h"
namespace open3d {
namespace visualization {
class ViewControlWithEditing : public ViewControl {
public:
enum EditingMode {
FreeMode = 0,
OrthoPositiveX = 1,
OrthoNegativeX = 2,
OrthoPositiveY = 3,
OrthoNegativeY = 4,
OrthoPositiveZ = 5,
OrthoNegativeZ = 6,
};
public:
virtual ~ViewControlWithEditing() {}
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 SetEditingMode(EditingMode mode);
std::string GetStatusString() const;
EditingMode GetEditingMode() const { return editing_mode_; };
void ToggleEditingX() {
if (editing_mode_ == EditingMode::OrthoPositiveX) {
SetEditingMode(EditingMode::OrthoNegativeX);
} else {
SetEditingMode(EditingMode::OrthoPositiveX);
}
}
void ToggleEditingY() {
if (editing_mode_ == EditingMode::OrthoPositiveY) {
SetEditingMode(EditingMode::OrthoNegativeY);
} else {
SetEditingMode(EditingMode::OrthoPositiveY);
}
}
void ToggleEditingZ() {
if (editing_mode_ == EditingMode::OrthoPositiveZ) {
SetEditingMode(EditingMode::OrthoNegativeZ);
} else {
SetEditingMode(EditingMode::OrthoPositiveZ);
}
}
void ToggleLocking() { is_view_locked_ = !is_view_locked_; }
bool IsLocked() const { return is_view_locked_; }
protected:
EditingMode editing_mode_ = FreeMode;
ViewParameters view_status_backup_;
bool is_view_locked_ = false;
};
} // namespace visualization
} // namespace open3d