diff --git a/src/slic3r/GUI/PartPlate.cpp b/src/slic3r/GUI/PartPlate.cpp index 7e4b59767..510885fec 100644 --- a/src/slic3r/GUI/PartPlate.cpp +++ b/src/slic3r/GUI/PartPlate.cpp @@ -640,7 +640,7 @@ void PartPlate::render_logo_texture(GLTexture &logo_texture, const GeometryBuffe } } -void PartPlate::render_logo(bool bottom, bool render_cali) const +void PartPlate::render_logo(bool bottom, bool render_cali) { // render printer custom texture logo if (m_partplate_list->m_logo_texture_filename.empty()) { @@ -707,6 +707,13 @@ void PartPlate::render_logo(bool bottom, bool render_cali) const GL_STATIC_DRAW)); glsafe(::glBindBuffer(GL_ARRAY_BUFFER, 0)); } + if (m_partplate_list && m_partplate_list->m_bed3d && !m_partplate_list->m_bed3d->get_model_filename().empty()) { + auto cur_bed = m_partplate_list->m_bed3d; + auto cur_box = cur_bed->get_model().get_bounding_box().transformed(Geometry::translation_transform(m_origin)); + if ((m_cur_bed_boundingbox.center() - cur_box.center()).norm() > 1.0f) { + set_logo_box_by_bed(cur_box); + } + } if (m_vbo_id != 0 && m_logo_triangles.get_vertices_count() > 0) { render_logo_texture(m_partplate_list->m_logo_texture, m_logo_triangles, bottom, m_vbo_id); } @@ -2539,6 +2546,7 @@ void PartPlate::generate_logo_polygon(ExPolygon &logo_polygon, const BoundingBox void PartPlate::set_logo_box_by_bed(const BoundingBoxf3& box) { if (box.defined) { + m_cur_bed_boundingbox = box; ExPolygon logo_poly; generate_logo_polygon(logo_poly, box); if (!m_logo_triangles.set_from_triangles(triangulate_expolygon_2f(logo_poly, NORMALS_UP), GROUND_Z + 0.02f)) { @@ -2720,7 +2728,8 @@ bool PartPlate::set_shape(const Pointfs& shape, const Pointfs& exclude_areas, Ve ; } if (m_partplate_list && m_partplate_list->m_bed3d && !m_partplate_list->m_bed3d->get_model_filename().empty()) { - set_logo_box_by_bed(m_partplate_list->m_bed3d->get_model().get_bounding_box()); + auto cur_bed = m_partplate_list->m_bed3d; + set_logo_box_by_bed(cur_bed->get_model().get_bounding_box().transformed(Geometry::translation_transform(m_origin))); } ExPolygon poly; diff --git a/src/slic3r/GUI/PartPlate.hpp b/src/slic3r/GUI/PartPlate.hpp index 9479c7d2d..3f22fdbf0 100644 --- a/src/slic3r/GUI/PartPlate.hpp +++ b/src/slic3r/GUI/PartPlate.hpp @@ -121,6 +121,7 @@ private: Pointfs m_exclude_area; BoundingBoxf3 m_bounding_box; BoundingBoxf3 m_extended_bounding_box; + BoundingBoxf3 m_cur_bed_boundingbox; mutable std::vector m_exclude_bounding_box; mutable BoundingBoxf3 m_grabber_box; Transform3d m_grabber_trans_matrix; @@ -186,7 +187,7 @@ private: void calc_vertex_for_icons(int index, GeometryBuffer &buffer); void calc_vertex_for_icons_background(int icon_count, GeometryBuffer &buffer); void render_background(bool force_default_color = false) const; - void render_logo(bool bottom, bool render_cali = true) const; + void render_logo(bool bottom, bool render_cali = true); void render_logo_texture(GLTexture& logo_texture, const GeometryBuffer& logo_buffer, bool bottom, unsigned int vbo_id) const; void render_exclude_area(bool force_default_color) const; //void render_background_for_picking(const float* render_color) const; diff --git a/src/slic3r/GUI/Tab.cpp b/src/slic3r/GUI/Tab.cpp index 7a7b5ce25..25a794263 100644 --- a/src/slic3r/GUI/Tab.cpp +++ b/src/slic3r/GUI/Tab.cpp @@ -5513,6 +5513,9 @@ wxSizer* TabPrinter::create_bed_shape_widget(wxWindow* parent) } load_key_value("bed_custom_texture", custom_texture); update_changed_ui(); + if (custom_texture == "") { + wxGetApp().plater()->get_partplate_list().update_logo_texture_filename(""); + } } else { const std::vector &shape = dlg.get_shape(); const std::string & custom_texture = dlg.get_custom_texture();