diff --git a/src/slic3r/GUI/Gizmos/GLGizmoSimplify.cpp b/src/slic3r/GUI/Gizmos/GLGizmoSimplify.cpp index d61033ec49..1d44aaa25c 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoSimplify.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoSimplify.cpp @@ -91,7 +91,7 @@ void GLGizmoSimplify::on_render_input_window(float x, float y, float bottom_limi m_is_valid_result = false; m_exist_preview = false; init_wireframe(); - + live_preview(); if (change_window_position) { ImVec2 pos = ImGui::GetMousePos(); pos.x -= m_gui_cfg->window_offset_x; @@ -308,9 +308,23 @@ void GLGizmoSimplify::process() if (m_volume == nullptr) return; if (m_volume->mesh().its.indices.empty()) return; size_t count_triangles = m_volume->mesh().its.indices.size(); - if (m_configuration.use_count && - m_configuration.wanted_count >= count_triangles) + // Is neccessary simplification + if ((m_configuration.use_count && m_configuration.wanted_count >= count_triangles) || + (!m_configuration.use_count && m_configuration.max_error <= 0.f)) { + + // Exist different original volume? + if (m_original_its.has_value() && + m_original_its->indices.size() != count_triangles) { + indexed_triangle_set its = *m_original_its; // copy + set_its(its); + } + m_is_valid_result = true; + + // re-render bargraph + set_dirty(); + m_parent.schedule_extra_frame(0); return; + } // when not store original volume store it for cancelation if (!m_original_its.has_value()) { diff --git a/src/slic3r/GUI/Gizmos/GLGizmoSimplify.hpp b/src/slic3r/GUI/Gizmos/GLGizmoSimplify.hpp index 7935123446..21d0933efe 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoSimplify.hpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoSimplify.hpp @@ -95,14 +95,13 @@ private: void fix_count_by_ratio(size_t triangle_count) { - if (decimate_ratio <= 0.f) { + if (decimate_ratio <= 0.f) wanted_count = static_cast(triangle_count); - return; - } else if (decimate_ratio >= 1.f) { + else if (decimate_ratio >= 100.f) wanted_count = 0; - return; - } - wanted_count = static_cast(std::round(triangle_count * (100.f-decimate_ratio) / 100.f)); + else + wanted_count = static_cast(std::round( + triangle_count * (100.f - decimate_ratio) / 100.f)); } } m_configuration;