Small refactoring into GLGizmoBase::Grabber

This commit is contained in:
Enrico Turri 2018-10-12 16:18:37 +02:00
parent 76052d33bf
commit 35c7c418e9
2 changed files with 23 additions and 18 deletions

View file

@ -118,7 +118,7 @@ GLGizmoBase::Grabber::Grabber()
color[2] = 1.0f; color[2] = 1.0f;
} }
void GLGizmoBase::Grabber::render(bool hover, const BoundingBoxf3& box) const void GLGizmoBase::Grabber::render(bool hover, float size) const
{ {
float render_color[3]; float render_color[3];
if (hover) if (hover)
@ -130,13 +130,12 @@ void GLGizmoBase::Grabber::render(bool hover, const BoundingBoxf3& box) const
else else
::memcpy((void*)render_color, (const void*)color, 3 * sizeof(float)); ::memcpy((void*)render_color, (const void*)color, 3 * sizeof(float));
render(box, render_color, true); render(size, render_color, true);
} }
void GLGizmoBase::Grabber::render(const BoundingBoxf3& box, const float* render_color, bool use_lighting) const void GLGizmoBase::Grabber::render(float size, const float* render_color, bool use_lighting) const
{ {
float max_size = (float)box.max_size(); float half_size = dragging ? size * SizeFactor * DraggingScaleFactor : size * SizeFactor;
float half_size = dragging ? max_size * SizeFactor * DraggingScaleFactor : max_size * SizeFactor;
half_size = std::max(half_size, MinHalfSize); half_size = std::max(half_size, MinHalfSize);
if (use_lighting) if (use_lighting)
@ -300,15 +299,19 @@ float GLGizmoBase::picking_color_component(unsigned int id) const
void GLGizmoBase::render_grabbers(const BoundingBoxf3& box) const void GLGizmoBase::render_grabbers(const BoundingBoxf3& box) const
{ {
float size = (float)box.max_size();
for (int i = 0; i < (int)m_grabbers.size(); ++i) for (int i = 0; i < (int)m_grabbers.size(); ++i)
{ {
if (m_grabbers[i].enabled) if (m_grabbers[i].enabled)
m_grabbers[i].render((m_hover_id == i), box); m_grabbers[i].render((m_hover_id == i), size);
} }
} }
void GLGizmoBase::render_grabbers_for_picking(const BoundingBoxf3& box) const void GLGizmoBase::render_grabbers_for_picking(const BoundingBoxf3& box) const
{ {
float size = (float)box.max_size();
for (unsigned int i = 0; i < (unsigned int)m_grabbers.size(); ++i) for (unsigned int i = 0; i < (unsigned int)m_grabbers.size(); ++i)
{ {
if (m_grabbers[i].enabled) if (m_grabbers[i].enabled)
@ -316,7 +319,7 @@ void GLGizmoBase::render_grabbers_for_picking(const BoundingBoxf3& box) const
m_grabbers[i].color[0] = 1.0f; m_grabbers[i].color[0] = 1.0f;
m_grabbers[i].color[1] = 1.0f; m_grabbers[i].color[1] = 1.0f;
m_grabbers[i].color[2] = picking_color_component(i); m_grabbers[i].color[2] = picking_color_component(i);
m_grabbers[i].render_for_picking(box); m_grabbers[i].render_for_picking(size);
} }
} }
} }
@ -826,6 +829,8 @@ void GLGizmoScale3D::on_render(const BoundingBoxf3& box) const
::glLineWidth((m_hover_id != -1) ? 2.0f : 1.5f); ::glLineWidth((m_hover_id != -1) ? 2.0f : 1.5f);
float box_max_size = (float)m_box.max_size();
if (m_hover_id == -1) if (m_hover_id == -1)
{ {
// draw connections // draw connections
@ -858,8 +863,8 @@ void GLGizmoScale3D::on_render(const BoundingBoxf3& box) const
::glColor3fv(m_grabbers[0].color); ::glColor3fv(m_grabbers[0].color);
render_grabbers_connection(0, 1); render_grabbers_connection(0, 1);
// draw grabbers // draw grabbers
m_grabbers[0].render(true, m_box); m_grabbers[0].render(true, box_max_size);
m_grabbers[1].render(true, m_box); m_grabbers[1].render(true, box_max_size);
} }
else if ((m_hover_id == 2) || (m_hover_id == 3)) else if ((m_hover_id == 2) || (m_hover_id == 3))
{ {
@ -867,8 +872,8 @@ void GLGizmoScale3D::on_render(const BoundingBoxf3& box) const
::glColor3fv(m_grabbers[2].color); ::glColor3fv(m_grabbers[2].color);
render_grabbers_connection(2, 3); render_grabbers_connection(2, 3);
// draw grabbers // draw grabbers
m_grabbers[2].render(true, m_box); m_grabbers[2].render(true, box_max_size);
m_grabbers[3].render(true, m_box); m_grabbers[3].render(true, box_max_size);
} }
else if ((m_hover_id == 4) || (m_hover_id == 5)) else if ((m_hover_id == 4) || (m_hover_id == 5))
{ {
@ -876,8 +881,8 @@ void GLGizmoScale3D::on_render(const BoundingBoxf3& box) const
::glColor3fv(m_grabbers[4].color); ::glColor3fv(m_grabbers[4].color);
render_grabbers_connection(4, 5); render_grabbers_connection(4, 5);
// draw grabbers // draw grabbers
m_grabbers[4].render(true, m_box); m_grabbers[4].render(true, box_max_size);
m_grabbers[5].render(true, m_box); m_grabbers[5].render(true, box_max_size);
} }
else if (m_hover_id >= 6) else if (m_hover_id >= 6)
{ {
@ -890,7 +895,7 @@ void GLGizmoScale3D::on_render(const BoundingBoxf3& box) const
// draw grabbers // draw grabbers
for (int i = 6; i < 10; ++i) for (int i = 6; i < 10; ++i)
{ {
m_grabbers[i].render(true, m_box); m_grabbers[i].render(true, box_max_size);
} }
} }
} }
@ -1132,7 +1137,7 @@ void GLGizmoMove3D::on_render(const BoundingBoxf3& box) const
::glEnd(); ::glEnd();
// draw grabber // draw grabber
m_grabbers[m_hover_id].render(true, box); m_grabbers[m_hover_id].render(true, box.max_size());
} }
} }

View file

@ -34,11 +34,11 @@ protected:
Grabber(); Grabber();
void render(bool hover, const BoundingBoxf3& box) const; void render(bool hover, float size) const;
void render_for_picking(const BoundingBoxf3& box) const { render(box, color, false); } void render_for_picking(float size) const { render(size, color, false); }
private: private:
void render(const BoundingBoxf3& box, const float* render_color, bool use_lighting) const; void render(float size, const float* render_color, bool use_lighting) const;
void render_face(float half_size) const; void render_face(float half_size) const;
}; };