From 1651c8db6e8333c3a657302282711fda25463198 Mon Sep 17 00:00:00 2001 From: YuSanka <yusanka@gmail.com> Date: Thu, 5 Sep 2019 08:56:49 +0200 Subject: [PATCH] Fixed ColorPrint Legend update if Print preset was changed and model was resliced. --- src/slic3r/GUI/GLCanvas3D.cpp | 22 ++++++++++------------ src/slic3r/GUI/wxExtensions.hpp | 4 +++- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp index fb60f7da1..d4ea57ad8 100644 --- a/src/slic3r/GUI/GLCanvas3D.cpp +++ b/src/slic3r/GUI/GLCanvas3D.cpp @@ -845,22 +845,20 @@ void GLCanvas3D::LegendTexture::fill_color_print_legend_values(const GCodePrevie { auto& config = wxGetApp().preset_bundle->project_config; const std::vector<double>& color_print_values = config.option<ConfigOptionFloats>("colorprint_heights")->values; - const size_t values_cnt = color_print_values.size(); - if (values_cnt > 0) { + + if (!color_print_values.empty()) { std::vector<double> print_zs = canvas.get_current_print_zs(true); - size_t z = 0; - for (size_t i = 0; i < values_cnt; ++i) + for (auto cp_value : color_print_values) { - double prev_z = -1.0; - for ( ; z < print_zs.size(); ++z) - if (fabs(color_print_values[i] - print_zs[z]) < EPSILON) { - prev_z = z > 0 ? print_zs[z - 1] : 0.; - break; - } - if (prev_z < 0) + auto lower_b = std::lower_bound(print_zs.begin(), print_zs.end(), cp_value); + + if (lower_b == print_zs.end()) continue; - cp_legend_values.push_back(std::pair<double, double>(prev_z, color_print_values[i])); + double current_z = *lower_b; + double previous_z = lower_b == print_zs.begin() ? 0.0 : *(--lower_b); + + cp_legend_values.push_back(std::pair<double, double>(previous_z, current_z)); } } } diff --git a/src/slic3r/GUI/wxExtensions.hpp b/src/slic3r/GUI/wxExtensions.hpp index 87acfd97e..e15592046 100644 --- a/src/slic3r/GUI/wxExtensions.hpp +++ b/src/slic3r/GUI/wxExtensions.hpp @@ -720,7 +720,9 @@ public: const wxString& name = wxEmptyString); ~DoubleSlider() {} - // permissible error for layer height + /* For exporting GCode in GCodeWriter is used XYZF_NUM(val) = PRECISION(val, 3) for XYZ values. + * So, let use same value as a permissible error for layer height. + */ static double epsilon() { return 0.0011;} void msw_rescale();