Follow-up to previous commits on gizmo grabbers picking (use of centralized static constant for ids and added comments)

This commit is contained in:
Enrico Turri 2019-03-15 12:07:25 +01:00
parent ef939905b1
commit bc3036d777
3 changed files with 11 additions and 5 deletions

View file

@ -6294,7 +6294,7 @@ void GLCanvas3D::_picking_pass() const
else else
{ {
m_hover_volume_id = -1; m_hover_volume_id = -1;
m_gizmos.set_hover_id(inside && volume_id <= 254 * 255 * 255 ? (254 * 255 * 255 - volume_id) : -1); m_gizmos.set_hover_id(inside && volume_id <= GLGizmoBase::BASE_ID ? (GLGizmoBase::BASE_ID - volume_id) : -1);
} }
_update_volumes_hover_state(); _update_volumes_hover_state();

View file

@ -246,18 +246,17 @@ void GLGizmoBase::update(const UpdateData& data, const GLCanvas3D::Selection& se
std::array<float, 3> GLGizmoBase::picking_color_component(unsigned int id) const std::array<float, 3> GLGizmoBase::picking_color_component(unsigned int id) const
{ {
// Starting value for id to avoid clashing with id used by GLVolumes
static const unsigned int BASE = 254 * 255 * 255;
static const float INV_255 = 1.0f / 255.0f; static const float INV_255 = 1.0f / 255.0f;
id = BASE - id; id = BASE_ID - id;
if (m_group_id > -1) if (m_group_id > -1)
id -= m_group_id; id -= m_group_id;
// color components are encoded to match the calculation of volume_id made into GLCanvas3D::_picking_pass()
return std::array<float, 3> { (float)((id >> 0) & 0xff) * INV_255, // red return std::array<float, 3> { (float)((id >> 0) & 0xff) * INV_255, // red
(float)((id >> 8) & 0xff) * INV_255, // green (float)((id >> 8) & 0xff) * INV_255, // green
(float)((id >> 16)& 0xff) * INV_255}; // blue (float)((id >> 16) & 0xff) * INV_255 }; // blue
} }
void GLGizmoBase::render_grabbers(const BoundingBoxf3& box) const void GLGizmoBase::render_grabbers(const BoundingBoxf3& box) const

View file

@ -35,6 +35,11 @@ class ImGuiWrapper;
class GLGizmoBase class GLGizmoBase
{ {
public:
// Starting value for ids to avoid clashing with ids used by GLVolumes
// (254 is choosen to leave some space for forward compatibility)
static const unsigned int BASE_ID = 255 * 255 * 254;
protected: protected:
struct Grabber struct Grabber
{ {
@ -175,6 +180,8 @@ protected:
virtual void on_render_input_window(float x, float y, float bottom_limit, const GLCanvas3D::Selection& selection) {} virtual void on_render_input_window(float x, float y, float bottom_limit, const GLCanvas3D::Selection& selection) {}
#endif // ENABLE_IMGUI #endif // ENABLE_IMGUI
// Returns the picking color for the given id, based on the BASE_ID constant
// No check is made for clashing with other picking color (i.e. GLVolumes)
std::array<float, 3> picking_color_component(unsigned int id) const; std::array<float, 3> picking_color_component(unsigned int id) const;
void render_grabbers(const BoundingBoxf3& box) const; void render_grabbers(const BoundingBoxf3& box) const;
void render_grabbers(float size) const; void render_grabbers(float size) const;