Render custom bed model on custom beds

This commit is contained in:
Enrico Turri 2019-07-25 09:45:43 +02:00
parent 48dc2bb762
commit 9625fe8f5b
2 changed files with 29 additions and 19 deletions

View file

@ -394,24 +394,7 @@ Bed3D::EType Bed3D::detect_type(const Pointfs& shape) const
void Bed3D::render_prusa(GLCanvas3D& canvas, const std::string& key, bool bottom) const void Bed3D::render_prusa(GLCanvas3D& canvas, const std::string& key, bool bottom) const
{ {
if (!bottom) if (!bottom)
{ render_model(m_custom_model.empty() ? resources_dir() + "/models/" + key + "_bed.stl" : m_custom_model);
std::string filename = m_custom_model.empty() ? resources_dir() + "/models/" + key + "_bed.stl" : m_custom_model;
if ((m_model.get_filename() != filename) && m_model.init_from_file(filename))
{
// move the model a bit down to avoid z-fighting with the texture quad
m_model.set_offset(-0.03 * Vec3d::UnitZ());
// update extended bounding box
calc_bounding_boxes();
}
if (!m_model.get_filename().empty())
{
glsafe(::glEnable(GL_LIGHTING));
m_model.render();
glsafe(::glDisable(GL_LIGHTING));
}
}
render_texture(m_custom_texture.empty() ? resources_dir() + "/icons/bed/" + key + ".svg" : m_custom_texture, bottom, canvas); render_texture(m_custom_texture.empty() ? resources_dir() + "/icons/bed/" + key + ".svg" : m_custom_texture, bottom, canvas);
} }
@ -421,6 +404,7 @@ void Bed3D::render_texture(const std::string& filename, bool bottom, GLCanvas3D&
if (filename.empty()) if (filename.empty())
{ {
m_texture.reset(); m_texture.reset();
render_default();
return; return;
} }
@ -565,14 +549,39 @@ void Bed3D::render_texture(const std::string& filename, bool bottom, GLCanvas3D&
} }
} }
void Bed3D::render_model(const std::string& filename) const
{
if (filename.empty())
return;
if ((m_model.get_filename() != filename) && m_model.init_from_file(filename))
{
// move the model a bit down to avoid z-fighting with the texture quad
m_model.set_offset(-0.03 * Vec3d::UnitZ());
// update extended bounding box
calc_bounding_boxes();
}
if (!m_model.get_filename().empty())
{
glsafe(::glEnable(GL_LIGHTING));
m_model.render();
glsafe(::glDisable(GL_LIGHTING));
}
}
void Bed3D::render_custom(GLCanvas3D& canvas, bool bottom) const void Bed3D::render_custom(GLCanvas3D& canvas, bool bottom) const
{ {
if (m_custom_texture.empty()) if (m_custom_texture.empty() && m_custom_model.empty())
{ {
render_default(); render_default();
return; return;
} }
if (!bottom)
render_model(m_custom_model);
render_texture(m_custom_texture, bottom, canvas); render_texture(m_custom_texture, bottom, canvas);
} }

View file

@ -120,6 +120,7 @@ private:
EType detect_type(const Pointfs& shape) const; EType detect_type(const Pointfs& shape) const;
void render_prusa(GLCanvas3D& canvas, const std::string& key, bool bottom) const; void render_prusa(GLCanvas3D& canvas, const std::string& key, bool bottom) const;
void render_texture(const std::string& filename, bool bottom, GLCanvas3D& canvas) const; void render_texture(const std::string& filename, bool bottom, GLCanvas3D& canvas) const;
void render_model(const std::string& filename) const;
void render_custom(GLCanvas3D& canvas, bool bottom) const; void render_custom(GLCanvas3D& canvas, bool bottom) const;
void render_default() const; void render_default() const;
void reset(); void reset();