Files
ViewDesignEngine/include/vde/core/transform.h
T

27 lines
972 B
C++

#pragma once
#include "vde/core/point.h"
#include <Eigen/Geometry>
namespace vde::core {
using Transform3D = Eigen::Transform<double, 3, Eigen::Affine>;
inline Transform3D translate(const Vector3D& v) {
return Transform3D(Eigen::Translation<double, 3>(v));
}
inline Transform3D translate(double x, double y, double z) {
return translate(Vector3D(x, y, z));
}
inline Transform3D rotate(const Vector3D& axis, double angle_rad) {
return Transform3D(Eigen::AngleAxis<double>(angle_rad, axis.normalized()));
}
inline Transform3D rotate_x(double rad) { return rotate(Vector3D::UnitX(), rad); }
inline Transform3D rotate_y(double rad) { return rotate(Vector3D::UnitY(), rad); }
inline Transform3D rotate_z(double rad) { return rotate(Vector3D::UnitZ(), rad); }
inline Transform3D scale(double sx, double sy, double sz) {
return Transform3D(Eigen::Scaling(sx, sy, sz));
}
inline Transform3D scale(double s) { return scale(s, s, s); }
} // namespace vde::core