50namespace gizmo_layout {
53constexpr auto isSizeHandle(GizmoHandle handle)
noexcept ->
bool {
54 return handle >= GizmoHandle::size_neg_x && handle <= GizmoHandle::size_pos_z;
58constexpr auto sizeHandleAxis(GizmoHandle handle)
noexcept ->
int {
59 return (
static_cast<int>(handle) -
static_cast<int>(GizmoHandle::size_neg_x)) / 2;
63constexpr auto sizeHandleSign(GizmoHandle handle)
noexcept ->
float {
64 return (
static_cast<int>(handle) -
static_cast<int>(GizmoHandle::size_neg_x)) % 2 == 0 ? -1.0f : 1.0f;
70constexpr float k_shaft_length = 0.8f;
71constexpr float k_shaft_half_size = 0.02f;
72constexpr float k_head_length = 0.25f;
73constexpr float k_head_half_size = 0.06f;
77constexpr float k_plane_size = 0.2f;
78constexpr float k_center_half_size = 0.06f;
82constexpr float k_center_hit_radius = 0.12f;
85constexpr float k_ring_radius = 0.9f;
87constexpr int k_ring_segments = 48;
90constexpr float k_scale_head_half_size = 0.07f;
92constexpr float k_size_dot_half_size = 0.05f;
93constexpr float k_size_dot_hit_radius = 0.09f;
94constexpr float k_min_collider_extent = 0.01f;
97inline auto ringBasis(
const glm::vec3& axis) -> std::pair<glm::vec3, glm::vec3> {
98 const glm::vec3 reference = std::abs(glm::dot(axis, glm::vec3(0, 0, 1))) > 0.99f ? glm::vec3(1, 0, 0) : glm::vec3(0, 0, 1);
99 const glm::vec3 u = glm::normalize(glm::cross(axis, reference));
100 const glm::vec3 v = glm::cross(axis, u);
auto ringBasis(const glm::vec3 &axis) -> std::pair< glm::vec3, glm::vec3 >
Deterministic in-plane basis (u,v) perpendicular to axis.
Definition gizmo_layout.hpp:97
constexpr float k_axis_hit_radius
Hit tolerances, in the same gizmo-local unit space as the geometry above.
Definition gizmo_layout.hpp:81
GizmoTool
Mirrors editor.WorkspaceViewModel.GizmoTool / proto SetGizmoTool - 0 Select, 1 Translate,...
Definition gizmo_layout.hpp:21
GizmoHandle
Which part of the active gizmo a ray/click is interacting with, axis_x/y/z and center are reused acro...
Definition gizmo_layout.hpp:32
constexpr float k_plane_offset
Plane-handle quads sit near the origin, offset along each of the plane two axes.
Definition gizmo_layout.hpp:76
constexpr float k_screen_size
world-units of gizmo size per world-unit of camera distance
Definition gizmo_layout.hpp:67
constexpr float k_ring_thickness
band width, used for both rendering and hit-testing
Definition gizmo_layout.hpp:86