10 #include <Eigen/src/Core/Transpose.h>
16 namespace visualization {
35 GeometryHandle axes,
const std::vector<GeometryHandle>& objects) {}
41 Eigen::Vector3f axis = -dy * x_axis + dx * y_axis;
42 axis = axis.normalized();
44 Eigen::AngleAxisf rot_matrix(theta, axis);
49 for (
auto o : transforms_at_mouse_down_) {
52 t.fromPositionOrientationScale(t.translation(),
53 rot_matrix * t.rotation(),
54 Eigen::Vector3f(1, 1, 1));
65 for (
auto o : transforms_at_mouse_down_) {
68 t.fromPositionOrientationScale(t.translation(),
69 rot_matrix * t.rotation(),
70 Eigen::Vector3f(1, 1, 1));
81 for (
auto o : transforms_at_mouse_down_) {
88 Eigen::Vector3f new_trans = t.translation() + world_move;
89 t.fromPositionOrientationScale(new_trans, t.rotation(),
90 Eigen::Vector3f(1, 1, 1));
95 t.translate(world_move);
105 for (
auto o : transforms_at_mouse_down_) {
107 Eigen::Vector3f new_trans = t.translation() + world_move;
108 t.fromPositionOrientationScale(new_trans, t.rotation(),
109 Eigen::Vector3f(1, 1, 1));
113 t.translate(world_move);
114 UpdateBoundingBox(t);
118 using Transform4 = Eigen::Transform<double, 3, Eigen::Affine>;
119 Transform4 change = t.cast<
double>();
133 transforms_at_mouse_down_.clear();
137 for (
const auto& m : models) {
138 transforms_at_mouse_down_[m] = scene->GetGeometryTransform(m);
143 if (!is_axes_visible_)
153 if (!is_axes_visible_)
virtual Eigen::Vector3d GetMaxBound() const override
Returns max bounds for geometry coordinates.
virtual Eigen::Vector3d GetMinBound() const override
Returns min bounds for geometry coordinates.
virtual Eigen::Vector3d GetCenter() const override
Returns the center of the geometry coordinates.
virtual Eigen::Vector3f GetUpVector() const =0
virtual Eigen::Vector3f GetLeftVector() const =0
Eigen::Transform< float, 3, Eigen::Affine > Transform
virtual Eigen::Vector3f GetForwardVector() const =0
std::vector< std::string > GetGeometries()
float CalcRotateRadians(int dx, int dy)
void SetMouseDownInfo(const Camera::Transform &matrix, const Eigen::Vector3f ¢er_of_rotation)
Eigen::Vector3f center_of_rotation_
virtual void SetBoundingBox(const ccBBox &bounds)
float CalcDollyDist(float dy, DragType drag_type, const Camera::Transform &matrix)
Camera::Transform matrix_at_mouse_down_
float CalcRotateZRadians(int dx, int dy)
Eigen::Vector3f center_of_rotation_at_mouse_down_
void SetModel(GeometryHandle axes, const std::vector< GeometryHandle > &objects)
void StartMouseDrag() override
void Pan(int dx, int dy) override
void UpdateMouseDragUI() override
void Dolly(float dy, DragType drag_type) override
void Rotate(int dx, int dy) override
virtual ~ModelInteractorLogic()
void RotateZ(int dx, int dy) override
Rotates about the forward axis of the matrix.
ModelInteractorLogic(CloudViewerScene *scene, Camera *camera, double min_far_plane)
void EndMouseDrag() override
void SetBoundingBox(const ccBBox &bounds) override
void UpdateCameraFarPlane()
Eigen::Vector3f CalcPanVectorWorld(int dx, int dy)
virtual bool GeometryIsVisible(const std::string &object_name)=0
virtual Transform GetGeometryTransform(const std::string &object_name)=0
virtual void SetGeometryTransform(const std::string &object_name, const Transform &transform)=0
virtual void ShowGeometry(const std::string &object_name, bool show)=0
const std::string kAxisObjectName("__axis__")
Generic file read and write utility for python interface.