From e2fd5f74e54fef2bc4a0d0497c3a704e14ad8629 Mon Sep 17 00:00:00 2001 From: supermerill Date: Mon, 4 Feb 2019 16:38:14 +0100 Subject: [PATCH] bugfix wip custom print png --- src/slic3r/GUI/ConfigWizard.cpp | 9 +- src/slic3r/GUI/GLCanvas3D.cpp | 164 +++++++++++++++----------------- src/slic3r/GUI/GLCanvas3D.hpp | 3 +- 3 files changed, 82 insertions(+), 94 deletions(-) diff --git a/src/slic3r/GUI/ConfigWizard.cpp b/src/slic3r/GUI/ConfigWizard.cpp index 42b35fec8ad..77d17ff52ae 100644 --- a/src/slic3r/GUI/ConfigWizard.cpp +++ b/src/slic3r/GUI/ConfigWizard.cpp @@ -262,7 +262,7 @@ PageWelcome::PageWelcome(ConfigWizard *parent, bool check_first_variant) : const size_t num_other_vendors = vendors.size() - (vendor_prusa != vendors.cend()); auto *sizer = new wxBoxSizer(wxHORIZONTAL); - auto *other_vendors = new wxButton(others_buttons, wxID_ANY, _(L("Other vendors"))); + auto *other_vendors = new wxButton(others_buttons, wxID_ANY, _(L("Presets printers"))); other_vendors->Enable(num_other_vendors > 0); auto *custom_setup = new wxButton(others_buttons, wxID_ANY, _(L("Custom setup"))); @@ -321,7 +321,7 @@ PageUpdate::PageUpdate(ConfigWizard *parent) : PageVendors::PageVendors(ConfigWizard *parent) : ConfigWizardPage(parent, _(L("Other Vendors")), _(L("Other Vendors"))) { - append_text(_(L("Pick another vendor supported by Slic3r PE:"))); + append_text(_(L("Pick another vendor supported by Slic3r++:"))); auto boldfont = wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT); boldfont.SetWeight(wxFONTWEIGHT_BOLD); @@ -355,7 +355,7 @@ PageVendors::PageVendors(ConfigWizard *parent) : }); append(vendor_picker); - for (PrinterPicker *picker : pickers) { this->append(picker); } + for (PrinterPicker *picker : pickers) { this->append(picker); } } void PageVendors::on_page_set() @@ -722,7 +722,8 @@ void ConfigWizard::priv::set_page(ConfigWizardPage *page) void ConfigWizard::priv::layout_fit() { q->Layout(); - q->Fit(); + q->Fit(); + q->SetSize(wxRect(0, 0, 1200, 700)); } void ConfigWizard::priv::enable_next(bool enable) diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp index 0c1952a7718..61afa1d2c74 100644 --- a/src/slic3r/GUI/GLCanvas3D.cpp +++ b/src/slic3r/GUI/GLCanvas3D.cpp @@ -424,7 +424,7 @@ void GLCanvas3D::Bed::render(float theta, bool useVBOs, float scale_factor) cons { _render_prusa("sl1", theta, useVBOs); } - else if (m_type == "MK2") + else { _render_custom(m_type, theta, useVBOs); } @@ -448,7 +448,7 @@ void GLCanvas3D::Bed::render(float theta, float scale_factor) const } else if (m_type == "MK2") { - _render_custom(m_type, theta); + _render_default(m_type, theta); } } #endif // ENABLE_PRINT_BED_MODELS @@ -548,6 +548,7 @@ void GLCanvas3D::Bed::_render_prusa(const std::string &key, float theta, bool us void GLCanvas3D::Bed::_render_prusa(const std::string &key, float theta) const #endif // ENABLE_PRINT_BED_MODELS { + std::cout << "render prusa?\n"; std::string tex_path = resources_dir() + "/icons/bed/" + key; #if ENABLE_PRINT_BED_MODELS std::string model_path = resources_dir() + "/models/" + key; @@ -563,7 +564,7 @@ void GLCanvas3D::Bed::_render_prusa(const std::string &key, float theta) const { if (!m_top_texture.load_from_file(filename, true)) { - _render_custom(); + _render_default(); return; } #if ENABLE_ANISOTROPIC_FILTER_ON_BED_TEXTURES @@ -581,7 +582,7 @@ void GLCanvas3D::Bed::_render_prusa(const std::string &key, float theta) const { if (!m_bottom_texture.load_from_file(filename, true)) { - _render_custom(); + _render_default(); return; } #if ENABLE_ANISOTROPIC_FILTER_ON_BED_TEXTURES @@ -653,64 +654,95 @@ void GLCanvas3D::Bed::_render_prusa(const std::string &key, float theta) const } } +void GLCanvas3D::Bed::_render_default() const +{ + m_top_texture.reset(); + m_bottom_texture.reset(); + + unsigned int triangles_vcount = m_triangles.get_vertices_count(); + if (triangles_vcount > 0) { + ::glEnable(GL_LIGHTING); + ::glDisable(GL_DEPTH_TEST); + + ::glEnable(GL_BLEND); + ::glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + + ::glEnableClientState(GL_VERTEX_ARRAY); + + ::glColor4f(0.35f, 0.35f, 0.35f, 0.4f); + ::glNormal3d(0.0f, 0.0f, 1.0f); + ::glVertexPointer(3, GL_FLOAT, 0, (GLvoid*)m_triangles.get_vertices()); + ::glDrawArrays(GL_TRIANGLES, 0, (GLsizei)triangles_vcount); + + // draw grid + unsigned int gridlines_vcount = m_gridlines.get_vertices_count(); + + // we need depth test for grid, otherwise it would disappear when looking the object from below + ::glEnable(GL_DEPTH_TEST); + ::glLineWidth(3.0f * m_scale_factor); + ::glColor4f(0.2f, 0.2f, 0.2f, 0.4f); + ::glVertexPointer(3, GL_FLOAT, 0, (GLvoid*)m_gridlines.get_vertices()); + ::glDrawArrays(GL_LINES, 0, (GLsizei)gridlines_vcount); + + ::glDisableClientState(GL_VERTEX_ARRAY); + + ::glDisable(GL_BLEND); + ::glDisable(GL_LIGHTING); + } + +} + #if ENABLE_PRINT_BED_MODELS void GLCanvas3D::Bed::_render_custom(const std::string &key, float theta, bool useVBOs) const #else void GLCanvas3D::Bed::_render_custom(const std::string &key, float theta) const #endif // ENABLE_PRINT_BED_MODELS { - m_top_texture.reset(); - m_bottom_texture.reset(); - - //init textures + std::string tex_path = resources_dir() + "/icons/bed/" + key; +#if ENABLE_PRINT_BED_MODELS + std::string model_path = resources_dir() + "/models/" + key; +#endif // ENABLE_PRINT_BED_MODELS #if ENABLE_ANISOTROPIC_FILTER_ON_BED_TEXTURES GLfloat max_anisotropy = 0.0f; ::glGetFloatv(GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT, &max_anisotropy); #endif // ENABLE_ANISOTROPIC_FILTER_ON_BED_TEXTURES - std::string tex_path = resources_dir() + "/icons/bed/" + key; - bool has_top_texture = false; - bool has_bot_texture = false; - if (!key.empty()) { - std::string filename_tex_top = tex_path + "_top.png"; - if ((m_top_texture.get_id() == 0) || (m_top_texture.get_source() != filename_tex_top)) { - has_top_texture = m_top_texture.load_from_file(filename_tex_top, true); + + std::string filename = tex_path + "_top.png"; + if ((m_top_texture.get_id() == 0) || (m_top_texture.get_source() != filename)) { + if (!m_top_texture.load_from_file(filename, true)) { + _render_default(); + return; + } #if ENABLE_ANISOTROPIC_FILTER_ON_BED_TEXTURES - if (has_top_texture && max_anisotropy > 0.0f) { - ::glBindTexture(GL_TEXTURE_2D, m_top_texture.get_id()); - ::glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAX_ANISOTROPY_EXT, max_anisotropy); - ::glBindTexture(GL_TEXTURE_2D, 0); - } + if (max_anisotropy > 0.0f) { + ::glBindTexture(GL_TEXTURE_2D, m_top_texture.get_id()); + ::glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAX_ANISOTROPY_EXT, max_anisotropy); + ::glBindTexture(GL_TEXTURE_2D, 0); + } #endif // ENABLE_ANISOTROPIC_FILTER_ON_BED_TEXTURES - } else { - has_top_texture = true; + } + + filename = tex_path + "_bottom.png"; + if ((m_bottom_texture.get_id() == 0) || (m_bottom_texture.get_source() != filename)) { + if (!m_bottom_texture.load_from_file(filename, true)) { + _render_default(); + return; } - std::string filename_tex_bot = tex_path + "_bottom.png"; - if ((m_bottom_texture.get_id() == 0) || (m_bottom_texture.get_source() != filename_tex_bot)) { - has_bot_texture = m_bottom_texture.load_from_file(filename_tex_bot, true); #if ENABLE_ANISOTROPIC_FILTER_ON_BED_TEXTURES - if (has_bot_texture && max_anisotropy > 0.0f) { - ::glBindTexture(GL_TEXTURE_2D, m_bottom_texture.get_id()); - ::glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAX_ANISOTROPY_EXT, max_anisotropy); - ::glBindTexture(GL_TEXTURE_2D, 0); - } -#endif // ENABLE_ANISOTROPIC_FILTER_ON_BED_TEXTURES - } else { - has_bot_texture = true; + if (max_anisotropy > 0.0f) { + ::glBindTexture(GL_TEXTURE_2D, m_bottom_texture.get_id()); + ::glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAX_ANISOTROPY_EXT, max_anisotropy); + ::glBindTexture(GL_TEXTURE_2D, 0); } +#endif // ENABLE_ANISOTROPIC_FILTER_ON_BED_TEXTURES } - bool has_texture = (theta <= 90.0f) ? has_top_texture : has_bot_texture; #if ENABLE_PRINT_BED_MODELS - if (theta <= 90.0f) { - std::string model_path = resources_dir() + "/models/" + key; - std::string filename_model = model_path + "_bed.stl"; - if ((m_model.get_filename() != filename_model) && m_model.init_from_file(filename_model, useVBOs)) { + if (theta <= 90.0f) { + filename = model_path + "_bed.stl"; + if ((m_model.get_filename() != filename) && m_model.init_from_file(filename, useVBOs)) { Vec3d offset = m_bounding_box.center() - Vec3d(0.0, 0.0, 0.1 + 0.5 * m_model.get_bounding_box().size()(2)); - if (key == "mk2") - offset.y() += 15. / 2.; - else if (key == "mk3") - offset += Vec3d(0., (19. - 8.) / 2., 2.); m_model.center_around(offset); } @@ -723,7 +755,7 @@ void GLCanvas3D::Bed::_render_custom(const std::string &key, float theta) const #endif // ENABLE_PRINT_BED_MODELS unsigned int triangles_vcount = m_triangles.get_vertices_count(); - if (has_texture && triangles_vcount > 0) { + if (triangles_vcount > 0) { ::glEnable(GL_DEPTH_TEST); ::glDepthMask(GL_FALSE); @@ -732,21 +764,18 @@ void GLCanvas3D::Bed::_render_custom(const std::string &key, float theta) const ::glEnable(GL_TEXTURE_2D); ::glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE); - + ::glEnableClientState(GL_VERTEX_ARRAY); ::glEnableClientState(GL_TEXTURE_COORD_ARRAY); - if (theta > 90.0f) ::glFrontFace(GL_CW); ::glBindTexture(GL_TEXTURE_2D, (theta <= 90.0f) ? (GLuint)m_top_texture.get_id() : (GLuint)m_bottom_texture.get_id()); - ::glVertexPointer(3, GL_FLOAT, 0, (GLvoid*)m_triangles.get_vertices()); ::glTexCoordPointer(2, GL_FLOAT, 0, (GLvoid*)m_triangles.get_tex_coords()); ::glDrawArrays(GL_TRIANGLES, 0, (GLsizei)triangles_vcount); - if (theta > 90.0f) ::glFrontFace(GL_CCW); @@ -758,47 +787,6 @@ void GLCanvas3D::Bed::_render_custom(const std::string &key, float theta) const ::glDisable(GL_BLEND); ::glDepthMask(GL_TRUE); - - } - - - - triangles_vcount = m_triangles.get_vertices_count(); - if (triangles_vcount > 0) { - ::glEnable(GL_LIGHTING); - ::glDisable(GL_DEPTH_TEST); - - ::glEnable(GL_BLEND); - ::glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - - - - - ::glEnableClientState(GL_VERTEX_ARRAY); - - - ::glColor4f(0.35f, 0.35f, 0.35f, 0.4f); - ::glNormal3d(0.0f, 0.0f, 1.0f); - - - ::glVertexPointer(3, GL_FLOAT, 0, (GLvoid*)m_triangles.get_vertices()); - - ::glDrawArrays(GL_TRIANGLES, 0, (GLsizei)triangles_vcount); - - // draw grid - unsigned int gridlines_vcount = m_gridlines.get_vertices_count(); - - // we need depth test for grid, otherwise it would disappear when looking the object from below - ::glEnable(GL_DEPTH_TEST); - ::glLineWidth(3.0f * m_scale_factor); - ::glColor4f(0.2f, 0.2f, 0.2f, 0.4f); - ::glVertexPointer(3, GL_FLOAT, 0, (GLvoid*)m_gridlines.get_vertices()); - ::glDrawArrays(GL_LINES, 0, (GLsizei)gridlines_vcount); - - ::glDisableClientState(GL_VERTEX_ARRAY); - - ::glDisable(GL_BLEND); - ::glDisable(GL_LIGHTING); } } diff --git a/src/slic3r/GUI/GLCanvas3D.hpp b/src/slic3r/GUI/GLCanvas3D.hpp index e7bfec0dfc5..2d5f7ac6e52 100644 --- a/src/slic3r/GUI/GLCanvas3D.hpp +++ b/src/slic3r/GUI/GLCanvas3D.hpp @@ -251,13 +251,12 @@ class GLCanvas3D std::string _detect_type() const; #if ENABLE_PRINT_BED_MODELS void _render_prusa(const std::string &key, float theta, bool useVBOs) const; - void _render_custom() const { _render_custom("", 0, 0); } void _render_custom(const std::string &key, float theta, bool useVBOs) const; #else void _render_prusa(const std::string &key, float theta) const; - void _render_custom() const { _render_custom("", 0); } void _render_custom(const std::string &key, float theta) const; #endif // ENABLE_PRINT_BED_MODELS + void _render_default() const; static bool _are_equal(const Pointfs& bed_1, const Pointfs& bed_2); };